void RuleSet::addRule(StyleRule* rule, unsigned selectorIndex, AddRuleFlags addRuleFlags) { RuleData ruleData(rule, selectorIndex, m_ruleCount++, addRuleFlags); collectFeaturesFromRuleData(m_features, ruleData); CSSSelector* selector = ruleData.selector(); if (selector->m_match == CSSSelector::Id) { addToRuleSet(selector->value().impl(), m_idRules, ruleData); return; } if (selector->m_match == CSSSelector::Class) { addToRuleSet(selector->value().impl(), m_classRules, ruleData); return; } if (selector->isCustomPseudoElement()) { addToRuleSet(selector->value().impl(), m_shadowPseudoElementRules, ruleData); return; } #if ENABLE(VIDEO_TRACK) if (selector->pseudoType() == CSSSelector::PseudoCue) { m_cuePseudoRules.append(ruleData); return; } #endif if (SelectorChecker::isCommonPseudoClassSelector(selector)) { switch (selector->pseudoType()) { case CSSSelector::PseudoLink: case CSSSelector::PseudoVisited: case CSSSelector::PseudoAnyLink: m_linkPseudoClassRules.append(ruleData); return; case CSSSelector::PseudoFocus: m_focusPseudoClassRules.append(ruleData); return; default: ASSERT_NOT_REACHED(); } return; } const AtomicString& localName = selector->tag().localName(); if (localName != starAtom) { addToRuleSet(localName.impl(), m_tagRules, ruleData); return; } m_universalRules.append(ruleData); }
void RuleSet::addRule(StyleRule* rule, unsigned selectorIndex, AddRuleFlags addRuleFlags) { RuleData ruleData(rule, selectorIndex, m_ruleCount++, addRuleFlags); static const unsigned athostRuleSpecificity = 0x100000; if (addRuleFlags & RuleIsHostRule) ruleData.increaseSpecificity(athostRuleSpecificity); collectFeaturesFromRuleData(m_features, ruleData); CSSSelector* selector = ruleData.selector(); if (selector->m_match == CSSSelector::Id) { addToRuleSet(selector->value().impl(), m_idRules, ruleData); return; } if (selector->m_match == CSSSelector::Class) { addToRuleSet(selector->value().impl(), m_classRules, ruleData); return; } if (selector->isUnknownPseudoElement()) { addToRuleSet(selector->value().impl(), m_shadowPseudoElementRules, ruleData); return; } if (SelectorChecker::isCommonPseudoClassSelector(selector)) { switch (selector->pseudoType()) { case CSSSelector::PseudoLink: case CSSSelector::PseudoVisited: case CSSSelector::PseudoAnyLink: m_linkPseudoClassRules.append(ruleData); return; case CSSSelector::PseudoFocus: m_focusPseudoClassRules.append(ruleData); return; default: ASSERT_NOT_REACHED(); } return; } const AtomicString& localName = selector->tag().localName(); if (localName != starAtom) { addToRuleSet(localName.impl(), m_tagRules, ruleData); return; } m_universalRules.append(ruleData); }