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

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

Issue 14604003: When there are no more stylesheets schedule the recalc async (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Refactor based on review Created 7 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/Document.cpp
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp
index 6cf7bcc20ff5a4317303d38b8786c50228602fb2..aebee12801a332290d25bc8e2d3ded62b7cc3c13 100644
--- a/Source/core/dom/Document.cpp
+++ b/Source/core/dom/Document.cpp
@@ -1604,7 +1604,7 @@ void Document::recalcStyle(StyleChange change)
// hits a null-dereference due to security code always assuming the document has a SecurityOrigin.
if (m_styleSheetCollection->needsUpdateActiveStylesheetsOnStyleRecalc())
- m_styleSheetCollection->updateActiveStyleSheets(DocumentStyleSheetCollection::FullUpdate);
+ m_styleSheetCollection->updateActiveStyleSheets(FullStyleUpdate);
InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalculateStyle(this);
@@ -2605,13 +2605,15 @@ void Document::didRemoveAllPendingStylesheet()
{
m_needsNotifyRemoveAllPendingStylesheet = false;
- styleResolverChanged(RecalcStyleIfNeeded);
+ styleResolverChanged(DeferRecalcStyle, OptimizedStyleUpdate);
if (ScriptableDocumentParser* parser = scriptableDocumentParser())
parser->executeScriptsWaitingForStylesheets();
adamk 2013/05/13 20:48:37 Do you know if there are tests covering this code
- if (m_gotoAnchorNeededAfterStylesheetsLoad && view())
+ if (m_gotoAnchorNeededAfterStylesheetsLoad && view()) {
+ updateStyleIfNeeded();
view()->scrollToFragment(m_url);
+ }
}
CSSStyleSheet* Document::elementSheet()
@@ -2958,7 +2960,7 @@ void Document::evaluateMediaQueryList()
m_mediaQueryMatcher->styleResolverChanged();
}
-void Document::styleResolverChanged(StyleResolverUpdateFlag updateFlag)
+void Document::styleResolverChanged(StyleResolverUpdateType updateType, StyleResolverUpdateMode updateMode)
{
// 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.
@@ -2973,15 +2975,7 @@ void Document::styleResolverChanged(StyleResolverUpdateFlag updateFlag)
printf("Beginning update of style selector at time %d.\n", elapsedTime());
#endif
- DocumentStyleSheetCollection::UpdateFlag styleSheetUpdate = (updateFlag == RecalcStyleIfNeeded)
- ? DocumentStyleSheetCollection::OptimizedUpdate
- : DocumentStyleSheetCollection::FullUpdate;
- bool stylesheetChangeRequiresStyleRecalc = m_styleSheetCollection->updateActiveStyleSheets(styleSheetUpdate);
-
- if (updateFlag == DeferRecalcStyle) {
- scheduleForcedStyleRecalc();
- return;
- }
+ bool needsRecalc = m_styleSheetCollection->updateActiveStyleSheets(updateMode);
if (didLayoutWithPendingStylesheets() && !m_styleSheetCollection->hasPendingSheets()) {
m_pendingSheetLayout = IgnoreLayoutWithPendingSheets;
@@ -2989,12 +2983,12 @@ void Document::styleResolverChanged(StyleResolverUpdateFlag updateFlag)
renderView()->repaintViewAndCompositedLayers();
}
- if (!stylesheetChangeRequiresStyleRecalc)
+ if (!needsRecalc)
return;
- // This recalcStyle initiates a new recalc cycle. We need to bracket it to
- // make sure animations get the correct update time
- {
+ if (updateType >= DeferRecalcStyle)
+ scheduleForcedStyleRecalc();
+ else {
AnimationUpdateBlock animationUpdateBlock(m_frame ? m_frame->animation() : 0);
recalcStyle(Force);
}

Powered by Google App Engine
This is Rietveld 408576698