Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: sky/engine/core/dom/shadow/ComposedTreeWalker.cpp

Issue 759663003: Only allow one shadowRoot. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: ojan review. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright (C) 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 26 matching lines...) Expand all
37 { 37 {
38 if (node && node->isElementNode()) 38 if (node && node->isElementNode())
39 return toElement(node)->shadow(); 39 return toElement(node)->shadow();
40 return 0; 40 return 0;
41 } 41 }
42 42
43 Node* ComposedTreeWalker::traverseChild(const Node* node, TraversalDirection dir ection) const 43 Node* ComposedTreeWalker::traverseChild(const Node* node, TraversalDirection dir ection) const
44 { 44 {
45 ASSERT(node); 45 ASSERT(node);
46 ElementShadow* shadow = shadowFor(node); 46 ElementShadow* shadow = shadowFor(node);
47 return shadow ? traverseLightChildren(shadow->youngestShadowRoot(), directio n) 47 return shadow ? traverseLightChildren(shadow->shadowRoot(), direction)
48 : traverseLightChildren(node, direction); 48 : traverseLightChildren(node, direction);
49 } 49 }
50 50
51 Node* ComposedTreeWalker::traverseLightChildren(const Node* node, TraversalDirec tion direction) 51 Node* ComposedTreeWalker::traverseLightChildren(const Node* node, TraversalDirec tion direction)
52 { 52 {
53 ASSERT(node); 53 ASSERT(node);
54 return traverseSiblings(direction == TraversalDirectionForward ? node->first Child() : node->lastChild(), direction); 54 return traverseSiblings(direction == TraversalDirectionForward ? node->first Child() : node->lastChild(), direction);
55 } 55 }
56 56
57 Node* ComposedTreeWalker::traverseSiblings(const Node* node, TraversalDirection direction) 57 Node* ComposedTreeWalker::traverseSiblings(const Node* node, TraversalDirection direction)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 if (Node* found = traverseDistributedNodes(direction == TraversalDirectionFo rward ? insertionPoint->nextTo(node) : insertionPoint->previousTo(node), inserti onPoint, direction)) 98 if (Node* found = traverseDistributedNodes(direction == TraversalDirectionFo rward ? insertionPoint->nextTo(node) : insertionPoint->previousTo(node), inserti onPoint, direction))
99 return found; 99 return found;
100 return traverseSiblingOrBackToInsertionPoint(insertionPoint, direction); 100 return traverseSiblingOrBackToInsertionPoint(insertionPoint, direction);
101 } 101 }
102 102
103 Node* ComposedTreeWalker::traverseSiblingInCurrentTree(const Node* node, Travers alDirection direction) 103 Node* ComposedTreeWalker::traverseSiblingInCurrentTree(const Node* node, Travers alDirection direction)
104 { 104 {
105 ASSERT(node); 105 ASSERT(node);
106 if (Node* found = traverseSiblings(direction == TraversalDirectionForward ? node->nextSibling() : node->previousSibling(), direction)) 106 if (Node* found = traverseSiblings(direction == TraversalDirectionForward ? node->nextSibling() : node->previousSibling(), direction))
107 return found; 107 return found;
108 if (Node* next = traverseBackToYoungerShadowRoot(node, direction))
109 return next;
110 return 0; 108 return 0;
111 } 109 }
112 110
113 Node* ComposedTreeWalker::traverseBackToYoungerShadowRoot(const Node* node, Trav ersalDirection direction)
114 {
115 // FIXME(sky): Remove this.
116 return 0;
117 }
118
119 // FIXME: Use an iterative algorithm so that it can be inlined. 111 // FIXME: Use an iterative algorithm so that it can be inlined.
120 // https://bugs.webkit.org/show_bug.cgi?id=90415 112 // https://bugs.webkit.org/show_bug.cgi?id=90415
121 Node* ComposedTreeWalker::traverseParent(const Node* node, ParentTraversalDetail s* details) const 113 Node* ComposedTreeWalker::traverseParent(const Node* node, ParentTraversalDetail s* details) const
122 { 114 {
123 if (shadowWhereNodeCanBeDistributed(*node)) { 115 if (shadowWhereNodeCanBeDistributed(*node)) {
124 if (const InsertionPoint* insertionPoint = resolveReprojection(node)) { 116 if (const InsertionPoint* insertionPoint = resolveReprojection(node)) {
125 if (details) 117 if (details)
126 details->didTraverseInsertionPoint(insertionPoint); 118 details->didTraverseInsertionPoint(insertionPoint);
127 // The node is distributed. But the distribution was stopped at this insertion point. 119 // The node is distributed. But the distribution was stopped at this insertion point.
128 if (shadowWhereNodeCanBeDistributed(*insertionPoint)) 120 if (shadowWhereNodeCanBeDistributed(*insertionPoint))
129 return 0; 121 return 0;
130 return traverseParentOrHost(insertionPoint); 122 return traverseParentOrHost(insertionPoint);
131 } 123 }
132 return 0; 124 return 0;
133 } 125 }
134 return traverseParentOrHost(node); 126 return traverseParentOrHost(node);
135 } 127 }
136 128
137 inline Node* ComposedTreeWalker::traverseParentOrHost(const Node* node) const 129 inline Node* ComposedTreeWalker::traverseParentOrHost(const Node* node) const
138 { 130 {
139 Node* parent = node->parentNode(); 131 Node* parent = node->parentNode();
140 if (!parent) 132 if (!parent)
141 return 0; 133 return 0;
142 if (!parent->isShadowRoot()) 134 if (!parent->isShadowRoot())
143 return parent; 135 return parent;
144 ShadowRoot* shadowRoot = toShadowRoot(parent); 136 ShadowRoot* shadowRoot = toShadowRoot(parent);
145 if (!shadowRoot->isYoungest())
146 return 0;
147 return shadowRoot->host(); 137 return shadowRoot->host();
148 } 138 }
149 139
150 } // namespace 140 } // namespace
OLDNEW
« no previous file with comments | « sky/engine/core/dom/shadow/ComposedTreeWalker.h ('k') | sky/engine/core/dom/shadow/ElementShadow.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698