Renderers should receive their style at construction.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 27 Oct 2013 22:54:07 +0000 (22:54 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 27 Oct 2013 22:54:07 +0000 (22:54 +0000)
<https://webkit.org/b/123396>

Pass the RenderStyle to all non-text renderer constructors.
After construction, initializeStyle() must be called (as a stopgap
measure) until we are able to do style-derived initialization
without virtual function calls.

With this change, RenderElement::m_style is never null. Subsequent
patches will add enforcement for this and also make style() return
a RenderStyle&.

I'm adding three FIXME's in this patch:

    - createRendererIfNeeded() calls AnimationController to set up
      the initial style manually instead of asking RenderElement's
      setAnimatedStyle() to do it. This can probably be done in a
      nicer way, but it's not clear yet how.

    - ImageContentData::createRenderer() does a bit of unnecessary
      work. This should be easy to clean up but got too distracting
      to be part of this patch.

    - Document::createRenderTree() creates the RenderView with an
      initial dummy RenderStyle. I've done this because resolving
      the document style assumes we already have a RenderView.

For styleWillChange() implementations to detect that they are
reacting to the initial style, I've added a hasInitializedStyle()
function on RenderElement. This will return false until you've
called initializeStyle() on the renderer. This should go away
along with initializeStyle() eventually.

Reviewed by Antti Koivisto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158097 268f45cc-cd09-0410-ab3c-d52691b4dbfc

346 files changed:
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/Element.cpp
Source/WebCore/dom/Element.h
Source/WebCore/html/BaseButtonInputType.cpp
Source/WebCore/html/BaseButtonInputType.h
Source/WebCore/html/FileInputType.cpp
Source/WebCore/html/FileInputType.h
Source/WebCore/html/HTMLAppletElement.cpp
Source/WebCore/html/HTMLAppletElement.h
Source/WebCore/html/HTMLBRElement.cpp
Source/WebCore/html/HTMLBRElement.h
Source/WebCore/html/HTMLButtonElement.cpp
Source/WebCore/html/HTMLButtonElement.h
Source/WebCore/html/HTMLCanvasElement.cpp
Source/WebCore/html/HTMLCanvasElement.h
Source/WebCore/html/HTMLDetailsElement.cpp
Source/WebCore/html/HTMLDetailsElement.h
Source/WebCore/html/HTMLElement.cpp
Source/WebCore/html/HTMLElement.h
Source/WebCore/html/HTMLFieldSetElement.cpp
Source/WebCore/html/HTMLFieldSetElement.h
Source/WebCore/html/HTMLFrameElement.cpp
Source/WebCore/html/HTMLFrameElement.h
Source/WebCore/html/HTMLFrameSetElement.cpp
Source/WebCore/html/HTMLFrameSetElement.h
Source/WebCore/html/HTMLIFrameElement.cpp
Source/WebCore/html/HTMLIFrameElement.h
Source/WebCore/html/HTMLImageElement.cpp
Source/WebCore/html/HTMLImageElement.h
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HTMLInputElement.h
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/HTMLMediaElement.h
Source/WebCore/html/HTMLMeterElement.cpp
Source/WebCore/html/HTMLMeterElement.h
Source/WebCore/html/HTMLPlugInImageElement.cpp
Source/WebCore/html/HTMLPlugInImageElement.h
Source/WebCore/html/HTMLProgressElement.cpp
Source/WebCore/html/HTMLProgressElement.h
Source/WebCore/html/HTMLSelectElement.cpp
Source/WebCore/html/HTMLSelectElement.h
Source/WebCore/html/HTMLSummaryElement.cpp
Source/WebCore/html/HTMLSummaryElement.h
Source/WebCore/html/HTMLTextAreaElement.cpp
Source/WebCore/html/HTMLTextAreaElement.h
Source/WebCore/html/HTMLVideoElement.cpp
Source/WebCore/html/HTMLVideoElement.h
Source/WebCore/html/HiddenInputType.cpp
Source/WebCore/html/HiddenInputType.h
Source/WebCore/html/ImageInputType.cpp
Source/WebCore/html/ImageInputType.h
Source/WebCore/html/InputType.cpp
Source/WebCore/html/InputType.h
Source/WebCore/html/RangeInputType.cpp
Source/WebCore/html/RangeInputType.h
Source/WebCore/html/SearchInputType.cpp
Source/WebCore/html/SearchInputType.h
Source/WebCore/html/TextFieldInputType.cpp
Source/WebCore/html/TextFieldInputType.h
Source/WebCore/html/shadow/DetailsMarkerControl.cpp
Source/WebCore/html/shadow/DetailsMarkerControl.h
Source/WebCore/html/shadow/MediaControlElements.cpp
Source/WebCore/html/shadow/MediaControlElements.h
Source/WebCore/html/shadow/MeterShadowElement.cpp
Source/WebCore/html/shadow/MeterShadowElement.h
Source/WebCore/html/shadow/ProgressShadowElement.cpp
Source/WebCore/html/shadow/ProgressShadowElement.h
Source/WebCore/html/shadow/SliderThumbElement.cpp
Source/WebCore/html/shadow/SliderThumbElement.h
Source/WebCore/html/shadow/TextControlInnerElements.cpp
Source/WebCore/html/shadow/TextControlInnerElements.h
Source/WebCore/html/track/TextTrackCue.cpp
Source/WebCore/html/track/TextTrackCue.h
Source/WebCore/mathml/MathMLInlineContainerElement.cpp
Source/WebCore/mathml/MathMLInlineContainerElement.h
Source/WebCore/mathml/MathMLMathElement.cpp
Source/WebCore/mathml/MathMLMathElement.h
Source/WebCore/mathml/MathMLTextElement.cpp
Source/WebCore/mathml/MathMLTextElement.h
Source/WebCore/page/FrameView.cpp
Source/WebCore/page/animation/AnimationController.cpp
Source/WebCore/rendering/FlowThreadController.cpp
Source/WebCore/rendering/RenderBlock.cpp
Source/WebCore/rendering/RenderBlock.h
Source/WebCore/rendering/RenderBlockFlow.cpp
Source/WebCore/rendering/RenderBlockFlow.h
Source/WebCore/rendering/RenderBox.cpp
Source/WebCore/rendering/RenderBox.h
Source/WebCore/rendering/RenderBoxModelObject.cpp
Source/WebCore/rendering/RenderBoxModelObject.h
Source/WebCore/rendering/RenderButton.cpp
Source/WebCore/rendering/RenderButton.h
Source/WebCore/rendering/RenderCounter.h
Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h
Source/WebCore/rendering/RenderDetailsMarker.cpp
Source/WebCore/rendering/RenderDetailsMarker.h
Source/WebCore/rendering/RenderElement.cpp
Source/WebCore/rendering/RenderElement.h
Source/WebCore/rendering/RenderEmbeddedObject.cpp
Source/WebCore/rendering/RenderEmbeddedObject.h
Source/WebCore/rendering/RenderFieldset.cpp
Source/WebCore/rendering/RenderFieldset.h
Source/WebCore/rendering/RenderFileUploadControl.cpp
Source/WebCore/rendering/RenderFileUploadControl.h
Source/WebCore/rendering/RenderFlexibleBox.cpp
Source/WebCore/rendering/RenderFlexibleBox.h
Source/WebCore/rendering/RenderFlowThread.cpp
Source/WebCore/rendering/RenderFlowThread.h
Source/WebCore/rendering/RenderFrame.cpp
Source/WebCore/rendering/RenderFrame.h
Source/WebCore/rendering/RenderFrameBase.cpp
Source/WebCore/rendering/RenderFrameBase.h
Source/WebCore/rendering/RenderFrameSet.cpp
Source/WebCore/rendering/RenderFrameSet.h
Source/WebCore/rendering/RenderFullScreen.cpp
Source/WebCore/rendering/RenderFullScreen.h
Source/WebCore/rendering/RenderGrid.cpp
Source/WebCore/rendering/RenderGrid.h
Source/WebCore/rendering/RenderHTMLCanvas.cpp
Source/WebCore/rendering/RenderHTMLCanvas.h
Source/WebCore/rendering/RenderIFrame.cpp
Source/WebCore/rendering/RenderIFrame.h
Source/WebCore/rendering/RenderImage.cpp
Source/WebCore/rendering/RenderImage.h
Source/WebCore/rendering/RenderInline.cpp
Source/WebCore/rendering/RenderInline.h
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderLayer.h
Source/WebCore/rendering/RenderLayerModelObject.cpp
Source/WebCore/rendering/RenderLayerModelObject.h
Source/WebCore/rendering/RenderLineBreak.cpp
Source/WebCore/rendering/RenderLineBreak.h
Source/WebCore/rendering/RenderListBox.cpp
Source/WebCore/rendering/RenderListBox.h
Source/WebCore/rendering/RenderListItem.cpp
Source/WebCore/rendering/RenderListItem.h
Source/WebCore/rendering/RenderListMarker.cpp
Source/WebCore/rendering/RenderListMarker.h
Source/WebCore/rendering/RenderMedia.cpp
Source/WebCore/rendering/RenderMedia.h
Source/WebCore/rendering/RenderMediaControlElements.cpp
Source/WebCore/rendering/RenderMediaControlElements.h
Source/WebCore/rendering/RenderMenuList.cpp
Source/WebCore/rendering/RenderMenuList.h
Source/WebCore/rendering/RenderMeter.cpp
Source/WebCore/rendering/RenderMeter.h
Source/WebCore/rendering/RenderMultiColumnBlock.cpp
Source/WebCore/rendering/RenderMultiColumnBlock.h
Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp
Source/WebCore/rendering/RenderMultiColumnFlowThread.h
Source/WebCore/rendering/RenderMultiColumnSet.cpp
Source/WebCore/rendering/RenderMultiColumnSet.h
Source/WebCore/rendering/RenderNamedFlowFragment.cpp
Source/WebCore/rendering/RenderNamedFlowFragment.h
Source/WebCore/rendering/RenderNamedFlowThread.cpp
Source/WebCore/rendering/RenderNamedFlowThread.h
Source/WebCore/rendering/RenderProgress.cpp
Source/WebCore/rendering/RenderProgress.h
Source/WebCore/rendering/RenderRegion.cpp
Source/WebCore/rendering/RenderRegion.h
Source/WebCore/rendering/RenderRegionSet.cpp
Source/WebCore/rendering/RenderRegionSet.h
Source/WebCore/rendering/RenderReplaced.cpp
Source/WebCore/rendering/RenderReplaced.h
Source/WebCore/rendering/RenderReplica.cpp
Source/WebCore/rendering/RenderReplica.h
Source/WebCore/rendering/RenderRuby.cpp
Source/WebCore/rendering/RenderRuby.h
Source/WebCore/rendering/RenderRubyBase.cpp
Source/WebCore/rendering/RenderRubyBase.h
Source/WebCore/rendering/RenderRubyRun.cpp
Source/WebCore/rendering/RenderRubyRun.h
Source/WebCore/rendering/RenderRubyText.cpp
Source/WebCore/rendering/RenderRubyText.h
Source/WebCore/rendering/RenderScrollbar.cpp
Source/WebCore/rendering/RenderScrollbarPart.cpp
Source/WebCore/rendering/RenderScrollbarPart.h
Source/WebCore/rendering/RenderSearchField.cpp
Source/WebCore/rendering/RenderSearchField.h
Source/WebCore/rendering/RenderSlider.cpp
Source/WebCore/rendering/RenderSlider.h
Source/WebCore/rendering/RenderSnapshottedPlugIn.cpp
Source/WebCore/rendering/RenderSnapshottedPlugIn.h
Source/WebCore/rendering/RenderTable.cpp
Source/WebCore/rendering/RenderTable.h
Source/WebCore/rendering/RenderTableCaption.cpp
Source/WebCore/rendering/RenderTableCaption.h
Source/WebCore/rendering/RenderTableCell.cpp
Source/WebCore/rendering/RenderTableCell.h
Source/WebCore/rendering/RenderTableCol.cpp
Source/WebCore/rendering/RenderTableCol.h
Source/WebCore/rendering/RenderTableRow.cpp
Source/WebCore/rendering/RenderTableRow.h
Source/WebCore/rendering/RenderTableSection.cpp
Source/WebCore/rendering/RenderTableSection.h
Source/WebCore/rendering/RenderTextControl.cpp
Source/WebCore/rendering/RenderTextControl.h
Source/WebCore/rendering/RenderTextControlMultiLine.cpp
Source/WebCore/rendering/RenderTextControlMultiLine.h
Source/WebCore/rendering/RenderTextControlSingleLine.cpp
Source/WebCore/rendering/RenderTextControlSingleLine.h
Source/WebCore/rendering/RenderTextTrackCue.cpp
Source/WebCore/rendering/RenderTextTrackCue.h
Source/WebCore/rendering/RenderVideo.cpp
Source/WebCore/rendering/RenderVideo.h
Source/WebCore/rendering/RenderView.cpp
Source/WebCore/rendering/RenderView.h
Source/WebCore/rendering/RenderWidget.cpp
Source/WebCore/rendering/RenderWidget.h
Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp
Source/WebCore/rendering/mathml/RenderMathMLBlock.h
Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp
Source/WebCore/rendering/mathml/RenderMathMLFenced.h
Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
Source/WebCore/rendering/mathml/RenderMathMLFraction.h
Source/WebCore/rendering/mathml/RenderMathMLMath.cpp
Source/WebCore/rendering/mathml/RenderMathMLMath.h
Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp
Source/WebCore/rendering/mathml/RenderMathMLOperator.h
Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp
Source/WebCore/rendering/mathml/RenderMathMLRoot.h
Source/WebCore/rendering/mathml/RenderMathMLRow.cpp
Source/WebCore/rendering/mathml/RenderMathMLRow.h
Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp
Source/WebCore/rendering/mathml/RenderMathMLScripts.h
Source/WebCore/rendering/mathml/RenderMathMLSpace.cpp
Source/WebCore/rendering/mathml/RenderMathMLSpace.h
Source/WebCore/rendering/mathml/RenderMathMLSquareRoot.cpp
Source/WebCore/rendering/mathml/RenderMathMLSquareRoot.h
Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp
Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h
Source/WebCore/rendering/style/ContentData.cpp
Source/WebCore/rendering/svg/RenderSVGBlock.cpp
Source/WebCore/rendering/svg/RenderSVGBlock.h
Source/WebCore/rendering/svg/RenderSVGContainer.cpp
Source/WebCore/rendering/svg/RenderSVGContainer.h
Source/WebCore/rendering/svg/RenderSVGEllipse.cpp
Source/WebCore/rendering/svg/RenderSVGEllipse.h
Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp
Source/WebCore/rendering/svg/RenderSVGForeignObject.h
Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp
Source/WebCore/rendering/svg/RenderSVGGradientStop.h
Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp
Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h
Source/WebCore/rendering/svg/RenderSVGImage.cpp
Source/WebCore/rendering/svg/RenderSVGImage.h
Source/WebCore/rendering/svg/RenderSVGInline.cpp
Source/WebCore/rendering/svg/RenderSVGInline.h
Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
Source/WebCore/rendering/svg/RenderSVGModelObject.h
Source/WebCore/rendering/svg/RenderSVGPath.cpp
Source/WebCore/rendering/svg/RenderSVGPath.h
Source/WebCore/rendering/svg/RenderSVGRect.cpp
Source/WebCore/rendering/svg/RenderSVGRect.h
Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
Source/WebCore/rendering/svg/RenderSVGResourceClipper.h
Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
Source/WebCore/rendering/svg/RenderSVGResourceContainer.h
Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
Source/WebCore/rendering/svg/RenderSVGResourceFilter.h
Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp
Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h
Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
Source/WebCore/rendering/svg/RenderSVGResourceGradient.h
Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp
Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h
Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp
Source/WebCore/rendering/svg/RenderSVGResourceMarker.h
Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
Source/WebCore/rendering/svg/RenderSVGResourceMasker.h
Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
Source/WebCore/rendering/svg/RenderSVGResourcePattern.h
Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp
Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h
Source/WebCore/rendering/svg/RenderSVGRoot.cpp
Source/WebCore/rendering/svg/RenderSVGRoot.h
Source/WebCore/rendering/svg/RenderSVGShape.cpp
Source/WebCore/rendering/svg/RenderSVGShape.h
Source/WebCore/rendering/svg/RenderSVGTSpan.h
Source/WebCore/rendering/svg/RenderSVGText.cpp
Source/WebCore/rendering/svg/RenderSVGText.h
Source/WebCore/rendering/svg/RenderSVGTextPath.cpp
Source/WebCore/rendering/svg/RenderSVGTextPath.h
Source/WebCore/rendering/svg/RenderSVGTransformableContainer.cpp
Source/WebCore/rendering/svg/RenderSVGTransformableContainer.h
Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
Source/WebCore/rendering/svg/RenderSVGViewportContainer.h
Source/WebCore/style/StyleResolveTree.cpp
Source/WebCore/svg/SVGAElement.cpp
Source/WebCore/svg/SVGAElement.h
Source/WebCore/svg/SVGAltGlyphElement.cpp
Source/WebCore/svg/SVGAltGlyphElement.h
Source/WebCore/svg/SVGCircleElement.cpp
Source/WebCore/svg/SVGCircleElement.h
Source/WebCore/svg/SVGClipPathElement.cpp
Source/WebCore/svg/SVGClipPathElement.h
Source/WebCore/svg/SVGDefsElement.cpp
Source/WebCore/svg/SVGDefsElement.h
Source/WebCore/svg/SVGEllipseElement.cpp
Source/WebCore/svg/SVGEllipseElement.h
Source/WebCore/svg/SVGFilterElement.cpp
Source/WebCore/svg/SVGFilterElement.h
Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp
Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h
Source/WebCore/svg/SVGForeignObjectElement.cpp
Source/WebCore/svg/SVGForeignObjectElement.h
Source/WebCore/svg/SVGGElement.cpp
Source/WebCore/svg/SVGGElement.h
Source/WebCore/svg/SVGGraphicsElement.cpp
Source/WebCore/svg/SVGGraphicsElement.h
Source/WebCore/svg/SVGImageElement.cpp
Source/WebCore/svg/SVGImageElement.h
Source/WebCore/svg/SVGLinearGradientElement.cpp
Source/WebCore/svg/SVGLinearGradientElement.h
Source/WebCore/svg/SVGMarkerElement.cpp
Source/WebCore/svg/SVGMarkerElement.h
Source/WebCore/svg/SVGMaskElement.cpp
Source/WebCore/svg/SVGMaskElement.h
Source/WebCore/svg/SVGPathElement.cpp
Source/WebCore/svg/SVGPathElement.h
Source/WebCore/svg/SVGPatternElement.cpp
Source/WebCore/svg/SVGPatternElement.h
Source/WebCore/svg/SVGRadialGradientElement.cpp
Source/WebCore/svg/SVGRadialGradientElement.h
Source/WebCore/svg/SVGRectElement.cpp
Source/WebCore/svg/SVGRectElement.h
Source/WebCore/svg/SVGSVGElement.cpp
Source/WebCore/svg/SVGSVGElement.h
Source/WebCore/svg/SVGStopElement.cpp
Source/WebCore/svg/SVGStopElement.h
Source/WebCore/svg/SVGSwitchElement.cpp
Source/WebCore/svg/SVGSwitchElement.h
Source/WebCore/svg/SVGSymbolElement.cpp
Source/WebCore/svg/SVGSymbolElement.h
Source/WebCore/svg/SVGTRefElement.cpp
Source/WebCore/svg/SVGTRefElement.h
Source/WebCore/svg/SVGTSpanElement.cpp
Source/WebCore/svg/SVGTSpanElement.h
Source/WebCore/svg/SVGTextElement.cpp
Source/WebCore/svg/SVGTextElement.h
Source/WebCore/svg/SVGTextPathElement.cpp
Source/WebCore/svg/SVGTextPathElement.h
Source/WebCore/svg/SVGUseElement.cpp
Source/WebCore/svg/SVGUseElement.h

index b731cf6..6daa07e 100644 (file)
@@ -1,3 +1,40 @@
+2013-10-27  Andreas Kling  <akling@apple.com>
+
+        Renderers should receive their style at construction.
+        <https://webkit.org/b/123396>
+
+        Pass the RenderStyle to all non-text renderer constructors.
+        After construction, initializeStyle() must be called (as a stopgap
+        measure) until we are able to do style-derived initialization
+        without virtual function calls.
+
+        With this change, RenderElement::m_style is never null. Subsequent
+        patches will add enforcement for this and also make style() return
+        a RenderStyle&.
+
+        I'm adding three FIXME's in this patch:
+
+            - createRendererIfNeeded() calls AnimationController to set up
+              the initial style manually instead of asking RenderElement's
+              setAnimatedStyle() to do it. This can probably be done in a
+              nicer way, but it's not clear yet how.
+
+            - ImageContentData::createRenderer() does a bit of unnecessary
+              work. This should be easy to clean up but got too distracting
+              to be part of this patch.
+
+            - Document::createRenderTree() creates the RenderView with an
+              initial dummy RenderStyle. I've done this because resolving
+              the document style assumes we already have a RenderView.
+
+        For styleWillChange() implementations to detect that they are
+        reacting to the initial style, I've added a hasInitializedStyle()
+        function on RenderElement. This will return false until you've
+        called initializeStyle() on the renderer. This should go away
+        along with initializeStyle() eventually.
+
+        Reviewed by Antti Koivisto.
+
 2013-10-26  Tim Horton  <timothy_horton@apple.com>
 
         [mac] Remove WebTiledLayer
index d39698b..0732e0c 100644 (file)
@@ -1946,8 +1946,9 @@ void Document::createRenderTree()
     ASSERT(!m_renderArena);
 
     m_renderArena = std::make_unique<RenderArena>();
-    
-    setRenderView(new RenderView(*this));
+
+    // FIXME: It would be better if we could pass the resolved document style directly here.
+    setRenderView(new RenderView(*this, RenderStyle::create()));
 #if USE(ACCELERATED_COMPOSITING)
     renderView()->setIsInWindow(true);
 #endif
@@ -5288,7 +5289,7 @@ void Document::setFullScreenRenderer(RenderFullScreen* renderer)
         return;
 
     if (renderer && m_savedPlaceholderRenderStyle) 
-        renderer->createPlaceholder(m_savedPlaceholderRenderStyle.release(), m_savedPlaceholderFrameRect);
+        renderer->createPlaceholder(m_savedPlaceholderRenderStyle.releaseNonNull(), m_savedPlaceholderFrameRect);
     else if (renderer && m_fullScreenRenderer && m_fullScreenRenderer->placeholder()) {
         RenderBlock* placeholder = m_fullScreenRenderer->placeholder();
         renderer->createPlaceholder(RenderStyle::clone(placeholder->style()), placeholder->frameRect());
index 7356658..ee406e5 100644 (file)
@@ -1348,9 +1348,9 @@ bool Element::rendererIsNeeded(const RenderStyle& style)
     return style.display() != NONE;
 }
 
-RenderElement* Element::createRenderer(RenderStyle& style)
+RenderElement* Element::createRenderer(PassRef<RenderStyle> style)
 {
-    return RenderElement::createFor(*this, style);
+    return RenderElement::createFor(*this, std::move(style));
 }
 
 Node::InsertionNotificationRequest Element::insertedInto(ContainerNode& insertionPoint)
index 93ce070..6e2d969 100644 (file)
@@ -304,7 +304,7 @@ public:
     void lazyAttach(ShouldSetAttached = SetAttached);
     void lazyReattach(ShouldSetAttached = SetAttached);
 
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>);
     virtual bool rendererIsNeeded(const RenderStyle&);
     void didAffectSelector(AffectedSelectorMask);
 
index 0673c9c..547d651 100644 (file)
@@ -52,9 +52,9 @@ bool BaseButtonInputType::appendFormData(FormDataList&, bool) const
     return false;
 }
 
-RenderElement* BaseButtonInputType::createRenderer(RenderStyle&) const
+RenderElement* BaseButtonInputType::createRenderer(PassRef<RenderStyle> style) const
 {
-    return new RenderButton(element());
+    return new RenderButton(element(), std::move(style));
 }
 
 bool BaseButtonInputType::storesValueSeparateFromAttribute()
index f3bdc8e..1d78f09 100644 (file)
@@ -43,7 +43,7 @@ protected:
 private:
     virtual bool shouldSaveAndRestoreFormControlState() const OVERRIDE;
     virtual bool appendFormData(FormDataList&, bool) const OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) const OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) const OVERRIDE;
     virtual bool storesValueSeparateFromAttribute() OVERRIDE;
     virtual void setValue(const String&, bool, TextFieldEventBehavior) OVERRIDE;
 };
index d29fa12..cb0eec2 100644 (file)
@@ -212,9 +212,9 @@ void FileInputType::handleDOMActivateEvent(Event* event)
     event->setDefaultHandled();
 }
 
-RenderElement* FileInputType::createRenderer(RenderStyle&) const
+RenderElement* FileInputType::createRenderer(PassRef<RenderStyle> style) const
 {
-    return new RenderFileUploadControl(element());
+    return new RenderFileUploadControl(element(), std::move(style));
 }
 
 bool FileInputType::canSetStringValue() const
index 6a4ac93..e55beec 100644 (file)
@@ -59,7 +59,7 @@ private:
     virtual bool valueMissing(const String&) const OVERRIDE;
     virtual String valueMissingText() const OVERRIDE;
     virtual void handleDOMActivateEvent(Event*) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) const OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) const OVERRIDE;
     virtual bool canSetStringValue() const OVERRIDE;
     virtual bool canChangeFromAnotherType() const OVERRIDE;
     virtual FileList* files() OVERRIDE;
index feac0fe..ff04fe3 100644 (file)
@@ -75,12 +75,12 @@ bool HTMLAppletElement::rendererIsNeeded(const RenderStyle& style)
     return HTMLPlugInImageElement::rendererIsNeeded(style);
 }
 
-RenderElement* HTMLAppletElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLAppletElement::createRenderer(PassRef<RenderStyle> style)
 {
     if (!canEmbedJava())
-        return RenderElement::createFor(*this, style);
+        return RenderElement::createFor(*this, std::move(style));
 
-    return RenderEmbeddedObject::createForApplet(*this);
+    return RenderEmbeddedObject::createForApplet(*this, std::move(style));
 }
 
 RenderWidget* HTMLAppletElement::renderWidgetForJSBindings() const
index 86012ca..23dbd79 100644 (file)
@@ -37,7 +37,7 @@ private:
     virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
     
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 
     virtual RenderWidget* renderWidgetForJSBindings() const;
     virtual void updateWidget(PluginCreationOption) OVERRIDE;
index b408e68..e2581ec 100644 (file)
@@ -71,12 +71,12 @@ void HTMLBRElement::collectStyleForPresentationAttribute(const QualifiedName& na
         HTMLElement::collectStyleForPresentationAttribute(name, value, style);
 }
 
-RenderElement* HTMLBRElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLBRElement::createRenderer(PassRef<RenderStyle> style)
 {
-    if (style.hasContent())
-        return RenderElement::createFor(*this, style);
+    if (style.get().hasContent())
+        return RenderElement::createFor(*this, std::move(style));
 
-    return new RenderLineBreak(*this);
+    return new RenderLineBreak(*this, std::move(style));
 }
 
 }
index c57cce6..1db5cb2 100644 (file)
@@ -41,7 +41,7 @@ private:
     virtual bool isPresentationAttribute(const QualifiedName&) const OVERRIDE;
     virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*) OVERRIDE;
 
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 };
 
 } // namespace
index 664becc..72a9048 100644 (file)
@@ -57,9 +57,9 @@ void HTMLButtonElement::setType(const AtomicString& type)
     setAttribute(typeAttr, type);
 }
 
-RenderElement* HTMLButtonElement::createRenderer(RenderStyle&)
+RenderElement* HTMLButtonElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderButton(*this);
+    return new RenderButton(*this, std::move(style));
 }
 
 const AtomicString& HTMLButtonElement::formControlType() const
index d72495b..b46319c 100644 (file)
@@ -45,7 +45,7 @@ private:
 
     virtual const AtomicString& formControlType() const;
 
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 
     // HTMLFormControlElement always creates one, but buttons don't need it.
     virtual bool alwaysCreateUserAgentShadowRoot() const OVERRIDE { return false; }
index 2c5758c..6fbb875 100644 (file)
@@ -109,16 +109,16 @@ void HTMLCanvasElement::parseAttribute(const QualifiedName& name, const AtomicSt
     HTMLElement::parseAttribute(name, value);
 }
 
-RenderElement* HTMLCanvasElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLCanvasElement::createRenderer(PassRef<RenderStyle> style)
 {
     Frame* frame = document().frame();
     if (frame && frame->script().canExecuteScripts(NotAboutToExecuteScript)) {
         m_rendererIsCanvas = true;
-        return new RenderHTMLCanvas(*this);
+        return new RenderHTMLCanvas(*this, std::move(style));
     }
 
     m_rendererIsCanvas = false;
-    return HTMLElement::createRenderer(style);
+    return HTMLElement::createRenderer(std::move(style));
 }
 
 void HTMLCanvasElement::willAttachRenderers()
index 7452c67..e151308 100644 (file)
@@ -144,7 +144,7 @@ private:
     HTMLCanvasElement(const QualifiedName&, Document&);
 
     virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual void willAttachRenderers() OVERRIDE;
     virtual bool areAuthorShadowsAllowed() const OVERRIDE;
 
index cdf93dc..2fb1dc9 100644 (file)
@@ -112,9 +112,9 @@ HTMLDetailsElement::HTMLDetailsElement(const QualifiedName& tagName, Document& d
     ASSERT(hasTagName(detailsTag));
 }
 
-RenderElement* HTMLDetailsElement::createRenderer(RenderStyle&)
+RenderElement* HTMLDetailsElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderBlockFlow(*this);
+    return new RenderBlockFlow(*this, std::move(style));
 }
 
 void HTMLDetailsElement::didAddUserAgentShadowRoot(ShadowRoot* root)
index 9ec8944..853c446 100644 (file)
@@ -35,7 +35,7 @@ public:
 private:
     HTMLDetailsElement(const QualifiedName&, Document&);
 
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool childShouldCreateRenderer(const Node*) const OVERRIDE;
     virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
 
index f739582..1b00425 100644 (file)
@@ -781,11 +781,11 @@ bool HTMLElement::rendererIsNeeded(const RenderStyle& style)
     return StyledElement::rendererIsNeeded(style);
 }
 
-RenderElement* HTMLElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLElement::createRenderer(PassRef<RenderStyle> style)
 {
     if (hasLocalName(wbrTag))
-        return new RenderLineBreak(*this);
-    return RenderElement::createFor(*this, style);
+        return new RenderLineBreak(*this, std::move(style));
+    return RenderElement::createFor(*this, std::move(style));
 }
 
 HTMLFormElement* HTMLElement::virtualForm() const
index de9e824..d60d28c 100644 (file)
@@ -82,7 +82,7 @@ public:
     bool ieForbidsInsertHTML() const;
 
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 
     HTMLFormElement* form() const { return virtualForm(); }
 
index 9689dfd..8e3aecf 100644 (file)
@@ -83,9 +83,9 @@ const AtomicString& HTMLFieldSetElement::formControlType() const
     return fieldset;
 }
 
-RenderElement* HTMLFieldSetElement::createRenderer(RenderStyle&)
+RenderElement* HTMLFieldSetElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderFieldset(*this);
+    return new RenderFieldset(*this, std::move(style));
 }
 
 HTMLLegendElement* HTMLFieldSetElement::legend() const
index 98202a9..f443a89 100644 (file)
@@ -49,7 +49,7 @@ private:
 
     virtual bool isEnumeratable() const OVERRIDE { return true; }
     virtual bool supportsFocus() const OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual const AtomicString& formControlType() const OVERRIDE;
     virtual bool recalcWillValidate() const OVERRIDE { return false; }
     virtual void childrenChanged(const ChildChange&) OVERRIDE;
index 1481941..4971cc7 100644 (file)
@@ -54,9 +54,9 @@ bool HTMLFrameElement::rendererIsNeeded(const RenderStyle&)
     return isURLAllowed();
 }
 
-RenderElement* HTMLFrameElement::createRenderer(RenderStyle&)
+RenderElement* HTMLFrameElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderFrame(*this);
+    return new RenderFrame(*this, std::move(style));
 }
 
 bool HTMLFrameElement::noResize() const
index 96346b4..7eea419 100644 (file)
@@ -42,7 +42,7 @@ private:
     virtual void didAttachRenderers() OVERRIDE;
 
     virtual bool rendererIsNeeded(const RenderStyle&);
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     
     virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
 
index d0c8b72..9ed2da9 100644 (file)
@@ -155,12 +155,12 @@ bool HTMLFrameSetElement::rendererIsNeeded(const RenderStyle& style)
     return style.isStyleAvailable();
 }
 
-RenderElement* HTMLFrameSetElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLFrameSetElement::createRenderer(PassRef<RenderStyle> style)
 {
-    if (style.hasContent())
-        return RenderElement::createFor(*this, style);
+    if (style.get().hasContent())
+        return RenderElement::createFor(*this, std::move(style));
     
-    return new RenderFrameSet(*this);
+    return new RenderFrameSet(*this, std::move(style));
 }
 
 HTMLFrameSetElement* HTMLFrameSetElement::findContaining(Element* descendant)
index dd79be8..83cab53 100644 (file)
@@ -75,7 +75,7 @@ private:
 
     virtual void willAttachRenderers() OVERRIDE;
     virtual bool rendererIsNeeded(const RenderStyle&);
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     
     virtual void defaultEventHandler(Event*);
 
index 5e7b5c9..1c01e37 100644 (file)
@@ -95,9 +95,9 @@ bool HTMLIFrameElement::rendererIsNeeded(const RenderStyle& style)
     return isURLAllowed() && style.display() != NONE;
 }
 
-RenderElement* HTMLIFrameElement::createRenderer(RenderStyle&)
+RenderElement* HTMLIFrameElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderIFrame(*this);
+    return new RenderIFrame(*this, std::move(style));
 }
 
 bool HTMLIFrameElement::shouldDisplaySeamlessly() const
index 02911a3..c9403bc 100644 (file)
@@ -42,7 +42,7 @@ private:
     virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*) OVERRIDE;
 
     virtual bool rendererIsNeeded(const RenderStyle&);
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 
     virtual void didRecalcStyle(Style::Change) OVERRIDE;
 };
index 7966614..d67ca9b 100644 (file)
@@ -175,12 +175,12 @@ String HTMLImageElement::altText() const
     return alt;
 }
 
-RenderElement* HTMLImageElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLImageElement::createRenderer(PassRef<RenderStyle> style)
 {
-    if (style.hasContent())
-        return RenderElement::createFor(*this, style);
+    if (style.get().hasContent())
+        return RenderElement::createFor(*this, std::move(style));
 
-    RenderImage* image = new RenderImage(*this);
+    RenderImage* image = new RenderImage(*this, std::move(style));
     image->setImageResource(RenderImageResource::create());
     return image;
 }
index 3cd9d72..de4645d 100644 (file)
@@ -98,7 +98,7 @@ private:
     virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*) OVERRIDE;
 
     virtual void didAttachRenderers() OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 
     virtual bool canStartSelection() const OVERRIDE;
 
index bc04057..f3cb50d 100644 (file)
@@ -789,9 +789,9 @@ bool HTMLInputElement::rendererIsNeeded(const RenderStyle& style)
     return m_inputType->rendererIsNeeded() && HTMLTextFormControlElement::rendererIsNeeded(style);
 }
 
-RenderElement* HTMLInputElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLInputElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return m_inputType->createRenderer(style);
+    return m_inputType->createRenderer(std::move(style));
 }
 
 void HTMLInputElement::willAttachRenderers()
index 34526be..3bb8605 100644 (file)
@@ -201,7 +201,7 @@ public:
     bool canHaveSelection() const;
 
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual void willAttachRenderers() OVERRIDE;
     virtual void didAttachRenderers() OVERRIDE;
     virtual void didDetachRenderers() OVERRIDE;
index 295bd56..442f95b 100644 (file)
@@ -570,11 +570,11 @@ bool HTMLMediaElement::rendererIsNeeded(const RenderStyle& style)
 #endif
 }
 
-RenderElement* HTMLMediaElement::createRenderer(RenderStyle&)
+RenderElement* HTMLMediaElement::createRenderer(PassRef<RenderStyle> style)
 {
 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
     // Setup the renderer if we already have a proxy widget.
-    RenderEmbeddedObject* mediaRenderer = new RenderEmbeddedObject(*this);
+    RenderEmbeddedObject* mediaRenderer = new RenderEmbeddedObject(*this, std::move(style));
     if (m_proxyWidget) {
         mediaRenderer->setWidget(m_proxyWidget);
 
@@ -583,7 +583,7 @@ RenderElement* HTMLMediaElement::createRenderer(RenderStyle&)
     }
     return mediaRenderer;
 #else
-    return new RenderMedia(*this);
+    return new RenderMedia(*this, std::move(style));
 #endif
 }
 
index a8472f1..0e1bc0a 100644 (file)
@@ -439,7 +439,7 @@ private:
     virtual bool supportsFocus() const OVERRIDE;
     virtual bool isMouseFocusable() const OVERRIDE;
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool childShouldCreateRenderer(const Node*) const OVERRIDE;
     virtual InsertionNotificationRequest insertedInto(ContainerNode&) OVERRIDE;
     virtual void removedFrom(ContainerNode&) OVERRIDE;
index a4d76be..f6be4ba 100644 (file)
@@ -57,12 +57,12 @@ PassRefPtr<HTMLMeterElement> HTMLMeterElement::create(const QualifiedName& tagNa
     return meter;
 }
 
-RenderElement* HTMLMeterElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLMeterElement::createRenderer(PassRef<RenderStyle> style)
 {
-    if (hasAuthorShadowRoot() || !document().page()->theme()->supportsMeter(style.appearance()))
-        return RenderElement::createFor(*this, style);
+    if (hasAuthorShadowRoot() || !document().page()->theme()->supportsMeter(style.get().appearance()))
+        return RenderElement::createFor(*this, std::move(style));
 
-    return new RenderMeter(*this);
+    return new RenderMeter(*this, std::move(style));
 }
 
 bool HTMLMeterElement::childShouldCreateRenderer(const Node* child) const
index 63c66fa..afa84ff 100644 (file)
@@ -72,7 +72,7 @@ private:
     virtual bool supportLabels() const OVERRIDE { return true; }
 
     virtual bool recalcWillValidate() const { return false; }
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool childShouldCreateRenderer(const Node*) const OVERRIDE;
     virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
 
index cc82591..9e1d354 100644 (file)
@@ -195,7 +195,7 @@ bool HTMLPlugInImageElement::wouldLoadAsNetscapePlugin(const String& url, const
     return false;
 }
 
-RenderElement* HTMLPlugInImageElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLPlugInImageElement::createRenderer(PassRef<RenderStyle> style)
 {
     // Once a PlugIn Element creates its renderer, it needs to be told when the Document goes
     // inactive or reactivates so it can clear the renderer before going into the page cache.
@@ -205,7 +205,7 @@ RenderElement* HTMLPlugInImageElement::createRenderer(RenderStyle& style)
     }
 
     if (displayState() == DisplayingSnapshot) {
-        RenderSnapshottedPlugIn* renderSnapshottedPlugIn = new RenderSnapshottedPlugIn(*this);
+        RenderSnapshottedPlugIn* renderSnapshottedPlugIn = new RenderSnapshottedPlugIn(*this, std::move(style));
         renderSnapshottedPlugIn->updateSnapshot(m_snapshotImage);
         return renderSnapshottedPlugIn;
     }
@@ -214,15 +214,15 @@ RenderElement* HTMLPlugInImageElement::createRenderer(RenderStyle& style)
     // class and all superclasses because createObject won't necessarily
     // return a RenderEmbeddedObject or RenderWidget.
     if (useFallbackContent())
-        return RenderElement::createFor(*this, style);
+        return RenderElement::createFor(*this, std::move(style));
 
     if (isImageType()) {
-        RenderImage* image = new RenderImage(*this);
+        RenderImage* image = new RenderImage(*this, std::move(style));
         image->setImageResource(RenderImageResource::create());
         return image;
     }
 
-    return new RenderEmbeddedObject(*this);
+    return new RenderEmbeddedObject(*this, std::move(style));
 }
 
 bool HTMLPlugInImageElement::willRecalcStyle(Style::Change)
index 69f81c5..4d90a5c 100644 (file)
@@ -125,7 +125,7 @@ protected:
     virtual bool isRestartedPlugin() const OVERRIDE { return m_isRestartedPlugin; }
 
 private:
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool willRecalcStyle(Style::Change) OVERRIDE;
 
     virtual void didAddUserAgentShadowRoot(ShadowRoot*) OVERRIDE;
index 36f7159..d2ea6e1 100644 (file)
@@ -59,12 +59,12 @@ PassRefPtr<HTMLProgressElement> HTMLProgressElement::create(const QualifiedName&
     return progress.release();
 }
 
-RenderElement* HTMLProgressElement::createRenderer(RenderStyle& style)
+RenderElement* HTMLProgressElement::createRenderer(PassRef<RenderStyle> style)
 {
-    if (!style.hasAppearance() || hasAuthorShadowRoot())
-        return RenderElement::createFor(*this, style);
+    if (!style.get().hasAppearance() || hasAuthorShadowRoot())
+        return RenderElement::createFor(*this, std::move(style));
 
-    return new RenderProgress(*this);
+    return new RenderProgress(*this, std::move(style));
 }
 
 bool HTMLProgressElement::childShouldCreateRenderer(const Node* child) const
index aa44a45..1c5e653 100644 (file)
@@ -54,7 +54,7 @@ private:
     virtual bool shouldAppearIndeterminate() const OVERRIDE;
     virtual bool supportLabels() const OVERRIDE { return true; }
 
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool childShouldCreateRenderer(const Node*) const OVERRIDE;
     RenderProgress* renderProgress() const;
 
index 33cc162..eed28b4 100644 (file)
@@ -343,11 +343,11 @@ bool HTMLSelectElement::canSelectAll() const
     return !usesMenuList();
 }
 
-RenderElement* HTMLSelectElement::createRenderer(RenderStyle&)
+RenderElement* HTMLSelectElement::createRenderer(PassRef<RenderStyle> style)
 {
     if (usesMenuList())
-        return new RenderMenuList(*this);
-    return new RenderListBox(*this);
+        return new RenderMenuList(*this, std::move(style));
+    return new RenderListBox(*this, std::move(style));
 }
 
 bool HTMLSelectElement::childShouldCreateRenderer(const Node* child) const
index b10bce2..a1644b5 100644 (file)
@@ -132,7 +132,7 @@ private:
     virtual bool isPresentationAttribute(const QualifiedName&) const OVERRIDE;
 
     virtual bool childShouldCreateRenderer(const Node*) const OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool appendFormData(FormDataList&, bool) OVERRIDE;
 
     virtual void reset() OVERRIDE;
index ff44fab..22dbf1b 100644 (file)
@@ -66,9 +66,9 @@ HTMLSummaryElement::HTMLSummaryElement(const QualifiedName& tagName, Document& d
     ASSERT(hasTagName(summaryTag));
 }
 
-RenderElement* HTMLSummaryElement::createRenderer(RenderStyle&)
+RenderElement* HTMLSummaryElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderBlockFlow(*this);
+    return new RenderBlockFlow(*this, std::move(style));
 }
 
 bool HTMLSummaryElement::childShouldCreateRenderer(const Node* child) const
index 8abac56..17d8c79 100644 (file)
@@ -36,7 +36,7 @@ public:
 private:
     HTMLSummaryElement(const QualifiedName&, Document&);
 
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool childShouldCreateRenderer(const Node*) const OVERRIDE;
     virtual void defaultEventHandler(Event*);
 
index 3d15620..e848312 100644 (file)
@@ -208,9 +208,9 @@ void HTMLTextAreaElement::parseAttribute(const QualifiedName& name, const Atomic
         HTMLTextFormControlElement::parseAttribute(name, value);
 }
 
-RenderElement* HTMLTextAreaElement::createRenderer(RenderStyle&)
+RenderElement* HTMLTextAreaElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderTextControlMultiLine(*this);
+    return new RenderTextControlMultiLine(*this, std::move(style));
 }
 
 bool HTMLTextAreaElement::appendFormData(FormDataList& encoding, bool)
index 4fa5b8d..365a313 100644 (file)
@@ -100,7 +100,7 @@ private:
     virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
     virtual bool isPresentationAttribute(const QualifiedName&) const OVERRIDE;
     virtual void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStylePropertySet*) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool appendFormData(FormDataList&, bool) OVERRIDE;
     virtual void reset() OVERRIDE;
     virtual bool hasCustomFocusLogic() const OVERRIDE;
index a8295f7..a2b50b9 100644 (file)
@@ -69,9 +69,9 @@ bool HTMLVideoElement::rendererIsNeeded(const RenderStyle& style)
 }
 
 #if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
-RenderElement* HTMLVideoElement::createRenderer(RenderStyle&)
+RenderElement* HTMLVideoElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderVideo(*this);
+    return new RenderVideo(*this, std::move(style));
 }
 #endif
 
index dbb1feb..d0b70fd 100644 (file)
@@ -76,7 +76,7 @@ private:
 
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
 #if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 #endif
     virtual void didAttachRenderers() OVERRIDE;
     virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
index 83a63fb..72c068a 100644 (file)
@@ -72,7 +72,7 @@ bool HiddenInputType::supportsValidation() const
     return false;
 }
 
-RenderElement* HiddenInputType::createRenderer(RenderStyle&) const
+RenderElement* HiddenInputType::createRenderer(PassRef<RenderStyle>) const
 {
     ASSERT_NOT_REACHED();
     return 0;
index e387a1a..d7623bc 100644 (file)
@@ -45,7 +45,7 @@ private:
     virtual FormControlState saveFormControlState() const OVERRIDE;
     virtual void restoreFormControlState(const FormControlState&) OVERRIDE;
     virtual bool supportsValidation() const OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) const OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) const OVERRIDE;
     virtual void accessKeyAction(bool sendMouseEvents) OVERRIDE;
     virtual bool rendererIsNeeded() OVERRIDE;
     virtual bool storesValueSeparateFromAttribute() OVERRIDE;
index 89356d7..03812b2 100644 (file)
@@ -101,9 +101,9 @@ void ImageInputType::handleDOMActivateEvent(Event* event)
     event->setDefaultHandled();
 }
 
-RenderElement* ImageInputType::createRenderer(RenderStyle&) const
+RenderElement* ImageInputType::createRenderer(PassRef<RenderStyle> style) const
 {
-    RenderImage* image = new RenderImage(element());
+    RenderImage* image = new RenderImage(element(), std::move(style));
     image->setImageResource(RenderImageResource::create());
     return image;
 }
index 4a6b5ba..b0dc97a 100644 (file)
@@ -48,7 +48,7 @@ private:
     virtual bool isFormDataAppendable() const OVERRIDE;
     virtual bool appendFormData(FormDataList&, bool) const OVERRIDE;
     virtual bool supportsValidation() const OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) const OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) const OVERRIDE;
     virtual void handleDOMActivateEvent(Event*) OVERRIDE;
     virtual void altAttributeChanged() OVERRIDE;
     virtual void srcAttributeChanged() OVERRIDE;
index ed3443a..860b717 100644 (file)
@@ -467,9 +467,9 @@ PassRefPtr<HTMLFormElement> InputType::formForSubmission() const
     return element().form();
 }
 
-RenderElement* InputType::createRenderer(RenderStyle& style) const
+RenderElement* InputType::createRenderer(PassRef<RenderStyle> style) const
 {
-    return RenderElement::createFor(element(), style);
+    return RenderElement::createFor(element(), std::move(style));
 }
 
 void InputType::blur()
index 52470b1..548d456 100644 (file)
@@ -233,7 +233,7 @@ public:
     // Miscellaneous functions
 
     virtual bool rendererIsNeeded();
-    virtual RenderElement* createRenderer(RenderStyle&) const;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) const;
     virtual void addSearchResult();
     virtual void attach();
     virtual void detach();
index 99f0b86..021492f 100644 (file)
@@ -285,9 +285,9 @@ HTMLElement* RangeInputType::sliderThumbElement() const
     return &typedSliderThumbElement();
 }
 
-RenderElement* RangeInputType::createRenderer(RenderStyle&) const
+RenderElement* RangeInputType::createRenderer(PassRef<RenderStyle> style) const
 {
-    return new RenderSlider(element());
+    return new RenderSlider(element(), std::move(style));
 }
 
 Decimal RangeInputType::parseToNumber(const String& src, const Decimal& defaultValue) const
index 4863e0f..a8ba3f4 100644 (file)
@@ -54,7 +54,7 @@ private:
     virtual bool isSteppable() const OVERRIDE;
     virtual void handleMouseDownEvent(MouseEvent*) OVERRIDE;
     virtual void handleKeydownEvent(KeyboardEvent*) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) const OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) const OVERRIDE;
     virtual void createShadowSubtree() OVERRIDE;
     virtual Decimal parseToNumber(const String&, const Decimal&) const OVERRIDE;
     virtual String serialize(const Decimal&) const OVERRIDE;
index 8296647..fcaeb2e 100644 (file)
@@ -69,9 +69,9 @@ void SearchInputType::addSearchResult()
         toRenderSearchField(renderer)->addSearchResult();
 }
 
-RenderElement* SearchInputType::createRenderer(RenderStyle&) const
+RenderElement* SearchInputType::createRenderer(PassRef<RenderStyle> style) const
 {
-    return new RenderSearchField(element());
+    return new RenderSearchField(element(), std::move(style));
 }
 
 const AtomicString& SearchInputType::formControlType() const
index 9c0a75a..a613aef 100644 (file)
@@ -49,7 +49,7 @@ private:
     explicit SearchInputType(HTMLInputElement&);
     virtual void attach() OVERRIDE;
     virtual void addSearchResult() OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) const OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) const OVERRIDE;
     virtual const AtomicString& formControlType() const OVERRIDE;
     virtual bool shouldRespectSpeechAttribute() OVERRIDE;
     virtual bool isSearchField() const OVERRIDE;
index b7ce389..42dd60f 100644 (file)
@@ -201,9 +201,9 @@ bool TextFieldInputType::shouldSubmitImplicitly(Event* event)
     return (event->type() == eventNames().textInputEvent && event->eventInterface() == TextEventInterfaceType && static_cast<TextEvent*>(event)->data() == "\n") || InputType::shouldSubmitImplicitly(event);
 }
 
-RenderElement* TextFieldInputType::createRenderer(RenderStyle&) const
+RenderElement* TextFieldInputType::createRenderer(PassRef<RenderStyle> style) const
 {
-    return new RenderTextControlSingleLine(element());
+    return new RenderTextControlSingleLine(element(), std::move(style));
 }
 
 bool TextFieldInputType::needsContainer() const
index 29ad6c2..522dd7f 100644 (file)
@@ -85,7 +85,7 @@ private:
     virtual void handleBeforeTextInsertedEvent(BeforeTextInsertedEvent*) OVERRIDE;
     virtual void forwardEvent(Event*) OVERRIDE;
     virtual bool shouldSubmitImplicitly(Event*) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) const OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) const OVERRIDE;
     virtual bool shouldUseInputMethod() const OVERRIDE;
     virtual String sanitizeValue(const String&) const OVERRIDE;
     virtual bool shouldRespectListAttribute() OVERRIDE;
index 44b5a59..47be010 100644 (file)
@@ -45,9 +45,9 @@ DetailsMarkerControl::DetailsMarkerControl(Document& document)
 {
 }
 
-RenderElement* DetailsMarkerControl::createRenderer(RenderStyle&)
+RenderElement* DetailsMarkerControl::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderDetailsMarker(*this);
+    return new RenderDetailsMarker(*this, std::move(style));
 }
 
 bool DetailsMarkerControl::rendererIsNeeded(const RenderStyle& style)
index 325b953..8efd4da 100644 (file)
@@ -45,7 +45,7 @@ public:
 private:
     DetailsMarkerControl(Document&);
 
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool rendererIsNeeded(const RenderStyle&);
     virtual const AtomicString& shadowPseudoId() const;
 
index 206ce0e..c435bb5 100644 (file)
@@ -337,9 +337,9 @@ void MediaControlTimelineContainerElement::setTimeDisplaysHidden(bool hidden)
     }
 }
 
-RenderElement* MediaControlTimelineContainerElement::createRenderer(RenderStyle&)
+RenderElement* MediaControlTimelineContainerElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderMediaControlTimelineContainer(*this);
+    return new RenderMediaControlTimelineContainer(*this, std::move(style));
 }
 
 // ----------------------------
@@ -356,9 +356,9 @@ PassRefPtr<MediaControlVolumeSliderContainerElement> MediaControlVolumeSliderCon
     return element.release();
 }
 
-RenderElement* MediaControlVolumeSliderContainerElement::createRenderer(RenderStyle&)
+RenderElement* MediaControlVolumeSliderContainerElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderMediaVolumeSliderContainer(*this);
+    return new RenderMediaVolumeSliderContainer(*this, std::move(style));
 }
 
 void MediaControlVolumeSliderContainerElement::defaultEventHandler(Event* event)
@@ -1210,9 +1210,9 @@ PassRefPtr<MediaControlTextTrackContainerElement> MediaControlTextTrackContainer
     return element.release();
 }
 
-RenderElement* MediaControlTextTrackContainerElement::createRenderer(RenderStyle&)
+RenderElement* MediaControlTextTrackContainerElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderTextTrackContainerElement(*this);
+    return new RenderTextTrackContainerElement(*this, std::move(style));
 }
 
 const AtomicString& MediaControlTextTrackContainerElement::textTrackContainerElementShadowPseudoId()
index c8d082c..a52ffbc 100644 (file)
@@ -112,7 +112,7 @@ private:
     explicit MediaControlTimelineContainerElement(Document&);
     virtual const AtomicString& shadowPseudoId() const OVERRIDE;
 
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 };
 
 // ----------------------------
@@ -129,7 +129,7 @@ private:
     virtual const AtomicString& shadowPseudoId() const OVERRIDE;
     virtual void defaultEventHandler(Event*) OVERRIDE;
 
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 };
 
 // ----------------------------
@@ -455,7 +455,7 @@ private:
     explicit MediaControlTextTrackContainerElement(Document&);
     virtual const AtomicString& shadowPseudoId() const OVERRIDE;
 
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 
     virtual PassRefPtr<Image> createTextTrackRepresentationImage() OVERRIDE;
     virtual void textTrackRepresentationBoundsChanged(const IntRect&) OVERRIDE;
index 647ae6a..178f164 100644 (file)
@@ -76,9 +76,9 @@ bool MeterInnerElement::rendererIsNeeded(const RenderStyle& style)
     return render && !render->theme()->supportsMeter(render->style()->appearance()) && HTMLDivElement::rendererIsNeeded(style);
 }
 
-RenderElement* MeterInnerElement::createRenderer(RenderStyle&)
+RenderElement* MeterInnerElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderMeter(*this);
+    return new RenderMeter(*this, std::move(style));
 }
 
 const AtomicString& MeterValueElement::valuePseudoId() const
index b504f22..f5ae0d8 100644 (file)
@@ -59,7 +59,7 @@ private:
     MeterInnerElement(Document&);
 
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 };
 
 inline PassRefPtr<MeterInnerElement> MeterInnerElement::create(Document& document)
index e3168db..b4c4bfa 100644 (file)
@@ -61,9 +61,9 @@ ProgressInnerElement::ProgressInnerElement(Document& document)
 {
 }
 
-RenderElement* ProgressInnerElement::createRenderer(RenderStyle&)
+RenderElement* ProgressInnerElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderProgress(*this);
+    return new RenderProgress(*this, std::move(style));
 }
 
 bool ProgressInnerElement::rendererIsNeeded(const RenderStyle& style)
index acf07f8..f2a7473 100644 (file)
@@ -58,7 +58,7 @@ public:
 private:
     ProgressInnerElement(Document&);
 
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual bool rendererIsNeeded(const RenderStyle&);
 };
 
index 89f0123..0c5234f 100644 (file)
@@ -72,8 +72,8 @@ inline static bool hasVerticalAppearance(HTMLInputElement* input)
 
 // --------------------------------
 
-RenderSliderThumb::RenderSliderThumb(SliderThumbElement& element)
-    : RenderBlockFlow(element)
+RenderSliderThumb::RenderSliderThumb(SliderThumbElement& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
@@ -104,8 +104,8 @@ bool RenderSliderThumb::isSliderThumb() const
 // http://webkit.org/b/62535
 class RenderSliderContainer : public RenderFlexibleBox {
 public:
-    RenderSliderContainer(SliderContainerElement& element)
-        : RenderFlexibleBox(element)
+    RenderSliderContainer(SliderContainerElement& element, PassRef<RenderStyle> style)
+        : RenderFlexibleBox(element, std::move(style))
     {
     }
 
@@ -203,9 +203,9 @@ void SliderThumbElement::setPositionFromValue()
         renderer()->setNeedsLayout();
 }
 
-RenderElement* SliderThumbElement::createRenderer(RenderStyle&)
+RenderElement* SliderThumbElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderSliderThumb(*this);
+    return new RenderSliderThumb(*this, std::move(style));
 }
 
 bool SliderThumbElement::isDisabledFormControl() const
@@ -442,9 +442,9 @@ PassRefPtr<SliderContainerElement> SliderContainerElement::create(Document& docu
     return adoptRef(new SliderContainerElement(document));
 }
 
-RenderElement* SliderContainerElement::createRenderer(RenderStyle&)
+RenderElement* SliderContainerElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderSliderContainer(*this);
+    return new RenderSliderContainer(*this, std::move(style));
 }
 
 const AtomicString& SliderContainerElement::shadowPseudoId() const
index 29757d2..3dc21f5 100644 (file)
@@ -54,7 +54,7 @@ public:
 private:
     SliderThumbElement(Document&);
 
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren() OVERRIDE;
     virtual bool isDisabledFormControl() const OVERRIDE;
     virtual bool matchesReadOnlyPseudoClass() const OVERRIDE;
@@ -81,7 +81,7 @@ inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document& docum
 
 class RenderSliderThumb FINAL : public RenderBlockFlow {
 public:
-    explicit RenderSliderThumb(SliderThumbElement&);
+    RenderSliderThumb(SliderThumbElement&, PassRef<RenderStyle>);
     void updateAppearance(RenderStyle* parentStyle);
 
 private:
@@ -96,7 +96,7 @@ public:
 
 private:
     SliderContainerElement(Document&);
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual const AtomicString& shadowPseudoId() const;
 };
 
index c72353a..08c38d9 100644 (file)
@@ -58,9 +58,9 @@ PassRefPtr<TextControlInnerContainer> TextControlInnerContainer::create(Document
     return adoptRef(new TextControlInnerContainer(document));
 }
     
-RenderElement* TextControlInnerContainer::createRenderer(RenderStyle&)
+RenderElement* TextControlInnerContainer::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderTextControlInnerContainer(*this);
+    return new RenderTextControlInnerContainer(*this, std::move(style));
 }
 
 TextControlInnerElement::TextControlInnerElement(Document& document)
@@ -112,9 +112,9 @@ void TextControlInnerTextElement::defaultEventHandler(Event* event)
         HTMLDivElement::defaultEventHandler(event);
 }
 
-RenderElement* TextControlInnerTextElement::createRenderer(RenderStyle&)
+RenderElement* TextControlInnerTextElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderTextControlInnerBlock(*this);
+    return new RenderTextControlInnerBlock(*this, std::move(style));
 }
 
 RenderTextControlInnerBlock* TextControlInnerTextElement::renderer() const
index 1f8303f..a325b83 100644 (file)
@@ -41,7 +41,7 @@ public:
     static PassRefPtr<TextControlInnerContainer> create(Document&);
 protected:
     TextControlInnerContainer(Document&);
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 };
 
 class TextControlInnerElement FINAL : public HTMLDivElement {
@@ -66,7 +66,7 @@ public:
 
 private:
     TextControlInnerTextElement(Document&);
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual PassRefPtr<RenderStyle> customStyleForRenderer() OVERRIDE;
     virtual bool isMouseFocusable() const OVERRIDE { return false; }
     virtual bool isTextControlInnerTextElement() const OVERRIDE { return true; }
index 4617a7e..d8538ef 100644 (file)
@@ -176,9 +176,9 @@ const AtomicString& TextTrackCueBox::textTrackCueBoxShadowPseudoId()
     return trackDisplayBoxShadowPseudoId;
 }
 
-RenderElement* TextTrackCueBox::createRenderer(RenderStyle&)
+RenderElement* TextTrackCueBox::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderTextTrackCue(*this);
+    return new RenderTextTrackCue(*this, std::move(style));
 }
 
 // ----------------------------
index f2f3147..9a926d8 100644 (file)
@@ -64,7 +64,7 @@ public:
 protected:
     TextTrackCueBox(Document&, TextTrackCue*);
 
-    virtual RenderElement* createRenderer(RenderStyle&) OVERRIDE;
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 
     TextTrackCue* m_cue;
 };
index 207289e..689b11b 100644 (file)
@@ -54,36 +54,36 @@ PassRefPtr<MathMLInlineContainerElement> MathMLInlineContainerElement::create(co
     return adoptRef(new MathMLInlineContainerElement(tagName, document));
 }
 
-RenderElement* MathMLInlineContainerElement::createRenderer(RenderStyle&)
+RenderElement* MathMLInlineContainerElement::createRenderer(PassRef<RenderStyle> style)
 {
     if (hasLocalName(mrowTag))
-        return new RenderMathMLRow(*this);
+        return new RenderMathMLRow(*this, std::move(style));
     if (hasLocalName(msubTag))
-        return new RenderMathMLScripts(*this);
+        return new RenderMathMLScripts(*this, std::move(style));
     if (hasLocalName(msupTag))
-        return new RenderMathMLScripts(*this);
+        return new RenderMathMLScripts(*this, std::move(style));
     if (hasLocalName(msubsupTag))
-        return new RenderMathMLScripts(*this);
+        return new RenderMathMLScripts(*this, std::move(style));
     if (hasLocalName(mmultiscriptsTag))
-        return new RenderMathMLScripts(*this);
+        return new RenderMathMLScripts(*this, std::move(style));
     if (hasLocalName(moverTag))
-        return new RenderMathMLUnderOver(*this);
+        return new RenderMathMLUnderOver(*this, std::move(style));
     if (hasLocalName(munderTag))
-        return new RenderMathMLUnderOver(*this);
+        return new RenderMathMLUnderOver(*this, std::move(style));
     if (hasLocalName(munderoverTag))
-        return new RenderMathMLUnderOver(*this);
+        return new RenderMathMLUnderOver(*this, std::move(style));
     if (hasLocalName(mfracTag))
-        return new RenderMathMLFraction(*this);
+        return new RenderMathMLFraction(*this, std::move(style));
     if (hasLocalName(msqrtTag))
-        return new RenderMathMLSquareRoot(*this);
+        return new RenderMathMLSquareRoot(*this, std::move(style));
     if (hasLocalName(mrootTag))
-        return new RenderMathMLRoot(*this);
+        return new RenderMathMLRoot(*this, std::move(style));
     if (hasLocalName(mfencedTag))
-        return new RenderMathMLFenced(*this);
+        return new RenderMathMLFenced(*this, std::move(style));
     if (hasLocalName(mtableTag))
-        return new RenderMathMLTable(*this);
+        return new RenderMathMLTable(*this, std::move(style));
 
-    return new RenderMathMLBlock(*this);
+    return new RenderMathMLBlock(*this, std::move(style));
 }
 
 }
index 786d7e4..0a82a24 100644 (file)
@@ -40,7 +40,7 @@ protected:
     MathMLInlineContainerElement(const QualifiedName& tagName, Document&);
 
 private:
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 };
     
 }
index 2e64b0b..81ca94b 100644 (file)
@@ -51,9 +51,9 @@ Node::InsertionNotificationRequest MathMLMathElement::insertedInto(ContainerNode
     return MathMLInlineContainerElement::insertedInto(insertionPoint);
 }
 
-RenderElement* MathMLMathElement::createRenderer(RenderStyle&)
+RenderElement* MathMLMathElement::createRenderer(PassRef<RenderStyle> style)
 {
-    return new RenderMathMLMath(*this);
+    return new RenderMathMLMath(*this, std::move(style));
 }
 
 }
index c124edb..d5d7b8c 100644 (file)
@@ -40,7 +40,7 @@ private:
     MathMLMathElement(const QualifiedName& tagName, Document&);
 
     virtual InsertionNotificationRequest insertedInto(ContainerNode&) OVERRIDE;
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
 };
     
 }
index e23f1eb..dcef222 100644 (file)
@@ -63,14 +63,14 @@ void MathMLTextElement::childrenChanged(const ChildChange& change)
         renderer()->updateFromElement();
 }
 
-RenderElement* MathMLTextElement::createRenderer(RenderStyle& style)
+RenderElement* MathMLTextElement::createRenderer(PassRef<RenderStyle> style)
 {
     if (hasLocalName(MathMLNames::moTag))
-        return new RenderMathMLOperator(*this);
+        return new RenderMathMLOperator(*this, std::move(style));
     if (hasLocalName(MathMLNames::mspaceTag))
-        return new RenderMathMLSpace(*this);
+        return new RenderMathMLSpace(*this, std::move(style));
 
-    return MathMLElement::createRenderer(style);
+    return MathMLElement::createRenderer(std::move(style));
 }
 
 }
index 946baac..a7933d2 100644 (file)
@@ -40,7 +40,7 @@ public:
 private:
     MathMLTextElement(const QualifiedName& tagName, Document&);
 
-    virtual RenderElement* createRenderer(RenderStyle&);
+    virtual RenderElement* createRenderer(PassRef<RenderStyle>) OVERRIDE;
     virtual void childrenChanged(const ChildChange&) OVERRIDE;
 };
     
index 81b8411..631d86e 100644 (file)
@@ -3216,9 +3216,11 @@ void FrameView::updateScrollCorner()
     }
 
     if (cornerStyle) {
-        if (!m_scrollCorner)
-            m_scrollCorner = new RenderScrollbarPart(renderer->document());
-        m_scrollCorner->setStyle(cornerStyle.releaseNonNull());
+        if (!m_scrollCorner) {
+            m_scrollCorner = new RenderScrollbarPart(renderer->document(), cornerStyle.releaseNonNull());
+            m_scrollCorner->initializeStyle();
+        } else
+            m_scrollCorner->setStyle(cornerStyle.releaseNonNull());
         invalidateScrollCorner(cornerRect);
     } else if (m_scrollCorner) {
         m_scrollCorner->destroy();
index fd5bd2e..dbeb78c 100644 (file)
@@ -495,7 +495,7 @@ PassRef<RenderStyle> AnimationController::updateAnimations(RenderElement& render
     if (renderer.document().inPageCache())
         return newStyle;
 
-    RenderStyle* oldStyle = renderer.style();
+    RenderStyle* oldStyle = renderer.hasInitializedStyle() ? renderer.style() : nullptr;
 
     if ((!oldStyle || (!oldStyle->animations() && !oldStyle->transitions())) && (!newStyle.get().animations() && !newStyle.get().transitions()))
         return newStyle;
index 5b2b286..32528d5 100644 (file)
@@ -75,8 +75,8 @@ RenderNamedFlowThread& FlowThreadController::ensureRenderFlowThreadWithName(cons
     // Sanity check for the absence of a named flow in the "CREATED" state with the same name.
     ASSERT(!namedFlows->flowByName(name));
 
-    RenderNamedFlowThread* flowRenderer = new RenderNamedFlowThread(m_view->document(), namedFlows->ensureFlowWithName(name));
-    flowRenderer->setStyle(RenderFlowThread::createFlowThreadStyle(m_view->style()));
+    auto flowRenderer = new RenderNamedFlowThread(m_view->document(), RenderFlowThread::createFlowThreadStyle(m_view->style()), namedFlows->ensureFlowWithName(name));
+    flowRenderer->initializeStyle();
     m_renderNamedFlowThreadList->add(flowRenderer);
 
     // Keep the flow renderer as a child of RenderView.
index a6e7d00..98bb786 100644 (file)
@@ -144,8 +144,8 @@ private:
     bool m_hadVerticalLayoutOverflow;
 };
 
-RenderBlock::RenderBlock(Element& element, unsigned baseTypeFlags)
-    : RenderBox(element, baseTypeFlags | RenderBlockFlag)
+RenderBlock::RenderBlock(Element& element, PassRef<RenderStyle> style, unsigned baseTypeFlags)
+    : RenderBox(element, std::move(style), baseTypeFlags | RenderBlockFlag)
     , m_lineHeight(-1)
     , m_hasMarginBeforeQuirk(false)
     , m_hasMarginAfterQuirk(false)
@@ -160,8 +160,8 @@ RenderBlock::RenderBlock(Element& element, unsigned baseTypeFlags)
 {
 }
 
-RenderBlock::RenderBlock(Document& document, unsigned baseTypeFlags)
-    : RenderBox(document, baseTypeFlags | RenderBlockFlag)
+RenderBlock::RenderBlock(Document& document, PassRef<RenderStyle> style, unsigned baseTypeFlags)
+    : RenderBox(document, std::move(style), baseTypeFlags | RenderBlockFlag)
     , m_lineHeight(-1)
     , m_hasMarginBeforeQuirk(false)
     , m_hasMarginAfterQuirk(false)
@@ -239,7 +239,7 @@ void RenderBlock::willBeDestroyed()
 
 void RenderBlock::styleWillChange(StyleDifference diff, const RenderStyle& newStyle)
 {
-    RenderStyle* oldStyle = style();
+    RenderStyle* oldStyle = hasInitializedStyle() ? style() : nullptr;
 
     setReplaced(newStyle.isDisplayInlineType());
     
@@ -478,7 +478,7 @@ RenderBlock* RenderBlock::clone() const
     } else {
         auto cloneRenderer = element()->createRenderer(*style());
         cloneBlock = toRenderBlock(cloneRenderer);
-        cloneBlock->setStyle(*style());
+        cloneBlock->initializeStyle();
 
         // This takes care of setting the right value of childrenInline in case
         // generated content is added to cloneBlock and 'this' does not have
@@ -1686,12 +1686,12 @@ RenderBoxModelObject& RenderBlock::createReplacementRunIn(RenderBoxModelObject&
 
     RenderBoxModelObject* newRunIn = 0;
     if (!runIn.isRenderBlockFlow())
-        newRunIn = new RenderBlockFlow(*runIn.element());
+        newRunIn = new RenderBlockFlow(*runIn.element(), *runIn.style());
     else
-        newRunIn = new RenderInline(*runIn.element());
+        newRunIn = new RenderInline(*runIn.element(), *runIn.style());
 
     runIn.element()->setRenderer(newRunIn);
-    newRunIn->setStyle(*runIn.style());
+    newRunIn->initializeStyle();
 
     runIn.moveAllChildrenTo(newRunIn, true);
 
@@ -4751,10 +4751,10 @@ void RenderBlock::updateFirstLetterStyle(RenderObject* firstLetterBlock, RenderO
         // The first-letter renderer needs to be replaced. Create a new renderer of the right type.
         RenderBoxModelObject* newFirstLetter;
         if (pseudoStyle->display() == INLINE)
-            newFirstLetter = new RenderInline(document());
+            newFirstLetter = new RenderInline(document(), *pseudoStyle);
         else
-            newFirstLetter = new RenderBlockFlow(document());
-        newFirstLetter->setStyle(*pseudoStyle);
+            newFirstLetter = new RenderBlockFlow(document(), *pseudoStyle);
+        newFirstLetter->initializeStyle();
 
         // Move the first letter into the new renderer.
         LayoutStateDisabler layoutStateDisabler(&view());
@@ -4788,10 +4788,10 @@ void RenderBlock::createFirstLetterRenderer(RenderObject* firstLetterBlock, Rend
     RenderStyle* pseudoStyle = styleForFirstLetter(firstLetterBlock, firstLetterContainer);
     RenderBoxModelObject* firstLetter = 0;
     if (pseudoStyle->display() == INLINE)
-        firstLetter = new RenderInline(document());
+        firstLetter = new RenderInline(document(), *pseudoStyle);
     else
-        firstLetter = new RenderBlockFlow(document());
-    firstLetter->setStyle(*pseudoStyle);
+        firstLetter = new RenderBlockFlow(document(), *pseudoStyle);
+    firstLetter->initializeStyle();
     firstLetterContainer->addChild(firstLetter, currentTextChild);
 
     // The original string is going to be either a generated content string or a DOM node's
@@ -5522,17 +5522,13 @@ TextRun RenderBlock::constructTextRun(RenderObject* context, const Font& font, c
 RenderBlock* RenderBlock::createAnonymousWithParentRendererAndDisplay(const RenderObject* parent, EDisplay display)
 {
     // FIXME: Do we need to convert all our inline displays to block-type in the anonymous logic ?
-    EDisplay newDisplay;
-    RenderBlock* newBox = 0;
-    if (display == FLEX || display == INLINE_FLEX) {
-        newBox = new RenderFlexibleBox(parent->document());
-        newDisplay = FLEX;
-    } else {
-        newBox = new RenderBlockFlow(parent->document());
-        newDisplay = BLOCK;
-    }
+    RenderBlock* newBox;
+    if (display == FLEX || display == INLINE_FLEX)
+        newBox = new RenderFlexibleBox(parent->document(), RenderStyle::createAnonymousStyleWithDisplay(parent->style(), FLEX));
+    else
+        newBox = new RenderBlockFlow(parent->document(), RenderStyle::createAnonymousStyleWithDisplay(parent->style(), BLOCK));
 
-    newBox->setStyle(RenderStyle::createAnonymousStyleWithDisplay(parent->style(), newDisplay));
+    newBox->initializeStyle();
     return newBox;
 }
 
@@ -5541,8 +5537,8 @@ RenderBlock* RenderBlock::createAnonymousColumnsWithParentRenderer(const RenderO
     auto newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), BLOCK);
     newStyle.get().inheritColumnPropertiesFrom(parent->style());
 
-    RenderBlock* newBox = new RenderBlockFlow(parent->document());
-    newBox->setStyle(std::move(newStyle));
+    RenderBlock* newBox = new RenderBlockFlow(parent->document(), std::move(newStyle));
+    newBox->initializeStyle();
     return newBox;
 }
 
@@ -5551,8 +5547,8 @@ RenderBlock* RenderBlock::createAnonymousColumnSpanWithParentRenderer(const Rend
     auto newStyle = RenderStyle::createAnonymousStyleWithDisplay(parent->style(), BLOCK);
     newStyle.get().setColumnSpan(ColumnSpanAll);
 
-    RenderBlock* newBox = new RenderBlockFlow(parent->document());
-    newBox->setStyle(std::move(newStyle));
+    RenderBlock* newBox = new RenderBlockFlow(parent->document(), std::move(newStyle));
+    newBox->initializeStyle();
     return newBox;
 }
 
index 467a2b3..4bdc757 100644 (file)
@@ -96,8 +96,8 @@ public:
 #endif
 
 protected:
-    RenderBlock(Element&, unsigned baseTypeFlags);
-    RenderBlock(Document&, unsigned baseTypeFlags);
+    RenderBlock(Element&, PassRef<RenderStyle>, unsigned baseTypeFlags);
+    RenderBlock(Document&, PassRef<RenderStyle>, unsigned baseTypeFlags);
     virtual ~RenderBlock();
 
 public:
index f196533..6485262 100644 (file)
@@ -86,14 +86,14 @@ RenderBlockFlow::MarginInfo::MarginInfo(RenderBlockFlow& block, LayoutUnit befor
     m_negativeMargin = (m_canCollapseMarginBeforeWithChildren && !block.mustDiscardMarginBefore()) ? block.maxNegativeMarginBefore() : LayoutUnit();
 }
 
-RenderBlockFlow::RenderBlockFlow(Element& element)
-    : RenderBlock(element, RenderBlockFlowFlag)
+RenderBlockFlow::RenderBlockFlow(Element& element, PassRef<RenderStyle> style)
+    : RenderBlock(element, std::move(style), RenderBlockFlowFlag)
 {
     setChildrenInline(true);
 }
 
-RenderBlockFlow::RenderBlockFlow(Document& document)
-    : RenderBlock(document, RenderBlockFlowFlag)
+RenderBlockFlow::RenderBlockFlow(Document& document, PassRef<RenderStyle> style)
+    : RenderBlock(document, std::move(style), RenderBlockFlowFlag)
 {
     setChildrenInline(true);
 }
@@ -1627,8 +1627,8 @@ void RenderBlockFlow::styleDidChange(StyleDifference diff, const RenderStyle* ol
         parentBlock->markSiblingsWithFloatsForLayout();
     }
 
-    if (renderNamedFlowFragment())
-        renderNamedFlowFragment()->setStyleForNamedFlowFragment(style());
+    if (auto fragment = renderNamedFlowFragment())
+        fragment->setStyle(RenderNamedFlowFragment::createStyle(*style()));
 
     if (diff >= StyleDifferenceRepaint)
         invalidateLineLayoutPath();
@@ -1636,7 +1636,7 @@ void RenderBlockFlow::styleDidChange(StyleDifference diff, const RenderStyle* ol
 
 void RenderBlockFlow::styleWillChange(StyleDifference diff, const RenderStyle& newStyle)
 {
-    RenderStyle* oldStyle = style();
+    RenderStyle* oldStyle = hasInitializedStyle() ? style() : nullptr;
     s_canPropagateFloatIntoSibling = oldStyle ? !isFloatingOrOutOfFlowPositioned() && !avoidsFloats() : false;
 
     if (oldStyle && parent() && diff == StyleDifferenceLayout && oldStyle->position() != newStyle.position()) {
@@ -2639,8 +2639,8 @@ void RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded()
         return;
 
     if (style()->isDisplayRegionType() && style()->hasFlowFrom()) {
-        RenderNamedFlowFragment* flowFragment = new RenderNamedFlowFragment(document());
-        flowFragment->setStyleForNamedFlowFragment(style());
+        RenderNamedFlowFragment* flowFragment = new RenderNamedFlowFragment(document(), RenderNamedFlowFragment::createStyle(*style()));
+        flowFragment->initializeStyle();
         setRenderNamedFlowFragment(flowFragment);
         addChild(renderNamedFlowFragment());
     }
index 9ab6218..2349e3b 100644 (file)
@@ -34,8 +34,8 @@ class RenderNamedFlowFragment;
 
 class RenderBlockFlow : public RenderBlock {
 public:
-    explicit RenderBlockFlow(Element&);
-    explicit RenderBlockFlow(Document&);
+    RenderBlockFlow(Element&, PassRef<RenderStyle>);
+    RenderBlockFlow(Document&, PassRef<RenderStyle>);
     virtual ~RenderBlockFlow();
         
     virtual void layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight = 0) OVERRIDE;
index a709031..d30f597 100644 (file)
@@ -95,8 +95,8 @@ static bool skipBodyBackground(const RenderBox* bodyElementRenderer)
         && (documentElementRenderer == bodyElementRenderer->parent());
 }
 
-RenderBox::RenderBox(Element& element, unsigned baseTypeFlags)
-    : RenderBoxModelObject(element, baseTypeFlags)
+RenderBox::RenderBox(Element& element, PassRef<RenderStyle> style, unsigned baseTypeFlags)
+    : RenderBoxModelObject(element, std::move(style), baseTypeFlags)
     , m_minPreferredLogicalWidth(-1)
     , m_maxPreferredLogicalWidth(-1)
     , m_inlineBoxWrapper(0)
@@ -104,8 +104,8 @@ RenderBox::RenderBox(Element& element, unsigned baseTypeFlags)
     setIsBox();
 }
 
-RenderBox::RenderBox(Document& document, unsigned baseTypeFlags)
-    : RenderBoxModelObject(document, baseTypeFlags)
+RenderBox::RenderBox(Document& document, PassRef<RenderStyle> style, unsigned baseTypeFlags)
+    : RenderBoxModelObject(document, std::move(style), baseTypeFlags)
     , m_minPreferredLogicalWidth(-1)
     , m_maxPreferredLogicalWidth(-1)
     , m_inlineBoxWrapper(0)
@@ -268,7 +268,7 @@ void RenderBox::styleWillChange(StyleDifference diff, const RenderStyle& newStyl
 {
     s_hadOverflowClip = hasOverflowClip();
 
-    RenderStyle* oldStyle = style();
+    RenderStyle* oldStyle = hasInitializedStyle() ? style() : nullptr;
     if (oldStyle) {
         // The background of the root element or the body element could propagate up to
         // the canvas. Issue full repaint, when our style changes substantially.
index 97fd813..ab3c181 100644 (file)
@@ -601,8 +601,8 @@ public:
 #endif
 
 protected:
-    RenderBox(Element&, unsigned baseTypeFlags);
-    RenderBox(Document&, unsigned baseTypeFlags);
+    RenderBox(Element&, PassRef<RenderStyle>, unsigned baseTypeFlags);
+    RenderBox(Document&, PassRef<RenderStyle>, unsigned baseTypeFlags);
 
     virtual void willBeDestroyed() OVERRIDE;
 
index be8530b..6bd2325 100644 (file)
@@ -159,13 +159,13 @@ bool RenderBoxModelObject::shouldPaintAtLowQuality(GraphicsContext* context, Ima
     return view().imageQualityController().shouldPaintAtLowQuality(context, this, image, layer, size);
 }
 
-RenderBoxModelObject::RenderBoxModelObject(Element& element, unsigned baseTypeFlags)
-    : RenderLayerModelObject(element, baseTypeFlags | RenderBoxModelObjectFlag)
+RenderBoxModelObject::RenderBoxModelObject(Element& element, PassRef<RenderStyle> style, unsigned baseTypeFlags)
+    : RenderLayerModelObject(element, std::move(style), baseTypeFlags | RenderBoxModelObjectFlag)
 {
 }
 
-RenderBoxModelObject::RenderBoxModelObject(Document& document, unsigned baseTypeFlags)
-    : RenderLayerModelObject(document, baseTypeFlags | RenderBoxModelObjectFlag)
+RenderBoxModelObject::RenderBoxModelObject(Document& document, PassRef<RenderStyle> style, unsigned baseTypeFlags)
+    : RenderLayerModelObject(document, std::move(style), baseTypeFlags | RenderBoxModelObjectFlag)
 {
 }
 
index fb3a967..9f87085 100644 (file)
@@ -194,8 +194,8 @@ public:
 #endif
 
 protected:
-    RenderBoxModelObject(Element&, unsigned baseTypeFlags);
-    RenderBoxModelObject(Document&, unsigned baseTypeFlags);
+    RenderBoxModelObject(Element&, PassRef<RenderStyle>, unsigned baseTypeFlags);
+    RenderBoxModelObject(Document&, PassRef<RenderStyle>, unsigned baseTypeFlags);
 
     virtual void willBeDestroyed() OVERRIDE;
 
index 33068cd..6834ac7 100644 (file)
@@ -33,8 +33,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderButton::RenderButton(HTMLFormControlElement& element)
-    : RenderFlexibleBox(element)
+RenderButton::RenderButton(HTMLFormControlElement& element, PassRef<RenderStyle> style)
+    : RenderFlexibleBox(element, std::move(style))
     , m_buttonText(0)
     , m_inner(0)
     , m_default(false)
index 1f3391c..50e03c5 100644 (file)
@@ -35,7 +35,7 @@ class RenderTextFragment;
 // to date as the button changes.
 class RenderButton FINAL : public RenderFlexibleBox {
 public:
-    explicit RenderButton(HTMLFormControlElement&);
+    RenderButton(HTMLFormControlElement&, PassRef<RenderStyle>);
     virtual ~RenderButton();
 
     HTMLFormControlElement& formControlElement() const;
index 03d8a2c..0b9542d 100644 (file)
@@ -31,7 +31,7 @@ class CounterNode;
 
 class RenderCounter FINAL : public RenderText {
 public:
-    explicit RenderCounter(Document&, const CounterContent&);
+    RenderCounter(Document&, const CounterContent&);
     virtual ~RenderCounter();
 
     static void destroyCounterNodes(RenderObject*);
index 75e014b..a25cb01 100644 (file)
@@ -120,8 +120,8 @@ private:
     int m_ordinalIteration;
 };
 
-RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox(Element& element)
-    : RenderBlock(element, 0)
+RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox(Element& element, PassRef<RenderStyle> style)
+    : RenderBlock(element, std::move(style), 0)
 {
     setChildrenInline(false); // All of our children must be block-level
     m_stretchingChildren = false;
@@ -170,7 +170,7 @@ static LayoutUnit contentHeightForChild(RenderBox* child)
 
 void RenderDeprecatedFlexibleBox::styleWillChange(StyleDifference diff, const RenderStyle& newStyle)
 {
-    RenderStyle* oldStyle = style();
+    RenderStyle* oldStyle = hasInitializedStyle() ? style() : nullptr;
     if (oldStyle && !oldStyle->lineClamp().isNone() && newStyle.lineClamp().isNone())
         clearLineClamp();
 
index 1d2001d..b87c19f 100644 (file)
@@ -31,7 +31,7 @@ class FlexBoxIterator;
 
 class RenderDeprecatedFlexibleBox FINAL : public RenderBlock {
 public:
-    explicit RenderDeprecatedFlexibleBox(Element&);
+    RenderDeprecatedFlexibleBox(Element&, PassRef<RenderStyle>);
     virtual ~RenderDeprecatedFlexibleBox();
 
     Element& element() const { return toElement(nodeForNonAnonymous()); }
index a63e1d9..468ee54 100644 (file)
@@ -32,8 +32,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderDetailsMarker::RenderDetailsMarker(DetailsMarkerControl& element)
-    : RenderBlockFlow(element)
+RenderDetailsMarker::RenderDetailsMarker(DetailsMarkerControl& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
index 4ca76b5..eb4eefe 100644 (file)
@@ -29,7 +29,7 @@ namespace WebCore {
 
 class RenderDetailsMarker FINAL : public RenderBlockFlow {
 public:
-    explicit RenderDetailsMarker(DetailsMarkerControl&);
+    RenderDetailsMarker(DetailsMarkerControl&, PassRef<RenderStyle>);
     DetailsMarkerControl& element() const { return static_cast<DetailsMarkerControl&>(nodeForNonAnonymous()); }
 
     enum Orientation { Up, Down, Left, Right };
index 6fb669a..44cf178 100644 (file)
@@ -65,27 +65,31 @@ namespace WebCore {
 bool RenderElement::s_affectsParentBlock = false;
 bool RenderElement::s_noLongerAffectsParentBlock = false;
 
-RenderElement::RenderElement(Element& element, unsigned baseTypeFlags)
+RenderElement::RenderElement(Element& element, PassRef<RenderStyle> style, unsigned baseTypeFlags)
     : RenderObject(element)
     , m_baseTypeFlags(baseTypeFlags)
     , m_ancestorLineBoxDirty(false)
+    , m_hasInitializedStyle(false)
     , m_firstChild(nullptr)
     , m_lastChild(nullptr)
+    , m_style(std::move(style))
 {
 }
 
-RenderElement::RenderElement(Document& document, unsigned baseTypeFlags)
+RenderElement::RenderElement(Document& document, PassRef<RenderStyle> style, unsigned baseTypeFlags)
     : RenderObject(document)
     , m_baseTypeFlags(baseTypeFlags)
     , m_ancestorLineBoxDirty(false)
+    , m_hasInitializedStyle(false)
     , m_firstChild(nullptr)
     , m_lastChild(nullptr)
+    , m_style(std::move(style))
 {
 }
 
 RenderElement::~RenderElement()
 {
-    if (m_style) {
+    if (hasInitializedStyle()) {
         for (const FillLayer* bgLayer = m_style->backgroundLayers(); bgLayer; bgLayer = bgLayer->next()) {
             if (StyleImage* backgroundImage = bgLayer->image())
                 backgroundImage->removeClient(this);
@@ -115,77 +119,72 @@ RenderElement::~RenderElement()
     }
 }
 
-RenderElement* RenderElement::createFor(Element& element, RenderStyle& style)
+RenderElement* RenderElement::createFor(Element& element, PassRef<RenderStyle> style)
 {
     Document& document = element.document();
 
     // Minimal support for content properties replacing an entire element.
     // Works only if we have exactly one piece of content and it's a URL.
     // Otherwise acts as if we didn't support this feature.
-    const ContentData* contentData = style.contentData();
+    const ContentData* contentData = style.get().contentData();
     if (contentData && !contentData->next() && contentData->isImage() && !element.isPseudoElement()) {
-        RenderImage* image = new RenderImage(element);
-        // RenderImageResourceStyleImage requires a style being present on the image but we don't want to
-        // trigger a style change now as the node is not fully attached. Moving this code to style change
-        // doesn't make sense as it should be run once at renderer creation.
-        image->setStyleInternal(style);
+        RenderImage* image = new RenderImage(element, std::move(style));
         if (const StyleImage* styleImage = static_cast<const ImageContentData*>(contentData)->image()) {
             image->setImageResource(RenderImageResourceStyleImage::create(const_cast<StyleImage&>(*styleImage)));
             image->setIsGeneratedContent();
         } else
             image->setImageResource(RenderImageResource::create());
-        image->clearStyleInternal();
         return image;
     }
 
     if (element.hasTagName(HTMLNames::rubyTag)) {
-        if (style.display() == INLINE)
-            return new RenderRubyAsInline(element);
-        if (style.display() == BLOCK)
-            return new RenderRubyAsBlock(element);
+        if (style.get().display() == INLINE)
+            return new RenderRubyAsInline(element, std::move(style));
+        if (style.get().display() == BLOCK)
+            return new RenderRubyAsBlock(element, std::move(style));
     }
     // treat <rt> as ruby text ONLY if it still has its default treatment of block
-    if (element.hasTagName(HTMLNames::rtTag) && style.display() == BLOCK)
-        return new RenderRubyText(element);
-    switch (style.display()) {
+    if (element.hasTagName(HTMLNames::rtTag) && style.get().display() == BLOCK)
+        return new RenderRubyText(element, std::move(style));
+    switch (style.get().display()) {
     case NONE:
         return 0;
     case INLINE:
-        return new RenderInline(element);
+        return new RenderInline(element, std::move(style));
     case BLOCK:
     case INLINE_BLOCK:
     case RUN_IN:
     case COMPACT:
-        if ((!style.hasAutoColumnCount() || !style.hasAutoColumnWidth()) && document.regionBasedColumnsEnabled())
-            return new RenderMultiColumnBlock(element);
-        return new RenderBlockFlow(element);
+        if ((!style.get().hasAutoColumnCount() || !style.get().hasAutoColumnWidth()) && document.regionBasedColumnsEnabled())
+            return new RenderMultiColumnBlock(element, std::move(style));
+        return new RenderBlockFlow(element, std::move(style));
     case LIST_ITEM:
-        return new RenderListItem(element);
+        return new RenderListItem(element, std::move(style));
     case TABLE:
     case INLINE_TABLE:
-        return new RenderTable(element);
+        return new RenderTable(element, std::move(style));
     case TABLE_ROW_GROUP:
     case TABLE_HEADER_GROUP:
     case TABLE_FOOTER_GROUP:
-        return new RenderTableSection(element);
+        return new RenderTableSection(element, std::move(style));
     case TABLE_ROW:
-        return new RenderTableRow(element);
+        return new RenderTableRow(element, std::move(style));
     case TABLE_COLUMN_GROUP:
     case TABLE_COLUMN:
-        return new RenderTableCol(element);
+        return new RenderTableCol(element, std::move(style));
     case TABLE_CELL:
-        return new RenderTableCell(element);
+        return new RenderTableCell(element, std::move(style));
     case TABLE_CAPTION:
-        return new RenderTableCaption(element);
+        return new RenderTableCaption(element, std::move(style));
     case BOX:
     case INLINE_BOX:
-        return new RenderDeprecatedFlexibleBox(element);
+        return new RenderDeprecatedFlexibleBox(element, std::move(style));
     case FLEX:
     case INLINE_FLEX:
-        return new RenderFlexibleBox(element);
+        return new RenderFlexibleBox(element, std::move(style));
     case GRID:
     case INLINE_GRID:
-        return new RenderGrid(element);
+        return new RenderGrid(element, std::move(style));
     }
     ASSERT_NOT_REACHED();
     return nullptr;
@@ -349,6 +348,37 @@ void RenderElement::updateShapeImage(const ShapeValue* oldShapeValue, const Shap
 }
 #endif
 
+void RenderElement::initializeStyle()
+{
+    styleWillChange(StyleDifferenceEqual, *style());
+
+    m_hasInitializedStyle = true;
+
+    updateFillImages(nullptr, m_style->backgroundLayers());
+    updateFillImages(nullptr, m_style->maskLayers());
+
+    updateImage(nullptr, m_style->borderImage().image());
+    updateImage(nullptr, m_style->maskBoxImage().image());
+
+#if ENABLE(CSS_SHAPES)
+    updateShapeImage(nullptr, m_style->shapeInside());
+    updateShapeImage(nullptr, m_style->shapeOutside());
+#endif
+
+    // We need to ensure that view->maximalOutlineSize() is valid for any repaints that happen
+    // during styleDidChange (it's used by clippedOverflowRectForRepaint()).
+    if (m_style->outlineWidth() > 0 && m_style->outlineSize() > maximalOutlineSize(PaintPhaseOutline))
+        view().setMaximalOutlineSize(m_style->outlineSize());
+
+    styleDidChange(StyleDifferenceEqual, nullptr);
+
+    // We shouldn't have any text (or other) children that need styleDidChange at this point.
+    ASSERT(!firstChild());
+
+    // It would be nice to assert that !parent() here, but some RenderLayer subrenderers
+    // have their parent set before getting a call to initializeStyle() :|
+}
+
 void RenderElement::setStyle(PassRef<RenderStyle> style)
 {
     if (m_style == &style.get()) {
@@ -363,7 +393,7 @@ void RenderElement::setStyle(PassRef<RenderStyle> style)
 
     StyleDifference diff = StyleDifferenceEqual;
     unsigned contextSensitiveProperties = ContextSensitivePropertyNone;
-    if (m_style)
+    if (m_hasInitializedStyle)
         diff = m_style->diff(&style.get(), contextSensitiveProperties);
 
     diff = adjustStyleDifference(diff, contextSensitiveProperties);
@@ -795,7 +825,8 @@ static inline bool rendererHasBackground(const RenderElement* renderer)
 
 void RenderElement::styleWillChange(StyleDifference diff, const RenderStyle& newStyle)
 {
-    if (m_style) {
+    RenderStyle* oldStyle = hasInitializedStyle() ? style() : nullptr;
+    if (oldStyle) {
         // If our z-index changes value or our visibility changes,
         // we need to dirty our stacking context's z-order list.
         bool visibilityChanged = m_style->visibility() != newStyle.visibility()
@@ -859,7 +890,7 @@ void RenderElement::styleWillChange(StyleDifference diff, const RenderStyle& new
     bool repaintFixedBackgroundsOnScroll = shouldRepaintFixedBackgroundsOnScroll();
 
     bool newStyleSlowScroll = repaintFixedBackgroundsOnScroll && newStyle.hasFixedBackgroundImage();
-    bool oldStyleSlowScroll = m_style && repaintFixedBackgroundsOnScroll && m_style->hasFixedBackgroundImage();
+    bool oldStyleSlowScroll = oldStyle && repaintFixedBackgroundsOnScroll && m_style->hasFixedBackgroundImage();
 
 #if USE(ACCELERATED_COMPOSITING)
     bool drawsRootBackground = isRoot() || (isBody() && !rendererHasBackground(document().documentElement()->renderer()));
index 628ea00..cfba369 100644 (file)
@@ -31,11 +31,15 @@ class RenderElement : public RenderObject {
 public:
     virtual ~RenderElement();
 
-    static RenderElement* createFor(Element&, RenderStyle&);
+    static RenderElement* createFor(Element&, PassRef<RenderStyle>);
+
+    bool hasInitializedStyle() const { return m_hasInitializedStyle; }
 
     RenderStyle* style() const { return m_style.get(); }
     RenderStyle* firstLineStyle() const;
 
+    void initializeStyle();
+
     virtual void setStyle(PassRef<RenderStyle>);
     // Called to update a style that is allowed to trigger animations.
     void setAnimatableStyle(PassRef<RenderStyle>);
@@ -104,7 +108,6 @@ public:
     // Updates only the local style ptr of the object. Does not update the state of the object,
     // and so only should be called when the style is known not to have changed (or from setStyle).
     void setStyleInternal(PassRef<RenderStyle> style) { m_style = std::move(style); }
-    void clearStyleInternal() { m_style = nullptr; }
 
 protected:
     enum BaseTypeFlags {
@@ -116,8 +119,8 @@ protected:
         RenderBlockFlowFlag = 1 << 5,
     };
 
-    RenderElement(Element&, unsigned baseTypeFlags);
-    RenderElement(Document&, unsigned baseTypeFlags);
+    RenderElement(Element&, PassRef<RenderStyle>, unsigned baseTypeFlags);
+    RenderElement(Document&, PassRef<RenderStyle>, unsigned baseTypeFlags);
 
     bool layerCreationAllowedForSubtree() const;
 
@@ -162,6 +165,7 @@ private:
 
     unsigned m_baseTypeFlags : 6;
     bool m_ancestorLineBoxDirty : 1;
+    bool m_hasInitializedStyle : 1;
 
     RenderObject* m_firstChild;
     RenderObject* m_lastChild;
index 8b39753..83c3315 100644 (file)
@@ -100,8 +100,8 @@ static const Color& unavailablePluginBorderColor()
     return standard;
 }
 
-RenderEmbeddedObject::RenderEmbeddedObject(HTMLFrameOwnerElement& element)
-    : RenderWidget(element)
+RenderEmbeddedObject::RenderEmbeddedObject(HTMLFrameOwnerElement& element, PassRef<RenderStyle> style)
+    : RenderWidget(element, std::move(style))
     , m_hasFallbackContent(false)
     , m_isPluginUnavailable(false)
     , m_isUnavailablePluginIndicatorHidden(false)
@@ -117,9 +117,9 @@ RenderEmbeddedObject::~RenderEmbeddedObject()
     view().frameView().removeEmbeddedObjectToUpdate(*this);
 }
 
-RenderEmbeddedObject* RenderEmbeddedObject::createForApplet(HTMLAppletElement& applet)
+RenderEmbeddedObject* RenderEmbeddedObject::createForApplet(HTMLAppletElement& applet, PassRef<RenderStyle> style)
 {
-    RenderEmbeddedObject* renderer = new RenderEmbeddedObject(applet);
+    RenderEmbeddedObject* renderer = new RenderEmbeddedObject(applet, std::move(style));
     renderer->setInline(true);
     return renderer;
 }
index 3aef925..0ed93b0 100644 (file)
@@ -35,10 +35,10 @@ class TextRun;
 // For example, <embed src="foo.html"> does not invoke a plug-in.
 class RenderEmbeddedObject : public RenderWidget {
 public:
-    explicit RenderEmbeddedObject(HTMLFrameOwnerElement&);
+    RenderEmbeddedObject(HTMLFrameOwnerElement&, PassRef<RenderStyle>);
     virtual ~RenderEmbeddedObject();
 
-    static RenderEmbeddedObject* createForApplet(HTMLAppletElement&);
+    static RenderEmbeddedObject* createForApplet(HTMLAppletElement&, PassRef<RenderStyle>);
 
     enum PluginUnavailabilityReason {
         PluginMissing,
index 2091581..10f2b65 100644 (file)
@@ -34,8 +34,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderFieldset::RenderFieldset(HTMLFieldSetElement& element)
-    : RenderBlockFlow(element)
+RenderFieldset::RenderFieldset(HTMLFieldSetElement& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
index b2a3033..0f559d3 100644 (file)
@@ -33,7 +33,7 @@ class HTMLFieldSetElement;
 
 class RenderFieldset FINAL : public RenderBlockFlow {
 public:
-    explicit RenderFieldset(HTMLFieldSetElement&);
+    RenderFieldset(HTMLFieldSetElement&, PassRef<RenderStyle>);
 
     enum FindLegendOption { IgnoreFloatingOrOutOfFlow, IncludeFloatingOrOutOfFlow };
     RenderBox* findLegend(FindLegendOption = IgnoreFloatingOrOutOfFlow) const;
index c19fcc6..7c12b5e 100644 (file)
@@ -50,8 +50,8 @@ const int iconFilenameSpacing = 2;
 const int defaultWidthNumChars = 34;
 const int buttonShadowHeight = 2;
 
-RenderFileUploadControl::RenderFileUploadControl(HTMLInputElement& input)
-    : RenderBlockFlow(input)
+RenderFileUploadControl::RenderFileUploadControl(HTMLInputElement& input, PassRef<RenderStyle> style)
+    : RenderBlockFlow(input, std::move(style))
     , m_canReceiveDroppedFiles(input.canReceiveDroppedFiles())
 {
 }
index 4047553..9da1ddc 100644 (file)
@@ -33,7 +33,7 @@ class HTMLInputElement;
 
 class RenderFileUploadControl FINAL : public RenderBlockFlow {
 public:
-    explicit RenderFileUploadControl(HTMLInputElement&);
+    RenderFileUploadControl(HTMLInputElement&, PassRef<RenderStyle>);
     virtual ~RenderFileUploadControl();
 
     String buttonValue();
index b1be52c..dc7d6fd 100644 (file)
@@ -118,16 +118,16 @@ struct RenderFlexibleBox::Violation {
 };
 
 
-RenderFlexibleBox::RenderFlexibleBox(Element& element)
-    : RenderBlock(element, 0)
+RenderFlexibleBox::RenderFlexibleBox(Element& element, PassRef<RenderStyle> style)
+    : RenderBlock(element, std::move(style), 0)
     , m_orderIterator(this)
     , m_numberOfInFlowChildrenOnFirstLine(-1)
 {
     setChildrenInline(false); // All of our children must be block-level.
 }
 
-RenderFlexibleBox::RenderFlexibleBox(Document& document)
-    : RenderBlock(document, 0)
+RenderFlexibleBox::RenderFlexibleBox(Document& document, PassRef<RenderStyle> style)
+    : RenderBlock(document, std::move(style), 0)
     , m_orderIterator(this)
     , m_numberOfInFlowChildrenOnFirstLine(-1)
 {
index a59b38c..a385216 100644 (file)
@@ -37,8 +37,8 @@ namespace WebCore {
 
 class RenderFlexibleBox : public RenderBlock {
 public:
-    explicit RenderFlexibleBox(Element&);
-    explicit RenderFlexibleBox(Document&);
+    RenderFlexibleBox(Element&, PassRef<RenderStyle>);
+    RenderFlexibleBox(Document&, PassRef<RenderStyle>);
     virtual ~RenderFlexibleBox();
 
     virtual const char* renderName() const OVERRIDE;
index ec8d83d..58a316b 100644 (file)
@@ -51,8 +51,8 @@
 
 namespace WebCore {
 
-RenderFlowThread::RenderFlowThread(Document& document)
-    : RenderBlockFlow(document)
+RenderFlowThread::RenderFlowThread(Document& document, PassRef<RenderStyle> style)
+    : RenderBlockFlow(document, std::move(style))
     , m_previousRegionCount(0)
     , m_autoLogicalHeightRegionsCount(0)
     , m_regionsInvalidated(false)
index 96079f8..43b7974 100644 (file)
@@ -60,7 +60,7 @@ typedef HashMap<RenderLayer*, RenderNamedFlowFragment*> LayerToRegionMap;
 
 class RenderFlowThread: public RenderBlockFlow {
 public:
-    explicit RenderFlowThread(Document&);
+    RenderFlowThread(Document&, PassRef<RenderStyle>);
     virtual ~RenderFlowThread() { };
     
     virtual bool isRenderFlowThread() const OVERRIDE FINAL { return true; }
index fe3e1e0..c4f9527 100644 (file)
@@ -30,8 +30,8 @@
 
 namespace WebCore {
 
-RenderFrame::RenderFrame(HTMLFrameElement& frame)
-    : RenderFrameBase(frame)
+RenderFrame::RenderFrame(HTMLFrameElement& frame, PassRef<RenderStyle> style)
+    : RenderFrameBase(frame, std::move(style))
 {
 }
 
index f999726..274709e 100644 (file)
@@ -32,7 +32,7 @@ class HTMLFrameElement;
 
 class RenderFrame FINAL : public RenderFrameBase {
 public:
-    explicit RenderFrame(HTMLFrameElement&);
+    RenderFrame(HTMLFrameElement&, PassRef<RenderStyle>);
 
     HTMLFrameElement& frameElement() const;
     FrameEdgeInfo edgeInfo() const;
index f505d3e..2982d1d 100644 (file)
@@ -33,8 +33,8 @@
 
 namespace WebCore {
 
-RenderFrameBase::RenderFrameBase(HTMLFrameElementBase& element)
-    : RenderWidget(element)
+RenderFrameBase::RenderFrameBase(HTMLFrameElementBase& element, PassRef<RenderStyle> style)
+    : RenderWidget(element, std::move(style))
 {
 }
 
index 61faaff..d853f7e 100644 (file)
@@ -35,7 +35,7 @@ class HTMLFrameElementBase;
 // Base class for RenderFrame and RenderIFrame
 class RenderFrameBase : public RenderWidget {
 protected:
-    explicit RenderFrameBase(HTMLFrameElementBase&);
+    RenderFrameBase(HTMLFrameElementBase&, PassRef<RenderStyle>);
 
 public:
     void layoutWithFlattening(bool fixedWidth, bool fixedHeight);
index 075e310..36c9404 100644 (file)
@@ -44,8 +44,8 @@
 
 namespace WebCore {
 
-RenderFrameSet::RenderFrameSet(HTMLFrameSetElement& frameSet)
-    : RenderBox(frameSet, 0)
+RenderFrameSet::RenderFrameSet(HTMLFrameSetElement& frameSet, PassRef<RenderStyle> style)
+    : RenderBox(frameSet, std::move(style), 0)
     , m_isResizing(false)
     , m_isChildResizing(false)
 {
index f6b44ab..b24dbcf 100644 (file)
@@ -55,7 +55,7 @@ private:
 
 class RenderFrameSet FINAL : public RenderBox {
 public:
-    explicit RenderFrameSet(HTMLFrameSetElement&);
+    RenderFrameSet(HTMLFrameSetElement&, PassRef<RenderStyle>);
     virtual ~RenderFrameSet();
 
     HTMLFrameSetElement& frameSetElement() const;
index ffe26fa..e3d3997 100644 (file)
@@ -39,8 +39,8 @@ namespace WebCore {
 
 class RenderFullScreenPlaceholder FINAL : public RenderBlockFlow {
 public:
-    RenderFullScreenPlaceholder(RenderFullScreen& owner)
-        : RenderBlockFlow(owner.document())
+    RenderFullScreenPlaceholder(RenderFullScreen& owner, PassRef<RenderStyle> style)
+        : RenderBlockFlow(owner.document(), std::move(style))
         , m_owner(owner) 
     {
     }
@@ -57,8 +57,8 @@ void RenderFullScreenPlaceholder::willBeDestroyed()
     RenderBlockFlow::willBeDestroyed();
 }
 
-RenderFullScreen::RenderFullScreen(Document& document)
-    : RenderFlexibleBox(document)
+RenderFullScreen::RenderFullScreen(Document& document, PassRef<RenderStyle> style)
+    : RenderFlexibleBox(document, std::move(style))
     , m_placeholder(0)
 {
     setReplaced(false); 
@@ -109,8 +109,8 @@ static PassRef<RenderStyle> createFullScreenStyle()
 
 RenderFullScreen* RenderFullScreen::wrapRenderer(RenderObject* object, RenderElement* parent, Document& document)
 {
-    RenderFullScreen* fullscreenRenderer = new RenderFullScreen(document);
-    fullscreenRenderer->setStyle(createFullScreenStyle());
+    RenderFullScreen* fullscreenRenderer = new RenderFullScreen(document, createFullScreenStyle());
+    fullscreenRenderer->initializeStyle();
     if (parent && !parent->isChildAllowed(*fullscreenRenderer, *fullscreenRenderer->style())) {
         fullscreenRenderer->destroy();
         return 0;
@@ -167,22 +167,24 @@ void RenderFullScreen::setPlaceholder(RenderBlock* placeholder)
     m_placeholder = placeholder;
 }
 
-void RenderFullScreen::createPlaceholder(PassRefPtr<RenderStyle> style, const LayoutRect& frameRect)
+void RenderFullScreen::createPlaceholder(PassRef<RenderStyle> style, const LayoutRect& frameRect)
 {
-    if (style->width().isAuto())
-        style->setWidth(Length(frameRect.width(), Fixed));
-    if (style->height().isAuto())
-        style->setHeight(Length(frameRect.height(), Fixed));
-
-    if (!m_placeholder) {
-        m_placeholder = new RenderFullScreenPlaceholder(*this);
-        m_placeholder->setStyle(*style);
-        if (parent()) {
-            parent()->addChild(m_placeholder, this);
-            parent()->setNeedsLayoutAndPrefWidthsRecalc();
-        }
-    } else
-        m_placeholder->setStyle(*style);
+    if (style.get().width().isAuto())
+        style.get().setWidth(Length(frameRect.width(), Fixed));
+    if (style.get().height().isAuto())
+        style.get().setHeight(Length(frameRect.height(), Fixed));
+
+    if (m_placeholder) {
+        m_placeholder->setStyle(std::move(style));
+        return;
+    }
+
+    m_placeholder = new RenderFullScreenPlaceholder(*this, std::move(style));
+    m_placeholder->initializeStyle();
+    if (parent()) {
+        parent()->addChild(m_placeholder, this);
+        parent()->setNeedsLayoutAndPrefWidthsRecalc();
+    }
 }
 
 }
index dee5689..bd60050 100644 (file)
@@ -34,15 +34,14 @@ namespace WebCore {
 
 class RenderFullScreen FINAL : public RenderFlexibleBox {
 public:
-    explicit RenderFullScreen(Document&);
+    RenderFullScreen(Document&, PassRef<RenderStyle>);
 
     virtual bool isRenderFullScreen() const OVERRIDE { return true; }
     virtual const char* renderName() const OVERRIDE { return "RenderFullScreen"; }
 
     void setPlaceholder(RenderBlock*);
     RenderBlock* placeholder() { return m_placeholder; }
-    void createPlaceholder(PassRefPtr<RenderStyle>, const LayoutRect& frameRect);
-
+    void createPlaceholder(PassRef<RenderStyle>, const LayoutRect& frameRect);
 
     static RenderFullScreen* wrapRenderer(RenderObject*, RenderElement*, Document&);
     void unwrapRenderer();
index acb6313..754a7af 100644 (file)
@@ -141,8 +141,8 @@ private:
     size_t m_childIndex;
 };
 
-RenderGrid::RenderGrid(Element& element)
-    : RenderBlock(element, 0)
+RenderGrid::RenderGrid(Element& element, PassRef<RenderStyle> style)
+    : RenderBlock(element, std::move(style), 0)
 {
     // All of our children must be block level.
     setChildrenInline(false);
index 3194107..456812d 100644 (file)
@@ -36,7 +36,7 @@ class GridTrack;
 
 class RenderGrid FINAL : public RenderBlock {
 public:
-    explicit RenderGrid(Element&);
+    RenderGrid(Element&, PassRef<RenderStyle>);
     virtual ~RenderGrid();
 
     Element& element() const { return toElement(nodeForNonAnonymous()); }
index e526e9d..03bf4d5 100644 (file)
@@ -41,8 +41,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderHTMLCanvas::RenderHTMLCanvas(HTMLCanvasElement& element)
-    : RenderReplaced(element, element.size())
+RenderHTMLCanvas::RenderHTMLCanvas(HTMLCanvasElement& element, PassRef<RenderStyle> style)
+    : RenderReplaced(element, std::move(style), element.size())
 {
     // Actual size is not known yet, report the default intrinsic size.
     view().frameView().incrementVisuallyNonEmptyPixelCount(roundedIntSize(intrinsicSize()));
index dce6e92..4414b5c 100644 (file)
@@ -34,7 +34,7 @@ class HTMLCanvasElement;
 
 class RenderHTMLCanvas FINAL : public RenderReplaced {
 public:
-    explicit RenderHTMLCanvas(HTMLCanvasElement&);
+    RenderHTMLCanvas(HTMLCanvasElement&, PassRef<RenderStyle>);
 
     HTMLCanvasElement& canvasElement() const;
 
index 0a3af99..5c584a0 100644 (file)
@@ -39,8 +39,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
     
-RenderIFrame::RenderIFrame(HTMLIFrameElement& element)
-    : RenderFrameBase(element)
+RenderIFrame::RenderIFrame(HTMLIFrameElement& element, PassRef<RenderStyle> style)
+    : RenderFrameBase(element, std::move(style))
 {
 }
 
index 0837f8f..34e14e1 100644 (file)
@@ -34,7 +34,7 @@ class RenderView;
 
 class RenderIFrame FINAL : public RenderFrameBase {
 public:
-    explicit RenderIFrame(HTMLIFrameElement&);
+    RenderIFrame(HTMLIFrameElement&, PassRef<RenderStyle>);
 
     HTMLIFrameElement& iframeElement() const;
 
index a8fe32b..6019ba3 100644 (file)
@@ -53,8 +53,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderImage::RenderImage(Element& element)
-    : RenderReplaced(element, IntSize())
+RenderImage::RenderImage(Element& element, PassRef<RenderStyle> style)
+    : RenderReplaced(element, std::move(style), IntSize())
     , m_needsToSetSizeForAltText(false)
     , m_didIncrementVisuallyNonEmptyPixelCount(false)
     , m_isGeneratedContent(false)
@@ -62,8 +62,8 @@ RenderImage::RenderImage(Element& element)
     updateAltText();
 }
 
-RenderImage::RenderImage(Document& document)
-    : RenderReplaced(document, IntSize())
+RenderImage::RenderImage(Document& document, PassRef<RenderStyle> style)
+    : RenderReplaced(document, std::move(style), IntSize())
     , m_needsToSetSizeForAltText(false)
     , m_didIncrementVisuallyNonEmptyPixelCount(false)
     , m_isGeneratedContent(false)
index f527be5..781a088 100644 (file)
@@ -35,8 +35,8 @@ class HTMLMapElement;
 
 class RenderImage : public RenderReplaced {
 public:
-    explicit RenderImage(Element&);
-    explicit RenderImage(Document&);
+    explicit RenderImage(Element&, PassRef<RenderStyle>);
+    explicit RenderImage(Document&, PassRef<RenderStyle>);
     virtual ~RenderImage();
 
     // Set the style of the object if it's generated content.
index 2cbdcc6..7f9bd4f 100644 (file)
@@ -50,15 +50,15 @@ using namespace std;
 
 namespace WebCore {
 
-RenderInline::RenderInline(Element& element)
-    : RenderBoxModelObject(element, RenderInlineFlag)
+RenderInline::RenderInline(Element& element, PassRef<RenderStyle> style)
+    : RenderBoxModelObject(element, std::move(style), RenderInlineFlag)
     , m_alwaysCreateLineBoxes(false)
 {
     setChildrenInline(true);
 }
 
-RenderInline::RenderInline(Document& document)
-    : RenderBoxModelObject(document, RenderInlineFlag)
+RenderInline::RenderInline(Document& document, PassRef<RenderStyle> style)
+    : RenderBoxModelObject(document, std::move(style), RenderInlineFlag)
     , m_alwaysCreateLineBoxes(false)
 {
     setChildrenInline(true);
@@ -319,8 +319,8 @@ void RenderInline::addChildIgnoringContinuation(RenderObject* newChild, RenderOb
         if (auto positionedAncestor = inFlowPositionedInlineAncestor(this))
             newStyle.get().setPosition(positionedAncestor->style()->position());
 
-        RenderBlock* newBox = new RenderBlockFlow(document());
-        newBox->setStyle(std::move(newStyle));
+        RenderBlock* newBox = new RenderBlockFlow(document(), std::move(newStyle));
+        newBox->initializeStyle();
         RenderBoxModelObject* oldContinuation = continuation();
         setContinuation(newBox);
 
@@ -335,8 +335,8 @@ void RenderInline::addChildIgnoringContinuation(RenderObject* newChild, RenderOb
 
 RenderInline* RenderInline::clone() const
 {
-    RenderInline* cloneInline = new RenderInline(*element());
-    cloneInline->setStyle(*style());
+    RenderInline* cloneInline = new RenderInline(*element(), *style());
+    cloneInline->initializeStyle();
     cloneInline->setFlowThreadState(flowThreadState());
     return cloneInline;
 }
index 0e78ed5..26db866 100644 (file)
@@ -33,8 +33,8 @@ class Position;
 
 class RenderInline : public RenderBoxModelObject {
 public:
-    explicit RenderInline(Element&);
-    explicit RenderInline(Document&);
+    RenderInline(Element&, PassRef<RenderStyle>);
+    RenderInline(Document&, PassRef<RenderStyle>);
 
     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0) OVERRIDE;
 
index 4362b5c..d613c27 100644 (file)
@@ -6209,8 +6209,9 @@ void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle)
     else if (hasReflection()) {
         if (!m_reflection)
             createReflection();
+        else
+            m_reflection->setStyle(createReflectionStyle());
         FeatureObserver::observe(&renderer().document(), FeatureObserver::Reflection);
-        updateReflectionStyle();
     }
     
     // FIXME: Need to detect a swap from custom to native scrollbars (and vice versa).
@@ -6296,10 +6297,11 @@ void RenderLayer::updateScrollCornerStyle()
     RefPtr<RenderStyle> corner = renderer().hasOverflowClip() ? actualRenderer->getUncachedPseudoStyle(PseudoStyleRequest(SCROLLBAR_CORNER), actualRenderer->style()) : PassRefPtr<RenderStyle>(0);
     if (corner) {
         if (!m_scrollCorner) {
-            m_scrollCorner = new RenderScrollbarPart(renderer().document());
+            m_scrollCorner = new RenderScrollbarPart(renderer().document(), corner.releaseNonNull());
             m_scrollCorner->setParent(&renderer());
-        }
-        m_scrollCorner->setStyle(corner.releaseNonNull());
+            m_scrollCorner->initializeStyle();
+        } else
+            m_scrollCorner->setStyle(corner.releaseNonNull());
     } else if (m_scrollCorner) {
         m_scrollCorner->destroy();
         m_scrollCorner = 0;
@@ -6312,10 +6314,11 @@ void RenderLayer::updateResizerStyle()
     RefPtr<RenderStyle> resizer = renderer().hasOverflowClip() ? actualRenderer->getUncachedPseudoStyle(PseudoStyleRequest(RESIZER), actualRenderer->style()) : PassRefPtr<RenderStyle>(0);
     if (resizer) {
         if (!m_resizer) {
-            m_resizer = new RenderScrollbarPart(renderer().document());
+            m_resizer = new RenderScrollbarPart(renderer().document(), resizer.releaseNonNull());
             m_resizer->setParent(&renderer());
-        }
-        m_resizer->setStyle(resizer.releaseNonNull());
+            m_resizer->initializeStyle();
+        } else
+            m_resizer->setStyle(resizer.releaseNonNull());
     } else if (m_resizer) {
         m_resizer->destroy();
         m_resizer = 0;
@@ -6330,8 +6333,9 @@ RenderLayer* RenderLayer::reflectionLayer() const
 void RenderLayer::createReflection()
 {
     ASSERT(!m_reflection);
-    m_reflection = new RenderReplica(renderer().document());
+    m_reflection = new RenderReplica(renderer().document(), createReflectionStyle());
     m_reflection->setParent(&renderer()); // We create a 1-way connection.
+    m_reflection->initializeStyle();
 }
 
 void RenderLayer::removeReflection()
@@ -6344,7 +6348,7 @@ void RenderLayer::removeReflection()
     m_reflection = 0;
 }
 
-void RenderLayer::updateReflectionStyle()
+PassRef<RenderStyle> RenderLayer::createReflectionStyle()
 {
     auto newStyle = RenderStyle::create();
     newStyle.get().inheritFrom(renderer().style());
@@ -6377,8 +6381,8 @@ void RenderLayer::updateReflectionStyle()
 
     // Map in our mask.
     newStyle.get().setMaskBoxImage(renderer().style()->boxReflect()->mask());
-    
-    m_reflection->setStyle(std::move(newStyle));
+
+    return newStyle;
 }
 
 #if ENABLE(CSS_SHADERS)
index ed10acf..7f4457f 100644 (file)
@@ -1064,7 +1064,7 @@ private:
     void createReflection();
     void removeReflection();
 
-    void updateReflectionStyle();
+    PassRef<RenderStyle> createReflectionStyle();
     bool paintingInsideReflection() const { return m_paintingInsideReflection; }
     void setPaintingInsideReflection(bool b) { m_paintingInsideReflection = b; }
 
index aa6fb98..791d511 100644 (file)
@@ -37,13 +37,13 @@ bool RenderLayerModelObject::s_hadLayer = false;
 bool RenderLayerModelObject::s_hadTransform = false;
 bool RenderLayerModelObject::s_layerWasSelfPainting = false;
 
-RenderLayerModelObject::RenderLayerModelObject(Element& element, unsigned baseTypeFlags)
-    : RenderElement(element, baseTypeFlags | RenderLayerModelObjectFlag)
+RenderLayerModelObject::RenderLayerModelObject(Element& element, PassRef<RenderStyle> style, unsigned baseTypeFlags)
+    : RenderElement(element, std::move(style), baseTypeFlags | RenderLayerModelObjectFlag)
 {
 }
 
-RenderLayerModelObject::RenderLayerModelObject(Document& document, unsigned baseTypeFlags)
-    : RenderElement(document, baseTypeFlags | RenderLayerModelObjectFlag)
+RenderLayerModelObject::RenderLayerModelObject(Document& document, PassRef<RenderStyle> style, unsigned baseTypeFlags)
+    : RenderElement(document, std::move(style), baseTypeFlags | RenderLayerModelObjectFlag)
 {
 }
 
@@ -95,7 +95,7 @@ void RenderLayerModelObject::styleWillChange(StyleDifference diff, const RenderS
 
     // If our z-index changes value or our visibility changes,
     // we need to dirty our stacking context's z-order list.
-    RenderStyle* oldStyle = style();
+    RenderStyle* oldStyle = hasInitializedStyle() ? style() : nullptr;
     if (oldStyle) {
         if (parent()) {
             // Do a repaint with the old style first, e.g., for example if we go from
index 9ac606f..3b03d69 100644 (file)
@@ -50,8 +50,8 @@ public:
     virtual bool backgroundIsKnownToBeOpaqueInRect(const LayoutRect&) const { return false; }
 
 protected:
-    RenderLayerModelObject(Element&, unsigned baseTypeFlags);
-    RenderLayerModelObject(Document&, unsigned baseTypeFlags);
+    RenderLayerModelObject(Element&, PassRef<RenderStyle>, unsigned baseTypeFlags);
+    RenderLayerModelObject(Document&, PassRef<RenderStyle>, unsigned baseTypeFlags);
 
     void createLayer();
 
index cea4f9c..370a1ea 100644 (file)
@@ -32,8 +32,8 @@ namespace WebCore {
 
 static const int invalidLineHeight = -1;
 
-RenderLineBreak::RenderLineBreak(HTMLElement& element)
-    : RenderBoxModelObject(element, 0)
+RenderLineBreak::RenderLineBreak(HTMLElement& element, PassRef<RenderStyle> style)
+    : RenderBoxModelObject(element, std::move(style), 0)
     , m_inlineBoxWrapper(nullptr)
     , m_cachedLineHeight(invalidLineHeight)
     , m_isWBR(element.hasTagName(HTMLNames::wbrTag))
index 0f84448..9d93d57 100644 (file)
@@ -31,7 +31,7 @@ class Position;
 
 class RenderLineBreak FINAL : public RenderBoxModelObject {
 public:
-    explicit RenderLineBreak(HTMLElement&);
+    RenderLineBreak(HTMLElement&, PassRef<RenderStyle>);
     virtual ~RenderLineBreak();
 
     // FIXME: The lies here keep render tree dump based test results unchanged.
index cc0c13d..c0f0078 100644 (file)
@@ -82,8 +82,8 @@ const int defaultSize = 4;
 // widget, but I'm not sure this is right for the new control.
 const int baselineAdjustment = 7;
 
-RenderListBox::RenderListBox(HTMLSelectElement& element)
-    : RenderBlockFlow(element)
+RenderListBox::RenderListBox(HTMLSelectElement& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
     , m_optionsChanged(true)
     , m_scrollToRevealSelectionAfterLayout(false)
     , m_inAutoscroll(false)
index 95b292c..f4bee2d 100644 (file)
@@ -40,7 +40,7 @@ class HTMLSelectElement;
 
 class RenderListBox FINAL : public RenderBlockFlow, private ScrollableArea {
 public:
-    explicit RenderListBox(HTMLSelectElement&);
+    RenderListBox(HTMLSelectElement&, PassRef<RenderStyle>);
     virtual ~RenderListBox();
 
     HTMLSelectElement& selectElement() const;
index 8d1623d..19ed66d 100644 (file)
@@ -41,8 +41,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderListItem::RenderListItem(Element& element)
-    : RenderBlockFlow(element)
+RenderListItem::RenderListItem(Element& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
     , m_marker(0)
     , m_hasExplicitValue(false)
     , m_isValueUpToDate(false)
@@ -61,9 +61,11 @@ void RenderListItem::styleDidChange(StyleDifference diff, const RenderStyle* old
         // The marker always inherits from the list item, regardless of where it might end
         // up (e.g., in some deeply nested line box). See CSS3 spec.
         newStyle.get().inheritFrom(style());
-        if (!m_marker)
-            m_marker = new RenderListMarker(*this);
-        m_marker->setStyle(std::move(newStyle));
+        if (!m_marker) {
+            m_marker = new RenderListMarker(*this, std::move(newStyle));
+            m_marker->initializeStyle();
+        } else
+            m_marker->setStyle(std::move(newStyle));
     } else if (m_marker) {
         m_marker->destroy();
         m_marker = 0;
index 371d78a..8b4ba9c 100644 (file)
@@ -32,7 +32,7 @@ class RenderListMarker;
 
 class RenderListItem FINAL : public RenderBlockFlow {
 public:
-    explicit RenderListItem(Element&);
+    RenderListItem(Element&, PassRef<RenderStyle>);
     Element& element() const { return toElement(nodeForNonAnonymous()); }
 
     int value() const { if (!m_isValueUpToDate) updateValueNow(); return m_value; }
index 661d08c..a7fc7d4 100644 (file)
@@ -1117,8 +1117,8 @@ String listMarkerText(EListStyleType type, int value)
     return builder.toString();
 }
 
-RenderListMarker::RenderListMarker(RenderListItem& listItem)
-    : RenderBox(listItem.document(), 0)
+RenderListMarker::RenderListMarker(RenderListItem& listItem, PassRef<RenderStyle> style)
+    : RenderBox(listItem.document(), std::move(style), 0)
     , m_listItem(listItem)
 {
     // init RenderObject attributes
index 9ccf55d..8b0aba6 100644 (file)
@@ -35,7 +35,7 @@ String listMarkerText(EListStyleType, int value);
 // The RenderListMarker always has to be a child of a RenderListItem.
 class RenderListMarker FINAL : public RenderBox {
 public:
-    explicit RenderListMarker(RenderListItem&);
+    RenderListMarker(RenderListItem&, PassRef<RenderStyle>);
     virtual ~RenderListMarker();
 
     const String& text() const { return m_text; }
index 17685cf..1b9dd17 100644 (file)
 
 namespace WebCore {
 
-RenderMedia::RenderMedia(HTMLMediaElement& element)
-    : RenderImage(element)
+RenderMedia::RenderMedia(HTMLMediaElement& element, PassRef<RenderStyle> style)
+    : RenderImage(element, std::move(style))
 {
     setImageResource(RenderImageResource::create());
 }
 
-RenderMedia::RenderMedia(HTMLMediaElement& element, const IntSize& intrinsicSize)
-    : RenderImage(element)
+RenderMedia::RenderMedia(HTMLMediaElement& element, PassRef<RenderStyle> style, const IntSize& intrinsicSize)
+    : RenderImage(element, std::move(style))
 {
     setImageResource(RenderImageResource::create());
     setIntrinsicSize(intrinsicSize);
index 20e2297..dbbc2de 100644 (file)
@@ -35,8 +35,8 @@ namespace WebCore {
 
 class RenderMedia : public RenderImage {
 public:
-    explicit RenderMedia(HTMLMediaElement&);
-    RenderMedia(HTMLMediaElement&, const IntSize& intrinsicSize);
+    RenderMedia(HTMLMediaElement&, PassRef<RenderStyle>);
+    RenderMedia(HTMLMediaElement&, PassRef<RenderStyle>, const IntSize& intrinsicSize);
     virtual ~RenderMedia();
 
     HTMLMediaElement& mediaElement() const { return toHTMLMediaElement(nodeForNonAnonymous()); }
index 3fa3af3..2e42bc5 100644 (file)
@@ -35,8 +35,8 @@
 
 namespace WebCore {
 
-RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer(Element& element)
-    : RenderBlockFlow(element)
+RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer(Element& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
@@ -59,8 +59,8 @@ void RenderMediaVolumeSliderContainer::layout()
 
 // ----------------------------
 
-RenderMediaControlTimelineContainer::RenderMediaControlTimelineContainer(Element& element)
-    : RenderFlexibleBox(element)
+RenderMediaControlTimelineContainer::RenderMediaControlTimelineContainer(Element& element, PassRef<RenderStyle> style)
+    : RenderFlexibleBox(element, std::move(style))
 {
 }
 
@@ -81,8 +81,8 @@ void RenderMediaControlTimelineContainer::layout()
 
 #if ENABLE(VIDEO_TRACK)
 
-RenderTextTrackContainerElement::RenderTextTrackContainerElement(Element& element)
-    : RenderBlockFlow(element)
+RenderTextTrackContainerElement::RenderTextTrackContainerElement(Element& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
index 4f476c1..0b98ed7 100644 (file)
@@ -38,7 +38,7 @@ namespace WebCore {
 
 class RenderMediaVolumeSliderContainer FINAL : public RenderBlockFlow {
 public:
-    RenderMediaVolumeSliderContainer(Element&);
+    RenderMediaVolumeSliderContainer(Element&, PassRef<RenderStyle>);
 
 private:
     virtual void layout();
@@ -48,7 +48,7 @@ private:
 
 class RenderMediaControlTimelineContainer FINAL : public RenderFlexibleBox {
 public:
-    RenderMediaControlTimelineContainer(Element&);
+    RenderMediaControlTimelineContainer(Element&, PassRef<RenderStyle>);
 
 private:
     virtual void layout();
@@ -60,7 +60,7 @@ private:
 
 class RenderTextTrackContainerElement FINAL : public RenderBlockFlow {
 public:
-    RenderTextTrackContainerElement(Element&);
+    RenderTextTrackContainerElement(Element&, PassRef<RenderStyle>);
 
 private:
     virtual void layout();
index a5d45bd..457115e 100644 (file)
@@ -54,8 +54,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderMenuList::RenderMenuList(HTMLSelectElement& element)
-    : RenderFlexibleBox(element)
+RenderMenuList::RenderMenuList(HTMLSelectElement& element, PassRef<RenderStyle> style)
+    : RenderFlexibleBox(element, std::move(style))
     , m_buttonText(nullptr)
     , m_innerBlock(nullptr)
     , m_needsOptionsWidthUpdate(true)
index 6235b46..b79b36f 100644 (file)
@@ -43,7 +43,7 @@ class RenderText;
 class RenderMenuList FINAL : public RenderFlexibleBox, private PopupMenuClient {
 
 public:
-    explicit RenderMenuList(HTMLSelectElement&);
+    RenderMenuList(HTMLSelectElement&, PassRef<RenderStyle>);
     virtual ~RenderMenuList();
 
     HTMLSelectElement& selectElement() const;
index ef48740..fb2af52 100644 (file)
@@ -32,8 +32,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderMeter::RenderMeter(HTMLElement& element)
-    : RenderBlockFlow(element)
+RenderMeter::RenderMeter(HTMLElement& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
index c655ae7..2e30b4b 100644 (file)
@@ -32,7 +32,7 @@ class HTMLMeterElement;
 
 class RenderMeter FINAL : public RenderBlockFlow {
 public:
-    explicit RenderMeter(HTMLElement&);
+    RenderMeter(HTMLElement&, PassRef<RenderStyle>);
     virtual ~RenderMeter();
 
     HTMLMeterElement* meterElement() const;
index c176b8a..93d2c4b 100644 (file)
@@ -35,8 +35,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderMultiColumnBlock::RenderMultiColumnBlock(Element& element)
-    : RenderBlockFlow(element)
+RenderMultiColumnBlock::RenderMultiColumnBlock(Element& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
     , m_flowThread(0)
     , m_columnCount(1)
     , m_columnWidth(0)
@@ -139,8 +139,8 @@ bool RenderMultiColumnBlock::relayoutForPagination(bool, LayoutUnit, LayoutState
 void RenderMultiColumnBlock::addChild(RenderObject* newChild, RenderObject* beforeChild)
 {
     if (!m_flowThread) {
-        m_flowThread = new RenderMultiColumnFlowThread(document());
-        m_flowThread->setStyle(RenderStyle::createAnonymousStyleWithDisplay(style(), BLOCK));
+        m_flowThread = new RenderMultiColumnFlowThread(document(), RenderStyle::createAnonymousStyleWithDisplay(style(), BLOCK));
+        m_flowThread->initializeStyle();
         RenderBlockFlow::addChild(m_flowThread);
     }
     m_flowThread->addChild(newChild, beforeChild);
index b190003..a87de03 100644 (file)
@@ -35,7 +35,7 @@ class RenderMultiColumnFlowThread;
 
 class RenderMultiColumnBlock FINAL : public RenderBlockFlow {
 public:
-    explicit RenderMultiColumnBlock(Element&);
+    RenderMultiColumnBlock(Element&, PassRef<RenderStyle>);
     Element& element() const { return toElement(nodeForNonAnonymous()); }
 
     LayoutUnit columnHeightAvailable() const { return m_columnHeightAvailable; }
index 9062a49..de9c742 100644 (file)
@@ -31,8 +31,8 @@
 
 namespace WebCore {
 
-RenderMultiColumnFlowThread::RenderMultiColumnFlowThread(Document& document)
-    : RenderFlowThread(document)
+RenderMultiColumnFlowThread::RenderMultiColumnFlowThread(Document& document, PassRef<RenderStyle> style)
+    : RenderFlowThread(document, std::move(style))
 {
     setFlowThreadState(InsideInFlowThread);
 }
@@ -86,8 +86,8 @@ void RenderMultiColumnFlowThread::autoGenerateRegionsToBlockOffset(LayoutUnit /*
     invalidateRegions();
 
     RenderMultiColumnBlock* parentBlock = toRenderMultiColumnBlock(parent());
-    firstSet = new RenderMultiColumnSet(*this);
-    firstSet->setStyle(RenderStyle::createAnonymousStyleWithDisplay(parentBlock->style(), BLOCK));
+    firstSet = new RenderMultiColumnSet(*this, RenderStyle::createAnonymousStyleWithDisplay(parentBlock->style(), BLOCK));
+    firstSet->initializeStyle();
     parentBlock->RenderBlock::addChild(firstSet);
 
     // Even though we aren't placed yet, we can go ahead and set up our size. At this point we're
index 03eedcf..f36812c 100644 (file)
@@ -33,7 +33,7 @@ namespace WebCore {
 
 class RenderMultiColumnFlowThread FINAL : public RenderFlowThread {
 public:
-    explicit RenderMultiColumnFlowThread(Document&);
+    RenderMultiColumnFlowThread(Document&, PassRef<RenderStyle>);
     ~RenderMultiColumnFlowThread();
 
 private:
index 50a704b..87a7fc5 100644 (file)
@@ -35,8 +35,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderMultiColumnSet::RenderMultiColumnSet(RenderFlowThread& flowThread)
-    : RenderRegionSet(flowThread.document(), flowThread)
+RenderMultiColumnSet::RenderMultiColumnSet(RenderFlowThread& flowThread, PassRef<RenderStyle> style)
+    : RenderRegionSet(flowThread.document(), std::move(style), flowThread)
     , m_computedColumnCount(1)
     , m_computedColumnWidth(0)
     , m_computedColumnHeight(0)
index a0f017d..9ee32bd 100644 (file)
@@ -43,7 +43,7 @@ namespace WebCore {
 // come before and after the span.
 class RenderMultiColumnSet FINAL : public RenderRegionSet {
 public:
-    explicit RenderMultiColumnSet(RenderFlowThread&);
+    RenderMultiColumnSet(RenderFlowThread&, PassRef<RenderStyle>);
 
     virtual bool isRenderMultiColumnSet() const OVERRIDE { return true; }
 
index 4553b1c..7ee2749 100644 (file)
@@ -42,8 +42,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderNamedFlowFragment::RenderNamedFlowFragment(Document& document)
-    : RenderRegion(document, nullptr)
+RenderNamedFlowFragment::RenderNamedFlowFragment(Document& document, PassRef<RenderStyle> style)
+    : RenderRegion(document, std::move(style), nullptr)
 {
 }
 
@@ -51,18 +51,18 @@ RenderNamedFlowFragment::~RenderNamedFlowFragment()
 {
 }
 
-void RenderNamedFlowFragment::setStyleForNamedFlowFragment(const RenderStyle* parentStyle)
+PassRef<RenderStyle> RenderNamedFlowFragment::createStyle(const RenderStyle& parentStyle)
 {
-    auto newStyle = RenderStyle::createAnonymousStyleWithDisplay(parentStyle, BLOCK);
+    auto style = RenderStyle::createAnonymousStyleWithDisplay(&parentStyle, BLOCK);
 
-    newStyle.get().setFlowThread(parentStyle->flowThread());
-    newStyle.get().setRegionThread(parentStyle->regionThread());
-    newStyle.get().setRegionFragment(parentStyle->regionFragment());
+    style.get().setFlowThread(parentStyle.flowThread());
+    style.get().setRegionThread(parentStyle.regionThread());
+    style.get().setRegionFragment(parentStyle.regionFragment());
 #if ENABLE(CSS_SHAPES)
-    newStyle.get().setShapeInside(parentStyle->shapeInside());
+    style.get().setShapeInside(parentStyle.shapeInside());
 #endif
 
-    setStyle(std::move(newStyle));
+    return style;
 }
 
 void RenderNamedFlowFragment::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
index 706b56a..9aeaad9 100644 (file)
@@ -39,10 +39,10 @@ class RenderStyle;
 
 class RenderNamedFlowFragment FINAL : public RenderRegion {
 public:
-    explicit RenderNamedFlowFragment(Document&);
+    RenderNamedFlowFragment(Document&, PassRef<RenderStyle>);
     virtual ~RenderNamedFlowFragment();
 
-    void setStyleForNamedFlowFragment(const RenderStyle*);
+    static PassRef<RenderStyle> createStyle(const RenderStyle& parentStyle);
 
     virtual bool isRenderNamedFlowFragment() const OVERRIDE FINAL { return true; }
     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) OVERRIDE;
index 9253233..fe5c872 100644 (file)
@@ -44,8 +44,8 @@
 
 namespace WebCore {
 
-RenderNamedFlowThread::RenderNamedFlowThread(Document& document, PassRefPtr<WebKitNamedFlow> namedFlow)
-    : RenderFlowThread(document)
+RenderNamedFlowThread::RenderNamedFlowThread(Document& document, PassRef<RenderStyle> style, PassRefPtr<WebKitNamedFlow> namedFlow)
+    : RenderFlowThread(document, std::move(style))
     , m_flowThreadChildList(adoptPtr(new FlowThreadChildList()))
     , m_overset(true)
     , m_namedFlow(namedFlow)
index 427e897..c975113 100644 (file)
@@ -45,7 +45,7 @@ typedef ListHashSet<Element*> NamedFlowContentElements;
 
 class RenderNamedFlowThread FINAL : public RenderFlowThread {
 public:
-    explicit RenderNamedFlowThread(Document&, PassRefPtr<WebKitNamedFlow>);
+    RenderNamedFlowThread(Document&, PassRef<RenderStyle>, PassRefPtr<WebKitNamedFlow>);
     virtual ~RenderNamedFlowThread();
 
     const AtomicString& flowThreadName() const;
index 83520d7..2b5fe15 100644 (file)
@@ -33,8 +33,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderProgress::RenderProgress(HTMLElement& element)
-    : RenderBlockFlow(element)
+RenderProgress::RenderProgress(HTMLElement& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
     , m_position(HTMLProgressElement::InvalidPosition)
     , m_animationStartTime(0)
     , m_animationRepeatInterval(0)
index c416c6f..74e4912 100644 (file)
@@ -30,7 +30,7 @@ class HTMLProgressElement;
 
 class RenderProgress FINAL : public RenderBlockFlow {
 public:
-    explicit RenderProgress(HTMLElement&);
+    RenderProgress(HTMLElement&, PassRef<RenderStyle>);
     virtual ~RenderProgress();
 
     double position() const { return m_position; }
index ed5a74e..5759953 100644 (file)
@@ -48,8 +48,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderRegion::RenderRegion(Element& element, RenderFlowThread* flowThread)
-    : RenderBlockFlow(element)
+RenderRegion::RenderRegion(Element& element, PassRef<RenderStyle> style, RenderFlowThread* flowThread)
+    : RenderBlockFlow(element, std::move(style))
     , m_flowThread(flowThread)
     , m_parentNamedFlowThread(0)
     , m_isValid(false)
@@ -60,8 +60,8 @@ RenderRegion::RenderRegion(Element& element, RenderFlowThread* flowThread)
 {
 }
 
-RenderRegion::RenderRegion(Document& document, RenderFlowThread* flowThread)
-    : RenderBlockFlow(document)
+RenderRegion::RenderRegion(Document& document, PassRef<RenderStyle> style, RenderFlowThread* flowThread)
+    : RenderBlockFlow(document, std::move(style))
     , m_flowThread(flowThread)
     , m_parentNamedFlowThread(0)
     , m_isValid(false)
index e0f1db6..cd6e700 100644 (file)
@@ -152,8 +152,8 @@ public:
     virtual bool canHaveGeneratedChildren() const OVERRIDE { return true; }
 
 protected:
-    RenderRegion(Element&, RenderFlowThread*);
-    RenderRegion(Document&, RenderFlowThread*);
+    RenderRegion(Element&, PassRef<RenderStyle>, RenderFlowThread*);
+    RenderRegion(Document&, PassRef<RenderStyle>, RenderFlowThread*);
 
     RenderOverflow* ensureOverflowForBox(const RenderBox*);
 
index a1b52ff..2c7b3f5 100644 (file)
@@ -30,8 +30,8 @@
 
 namespace WebCore {
 
-RenderRegionSet::RenderRegionSet(Document& document, RenderFlowThread& flowThread)
-    : RenderRegion(document, &flowThread)
+RenderRegionSet::RenderRegionSet(Document& document, PassRef<RenderStyle> style, RenderFlowThread& flowThread)
+    : RenderRegion(document, std::move(style), &flowThread)
 {
 }
 
index 366b424..100bc48 100644 (file)
@@ -47,7 +47,7 @@ class RenderFlowThread;
 
 class RenderRegionSet : public RenderRegion {
 protected:
-    RenderRegionSet(Document&, RenderFlowThread&);
+    RenderRegionSet(Document&, PassRef<RenderStyle>, RenderFlowThread&);
     virtual bool shouldHaveAutoLogicalHeight() const OVERRIDE { return false; }
 
 private:
index 7568419..db8dffb 100644 (file)
@@ -42,22 +42,22 @@ namespace WebCore {
 const int cDefaultWidth = 300;
 const int cDefaultHeight = 150;
 
-RenderReplaced::RenderReplaced(Element& element)
-    : RenderBox(element, RenderReplacedFlag)
+RenderReplaced::RenderReplaced(Element& element, PassRef<RenderStyle> style)
+    : RenderBox(element, std::move(style), RenderReplacedFlag)
     , m_intrinsicSize(cDefaultWidth, cDefaultHeight)
 {
     setReplaced(true);
 }
 
-RenderReplaced::RenderReplaced(Element& element, const LayoutSize& intrinsicSize)
-    : RenderBox(element, RenderReplacedFlag)
+RenderReplaced::RenderReplaced(Element& element, PassRef<RenderStyle> style, const LayoutSize& intrinsicSize)
+    : RenderBox(element, std::move(style), RenderReplacedFlag)
     , m_intrinsicSize(intrinsicSize)
 {
     setReplaced(true);
 }
 
-RenderReplaced::RenderReplaced(Document& document, const LayoutSize& intrinsicSize)
-    : RenderBox(document, RenderReplacedFlag)
+RenderReplaced::RenderReplaced(Document& document, PassRef<RenderStyle> style, const LayoutSize& intrinsicSize)
+    : RenderBox(document, std::move(style), RenderReplacedFlag)
     , m_intrinsicSize(intrinsicSize)
 {
     setReplaced(true);
index 22f3e0c..48872c4 100644 (file)
@@ -39,9 +39,9 @@ public:
     bool hasReplacedLogicalHeight() const;
 
 protected:
-    explicit RenderReplaced(Element&);
-    RenderReplaced(Element&, const LayoutSize& intrinsicSize);
-    RenderReplaced(Document&, const LayoutSize& intrinsicSize);
+    RenderReplaced(Element&, PassRef<RenderStyle>);
+    RenderReplaced(Element&, PassRef<RenderStyle>, const LayoutSize& intrinsicSize);
+    RenderReplaced(Document&, PassRef<RenderStyle>, const LayoutSize& intrinsicSize);
 
     virtual void willBeDestroyed() OVERRIDE;
 
index 65829b8..2c75346 100644 (file)
@@ -34,8 +34,8 @@
 
 namespace WebCore {
 
-RenderReplica::RenderReplica(Document& document)
-    : RenderBox(document, 0)
+RenderReplica::RenderReplica(Document& document, PassRef<RenderStyle> style)
+    : RenderBox(document, std::move(style), 0)
 {
     // This is a hack. Replicas are synthetic, and don't pick up the attributes of the
     // renderers being replicated, so they always report that they are inline, non-replaced.
index 11f598f..414f4b2 100644 (file)
@@ -35,7 +35,7 @@ namespace WebCore {
 
 class RenderReplica FINAL : public RenderBox {
 public:
-    explicit RenderReplica(Document&);
+    RenderReplica(Document&, PassRef<RenderStyle>);
     virtual ~RenderReplica();
 
     virtual const char* renderName() const { return "RenderReplica"; }
index 6e12760..8c06afc 100644 (file)
@@ -85,8 +85,8 @@ static inline RenderBlock* rubyAfterBlock(const RenderElement* ruby)
 
 static RenderBlock* createAnonymousRubyInlineBlock(RenderObject& ruby)
 {
-    RenderBlock* newBlock = new RenderBlockFlow(ruby.document());
-    newBlock->setStyle(RenderStyle::createAnonymousStyleWithDisplay(ruby.style(), INLINE_BLOCK));
+    RenderBlock* newBlock = new RenderBlockFlow(ruby.document(), RenderStyle::createAnonymousStyleWithDisplay(ruby.style(), INLINE_BLOCK));
+    newBlock->initializeStyle();
     return newBlock;
 }
 
@@ -110,8 +110,8 @@ static inline RenderRubyRun& findRubyRunParent(RenderObject& child)
 
 //=== ruby as inline object ===
 
-RenderRubyAsInline::RenderRubyAsInline(Element& element)
-    : RenderInline(element)
+RenderRubyAsInline::RenderRubyAsInline(Element& element, PassRef<RenderStyle> style)
+    : RenderInline(element, std::move(style))
 {
 }
 
@@ -215,8 +215,8 @@ void RenderRubyAsInline::removeChild(RenderObject& child)
 
 //=== ruby as block object ===
 
-RenderRubyAsBlock::RenderRubyAsBlock(Element& element)
-    : RenderBlockFlow(element)
+RenderRubyAsBlock::RenderRubyAsBlock(Element& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
index 519224e..cccd56c 100644 (file)
@@ -53,7 +53,7 @@ namespace WebCore {
 // <ruby> when used as 'display:inline'
 class RenderRubyAsInline FINAL : public RenderInline {
 public:
-    explicit RenderRubyAsInline(Element&);
+    RenderRubyAsInline(Element&, PassRef<RenderStyle>);
     virtual ~RenderRubyAsInline();
 
     virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0) OVERRIDE;
@@ -71,7 +71,7 @@ private:
 // <ruby> when used as 'display:block' or 'display:inline-block'
 class RenderRubyAsBlock FINAL : public RenderBlockFlow {
 public:
-    explicit RenderRubyAsBlock(Element&);
+    RenderRubyAsBlock(Element&, PassRef<RenderStyle>);
     virtual ~RenderRubyAsBlock();
 
     Element& element() const { return toElement(nodeForNonAnonymous()); }
index 65770d9..560cd42 100644 (file)
@@ -38,8 +38,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderRubyBase::RenderRubyBase(Document& document)
-    : RenderBlockFlow(document)
+RenderRubyBase::RenderRubyBase(Document& document, PassRef<RenderStyle> style)
+    : RenderBlockFlow(document, std::move(style))
 {
     setInline(false);
 }
index ffeabea..4a258db 100644 (file)
@@ -39,7 +39,7 @@ class RenderRubyRun;
 
 class RenderRubyBase FINAL : public RenderBlockFlow {
 public:
-    explicit RenderRubyBase(Document&);
+    RenderRubyBase(Document&, PassRef<RenderStyle>);
     virtual ~RenderRubyBase();
     
     virtual const char* renderName() const { return "RenderRubyBase (anonymous)"; }
index 34fe495..4dbfd5e 100644 (file)
@@ -43,8 +43,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderRubyRun::RenderRubyRun(Document& document)
-    : RenderBlockFlow(document)
+RenderRubyRun::RenderRubyRun(Document& document, PassRef<RenderStyle> style)
+    : RenderBlockFlow(document, std::move(style))
 {
     setReplaced(true);
     setInline(true);
@@ -200,19 +200,19 @@ void RenderRubyRun::removeChild(RenderObject& child)
 
 RenderRubyBase* RenderRubyRun::createRubyBase() const
 {
-    RenderRubyBase* renderer = new RenderRubyBase(document());
     auto newStyle = RenderStyle::createAnonymousStyleWithDisplay(style(), BLOCK);
     newStyle.get().setTextAlign(CENTER); // FIXME: use WEBKIT_CENTER?
-    renderer->setStyle(std::move(newStyle));
+    auto renderer = new RenderRubyBase(document(), std::move(newStyle));
+    renderer->initializeStyle();
     return renderer;
 }
 
 RenderRubyRun* RenderRubyRun::staticCreateRubyRun(const RenderObject* parentRuby)
 {
     ASSERT(parentRuby && parentRuby->isRuby());
-    RenderRubyRun* rr = new RenderRubyRun(parentRuby->document());
-    rr->setStyle(RenderStyle::createAnonymousStyleWithDisplay(parentRuby->style(), INLINE_BLOCK));
-    return rr;
+    auto renderer = new RenderRubyRun(parentRuby->document(), RenderStyle::createAnonymousStyleWithDisplay(parentRuby->style(), INLINE_BLOCK));
+    renderer->initializeStyle();
+    return renderer;
 }
 
 RenderObject* RenderRubyRun::layoutSpecialExcludedChild(bool relayoutChildren)
index baa1eec..3e6456f 100644 (file)
@@ -43,7 +43,7 @@ class RenderRubyText;
 
 class RenderRubyRun FINAL : public RenderBlockFlow {
 public:
-    explicit RenderRubyRun(Document&);
+    RenderRubyRun(Document&, PassRef<RenderStyle>);
     virtual ~RenderRubyRun();
 
     bool hasRubyText() const;
index fd1302c..6a8f362 100644 (file)
@@ -37,8 +37,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderRubyText::RenderRubyText(Element& element)
-    : RenderBlockFlow(element)
+RenderRubyText::RenderRubyText(Element& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
index e93f9e7..c48912d 100644 (file)
@@ -37,7 +37,7 @@ namespace WebCore {
 
 class RenderRubyText FINAL : public RenderBlockFlow {
 public:
-    explicit RenderRubyText(Element&);
+    RenderRubyText(Element&, PassRef<RenderStyle>);
     virtual ~RenderRubyText();
 
     Element& element() const { return toElement(nodeForNonAnonymous()); }
index b6ba3de..ef8d569 100644 (file)
@@ -254,7 +254,7 @@ void RenderScrollbar::updateScrollbarPart(ScrollbarPart partType, bool destroy)
     
     RenderScrollbarPart* partRenderer = m_parts.get(partType);
     if (!partRenderer && needRenderer) {
-        partRenderer = new RenderScrollbarPart(owningRenderer()->document(), this, partType);
+        partRenderer = new RenderScrollbarPart(owningRenderer()->document(), *partStyle, this, partType);
         m_parts.set(partType, partRenderer);
     } else if (partRenderer && !needRenderer) {
         m_parts.remove(partType);
index 7fb01e5..39a2ef7 100644 (file)
@@ -36,8 +36,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderScrollbarPart::RenderScrollbarPart(Document& document, RenderScrollbar* scrollbar, ScrollbarPart part)
-    : RenderBlock(document, 0)
+RenderScrollbarPart::RenderScrollbarPart(Document& document, PassRef<RenderStyle> style, RenderScrollbar* scrollbar, ScrollbarPart part)
+    : RenderBlock(document, std::move(style), 0)
     , m_scrollbar(scrollbar)
     , m_part(part)
 {
index 12e3614..9e6bbc9 100644 (file)
@@ -35,7 +35,7 @@ class RenderScrollbar;
 
 class RenderScrollbarPart FINAL : public RenderBlock {
 public:
-    RenderScrollbarPart(Document&, RenderScrollbar* = 0, ScrollbarPart = NoPart);
+    RenderScrollbarPart(Document&, PassRef<RenderStyle>, RenderScrollbar* = 0, ScrollbarPart = NoPart);
     
     virtual ~RenderScrollbarPart();
 
index 1219b7a..49a3952 100644 (file)
@@ -52,8 +52,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderSearchField::RenderSearchField(HTMLInputElement& element)
-    : RenderTextControlSingleLine(element)
+RenderSearchField::RenderSearchField(HTMLInputElement& element, PassRef<RenderStyle> style)
+    : RenderTextControlSingleLine(element, std::move(style))
     , m_searchPopupIsVisible(false)
     , m_searchPopup(0)
 {
index 7fdc938..6446f27 100644 (file)
@@ -33,7 +33,7 @@ class SearchPopupMenu;
 
 class RenderSearchField FINAL : public RenderTextControlSingleLine, private PopupMenuClient {
 public:
-    explicit RenderSearchField(HTMLInputElement&);
+    RenderSearchField(HTMLInputElement&, PassRef<RenderStyle>);
     virtual ~RenderSearchField();
 
     void updateCancelButtonVisibility() const;
index b50588e..5ffec64 100644 (file)
@@ -47,8 +47,8 @@ namespace WebCore {
 
 const int RenderSlider::defaultTrackLength = 129;
 
-RenderSlider::RenderSlider(HTMLInputElement& element)
-    : RenderFlexibleBox(element)
+RenderSlider::RenderSlider(HTMLInputElement& element, PassRef<RenderStyle> style)
+    : RenderFlexibleBox(element, std::move(style))
 {
     // We assume RenderSlider works only with <input type=range>.
     ASSERT(element.isRangeControl());
index d652911..f1312ad 100644 (file)
@@ -33,7 +33,7 @@ class RenderSlider FINAL : public RenderFlexibleBox {
 public:
     static const int defaultTrackLength;
 
-    explicit RenderSlider(HTMLInputElement&);
+    RenderSlider(HTMLInputElement&, PassRef<RenderStyle>);
     virtual ~RenderSlider();
 
     HTMLInputElement& element() const;
index 91e73be..1e51ff6 100644 (file)
@@ -46,8 +46,8 @@
 
 namespace WebCore {
 
-RenderSnapshottedPlugIn::RenderSnapshottedPlugIn(HTMLPlugInImageElement& element)
-    : RenderEmbeddedObject(element)
+RenderSnapshottedPlugIn::RenderSnapshottedPlugIn(HTMLPlugInImageElement& element, PassRef<RenderStyle> style)
+    : RenderEmbeddedObject(element, std::move(style))
     , m_snapshotResource(RenderImageResource::create())
     , m_isPotentialMouseActivation(false)
 {
index 8139ba9..01ad072 100644 (file)
@@ -36,7 +36,7 @@ class HTMLPlugInImageElement;
 
 class RenderSnapshottedPlugIn FINAL : public RenderEmbeddedObject {
 public:
-    explicit RenderSnapshottedPlugIn(HTMLPlugInImageElement&);
+    RenderSnapshottedPlugIn(HTMLPlugInImageElement&, PassRef<RenderStyle>);
     virtual ~RenderSnapshottedPlugIn();
 
     HTMLPlugInImageElement& plugInImageElement() const;
index 716c1eb..a82c238 100644 (file)
@@ -50,8 +50,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderTable::RenderTable(Element& element)
-    : RenderBlock(element, 0)
+RenderTable::RenderTable(Element& element, PassRef<RenderStyle> style)
+    : RenderBlock(element, std::move(style), 0)
     , m_head(nullptr)
     , m_foot(nullptr)
     , m_firstBody(nullptr)
@@ -70,8 +70,8 @@ RenderTable::RenderTable(Element& element)
     m_columnPos.fill(0, 1);
 }
 
-RenderTable::RenderTable(Document& document)
-    : RenderBlock(document, 0)
+RenderTable::RenderTable(Document& document, PassRef<RenderStyle> style)
+    : RenderBlock(document, std::move(style), 0)
     , m_head(nullptr)
     , m_foot(nullptr)
     , m_firstBody(nullptr)
@@ -1431,9 +1431,9 @@ bool RenderTable::nodeAtPoint(const HitTestRequest& request, HitTestResult& resu
 
 RenderTable* RenderTable::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
-    RenderTable* newTable = new RenderTable(parent->document());
-    newTable->setStyle(RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE));
-    return newTable;
+    auto table = new RenderTable(parent->document(), RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE));
+    table->initializeStyle();
+    return table;
 }
 
 const BorderValue& RenderTable::tableStartBorderAdjoiningCell(const RenderTableCell* cell) const
index 4b35c1d..975499b 100644 (file)
@@ -42,8 +42,8 @@ enum SkipEmptySectionsValue { DoNotSkipEmptySections, SkipEmptySections };
 
 class RenderTable : public RenderBlock {
 public:
-    explicit RenderTable(Element&);
-    explicit RenderTable(Document&);
+    RenderTable(Element&, PassRef<RenderStyle>);
+    RenderTable(Document&, PassRef<RenderStyle>);
     virtual ~RenderTable();
 
     // Per CSS 3 writing-mode: "The first and second values of the 'border-spacing' property represent spacing between columns
index 4f34ac5..38c4d7c 100644 (file)
@@ -24,8 +24,8 @@
 
 namespace WebCore {
 
-RenderTableCaption::RenderTableCaption(Element& element)
-    : RenderBlockFlow(element)
+RenderTableCaption::RenderTableCaption(Element& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
index 4fb0b89..294f40f 100644 (file)
@@ -28,7 +28,7 @@ class RenderTable;
 
 class RenderTableCaption FINAL : public RenderBlockFlow {
 public:
-    explicit RenderTableCaption(Element&);
+    RenderTableCaption(Element&, PassRef<RenderStyle>);
     virtual ~RenderTableCaption();
 
     Element& element() const { return toElement(nodeForNonAnonymous()); }
index ccaa931..4fb2eab 100644 (file)
@@ -56,8 +56,8 @@ struct SameSizeAsRenderTableCell : public RenderBlockFlow {
 COMPILE_ASSERT(sizeof(RenderTableCell) == sizeof(SameSizeAsRenderTableCell), RenderTableCell_should_stay_small);
 COMPILE_ASSERT(sizeof(CollapsedBorderValue) == 8, CollapsedBorderValue_should_stay_small);
 
-RenderTableCell::RenderTableCell(Element& element)
-    : RenderBlockFlow(element)
+RenderTableCell::RenderTableCell(Element& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
     , m_column(unsetColumnIndex)
     , m_cellWidthChanged(false)
     , m_intrinsicPaddingBefore(0)
@@ -68,8 +68,8 @@ RenderTableCell::RenderTableCell(Element& element)
     updateColAndRowSpanFlags();
 }
 
-RenderTableCell::RenderTableCell(Document& document)
-    : RenderBlockFlow(document)
+RenderTableCell::RenderTableCell(Document& document, PassRef<RenderStyle> style)
+    : RenderBlockFlow(document, std::move(style))
     , m_column(unsetColumnIndex)
     , m_cellWidthChanged(false)
     , m_hasColSpan(false)
@@ -1377,9 +1377,9 @@ void RenderTableCell::scrollbarsChanged(bool horizontalScrollbarChanged, bool ve
 
 RenderTableCell* RenderTableCell::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
-    RenderTableCell* newCell = new RenderTableCell(parent->document());
-    newCell->setStyle(RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_CELL));
-    return newCell;
+    auto cell = new RenderTableCell(parent->document(), RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_CELL));
+    cell->initializeStyle();
+    return cell;
 }
 
 } // namespace WebCore
index 5ea249e..c54be51 100644 (file)
@@ -38,8 +38,8 @@ enum IncludeBorderColorOrNot { DoNotIncludeBorderColor, IncludeBorderColor };
 
 class RenderTableCell FINAL : public RenderBlockFlow {
 public:
-    explicit RenderTableCell(Element&);
-    explicit RenderTableCell(Document&);
+    RenderTableCell(Element&, PassRef<RenderStyle>);
+    RenderTableCell(Document&, PassRef<RenderStyle>);
     
     unsigned colSpan() const
     {
index 7b5f407..23f1897 100644 (file)
@@ -35,8 +35,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderTableCol::RenderTableCol(Element& element)
-    : RenderBox(element, 0)
+RenderTableCol::RenderTableCol(Element& element, PassRef<RenderStyle> style)
+    : RenderBox(element, std::move(style), 0)
     , m_span(1)
 {
     // init RenderObject attributes
@@ -63,8 +63,8 @@ void RenderTableCol::updateFromElement()
         HTMLTableColElement& tc = static_cast<HTMLTableColElement&>(element());
         m_span = tc.span();
     } else
-        m_span = !(style() && style()->display() == TABLE_COLUMN_GROUP);
-    if (m_span != oldSpan && style() && parent())
+        m_span = !(hasInitializedStyle() && style()->display() == TABLE_COLUMN_GROUP);
+    if (m_span != oldSpan && hasInitializedStyle() && parent())
         setNeedsLayoutAndPrefWidthsRecalc();
 }
 
index 644131b..800d172 100644 (file)
@@ -35,7 +35,7 @@ class RenderTableCell;
 
 class RenderTableCol FINAL : public RenderBox {
 public:
-    explicit RenderTableCol(Element&);
+    RenderTableCol(Element&, PassRef<RenderStyle>);
     Element& element() const { return toElement(nodeForNonAnonymous()); }
 
     void clearPreferredLogicalWidthsDirtyBits();
index 48c2690..3b31056 100644 (file)
@@ -38,15 +38,15 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderTableRow::RenderTableRow(Element& element)
-    : RenderBox(element, 0)
+RenderTableRow::RenderTableRow(Element& element, PassRef<RenderStyle> style)
+    : RenderBox(element, std::move(style), 0)
     , m_rowIndex(unsetRowIndex)
 {
     setInline(false);
 }
 
-RenderTableRow::RenderTableRow(Document& document)
-    : RenderBox(document, 0)
+RenderTableRow::RenderTableRow(Document& document, PassRef<RenderStyle> style)
+    : RenderBox(document, std::move(style), 0)
     , m_rowIndex(unsetRowIndex)
 {
     setInline(false);
@@ -261,8 +261,8 @@ void RenderTableRow::imageChanged(WrappedImagePtr, const IntRect*)
 
 RenderTableRow* RenderTableRow::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
-    RenderTableRow* newRow = new RenderTableRow(parent->document());
-    newRow->setStyle(RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_ROW));
+    auto newRow = new RenderTableRow(parent->document(), RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_ROW));
+    newRow->initializeStyle();
     return newRow;
 }
 
index 338aaa2..e3190ad 100644 (file)
@@ -34,8 +34,8 @@ static const unsigned maxRowIndex = 0x7FFFFFFE; // 2,147,483,646
 
 class RenderTableRow FINAL : public RenderBox {
 public:
-    explicit RenderTableRow(Element&);
-    explicit RenderTableRow(Document&);
+    RenderTableRow(Element&, PassRef<RenderStyle>);
+    RenderTableRow(Document&, PassRef<RenderStyle>);
 
     RenderTableRow* nextRow() const;
     RenderTableRow* previousRow() const;
index 9a67fca..c9de8e0 100644 (file)
@@ -83,8 +83,8 @@ static inline void updateLogicalHeightForCell(RenderTableSection::RowStruct& row
     }
 }
 
-RenderTableSection::RenderTableSection(Element& element)
-    : RenderBox(element, 0)
+RenderTableSection::RenderTableSection(Element& element, PassRef<RenderStyle> style)
+    : RenderBox(element, std::move(style), 0)
     , m_cCol(0)
     , m_cRow(0)
     , m_outerBorderStart(0)
@@ -97,8 +97,8 @@ RenderTableSection::RenderTableSection(Element& element)
     setInline(false);
 }
 
-RenderTableSection::RenderTableSection(Document& document)
-    : RenderBox(document, 0)
+RenderTableSection::RenderTableSection(Document& document, PassRef<RenderStyle> style)
+    : RenderBox(document, std::move(style), 0)
     , m_cCol(0)
     , m_cRow(0)
     , m_outerBorderStart(0)
@@ -1569,9 +1569,9 @@ CollapsedBorderValue& RenderTableSection::cachedCollapsedBorder(const RenderTabl
 
 RenderTableSection* RenderTableSection::createAnonymousWithParentRenderer(const RenderObject* parent)
 {
-    RenderTableSection* newSection = new RenderTableSection(parent->document());
-    newSection->setStyle(RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_ROW_GROUP));
-    return newSection;
+    auto section = new RenderTableSection(parent->document(), RenderStyle::createAnonymousStyleWithDisplay(parent->style(), TABLE_ROW_GROUP));
+    section->initializeStyle();
+    return section;
 }
 
 void RenderTableSection::setLogicalPositionForCell(RenderTableCell* cell, unsigned effectiveColumn) const
index 147c550..03ecb16 100644 (file)
@@ -64,8 +64,8 @@ class RenderTableRow;
 
 class RenderTableSection FINAL : public RenderBox {
 public:
-    explicit RenderTableSection(Element&);
-    explicit RenderTableSection(Document&);
+    RenderTableSection(Element&, PassRef<RenderStyle>);
+    RenderTableSection(Document&, PassRef<RenderStyle>);
     virtual ~RenderTableSection();
 
     RenderTableRow* firstRow() const;
index 9f48864..7541c15 100644 (file)
@@ -38,8 +38,8 @@ using namespace std;
 
 namespace WebCore {
 
-RenderTextControl::RenderTextControl(HTMLTextFormControlElement& element)
-    : RenderBlockFlow(element)
+RenderTextControl::RenderTextControl(HTMLTextFormControlElement& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
 {
 }
 
index 2e40202..7661ef5 100644 (file)
@@ -38,7 +38,7 @@ public:
     virtual PassRef<RenderStyle> createInnerTextStyle(const RenderStyle* startStyle) const = 0;
 
 protected:
-    explicit RenderTextControl(HTMLTextFormControlElement&);
+    RenderTextControl(HTMLTextFormControlElement&, PassRef<RenderStyle>);
 
     // This convenience function should not be made public because innerTextElement may outlive the render tree.
     TextControlInnerTextElement* innerTextElement() const;
@@ -92,8 +92,8 @@ RENDER_OBJECT_TYPE_CASTS(RenderTextControl, isTextControl())
 // anymore.
 class RenderTextControlInnerContainer FINAL : public RenderFlexibleBox {
 public:
-    explicit RenderTextControlInnerContainer(Element& element)
-        : RenderFlexibleBox(element)
+    explicit RenderTextControlInnerContainer(Element& element, PassRef<RenderStyle> style)
+        : RenderFlexibleBox(element, std::move(style))
     { }
     virtual ~RenderTextControlInnerContainer() { }
 
index f5deed1..4b015b2 100644 (file)
@@ -32,8 +32,8 @@
 
 namespace WebCore {
 
-RenderTextControlMultiLine::RenderTextControlMultiLine(HTMLTextAreaElement& element)
-    : RenderTextControl(element)
+RenderTextControlMultiLine::RenderTextControlMultiLine(HTMLTextAreaElement& element, PassRef<RenderStyle> style)
+    : RenderTextControl(element, std::move(style))
 {
 }
 
index 215ba01..2831265 100644 (file)
@@ -30,7 +30,7 @@ class HTMLTextAreaElement;
 
 class RenderTextControlMultiLine FINAL : public RenderTextControl {
 public:
-    explicit RenderTextControlMultiLine(HTMLTextAreaElement&);
+    RenderTextControlMultiLine(HTMLTextAreaElement&, PassRef<RenderStyle>);
     virtual ~RenderTextControlMultiLine();
 
     HTMLTextAreaElement& textAreaElement() const;
index bac8735..5e5a9ce 100644 (file)
@@ -51,8 +51,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderTextControlSingleLine::RenderTextControlSingleLine(HTMLInputElement& element)
-    : RenderTextControl(element)
+RenderTextControlSingleLine::RenderTextControlSingleLine(HTMLInputElement& element, PassRef<RenderStyle> style)
+    : RenderTextControl(element, std::move(style))
     , m_shouldDrawCapsLockIndicator(false)
     , m_desiredInnerTextLogicalHeight(-1)
 {
index daa82c2..8b7c88b 100644 (file)
@@ -32,7 +32,7 @@ class HTMLInputElement;
 
 class RenderTextControlSingleLine : public RenderTextControl {
 public:
-    explicit RenderTextControlSingleLine(HTMLInputElement&);
+    RenderTextControlSingleLine(HTMLInputElement&, PassRef<RenderStyle>);
     virtual ~RenderTextControlSingleLine();
     // FIXME: Move create*Style() to their classes.
     virtual PassRef<RenderStyle> createInnerTextStyle(const RenderStyle* startStyle) const OVERRIDE;
@@ -104,8 +104,8 @@ RENDER_OBJECT_TYPE_CASTS(RenderTextControlSingleLine, isTextField())
 
 class RenderTextControlInnerBlock FINAL : public RenderBlockFlow {
 public:
-    RenderTextControlInnerBlock(Element& element)
-        : RenderBlockFlow(element)
+    RenderTextControlInnerBlock(Element& element, PassRef<RenderStyle> style)
+        : RenderBlockFlow(element, std::move(style))
     {
     }
 
index 4d352db..2c91461 100644 (file)
@@ -37,8 +37,8 @@
 
 namespace WebCore {
 
-RenderTextTrackCue::RenderTextTrackCue(TextTrackCueBox& element)
-    : RenderBlockFlow(element)
+RenderTextTrackCue::RenderTextTrackCue(TextTrackCueBox& element, PassRef<RenderStyle> style)
+    : RenderBlockFlow(element, std::move(style))
     , m_cue(element.getCue())
 {
 }
index 803fc1f..783006f 100644 (file)
@@ -39,7 +39,7 @@ class TextTrackCueBox;
 
 class RenderTextTrackCue FINAL : public RenderBlockFlow {
 public:
-    explicit RenderTextTrackCue(TextTrackCueBox&);
+    RenderTextTrackCue(TextTrackCueBox&, PassRef<RenderStyle>);
 
 private:
     virtual void layout() OVERRIDE;
index 90fc65e..64814fc 100644 (file)
@@ -48,8 +48,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
-RenderVideo::RenderVideo(HTMLVideoElement& element)
-    : RenderMedia(element)
+RenderVideo::RenderVideo(HTMLVideoElement& element, PassRef<RenderStyle> style)
+    : RenderMedia(element, std::move(style))
 {
     setIntrinsicSize(calculateIntrinsicSize());
 }
index 60752c0..ef46831 100644 (file)
@@ -36,7 +36,7 @@ class HTMLVideoElement;
 
 class RenderVideo FINAL : public RenderMedia {
 public:
-    explicit RenderVideo(HTMLVideoElement&);
+    RenderVideo(HTMLVideoElement&, PassRef<RenderStyle>);
     virtual ~RenderVideo();
 
     HTMLVideoElement& videoElement() const;
index ffb205f..9472945 100644 (file)
@@ -56,8 +56,8 @@
 
 namespace WebCore {
 
-RenderView::RenderView(Document& document)
-    : RenderBlockFlow(document)
+RenderView::RenderView(Document& document, PassRef<RenderStyle> style)
+    : RenderBlockFlow(document, std::move(style))
     , m_frameView(*document.view())
     , m_selectionStart(0)
     , m_selectionEnd(0)
index 5696bf1..89cae2e 100644 (file)
@@ -44,7 +44,7 @@ class CustomFilterGlobalContext;
 
 class RenderView FINAL : public RenderBlockFlow {
 public:
-    explicit RenderView(Document&);
+    RenderView(Document&, PassRef<RenderStyle>);
     virtual ~RenderView();
 
     bool hitTest(const HitTestRequest&, HitTestResult&);
index 4fffc81..6c2d105 100644 (file)
@@ -88,8 +88,8 @@ static void moveWidgetToParentSoon(Widget* child, FrameView* parent)
     WidgetHierarchyUpdatesSuspensionScope::scheduleWidgetToMove(child, parent);
 }
 
-RenderWidget::RenderWidget(HTMLFrameOwnerElement& element)
-    : RenderReplaced(element)
+RenderWidget::RenderWidget(HTMLFrameOwnerElement& element, PassRef<RenderStyle> style)
+    : RenderReplaced(element, std::move(style))
     , m_weakPtrFactory(this)
 {
     setInline(false);
@@ -190,7 +190,7 @@ void RenderWidget::setWidget(PassRefPtr<Widget> widget)
         // If we've already received a layout, apply the calculated space to the
         // widget immediately, but we have to have really been fully constructed (with a non-null
         // style pointer).
-        if (style()) {
+        if (hasInitializedStyle()) {
             if (!needsLayout()) {
                 WeakPtr<RenderWidget> weakThis = createWeakPtr();
                 updateWidgetGeometry();
index 8f8759f..ddb1e9b 100644 (file)
@@ -81,7 +81,7 @@ public:
     virtual void viewCleared() { }
 
 protected:
-    explicit RenderWidget(HTMLFrameOwnerElement&);
+    RenderWidget(HTMLFrameOwnerElement&, PassRef<RenderStyle>);
 
     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) OVERRIDE FINAL;
     virtual void layout() OVERRIDE;
index 6c58388..2582751 100644 (file)
@@ -43,14 +43,14 @@ namespace WebCore {
     
 using namespace MathMLNames;
     
-RenderMathMLBlock::RenderMathMLBlock(Element& container)
-    : RenderFlexibleBox(container)
+RenderMathMLBlock::RenderMathMLBlock(Element& container, PassRef<RenderStyle> style)
+    : RenderFlexibleBox(container, std::move(style))
     , m_ignoreInAccessibilityTree(false)
 {
 }
 
-RenderMathMLBlock::RenderMathMLBlock(Document& document)
-    : RenderFlexibleBox(document)
+RenderMathMLBlock::RenderMathMLBlock(Document& document, PassRef<RenderStyle> style)
+    : RenderFlexibleBox(document, std::move(style))
     , m_ignoreInAccessibilityTree(false)
 {
 }
@@ -62,8 +62,8 @@ bool RenderMathMLBlock::isChildAllowed(const RenderObject& child, const RenderSt
 
 RenderMathMLBlock* RenderMathMLBlock::createAnonymousMathMLBlock(EDisplay display)
 {
-    RenderMathMLBlock* newBlock = new RenderMathMLBlock(document());
-    newBlock->setStyle(RenderStyle::createAnonymousStyleWithDisplay(style(), display));
+    RenderMathMLBlock* newBlock = new RenderMathMLBlock(document(), RenderStyle::createAnonymousStyleWithDisplay(style(), display));
+    newBlock->initializeStyle();
     return newBlock;
 }
 
index b07dc38..bc4f231 100644 (file)
@@ -41,8 +41,8 @@ class RenderMathMLOperator;
 
 class RenderMathMLBlock : public RenderFlexibleBox {
 public:
-    explicit RenderMathMLBlock(Element&);
-    explicit RenderMathMLBlock(Document&);
+    RenderMathMLBlock(Element&, PassRef<RenderStyle>);
+    RenderMathMLBlock(Document&, PassRef<RenderStyle>);
 
     virtual bool isChildAllowed(const RenderObject&, const RenderStyle&) const OVERRIDE;
     
@@ -89,8 +89,8 @@ RENDER_OBJECT_TYPE_CASTS(RenderMathMLBlock, isRenderMathMLBlock())
 
 class RenderMathMLTable FINAL : public RenderTable {
 public:
-    explicit RenderMathMLTable(Element& element)
-        : RenderTable(element)
+    explicit RenderMathMLTable(Element& element, PassRef<RenderStyle> style)
+        : RenderTable(element, std::move(style))
     {
     }
     
index b91e6d5..df6232a 100644 (file)
@@ -45,8 +45,8 @@ enum Braces { OpeningBraceChar = 0x28, ClosingBraceChar = 0x29 };
 static const float gSeparatorMarginEndEms = 0.25f;
 static const float gFenceMarginEms = 0.1f;
 
-RenderMathMLFenced::RenderMathMLFenced(MathMLInlineContainerElement& element)
-    : RenderMathMLRow(element)
+RenderMathMLFenced::RenderMathMLFenced(MathMLInlineContainerElement& element, PassRef<RenderStyle> style)
+    : RenderMathMLRow(element, std::move(style))
     , m_open(OpeningBraceChar)
     , m_close(ClosingBraceChar)
     , m_closeFenceRenderer(0)
@@ -89,9 +89,9 @@ RenderMathMLOperator* RenderMathMLFenced::createMathMLOperator(UChar uChar, Rend
     newStyle.get().setMarginEnd(Length((operatorType == RenderMathMLOperator::Fence ? gFenceMarginEms : gSeparatorMarginEndEms) * style()->fontSize(), Fixed));
     if (operatorType == RenderMathMLOperator::Fence)
         newStyle.get().setMarginStart(Length(gFenceMarginEms * style()->fontSize(), Fixed));
-    RenderMathMLOperator* newOperator = new RenderMathMLOperator(element(), uChar);
+    RenderMathMLOperator* newOperator = new RenderMathMLOperator(element(), std::move(newStyle), uChar);
     newOperator->setOperatorType(operatorType);
-    newOperator->setStyle(std::move(newStyle));
+    newOperator->initializeStyle();
     return newOperator;
 }
 
index db19511..1f1e1c3 100644 (file)
@@ -36,7 +36,7 @@ namespace WebCore {
     
 class RenderMathMLFenced FINAL : public RenderMathMLRow {
 public:
-    explicit RenderMathMLFenced(MathMLInlineCo