| Index: Source/core/css/RuleSet.cpp
|
| diff --git a/Source/core/css/RuleSet.cpp b/Source/core/css/RuleSet.cpp
|
| index 3509682031c0404611d0c8beebed29a99da5f896..120c45185a4a1569fecff7d77e96a2478b06608f 100644
|
| --- a/Source/core/css/RuleSet.cpp
|
| +++ b/Source/core/css/RuleSet.cpp
|
| @@ -224,6 +224,7 @@ RuleData::RuleData(StyleRule* rule, unsigned selectorIndex, unsigned position, A
|
| static void collectFeaturesFromRuleData(RuleFeatureSet& features, const RuleData& ruleData)
|
| {
|
| bool foundSiblingSelector = false;
|
| + bool foundDescendantSelector = false;
|
| for (const CSSSelector* selector = ruleData.selector(); selector; selector = selector->tagHistory()) {
|
| features.collectFeaturesFromSelector(selector);
|
|
|
| @@ -233,11 +234,16 @@ static void collectFeaturesFromRuleData(RuleFeatureSet& features, const RuleData
|
| foundSiblingSelector = true;
|
| features.collectFeaturesFromSelector(subSelector);
|
| }
|
| - } else if (!foundSiblingSelector && selector->isSiblingSelector())
|
| + } else if (!foundSiblingSelector && selector->isSiblingSelector()) {
|
| foundSiblingSelector = true;
|
| + } else if (!foundDescendantSelector && selector->relation() == CSSSelector::Descendant) {
|
| + foundDescendantSelector = true;
|
| + }
|
| }
|
| if (foundSiblingSelector)
|
| features.siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin()));
|
| + if (foundDescendantSelector)
|
| + features.descendantRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin()));
|
| if (ruleData.containsUncommonAttributeSelector())
|
| features.uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin()));
|
| }
|
|
|