Invalidate the shadow subtree style when slotted pseudo rules are present.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 2 Jun 2017 10:18:54 +0000 (10:18 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 2 Jun 2017 10:18:54 +0000 (10:18 +0000)
https://bugs.webkit.org/show_bug.cgi?id=172822

Patch by Emilio Cobos Álvarez <ecobos@igalia.com> on 2017-06-02
Reviewed by Antti Koivisto.

No new tests, this is tested by
fast/shadow-dom/css-scoping-slot-with-id.html, once we don't force an
Inherit style change for slots. I could add some more tests for stuff
with descendant combinators and similar I guess, though.

* style/AttributeChangeInvalidation.cpp:
(WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
* style/ClassChangeInvalidation.cpp:
(WebCore::Style::ClassChangeInvalidation::invalidateStyle):
* style/IdChangeInvalidation.cpp:
(WebCore::Style::IdChangeInvalidation::invalidateStyle):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@217708 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/style/AttributeChangeInvalidation.cpp
Source/WebCore/style/ClassChangeInvalidation.cpp
Source/WebCore/style/IdChangeInvalidation.cpp

index 7e44e0f..de817f2 100644 (file)
@@ -1,3 +1,22 @@
+2017-06-02  Emilio Cobos Álvarez  <ecobos@igalia.com>
+
+        Invalidate the shadow subtree style when slotted pseudo rules are present.
+        https://bugs.webkit.org/show_bug.cgi?id=172822
+
+        Reviewed by Antti Koivisto.
+
+        No new tests, this is tested by
+        fast/shadow-dom/css-scoping-slot-with-id.html, once we don't force an
+        Inherit style change for slots. I could add some more tests for stuff
+        with descendant combinators and similar I guess, though.
+
+        * style/AttributeChangeInvalidation.cpp:
+        (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
+        * style/ClassChangeInvalidation.cpp:
+        (WebCore::Style::ClassChangeInvalidation::invalidateStyle):
+        * style/IdChangeInvalidation.cpp:
+        (WebCore::Style::IdChangeInvalidation::invalidateStyle):
+
 2017-06-02  Miguel Gomez  <magomez@igalia.com>
 
         [GTK+][WPE] Allow TextureMapperShaderProgram to perform colorspace conversions with the source texture pixels
index a090a2a..128cc88 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "DocumentRuleSets.h"
 #include "ElementIterator.h"
+#include "HTMLSlotElement.h"
 #include "ShadowRoot.h"
 #include "StyleInvalidator.h"
 #include "StyleResolver.h"
@@ -97,6 +98,9 @@ void AttributeChangeInvalidation::invalidateStyle(const QualifiedName& attribute
     if (m_element.shadowRoot() && ruleSets.authorStyle().hasShadowPseudoElementRules())
         mayAffectShadowTree = true;
 
+    if (is<HTMLSlotElement>(m_element) && !ruleSets.authorStyle().slottedPseudoElementRules().isEmpty())
+        mayAffectShadowTree = true;
+
     if (mayAffectShadowTree) {
         m_element.invalidateStyleForSubtree();
         return;
index 961c0aa..8cdff65 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "DocumentRuleSets.h"
 #include "ElementChildIterator.h"
+#include "HTMLSlotElement.h"
 #include "ShadowRoot.h"
 #include "SpaceSplitString.h"
 #include "StyleInvalidator.h"
@@ -140,6 +141,9 @@ void ClassChangeInvalidation::invalidateStyle(const SpaceSplitString& oldClasses
     if (shadowRoot && ruleSets.authorStyle().hasShadowPseudoElementRules())
         mayAffectShadowTree = true;
 
+    if (is<HTMLSlotElement>(m_element) && !ruleSets.authorStyle().slottedPseudoElementRules().isEmpty())
+        mayAffectShadowTree = true;
+
     if (mayAffectShadowTree) {
         // FIXME: We should do fine-grained invalidation for shadow tree.
         m_element.invalidateStyleForSubtree();
index 826f25e..9f8f0ab 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "DocumentRuleSets.h"
 #include "ElementChildIterator.h"
+#include "HTMLSlotElement.h"
 #include "ShadowRoot.h"
 #include "StyleResolver.h"
 #include "StyleScope.h"
@@ -83,6 +84,9 @@ void IdChangeInvalidation::invalidateStyle(const AtomicString& changedId)
     if (m_element.shadowRoot() && ruleSets.authorStyle().hasShadowPseudoElementRules())
         mayAffectShadowTree = true;
 
+    if (is<HTMLSlotElement>(m_element) && !ruleSets.authorStyle().slottedPseudoElementRules().isEmpty())
+        mayAffectShadowTree = true;
+
     if (mayAffectShadowTree) {
         m_element.invalidateStyleForSubtree();
         return;