Title: [121518] trunk
Revision
121518
Author
[email protected]
Date
2012-06-28 23:00:56 -0700 (Thu, 28 Jun 2012)

Log Message

[Refactoring] NodeRenderingContext ctor could be built on top of the ComposedShadowTreeWalker
https://bugs.webkit.org/show_bug.cgi?id=89732

Reviewed by Dimitri Glazkov.

.:

* Source/autotools/symbols.filter:

Source/WebCore:

The constructor of NodeRenderingContext implements almost same
logic as ComposedShadowTreeWalker::parent().  This change
eliminates the duplication by employing ComposedShadowTreeWalker in the constructor.

ComposedShadowTreeWalker has same difference from
NodeRenderingContext though. So this change also extends
ComposedShadowTreeWalker to support these missing pieces, which
are encapsulated in newly introduced ParentTranversalDetails
class where:

- not only the parent, but also the insertion point of the child is returned,
- resetStyleInheritance from the child-parent traversal is computed and
- if the starting point is out of the composition, it returns null as a parent.

This change also inlines some ComposedShadowTreeWalker methods for speed.

No new tests. Covered by existing tests.

* WebCore.exp.in:
* dom/ComposedShadowTreeWalker.cpp:
(WebCore::shadowOfParent):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::didTraverseInsertionPoint):
(WebCore):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::didTraverseShadowRoot):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::didFindNode):
(WebCore::ComposedShadowTreeWalker::findParent):
(WebCore::ComposedShadowTreeWalker::escapeFallbackContentElement):
(WebCore::ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents):
(WebCore::ComposedShadowTreeWalker::traverseParent):
(WebCore::ComposedShadowTreeWalker::traverseParentInCurrentTree):
(WebCore::ComposedShadowTreeWalker::traverseParentBackToYoungerShadowRootOrHost):
* dom/ComposedShadowTreeWalker.h:
(ParentTranversalDetails):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::ParentTranversalDetails):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::node):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::insertionPoint):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::resetStyleInheritance):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::outOfComposition):
(WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::childWasOutOfComposition):
(ComposedShadowTreeWalker):
(WebCore::ComposedShadowTreeWalker::ComposedShadowTreeWalker):
(WebCore):
* dom/NodeRenderingContext.cpp:
(WebCore::NodeRenderingContext::NodeRenderingContext):
(WebCore::NodeRenderingContext::nextRenderer):
(WebCore::NodeRenderingContext::previousRenderer):
(WebCore::NodeRenderingContext::parentRenderer):
(WebCore::NodeRenderingContext::shouldCreateRenderer):
(WebCore::NodeRenderingContext::isOnEncapsulationBoundary):
* dom/NodeRenderingContext.h:
(NodeRenderingContext):
(WebCore::NodeRenderingContext::parentNodeForRenderingAndStyle):
(WebCore::NodeRenderingContext::resetStyleInheritance):
(WebCore::NodeRenderingContext::insertionPoint):

Source/WebKit2:

* win/WebKit2.def:
* win/WebKit2CFLite.def:

Modified Paths

Diff

Modified: trunk/ChangeLog (121517 => 121518)


--- trunk/ChangeLog	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/ChangeLog	2012-06-29 06:00:56 UTC (rev 121518)
@@ -1,3 +1,12 @@
+2012-06-28  MORITA Hajime  <[email protected]>
+
+        [Refactoring] NodeRenderingContext ctor could be built on top of the ComposedShadowTreeWalker
+        https://bugs.webkit.org/show_bug.cgi?id=89732
+
+        Reviewed by Dimitri Glazkov.
+
+        * Source/autotools/symbols.filter:
+
 2012-06-28  Jason Liu  <[email protected]>
 
         [BlackBerry] Selection items show as garbage for non-ascii characters.

Modified: trunk/Source/WebCore/ChangeLog (121517 => 121518)


--- trunk/Source/WebCore/ChangeLog	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebCore/ChangeLog	2012-06-29 06:00:56 UTC (rev 121518)
@@ -1,3 +1,65 @@
+2012-06-28  MORITA Hajime  <[email protected]>
+
+        [Refactoring] NodeRenderingContext ctor could be built on top of the ComposedShadowTreeWalker
+        https://bugs.webkit.org/show_bug.cgi?id=89732
+
+        Reviewed by Dimitri Glazkov.
+
+        The constructor of NodeRenderingContext implements almost same
+        logic as ComposedShadowTreeWalker::parent().  This change
+        eliminates the duplication by employing ComposedShadowTreeWalker in the constructor.
+
+        ComposedShadowTreeWalker has same difference from
+        NodeRenderingContext though. So this change also extends
+        ComposedShadowTreeWalker to support these missing pieces, which
+        are encapsulated in newly introduced ParentTranversalDetails
+        class where:
+
+        - not only the parent, but also the insertion point of the child is returned,
+        - resetStyleInheritance from the child-parent traversal is computed and
+        - if the starting point is out of the composition, it returns null as a parent.
+
+        This change also inlines some ComposedShadowTreeWalker methods for speed.
+
+        No new tests. Covered by existing tests.
+
+        * WebCore.exp.in:
+        * dom/ComposedShadowTreeWalker.cpp:
+        (WebCore::shadowOfParent):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::didTraverseInsertionPoint):
+        (WebCore):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::didTraverseShadowRoot):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::didFindNode):
+        (WebCore::ComposedShadowTreeWalker::findParent):
+        (WebCore::ComposedShadowTreeWalker::escapeFallbackContentElement):
+        (WebCore::ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents):
+        (WebCore::ComposedShadowTreeWalker::traverseParent):
+        (WebCore::ComposedShadowTreeWalker::traverseParentInCurrentTree):
+        (WebCore::ComposedShadowTreeWalker::traverseParentBackToYoungerShadowRootOrHost):
+        * dom/ComposedShadowTreeWalker.h:
+        (ParentTranversalDetails):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::ParentTranversalDetails):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::node):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::insertionPoint):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::resetStyleInheritance):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::outOfComposition):
+        (WebCore::ComposedShadowTreeWalker::ParentTranversalDetails::childWasOutOfComposition):
+        (ComposedShadowTreeWalker):
+        (WebCore::ComposedShadowTreeWalker::ComposedShadowTreeWalker):
+        (WebCore):
+        * dom/NodeRenderingContext.cpp:
+        (WebCore::NodeRenderingContext::NodeRenderingContext):
+        (WebCore::NodeRenderingContext::nextRenderer):
+        (WebCore::NodeRenderingContext::previousRenderer):
+        (WebCore::NodeRenderingContext::parentRenderer):
+        (WebCore::NodeRenderingContext::shouldCreateRenderer):
+        (WebCore::NodeRenderingContext::isOnEncapsulationBoundary):
+        * dom/NodeRenderingContext.h:
+        (NodeRenderingContext):
+        (WebCore::NodeRenderingContext::parentNodeForRenderingAndStyle):
+        (WebCore::NodeRenderingContext::resetStyleInheritance):
+        (WebCore::NodeRenderingContext::insertionPoint):
+
 2012-06-28  Stephen White  <[email protected]>
 
         Implement filter url() function.

Modified: trunk/Source/WebCore/WebCore.exp.in (121517 => 121518)


--- trunk/Source/WebCore/WebCore.exp.in	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebCore/WebCore.exp.in	2012-06-29 06:00:56 UTC (rev 121518)
@@ -587,7 +587,6 @@
 __ZN7WebCore24ComposedShadowTreeWalker4nextEv
 __ZN7WebCore24ComposedShadowTreeWalker8previousEv
 __ZN7WebCore24ComposedShadowTreeWalker9lastChildEv
-__ZN7WebCore24ComposedShadowTreeWalkerC1EPKNS_4NodeENS0_6PolicyE
 __ZN7WebCore24DocumentMarkerController10markersForEPNS_4NodeENS_14DocumentMarker11MarkerTypesE
 __ZN7WebCore24DocumentMarkerController13removeMarkersENS_14DocumentMarker11MarkerTypesE
 __ZN7WebCore24DocumentMarkerController23renderedRectsForMarkersENS_14DocumentMarker10MarkerTypeE

Modified: trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp (121517 => 121518)


--- trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebCore/dom/ComposedShadowTreeWalker.cpp	2012-06-29 06:00:56 UTC (rev 121518)
@@ -43,21 +43,31 @@
 
 static inline ElementShadow* shadowOfParent(const Node* node)
 {
-    if (node && node->parentNode())
-        return shadowFor(node->parentNode());
+    if (!node)
+        return 0;
+    if (Node* parent = node->parentNode())
+        if (parent->isElementNode())
+            return toElement(parent)->shadow();
     return 0;
 }
 
-ComposedShadowTreeWalker::ComposedShadowTreeWalker(const Node* node, Policy policy)
-    : m_node(node)
-    , m_policy(policy)
+inline void ComposedShadowTreeWalker::ParentTranversalDetails::didTraverseInsertionPoint(InsertionPoint* insertionPoint)
 {
-#ifndef NDEBUG
-    if (m_node)
-        assertPrecondition();
-#endif
+    if (!m_insertionPoint)
+        m_insertionPoint = insertionPoint;
 }
 
+inline void ComposedShadowTreeWalker::ParentTranversalDetails::didTraverseShadowRoot(const ShadowRoot* root)
+{
+    m_resetStyleInheritance  = m_resetStyleInheritance || root->resetStyleInheritance();
+}
+
+inline void ComposedShadowTreeWalker::ParentTranversalDetails::didFindNode(ContainerNode* node)
+{
+    if (!m_outOfComposition)
+        m_node = node;
+}
+
 ComposedShadowTreeWalker ComposedShadowTreeWalker::fromFirstChild(const Node* node, Policy policy)
 {
     ComposedShadowTreeWalker walker(node, policy);
@@ -65,6 +75,14 @@
     return walker;
 }
 
+void ComposedShadowTreeWalker::findParent(const Node* node, ParentTranversalDetails* details)
+{
+    ComposedShadowTreeWalker walker(node, CrossUpperBoundary, CanStartFromShadowBoundary);
+    ContainerNode* found = toContainerNode(walker.traverseParent(walker.get(), details));
+    if (found)
+        details->didFindNode(found);
+}
+
 void ComposedShadowTreeWalker::firstChild()
 {
     assertPrecondition();
@@ -177,7 +195,7 @@
     return 0;
 }
 
-Node* ComposedShadowTreeWalker::escapeFallbackContentElement(const Node* node, TraversalDirection direction)
+inline Node* ComposedShadowTreeWalker::escapeFallbackContentElement(const Node* node, TraversalDirection direction)
 {
     ASSERT(node);
     if (node->parentNode() && isActiveInsertionPoint(node->parentNode()))
@@ -185,14 +203,14 @@
     return 0;
 }
 
-Node* ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents(const Node* node) const
+inline Node* ComposedShadowTreeWalker::traverseNodeEscapingFallbackContents(const Node* node, ParentTranversalDetails* details) const
 {
     ASSERT(node);
     if (!isInsertionPoint(node))
         return const_cast<Node*>(node);
     const InsertionPoint* insertionPoint = toInsertionPoint(node);
     return insertionPoint->hasDistribution() ? 0 :
-        insertionPoint->isActive() ? traverseParent(node) : const_cast<Node*>(node);
+        insertionPoint->isActive() ? traverseParent(node, details) : const_cast<Node*>(node);
 }
 
 void ComposedShadowTreeWalker::parent()
@@ -202,36 +220,54 @@
     assertPostcondition();
 }
 
-Node* ComposedShadowTreeWalker::traverseParent(const Node* node) const
+inline Node* ComposedShadowTreeWalker::traverseParent(const Node* node, ParentTranversalDetails* details) const
 {
     if (!canCrossUpperBoundary() && node->isShadowRoot()) {
         ASSERT(toShadowRoot(node)->isYoungest());
         return 0;
     }
     if (ElementShadow* shadow = shadowOfParent(node)) {
-        if (InsertionPoint* insertionPoint = shadow->insertionPointFor(node))
-            return traverseParent(insertionPoint);
+        shadow->ensureDistribution();
+        if (InsertionPoint* insertionPoint = shadow->insertionPointFor(node)) {
+            if (details)
+                details->didTraverseInsertionPoint(insertionPoint);
+            return traverseParent(insertionPoint, details);
+        }
+
+        // The node is a non-distributed light child or older shadow's child.
+        if (details)
+            details->childWasOutOfComposition();
     }
-    return traverseParentInCurrentTree(node);
+    return traverseParentInCurrentTree(node, details);
 }
 
-Node* ComposedShadowTreeWalker::traverseParentInCurrentTree(const Node* node) const
+inline Node* ComposedShadowTreeWalker::traverseParentInCurrentTree(const Node* node, ParentTranversalDetails* details) const
 {
     if (Node* parent = node->parentNode())
-        return parent->isShadowRoot() ? traverseParentBackToYoungerShadowRootOrHost(toShadowRoot(parent)) : traverseNodeEscapingFallbackContents(parent);
+        return parent->isShadowRoot() ? traverseParentBackToYoungerShadowRootOrHost(toShadowRoot(parent), details) : traverseNodeEscapingFallbackContents(parent, details);
     return 0;
 }
 
-Node* ComposedShadowTreeWalker::traverseParentBackToYoungerShadowRootOrHost(const ShadowRoot* shadowRoot) const
+inline Node* ComposedShadowTreeWalker::traverseParentBackToYoungerShadowRootOrHost(const ShadowRoot* shadowRoot, ParentTranversalDetails* details) const
 {
     ASSERT(shadowRoot);
     if (shadowRoot->isYoungest()) {
-        if (canCrossUpperBoundary())
+        if (canCrossUpperBoundary()) {
+            if (details)
+                details->didTraverseShadowRoot(shadowRoot);
             return shadowRoot->host();
+        }
+
         return const_cast<ShadowRoot*>(shadowRoot);
     }
-    InsertionPoint* assignedInsertionPoint = shadowRoot->assignedTo();
-    return assignedInsertionPoint ? traverseParent(assignedInsertionPoint) : 0;
+
+    if (InsertionPoint* assignedInsertionPoint = shadowRoot->assignedTo()) {
+        if (details)
+            details->didTraverseShadowRoot(shadowRoot);
+        return traverseParent(assignedInsertionPoint, details);
+    }
+
+    return 0;
 }
 
 Node* ComposedShadowTreeWalker::traverseNextSibling(const Node* node)

Modified: trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h (121517 => 121518)


--- trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebCore/dom/ComposedShadowTreeWalker.h	2012-06-29 06:00:56 UTC (rev 121518)
@@ -44,11 +44,43 @@
         DoNotCrossUpperBoundary,
     };
 
-    ComposedShadowTreeWalker(const Node*, Policy = CrossUpperBoundary);
+    enum StartPolicy {
+        CanStartFromShadowBoundary,
+        CannotStartFromShadowBoundary
+    };
 
+    class ParentTranversalDetails {
+    public:
+        ParentTranversalDetails()
+            : m_node(0)
+            , m_insertionPoint(0)
+            , m_resetStyleInheritance(false)
+            , m_outOfComposition(false)
+        { }
+
+        ContainerNode* node() const { return m_node; }
+        InsertionPoint* insertionPoint() const { return m_insertionPoint; }
+        bool resetStyleInheritance() const { return m_resetStyleInheritance; }
+        bool outOfComposition() const { return m_outOfComposition; }
+
+        void didFindNode(ContainerNode*);
+        void didTraverseInsertionPoint(InsertionPoint*);
+        void didTraverseShadowRoot(const ShadowRoot*);
+        void childWasOutOfComposition() { m_outOfComposition = true; }
+
+    private:
+        ContainerNode* m_node;
+        InsertionPoint* m_insertionPoint;
+        bool m_resetStyleInheritance;
+        bool m_outOfComposition;
+    };
+
+    ComposedShadowTreeWalker(const Node*, Policy = CrossUpperBoundary, StartPolicy = CannotStartFromShadowBoundary);
+
     // For a common use case such as:
     // for (ComposedShadowTreeWalker walker = ComposedShadowTreeWalker::fromFirstChild(node); walker.get(); walker.nextSibling())
     static ComposedShadowTreeWalker fromFirstChild(const Node*, Policy = CrossUpperBoundary);
+    static void findParent(const Node*, ParentTranversalDetails*);
 
     Node* get() const { return const_cast<Node*>(m_node); }
 
@@ -64,6 +96,8 @@
     void previous();
 
 private:
+    ComposedShadowTreeWalker(const Node*, ParentTranversalDetails*);
+
     enum TraversalDirection {
         TraversalDirectionForward,
         TraversalDirectionBackward
@@ -97,7 +131,7 @@
     Node* traverseFirstChild(const Node*) const;
     Node* traverseLastChild(const Node*) const;
     Node* traverseChild(const Node*, TraversalDirection) const;
-    Node* traverseParent(const Node*) const;
+    Node* traverseParent(const Node*, ParentTranversalDetails* = 0) const;
 
     static Node* traverseNextSibling(const Node*);
     static Node* traversePreviousSibling(const Node*);
@@ -108,14 +142,25 @@
     static Node* traverseSiblingOrBackToYoungerShadowRoot(const Node*, TraversalDirection);
     static Node* escapeFallbackContentElement(const Node*, TraversalDirection);
 
-    Node* traverseNodeEscapingFallbackContents(const Node*) const;
-    Node* traverseParentInCurrentTree(const Node*) const;
-    Node* traverseParentBackToYoungerShadowRootOrHost(const ShadowRoot*) const;
+    Node* traverseNodeEscapingFallbackContents(const Node*, ParentTranversalDetails* = 0) const;
+    Node* traverseParentInCurrentTree(const Node*, ParentTranversalDetails* = 0) const;
+    Node* traverseParentBackToYoungerShadowRootOrHost(const ShadowRoot*, ParentTranversalDetails* = 0) const;
 
     const Node* m_node;
     Policy m_policy;
 };
 
+inline ComposedShadowTreeWalker::ComposedShadowTreeWalker(const Node* node, Policy policy, StartPolicy startPolicy)
+    : m_node(node)
+    , m_policy(policy)
+{
+    UNUSED_PARAM(startPolicy);
+#ifndef NDEBUG
+    if (m_node && startPolicy == CannotStartFromShadowBoundary)
+        assertPrecondition();
+#endif
+}
+
 // A special walker class which is only used for traversing a parent node, including
 // insertion points and shadow roots.
 class ComposedShadowTreeParentWalker {

Modified: trunk/Source/WebCore/dom/NodeRenderingContext.cpp (121517 => 121518)


--- trunk/Source/WebCore/dom/NodeRenderingContext.cpp	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebCore/dom/NodeRenderingContext.cpp	2012-06-29 06:00:56 UTC (rev 121518)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "NodeRenderingContext.h"
 
+#include "ComposedShadowTreeWalker.h"
 #include "ContainerNode.h"
 #include "ContentDistributor.h"
 #include "ElementShadow.h"
@@ -53,80 +54,14 @@
 
 NodeRenderingContext::NodeRenderingContext(Node* node)
     : m_node(node)
-    , m_parentNodeForRenderingAndStyle(0)
-    , m_resetStyleInheritance(false)
-    , m_insertionPoint(0)
     , m_style(0)
     , m_parentFlowRenderer(0)
 {
-    ContainerNode* parent = m_node->parentOrHostNode();
-    if (!parent)
-        return;
-
-    if (parent->isShadowRoot() && toShadowRoot(parent)->isYoungest()) {
-        m_parentNodeForRenderingAndStyle = toShadowRoot(parent)->host();
-        m_resetStyleInheritance = toShadowRoot(parent)->resetStyleInheritance();
-        return;
-    }
-
-    if (parent->isElementNode() || parent->isShadowRoot()) {
-        ElementShadow* parentShadow = 0;
-
-        if (parent->isElementNode())
-            parentShadow = toElement(parent)->shadow();
-        else if (parent->isShadowRoot())
-            parentShadow = toShadowRoot(parent)->owner();
-
-        if (parentShadow) {
-            parentShadow->ensureDistribution();
-
-            if (InsertionPoint* insertionPoint = parentShadow->insertionPointFor(m_node)) {
-                if (insertionPoint->shadowRoot()->isUsedForRendering()) {
-                    NodeRenderingContext insertionPointContext(insertionPoint);
-                    m_parentNodeForRenderingAndStyle = insertionPointContext.parentNodeForRenderingAndStyle();
-                    m_resetStyleInheritance = insertionPointContext.resetStyleInheritance();
-                    m_insertionPoint = insertionPoint;
-                    return;
-                }
-            }
-
-            return;
-        }
-
-        if (isLowerEncapsulationBoundary(parent)) {
-            ShadowRoot* parentScope = parent->shadowRoot();
-            parentScope->owner()->ensureDistribution();
-
-            // The shadow tree isn't part of composed tree.
-            if (!parentScope->isUsedForRendering())
-                return;
-
-            // the parent insertion point doesn't need any fallback content.
-            if (toInsertionPoint(parent)->hasDistribution())
-                return;
-
-            if (toInsertionPoint(parent)->isActive()) {
-                // Uses m_node as a fallback node of the insertion point.
-                NodeRenderingContext parentContext(parent);
-                m_parentNodeForRenderingAndStyle = parentContext.parentNodeForRenderingAndStyle();
-                m_resetStyleInheritance = parentContext.resetStyleInheritance();
-                return;
-            }
-
-            // The insertion point isn't active thus behaves as a plain old element.
-            m_parentNodeForRenderingAndStyle = parent;
-            return;
-        }
-    }
-
-    m_parentNodeForRenderingAndStyle = parent;
+    ComposedShadowTreeWalker::findParent(m_node, &m_parentDetails);
 }
 
 NodeRenderingContext::NodeRenderingContext(Node* node, RenderStyle* style)
     : m_node(node)
-    , m_parentNodeForRenderingAndStyle(0)
-    , m_resetStyleInheritance(false)
-    , m_insertionPoint(0)
     , m_style(style)
     , m_parentFlowRenderer(0)
 {
@@ -242,10 +177,10 @@
     if (m_parentFlowRenderer)
         return m_parentFlowRenderer->nextRendererForNode(m_node);
 
-    if (m_insertionPoint) {
-        if (RenderObject* found = nextRendererOfInsertionPoint(m_insertionPoint, m_node))
+    if (m_parentDetails.insertionPoint()) {
+        if (RenderObject* found = nextRendererOfInsertionPoint(m_parentDetails.insertionPoint(), m_node))
             return found;
-        return NodeRenderingContext(m_insertionPoint).nextRenderer();
+        return NodeRenderingContext(m_parentDetails.insertionPoint()).nextRenderer();
     }
 
     // Avoid an O(N^2) problem with this function by not checking for
@@ -264,10 +199,10 @@
     if (m_parentFlowRenderer)
         return m_parentFlowRenderer->previousRendererForNode(m_node);
 
-    if (m_insertionPoint) {
-        if (RenderObject* found = previousRendererOfInsertionPoint(m_insertionPoint, m_node))
+    if (m_parentDetails.insertionPoint()) {
+        if (RenderObject* found = previousRendererOfInsertionPoint(m_parentDetails.insertionPoint(), m_node))
             return found;
-        return NodeRenderingContext(m_insertionPoint).previousRenderer();
+        return NodeRenderingContext(m_parentDetails.insertionPoint()).previousRenderer();
     }
 
     // FIXME: We should have the same O(N^2) avoidance as nextRenderer does
@@ -282,19 +217,19 @@
     if (m_parentFlowRenderer)
         return m_parentFlowRenderer;
 
-    return m_parentNodeForRenderingAndStyle ? m_parentNodeForRenderingAndStyle->renderer() : 0;
+    return m_parentDetails.node() ? m_parentDetails.node()->renderer() : 0;
 }
 
 bool NodeRenderingContext::shouldCreateRenderer() const
 {
-    if (!m_parentNodeForRenderingAndStyle)
+    if (!m_parentDetails.node())
         return false;
     RenderObject* parentRenderer = this->parentRenderer();
     if (!parentRenderer)
         return false;
     if (!parentRenderer->canHaveChildren())
         return false;
-    if (!m_parentNodeForRenderingAndStyle->childShouldCreateRenderer(*this))
+    if (!m_parentDetails.node()->childShouldCreateRenderer(*this))
         return false;
     return true;
 }
@@ -327,7 +262,7 @@
 
 bool NodeRenderingContext::isOnEncapsulationBoundary() const
 {
-    return isOnUpperEncapsulationBoundary() || isLowerEncapsulationBoundary(m_insertionPoint) || isLowerEncapsulationBoundary(m_node->parentNode());
+    return isOnUpperEncapsulationBoundary() || isLowerEncapsulationBoundary(m_parentDetails.insertionPoint()) || isLowerEncapsulationBoundary(m_node->parentNode());
 }
 
 bool NodeRenderingContext::isOnUpperEncapsulationBoundary() const

Modified: trunk/Source/WebCore/dom/NodeRenderingContext.h (121517 => 121518)


--- trunk/Source/WebCore/dom/NodeRenderingContext.h	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebCore/dom/NodeRenderingContext.h	2012-06-29 06:00:56 UTC (rev 121518)
@@ -26,6 +26,7 @@
 #ifndef NodeRenderingContext_h
 #define NodeRenderingContext_h
 
+#include "ComposedShadowTreeWalker.h"
 #include <wtf/Noncopyable.h>
 #include <wtf/RefPtr.h>
 #include <wtf/text/AtomicString.h>
@@ -69,9 +70,7 @@
 
 private:
     Node* m_node;
-    ContainerNode* m_parentNodeForRenderingAndStyle;
-    bool m_resetStyleInheritance;
-    InsertionPoint* m_insertionPoint;
+    ComposedShadowTreeWalker::ParentTranversalDetails m_parentDetails;
     RefPtr<RenderStyle> m_style;
     RenderNamedFlowThread* m_parentFlowRenderer;
     AtomicString m_flowThread;
@@ -84,12 +83,12 @@
 
 inline ContainerNode* NodeRenderingContext::parentNodeForRenderingAndStyle() const
 {
-    return m_parentNodeForRenderingAndStyle;
+    return m_parentDetails.node();
 }
 
 inline bool NodeRenderingContext::resetStyleInheritance() const
 {
-    return m_resetStyleInheritance;
+    return m_parentDetails.resetStyleInheritance();
 }
 
 inline RenderStyle* NodeRenderingContext::style() const
@@ -99,7 +98,7 @@
 
 inline InsertionPoint* NodeRenderingContext::insertionPoint() const
 {
-    return m_insertionPoint;
+    return m_parentDetails.insertionPoint();
 }
 
 class NodeRendererFactory {

Modified: trunk/Source/WebKit2/ChangeLog (121517 => 121518)


--- trunk/Source/WebKit2/ChangeLog	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebKit2/ChangeLog	2012-06-29 06:00:56 UTC (rev 121518)
@@ -1,3 +1,13 @@
+2012-06-28  MORITA Hajime  <[email protected]>
+
+        [Refactoring] NodeRenderingContext ctor could be built on top of the ComposedShadowTreeWalker
+        https://bugs.webkit.org/show_bug.cgi?id=89732
+
+        Reviewed by Dimitri Glazkov.
+
+        * win/WebKit2.def:
+        * win/WebKit2CFLite.def:
+
 2012-06-28  John Sullivan  <[email protected]>
 
         <https://bugs.webkit.org/show_bug.cgi?id=90216>

Modified: trunk/Source/WebKit2/win/WebKit2.def (121517 => 121518)


--- trunk/Source/WebKit2/win/WebKit2.def	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebKit2/win/WebKit2.def	2012-06-29 06:00:56 UTC (rev 121518)
@@ -184,13 +184,13 @@
         ?getLocationAndLengthFromRange@TextIterator@WebCore@@SA_NPAVElement@2@PBVRange@2@AAI2@Z
         ?inputTag@HTMLNames@WebCore@@3VQualifiedName@2@B
         ?instrumentingAgentsForPage@InspectorInstrumentation@WebCore@@CAPAVInstrumentingAgents@2@PAVPage@2@@Z
+        ?isActiveInsertionPoint@WebCore@@YA_NPBVNode@1@@Z
         ?isCSSExclusionsEnabled@RuntimeEnabledFeatures@WebCore@@0_NA
         ?isPreloaded@CachedResourceLoader@WebCore@@QBE_NABVString@WTF@@@Z
         ?jsArray@WebCore@@YA?AVJSValue@JSC@@PAVExecState@3@PAVJSDOMGlobalObject@1@V?$PassRefPtr@VDOMStringList@WebCore@@@WTF@@@Z
         ?lastChangeWasUserEdit@HTMLTextFormControlElement@WebCore@@QBE_NXZ
         ?markersFor@DocumentMarkerController@WebCore@@QAE?AV?$Vector@PAVDocumentMarker@WebCore@@$0A@@WTF@@PAVNode@2@VMarkerTypes@DocumentMarker@2@@Z
         ?nextSibling@ComposedShadowTreeWalker@WebCore@@QAEXXZ
-        ??0ComposedShadowTreeWalker@WebCore@@QAE@PBVNode@1@W4Policy@01@@Z
         ?firstChild@ComposedShadowTreeWalker@WebCore@@QAEXXZ
         ?lastChild@ComposedShadowTreeWalker@WebCore@@QAEXXZ
         ?next@ComposedShadowTreeWalker@WebCore@@QAEXXZ
@@ -262,6 +262,7 @@
         ?webkitWillExitFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z
         ?webkitDidExitFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z
         ?isPageBoxVisible@Document@WebCore@@QAE_NH@Z
+        ?isActive@InsertionPoint@WebCore@@QBE_NXZ
         ?suspendAnimations@AnimationController@WebCore@@QAEXXZ
         ?resumeAnimations@AnimationController@WebCore@@QAEXXZ
         ?setAllowsRoundingHacks@TextRun@WebCore@@SAX_N@Z

Modified: trunk/Source/WebKit2/win/WebKit2CFLite.def (121517 => 121518)


--- trunk/Source/WebKit2/win/WebKit2CFLite.def	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/WebKit2/win/WebKit2CFLite.def	2012-06-29 06:00:56 UTC (rev 121518)
@@ -177,13 +177,13 @@
         ?getLocationAndLengthFromRange@TextIterator@WebCore@@SA_NPAVElement@2@PBVRange@2@AAI2@Z
         ?inputTag@HTMLNames@WebCore@@3VQualifiedName@2@B
         ?instrumentingAgentsForPage@InspectorInstrumentation@WebCore@@CAPAVInstrumentingAgents@2@PAVPage@2@@Z
+        ?isActiveInsertionPoint@WebCore@@YA_NPBVNode@1@@Z
         ?isCSSExclusionsEnabled@RuntimeEnabledFeatures@WebCore@@0_NA
         ?isPreloaded@CachedResourceLoader@WebCore@@QBE_NABVString@WTF@@@Z
         ?jsArray@WebCore@@YA?AVJSValue@JSC@@PAVExecState@3@PAVJSDOMGlobalObject@1@V?$PassRefPtr@VDOMStringList@WebCore@@@WTF@@@Z
         ?lastChangeWasUserEdit@HTMLTextFormControlElement@WebCore@@QBE_NXZ
         ?markersFor@DocumentMarkerController@WebCore@@QAE?AV?$Vector@PAVDocumentMarker@WebCore@@$0A@@WTF@@PAVNode@2@VMarkerTypes@DocumentMarker@2@@Z
         ?nextSibling@ComposedShadowTreeWalker@WebCore@@QAEXXZ
-        ??0ComposedShadowTreeWalker@WebCore@@QAE@PBVNode@1@W4Policy@01@@Z
         ?firstChild@ComposedShadowTreeWalker@WebCore@@QAEXXZ
         ?lastChild@ComposedShadowTreeWalker@WebCore@@QAEXXZ
         ?next@ComposedShadowTreeWalker@WebCore@@QAEXXZ
@@ -251,6 +251,7 @@
         ?nodesFromRect@Document@WebCore@@QBE?AV?$PassRefPtr@VNodeList@WebCore@@@WTF@@HHIIII_N0@Z
         ?selectionStartHasMarkerFor@Editor@WebCore@@QBE_NW4MarkerType@DocumentMarker@2@HH@Z
         ?isPageBoxVisible@Document@WebCore@@QAE_NH@Z
+        ?isActive@InsertionPoint@WebCore@@QBE_NXZ
         ?suspendAnimations@AnimationController@WebCore@@QAEXXZ
         ?resumeAnimations@AnimationController@WebCore@@QAEXXZ
         ?setAllowsRoundingHacks@TextRun@WebCore@@SAX_N@Z

Modified: trunk/Source/autotools/symbols.filter (121517 => 121518)


--- trunk/Source/autotools/symbols.filter	2012-06-29 04:45:11 UTC (rev 121517)
+++ trunk/Source/autotools/symbols.filter	2012-06-29 06:00:56 UTC (rev 121518)
@@ -82,7 +82,6 @@
 _ZN7WebCore24ComposedShadowTreeWalker4nextEv;
 _ZN7WebCore24ComposedShadowTreeWalker8previousEv;
 _ZN7WebCore24ComposedShadowTreeWalker9lastChildEv;
-_ZN7WebCore24ComposedShadowTreeWalkerC1EPKNS_4NodeENS0_6PolicyE;
 _ZN7WebCore24DocumentMarkerController10markersForEPNS_4NodeENS_14DocumentMarker11MarkerTypesE;
 _ZN7WebCore30overrideUserPreferredLanguagesERKN3WTF6VectorINS0_6StringELj0EEE;
 _ZN7WebCore30overrideUserPreferredLanguagesERKN3WTF6VectorINS0_6StringELm0EEE;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to