void CSSGlobalRuleSet::update(Document& document) { if (!m_isDirty) return; m_isDirty = false; m_features.clear(); m_hasFullscreenUAStyle = false; CSSDefaultStyleSheets& defaultStyleSheets = CSSDefaultStyleSheets::instance(); if (defaultStyleSheets.defaultStyle()) { m_features.add(defaultStyleSheets.defaultStyle()->features()); m_hasFullscreenUAStyle = defaultStyleSheets.fullscreenStyleSheet(); } if (document.isViewSource()) m_features.add(defaultStyleSheets.defaultViewSourceStyle()->features()); if (m_watchedSelectorsRuleSet) m_features.add(m_watchedSelectorsRuleSet->features()); document.styleEngine().collectScopedStyleFeaturesTo(m_features); m_siblingRuleSet = makeRuleSet(m_features.siblingRules()); m_uncommonAttributeRuleSet = makeRuleSet(m_features.uncommonAttributeRules()); }
void DocumentRuleSets::collectFeatures() { m_features.clear(); // Collect all ids and rules using sibling selectors (:first-child and similar) // in the current set of stylesheets. Style sharing code uses this information to reject // sharing candidates. if (CSSDefaultStyleSheets::defaultStyle) m_features.add(CSSDefaultStyleSheets::defaultStyle->features()); if (m_authorStyle) m_features.add(m_authorStyle->features()); if (m_userStyle) m_features.add(m_userStyle->features()); m_siblingRuleSet = makeRuleSet(m_features.siblingRules); m_uncommonAttributeRuleSet = makeRuleSet(m_features.uncommonAttributeRules); }
RuleSet* DocumentRuleSets::ancestorClassRules(AtomicStringImpl* className) const { auto addResult = m_ancestorClassRuleSet.add(className, nullptr); if (addResult.isNewEntry) { if (auto* rules = m_features.ancestorClassRules.get(className)) addResult.iterator->value = makeRuleSet(*rules); } return addResult.iterator->value.get(); }
void finishAddingSelectors() { m_siblingRuleSet = makeRuleSet(m_ruleSet->features().siblingRules); m_uncommonAttributeRuleSet = makeRuleSet(m_ruleSet->features().uncommonAttributeRules); }