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

Unified Diff: third_party/WebKit/Source/core/dom/SelectorQuery.cpp

Issue 2782483004: Simplify some shadow crossing logic in SelectorQuery.cpp (Closed)
Patch Set: Created 3 years, 9 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/dom/SelectorQuery.cpp
diff --git a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
index 491660ce42756269e7ee9eb4630669f89f858713..340a9aaa20ae0b0aa716cdc071259cdb2e20dcd3 100644
--- a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
+++ b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
@@ -394,27 +394,20 @@ void SelectorQuery::executeSlow(
// firstWithinTraversingShadowTree, nextTraversingShadowTree to the best place,
// e.g. NodeTraversal.
static ShadowRoot* authorShadowRootOf(const ContainerNode& node) {
- if (!node.isElementNode() || !isShadowHost(&node))
+ if (!node.isElementNode())
return nullptr;
-
ElementShadow* shadow = toElement(node).shadow();
- DCHECK(shadow);
+ if (!shadow)
+ return nullptr;
+
for (ShadowRoot* shadowRoot = &shadow->oldestShadowRoot(); shadowRoot;
shadowRoot = shadowRoot->youngerShadowRoot()) {
- if (shadowRoot->type() == ShadowRootType::V0 ||
- shadowRoot->type() == ShadowRootType::Open)
+ if (shadowRoot->isOpenOrV0())
return shadowRoot;
}
return nullptr;
}
-static ContainerNode* firstWithinTraversingShadowTree(
- const ContainerNode& rootNode) {
- if (ShadowRoot* shadowRoot = authorShadowRootOf(rootNode))
- return shadowRoot;
- return ElementTraversal::firstWithin(rootNode);
-}
-
static ContainerNode* nextTraversingShadowTree(const ContainerNode& node,
const ContainerNode* rootNode) {
if (ShadowRoot* shadowRoot = authorShadowRootOf(node))
@@ -432,9 +425,7 @@ static ContainerNode* nextTraversingShadowTree(const ContainerNode& node,
if (shadowRoot == rootNode)
return nullptr;
if (ShadowRoot* youngerShadowRoot = shadowRoot->youngerShadowRoot()) {
- // Should not obtain any elements in closed or user-agent shadow root.
- DCHECK(youngerShadowRoot->type() == ShadowRootType::V0 ||
- youngerShadowRoot->type() == ShadowRootType::Open);
+ DCHECK(youngerShadowRoot->isOpenOrV0());
return youngerShadowRoot;
}
@@ -447,8 +438,8 @@ template <typename SelectorQueryTrait>
void SelectorQuery::executeSlowTraversingShadowTree(
ContainerNode& rootNode,
typename SelectorQueryTrait::OutputType& output) const {
- for (ContainerNode* node = firstWithinTraversingShadowTree(rootNode); node;
- node = nextTraversingShadowTree(*node, &rootNode)) {
+ for (ContainerNode* node = nextTraversingShadowTree(rootNode, &rootNode);
+ node; node = nextTraversingShadowTree(*node, &rootNode)) {
if (!node->isElementNode())
continue;
Element* element = toElement(node);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698