diff options
Diffstat (limited to 'Source/WebCore/dom/ComposedShadowTreeWalker.cpp')
-rw-r--r-- | Source/WebCore/dom/ComposedShadowTreeWalker.cpp | 58 |
1 files changed, 32 insertions, 26 deletions
diff --git a/Source/WebCore/dom/ComposedShadowTreeWalker.cpp b/Source/WebCore/dom/ComposedShadowTreeWalker.cpp index d9889ab98..eed853f52 100644 --- a/Source/WebCore/dom/ComposedShadowTreeWalker.cpp +++ b/Source/WebCore/dom/ComposedShadowTreeWalker.cpp @@ -52,8 +52,10 @@ ComposedShadowTreeWalker::ComposedShadowTreeWalker(const Node* node, Policy poli : m_node(node) , m_policy(policy) { - // FIXME: Refactor ComposedShadowTreeWalker so that we can assert node here. - // https://bugs.webkit.org/show_bug.cgi?id=87004 +#ifndef NDEBUG + if (m_node) + assertPrecondition(); +#endif } ComposedShadowTreeWalker ComposedShadowTreeWalker::fromFirstChild(const Node* node, Policy policy) @@ -198,28 +200,6 @@ void ComposedShadowTreeWalker::parent() assertPostcondition(); } -void ComposedShadowTreeWalker::parentIncludingInsertionPointAndShadowRoot() -{ - ASSERT(m_node); - m_node = traverseParentIncludingInsertionPointAndShadowRoot(m_node); -} - -Node* ComposedShadowTreeWalker::traverseParentIncludingInsertionPointAndShadowRoot(const Node* node) const -{ - if (ElementShadow* shadow = shadowOfParent(node)) { - if (InsertionPoint* insertionPoint = shadow->insertionPointFor(node)) - return insertionPoint; - } - if (!node->isShadowRoot()) - return node->parentNode(); - const ShadowRoot* shadowRoot = toShadowRoot(node); - if (shadowRoot->isYoungest()) - return shadowRoot->host(); - InsertionPoint* assignedInsertionPoint = shadowRoot->assignedTo(); - ASSERT(assignedInsertionPoint); - return assignedInsertionPoint; -} - Node* ComposedShadowTreeWalker::traverseParent(const Node* node) const { if (!canCrossUpperBoundary() && node->isShadowRoot()) { @@ -249,8 +229,7 @@ Node* ComposedShadowTreeWalker::traverseParentBackToYoungerShadowRootOrHost(cons return const_cast<ShadowRoot*>(shadowRoot); } InsertionPoint* assignedInsertionPoint = shadowRoot->assignedTo(); - ASSERT(assignedInsertionPoint); - return traverseParent(assignedInsertionPoint); + return assignedInsertionPoint ? traverseParent(assignedInsertionPoint) : 0; } Node* ComposedShadowTreeWalker::traverseNextSibling(const Node* node) @@ -293,4 +272,31 @@ void ComposedShadowTreeWalker::previous() assertPostcondition(); } +ComposedShadowTreeParentWalker::ComposedShadowTreeParentWalker(const Node* node) + : m_node(node) +{ +} + +void ComposedShadowTreeParentWalker::parentIncludingInsertionPointAndShadowRoot() +{ + ASSERT(m_node); + m_node = traverseParentIncludingInsertionPointAndShadowRoot(m_node); +} + +Node* ComposedShadowTreeParentWalker::traverseParentIncludingInsertionPointAndShadowRoot(const Node* node) const +{ + if (ElementShadow* shadow = shadowOfParent(node)) { + if (InsertionPoint* insertionPoint = shadow->insertionPointFor(node)) + return insertionPoint; + } + if (!node->isShadowRoot()) + return node->parentNode(); + const ShadowRoot* shadowRoot = toShadowRoot(node); + if (shadowRoot->isYoungest()) + return shadowRoot->host(); + InsertionPoint* assignedInsertionPoint = shadowRoot->assignedTo(); + ASSERT(assignedInsertionPoint); + return assignedInsertionPoint; +} + } // namespace |