<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[165542] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/165542">165542</a></dd>
<dt>Author</dt> <dd>antti@apple.com</dd>
<dt>Date</dt> <dd>2014-03-13 10:29:09 -0700 (Thu, 13 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove StyleResolver::State::m_parentNode
https://bugs.webkit.org/show_bug.cgi?id=130194

Reviewed by Andreas Kling.

This variable was the &quot;parent&quot; node where the style was being inherited from, not the actual parent.
The code would also recompute it even though the call sites generally know the rendering parent already.

If we consistently pass parent style to StyleResolver::styleForElement we won't need the variable and
the associated code. We also get rid of one more client of NodeRenderingTraversal.

* css/MediaQueryMatcher.cpp:
(WebCore::MediaQueryMatcher::prepareEvaluator):
* css/SVGCSSStyleSelector.cpp:
(WebCore::StyleResolver::applySVGProperty):
* css/StyleMedia.cpp:
(WebCore::StyleMedia::matchMedium):
* css/StyleResolver.cpp:
(WebCore::StyleResolver::State::clear):
(WebCore::StyleResolver::StyleResolver):
(WebCore::StyleResolver::State::initForStyleResolve):
(WebCore::StyleResolver::applyProperty):
* css/StyleResolver.h:
(WebCore::StyleResolver::document):
(WebCore::StyleResolver::State::State):
* dom/Element.cpp:
(WebCore::Element::customStyleForRenderer):
        
    Add parentStyle parameter.

* dom/Element.h:
* dom/PseudoElement.cpp:
(WebCore::PseudoElement::customStyleForRenderer):
* dom/PseudoElement.h:
* html/HTMLOptGroupElement.cpp:
(WebCore::HTMLOptGroupElement::didAttachRenderers):
(WebCore::HTMLOptGroupElement::updateNonRenderStyle):
(WebCore::HTMLOptGroupElement::customStyleForRenderer):
* html/HTMLOptGroupElement.h:
* html/HTMLOptionElement.cpp:
(WebCore::HTMLOptionElement::didAttachRenderers):
(WebCore::HTMLOptionElement::updateNonRenderStyle):
(WebCore::HTMLOptionElement::customStyleForRenderer):
* html/HTMLOptionElement.h:
* html/HTMLTitleElement.cpp:
(WebCore::HTMLTitleElement::textWithDirection):
* html/shadow/TextControlInnerElements.cpp:
(WebCore::TextControlInnerElement::customStyleForRenderer):
(WebCore::TextControlInnerTextElement::customStyleForRenderer):
* html/shadow/TextControlInnerElements.h:
* rendering/RenderNamedFlowFragment.cpp:
(WebCore::RenderNamedFlowFragment::computeStyleInRegion):
(WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
(WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
* rendering/RenderNamedFlowFragment.h:
* style/StyleResolveTree.cpp:
(WebCore::Style::styleForElement):
        
    This used to be Element::styleForRenderer. It is now a standalone static.

(WebCore::Style::elementInsideRegionNeedsRenderer):
(WebCore::Style::createRendererIfNeeded):
(WebCore::Style::resolveLocal):
* svg/SVGElement.cpp:
(WebCore::SVGElement::customStyleForRenderer):
* svg/SVGElement.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssMediaQueryMatchercpp">trunk/Source/WebCore/css/MediaQueryMatcher.cpp</a></li>
<li><a href="#trunkSourceWebCorecssSVGCSSStyleSelectorcpp">trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleMediacpp">trunk/Source/WebCore/css/StyleMedia.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleResolvercpp">trunk/Source/WebCore/css/StyleResolver.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleResolverh">trunk/Source/WebCore/css/StyleResolver.h</a></li>
<li><a href="#trunkSourceWebCoredomElementcpp">trunk/Source/WebCore/dom/Element.cpp</a></li>
<li><a href="#trunkSourceWebCoredomElementh">trunk/Source/WebCore/dom/Element.h</a></li>
<li><a href="#trunkSourceWebCoredomPseudoElementcpp">trunk/Source/WebCore/dom/PseudoElement.cpp</a></li>
<li><a href="#trunkSourceWebCoredomPseudoElementh">trunk/Source/WebCore/dom/PseudoElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLOptGroupElementcpp">trunk/Source/WebCore/html/HTMLOptGroupElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLOptGroupElementh">trunk/Source/WebCore/html/HTMLOptGroupElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLOptionElementcpp">trunk/Source/WebCore/html/HTMLOptionElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLOptionElementh">trunk/Source/WebCore/html/HTMLOptionElement.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTitleElementcpp">trunk/Source/WebCore/html/HTMLTitleElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlshadowTextControlInnerElementscpp">trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlshadowTextControlInnerElementsh">trunk/Source/WebCore/html/shadow/TextControlInnerElements.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderNamedFlowFragmentcpp">trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderNamedFlowFragmenth">trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h</a></li>
<li><a href="#trunkSourceWebCorestyleStyleResolveTreecpp">trunk/Source/WebCore/style/StyleResolveTree.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGElementcpp">trunk/Source/WebCore/svg/SVGElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGElementh">trunk/Source/WebCore/svg/SVGElement.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/ChangeLog        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -1,3 +1,72 @@
</span><ins>+2014-03-13  Antti Koivisto  &lt;antti@apple.com&gt;
+
+        Remove StyleResolver::State::m_parentNode
+        https://bugs.webkit.org/show_bug.cgi?id=130194
+
+        Reviewed by Andreas Kling.
+
+        This variable was the &quot;parent&quot; node where the style was being inherited from, not the actual parent.
+        The code would also recompute it even though the call sites generally know the rendering parent already.
+
+        If we consistently pass parent style to StyleResolver::styleForElement we won't need the variable and
+        the associated code. We also get rid of one more client of NodeRenderingTraversal.
+
+        * css/MediaQueryMatcher.cpp:
+        (WebCore::MediaQueryMatcher::prepareEvaluator):
+        * css/SVGCSSStyleSelector.cpp:
+        (WebCore::StyleResolver::applySVGProperty):
+        * css/StyleMedia.cpp:
+        (WebCore::StyleMedia::matchMedium):
+        * css/StyleResolver.cpp:
+        (WebCore::StyleResolver::State::clear):
+        (WebCore::StyleResolver::StyleResolver):
+        (WebCore::StyleResolver::State::initForStyleResolve):
+        (WebCore::StyleResolver::applyProperty):
+        * css/StyleResolver.h:
+        (WebCore::StyleResolver::document):
+        (WebCore::StyleResolver::State::State):
+        * dom/Element.cpp:
+        (WebCore::Element::customStyleForRenderer):
+        
+            Add parentStyle parameter.
+
+        * dom/Element.h:
+        * dom/PseudoElement.cpp:
+        (WebCore::PseudoElement::customStyleForRenderer):
+        * dom/PseudoElement.h:
+        * html/HTMLOptGroupElement.cpp:
+        (WebCore::HTMLOptGroupElement::didAttachRenderers):
+        (WebCore::HTMLOptGroupElement::updateNonRenderStyle):
+        (WebCore::HTMLOptGroupElement::customStyleForRenderer):
+        * html/HTMLOptGroupElement.h:
+        * html/HTMLOptionElement.cpp:
+        (WebCore::HTMLOptionElement::didAttachRenderers):
+        (WebCore::HTMLOptionElement::updateNonRenderStyle):
+        (WebCore::HTMLOptionElement::customStyleForRenderer):
+        * html/HTMLOptionElement.h:
+        * html/HTMLTitleElement.cpp:
+        (WebCore::HTMLTitleElement::textWithDirection):
+        * html/shadow/TextControlInnerElements.cpp:
+        (WebCore::TextControlInnerElement::customStyleForRenderer):
+        (WebCore::TextControlInnerTextElement::customStyleForRenderer):
+        * html/shadow/TextControlInnerElements.h:
+        * rendering/RenderNamedFlowFragment.cpp:
+        (WebCore::RenderNamedFlowFragment::computeStyleInRegion):
+        (WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
+        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
+        * rendering/RenderNamedFlowFragment.h:
+        * style/StyleResolveTree.cpp:
+        (WebCore::Style::styleForElement):
+        
+            This used to be Element::styleForRenderer. It is now a standalone static.
+
+        (WebCore::Style::elementInsideRegionNeedsRenderer):
+        (WebCore::Style::createRendererIfNeeded):
+        (WebCore::Style::resolveLocal):
+        * svg/SVGElement.cpp:
+        (WebCore::SVGElement::customStyleForRenderer):
+        * svg/SVGElement.h:
+
</ins><span class="cx"> 2014-03-13  Zalan Bujtas  &lt;zalan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Subpixel rendering: Nested layers with subpixel accumulation paint to wrong position.
</span></span></pre></div>
<a id="trunkSourceWebCorecssMediaQueryMatchercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/MediaQueryMatcher.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/MediaQueryMatcher.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/css/MediaQueryMatcher.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx">     if (!documentElement)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    RefPtr&lt;RenderStyle&gt; rootStyle = m_document-&gt;ensureStyleResolver().styleForElement(documentElement, 0 /*defaultParent*/, DisallowStyleSharing, MatchOnlyUserAgentRules);
</del><ins>+    RefPtr&lt;RenderStyle&gt; rootStyle = m_document-&gt;ensureStyleResolver().styleForElement(documentElement, m_document-&gt;renderStyle(), DisallowStyleSharing, MatchOnlyUserAgentRules);
</ins><span class="cx"> 
</span><span class="cx">     return std::make_unique&lt;MediaQueryEvaluator&gt;(mediaType(), m_document-&gt;frame(), rootStyle.get());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorecssSVGCSSStyleSelectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -110,8 +110,8 @@
</span><span class="cx">     const State&amp; state = m_state;
</span><span class="cx">     SVGRenderStyle&amp; svgStyle = state.style()-&gt;accessSVGStyle();
</span><span class="cx"> 
</span><del>-    bool isInherit = state.parentNode() &amp;&amp; value-&gt;isInheritedValue();
-    bool isInitial = value-&gt;isInitialValue() || (!state.parentNode() &amp;&amp; value-&gt;isInheritedValue());
</del><ins>+    bool isInherit = state.parentStyle() &amp;&amp; value-&gt;isInheritedValue();
+    bool isInitial = value-&gt;isInitialValue() || (!state.parentStyle() &amp;&amp; value-&gt;isInheritedValue());
</ins><span class="cx"> 
</span><span class="cx">     // What follows is a list that maps the CSS properties into their
</span><span class="cx">     // corresponding front-end RenderStyle values. Shorthands(e.g. border,
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleMediacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleMedia.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleMedia.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/css/StyleMedia.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">     if (!documentElement)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    RefPtr&lt;RenderStyle&gt; rootStyle = document-&gt;ensureStyleResolver().styleForElement(documentElement, 0 /*defaultParent*/, DisallowStyleSharing, MatchOnlyUserAgentRules);
</del><ins>+    RefPtr&lt;RenderStyle&gt; rootStyle = document-&gt;ensureStyleResolver().styleForElement(documentElement, document-&gt;renderStyle(), DisallowStyleSharing, MatchOnlyUserAgentRules);
</ins><span class="cx"> 
</span><span class="cx">     RefPtr&lt;MediaQuerySet&gt; media = MediaQuerySet::create();
</span><span class="cx">     if (!media-&gt;parse(query))
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleResolvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleResolver.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleResolver.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/css/StyleResolver.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -88,7 +88,6 @@
</span><span class="cx"> #include &quot;MediaList.h&quot;
</span><span class="cx"> #include &quot;MediaQueryEvaluator.h&quot;
</span><span class="cx"> #include &quot;NodeRenderStyle.h&quot;
</span><del>-#include &quot;NodeRenderingTraversal.h&quot;
</del><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;PageRuleCollector.h&quot;
</span><span class="cx"> #include &quot;Pair.h&quot;
</span><span class="lines">@@ -238,7 +237,6 @@
</span><span class="cx">     m_element = nullptr;
</span><span class="cx">     m_styledElement = nullptr;
</span><span class="cx">     m_parentStyle = nullptr;
</span><del>-    m_parentNode = nullptr;
</del><span class="cx">     m_regionForStyling = nullptr;
</span><span class="cx">     m_pendingImageProperties.clear();
</span><span class="cx"> #if ENABLE(CSS_FILTERS)
</span><span class="lines">@@ -285,7 +283,7 @@
</span><span class="cx">         m_medium = std::make_unique&lt;MediaQueryEvaluator&gt;(&quot;all&quot;);
</span><span class="cx"> 
</span><span class="cx">     if (root)
</span><del>-        m_rootDefaultStyle = styleForElement(root, 0, DisallowStyleSharing, MatchOnlyUserAgentRules);
</del><ins>+        m_rootDefaultStyle = styleForElement(root, m_document.renderStyle(), DisallowStyleSharing, MatchOnlyUserAgentRules);
</ins><span class="cx"> 
</span><span class="cx">     if (m_rootDefaultStyle &amp;&amp; view)
</span><span class="cx">         m_medium = std::make_unique&lt;MediaQueryEvaluator&gt;(view-&gt;mediaType(), &amp;view-&gt;frame(), m_rootDefaultStyle.get());
</span><span class="lines">@@ -411,15 +409,10 @@
</span><span class="cx">     m_regionForStyling = regionForStyling;
</span><span class="cx"> 
</span><span class="cx">     if (e) {
</span><del>-        m_parentNode = e-&gt;isPseudoElement() ? toPseudoElement(e)-&gt;hostElement() : NodeRenderingTraversal::parent(e);
</del><span class="cx">         bool resetStyleInheritance = hasShadowRootParent(*e) &amp;&amp; toShadowRoot(e-&gt;parentNode())-&gt;resetStyleInheritance();
</span><del>-        m_parentStyle = resetStyleInheritance ? 0 :
-            parentStyle ? parentStyle :
-            m_parentNode ? m_parentNode-&gt;renderStyle() : 0;
-    } else {
-        m_parentNode = 0;
</del><ins>+        m_parentStyle = resetStyleInheritance ? nullptr : parentStyle;
+    } else
</ins><span class="cx">         m_parentStyle = parentStyle;
</span><del>-    }
</del><span class="cx"> 
</span><span class="cx">     Node* docElement = e ? e-&gt;document().documentElement() : 0;
</span><span class="cx">     RenderStyle* docStyle = document.renderStyle();
</span><span class="lines">@@ -2125,11 +2118,10 @@
</span><span class="cx">         return applyProperty(newId, value);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    bool isInherit = state.parentNode() &amp;&amp; value-&gt;isInheritedValue();
-    bool isInitial = value-&gt;isInitialValue() || (!state.parentNode() &amp;&amp; value-&gt;isInheritedValue());
</del><ins>+    bool isInherit = state.parentStyle() &amp;&amp; value-&gt;isInheritedValue();
+    bool isInitial = value-&gt;isInitialValue() || (!state.parentStyle() &amp;&amp; value-&gt;isInheritedValue());
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(!isInherit || !isInitial); // isInherit -&gt; !isInitial &amp;&amp; isInitial -&gt; !isInherit
</span><del>-    ASSERT(!isInherit || (state.parentNode() &amp;&amp; state.parentStyle())); // isInherit -&gt; (state.parentNode() &amp;&amp; state.parentStyle())
</del><span class="cx"> 
</span><span class="cx">     if (!state.applyPropertyToRegularStyle() &amp;&amp; (!state.applyPropertyToVisitedLinkStyle() || !isValidVisitedLinkProperty(id))) {
</span><span class="cx">         // Limit the properties that can be applied to only the ones honored by :visited.
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleResolverh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleResolver.h (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleResolver.h        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/css/StyleResolver.h        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -143,8 +143,8 @@
</span><span class="cx">     void pushParentElement(Element*);
</span><span class="cx">     void popParentElement(Element*);
</span><span class="cx"> 
</span><del>-    PassRef&lt;RenderStyle&gt; styleForElement(Element*, RenderStyle* parentStyle = 0, StyleSharingBehavior = AllowStyleSharing,
-        RuleMatchingBehavior = MatchAllRules, RenderRegion* regionForStyling = 0);
</del><ins>+    PassRef&lt;RenderStyle&gt; styleForElement(Element*, RenderStyle* parentStyle, StyleSharingBehavior = AllowStyleSharing,
+        RuleMatchingBehavior = MatchAllRules, RenderRegion* regionForStyling = nullptr);
</ins><span class="cx"> 
</span><span class="cx">     void keyframeStylesForAnimation(Element*, const RenderStyle*, KeyframeList&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -158,7 +158,6 @@
</span><span class="cx">     RenderStyle* rootElementStyle() const { return m_state.rootElementStyle(); }
</span><span class="cx">     Element* element() { return m_state.element(); }
</span><span class="cx">     Document&amp; document() { return m_document; }
</span><del>-    bool hasParentNode() const { return m_state.parentNode(); }
</del><span class="cx"> 
</span><span class="cx">     // FIXME: It could be better to call m_ruleSets.appendAuthorStyleSheets() directly after we factor StyleRsolver further.
</span><span class="cx">     // https://bugs.webkit.org/show_bug.cgi?id=108890
</span><span class="lines">@@ -336,7 +335,6 @@
</span><span class="cx">         State()
</span><span class="cx">         : m_element(0)
</span><span class="cx">         , m_styledElement(0)
</span><del>-        , m_parentNode(0)
</del><span class="cx">         , m_parentStyle(0)
</span><span class="cx">         , m_rootElementStyle(0)
</span><span class="cx">         , m_regionForStyling(0)
</span><span class="lines">@@ -361,7 +359,6 @@
</span><span class="cx">         RenderStyle* style() const { return m_style.get(); }
</span><span class="cx">         PassRef&lt;RenderStyle&gt; takeStyle() { return m_style.releaseNonNull(); }
</span><span class="cx"> 
</span><del>-        const ContainerNode* parentNode() const { return m_parentNode; }
</del><span class="cx">         void setParentStyle(PassRef&lt;RenderStyle&gt; parentStyle) { m_parentStyle = std::move(parentStyle); }
</span><span class="cx">         RenderStyle* parentStyle() const { return m_parentStyle.get(); }
</span><span class="cx">         RenderStyle* rootElementStyle() const { return m_rootElementStyle; }
</span><span class="lines">@@ -408,7 +405,6 @@
</span><span class="cx">         Element* m_element;
</span><span class="cx">         RefPtr&lt;RenderStyle&gt; m_style;
</span><span class="cx">         StyledElement* m_styledElement;
</span><del>-        ContainerNode* m_parentNode;
</del><span class="cx">         RefPtr&lt;RenderStyle&gt; m_parentStyle;
</span><span class="cx">         RenderStyle* m_rootElementStyle;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoredomElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/dom/Element.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -1386,16 +1386,6 @@
</span><span class="cx">         document().renderView()-&gt;flowThreadController().unregisterNamedFlowContentElement(*this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRef&lt;RenderStyle&gt; Element::styleForRenderer()
-{
-    if (hasCustomStyleResolveCallbacks()) {
-        if (RefPtr&lt;RenderStyle&gt; style = customStyleForRenderer())
-            return style.releaseNonNull();
-    }
-
-    return document().ensureStyleResolver().styleForElement(this);
-}
-
</del><span class="cx"> ShadowRoot* Element::shadowRoot() const
</span><span class="cx"> {
</span><span class="cx">     return hasRareData() ? elementRareData()-&gt;shadowRoot() : 0;
</span><span class="lines">@@ -2894,7 +2884,7 @@
</span><span class="cx">     ASSERT(hasCustomStyleResolveCallbacks());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RenderStyle&gt; Element::customStyleForRenderer()
</del><ins>+PassRefPtr&lt;RenderStyle&gt; Element::customStyleForRenderer(RenderStyle&amp;)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(hasCustomStyleResolveCallbacks());
</span><span class="cx">     return 0;
</span></span></pre></div>
<a id="trunkSourceWebCoredomElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.h (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.h        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/dom/Element.h        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -524,8 +524,6 @@
</span><span class="cx">     
</span><span class="cx">     virtual bool isSpellCheckingEnabled() const;
</span><span class="cx"> 
</span><del>-    PassRef&lt;RenderStyle&gt; styleForRenderer();
-
</del><span class="cx">     RenderNamedFlowFragment* renderNamedFlowFragment() const;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_REGIONS)
</span><span class="lines">@@ -558,6 +556,7 @@
</span><span class="cx">     virtual void didAttachRenderers();
</span><span class="cx">     virtual void willDetachRenderers();
</span><span class="cx">     virtual void didDetachRenderers();
</span><ins>+    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer(RenderStyle&amp; parentStyle);
</ins><span class="cx"> 
</span><span class="cx">     void setBeforePseudoElement(PassRefPtr&lt;PseudoElement&gt;);
</span><span class="cx">     void setAfterPseudoElement(PassRefPtr&lt;PseudoElement&gt;);
</span><span class="lines">@@ -579,8 +578,6 @@
</span><span class="cx">     virtual void childrenChanged(const ChildChange&amp;) override;
</span><span class="cx">     virtual void removeAllEventListeners() override final;
</span><span class="cx"> 
</span><del>-    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer();
-
</del><span class="cx">     void clearTabIndexExplicitlyIfNeeded();    
</span><span class="cx">     void setTabIndexExplicitly(short);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoredomPseudoElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/PseudoElement.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/PseudoElement.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/dom/PseudoElement.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -70,9 +70,9 @@
</span><span class="cx">     InspectorInstrumentation::pseudoElementDestroyed(document().page(), this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RenderStyle&gt; PseudoElement::customStyleForRenderer()
</del><ins>+PassRefPtr&lt;RenderStyle&gt; PseudoElement::customStyleForRenderer(RenderStyle&amp; parentStyle)
</ins><span class="cx"> {
</span><del>-    return m_hostElement-&gt;renderer()-&gt;getCachedPseudoStyle(m_pseudoId);
</del><ins>+    return m_hostElement-&gt;renderer()-&gt;getCachedPseudoStyle(m_pseudoId, &amp;parentStyle);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PseudoElement::didAttachRenderers()
</span></span></pre></div>
<a id="trunkSourceWebCoredomPseudoElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/PseudoElement.h (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/PseudoElement.h        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/dom/PseudoElement.h        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx">     Element* hostElement() const { return m_hostElement; }
</span><span class="cx">     void clearHostElement() { m_hostElement = nullptr; }
</span><span class="cx"> 
</span><del>-    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer() override;
</del><ins>+    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer(RenderStyle&amp; parentStyle) override;
</ins><span class="cx">     virtual void didAttachRenderers() override;
</span><span class="cx">     virtual bool rendererIsNeeded(const RenderStyle&amp;) override;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLOptGroupElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLOptGroupElement.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLOptGroupElement.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/html/HTMLOptGroupElement.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx">     // manually cache the value. This happens if our parent doesn't have a
</span><span class="cx">     // renderer like &lt;optgroup&gt; or if it doesn't allow children like &lt;select&gt;.
</span><span class="cx">     if (!m_style &amp;&amp; parentNode()-&gt;renderStyle())
</span><del>-        updateNonRenderStyle();
</del><ins>+        updateNonRenderStyle(*parentNode()-&gt;renderStyle());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLOptGroupElement::willDetachRenderers()
</span><span class="lines">@@ -104,9 +104,9 @@
</span><span class="cx">     m_style.clear();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLOptGroupElement::updateNonRenderStyle()
</del><ins>+void HTMLOptGroupElement::updateNonRenderStyle(RenderStyle&amp; parentStyle)
</ins><span class="cx"> {
</span><del>-    m_style = document().ensureStyleResolver().styleForElement(this);
</del><ins>+    m_style = document().ensureStyleResolver().styleForElement(this, &amp;parentStyle);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderStyle* HTMLOptGroupElement::nonRendererStyle() const
</span><span class="lines">@@ -114,11 +114,11 @@
</span><span class="cx">     return m_style.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RenderStyle&gt; HTMLOptGroupElement::customStyleForRenderer()
</del><ins>+PassRefPtr&lt;RenderStyle&gt; HTMLOptGroupElement::customStyleForRenderer(RenderStyle&amp; parentStyle)
</ins><span class="cx"> {
</span><span class="cx">     // styleForRenderer is called whenever a new style should be associated
</span><span class="cx">     // with an Element so now is a good time to update our cached style.
</span><del>-    updateNonRenderStyle();
</del><ins>+    updateNonRenderStyle(parentStyle);
</ins><span class="cx">     return m_style;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLOptGroupElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLOptGroupElement.h (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLOptGroupElement.h        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/html/HTMLOptGroupElement.h        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -54,9 +54,9 @@
</span><span class="cx">     virtual void accessKeyAction(bool sendMouseEvents) override;
</span><span class="cx"> 
</span><span class="cx">     // &lt;optgroup&gt; never has a renderer so we manually manage a cached style.
</span><del>-    void updateNonRenderStyle();
</del><ins>+    void updateNonRenderStyle(RenderStyle&amp; parentStyle);
</ins><span class="cx">     virtual RenderStyle* nonRendererStyle() const override;
</span><del>-    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer() override;
</del><ins>+    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer(RenderStyle&amp; parentStyle) override;
</ins><span class="cx"> 
</span><span class="cx">     void recalcSelectOptions();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLOptionElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLOptionElement.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLOptionElement.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/html/HTMLOptionElement.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -94,7 +94,7 @@
</span><span class="cx">     // manually cache the value. This happens if our parent doesn't have a
</span><span class="cx">     // renderer like &lt;optgroup&gt; or if it doesn't allow children like &lt;select&gt;.
</span><span class="cx">     if (!m_style &amp;&amp; parentNode()-&gt;renderStyle())
</span><del>-        updateNonRenderStyle();
</del><ins>+        updateNonRenderStyle(*parentNode()-&gt;renderStyle());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HTMLOptionElement::willDetachRenderers()
</span><span class="lines">@@ -300,9 +300,9 @@
</span><span class="cx">     setAttribute(labelAttr, label);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLOptionElement::updateNonRenderStyle()
</del><ins>+void HTMLOptionElement::updateNonRenderStyle(RenderStyle&amp; parentStyle)
</ins><span class="cx"> {
</span><del>-    m_style = document().ensureStyleResolver().styleForElement(this);
</del><ins>+    m_style = document().ensureStyleResolver().styleForElement(this, &amp;parentStyle);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderStyle* HTMLOptionElement::nonRendererStyle() const
</span><span class="lines">@@ -310,11 +310,11 @@
</span><span class="cx">     return m_style.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RenderStyle&gt; HTMLOptionElement::customStyleForRenderer()
</del><ins>+PassRefPtr&lt;RenderStyle&gt; HTMLOptionElement::customStyleForRenderer(RenderStyle&amp; parentStyle)
</ins><span class="cx"> {
</span><span class="cx">     // styleForRenderer is called whenever a new style should be associated
</span><span class="cx">     // with an Element so now is a good time to update our cached style.
</span><del>-    updateNonRenderStyle();
</del><ins>+    updateNonRenderStyle(parentStyle);
</ins><span class="cx">     return m_style;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLOptionElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLOptionElement.h (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLOptionElement.h        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/html/HTMLOptionElement.h        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -82,9 +82,9 @@
</span><span class="cx">     virtual void childrenChanged(const ChildChange&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     // &lt;option&gt; never has a renderer so we manually manage a cached style.
</span><del>-    void updateNonRenderStyle();
</del><ins>+    void updateNonRenderStyle(RenderStyle&amp; parentStyle);
</ins><span class="cx">     virtual RenderStyle* nonRendererStyle() const override;
</span><del>-    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer() override;
</del><ins>+    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer(RenderStyle&amp; parentStyle) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual void didRecalcStyle(Style::Change) override;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTitleElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTitleElement.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTitleElement.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/html/HTMLTitleElement.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include &quot;HTMLNames.h&quot;
</span><span class="cx"> #include &quot;RenderStyle.h&quot;
</span><span class="cx"> #include &quot;StyleInheritedData.h&quot;
</span><ins>+#include &quot;StyleResolver.h&quot;
</ins><span class="cx"> #include &quot;Text.h&quot;
</span><span class="cx"> #include &quot;TextNodeTraversal.h&quot;
</span><span class="cx"> #include &lt;wtf/Ref.h&gt;
</span><span class="lines">@@ -85,7 +86,7 @@
</span><span class="cx">     if (RenderStyle* computedStyle = this-&gt;computedStyle())
</span><span class="cx">         direction = computedStyle-&gt;direction();
</span><span class="cx">     else {
</span><del>-        Ref&lt;RenderStyle&gt; style(styleForRenderer());
</del><ins>+        Ref&lt;RenderStyle&gt; style(document().ensureStyleResolver().styleForElement(this, parentElement() ? parentElement()-&gt;renderStyle() : nullptr));
</ins><span class="cx">         direction = style.get().direction();
</span><span class="cx">     }
</span><span class="cx">     return StringWithDirection(text(), direction);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlshadowTextControlInnerElementscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx">     return adoptRef(new TextControlInnerElement(document));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RenderStyle&gt; TextControlInnerElement::customStyleForRenderer()
</del><ins>+PassRefPtr&lt;RenderStyle&gt; TextControlInnerElement::customStyleForRenderer(RenderStyle&amp;)
</ins><span class="cx"> {
</span><span class="cx">     RenderTextControlSingleLine* parentRenderer = toRenderTextControlSingleLine(shadowHost()-&gt;renderer());
</span><span class="cx">     return parentRenderer-&gt;createInnerBlockStyle(&amp;parentRenderer-&gt;style());
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx">     return toRenderTextControlInnerBlock(HTMLDivElement::renderer());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RenderStyle&gt; TextControlInnerTextElement::customStyleForRenderer()
</del><ins>+PassRefPtr&lt;RenderStyle&gt; TextControlInnerTextElement::customStyleForRenderer(RenderStyle&amp;)
</ins><span class="cx"> {
</span><span class="cx">     RenderTextControl* parentRenderer = toRenderTextControl(shadowHost()-&gt;renderer());
</span><span class="cx">     return parentRenderer-&gt;createInnerTextStyle(&amp;parentRenderer-&gt;style());
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlshadowTextControlInnerElementsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/shadow/TextControlInnerElements.h (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/shadow/TextControlInnerElements.h        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/html/shadow/TextControlInnerElements.h        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     TextControlInnerElement(Document&amp;);
</span><del>-    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer() override;
</del><ins>+    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer(RenderStyle&amp; parentStyle) override;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     virtual bool isMouseFocusable() const override { return false; }
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> private:
</span><span class="cx">     TextControlInnerTextElement(Document&amp;);
</span><span class="cx">     virtual RenderPtr&lt;RenderElement&gt; createElementRenderer(PassRef&lt;RenderStyle&gt;) override;
</span><del>-    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer() override;
</del><ins>+    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer(RenderStyle&amp; parentStyle) override;
</ins><span class="cx">     virtual bool isMouseFocusable() const override { return false; }
</span><span class="cx">     virtual bool isTextControlInnerTextElement() const override { return true; }
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderNamedFlowFragmentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #include &quot;PaintInfo.h&quot;
</span><span class="cx"> #include &quot;RenderBoxRegionInfo.h&quot;
</span><span class="cx"> #include &quot;RenderFlowThread.h&quot;
</span><ins>+#include &quot;RenderIterator.h&quot;
</ins><span class="cx"> #include &quot;RenderNamedFlowThread.h&quot;
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;StyleResolver.h&quot;
</span><span class="lines">@@ -349,24 +350,21 @@
</span><span class="cx">     toRenderNamedFlowThread(m_flowThread)-&gt;checkRegionsWithStyling();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RenderStyle&gt; RenderNamedFlowFragment::computeStyleInRegion(const RenderObject* object)
</del><ins>+PassRefPtr&lt;RenderStyle&gt; RenderNamedFlowFragment::computeStyleInRegion(RenderElement&amp; renderer, RenderStyle&amp; parentStyle)
</ins><span class="cx"> {
</span><del>-    ASSERT(object);
-    ASSERT(!object-&gt;isAnonymous());
-    ASSERT(object-&gt;node() &amp;&amp; object-&gt;node()-&gt;isElementNode());
</del><ins>+    ASSERT(!renderer.isAnonymous());
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: Region styling fails for pseudo-elements because the renderers don't have a node.
</span><del>-    Element* element = toElement(object-&gt;node());
-    RefPtr&lt;RenderStyle&gt; renderObjectRegionStyle = object-&gt;view().document().ensureStyleResolver().styleForElement(element, 0, DisallowStyleSharing, MatchAllRules, this);
</del><ins>+    RefPtr&lt;RenderStyle&gt; renderObjectRegionStyle = renderer.view().document().ensureStyleResolver().styleForElement(renderer.element(), &amp;parentStyle, DisallowStyleSharing, MatchAllRules, this);
</ins><span class="cx"> 
</span><span class="cx">     return renderObjectRegionStyle.release();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderNamedFlowFragment::computeChildrenStyleInRegion(const RenderElement* object)
</del><ins>+void RenderNamedFlowFragment::computeChildrenStyleInRegion(RenderElement&amp; renderer)
</ins><span class="cx"> {
</span><del>-    for (RenderObject* child = object-&gt;firstChild(); child; child = child-&gt;nextSibling()) {
</del><ins>+    for (auto&amp; child : childrenOfType&lt;RenderObject&gt;(renderer)) {
</ins><span class="cx"> 
</span><del>-        auto it = m_renderObjectRegionStyle.find(child);
</del><ins>+        auto it = m_renderObjectRegionStyle.find(&amp;child);
</ins><span class="cx"> 
</span><span class="cx">         RefPtr&lt;RenderStyle&gt; childStyleInRegion;
</span><span class="cx">         bool objectRegionStyleCached = false;
</span><span class="lines">@@ -374,17 +372,17 @@
</span><span class="cx">             childStyleInRegion = it-&gt;value.style;
</span><span class="cx">             objectRegionStyleCached = true;
</span><span class="cx">         } else {
</span><del>-            if (child-&gt;isAnonymous() || child-&gt;isInFlowRenderFlowThread())
-                childStyleInRegion = RenderStyle::createAnonymousStyleWithDisplay(&amp;object-&gt;style(), child-&gt;style().display());
-            else if (child-&gt;isText())
-                childStyleInRegion = RenderStyle::clone(&amp;object-&gt;style());
</del><ins>+            if (child.isAnonymous() || child.isInFlowRenderFlowThread())
+                childStyleInRegion = RenderStyle::createAnonymousStyleWithDisplay(&amp;renderer.style(), child.style().display());
+            else if (child.isText())
+                childStyleInRegion = RenderStyle::clone(&amp;renderer.style());
</ins><span class="cx">             else
</span><del>-                childStyleInRegion = computeStyleInRegion(child);
</del><ins>+                childStyleInRegion = computeStyleInRegion(toRenderElement(child), renderer.style());
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        setObjectStyleInRegion(child, childStyleInRegion, objectRegionStyleCached);
</del><ins>+        setObjectStyleInRegion(&amp;child, childStyleInRegion, objectRegionStyleCached);
</ins><span class="cx"> 
</span><del>-        if (child-&gt;isRenderElement())
</del><ins>+        if (child.isRenderElement())
</ins><span class="cx">             computeChildrenStyleInRegion(toRenderElement(child));
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -452,11 +450,11 @@
</span><span class="cx">             ASSERT(it-&gt;value.cached);
</span><span class="cx">             objectRegionStyleCached = true;
</span><span class="cx">         } else
</span><del>-            objectStyleInRegion = computeStyleInRegion(object);
</del><ins>+            objectStyleInRegion = computeStyleInRegion(*object, style());
</ins><span class="cx"> 
</span><span class="cx">         setObjectStyleInRegion(object, objectStyleInRegion, objectRegionStyleCached);
</span><span class="cx"> 
</span><del>-        computeChildrenStyleInRegion(object);
</del><ins>+        computeChildrenStyleInRegion(*object);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderNamedFlowFragmenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -122,8 +122,8 @@
</span><span class="cx"> private:
</span><span class="cx">     virtual const char* renderName() const override { return &quot;RenderNamedFlowFragment&quot;; }
</span><span class="cx"> 
</span><del>-    PassRefPtr&lt;RenderStyle&gt; computeStyleInRegion(const RenderObject*);
-    void computeChildrenStyleInRegion(const RenderElement*);
</del><ins>+    PassRefPtr&lt;RenderStyle&gt; computeStyleInRegion(RenderElement&amp;, RenderStyle&amp; parentStyle);
+    void computeChildrenStyleInRegion(RenderElement&amp;);
</ins><span class="cx">     void setObjectStyleInRegion(RenderObject*, PassRefPtr&lt;RenderStyle&gt;, bool objectRegionStyleCached);
</span><span class="cx"> 
</span><span class="cx">     void updateRegionHasAutoLogicalHeightFlag();
</span></span></pre></div>
<a id="trunkSourceWebCorestyleStyleResolveTreecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/style/StyleResolveTree.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/style/StyleResolveTree.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/style/StyleResolveTree.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -163,6 +163,15 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static PassRef&lt;RenderStyle&gt; styleForElement(Element&amp; element, RenderStyle&amp; parentStyle)
+{
+    if (element.hasCustomStyleResolveCallbacks()) {
+        if (RefPtr&lt;RenderStyle&gt; style = element.customStyleForRenderer(parentStyle))
+            return style.releaseNonNull();
+    }
+    return element.document().ensureStyleResolver().styleForElement(&amp;element, &amp;parentStyle);
+}
+
</ins><span class="cx"> // Check the specific case of elements that are children of regions but are flowed into a flow thread themselves.
</span><span class="cx"> static bool elementInsideRegionNeedsRenderer(Element&amp; element, const ContainerNode&amp; renderingParentNode, RefPtr&lt;RenderStyle&gt;&amp; style)
</span><span class="cx"> {
</span><span class="lines">@@ -176,7 +185,7 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     if (!style)
</span><del>-        style = element.styleForRenderer();
</del><ins>+        style = styleForElement(element, *renderingParentNode.renderStyle());
</ins><span class="cx"> 
</span><span class="cx">     // Children of this element will only be allowed to be flowed into other flow-threads if display is NOT none.
</span><span class="cx">     if (element.rendererIsNeeded(*style))
</span><span class="lines">@@ -216,7 +225,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (!style)
</span><del>-        style = element.styleForRenderer();
</del><ins>+        style = styleForElement(element, *renderingParentNode.renderStyle());
</ins><span class="cx"> 
</span><span class="cx">     RenderNamedFlowThread* parentFlowRenderer = 0;
</span><span class="cx"> #if ENABLE(CSS_REGIONS)
</span><span class="lines">@@ -661,7 +670,7 @@
</span><span class="cx"> 
</span><span class="cx">     Document&amp; document = current.document();
</span><span class="cx">     if (currentStyle &amp;&amp; current.styleChangeType() != ReconstructRenderTree) {
</span><del>-        newStyle = current.styleForRenderer();
</del><ins>+        newStyle = styleForElement(current, *renderingParentNode.renderStyle());
</ins><span class="cx">         localChange = determineChange(currentStyle.get(), newStyle.get());
</span><span class="cx">     }
</span><span class="cx">     if (localChange == Detach) {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGElement.cpp (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGElement.cpp        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/svg/SVGElement.cpp        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -768,18 +768,12 @@
</span><span class="cx">     contextElement-&gt;synchronizeSystemLanguage();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr&lt;RenderStyle&gt; SVGElement::customStyleForRenderer()
</del><ins>+PassRefPtr&lt;RenderStyle&gt; SVGElement::customStyleForRenderer(RenderStyle&amp; parentStyle)
</ins><span class="cx"> {
</span><span class="cx">     if (!correspondingElement())
</span><del>-        return document().ensureStyleResolver().styleForElement(this);
</del><ins>+        return document().ensureStyleResolver().styleForElement(this, &amp;parentStyle);
</ins><span class="cx"> 
</span><del>-    RenderStyle* style = 0;
-    if (Element* parent = parentOrShadowHostElement()) {
-        if (auto renderer = parent-&gt;renderer())
-            style = &amp;renderer-&gt;style();
-    }
-
-    return document().ensureStyleResolver().styleForElement(correspondingElement(), style, DisallowStyleSharing);
</del><ins>+    return document().ensureStyleResolver().styleForElement(correspondingElement(), &amp;parentStyle, DisallowStyleSharing);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MutableStyleProperties* SVGElement::animatedSMILStyleProperties() const
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGElement.h (165541 => 165542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGElement.h        2014-03-13 16:46:20 UTC (rev 165541)
+++ trunk/Source/WebCore/svg/SVGElement.h        2014-03-13 17:29:09 UTC (rev 165542)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx">     void synchronizeAnimatedSVGAttribute(const QualifiedName&amp;) const;
</span><span class="cx">     static void synchronizeAllAnimatedSVGAttribute(SVGElement*);
</span><span class="cx">  
</span><del>-    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer() override;
</del><ins>+    virtual PassRefPtr&lt;RenderStyle&gt; customStyleForRenderer(RenderStyle&amp; parentStyle) override;
</ins><span class="cx"> 
</span><span class="cx">     static void synchronizeRequiredFeatures(SVGElement* contextElement);
</span><span class="cx">     static void synchronizeRequiredExtensions(SVGElement* contextElement);
</span></span></pre>
</div>
</div>

</body>
</html>