| Index: third_party/WebKit/Source/core/css/invalidation/StyleSheetInvalidationAnalysis.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/invalidation/StyleSheetInvalidationAnalysis.cpp b/third_party/WebKit/Source/core/css/invalidation/StyleSheetInvalidationAnalysis.cpp
|
| index 43f39691526ca85158ea12c663f84b17e38f6934..7bf5a4f6bf401c49334f785c6aff6d53757332bd 100644
|
| --- a/third_party/WebKit/Source/core/css/invalidation/StyleSheetInvalidationAnalysis.cpp
|
| +++ b/third_party/WebKit/Source/core/css/invalidation/StyleSheetInvalidationAnalysis.cpp
|
| @@ -32,6 +32,7 @@
|
| #include "core/dom/Document.h"
|
| #include "core/dom/ElementTraversal.h"
|
| #include "core/dom/StyleChangeReason.h"
|
| +#include "core/dom/StyleEngine.h"
|
| #include "core/dom/TreeScope.h"
|
| #include "core/dom/shadow/ShadowRoot.h"
|
| #include "core/html/HTMLStyleElement.h"
|
| @@ -77,7 +78,7 @@ static bool determineSelectorScopes(const CSSSelectorList& selectorList, HashSet
|
|
|
| static bool ruleAdditionMightRequireDocumentStyleRecalc(StyleRuleBase* rule)
|
| {
|
| - // This funciton is conservative. We only return false when we know that
|
| + // This function is conservative. We only return false when we know that
|
| // the added @rule can't require style recalcs.
|
| switch (rule->type()) {
|
| case StyleRule::Import: // Whatever we import should do its own analysis, we don't need to invalidate the document here!
|
| @@ -88,7 +89,6 @@ static bool ruleAdditionMightRequireDocumentStyleRecalc(StyleRuleBase* rule)
|
| case StyleRule::FontFace: // If the fonts aren't in use, we could avoid recalc.
|
| case StyleRule::Supports: // If we evaluated the supports-clause we could avoid recalc.
|
| case StyleRule::Viewport: // If the viewport doesn't match, we could avoid recalcing.
|
| - case StyleRule::Keyframes: // If the animation doesn't match an element, we could avoid recalc.
|
| return true;
|
|
|
| // These should all be impossible to reach:
|
| @@ -96,6 +96,7 @@ static bool ruleAdditionMightRequireDocumentStyleRecalc(StyleRuleBase* rule)
|
| case StyleRule::Keyframe:
|
| case StyleRule::Namespace:
|
| case StyleRule::Style:
|
| + case StyleRule::Keyframes:
|
| break;
|
| }
|
| ASSERT_NOT_REACHED();
|
| @@ -128,6 +129,10 @@ void StyleSheetInvalidationAnalysis::analyzeStyleSheet(StyleSheetContents* style
|
| for (unsigned i = 0; i < rules.size(); i++) {
|
| StyleRuleBase* rule = rules[i].get();
|
| if (!rule->isStyleRule()) {
|
| + if (rule->type() == StyleRule::Keyframes) {
|
| + m_addsKeyframes = true;
|
| + continue;
|
| + }
|
| if (ruleAdditionMightRequireDocumentStyleRecalc(rule)) {
|
| m_dirtiesAllStyle = true;
|
| return;
|
| @@ -160,6 +165,9 @@ void StyleSheetInvalidationAnalysis::invalidateStyle()
|
| {
|
| ASSERT(!m_dirtiesAllStyle);
|
|
|
| + if (m_addsKeyframes)
|
| + m_treeScope->document().styleEngine().keyframesRulesAdded();
|
| +
|
| if (m_treeScope->rootNode().isShadowRoot()) {
|
| ContainerNode& shadowHost = toShadowRoot(m_treeScope->rootNode()).host();
|
| shadowHost.setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create(StyleChangeReason::StyleSheetChange));
|
|
|