InvalidationSet* RuleFeatureSet::invalidationSetForSelector(const CSSSelector& selector) { if (selector.match() == CSSSelector::Class) return &ensureClassInvalidationSet(selector.value()); if (selector.isAttributeSelector()) return &ensureAttributeInvalidationSet(selector.attribute().localName()); if (selector.match() == CSSSelector::Id) return &ensureIdInvalidationSet(selector.value()); if (selector.match() == CSSSelector::PseudoClass) { switch (selector.pseudoType()) { case CSSSelector::PseudoEmpty: case CSSSelector::PseudoLink: case CSSSelector::PseudoVisited: case CSSSelector::PseudoAnyLink: case CSSSelector::PseudoAutofill: case CSSSelector::PseudoHover: case CSSSelector::PseudoFocus: case CSSSelector::PseudoActive: case CSSSelector::PseudoChecked: case CSSSelector::PseudoEnabled: case CSSSelector::PseudoDisabled: case CSSSelector::PseudoOptional: case CSSSelector::PseudoPlaceholderShown: case CSSSelector::PseudoRequired: case CSSSelector::PseudoValid: case CSSSelector::PseudoInvalid: case CSSSelector::PseudoIndeterminate: case CSSSelector::PseudoTarget: return &ensurePseudoInvalidationSet(selector.pseudoType()); default: break; } } return nullptr; }
DescendantInvalidationSet* RuleFeatureSet::invalidationSetForSelector(const CSSSelector& selector) { if (selector.m_match == CSSSelector::Class) return &ensureClassInvalidationSet(selector.value()); if (selector.isAttributeSelector()) return &ensureAttributeInvalidationSet(selector.attribute().localName()); if (selector.m_match == CSSSelector::Id) return &ensureIdInvalidationSet(selector.value()); if (selector.m_match == CSSSelector::PseudoClass) { CSSSelector::PseudoType pseudo = selector.pseudoType(); if (pseudo == CSSSelector::PseudoHover || pseudo == CSSSelector::PseudoActive || pseudo == CSSSelector::PseudoFocus) return &ensurePseudoInvalidationSet(pseudo); } return 0; }
void RuleFeatureSet::add(const RuleFeatureSet& other) { for (const auto& invalidationSet : other.m_classInvalidationSets) ensureClassInvalidationSet(invalidationSet.key).combine(*invalidationSet.value); for (const auto& invalidationSet : other.m_attributeInvalidationSets) ensureAttributeInvalidationSet(invalidationSet.key).combine(*invalidationSet.value); for (const auto& invalidationSet : other.m_idInvalidationSets) ensureIdInvalidationSet(invalidationSet.key).combine(*invalidationSet.value); for (const auto& invalidationSet : other.m_pseudoInvalidationSets) ensurePseudoInvalidationSet(static_cast<CSSSelector::PseudoType>(invalidationSet.key)).combine(*invalidationSet.value); m_metadata.add(other.m_metadata); siblingRules.appendVector(other.siblingRules); uncommonAttributeRules.appendVector(other.uncommonAttributeRules); }
void RuleFeatureSet::add(const RuleFeatureSet& other) { for (InvalidationSetMap::const_iterator it = other.m_classInvalidationSets.begin(); it != other.m_classInvalidationSets.end(); ++it) ensureClassInvalidationSet(it->key).combine(*it->value); for (InvalidationSetMap::const_iterator it = other.m_attributeInvalidationSets.begin(); it != other.m_attributeInvalidationSets.end(); ++it) ensureAttributeInvalidationSet(it->key).combine(*it->value); for (InvalidationSetMap::const_iterator it = other.m_idInvalidationSets.begin(); it != other.m_idInvalidationSets.end(); ++it) ensureIdInvalidationSet(it->key).combine(*it->value); for (PseudoTypeInvalidationSetMap::const_iterator it = other.m_pseudoInvalidationSets.begin(); it != other.m_pseudoInvalidationSets.end(); ++it) ensurePseudoInvalidationSet(static_cast<CSSSelector::PseudoType>(it->key)).combine(*it->value); m_metadata.add(other.m_metadata); siblingRules.appendVector(other.siblingRules); uncommonAttributeRules.appendVector(other.uncommonAttributeRules); }
InvalidationSet* RuleFeatureSet::invalidationSetForSelector(const CSSSelector& selector, InvalidationType type) { if (selector.match() == CSSSelector::Class) return &ensureClassInvalidationSet(selector.value(), type); if (selector.isAttributeSelector()) return &ensureAttributeInvalidationSet(selector.attribute().localName(), type); if (selector.match() == CSSSelector::Id) return &ensureIdInvalidationSet(selector.value(), type); if (selector.match() == CSSSelector::PseudoClass) { switch (selector.pseudoType()) { case CSSSelector::PseudoEmpty: case CSSSelector::PseudoLink: case CSSSelector::PseudoVisited: case CSSSelector::PseudoAnyLink: case CSSSelector::PseudoAutofill: case CSSSelector::PseudoHover: case CSSSelector::PseudoDrag: case CSSSelector::PseudoFocus: case CSSSelector::PseudoActive: case CSSSelector::PseudoChecked: case CSSSelector::PseudoEnabled: // TODO([email protected]): crbug.com/557683 :default is currently not updated dynamically. // case CSSSelector::Default: case CSSSelector::PseudoDisabled: case CSSSelector::PseudoOptional: case CSSSelector::PseudoPlaceholderShown: case CSSSelector::PseudoRequired: case CSSSelector::PseudoReadOnly: case CSSSelector::PseudoReadWrite: case CSSSelector::PseudoValid: case CSSSelector::PseudoInvalid: case CSSSelector::PseudoIndeterminate: case CSSSelector::PseudoTarget: case CSSSelector::PseudoLang: case CSSSelector::PseudoInRange: case CSSSelector::PseudoOutOfRange: case CSSSelector::PseudoUnresolved: return &ensurePseudoInvalidationSet(selector.pseudoType(), type); default: break; } } return nullptr; }