void StyleEngine::updateActiveStyleSheets(StyleResolverUpdateMode updateMode) { ASSERT(isMaster()); ASSERT(!document().inStyleRecalc()); if (!document().isActive()) return; if (shouldUpdateDocumentStyleSheetCollection(updateMode)) documentStyleSheetCollection()->updateActiveStyleSheets(this, updateMode); if (shouldUpdateShadowTreeStyleSheetCollection(updateMode)) { TreeScopeSet treeScopes = updateMode == FullStyleUpdate ? m_activeTreeScopes : m_dirtyTreeScopes; HashSet<TreeScope*> treeScopesRemoved; for (TreeScopeSet::iterator it = treeScopes.begin(); it != treeScopes.end(); ++it) { TreeScope* treeScope = *it; ASSERT(treeScope != m_document); ShadowTreeStyleSheetCollection* collection = static_cast<ShadowTreeStyleSheetCollection*>(styleSheetCollectionFor(*treeScope)); ASSERT(collection); collection->updateActiveStyleSheets(this, updateMode); if (!collection->hasStyleSheetCandidateNodes()) treeScopesRemoved.add(treeScope); } m_activeTreeScopes.removeAll(treeScopesRemoved); } InspectorInstrumentation::activeStyleSheetsUpdated(m_document); m_usesRemUnits = documentStyleSheetCollection()->usesRemUnits(); m_dirtyTreeScopes.clear(); m_documentScopeDirty = false; }
void StyleEngine::insertTreeScopeInDocumentOrder(TreeScopeSet& treeScopes, TreeScope* treeScope) { if (treeScopes.isEmpty()) { treeScopes.add(treeScope); return; } if (treeScopes.contains(treeScope)) return; TreeScopeSet::iterator begin = treeScopes.begin(); TreeScopeSet::iterator end = treeScopes.end(); TreeScopeSet::iterator it = end; TreeScope* followingTreeScope = 0; do { --it; TreeScope* n = *it; unsigned short position = n->comparePosition(*treeScope); if (position & Node::DOCUMENT_POSITION_FOLLOWING) { treeScopes.insertBefore(followingTreeScope, treeScope); return; } followingTreeScope = n; } while (it != begin); treeScopes.insertBefore(followingTreeScope, treeScope); }
void StyleEngine::clearMediaQueryRuleSetOnTreeScopeStyleSheets(TreeScopeSet treeScopes) { for (TreeScopeSet::iterator it = treeScopes.begin(); it != treeScopes.end(); ++it) { TreeScope& treeScope = **it; ASSERT(treeScope != m_document); ShadowTreeStyleSheetCollection* collection = static_cast<ShadowTreeStyleSheetCollection*>(styleSheetCollectionFor(treeScope)); ASSERT(collection); collection->clearMediaQueryRuleSetStyleSheets(); } }
bool StyleEngine::updateActiveStyleSheets(StyleResolverUpdateMode updateMode) { ASSERT(isMaster()); ASSERT(!m_document.inStyleRecalc()); if (!m_document.isActive()) return false; bool requiresFullStyleRecalc = false; if (m_documentScopeDirty || updateMode == FullStyleUpdate) requiresFullStyleRecalc = m_documentStyleSheetCollection.updateActiveStyleSheets(this, updateMode); if (shouldUpdateShadowTreeStyleSheetCollection(updateMode)) { TreeScopeSet treeScopes = updateMode == FullStyleUpdate ? m_activeTreeScopes : m_dirtyTreeScopes; HashSet<TreeScope*> treeScopesRemoved; for (TreeScopeSet::iterator it = treeScopes.begin(); it != treeScopes.end(); ++it) { TreeScope* treeScope = *it; ASSERT(treeScope != m_document); ShadowTreeStyleSheetCollection* collection = static_cast<ShadowTreeStyleSheetCollection*>(styleSheetCollectionFor(*treeScope)); ASSERT(collection); collection->updateActiveStyleSheets(this, updateMode); if (!collection->hasStyleSheetCandidateNodes()) treeScopesRemoved.add(treeScope); } if (!treeScopesRemoved.isEmpty()) for (HashSet<TreeScope*>::iterator it = treeScopesRemoved.begin(); it != treeScopesRemoved.end(); ++it) m_activeTreeScopes.remove(*it); } InspectorInstrumentation::activeStyleSheetsUpdated(&m_document); m_usesRemUnits = m_documentStyleSheetCollection.usesRemUnits(); m_dirtyTreeScopes.clear(); m_documentScopeDirty = false; return requiresFullStyleRecalc; }