Title: [284859] trunk
Revision
284859
Author
[email protected]
Date
2021-10-26 01:30:46 -0700 (Tue, 26 Oct 2021)

Log Message

[CSS Cascade Layers] Media queries should be able to affect layer order
https://bugs.webkit.org/show_bug.cgi?id=232238

Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

Also import some additional @layer WPTs.

* web-platform-tests/css/css-cascade/layer-media-query-expected.txt: Added.
* web-platform-tests/css/css-cascade/layer-media-query.html: Added.
* web-platform-tests/css/css-cascade/revert-layer-001-expected.xht: Added.
* web-platform-tests/css/css-cascade/revert-layer-001.html: Added.
* web-platform-tests/css/css-cascade/revert-layer-002-expected.xht: Added.
* web-platform-tests/css/css-cascade/revert-layer-002.html: Added.
* web-platform-tests/css/css-cascade/revert-layer-003-expected.xht: Added.
* web-platform-tests/css/css-cascade/revert-layer-003.html: Added.
* web-platform-tests/css/css-cascade/revert-layer-004-expected.xht: Added.
* web-platform-tests/css/css-cascade/revert-layer-004.html: Added.
* web-platform-tests/css/css-cascade/revert-layer-005-expected.xht: Added.
* web-platform-tests/css/css-cascade/revert-layer-005.html: Added.
* web-platform-tests/css/css-cascade/revert-layer-006-expected.xht: Added.
* web-platform-tests/css/css-cascade/revert-layer-006.html: Added.
* web-platform-tests/css/css-cascade/revert-layer-007-expected.xht: Added.
* web-platform-tests/css/css-cascade/revert-layer-007.html: Added.
* web-platform-tests/css/css-cascade/revert-layer-008-expected.txt: Added.
* web-platform-tests/css/css-cascade/revert-layer-008.html: Added.
* web-platform-tests/css/css-cascade/w3c-import.log:

Source/WebCore:

Cases like

@media (min-width: 500px) { @layer a, b; }
@media (min-width: 200px) { @layer b, a; }

should work as expected.

Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html

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

Disable dynamic media query evaluation for now when we see a @layer rule within a media query.

* style/RuleSetBuilder.h:

Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html

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

LayoutTests:

* TestExpectations:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (284858 => 284859)


--- trunk/LayoutTests/ChangeLog	2021-10-26 07:36:09 UTC (rev 284858)
+++ trunk/LayoutTests/ChangeLog	2021-10-26 08:30:46 UTC (rev 284859)
@@ -1,3 +1,12 @@
+2021-10-26  Antti Koivisto  <[email protected]>
+
+        [CSS Cascade Layers] Media queries should be able to affect layer order
+        https://bugs.webkit.org/show_bug.cgi?id=232238
+
+        Reviewed by Simon Fraser.
+
+        * TestExpectations:
+
 2021-10-25  Ryan Haddad  <[email protected]>
 
         Change default iOS simulator to one with a larger screen size

Modified: trunk/LayoutTests/TestExpectations (284858 => 284859)


--- trunk/LayoutTests/TestExpectations	2021-10-26 07:36:09 UTC (rev 284858)
+++ trunk/LayoutTests/TestExpectations	2021-10-26 08:30:46 UTC (rev 284859)
@@ -2121,6 +2121,13 @@
 
 imported/w3c/web-platform-tests/css/css-cascade/important-prop.html [ ImageOnlyFailure ]
 webkit.org/b/187093 [ Debug ] imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml.html [ Skip ]
+webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001.html [ ImageOnlyFailure ]
+webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002.html [ ImageOnlyFailure ]
+webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003.html [ ImageOnlyFailure ]
+webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004.html [ ImageOnlyFailure ]
+webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005.html [ ImageOnlyFailure ]
+webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006.html [ ImageOnlyFailure ]
+webkit.org/b/232236 imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007.html [ ImageOnlyFailure ]
 
 webkit.org/b/148801 imported/w3c/web-platform-tests/css/css-color/t422-rgba-onscreen-b.xht [ ImageOnlyFailure ]
 webkit.org/b/148801 imported/w3c/web-platform-tests/css/css-color/t422-rgba-onscreen-multiple-boxes-c.xht [ ImageOnlyFailure ]

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (284858 => 284859)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-10-26 07:36:09 UTC (rev 284858)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-10-26 08:30:46 UTC (rev 284859)
@@ -1,3 +1,32 @@
+2021-10-26  Antti Koivisto  <[email protected]>
+
+        [CSS Cascade Layers] Media queries should be able to affect layer order
+        https://bugs.webkit.org/show_bug.cgi?id=232238
+
+        Reviewed by Simon Fraser.
+
+        Also import some additional @layer WPTs.
+
+        * web-platform-tests/css/css-cascade/layer-media-query-expected.txt: Added.
+        * web-platform-tests/css/css-cascade/layer-media-query.html: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-001-expected.xht: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-001.html: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-002-expected.xht: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-002.html: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-003-expected.xht: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-003.html: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-004-expected.xht: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-004.html: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-005-expected.xht: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-005.html: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-006-expected.xht: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-006.html: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-007-expected.xht: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-007.html: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-008-expected.txt: Added.
+        * web-platform-tests/css/css-cascade/revert-layer-008.html: Added.
+        * web-platform-tests/css/css-cascade/w3c-import.log:
+
 2021-10-25  Nikolaos Mouchtaris  <[email protected]>
 
         Fix issue for transform-origin in SVG

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query-expected.txt (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query-expected.txt	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,10 @@
+
+
+PASS A1 Basic
+PASS A2 Basic
+PASS B1 Basic import
+PASS B2 Basic import
+PASS C1 Reordering
+PASS C2 Reordering
+PASS C3 Reordering
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>CSS Cascade Layers: Media queries</title>
+<meta name="assert" content="Import functionality of CSS Cascade Layers">
+<link rel="author" title="Antti Koivisto" href=""
+<link rel="help" href=""
+<script src=""
+<script src=""
+</head>
+<body>
+<iframe width=300 height=300 frameborder=0></iframe>
+<div id="log"></div>
+<script>
+
+const imports = {
+    "basic-green.css": `
+        target { color: green; }
+    `,
+    "basic-red.css": `
+        target { color: red; }
+    `,
+};
+
+// For 300px wide iframe the target should be red and for 500px green.
+const testCases = [
+    {
+        title: 'A1 Basic',
+        style: `
+            @layer { target { color: red } }
+            @media (min-width: 500px) {
+                @layer {
+                    target { color: green; }
+                }
+            }
+        `
+    },
+    {
+        title: 'A2 Basic',
+        style: `
+            @media (min-width: 500px) {
+                @layer {
+                    target { color: green; }
+                }
+            }
+            @media (max-width: 300px) {
+                @layer {
+                    target { color: red; }
+                }
+            }
+        `
+    },
+    {
+        title: 'B1 Basic import',
+        style: `
+            @import url(basic-red.css) layer;
+            @import url(basic-green.css) layer (min-width: 500px);
+        `
+    },
+    {
+        title: 'B2 Basic import',
+        style: `
+            @import url(basic-green.css) layer (min-width: 500px);
+            @import url(basic-red.css) layer (max-width: 300px);
+        `
+    },
+    {
+        title: 'C1 Reordering',
+        style: `
+            @media (max-width: 300px) {
+                @layer B {
+                    target { color: green; }
+                }
+                @layer A {
+                    target { color: red; }
+                }
+            }
+            @media (min-width: 500px) {
+                @layer A {
+                    target { color: red; }
+                }
+                @layer B {
+                    target { color: green; }
+                }
+            }
+        `
+    },
+    {
+        title: 'C2 Reordering',
+        style: `
+            @media (max-width: 300px) {
+                @layer B { }
+                @layer A { target { color: red; } }
+            }
+            @media (min-width: 500px) {
+                @layer A { target { color: red; } }
+                @layer B { }
+            }
+            @layer B {
+                target { color: green; }
+            }
+        `
+    },
+    {
+        title: 'C3 Reordering',
+        style: `
+            @media (max-width: 300px) {
+                @layer B, A;
+            }
+            @media (min-width: 500px) {
+                @layer A, B;
+            }
+            @layer A {
+                target { color: red; }
+            }
+            @layer B {
+                target { color: green; }
+            }
+        `
+    },
+];
+
+let iframe = document.querySelector("iframe");
+
+for (let testCase of testCases) {
+    promise_test(async t => {
+        const styleText = testCase['style'].replaceAll(/url\((.+?)\)/g, (match, p1) => {
+            return `url(data:text/css,${ encodeURI(imports[p1]) })`;
+        });
+
+        iframe.width = 300;
+
+        await new Promise(resolve => {
+            iframe._onload_ = resolve;
+            iframe.srcdoc = `
+                <style>
+                ${styleText}
+                </style>
+                <target></target>
+            `;
+        });
+
+        const target = iframe.contentDocument.querySelector('target');
+        assert_equals(getComputedStyle(target).color, 'rgb(255, 0, 0)', testCase['title']);
+
+        iframe.width = 500;
+
+        assert_equals(getComputedStyle(target).color, 'rgb(0, 128, 0)', testCase['title']);
+    }, testCase['title']);
+}
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001-expected.xht (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001-expected.xht	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001-expected.xht	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Gérard Talbot" href="" />
+  <style type="text/css"><![CDATA[
+  div
+  {
+  background-color: green;
+  height: 100px;
+  width: 100px;
+  }
+  ]]></style>
+ </head>
+ <body>
+  <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+  <div></div>
+ </body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<title>CSS Cascade Layers: 'revert-layer' from one explicit layer to another</title>
+<link rel="help" href=""
+<link rel="author" href=""
+<link rel="match" href=""
+
+<style>
+#target {
+  width: 100px;
+  height: 100px;
+}
+
+@layer {
+  #target { background-color: green; }
+}
+
+@layer {
+  #target {
+    background-color: red;
+    background-color: revert-layer;
+  }
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div id="target"></div>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002-expected.xht (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002-expected.xht	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002-expected.xht	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Gérard Talbot" href="" />
+  <style type="text/css"><![CDATA[
+  div
+  {
+  background-color: green;
+  height: 100px;
+  width: 100px;
+  }
+  ]]></style>
+ </head>
+ <body>
+  <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+  <div></div>
+ </body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<title>CSS Cascade Layers: 'revert-layer' from the implicit outer layer to explicit</title>
+<link rel="help" href=""
+<link rel="author" href=""
+<link rel="match" href=""
+
+<style>
+#target {
+  width: 100px;
+  height: 100px;
+}
+
+@layer {
+  #target { background-color: green; }
+}
+
+#target {
+  background-color: red;
+  background-color: revert-layer;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div id="target"></div>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003-expected.xht (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003-expected.xht	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003-expected.xht	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Gérard Talbot" href="" />
+  <style type="text/css"><![CDATA[
+  div
+  {
+  background-color: green;
+  height: 100px;
+  width: 100px;
+  }
+  ]]></style>
+ </head>
+ <body>
+  <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+  <div></div>
+ </body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<title>CSS Cascade Layers: 'all: revert-layer'</title>
+<link rel="help" href=""
+<link rel="author" href=""
+<link rel="match" href=""
+
+<style>
+@layer {
+  #target {
+    width: 100px;
+    height: 100px;
+    background-color: green;
+  }
+}
+
+@layer {
+  #target {
+    width: 200px;
+    height: 200px;
+    background-color: red;
+  }
+
+  #target {
+    all: revert-layer;
+  }
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div id="target"></div>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004-expected.xht (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004-expected.xht	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004-expected.xht	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Gérard Talbot" href="" />
+  <style type="text/css"><![CDATA[
+  div
+  {
+  background-color: green;
+  height: 100px;
+  width: 100px;
+  }
+  ]]></style>
+ </head>
+ <body>
+  <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+  <div></div>
+ </body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<title>CSS Cascade Layers: 'revert-layer' to previous context</title>
+<link rel="help" href=""
+<link rel="author" href=""
+<link rel="match" href=""
+
+<style>
+#target {
+  width: 100px;
+  height: 100px;
+  background-color: red;
+  background-color: revert-layer;
+}
+
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div id="target"></div>
+
+<script>
+target.attachShadow({mode: 'open'}).innerHTML = `
+<style>
+:host {
+  background-color: green;
+}
+</style>
+`;
+</script>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005-expected.xht (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005-expected.xht	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005-expected.xht	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Gérard Talbot" href="" />
+  <style type="text/css"><![CDATA[
+  div
+  {
+  background-color: green;
+  height: 100px;
+  width: 100px;
+  }
+  ]]></style>
+ </head>
+ <body>
+  <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+  <div></div>
+ </body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>CSS Cascade Layers: important 'revert-layer'</title>
+<link rel="help" href=""
+<link rel="author" href=""
+<link rel="match" href=""
+
+<style>
+#target {
+  width: 100px;
+  height: 100px;
+}
+
+@layer {
+  #target { background-color: green; }
+}
+
+@layer {
+  #target {
+    background-color: red;
+    background-color: red !important;
+    background-color: revert-layer !important;
+  }
+}
+
+@layer {
+  #target {
+    background-color: red;
+    background-color: red !important;
+  }
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div id="target"></div>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006-expected.xht (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006-expected.xht	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006-expected.xht	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Gérard Talbot" href="" />
+  <style type="text/css"><![CDATA[
+  div
+  {
+  background-color: green;
+  height: 100px;
+  width: 100px;
+  }
+  ]]></style>
+ </head>
+ <body>
+  <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+  <div></div>
+ </body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>CSS Cascade Layers: 'revert-layer' reverts origin when no lower priority declarations in the same origin</title>
+<link rel="help" href=""
+<link rel="author" href=""
+<link rel="match" href=""
+
+<style>
+#outer {
+  background-color: red;
+  width: 100px;
+  height: 100px;
+  overflow: hidden;
+}
+#inner {
+  color: green;
+  background-color: green;
+  display: inline;
+  display: revert-layer; /* This should behave as 'revert', setting 'display' to 'block' */
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div id="outer">
+  <div id="inner">
+    This<br>
+    is<br>
+    filler<br>
+    text.<br>
+    This<br>
+    is<br>
+    filler<br>
+    text.
+  </div>
+</div>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007-expected.xht (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007-expected.xht	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007-expected.xht	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <title>CSS Reftest Reference</title>
+  <link rel="author" title="Gérard Talbot" href="" />
+  <style type="text/css"><![CDATA[
+  div
+  {
+  background-color: green;
+  height: 100px;
+  width: 100px;
+  }
+  ]]></style>
+ </head>
+ <body>
+  <p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+  <div></div>
+ </body>
+</html>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<title>CSS Cascade Layers: 'revert-layer' chain</title>
+<link rel="help" href=""
+<link rel="author" href=""
+<link rel="match" href=""
+
+<style>
+#target {
+  width: 100px;
+  height: 100px;
+}
+
+@layer {
+  #target { background-color: green; }
+}
+
+@layer {
+  #target {
+    background-color: red;
+    background-color: revert-layer;
+  }
+}
+
+@layer {
+  #target {
+    background-color: red;
+    background-color: revert-layer;
+  }
+}
+
+@layer {
+  #target {
+    background-color: red;
+    background-color: revert-layer;
+  }
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div id="target"></div>

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-008-expected.txt (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-008-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-008-expected.txt	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,3 @@
+
+FAIL 'revert-layer' should revert font-size to 20px and trigger a smooth transition assert_equals: expected "15px" but got "10px"
+

Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-008.html (0 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-008.html	                        (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-008.html	2021-10-26 08:30:46 UTC (rev 284859)
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<title>CSS Cascade Layers: 'revert-layer' triggers a smooth transition</title>
+<link rel="help" href=""
+<link rel="author" href=""
+<script src=""
+<script src=""
+
+<style>
+@layer revert-to, revert-from;
+
+@layer revert-from {
+  #target {
+    font-size: 10px;
+    transition: font-size 2s linear -1s;
+  }
+
+  #target.reverted {
+    font-size: revert-layer;
+  }
+}
+
+@layer revert-to {
+  #target { font-size: 20px; }
+}
+</style>
+
+<div id="target"></div>
+
+<script>
+function raf() {
+  return new Promise(resolve => requestAnimationFrame(resolve));
+}
+promise_test(async () => {
+  await raf();
+  const target = document.getElementById('target');
+  target.classList.toggle('reverted');
+
+  const result = getComputedStyle(target).getPropertyValue('font-size');
+  assert_equals(result, '15px');
+}, "'revert-layer' should revert font-size to 20px and trigger a smooth transition");
+</script>

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/w3c-import.log (284858 => 284859)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/w3c-import.log	2021-10-26 07:36:09 UTC (rev 284858)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/w3c-import.log	2021-10-26 08:30:46 UTC (rev 284859)
@@ -48,6 +48,7 @@
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-font-face-override.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-import.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-keyframes-override.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-stylesheet-sharing-expected.html
@@ -54,6 +55,21 @@
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-stylesheet-sharing.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-vs-inline-style.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001-expected.xht
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-001.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002-expected.xht
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-002.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003-expected.xht
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-003.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004-expected.xht
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-004.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005-expected.xht
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-005.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006-expected.xht
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-006.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007-expected.xht
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-007.html
+/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-layer-008.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-val-001-expected.xht
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-val-001.html
 /LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/revert-val-002-expected.xht

Modified: trunk/Source/WebCore/ChangeLog (284858 => 284859)


--- trunk/Source/WebCore/ChangeLog	2021-10-26 07:36:09 UTC (rev 284858)
+++ trunk/Source/WebCore/ChangeLog	2021-10-26 08:30:46 UTC (rev 284859)
@@ -1,3 +1,34 @@
+2021-10-26  Antti Koivisto  <[email protected]>
+
+        [CSS Cascade Layers] Media queries should be able to affect layer order
+        https://bugs.webkit.org/show_bug.cgi?id=232238
+
+        Reviewed by Simon Fraser.
+
+        Cases like
+
+        @media (min-width: 500px) { @layer a, b; }
+        @media (min-width: 200px) { @layer b, a; }
+
+        should work as expected.
+
+        Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html
+
+        * style/RuleSetBuilder.cpp:
+        (WebCore::Style::RuleSetBuilder::addRulesFromSheet):
+        (WebCore::Style::RuleSetBuilder::addChildRules):
+
+        Disable dynamic media query evaluation for now when we see a @layer rule within a media query.
+
+        * style/RuleSetBuilder.h:
+
+        Tests: imported/w3c/web-platform-tests/css/css-cascade/layer-media-query.html
+
+        * style/RuleSetBuilder.cpp:
+        (WebCore::Style::RuleSetBuilder::addRulesFromSheet):
+        (WebCore::Style::RuleSetBuilder::addChildRules):
+        * style/RuleSetBuilder.h:
+
 2021-10-26  Adrian Perez de Castro  <[email protected]>
 
         Multiple build issues with ENABLE_VIDEO=OFF

Modified: trunk/Source/WebCore/style/RuleSetBuilder.cpp (284858 => 284859)


--- trunk/Source/WebCore/style/RuleSetBuilder.cpp	2021-10-26 07:36:09 UTC (rev 284858)
+++ trunk/Source/WebCore/style/RuleSetBuilder.cpp	2021-10-26 08:30:46 UTC (rev 284859)
@@ -67,19 +67,19 @@
 
 void RuleSetBuilder::addRulesFromSheet(const StyleSheetContents& sheet, const MediaQuerySet* sheetQuery)
 {
-    auto canUseDynamicMediaQueryResolution = [&] {
+    auto canUseDynamicMediaQueryEvaluation = [&] {
         if (!m_resolver)
             return false;
 
-        RuleSetBuilder mutationScanner(m_mediaQueryCollector.evaluator);
-        if (mutationScanner.m_mediaQueryCollector.pushAndEvaluate(sheetQuery))
-            mutationScanner.addRulesFromSheetContents(sheet);
-        mutationScanner.m_mediaQueryCollector.pop(sheetQuery);
+        RuleSetBuilder dynamicEvaluationScanner(m_mediaQueryCollector.evaluator);
+        if (dynamicEvaluationScanner.m_mediaQueryCollector.pushAndEvaluate(sheetQuery))
+            dynamicEvaluationScanner.addRulesFromSheetContents(sheet);
+        dynamicEvaluationScanner.m_mediaQueryCollector.pop(sheetQuery);
 
-        return !mutationScanner.didSeeResolverMutationWithinDynamicMediaQuery;
+        return !dynamicEvaluationScanner.requiresStaticMediaQueryEvaluation;
     };
 
-    m_mediaQueryCollector.collectDynamic = canUseDynamicMediaQueryResolution();
+    m_mediaQueryCollector.collectDynamic = canUseDynamicMediaQueryEvaluation();
 
     if (m_mediaQueryCollector.pushAndEvaluate(sheetQuery))
         addRulesFromSheetContents(sheet);
@@ -89,7 +89,7 @@
 void RuleSetBuilder::addChildRules(const Vector<RefPtr<StyleRuleBase>>& rules)
 {
     for (auto& rule : rules) {
-        if (didSeeResolverMutationWithinDynamicMediaQuery)
+        if (requiresStaticMediaQueryEvaluation)
             return;
 
         if (is<StyleRule>(*rule)) {
@@ -110,6 +110,9 @@
             continue;
         }
         if (is<StyleRuleLayer>(*rule)) {
+            if (!m_ruleSet && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
+                requiresStaticMediaQueryEvaluation = true;
+
             auto& layerRule = downcast<StyleRuleLayer>(*rule);
             if (layerRule.isStatement()) {
                 // Statement syntax just registers the layers.
@@ -124,7 +127,7 @@
         }
         if (is<StyleRuleFontFace>(*rule) || is<StyleRuleFontPaletteValues>(*rule) || is<StyleRuleKeyframes>(*rule)) {
             if (!m_ruleSet && !m_mediaQueryCollector.dynamicContextStack.isEmpty())
-                didSeeResolverMutationWithinDynamicMediaQuery = true;
+                requiresStaticMediaQueryEvaluation = true;
 
             if (m_resolver)
                 m_collectedResolverMutatingRules.append({ *rule, m_currentCascadeLayerIdentifier });

Modified: trunk/Source/WebCore/style/RuleSetBuilder.h (284858 => 284859)


--- trunk/Source/WebCore/style/RuleSetBuilder.h	2021-10-26 07:36:09 UTC (rev 284858)
+++ trunk/Source/WebCore/style/RuleSetBuilder.h	2021-10-26 08:30:46 UTC (rev 284859)
@@ -79,7 +79,7 @@
     RuleSet::CascadeLayerIdentifier m_currentCascadeLayerIdentifier { 0 };
 
     Vector<RuleSet::ResolverMutatingRule> m_collectedResolverMutatingRules;
-    bool didSeeResolverMutationWithinDynamicMediaQuery { false };
+    bool requiresStaticMediaQueryEvaluation { false };
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to