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..ac733e76dd62f969c43d9ace284bfba432c4bc2a 100644 |
--- a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp |
+++ b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp |
@@ -278,20 +278,26 @@ void SelectorQuery::findTraverseRootsAndExecute( |
if (isRightmostSelector) { |
ClassElementList<AllElements> traverseRoots(rootNode, |
selector->value()); |
- executeForTraverseRoots<SelectorQueryTrait>( |
- traverseRoots, MatchesTraverseRoots, rootNode, output); |
+ while (!traverseRoots.isEmpty()) { |
+ Element& element = *traverseRoots.next(); |
+ if (selectorMatches(*m_selectors[0], element, rootNode)) |
+ SelectorQueryTrait::appendElement(output, element); |
+ } |
return; |
} |
// Since there exists some ancestor element which has the class name, we |
// need to see all children of rootNode. |
- if (ancestorHasClassName(rootNode, selector->value())) { |
- executeForTraverseRoot<SelectorQueryTrait>(&rootNode, rootNode, output); |
- return; |
- } |
+ if (ancestorHasClassName(rootNode, selector->value())) |
+ break; |
esprehn
2017/03/29 05:00:43
This was just executing the code below if we had n
|
ClassElementList<OnlyRoots> traverseRoots(rootNode, selector->value()); |
- executeForTraverseRoots<SelectorQueryTrait>( |
- traverseRoots, DoesNotMatchTraverseRoots, rootNode, output); |
+ while (!traverseRoots.isEmpty()) { |
+ for (Element& element : |
+ ElementTraversal::descendantsOf(*traverseRoots.next())) { |
+ if (selectorMatches(*m_selectors[0], element, rootNode)) |
+ SelectorQueryTrait::appendElement(output, element); |
+ } |
+ } |
return; |
} |
@@ -328,43 +334,6 @@ void SelectorQuery::executeForTraverseRoot( |
} |
} |
-template <typename SelectorQueryTrait, typename SimpleElementListType> |
-void SelectorQuery::executeForTraverseRoots( |
- SimpleElementListType& traverseRoots, |
- MatchTraverseRootState matchTraverseRoots, |
- ContainerNode& rootNode, |
- typename SelectorQueryTrait::OutputType& output) const { |
- DCHECK_EQ(m_selectors.size(), 1u); |
- |
- if (traverseRoots.isEmpty()) |
- return; |
- |
- const CSSSelector& selector = *m_selectors[0]; |
- |
- if (matchTraverseRoots) { |
- while (!traverseRoots.isEmpty()) { |
- Element& element = *traverseRoots.next(); |
- if (selectorMatches(selector, element, rootNode)) { |
- SelectorQueryTrait::appendElement(output, element); |
- if (SelectorQueryTrait::shouldOnlyMatchFirstElement) |
- return; |
- } |
- } |
- return; |
- } |
- |
- while (!traverseRoots.isEmpty()) { |
- for (Element& element : |
- ElementTraversal::descendantsOf(*traverseRoots.next())) { |
- if (selectorMatches(selector, element, rootNode)) { |
- SelectorQueryTrait::appendElement(output, element); |
- if (SelectorQueryTrait::shouldOnlyMatchFirstElement) |
- return; |
- } |
- } |
- } |
-} |
- |
template <typename SelectorQueryTrait> |
bool SelectorQuery::selectorListMatches( |
ContainerNode& rootNode, |