| 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
|
|
|