Simplify StyleEngine clean up. The StyleEngine only lives as long as the document is attached, and the document is always detached before it is destroyed. This also means the document for the style engine always has a frame, so we don't need to conditionally create the CSSFontSelector. R=eseidel@google.com Review URL: https://codereview.chromium.org/786933008
diff --git a/sky/engine/core/dom/Document.cpp b/sky/engine/core/dom/Document.cpp index d4284fd..8fcd7dd 100644 --- a/sky/engine/core/dom/Document.cpp +++ b/sky/engine/core/dom/Document.cpp
@@ -331,10 +331,6 @@ m_timeline->detachFromDocument(); - // We need to destroy CSSFontSelector before destroying m_fetcher. - if (m_styleEngine) - m_styleEngine->detachFromDocument(); - if (m_elemSheet) m_elemSheet->clearOwnerNode(); @@ -1283,7 +1279,6 @@ m_renderView = 0; ContainerNode::detach(context); - m_styleEngine->didDetach(); m_styleEngine = nullptr; // This is required, as our LocalFrame might delete itself as soon as it detaches
diff --git a/sky/engine/core/dom/StyleEngine.cpp b/sky/engine/core/dom/StyleEngine.cpp index b94faa2..ef36e93 100644 --- a/sky/engine/core/dom/StyleEngine.cpp +++ b/sky/engine/core/dom/StyleEngine.cpp
@@ -47,32 +47,15 @@ StyleEngine::StyleEngine(Document& document) : m_document(&document) , m_ignorePendingStylesheets(false) - // We don't need to create CSSFontSelector for imported document or - // HTMLTemplateElement's document, because those documents have no frame. - , m_fontSelector(document.frame() ? CSSFontSelector::create(&document) : nullptr) + , m_fontSelector(CSSFontSelector::create(&document)) { - if (m_fontSelector) - m_fontSelector->registerForInvalidationCallbacks(this); + m_fontSelector->registerForInvalidationCallbacks(this); } StyleEngine::~StyleEngine() { -} - -void StyleEngine::detachFromDocument() -{ - // Cleanup is performed eagerly when the StyleEngine is removed from the - // document. The StyleEngine is unreachable after this, since only the - // document has a reference to it. - - if (m_fontSelector) { - m_fontSelector->clearDocument(); - m_fontSelector->unregisterForInvalidationCallbacks(this); - } - - // Decrement reference counts for things we could be keeping alive. - m_fontSelector.clear(); - m_resolver.clear(); + m_fontSelector->clearDocument(); + m_fontSelector->unregisterForInvalidationCallbacks(this); } void StyleEngine::addStyleSheetCandidateNode(Node* node, bool createdByParser) @@ -158,11 +141,6 @@ return m_resolver ? m_resolver->accessCount() : 0; } -void StyleEngine::didDetach() -{ - clearResolver(); -} - void StyleEngine::resolverChanged() { // Don't bother updating, since we haven't loaded all our style info yet @@ -177,8 +155,7 @@ void StyleEngine::clearFontCache() { - if (m_fontSelector) - m_fontSelector->fontFaceCache()->clearCSSConnected(); + m_fontSelector->fontFaceCache()->clearCSSConnected(); if (m_resolver) m_resolver->invalidateMatchedPropertiesCache(); } @@ -189,9 +166,6 @@ // document is inactive. ASSERT(m_document->isActive()); - if (!m_fontSelector) - return; - m_fontSelector->updateGenericFontFamilySettings(*m_document); if (m_resolver) m_resolver->invalidateMatchedPropertiesCache(); @@ -199,9 +173,6 @@ void StyleEngine::removeFontFaceRules(const Vector<RawPtr<const StyleRuleFontFace> >& fontFaceRules) { - if (!m_fontSelector) - return; - FontFaceCache* cache = m_fontSelector->fontFaceCache(); for (unsigned i = 0; i < fontFaceRules.size(); ++i) cache->remove(fontFaceRules[i]);
diff --git a/sky/engine/core/dom/StyleEngine.h b/sky/engine/core/dom/StyleEngine.h index b44e033..cd8ddfe 100644 --- a/sky/engine/core/dom/StyleEngine.h +++ b/sky/engine/core/dom/StyleEngine.h
@@ -103,7 +103,6 @@ // updateGenericFontFamilySettings is used from WebSettingsImpl. void updateGenericFontFamilySettings(); - void didDetach(); void resolverChanged(); unsigned resolverAccessCount() const;