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

Unified Diff: third_party/WebKit/Source/core/css/ActiveStyleSheets.cpp

Issue 2487653002: Moved applyRuleSetChanges functions to StyleEngine. (Closed)
Patch Set: Added comment Created 4 years, 1 month 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/css/ActiveStyleSheets.cpp
diff --git a/third_party/WebKit/Source/core/css/ActiveStyleSheets.cpp b/third_party/WebKit/Source/core/css/ActiveStyleSheets.cpp
index 271359d1c38166960c6ce78a2135b79d86e6b21a..5c5326338612c35413b2aff4bd8d5f28ca167fa0 100644
--- a/third_party/WebKit/Source/core/css/ActiveStyleSheets.cpp
+++ b/third_party/WebKit/Source/core/css/ActiveStyleSheets.cpp
@@ -103,94 +103,4 @@ ActiveSheetsChange compareActiveStyleSheets(
return changedRuleSets.size() ? ActiveSheetsChanged : NoActiveSheetsChanged;
}
-namespace {
-
-enum RuleSetFlags {
- FontFaceRules = 1 << 0,
- KeyframesRules = 1 << 1,
- FullRecalcRules = 1 << 2
-};
-
-unsigned getRuleSetFlags(const HeapVector<Member<RuleSet>> ruleSets) {
- unsigned flags = 0;
- for (auto& ruleSet : ruleSets) {
- ruleSet->compactRulesIfNeeded();
- if (!ruleSet->keyframesRules().isEmpty())
- flags |= KeyframesRules;
- if (!ruleSet->fontFaceRules().isEmpty())
- flags |= FontFaceRules;
- if (ruleSet->needsFullRecalcForRuleSetInvalidation())
- flags |= FullRecalcRules;
- }
- return flags;
-}
-
-} // namespace
-
-void applyRuleSetChanges(StyleEngine& engine,
- TreeScope& treeScope,
- const ActiveStyleSheetVector& oldStyleSheets,
- const ActiveStyleSheetVector& newStyleSheets) {
- HeapVector<Member<RuleSet>> changedRuleSets;
-
- ActiveSheetsChange change =
- compareActiveStyleSheets(oldStyleSheets, newStyleSheets, changedRuleSets);
- if (change == NoActiveSheetsChanged)
- return;
-
- // TODO(rune@opera.com): engine.setNeedsGlobalRuleSetUpdate();
-
- unsigned changedRuleFlags = getRuleSetFlags(changedRuleSets);
- bool fontsChanged = treeScope.rootNode().isDocumentNode() &&
- (changedRuleFlags & FontFaceRules);
- unsigned appendStartIndex = 0;
-
- // We don't need to clear the font cache if new sheets are appended.
- if (fontsChanged && change == ActiveSheetsChanged)
- engine.clearFontCache();
-
- // - If all sheets were removed, we remove the ScopedStyleResolver.
- // - If new sheets were appended to existing ones, start appending after the
- // common prefix.
- // - For other diffs, reset author style and re-add all sheets for the
- // TreeScope.
- if (treeScope.scopedStyleResolver()) {
- if (newStyleSheets.isEmpty())
- engine.resetAuthorStyle(treeScope);
- else if (change == ActiveSheetsAppended)
- appendStartIndex = oldStyleSheets.size();
- else
- treeScope.scopedStyleResolver()->resetAuthorStyle();
- }
-
- if (!newStyleSheets.isEmpty()) {
- treeScope.ensureScopedStyleResolver().appendActiveStyleSheets(
- appendStartIndex, newStyleSheets);
- }
-
- if (treeScope.document().hasPendingForcedStyleRecalc())
- return;
-
- if (!treeScope.document().body() ||
- treeScope.document().hasNodesWithPlaceholderStyle()) {
- treeScope.document().setNeedsStyleRecalc(
- SubtreeStyleChange, StyleChangeReasonForTracing::create(
- StyleChangeReason::CleanupPlaceholderStyles));
- return;
- }
-
- if (changedRuleFlags & KeyframesRules)
- ScopedStyleResolver::keyframesRulesAdded(treeScope);
-
- if (fontsChanged || (changedRuleFlags & FullRecalcRules)) {
- ScopedStyleResolver::invalidationRootForTreeScope(treeScope)
- .setNeedsStyleRecalc(SubtreeStyleChange,
- StyleChangeReasonForTracing::create(
- StyleChangeReason::ActiveStylesheetsUpdate));
- return;
- }
-
- engine.scheduleInvalidationsForRuleSets(treeScope, changedRuleSets);
-}
-
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/css/ActiveStyleSheets.h ('k') | third_party/WebKit/Source/core/css/ActiveStyleSheetsTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698