void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, RuleFeatureSet::FeatureMetadata& metadata) { unsigned maxDirectAdjacentSelectors = 0; for (const CSSSelector* current = &selector; current; current = current->tagHistory()) { if (current->pseudoType() == CSSSelector::PseudoFirstLine) metadata.usesFirstLineRules = true; if (current->pseudoType() == CSSSelector::PseudoWindowInactive) metadata.usesWindowInactiveSelector = true; if (current->relation() == CSSSelector::DirectAdjacent) { maxDirectAdjacentSelectors++; } else if (maxDirectAdjacentSelectors && ((current->relation() != CSSSelector::SubSelector) || current->isLastInTagHistory())) { if (maxDirectAdjacentSelectors > metadata.maxDirectAdjacentSelectors) metadata.maxDirectAdjacentSelectors = maxDirectAdjacentSelectors; maxDirectAdjacentSelectors = 0; } if (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); } ASSERT(!maxDirectAdjacentSelectors); }
void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* selectorList, RuleFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode) { if (!selectorList) return; for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(*selector)) collectFeaturesFromSelector(*selector, metadata, mode); }
void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* selectorList, RuleFeatureSet::FeatureMetadata& metadata, SelectorFeatureCollectionMode collectionMode) { 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, metadata, collectionMode); } }
void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* selectorList) { 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); } }
void RuleFeatureSet::collectFeaturesFromRuleData(const RuleData& ruleData) { updateInvalidationSets(ruleData); FeatureMetadata metadata; collectFeaturesFromSelector(ruleData.selector(), metadata); m_metadata.add(metadata); if (metadata.foundSiblingSelector) siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin())); if (ruleData.containsUncommonAttributeSelector()) uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin())); }
void RuleFeatureSet::collectFeaturesFromRuleData(const RuleData& ruleData) { FeatureMetadata metadata; InvalidationSetMode mode = UseSubtreeStyleChange; if (m_targetedStyleRecalcEnabled) mode = updateInvalidationSets(ruleData.selector()); collectFeaturesFromSelector(ruleData.selector(), metadata, mode); m_metadata.add(metadata); if (metadata.foundSiblingSelector) siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin())); if (ruleData.containsUncommonAttributeSelector()) uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin())); }
void RuleFeatureSet::collectFeaturesFromRuleData(const RuleData& ruleData) { FeatureMetadata metadata; bool selectorUsesClassInvalidationSet = false; if (m_targetedStyleRecalcEnabled) selectorUsesClassInvalidationSet = updateClassInvalidationSets(ruleData.selector()); SelectorFeatureCollectionMode collectionMode; if (selectorUsesClassInvalidationSet) collectionMode = DontProcessClasses; else collectionMode = ProcessClasses; collectFeaturesFromSelector(ruleData.selector(), metadata, collectionMode); m_metadata.add(metadata); if (metadata.foundSiblingSelector) siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin())); if (ruleData.containsUncommonAttributeSelector()) uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex(), ruleData.hasDocumentSecurityOrigin())); }
void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector) { collectFeaturesFromSelector(selector, m_metadata, ProcessClasses); }
void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector) { collectFeaturesFromSelector(selector, m_metadata, UseSubtreeStyleChange); }