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