Node* StyleSheetContents::singleOwnerNode() const { StyleSheetContents* root = rootStyleSheet(); if (!root->hasOneClient()) return nullptr; if (root->m_loadingClients.size()) return (*root->m_loadingClients.begin())->ownerNode(); return (*root->m_completedClients.begin())->ownerNode(); }
void ScopedStyleResolver::collectFeaturesTo(RuleFeatureSet& features, HashSet<const StyleSheetContents*>& visitedSharedStyleSheetContents) { for (size_t i = 0; i < m_authorStyleSheets.size(); ++i) { StyleSheetContents* contents = m_authorStyleSheets[i]->contents(); if (contents->hasOneClient() || visitedSharedStyleSheetContents.add(contents).isNewEntry) features.add(contents->ruleSet().features()); } }
void ScopedStyleResolver::collectFeaturesTo(RuleFeatureSet& features, WillBeHeapHashSet<RawPtrWillBeMember<const StyleSheetContents>>& visitedSharedStyleSheetContents) const { for (size_t i = 0; i < m_authorStyleSheets.size(); ++i) { ASSERT(m_authorStyleSheets[i]->ownerNode()); StyleSheetContents* contents = m_authorStyleSheets[i]->contents(); if (contents->hasOneClient() || visitedSharedStyleSheetContents.add(contents).isNewEntry) features.add(contents->ruleSet().features()); } if (!m_treeBoundaryCrossingRuleSet) return; for (const auto& rules : *m_treeBoundaryCrossingRuleSet) features.add(rules->m_ruleSet->features()); }