summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/dom/ComposedShadowTreeWalker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/ComposedShadowTreeWalker.cpp')
-rw-r--r--Source/WebCore/dom/ComposedShadowTreeWalker.cpp58
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