Index: third_party/WebKit/Source/core/css/RuleFeature.cpp |
diff --git a/third_party/WebKit/Source/core/css/RuleFeature.cpp b/third_party/WebKit/Source/core/css/RuleFeature.cpp |
index 425fc784e8edda35effaefa7a2e2f052e23ff395..432c445437db3c1c448010e9d2ba9d6e0060bc42 100644 |
--- a/third_party/WebKit/Source/core/css/RuleFeature.cpp |
+++ b/third_party/WebKit/Source/core/css/RuleFeature.cpp |
@@ -173,7 +173,8 @@ bool supportsInvalidationWithSelectorList(CSSSelector::PseudoType pseudo) |
|| pseudo == CSSSelector::PseudoCue |
|| pseudo == CSSSelector::PseudoHost |
|| pseudo == CSSSelector::PseudoHostContext |
- || pseudo == CSSSelector::PseudoNot; |
+ || pseudo == CSSSelector::PseudoNot |
+ || pseudo == CSSSelector::PseudoSlotted; |
} |
#endif // ENABLE(ASSERT) |
@@ -194,6 +195,9 @@ bool requiresSubtreeInvalidation(const CSSSelector& selector) |
case CSSSelector::PseudoHostContext: |
// :host-context matches a shadow host, yet the simple selectors inside |
// :host-context matches an ancestor of the shadow host. |
+ case CSSSelector::PseudoSlotted: |
+ // TODO(kochi): This recalculates a bit more than necessary. Find out a way |
+ // to avoid unnecessary recalculation. |
return true; |
default: |
ASSERT(supportsInvalidation(selector.pseudoType())); |
@@ -473,7 +477,7 @@ void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector* selector, |
} else { |
if (current->isHostPseudoClass()) |
descendantFeatures.treeBoundaryCrossing = true; |
- if (current->isInsertionPointCrossing()) { |
+ if (current->isInsertionPointCrossing() || current->isSlottedPseudoElement()) { |
descendantFeatures.insertionPointCrossing = true; |
if (current->pseudoType() == CSSSelector::PseudoContent) |
descendantFeatures.contentPseudoCrossing = true; |