bool operator()(const CSSSelector& selector) { if (selector.match() == CSSSelector::Tag && selector.tagQName().prefix() != nullAtom && selector.tagQName().prefix() != starAtom) return true; if (selector.isAttributeSelector() && selector.attribute().prefix() != nullAtom && selector.attribute().prefix() != starAtom) return true; return false; }
static inline bool selectorListContainsUncommonAttributeSelector(const CSSSelector* selector) { CSSSelectorList* selectorList = selector->selectorList(); if (!selectorList) return false; for (CSSSelector* subSelector = selectorList->first(); subSelector; subSelector = CSSSelectorList::next(subSelector)) { if (subSelector->isAttributeSelector()) return true; } return false; }
void RuleFeatureSet::extractInvalidationSetFeature(const CSSSelector& selector, InvalidationSetFeatures& features) { if (selector.m_match == CSSSelector::Tag) features.tagName = selector.tagQName().localName(); else if (selector.m_match == CSSSelector::Id) features.id = selector.value(); else if (selector.m_match == CSSSelector::Class) features.classes.append(selector.value()); else if (selector.isAttributeSelector()) features.attributes.append(selector.attribute().localName()); else if (selector.isCustomPseudoElement()) features.customPseudoElement = true; }
bool RuleFeatureSet::extractInvalidationSetFeature(const CSSSelector& selector, InvalidationSetFeatures& features) { if (selector.match() == CSSSelector::Tag && selector.tagQName().localName() != starAtom) features.tagName = selector.tagQName().localName(); else if (selector.match() == CSSSelector::Id) features.id = selector.value(); else if (selector.match() == CSSSelector::Class) features.classes.append(selector.value()); else if (selector.isAttributeSelector()) features.attributes.append(selector.attribute().localName()); else if (selector.pseudoType() == CSSSelector::PseudoWebKitCustomElement) features.customPseudoElement = true; else if (selector.pseudoType() == CSSSelector::PseudoBefore || selector.pseudoType() == CSSSelector::PseudoAfter) features.hasBeforeOrAfter = true; else return false; return true; }
static bool isSkippableComponentForInvalidation(const CSSSelector& selector) { if (selector.m_match == CSSSelector::Tag || selector.m_match == CSSSelector::Id || selector.isAttributeSelector()) return true; if (selector.m_match == CSSSelector::PseudoElement) { switch (selector.pseudoType()) { case CSSSelector::PseudoBefore: case CSSSelector::PseudoAfter: case CSSSelector::PseudoBackdrop: case CSSSelector::PseudoShadow: return true; default: return selector.isCustomPseudoElement(); } } if (selector.m_match != CSSSelector::PseudoClass) return false; switch (selector.pseudoType()) { case CSSSelector::PseudoEmpty: case CSSSelector::PseudoFirstChild: case CSSSelector::PseudoFirstOfType: case CSSSelector::PseudoLastChild: case CSSSelector::PseudoLastOfType: case CSSSelector::PseudoOnlyChild: case CSSSelector::PseudoOnlyOfType: case CSSSelector::PseudoNthChild: case CSSSelector::PseudoNthOfType: case CSSSelector::PseudoNthLastChild: case CSSSelector::PseudoNthLastOfType: case CSSSelector::PseudoLink: case CSSSelector::PseudoVisited: case CSSSelector::PseudoAnyLink: case CSSSelector::PseudoHover: case CSSSelector::PseudoDrag: case CSSSelector::PseudoFocus: case CSSSelector::PseudoActive: case CSSSelector::PseudoChecked: case CSSSelector::PseudoEnabled: case CSSSelector::PseudoDefault: case CSSSelector::PseudoDisabled: case CSSSelector::PseudoOptional: 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::PseudoRoot: case CSSSelector::PseudoScope: case CSSSelector::PseudoInRange: case CSSSelector::PseudoOutOfRange: case CSSSelector::PseudoUnresolved: return true; default: return false; } }