Index: third_party/WebKit/Source/core/css/StyleSheetContents.cpp |
diff --git a/third_party/WebKit/Source/core/css/StyleSheetContents.cpp b/third_party/WebKit/Source/core/css/StyleSheetContents.cpp |
index c79583017a736b1fbbab801410603b05f9e01ebe..24326c5553ce7ebc5e92576df644bb8d8c68373d 100644 |
--- a/third_party/WebKit/Source/core/css/StyleSheetContents.cpp |
+++ b/third_party/WebKit/Source/core/css/StyleSheetContents.cpp |
@@ -274,7 +274,9 @@ bool StyleSheetContents::wrapperInsertRule(StyleRuleBase* rule, unsigned index) |
if (rule->isMediaRule()) |
setHasMediaQueries(); |
else if (rule->isFontFaceRule()) |
- setHasFontFaceRule(true); |
+ setHasFontFaceRule(); |
+ else if (rule->isViewportRule()) |
+ setHasViewportRule(); |
m_childRules.insert(index, rule); |
return true; |
@@ -608,11 +610,21 @@ RuleSet& StyleSheetContents::ensureRuleSet(const MediaQueryEvaluator& medium, Ad |
return *m_ruleSet.get(); |
} |
-static void clearResolvers(HeapHashSet<WeakMember<CSSStyleSheet>>& clients) |
+RuleSet& StyleSheetContents::ensureEmptyRuleSet() |
+{ |
+ DCHECK(m_ruleSet); |
+ m_ruleSet = RuleSet::create(); |
+ return *m_ruleSet.get(); |
+} |
+ |
+static void setNeedsActiveStyleUpdateForClients(HeapHashSet<WeakMember<CSSStyleSheet>>& clients) |
{ |
for (const auto& sheet : clients) { |
- if (Document* document = sheet->ownerDocument()) |
- document->styleEngine().clearResolver(); |
+ Document* document = sheet->ownerDocument(); |
+ Node* node = sheet->ownerNode(); |
+ if (!document || !node || !node->inShadowIncludingDocument()) |
+ continue; |
+ document->styleEngine().setNeedsActiveStyleUpdate(node->treeScope()); |
} |
} |
@@ -621,17 +633,13 @@ void StyleSheetContents::clearRuleSet() |
if (StyleSheetContents* parentSheet = parentStyleSheet()) |
parentSheet->clearRuleSet(); |
- // Don't want to clear the StyleResolver if the RuleSet hasn't been created |
- // since we only clear the StyleResolver so that it's members are properly |
- // updated in ScopedStyleResolver::addRulesFromSheet. |
if (!m_ruleSet) |
return; |
- // Clearing the ruleSet means we need to recreate the styleResolver data structures. |
- // See the StyleResolver calls in ScopedStyleResolver::addRulesFromSheet. |
- clearResolvers(m_loadingClients); |
- clearResolvers(m_completedClients); |
m_ruleSet.clear(); |
+ |
+ setNeedsActiveStyleUpdateForClients(m_loadingClients); |
+ setNeedsActiveStyleUpdateForClients(m_completedClients); |
} |
static void removeFontFaceRules(HeapHashSet<WeakMember<CSSStyleSheet>>& clients, const StyleRuleFontFace* fontFaceRule) |