Title: [248297] trunk/Source/WebCore
Revision
248297
Author
[email protected]
Date
2019-08-06 09:18:05 -0700 (Tue, 06 Aug 2019)

Log Message

Add release assert against InvalidationRuleSet mutation during invalidation
https://bugs.webkit.org/show_bug.cgi?id=200467

Reviewed by Chris Dumez.

Try to get a more informative stack for rdar://problem/53413013

* css/DocumentRuleSets.cpp:
(WebCore::DocumentRuleSets::~DocumentRuleSets):
(WebCore::DocumentRuleSets::collectFeatures const):
* css/DocumentRuleSets.h:
* style/AttributeChangeInvalidation.cpp:
(WebCore::Style::AttributeChangeInvalidation::invalidateStyleWithRuleSets):
* style/ClassChangeInvalidation.cpp:
(WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (248296 => 248297)


--- trunk/Source/WebCore/ChangeLog	2019-08-06 16:08:18 UTC (rev 248296)
+++ trunk/Source/WebCore/ChangeLog	2019-08-06 16:18:05 UTC (rev 248297)
@@ -1,5 +1,23 @@
 2019-08-06  Antti Koivisto  <[email protected]>
 
+        Add release assert against InvalidationRuleSet mutation during invalidation
+        https://bugs.webkit.org/show_bug.cgi?id=200467
+
+        Reviewed by Chris Dumez.
+
+        Try to get a more informative stack for rdar://problem/53413013
+
+        * css/DocumentRuleSets.cpp:
+        (WebCore::DocumentRuleSets::~DocumentRuleSets):
+        (WebCore::DocumentRuleSets::collectFeatures const):
+        * css/DocumentRuleSets.h:
+        * style/AttributeChangeInvalidation.cpp:
+        (WebCore::Style::AttributeChangeInvalidation::invalidateStyleWithRuleSets):
+        * style/ClassChangeInvalidation.cpp:
+        (WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets):
+
+2019-08-06  Antti Koivisto  <[email protected]>
+
         REGRESSION: Cannot tap on any buttons on m.naver.com home screen on iPad
         https://bugs.webkit.org/show_bug.cgi?id=200466
 

Modified: trunk/Source/WebCore/css/DocumentRuleSets.cpp (248296 => 248297)


--- trunk/Source/WebCore/css/DocumentRuleSets.cpp	2019-08-06 16:08:18 UTC (rev 248296)
+++ trunk/Source/WebCore/css/DocumentRuleSets.cpp	2019-08-06 16:18:05 UTC (rev 248297)
@@ -37,6 +37,9 @@
 
 namespace WebCore {
 
+// For catching <rdar://problem/53413013>
+bool DocumentRuleSets::s_isInvalidatingStyleWithRuleSets { false };
+
 DocumentRuleSets::DocumentRuleSets(StyleResolver& styleResolver)
     : m_styleResolver(styleResolver)
 {
@@ -44,7 +47,10 @@
     m_authorStyle->disableAutoShrinkToFit();
 }
 
-DocumentRuleSets::~DocumentRuleSets() = default;
+DocumentRuleSets::~DocumentRuleSets()
+{
+    RELEASE_ASSERT(!s_isInvalidatingStyleWithRuleSets);
+}
 
 RuleSet* DocumentRuleSets::userAgentMediaQueryStyle() const
 {
@@ -148,6 +154,8 @@
 
 void DocumentRuleSets::collectFeatures() const
 {
+    RELEASE_ASSERT(!s_isInvalidatingStyleWithRuleSets);
+
     m_features.clear();
     // Collect all ids and rules using sibling selectors (:first-child and similar)
     // in the current set of stylesheets. Style sharing code uses this information to reject

Modified: trunk/Source/WebCore/css/DocumentRuleSets.h (248296 => 248297)


--- trunk/Source/WebCore/css/DocumentRuleSets.h	2019-08-06 16:08:18 UTC (rev 248296)
+++ trunk/Source/WebCore/css/DocumentRuleSets.h	2019-08-06 16:18:05 UTC (rev 248297)
@@ -76,6 +76,8 @@
 
     RuleFeatureSet& mutableFeatures();
 
+    static bool s_isInvalidatingStyleWithRuleSets;
+
 private:
     void collectFeatures() const;
     void collectRulesFromUserStyleSheets(const Vector<RefPtr<CSSStyleSheet>>&, RuleSet& userStyle, const MediaQueryEvaluator&, StyleResolver&);

Modified: trunk/Source/WebCore/style/AttributeChangeInvalidation.cpp (248296 => 248297)


--- trunk/Source/WebCore/style/AttributeChangeInvalidation.cpp	2019-08-06 16:08:18 UTC (rev 248296)
+++ trunk/Source/WebCore/style/AttributeChangeInvalidation.cpp	2019-08-06 16:18:05 UTC (rev 248297)
@@ -29,6 +29,7 @@
 #include "ElementIterator.h"
 #include "StyleInvalidationFunctions.h"
 #include "StyleInvalidator.h"
+#include <wtf/SetForScope.h>
 
 namespace WebCore {
 namespace Style {
@@ -88,6 +89,8 @@
 
 void AttributeChangeInvalidation::invalidateStyleWithRuleSets()
 {
+    SetForScope<bool> isInvalidating(DocumentRuleSets::s_isInvalidatingStyleWithRuleSets, true);
+
     for (auto* invalidationRuleSet : m_invalidationRuleSets) {
         Invalidator invalidator(*invalidationRuleSet->ruleSet);
         invalidator.invalidateStyleWithMatchElement(m_element, invalidationRuleSet->matchElement);

Modified: trunk/Source/WebCore/style/ClassChangeInvalidation.cpp (248296 => 248297)


--- trunk/Source/WebCore/style/ClassChangeInvalidation.cpp	2019-08-06 16:08:18 UTC (rev 248296)
+++ trunk/Source/WebCore/style/ClassChangeInvalidation.cpp	2019-08-06 16:18:05 UTC (rev 248297)
@@ -31,6 +31,7 @@
 #include "StyleInvalidationFunctions.h"
 #include "StyleInvalidator.h"
 #include <wtf/BitVector.h>
+#include <wtf/SetForScope.h>
 
 namespace WebCore {
 namespace Style {
@@ -119,6 +120,8 @@
 
 void ClassChangeInvalidation::invalidateStyleWithRuleSets()
 {
+    SetForScope<bool> isInvalidating(DocumentRuleSets::s_isInvalidatingStyleWithRuleSets, true);
+
     for (auto* invalidationRuleSet : m_invalidationRuleSets) {
         Invalidator invalidator(*invalidationRuleSet->ruleSet);
         invalidator.invalidateStyleWithMatchElement(m_element, invalidationRuleSet->matchElement);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to