Index: third_party/WebKit/Source/core/css/RuleFeature.cpp |
diff --git a/third_party/WebKit/Source/core/css/RuleFeature.cpp b/third_party/WebKit/Source/core/css/RuleFeature.cpp |
index d732d585ab686d0a1b43c810e621cc032beb9b41..f2da0c24a98cc945a68241005d9a75e13241b254 100644 |
--- a/third_party/WebKit/Source/core/css/RuleFeature.cpp |
+++ b/third_party/WebKit/Source/core/css/RuleFeature.cpp |
@@ -587,15 +587,15 @@ void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, Ru |
metadata.maxDirectAdjacentSelectors = maxDirectAdjacentSelectors; |
maxDirectAdjacentSelectors = 0; |
} |
- if (current->isSiblingSelector()) |
+ if (!metadata.foundInsertionPointCrossing && current->isSiblingSelector()) |
metadata.foundSiblingSelector = true; |
- const CSSSelectorList* selectorList = current->selectorList(); |
- if (!selectorList) |
- continue; |
- |
- for (const CSSSelector* subSelector = selectorList->first(); subSelector; subSelector = CSSSelectorList::next(*subSelector)) |
- collectFeaturesFromSelector(*subSelector, metadata); |
+ if (const CSSSelectorList* selectorList = current->selectorList()) { |
+ for (const CSSSelector* subSelector = selectorList->first(); subSelector; subSelector = CSSSelectorList::next(*subSelector)) |
+ collectFeaturesFromSelector(*subSelector, metadata); |
+ } |
+ if (current->relationIsAffectedByPseudoContent()) |
+ metadata.foundInsertionPointCrossing = true; |
} |
ASSERT(!maxDirectAdjacentSelectors); |
@@ -613,6 +613,7 @@ void RuleFeatureSet::FeatureMetadata::clear() |
usesFirstLineRules = false; |
usesWindowInactiveSelector = false; |
foundSiblingSelector = false; |
+ foundInsertionPointCrossing = false; |
maxDirectAdjacentSelectors = 0; |
} |