Node* ComposedTreeWalker::traverseChild(const Node* node, TraversalDirection direction) const { ASSERT(node); ElementShadow* shadow = shadowFor(node); return shadow ? traverseLightChildren(shadow->youngestShadowRoot(), direction) : traverseLightChildren(node, direction); }
Node* FlatTreeTraversal::traverseChild(const Node& node, TraversalDirection direction) { ElementShadow* shadow = shadowFor(node); if (shadow) { ShadowRoot& shadowRoot = shadow->youngestShadowRoot(); return resolveDistributionStartingAt(direction == TraversalDirectionForward ? shadowRoot.firstChild() : shadowRoot.lastChild(), direction); } return resolveDistributionStartingAt(direction == TraversalDirectionForward ? node.firstChild() : node.lastChild(), direction); }
Node* ComposedShadowTreeWalker::traverseChild(const Node* node, TraversalDirection direction) const { ASSERT(node); if (canCrossUpperBoundary()) { ElementShadow* shadow = shadowFor(node); return shadow ? traverseLightChildren(shadow->youngestShadowRoot(), direction) : traverseLightChildren(node, direction); } if (isShadowHost(node)) return 0; return traverseLightChildren(node, direction); }
static inline ElementShadow* shadowOfParent(const Node* node) { if (node && node->parentNode()) return shadowFor(node->parentNode()); return 0; }