Index: Source/core/css/SelectorChecker.cpp |
diff --git a/Source/core/css/SelectorChecker.cpp b/Source/core/css/SelectorChecker.cpp |
index 768de63972ce3c8e4be511c17f62fa86a73e7a0c..4e2032fe73a535532bb1e41514ae39fce6465d46 100644 |
--- a/Source/core/css/SelectorChecker.cpp |
+++ b/Source/core/css/SelectorChecker.cpp |
@@ -212,28 +212,35 @@ SelectorChecker::Match SelectorChecker::match(const SelectorCheckingContext& con |
nextContext.elementStyle = 0; |
return match(nextContext, ignoreDynamicPseudo, siblingTraversalStrategy); |
} |
- case CSSSelector::ShadowDistributed: |
- { |
- Vector<InsertionPoint*, 8> insertionPoints; |
- for (Element* element = context.element; element; element = element->parentElement()) { |
- insertionPoints.clear(); |
- collectInsertionPointsWhereNodeIsDistributed(element, insertionPoints); |
- for (size_t i = 0; i < insertionPoints.size(); ++i) { |
- nextContext.element = insertionPoints[i]; |
- nextContext.isSubSelector = false; |
- nextContext.elementStyle = 0; |
- if (match(nextContext, ignoreDynamicPseudo, siblingTraversalStrategy) == SelectorMatches) |
- return SelectorMatches; |
- } |
- } |
- return SelectorFailsCompletely; |
+ case CSSSelector::ShadowVirtualDescendant: |
+ for (Element* element = context.element; element; element = element->parentElement()) { |
+ if (matchForVirtualChild(element, siblingTraversalStrategy, ignoreDynamicPseudo, nextContext) == SelectorMatches) |
+ return SelectorMatches; |
} |
+ return SelectorFailsCompletely; |
+ case CSSSelector::ShadowVirtualChild: |
+ return matchForVirtualChild(context.element, siblingTraversalStrategy, ignoreDynamicPseudo, nextContext); |
} |
ASSERT_NOT_REACHED(); |
return SelectorFailsCompletely; |
} |
+template<typename SiblingTraversalStrategy> |
+SelectorChecker::Match SelectorChecker::matchForVirtualChild(const Element* element, const SiblingTraversalStrategy& siblingTraversalStrategy, PseudoId& dynamicPseudo, SelectorCheckingContext& nextContext) const |
dglazkov
2013/05/22 17:43:43
This is interesting. Right now, it's clear that "v
|
+{ |
+ Vector<InsertionPoint*, 8> insertionPoints; |
+ collectInsertionPointsWhereNodeIsDistributed(element, insertionPoints); |
+ for (size_t i = 0; i < insertionPoints.size(); ++i) { |
+ nextContext.element = insertionPoints[i]; |
+ nextContext.isSubSelector = false; |
+ nextContext.elementStyle = 0; |
+ if (match(nextContext, dynamicPseudo, siblingTraversalStrategy) == SelectorMatches) |
+ return SelectorMatches; |
+ } |
+ return SelectorFailsCompletely; |
+} |
+ |
static inline bool containsHTMLSpace(const AtomicString& string) |
{ |
for (unsigned i = 0; i < string.length(); i++) |