Title: [286972] trunk
Revision
286972
Author
an...@apple.com
Date
2021-12-13 12:38:56 -0800 (Mon, 13 Dec 2021)

Log Message

[CSS Cascade Layers] Layers specified in import rules can not be reordered on media query evaluation
https://bugs.webkit.org/show_bug.cgi?id=234158

Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

* web-platform-tests/css/css-cascade/layer-media-query-expected.txt:

Source/WebCore:

* style/RuleSetBuilder.cpp:
(WebCore::Style::RuleSetBuilder::addChildRules):
(WebCore::Style::RuleSetBuilder::addRulesFromSheetContents):

@import rules can introduce new layers so need to alse be considered for reordering by media queries
(which requires static evaluation).

(WebCore::Style::RuleSetBuilder::disallowDynamicMediaQueryEvaluationIfNeeded):

Factor into a function.

* style/RuleSetBuilder.h:

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (286971 => 286972)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-12-13 20:29:59 UTC (rev 286971)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-12-13 20:38:56 UTC (rev 286972)
@@ -1,3 +1,12 @@
+2021-12-13  Antti Koivisto  <an...@apple.com>
+
+        [CSS Cascade Layers] Layers specified in import rules can not be reordered on media query evaluation
+        https://bugs.webkit.org/show_bug.cgi?id=234158
+
+        Reviewed by Simon Fraser.
+
+        * web-platform-tests/css/css-cascade/layer-media-query-expected.txt:
+
 2021-12-13  Sergio Villar Senin  <svil...@igalia.com>
 
         [css-writing-modes] Use the correct margins in computeInlinePreferredLogicalWidths in orthogonal flows

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query-expected.txt (286971 => 286972)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query-expected.txt	2021-12-13 20:29:59 UTC (rev 286971)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query-expected.txt	2021-12-13 20:38:56 UTC (rev 286972)
@@ -7,5 +7,5 @@
 PASS C1 Reordering
 PASS C2 Reordering
 PASS C3 Reordering
-FAIL C4 Reordering assert_equals: C4 Reordering expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)"
+PASS C4 Reordering
 

Modified: trunk/Source/WebCore/ChangeLog (286971 => 286972)


--- trunk/Source/WebCore/ChangeLog	2021-12-13 20:29:59 UTC (rev 286971)
+++ trunk/Source/WebCore/ChangeLog	2021-12-13 20:38:56 UTC (rev 286972)
@@ -1,3 +1,23 @@
+2021-12-13  Antti Koivisto  <an...@apple.com>
+
+        [CSS Cascade Layers] Layers specified in import rules can not be reordered on media query evaluation
+        https://bugs.webkit.org/show_bug.cgi?id=234158
+
+        Reviewed by Simon Fraser.
+
+        * style/RuleSetBuilder.cpp:
+        (WebCore::Style::RuleSetBuilder::addChildRules):
+        (WebCore::Style::RuleSetBuilder::addRulesFromSheetContents):
+
+        @import rules can introduce new layers so need to alse be considered for reordering by media queries
+        (which requires static evaluation).
+
+        (WebCore::Style::RuleSetBuilder::disallowDynamicMediaQueryEvaluationIfNeeded):
+
+        Factor into a function.
+
+        * style/RuleSetBuilder.h:
+
 2021-12-13  Chris Dumez  <cdu...@apple.com>
 
         Regression(r283565) Unable to report private messages as Spam in Twitter app

Modified: trunk/Source/WebCore/style/RuleSetBuilder.cpp (286971 => 286972)


--- trunk/Source/WebCore/style/RuleSetBuilder.cpp	2021-12-13 20:29:59 UTC (rev 286971)
+++ trunk/Source/WebCore/style/RuleSetBuilder.cpp	2021-12-13 20:38:56 UTC (rev 286972)
@@ -110,8 +110,7 @@
             continue;
         }
         if (is<StyleRuleLayer>(*rule)) {
-            if (!m_ruleSet && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
-                requiresStaticMediaQueryEvaluation = true;
+            disallowDynamicMediaQueryEvaluationIfNeeded();
 
             auto& layerRule = downcast<StyleRuleLayer>(*rule);
             if (layerRule.isStatement()) {
@@ -126,8 +125,7 @@
             continue;
         }
         if (is<StyleRuleFontFace>(*rule) || is<StyleRuleFontPaletteValues>(*rule) || is<StyleRuleKeyframes>(*rule)) {
-            if (!m_ruleSet && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
-                requiresStaticMediaQueryEvaluation = true;
+            disallowDynamicMediaQueryEvaluationIfNeeded();
 
             if (m_resolver)
                 m_collectedResolverMutatingRules.append({ *rule, m_currentCascadeLayerIdentifier });
@@ -151,8 +149,10 @@
 
         if (m_mediaQueryCollector.pushAndEvaluate(rule->mediaQueries())) {
             auto& cascadeLayerName = rule->cascadeLayerName();
-            if (cascadeLayerName)
+            if (cascadeLayerName) {
+                disallowDynamicMediaQueryEvaluationIfNeeded();
                 pushCascadeLayer(*cascadeLayerName);
+            }
 
             addRulesFromSheetContents(*rule->styleSheet());
 
@@ -181,6 +181,13 @@
     }
 }
 
+void RuleSetBuilder::disallowDynamicMediaQueryEvaluationIfNeeded()
+{
+    bool isScanningForDynamicEvaluation = !m_ruleSet;
+    if (isScanningForDynamicEvaluation && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
+        requiresStaticMediaQueryEvaluation = true;
+}
+
 void RuleSetBuilder::registerLayers(const Vector<CascadeLayerName>& names)
 {
     for (auto& name : names) {

Modified: trunk/Source/WebCore/style/RuleSetBuilder.h (286971 => 286972)


--- trunk/Source/WebCore/style/RuleSetBuilder.h	2021-12-13 20:29:59 UTC (rev 286971)
+++ trunk/Source/WebCore/style/RuleSetBuilder.h	2021-12-13 20:38:56 UTC (rev 286972)
@@ -40,6 +40,7 @@
     void addRulesFromSheetContents(const StyleSheetContents&);
     void addChildRules(const Vector<RefPtr<StyleRuleBase>>&);
     void addStyleRule(const StyleRule&);
+    void disallowDynamicMediaQueryEvaluationIfNeeded();
 
     void registerLayers(const Vector<CascadeLayerName>&);
     void pushCascadeLayer(const CascadeLayerName&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to