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

Unified Diff: third_party/WebKit/Source/core/dom/DocumentStyleSheetCollection.cpp

Issue 1913833002: Current work-in-progress crbug.com/567021 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More assert fixes Created 4 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: third_party/WebKit/Source/core/dom/DocumentStyleSheetCollection.cpp
diff --git a/third_party/WebKit/Source/core/dom/DocumentStyleSheetCollection.cpp b/third_party/WebKit/Source/core/dom/DocumentStyleSheetCollection.cpp
index 7558369fd2e0fc9709b130fb0c88d59c9e98bf3b..69e62a48e3255270e421098081dad8c1c1ccc7d5 100644
--- a/third_party/WebKit/Source/core/dom/DocumentStyleSheetCollection.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentStyleSheetCollection.cpp
@@ -26,7 +26,9 @@
#include "core/dom/DocumentStyleSheetCollection.h"
+#include "core/css/StyleSheetContents.h"
#include "core/css/resolver/StyleResolver.h"
+#include "core/css/resolver/ViewportStyleResolver.h"
#include "core/dom/Document.h"
#include "core/dom/DocumentStyleSheetCollector.h"
#include "core/dom/ProcessingInstruction.h"
@@ -43,7 +45,30 @@ DocumentStyleSheetCollection::DocumentStyleSheetCollection(TreeScope& treeScope)
DCHECK_EQ(treeScope.rootNode(), treeScope.rootNode().document());
}
-void DocumentStyleSheetCollection::collectStyleSheetsFromCandidates(StyleEngine& engine, DocumentStyleSheetCollector& collector)
+void DocumentStyleSheetCollection::updateViewport()
+{
+ ViewportStyleResolver& resolver = document().styleEngine().ensureViewportStyleResolver();
+
+ resolver.reset();
+ resolver.collectViewportRulesFromUASheets();
+
+ for (Node* node : m_styleSheetCandidateNodes) {
+ StyleSheetCandidate candidate(*node);
+
+ if (candidate.isImport())
+ continue;
+ StyleSheet* sheet = candidate.sheet();
+ if (!sheet)
+ continue;
+ if (!candidate.canBeActivated(document().styleEngine().preferredStylesheetSetName()))
+ continue;
+ resolver.collectViewportRulesFromAuthorSheet(*toCSSStyleSheet(sheet));
+ }
+
+ resolver.resolve();
+}
+
+void DocumentStyleSheetCollection::collectStyleSheetsFromCandidates(DocumentStyleSheetCollector& collector)
{
for (Node* n : m_styleSheetCandidateNodes) {
StyleSheetCandidate candidate(*n);
@@ -60,64 +85,37 @@ void DocumentStyleSheetCollection::collectStyleSheetsFromCandidates(StyleEngine&
continue;
}
- if (candidate.isEnabledAndLoading()) {
- // it is loading but we should still decide which style sheet set to use
- if (candidate.hasPreferrableName())
- engine.setPreferredStylesheetSetNameIfNotSet(candidate.title());
+ if (candidate.isEnabledAndLoading())
continue;
- }
StyleSheet* sheet = candidate.sheet();
if (!sheet)
continue;
- if (candidate.hasPreferrableName())
- engine.setPreferredStylesheetSetNameIfNotSet(candidate.title());
collector.appendSheetForList(sheet);
- if (candidate.canBeActivated(engine.preferredStylesheetSetName()))
- collector.appendActiveStyleSheet(toCSSStyleSheet(sheet));
+
+ if (!candidate.canBeActivated(document().styleEngine().preferredStylesheetSetName()))
+ continue;
+
+ CSSStyleSheet* cssSheet = toCSSStyleSheet(sheet);
+ collector.appendActiveStyleSheet(std::make_pair(cssSheet, &document().styleEngine().ensureRuleSetForSheet(*cssSheet)));
}
}
-void DocumentStyleSheetCollection::collectStyleSheets(StyleEngine& engine, DocumentStyleSheetCollector& collector)
+void DocumentStyleSheetCollection::collectStyleSheets(DocumentStyleSheetCollector& collector)
{
- DCHECK_EQ(&document().styleEngine(), &engine);
- collector.appendActiveStyleSheets(engine.injectedAuthorStyleSheets());
- collectStyleSheetsFromCandidates(engine, collector);
+ for (auto& sheet : document().styleEngine().injectedAuthorStyleSheets())
+ collector.appendActiveStyleSheet(std::make_pair(sheet, &document().styleEngine().ensureRuleSetForSheet(*sheet)));
+
+ collectStyleSheetsFromCandidates(collector);
}
-void DocumentStyleSheetCollection::updateActiveStyleSheets(StyleEngine& engine, StyleResolverUpdateMode updateMode)
+void DocumentStyleSheetCollection::updateActiveStyleSheets()
{
StyleSheetCollection collection;
ActiveDocumentStyleSheetCollector collector(collection);
- collectStyleSheets(engine, collector);
-
- StyleSheetChange change;
- analyzeStyleSheetChange(updateMode, collection, change);
-
- if (change.styleResolverUpdateType == Reconstruct) {
- engine.clearMasterResolver();
- // TODO(rune@opera.com): The following depends on whether StyleRuleFontFace was modified or not.
- // We should only remove modified/removed @font-face rules, or @font-face rules from removed
- // stylesheets. We currently avoid clearing the font cache when we have had an analyzed update
- // and no @font-face rules were removed, in which case requiresFullStyleRecalc will be false.
- if (change.requiresFullStyleRecalc)
- engine.clearFontCache();
- } else if (StyleResolver* styleResolver = engine.resolver()) {
- if (change.styleResolverUpdateType != Additive) {
- DCHECK_EQ(change.styleResolverUpdateType, Reset);
- styleResolver->resetAuthorStyle(treeScope());
- engine.removeFontFaceRules(change.fontFaceRulesToRemove);
- styleResolver->removePendingAuthorStyleSheets(m_activeAuthorStyleSheets);
- styleResolver->lazyAppendAuthorStyleSheets(0, collection.activeAuthorStyleSheets());
- } else {
- styleResolver->lazyAppendAuthorStyleSheets(m_activeAuthorStyleSheets.size(), collection.activeAuthorStyleSheets());
- }
- }
- if (change.requiresFullStyleRecalc)
- document().setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create(StyleChangeReason::ActiveStylesheetsUpdate));
-
- collection.swap(*this);
+ collectStyleSheets(collector);
+ applyActiveStyleSheetChanges(collection);
}
DEFINE_TRACE_WRAPPERS(DocumentStyleSheetCollection)

Powered by Google App Engine
This is Rietveld 408576698