Changeset 191112 in webkit


Ignore:
Timestamp:
Oct 15, 2015 8:12:39 AM (8 years ago)
Author:
Antti Koivisto
Message:

Implement iterator for traversing composed ancestors
https://bugs.webkit.org/show_bug.cgi?id=150162

Reviewed by Andreas Kling.

The existing general purpose ComposedTreeIterator can traverse parent chain but not efficiently
(since it builds stack). Add a separate stackless iterator for ancestor chain traversal.

  • WebCore.xcodeproj/project.pbxproj:
  • dom/ComposedTreeAncestorIterator.h: Added.

(WebCore::ComposedTreeAncestorIterator::operator*):
(WebCore::ComposedTreeAncestorIterator::operator->):
(WebCore::ComposedTreeAncestorIterator::operator==):
(WebCore::ComposedTreeAncestorIterator::operator!=):
(WebCore::ComposedTreeAncestorIterator::operator++):
(WebCore::ComposedTreeAncestorIterator::get):
(WebCore::ComposedTreeAncestorIterator::ComposedTreeAncestorIterator):
(WebCore::ComposedTreeAncestorIterator::traverseParent):
(WebCore::ComposedTreeAncestorAdapter::ComposedTreeAncestorAdapter):
(WebCore::ComposedTreeAncestorAdapter::begin):
(WebCore::ComposedTreeAncestorAdapter::end):
(WebCore::ComposedTreeAncestorAdapter::first):
(WebCore::composedTreeAncestors):

  • dom/ComposedTreeIterator.h:
  • dom/ContainerNode.h:

(WebCore::Node::highestAncestor):
(WebCore::Node::isTreeScope):
(WebCore::Node::needsNodeRenderingTraversalSlowPath): Deleted.

With NodeRenderingTraversal::parent removed this bit is no longer used.

  • dom/Element.cpp:

(WebCore::Element::shadowRoot):
(WebCore::Element::addShadowRoot):
(WebCore::shouldUseNodeRenderingTraversalSlowPath): Deleted.
(WebCore::Element::resetNeedsNodeRenderingTraversalSlowPath): Deleted.

  • dom/Element.h:

(WebCore::Element::didAddUserAgentShadowRoot):
(WebCore::Element::alwaysCreateUserAgentShadowRoot):

  • dom/Node.cpp:

(WebCore::Node::derefEventTarget):
(WebCore::Node::updateAncestorsForStyleRecalc):
(WebCore::traverseStyleParent): Deleted.
(WebCore::traverseFirstStyleParent): Deleted.

Switch to iterator interface.

  • dom/Node.h:

(WebCore::Node::isDocumentFragment):
(WebCore::Node::isShadowRoot):
(WebCore::Node::isNamedFlowContentNode):
(WebCore::Node::hasCustomStyleResolveCallbacks):
(WebCore::Node::setHasCustomStyleResolveCallbacks):
(WebCore::Node::setTreeScope):
(WebCore::Node::setStyleChange):
(WebCore::Node::setNeedsNodeRenderingTraversalSlowPath): Deleted.

  • dom/NodeRenderingTraversal.cpp:

(WebCore::NodeRenderingTraversal::traverseParent):
(WebCore::NodeRenderingTraversal::traverseFirstChild):
(WebCore::NodeRenderingTraversal::traverseLastChild):
(WebCore::NodeRenderingTraversal::traversePreviousSibling):
(WebCore::NodeRenderingTraversal::nextInScope):
(WebCore::NodeRenderingTraversal::previousInScope):
(WebCore::NodeRenderingTraversal::parentInScope):
(WebCore::NodeRenderingTraversal::lastChildInScope):
(WebCore::NodeRenderingTraversal::parentSlow): Deleted.

  • dom/NodeRenderingTraversal.h:

(WebCore::NodeRenderingTraversal::parent): Deleted.

No longer used.

  • html/HTMLSummaryElement.cpp:
  • rendering/RenderNamedFlowThread.cpp:

(WebCore::RenderNamedFlowThread::isChildAllowed):

Switch to iterator interface.

  • style/RenderTreePosition.cpp:
  • style/StyleResolveTree.cpp:

(WebCore::Style::updateTextRendererAfterContentChange):

Switch to iterator interface.

Location:
trunk/Source/WebCore
Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r191084 r191112  
     12015-10-15  Antti Koivisto  <antti@apple.com>
     2
     3        Implement iterator for traversing composed ancestors
     4        https://bugs.webkit.org/show_bug.cgi?id=150162
     5
     6        Reviewed by Andreas Kling.
     7
     8        The existing general purpose ComposedTreeIterator can traverse parent chain but not efficiently
     9        (since it builds stack). Add a separate stackless iterator for ancestor chain traversal.
     10
     11        * WebCore.xcodeproj/project.pbxproj:
     12        * dom/ComposedTreeAncestorIterator.h: Added.
     13        (WebCore::ComposedTreeAncestorIterator::operator*):
     14        (WebCore::ComposedTreeAncestorIterator::operator->):
     15        (WebCore::ComposedTreeAncestorIterator::operator==):
     16        (WebCore::ComposedTreeAncestorIterator::operator!=):
     17        (WebCore::ComposedTreeAncestorIterator::operator++):
     18        (WebCore::ComposedTreeAncestorIterator::get):
     19        (WebCore::ComposedTreeAncestorIterator::ComposedTreeAncestorIterator):
     20        (WebCore::ComposedTreeAncestorIterator::traverseParent):
     21        (WebCore::ComposedTreeAncestorAdapter::ComposedTreeAncestorAdapter):
     22        (WebCore::ComposedTreeAncestorAdapter::begin):
     23        (WebCore::ComposedTreeAncestorAdapter::end):
     24        (WebCore::ComposedTreeAncestorAdapter::first):
     25        (WebCore::composedTreeAncestors):
     26        * dom/ComposedTreeIterator.h:
     27        * dom/ContainerNode.h:
     28        (WebCore::Node::highestAncestor):
     29        (WebCore::Node::isTreeScope):
     30        (WebCore::Node::needsNodeRenderingTraversalSlowPath): Deleted.
     31
     32            With NodeRenderingTraversal::parent removed this bit is no longer used.
     33
     34        * dom/Element.cpp:
     35        (WebCore::Element::shadowRoot):
     36        (WebCore::Element::addShadowRoot):
     37        (WebCore::shouldUseNodeRenderingTraversalSlowPath): Deleted.
     38        (WebCore::Element::resetNeedsNodeRenderingTraversalSlowPath): Deleted.
     39        * dom/Element.h:
     40        (WebCore::Element::didAddUserAgentShadowRoot):
     41        (WebCore::Element::alwaysCreateUserAgentShadowRoot):
     42        * dom/Node.cpp:
     43        (WebCore::Node::derefEventTarget):
     44        (WebCore::Node::updateAncestorsForStyleRecalc):
     45        (WebCore::traverseStyleParent): Deleted.
     46        (WebCore::traverseFirstStyleParent): Deleted.
     47
     48            Switch to iterator interface.
     49
     50        * dom/Node.h:
     51        (WebCore::Node::isDocumentFragment):
     52        (WebCore::Node::isShadowRoot):
     53        (WebCore::Node::isNamedFlowContentNode):
     54        (WebCore::Node::hasCustomStyleResolveCallbacks):
     55        (WebCore::Node::setHasCustomStyleResolveCallbacks):
     56        (WebCore::Node::setTreeScope):
     57        (WebCore::Node::setStyleChange):
     58        (WebCore::Node::setNeedsNodeRenderingTraversalSlowPath): Deleted.
     59        * dom/NodeRenderingTraversal.cpp:
     60        (WebCore::NodeRenderingTraversal::traverseParent):
     61        (WebCore::NodeRenderingTraversal::traverseFirstChild):
     62        (WebCore::NodeRenderingTraversal::traverseLastChild):
     63        (WebCore::NodeRenderingTraversal::traversePreviousSibling):
     64        (WebCore::NodeRenderingTraversal::nextInScope):
     65        (WebCore::NodeRenderingTraversal::previousInScope):
     66        (WebCore::NodeRenderingTraversal::parentInScope):
     67        (WebCore::NodeRenderingTraversal::lastChildInScope):
     68        (WebCore::NodeRenderingTraversal::parentSlow): Deleted.
     69        * dom/NodeRenderingTraversal.h:
     70        (WebCore::NodeRenderingTraversal::parent): Deleted.
     71
     72            No longer used.
     73
     74        * html/HTMLSummaryElement.cpp:
     75        * rendering/RenderNamedFlowThread.cpp:
     76        (WebCore::RenderNamedFlowThread::isChildAllowed):
     77
     78            Switch to iterator interface.
     79
     80        * style/RenderTreePosition.cpp:
     81        * style/StyleResolveTree.cpp:
     82        (WebCore::Style::updateTextRendererAfterContentChange):
     83
     84            Switch to iterator interface.
     85
    1862015-10-14  Zhuo Li  <zachli@apple.com>
    287
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r191084 r191112  
    64726472                E4B65A5C132FACB00070E7BE /* LegacyTileLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B65A5B132FACB00070E7BE /* LegacyTileLayer.h */; };
    64736473                E4B65A5E132FADB60070E7BE /* LegacyTileLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4B65A5D132FADB60070E7BE /* LegacyTileLayer.mm */; };
     6474                E4BA50901BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E4BA508F1BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h */; settings = {ASSET_TAGS = (); }; };
    64746475                E4BBED0E14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4BBED0C14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.cpp */; };
    64756476                E4BBED0F14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.h in Headers */ = {isa = PBXBuildFile; fileRef = E4BBED0D14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.h */; };
     
    1431114312                E4B65A5B132FACB00070E7BE /* LegacyTileLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LegacyTileLayer.h; sourceTree = "<group>"; };
    1431214313                E4B65A5D132FADB60070E7BE /* LegacyTileLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LegacyTileLayer.mm; sourceTree = "<group>"; };
     14314                E4BA508F1BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComposedTreeAncestorIterator.h; sourceTree = "<group>"; };
    1431314315                E4BBED0C14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PropertySetCSSStyleDeclaration.cpp; sourceTree = "<group>"; };
    1431414316                E4BBED0D14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PropertySetCSSStyleDeclaration.h; sourceTree = "<group>"; };
     
    2353623538                                6550B698099DF0270090D781 /* Comment.h */,
    2353723539                                85089CC70A98C22600A275AA /* Comment.idl */,
     23540                                E4BA508F1BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h */,
    2353823541                                E44FA1861BCA91560091B6EF /* ComposedTreeIterator.cpp */,
    2353923542                                E44FA1841BCA6B5A0091B6EF /* ComposedTreeIterator.h */,
     
    2467024673                                FBD6AF8815EF25C9008B7110 /* CSSBasicShapes.h in Headers */,
    2467124674                                E16A84FA14C85CCC002977DF /* CSSBorderImage.h in Headers */,
     24675                                E4BA50901BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h in Headers */,
    2467224676                                BC274B2F140EBEB200EADFA6 /* CSSBorderImageSliceValue.h in Headers */,
    2467324677                                49AE2D8F134EE50C0072920A /* CSSCalculationValue.h in Headers */,
     
    2557325577                                5185FCB91BB4CBF80012898F /* IDBConnectionToClient.h in Headers */,
    2557425578                                516D7D721BB5F0BD00AF7C77 /* IDBConnectionToClientDelegate.h in Headers */,
    25575                                 5185FC5B1BB4BE4C0012898F /* IDBConnectionToServer.h in Headers */,
    2557625579                                516D7D701BB5F0BD00AF7C77 /* IDBConnectionToServerDelegate.h in Headers */,
    2557725580                                5185FC7B1BB4C4E80012898F /* IDBCursor.h in Headers */,
     
    2916729170                                C585A66211D4FAC5004C3E4B /* IDBBindingUtilities.cpp in Sources */,
    2916829171                                516D7D711BB5F0BD00AF7C77 /* IDBConnectionToClient.cpp in Sources */,
    29169                                 516D7D6F1BB5F0BD00AF7C77 /* IDBConnectionToServer.cpp in Sources */,
    2917029172                                5185FC7A1BB4C4E80012898F /* IDBCursor.cpp in Sources */,
    2917129173                                51F41A691BA73B5B002E053B /* IDBCursorBackend.cpp in Sources */,
     
    3109731099                                CDC69DD71632026C007C38DF /* WebCoreFullScreenWarningView.mm in Sources */,
    3109831100                                CD127DED14F3097D00E84779 /* WebCoreFullScreenWindow.mm in Sources */,
    31099                                 411A90421BBAB47A000CF156 /* WebCoreJSBuiltins.cpp in Sources */,
    3110031101                                3140379C124BEA7F00AF40E4 /* WebCoreMotionManager.mm in Sources */,
    3110131102                                934D9BA50B8C116B007B42A9 /* WebCoreNSStringExtras.mm in Sources */,
  • trunk/Source/WebCore/dom/ComposedTreeIterator.h

    r190983 r191112  
    2424 */
    2525
    26 #include "HTMLSlotElement.h"
    2726#include "NodeTraversal.h"
    2827#include "ShadowRoot.h"
  • trunk/Source/WebCore/dom/ContainerNode.h

    r190229 r191112  
    229229}
    230230
    231 inline bool Node::needsNodeRenderingTraversalSlowPath() const
    232 {
    233     if (getFlag(NeedsNodeRenderingTraversalSlowPathFlag))
    234         return true;
    235     ContainerNode* parent = parentOrShadowHostNode();
    236     return parent && parent->getFlag(NeedsNodeRenderingTraversalSlowPathFlag);
    237 }
    238 
    239231inline bool Node::isTreeScope() const
    240232{
  • trunk/Source/WebCore/dom/Element.cpp

    r190995 r191112  
    16201620}
    16211621
    1622 static bool shouldUseNodeRenderingTraversalSlowPath(const Element& element)
    1623 {
    1624     return element.isShadowRoot() || element.shadowRoot();
    1625 }
    1626 
    1627 void Element::resetNeedsNodeRenderingTraversalSlowPath()
    1628 {
    1629     setNeedsNodeRenderingTraversalSlowPath(shouldUseNodeRenderingTraversalSlowPath(*this));
    1630 }
    16311622
    16321623void Element::addShadowRoot(Ref<ShadowRoot>&& newShadowRoot)
     
    16441635    for (auto& target : postInsertionNotificationTargets)
    16451636        target->finishedInsertingSubtree();
    1646 
    1647     resetNeedsNodeRenderingTraversalSlowPath();
    16481637
    16491638    setNeedsStyleRecalc(ReconstructRenderTree);
  • trunk/Source/WebCore/dom/Element.h

    r189987 r191112  
    520520    bool isUserActionElementHovered() const;
    521521
    522     void resetNeedsNodeRenderingTraversalSlowPath();
    523 
    524522    virtual void didAddUserAgentShadowRoot(ShadowRoot*) { }
    525523    virtual bool alwaysCreateUserAgentShadowRoot() const { return false; }
  • trunk/Source/WebCore/dom/Node.cpp

    r190995 r191112  
    3232#include "Chrome.h"
    3333#include "ChromeClient.h"
     34#include "ComposedTreeAncestorIterator.h"
    3435#include "ContainerNodeAlgorithms.h"
    3536#include "ContextMenuController.h"
     
    741742}
    742743
    743 // FIXME: Factor into iterator.
    744 static ContainerNode* traverseStyleParent(Node& node)
    745 {
    746     auto* parent = node.parentNode();
    747     if (!parent) {
    748         if (is<ShadowRoot>(node))
    749             return downcast<ShadowRoot>(node).host();
    750         return nullptr;
    751     }
    752 #if ENABLE(SHADOW_DOM) || ENABLE(DETAILS_ELEMENT)
    753     if (auto* shadowRoot = parent->shadowRoot()) {
    754         if (auto* assignedSlot = shadowRoot->findAssignedSlot(node))
    755             return assignedSlot;
    756     }
    757 #endif
    758     return parent;
    759 }
    760 
    761 static ContainerNode* traverseFirstStyleParent(Node& node)
    762 {
    763     if (is<PseudoElement>(node))
    764         return downcast<PseudoElement>(node).hostElement();
    765     return traverseStyleParent(node);
    766 }
    767 
    768744inline void Node::updateAncestorsForStyleRecalc()
    769745{
    770     if (auto* ancestor = traverseFirstStyleParent(*this)) {
    771         ancestor->setDirectChildNeedsStyleRecalc();
    772 
    773         if (is<Element>(*ancestor) && downcast<Element>(*ancestor).childrenAffectedByPropertyBasedBackwardPositionalRules()) {
    774             if (ancestor->styleChangeType() < FullStyleChange)
    775                 ancestor->setStyleChange(FullStyleChange);
    776         }
    777 
    778         for (; ancestor; ancestor = traverseStyleParent(*ancestor)) {
    779             if (ancestor->childNeedsStyleRecalc())
     746    auto composedAncestors = composedTreeAncestors(*this);
     747    auto it = composedAncestors.begin();
     748    auto end = composedAncestors.end();
     749    if (it != end) {
     750        it->setDirectChildNeedsStyleRecalc();
     751
     752        if (is<Element>(*it) && downcast<Element>(*it).childrenAffectedByPropertyBasedBackwardPositionalRules()) {
     753            if (it->styleChangeType() < FullStyleChange)
     754                it->setStyleChange(FullStyleChange);
     755        }
     756
     757        for (; it != end; ++it) {
     758            // Iterator skips over shadow roots.
     759            if (auto* shadowRoot = it->shadowRoot())
     760                shadowRoot->setChildNeedsStyleRecalc();
     761            if (it->childNeedsStyleRecalc())
    780762                break;
    781             ancestor->setChildNeedsStyleRecalc();
     763            it->setChildNeedsStyleRecalc();
    782764        }
    783765    }
  • trunk/Source/WebCore/dom/Node.h

    r190845 r191112  
    268268    bool isShadowRoot() const { return isDocumentFragment() && isTreeScope(); }
    269269
    270     bool needsNodeRenderingTraversalSlowPath() const;
    271 
    272270    bool isNamedFlowContentNode() const { return getFlag(IsNamedFlowContentNodeFlag); }
    273271    bool hasCustomStyleResolveCallbacks() const { return getFlag(HasCustomStyleResolveCallbacksFlag); }
     
    618616        HasCustomStyleResolveCallbacksFlag = 1 << 20,
    619617        HasEventTargetDataFlag = 1 << 21,
    620         NeedsNodeRenderingTraversalSlowPathFlag = 1 << 22,
     618        // HeyItIsAFreeBit = 1 << 22,
    621619        IsInShadowTreeFlag = 1 << 23,
    622620        IsMathMLFlag = 1 << 24,
     
    645643        CreateContainer = DefaultNodeFlags | IsContainerFlag,
    646644        CreateElement = CreateContainer | IsElementFlag,
    647         CreatePseudoElement =  CreateElement | InDocumentFlag | NeedsNodeRenderingTraversalSlowPathFlag,
    648         CreateShadowRoot = CreateContainer | IsDocumentFragmentFlag | NeedsNodeRenderingTraversalSlowPathFlag | IsInShadowTreeFlag,
     645        CreatePseudoElement =  CreateElement | InDocumentFlag,
     646        CreateShadowRoot = CreateContainer | IsDocumentFragmentFlag | IsInShadowTreeFlag,
    649647        CreateDocumentFragment = CreateContainer | IsDocumentFragmentFlag,
    650648        CreateStyledElement = CreateElement | IsStyledElementFlag,
     
    670668
    671669    void setHasCustomStyleResolveCallbacks() { setFlag(true, HasCustomStyleResolveCallbacksFlag); }
    672 
    673     void setNeedsNodeRenderingTraversalSlowPath(bool flag) { setFlag(flag, NeedsNodeRenderingTraversalSlowPathFlag); }
    674670
    675671    void setTreeScope(TreeScope& scope) { m_treeScope = &scope; }
  • trunk/Source/WebCore/dom/NodeRenderingTraversal.cpp

    r190983 r191112  
    3535namespace NodeRenderingTraversal {
    3636
    37 enum ShadowRootCrossing { CrossShadowRoot, DontCrossShadowRoot };
    38 
    39 static ContainerNode* traverseParent(const Node* node, ShadowRootCrossing shadowRootCrossing)
     37static ContainerNode* traverseParent(const Node* node)
    4038{
    41     if (shadowRootCrossing == DontCrossShadowRoot  && node->isShadowRoot())
     39    if (node->isShadowRoot())
    4240        return nullptr;
    4341
     
    4644        return nullptr;
    4745
    48     if (!parent)
    49         return nullptr;
    50 
    51     if (is<ShadowRoot>(*parent))
    52         return shadowRootCrossing == CrossShadowRoot ? downcast<ShadowRoot>(parent)->host() : parent;
    53 
    5446    return parent;
    5547}
    5648
    57 static Node* traverseFirstChild(const Node* node, ShadowRootCrossing shadowRootCrossing)
     49static Node* traverseFirstChild(const Node* node)
    5850{
    5951    ASSERT(node);
    60     if (node->shadowRoot()) {
    61         if (shadowRootCrossing == DontCrossShadowRoot)
    62             return nullptr;
    63         node = node->shadowRoot();
    64     }
     52    if (node->shadowRoot())
     53        return nullptr;
    6554    return node->firstChild();
    6655}
    6756
    68 static Node* traverseLastChild(const Node* node, ShadowRootCrossing shadowRootCrossing)
     57static Node* traverseLastChild(const Node* node)
    6958{
    7059    ASSERT(node);
    71     if (node->shadowRoot()) {
    72         if (shadowRootCrossing == DontCrossShadowRoot)
    73             return nullptr;
    74         node = node->shadowRoot();
    75     }
     60    if (node->shadowRoot())
     61        return nullptr;
    7662    return node->lastChild();
    7763}
     
    8975}
    9076
    91 ContainerNode* parentSlow(const Node* node)
    92 {
    93     ASSERT(!node->isShadowRoot());
    94 
    95     return traverseParent(node, CrossShadowRoot);
    96 }
    97 
    9877Node* nextInScope(const Node* node)
    9978{
    100     if (Node* next = traverseFirstChild(node, DontCrossShadowRoot))
     79    if (Node* next = traverseFirstChild(node))
    10180        return next;
    10281    if (Node* next = traverseNextSibling(node))
     
    10483    const Node* current = node;
    10584    while (current && !traverseNextSibling(current))
    106         current = traverseParent(current, DontCrossShadowRoot);
     85        current = traverseParent(current);
    10786    return current ? traverseNextSibling(current) : 0;
    10887}
     
    11190{
    11291    if (Node* current = traversePreviousSibling(node)) {
    113         while (Node* child = traverseLastChild(current, DontCrossShadowRoot))
     92        while (Node* child = traverseLastChild(current))
    11493            current = child;
    11594        return current;
    11695    }
    117     return traverseParent(node, DontCrossShadowRoot);
     96    return traverseParent(node);
    11897}
    11998
    12099Node* parentInScope(const Node* node)
    121100{
    122     return traverseParent(node, DontCrossShadowRoot);
     101    return traverseParent(node);
    123102}
    124103
    125104Node* lastChildInScope(const Node* node)
    126105{
    127     return traverseLastChild(node, DontCrossShadowRoot);
     106    return traverseLastChild(node);
    128107}
    129108
  • trunk/Source/WebCore/dom/NodeRenderingTraversal.h

    r190983 r191112  
    3535namespace NodeRenderingTraversal {
    3636
    37 ContainerNode* parent(const Node*);
    38 
    3937Node* nextInScope(const Node*);
    4038Node* previousInScope(const Node*);
    4139Node* parentInScope(const Node*);
    4240Node* lastChildInScope(const Node*);
    43 
    44 ContainerNode* parentSlow(const Node*);
    45 
    46 inline ContainerNode* parent(const Node* node)
    47 {
    48     ASSERT(!node->isPseudoElement());
    49     if (node->needsNodeRenderingTraversalSlowPath())
    50         return parentSlow(node);
    51 
    52     ASSERT(node->parentNode() == parentSlow(node));
    53     return node->parentNodeGuaranteedHostFree();
    54 }
    5541
    5642}
  • trunk/Source/WebCore/html/HTMLSummaryElement.cpp

    r190840 r191112  
    2929#include "KeyboardEvent.h"
    3030#include "MouseEvent.h"
    31 #include "NodeRenderingTraversal.h"
    3231#include "PlatformMouseEvent.h"
    3332#include "RenderBlockFlow.h"
  • trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp

    r189182 r191112  
    2727#include "RenderNamedFlowThread.h"
    2828
     29#include "ComposedTreeAncestorIterator.h"
    2930#include "ExceptionCodePlaceholder.h"
    3031#include "FlowThreadController.h"
    3132#include "InlineTextBox.h"
    3233#include "InspectorInstrumentation.h"
    33 #include "NodeRenderingTraversal.h"
    3434#include "NodeTraversal.h"
    3535#include "Position.h"
     
    548548    ASSERT(is<Element>(*child.node()));
    549549
    550     Node* originalParent = NodeRenderingTraversal::parent(child.node());
     550    auto* originalParent = composedTreeAncestors(*child.node()).first();
    551551    if (!is<Element>(originalParent) || !originalParent->renderer())
    552552        return true;
  • trunk/Source/WebCore/style/RenderTreePosition.cpp

    r190983 r191112  
    2828
    2929#include "ComposedTreeIterator.h"
    30 #include "NodeRenderingTraversal.h"
    3130#include "PseudoElement.h"
    3231#include "RenderObject.h"
  • trunk/Source/WebCore/style/StyleResolveTree.cpp

    r190983 r191112  
    3131#include "AuthorStyleSheets.h"
    3232#include "CSSFontSelector.h"
     33#include "ComposedTreeAncestorIterator.h"
    3334#include "ComposedTreeIterator.h"
    3435#include "ElementIterator.h"
     
    4041#include "MainFrame.h"
    4142#include "NodeRenderStyle.h"
    42 #include "NodeRenderingTraversal.h"
    4343#include "NodeTraversal.h"
    4444#include "PlatformStrategies.h"
     
    328328void updateTextRendererAfterContentChange(Text& textNode, unsigned offsetOfReplacedData, unsigned lengthOfReplacedData)
    329329{
    330     ContainerNode* renderingParentNode = NodeRenderingTraversal::parent(&textNode);
     330    auto* renderingParentNode = composedTreeAncestors(textNode).first();
    331331    if (!renderingParentNode || !renderingParentNode->renderer())
    332332        return;
Note: See TracChangeset for help on using the changeset viewer.