Index: Source/core/css/RuleFeature.cpp |
diff --git a/Source/core/css/RuleFeature.cpp b/Source/core/css/RuleFeature.cpp |
index 7c8f160ae43f4d7445289aeda1ee292c72301f55..9ef1f2f50c2a245db33575b9d81df539330383c7 100644 |
--- a/Source/core/css/RuleFeature.cpp |
+++ b/Source/core/css/RuleFeature.cpp |
@@ -35,13 +35,15 @@ |
namespace WebCore { |
-void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector) |
+void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector, HashSet<AtomicString>* classesInRulesArg) |
{ |
if (selector->m_match == CSSSelector::Id) |
idsInRules.add(selector->value()); |
- else if (selector->m_match == CSSSelector::Class) |
+ else if (selector->m_match == CSSSelector::Class) { |
classesInRules.add(selector->value()); |
- else if (selector->isAttributeSelector()) |
+ if (classesInRulesArg) |
+ classesInRulesArg->add(selector->value()); |
+ } else if (selector->isAttributeSelector()) |
attrsInRules.add(selector->attribute().localName()); |
switch (selector->pseudoType()) { |
case CSSSelector::PseudoFirstLine: |
@@ -49,26 +51,29 @@ void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector* selector) |
break; |
break; |
case CSSSelector::PseudoHost: |
- collectFeaturesFromSelectorList(selector->selectorList()); |
+ collectFeaturesFromSelectorList(selector->selectorList(), classesInRulesArg); |
break; |
default: |
break; |
} |
} |
-void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* selectorList) |
+void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* selectorList, HashSet<AtomicString>* classesInRulesArg) |
{ |
if (!selectorList) |
return; |
for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(selector)) { |
for (const CSSSelector* subSelector = selector; subSelector; subSelector = subSelector->tagHistory()) |
- collectFeaturesFromSelector(subSelector); |
+ collectFeaturesFromSelector(subSelector, classesInRulesArg); |
} |
} |
void RuleFeatureSet::add(const RuleFeatureSet& other) |
{ |
+ if (RuleSetAnalyzer* otherAnalyzer = other.getRuleSetAnalyzer()) |
+ ensureRuleSetAnalyzer()->combine(*otherAnalyzer); |
+ |
HashSet<AtomicString>::const_iterator end = other.idsInRules.end(); |
for (HashSet<AtomicString>::const_iterator it = other.idsInRules.begin(); it != end; ++it) |
idsInRules.add(*it); |
@@ -95,4 +100,16 @@ void RuleFeatureSet::clear() |
m_maxDirectAdjacentSelectors = 0; |
} |
+RuleSetAnalyzer* RuleFeatureSet::getRuleSetAnalyzer() const |
+{ |
+ return ruleSetAnalyzer.get(); |
+} |
+ |
+RuleSetAnalyzer* RuleFeatureSet::ensureRuleSetAnalyzer() |
+{ |
+ if (!ruleSetAnalyzer) |
+ ruleSetAnalyzer = RuleSetAnalyzer::create(); |
+ return ruleSetAnalyzer.get(); |
+} |
+ |
} // namespace WebCore |