Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(784)

Unified Diff: Source/core/dom/StyleEngine.cpp

Issue 262093006: Oilpan: Make the Node hierarchy RefCountedGarbageCollected instead of TreeShared. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Another build fix. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/dom/StyleEngine.cpp
diff --git a/Source/core/dom/StyleEngine.cpp b/Source/core/dom/StyleEngine.cpp
index 0ba45539df989ad6ed7c39af7de8de08a9ed8e75..470780f2512f892b33908085801f5eefe01fad61 100644
--- a/Source/core/dom/StyleEngine.cpp
+++ b/Source/core/dom/StyleEngine.cpp
@@ -54,7 +54,7 @@ namespace WebCore {
using namespace HTMLNames;
StyleEngine::StyleEngine(Document& document)
- : m_document(document)
+ : m_document(&document)
haraken 2014/05/06 15:59:42 Probably we should announce to blink-dev@ that Oil
Mads Ager (chromium) 2014/05/07 12:13:16 Yes, we should write a message explaining the fact
, m_isMaster(!document.importsController() || document.importsController()->isMaster(document) )
, m_pendingStylesheets(0)
, m_injectedStyleSheetCacheValid(false)
@@ -78,24 +78,21 @@ StyleEngine::~StyleEngine()
{
}
+#if !ENABLE(OILPAN)
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 !ENABLE(OILPAN)
for (unsigned i = 0; i < m_injectedAuthorStyleSheets.size(); ++i)
m_injectedAuthorStyleSheets[i]->clearOwnerNode();
for (unsigned i = 0; i < m_authorStyleSheets.size(); ++i)
m_authorStyleSheets[i]->clearOwnerNode();
-#endif
if (m_fontSelector) {
m_fontSelector->clearDocument();
haraken 2014/05/06 15:59:42 This is problematic but will be fixed in Gustav's
Mads Ager (chromium) 2014/05/07 12:13:16 Yes, I should have done that. Gustav's change is i
-#if !ENABLE(OILPAN)
if (m_resolver)
m_fontSelector->unregisterForInvalidationCallbacks(m_resolver.get());
-#endif
}
// Decrement reference counts for things we could be keeping alive.
@@ -103,12 +100,13 @@ void StyleEngine::detachFromDocument()
m_resolver.clear();
m_styleSheetCollectionMap.clear();
}
+#endif
inline Document* StyleEngine::master()
{
if (isMaster())
- return &m_document;
- HTMLImportsController* import = m_document.importsController();
+ return m_document;
+ HTMLImportsController* import = m_document->importsController();
tkent 2014/05/07 00:41:19 We should have |Document& StyleEngine::document()|
Mads Ager (chromium) 2014/05/07 12:13:16 That is a good idea. That will be less intrusive i
if (!import) // Document::import() can return null while executing its destructor.
return 0;
return import->master();
@@ -204,18 +202,18 @@ void StyleEngine::updateInjectedStyleSheetCache() const
m_injectedStyleSheetCacheValid = true;
m_injectedAuthorStyleSheets.clear();
- Page* owningPage = m_document.page();
+ Page* owningPage = m_document->page();
if (!owningPage)
return;
const InjectedStyleSheetEntryVector& entries = InjectedStyleSheets::instance().entries();
for (unsigned i = 0; i < entries.size(); ++i) {
const InjectedStyleSheetEntry* entry = entries[i].get();
- if (entry->injectedFrames() == InjectStyleInTopFrameOnly && m_document.ownerElement())
+ if (entry->injectedFrames() == InjectStyleInTopFrameOnly && m_document->ownerElement())
continue;
- if (!URLPatternMatcher::matchesPatterns(m_document.url(), entry->whitelist()))
+ if (!URLPatternMatcher::matchesPatterns(m_document->url(), entry->whitelist()))
continue;
- RefPtrWillBeRawPtr<CSSStyleSheet> groupSheet = CSSStyleSheet::createInline(const_cast<Document*>(&m_document), KURL());
+ RefPtrWillBeRawPtr<CSSStyleSheet> groupSheet = CSSStyleSheet::createInline(m_document, KURL());
m_injectedAuthorStyleSheets.append(groupSheet);
groupSheet->contents()->parseString(entry->source());
}
@@ -227,13 +225,13 @@ void StyleEngine::invalidateInjectedStyleSheetCache()
markDocumentDirty();
// FIXME: updateInjectedStyleSheetCache is called inside StyleSheetCollection::updateActiveStyleSheets
// and batch updates lots of sheets so we can't call addedStyleSheet() or removedStyleSheet().
- m_document.styleResolverChanged(RecalcStyleDeferred);
+ m_document->styleResolverChanged(RecalcStyleDeferred);
}
void StyleEngine::addAuthorSheet(PassRefPtrWillBeRawPtr<StyleSheetContents> authorSheet)
{
- m_authorStyleSheets.append(CSSStyleSheet::create(authorSheet, &m_document));
- m_document.addedStyleSheet(m_authorStyleSheets.last().get(), RecalcStyleImmediately);
+ m_authorStyleSheets.append(CSSStyleSheet::create(authorSheet, m_document));
+ m_document->addedStyleSheet(m_authorStyleSheets.last().get(), RecalcStyleImmediately);
markDocumentDirty();
}
@@ -246,7 +244,7 @@ void StyleEngine::addPendingSheet()
void StyleEngine::removePendingSheet(Node* styleSheetCandidateNode, RemovePendingSheetNotificationType notification)
{
ASSERT(styleSheetCandidateNode);
- TreeScope* treeScope = isHTMLStyleElement(*styleSheetCandidateNode) ? &styleSheetCandidateNode->treeScope() : &m_document;
+ TreeScope* treeScope = isHTMLStyleElement(*styleSheetCandidateNode) ? &styleSheetCandidateNode->treeScope() : m_document.get();
markTreeScopeDirty(*treeScope);
// Make sure we knew this sheet was pending, and that our count isn't out of sync.
@@ -257,13 +255,13 @@ void StyleEngine::removePendingSheet(Node* styleSheetCandidateNode, RemovePendin
return;
if (notification == RemovePendingSheetNotifyLater) {
- m_document.setNeedsNotifyRemoveAllPendingStylesheet();
+ m_document->setNeedsNotifyRemoveAllPendingStylesheet();
return;
}
// FIXME: We can't call addedStyleSheet or removedStyleSheet here because we don't know
// what's new. We should track that to tell the style system what changed.
- m_document.didRemoveAllPendingStylesheet();
+ m_document->didRemoveAllPendingStylesheet();
}
void StyleEngine::modifiedStyleSheet(StyleSheet* sheet)
@@ -275,7 +273,7 @@ void StyleEngine::modifiedStyleSheet(StyleSheet* sheet)
if (!node || !node->inDocument())
return;
- TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : m_document;
+ TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : *m_document;
ASSERT(isHTMLStyleElement(node) || treeScope == m_document);
markTreeScopeDirty(treeScope);
@@ -286,7 +284,7 @@ void StyleEngine::addStyleSheetCandidateNode(Node* node, bool createdByParser)
if (!node->inDocument())
return;
- TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : m_document;
+ TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : *m_document;
ASSERT(isHTMLStyleElement(node) || treeScope == m_document);
TreeScopeStyleSheetCollection* collection = ensureStyleSheetCollectionFor(treeScope);
@@ -300,7 +298,7 @@ void StyleEngine::addStyleSheetCandidateNode(Node* node, bool createdByParser)
void StyleEngine::removeStyleSheetCandidateNode(Node* node)
{
- removeStyleSheetCandidateNode(node, 0, m_document);
+ removeStyleSheetCandidateNode(node, 0, *m_document);
}
void StyleEngine::removeStyleSheetCandidateNode(Node* node, ContainerNode* scopingNode, TreeScope& treeScope)
@@ -320,7 +318,7 @@ void StyleEngine::modifiedStyleSheetCandidateNode(Node* node)
if (!node->inDocument())
return;
- TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : m_document;
+ TreeScope& treeScope = isHTMLStyleElement(*node) ? node->treeScope() : *m_document;
ASSERT(isHTMLStyleElement(node) || treeScope == m_document);
markTreeScopeDirty(treeScope);
}
@@ -360,9 +358,9 @@ void StyleEngine::updateStyleSheetsInImport(DocumentStyleSheetCollector& parentC
bool StyleEngine::updateActiveStyleSheets(StyleResolverUpdateMode updateMode)
{
ASSERT(isMaster());
- ASSERT(!m_document.inStyleRecalc());
+ ASSERT(!m_document->inStyleRecalc());
- if (!m_document.isActive())
+ if (!m_document->isActive())
return false;
bool requiresFullStyleRecalc = false;
@@ -385,7 +383,7 @@ bool StyleEngine::updateActiveStyleSheets(StyleResolverUpdateMode updateMode)
m_activeTreeScopes.removeAll(treeScopesRemoved);
}
- InspectorInstrumentation::activeStyleSheetsUpdated(&m_document);
+ InspectorInstrumentation::activeStyleSheetsUpdated(m_document);
m_usesRemUnits = m_documentStyleSheetCollection.usesRemUnits();
m_dirtyTreeScopes.clear();
@@ -446,10 +444,10 @@ void StyleEngine::createResolver()
// which is not in a frame. Code which hits this should have checked
// Document::isActive() before calling into code which could get here.
- ASSERT(m_document.frame());
+ ASSERT(m_document->frame());
ASSERT(m_fontSelector);
- m_resolver = adoptPtrWillBeNoop(new StyleResolver(m_document));
+ m_resolver = adoptPtrWillBeNoop(new StyleResolver(*m_document));
appendActiveAuthorStyleSheets();
m_fontSelector->registerForInvalidationCallbacks(m_resolver.get());
combineCSSFeatureFlags(m_resolver->ensureUpdatedRuleFeatureSet());
@@ -457,11 +455,11 @@ void StyleEngine::createResolver()
void StyleEngine::clearResolver()
{
- ASSERT(!m_document.inStyleRecalc());
+ ASSERT(!m_document->inStyleRecalc());
ASSERT(isMaster() || !m_resolver);
ASSERT(m_fontSelector || !m_resolver);
if (m_resolver) {
- m_document.updateStyleInvalidationIfNeeded();
+ m_document->updateStyleInvalidationIfNeeded();
#if !ENABLE(OILPAN)
m_fontSelector->unregisterForInvalidationCallbacks(m_resolver.get());
#endif
@@ -502,13 +500,13 @@ StyleResolverChange StyleEngine::resolverChanged(RecalcStyleTime time, StyleReso
// Don't bother updating, since we haven't loaded all our style info yet
// and haven't calculated the style selector for the first time.
- if (!m_document.isActive() || shouldClearResolver()) {
+ if (!m_document->isActive() || shouldClearResolver()) {
clearResolver();
return change;
}
m_didCalculateResolver = true;
- if (m_document.didLayoutWithPendingStylesheets() && !hasPendingSheets())
+ if (m_document->didLayoutWithPendingStylesheets() && !hasPendingSheets())
change.setNeedsRepaint();
if (updateActiveStyleSheets(mode))
@@ -531,7 +529,7 @@ void StyleEngine::updateGenericFontFamilySettings()
if (!m_fontSelector)
return;
- m_fontSelector->updateGenericFontFamilySettings(m_document);
+ m_fontSelector->updateGenericFontFamilySettings(*m_document);
if (m_resolver)
m_resolver->invalidateMatchedPropertiesCache();
}
@@ -561,8 +559,8 @@ void StyleEngine::markTreeScopeDirty(TreeScope& scope)
void StyleEngine::markDocumentDirty()
{
m_documentScopeDirty = true;
- if (m_document.importLoader())
- m_document.importsController()->master()->styleEngine()->markDocumentDirty();
+ if (m_document->importLoader())
+ m_document->importsController()->master()->styleEngine()->markDocumentDirty();
}
static bool isCacheableForStyleElement(const StyleSheetContents& contents)
@@ -633,6 +631,7 @@ void StyleEngine::removeSheet(StyleSheetContents* contents)
void StyleEngine::trace(Visitor* visitor)
{
+ visitor->trace(m_document);
visitor->trace(m_injectedAuthorStyleSheets);
visitor->trace(m_authorStyleSheets);
visitor->trace(m_documentStyleSheetCollection);

Powered by Google App Engine
This is Rietveld 408576698