Diff
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2021-10-14 18:37:42 UTC (rev 284182)
@@ -1,3 +1,25 @@
+2021-10-14 Antti Koivisto <[email protected]>
+
+ [CSS Cascade Layers] Layer should have higher priority than its descendant layers
+ https://bugs.webkit.org/show_bug.cgi?id=231725
+
+ Reviewed by Simon Fraser.
+
+ Update from the WPT repo.
+
+ * web-platform-tests/css/css-cascade/layer-basic.html:
+ * web-platform-tests/css/css-cascade/layer-counter-style-override-expected.txt:
+ * web-platform-tests/css/css-cascade/layer-counter-style-override.html:
+ * web-platform-tests/css/css-cascade/layer-font-face-override.html:
+ * web-platform-tests/css/css-cascade/layer-import.html:
+ * web-platform-tests/css/css-cascade/layer-keyframes-override.html:
+ * web-platform-tests/css/css-cascade/layer-property-override-expected.txt:
+ * web-platform-tests/css/css-cascade/layer-property-override.html:
+ * web-platform-tests/css/css-cascade/layer-scroll-timeline-override-expected.txt:
+ * web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html:
+ * web-platform-tests/css/css-cascade/presentational-hints-cascade-expected.txt:
+ * web-platform-tests/css/css-cascade/presentational-hints-cascade.html:
+
2021-10-14 Tim Nguyen <[email protected]>
Don't run focusing steps on disconnected or inert <dialog>
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-basic.html (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-basic.html 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-basic.html 2021-10-14 18:37:42 UTC (rev 284182)
@@ -56,9 +56,9 @@
title: 'A5 Anonymous layers',
style: `
@layer {
- target { color: red; }
+ target { color: green; }
@layer {
- target { color: green; }
+ target { color: red; }
}
}
`,
@@ -68,9 +68,9 @@
style: `
@layer {
@layer {
- target { color: green; }
+ target { color: red; }
}
- target { color: red; }
+ target { color: green; }
}
`,
},
@@ -85,9 +85,9 @@
}
@layer {
@layer {
- target { color: green; }
+ target { color: red; }
}
- target { color: red; }
+ target { color: green; }
}
`,
},
@@ -104,9 +104,9 @@
}
@layer {
@layer {
- target { color: green; }
+ target { color: red; }
}
- target { color: red; }
+ target { color: green; }
}
`,
},
@@ -122,10 +122,10 @@
@layer {
@layer {
@layer {
- target { color: green; }
+ target { color: red; }
}
}
- target { color: red; }
+ target { color: green; }
}
`,
},
@@ -175,9 +175,9 @@
title: 'B5 Named layers',
style: `
@layer A {
- target { color: red; }
+ target { color: green; }
@layer A {
- target { color: green; }
+ target { color: red; }
}
}
`,
@@ -362,11 +362,11 @@
style: `
@layer A {
@layer {
- target { color: green; }
+ target { color: red; }
}
}
@layer A {
- target { color: red; }
+ target { color: green; }
}
`,
},
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override-expected.txt (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override-expected.txt 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override-expected.txt 2021-10-14 18:37:42 UTC (rev 284182)
@@ -1,5 +1,5 @@
-FAIL @counter-style layered overrides unlayered assert_equals: expected "31.21875px" but got "0px"
+FAIL @counter-style unlayered overrides layered assert_equals: expected "31.21875px" but got "0px"
FAIL @counter-style override between layers assert_equals: expected "31.21875px" but got "6px"
FAIL @counter-style override update with appended sheet 1 assert_equals: expected "31.21875px" but got "6px"
FAIL @counter-style override update with appended sheet 2 assert_equals: expected "31.21875px" but got "6px"
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override.html (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override.html 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override.html 2021-10-14 18:37:42 UTC (rev 284182)
@@ -35,21 +35,21 @@
const testCases = [
{
- title: '@counter-style layered overrides unlayered',
+ title: '@counter-style unlayered overrides layered',
style: `
#target::before {
content: counter(dont-care, custom-counter-style);
}
+ @counter-style custom-counter-style {
+ system: extends four;
+ }
+
@layer {
@counter-style custom-counter-style {
- system: extends four;
+ system: extends three;
}
}
-
- @counter-style custom-counter-style {
- system: extends three;
- }
`
},
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-font-face-override.html (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-font-face-override.html 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-font-face-override.html 2021-10-14 18:37:42 UTC (rev 284182)
@@ -24,6 +24,11 @@
font-family: custom-font;
}
+ @font-face {
+ font-family: custom-font;
+ src: url('/fonts/Ahem.ttf');
+ }
+
@layer {
@font-face {
font-family: custom-font;
@@ -30,11 +35,6 @@
src: url('/fonts/noto/noto-sans-v8-latin-regular.woff') format('woff');
}
}
-
- @font-face {
- font-family: custom-font;
- src: url('/fonts/Ahem.ttf');
- }
`
},
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-import.html (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-import.html 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-import.html 2021-10-14 18:37:42 UTC (rev 284182)
@@ -145,9 +145,9 @@
{
title: 'C4 Named imports',
style: `
- @import url(layer-green.css) layer(A);
+ @import url(layer-red.css) layer(A);
@layer A {
- target { color: red; }
+ target { color: green; }
}
`
},
@@ -192,8 +192,8 @@
title: 'C9 Named imports',
style: `
@import url(basic-red.css) layer(A);
- @import url(basic-green.css) layer(B.A);
- @import url(basic-red.css) layer(B);
+ @import url(basic-red.css) layer(B.A);
+ @import url(basic-green.css) layer(B);
`
},
{
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-keyframes-override.html (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-keyframes-override.html 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-keyframes-override.html 2021-10-14 18:37:42 UTC (rev 284182)
@@ -29,15 +29,15 @@
animation: anim 1s paused;
}
+ @keyframes anim {
+ from { background-color: green; }
+ }
+
@layer {
@keyframes anim {
from { background-color: red; }
}
}
-
- @keyframes anim {
- from { background-color: green; }
- }
`
},
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override-expected.txt (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override-expected.txt 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override-expected.txt 2021-10-14 18:37:42 UTC (rev 284182)
@@ -1,5 +1,5 @@
-FAIL @property layered overrides unlayered assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
+FAIL @property unlayered overrides layered assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
FAIL @property override between layers assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
FAIL @property override update with appended sheet 1 assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
FAIL @property override update with appended sheet 2 assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override.html (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override.html 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override.html 2021-10-14 18:37:42 UTC (rev 284182)
@@ -23,26 +23,26 @@
const testCases = [
{
- title: '@property layered overrides unlayered',
+ title: '@property unlayered overrides layered',
style: `
#target {
background-color: var(--foo);
}
+ @property --foo {
+ syntax: '<color>';
+ inherits: false;
+ initial-value: green;
+ }
+
@layer {
@property --foo {
syntax: '<color>';
inherits: false;
- initial-value: green;
+ initial-value: red;
}
}
-
- @property --foo {
- syntax: '<color>';
- inherits: false;
- initial-value: red;
- }
- `
+ `
},
{
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override-expected.txt (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override-expected.txt 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override-expected.txt 2021-10-14 18:37:42 UTC (rev 284182)
@@ -1,5 +1,5 @@
-FAIL @scroll-timeline layered overrides unlayered assert_true: This test requires @scroll-timeline support expected true got false
+FAIL @scroll-timeline unlayered overrides layered assert_true: This test requires @scroll-timeline support expected true got false
FAIL @scroll-timeline override between layers assert_true: This test requires @scroll-timeline support expected true got false
FAIL @scroll-timeline override update with appended sheet 1 assert_true: This test requires @scroll-timeline support expected true got false
FAIL @scroll-timeline override update with appended sheet 2 assert_true: This test requires @scroll-timeline support expected true got false
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html 2021-10-14 18:37:42 UTC (rev 284182)
@@ -46,25 +46,25 @@
const testCases = [
{
- title: '@scroll-timeline layered overrides unlayered',
+ title: '@scroll-timeline unlayered overrides layered',
style: `
#target {
animation-timeline: timeline;
}
+ @scroll-timeline timeline {
+ source: selector(#scroller);
+ start: 0px;
+ end: 50px;
+ }
+
@layer {
@scroll-timeline timeline {
source: selector(#scroller);
start: 0px;
- end: 50px;
+ end: 100px;
}
}
-
- @scroll-timeline timeline {
- source: selector(#scroller);
- start: 0px;
- end: 100px;
- }
`
},
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade-expected.txt (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade-expected.txt 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade-expected.txt 2021-10-14 18:37:42 UTC (rev 284182)
@@ -2,4 +2,5 @@
PASS Presentational hints have lower precedence than regular author style sheets
PASS Presentational hints have lower precedence than the style attribute
+PASS Presentational hints have lower precedence than layered style
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade.html (284181 => 284182)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade.html 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade.html 2021-10-14 18:37:42 UTC (rev 284182)
@@ -12,10 +12,17 @@
#target1 {
width: 100px;
}
+
+@layer {
+ #target3 {
+ width: 100px;
+ }
+}
</style>
<img class=test id=target1 width=200>
<img class=test id=target2 width=200 style="width: 100px">
+<img class=test id=target3 width=200>
<script>
test(() => {
@@ -25,4 +32,8 @@
test(() => {
assert_equals(getComputedStyle(target2).width, '100px');
}, 'Presentational hints have lower precedence than the style attribute');
+
+test(() => {
+ assert_equals(getComputedStyle(target3).width, '100px');
+}, 'Presentational hints have lower precedence than layered style');
</script>
Modified: trunk/Source/WebCore/ChangeLog (284181 => 284182)
--- trunk/Source/WebCore/ChangeLog 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/Source/WebCore/ChangeLog 2021-10-14 18:37:42 UTC (rev 284182)
@@ -1,3 +1,22 @@
+2021-10-14 Antti Koivisto <[email protected]>
+
+ [CSS Cascade Layers] Layer should have higher priority than its descendant layers
+ https://bugs.webkit.org/show_bug.cgi?id=231725
+
+ Reviewed by Simon Fraser.
+
+ The spec was updated in https://github.com/w3c/csswg-drafts/commit/a6fc16e1b65868c6f984918cc76ad9b238e7139e
+
+ "Cascade layers are sorted by the order in which they first are declared, with nested layers grouped
+ within their parent layers before any unlayered rules."
+
+ * style/RuleSetBuilder.cpp:
+ (WebCore::Style::RuleSetBuilder::updateCascadeLayerPriorities):
+
+ Change the sorting order so parents sort after their children.
+
+ * style/RuleSetBuilder.h:
+
2021-10-14 Tim Horton <[email protected]>
Further adjust style of alternate form control design
Modified: trunk/Source/WebCore/style/RuleSetBuilder.cpp (284181 => 284182)
--- trunk/Source/WebCore/style/RuleSetBuilder.cpp 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/Source/WebCore/style/RuleSetBuilder.cpp 2021-10-14 18:37:42 UTC (rev 284182)
@@ -235,20 +235,27 @@
return;
auto compare = [&](auto a, auto b) {
- while (a && b) {
- // Identifiers are in parse order which almost corresponds to the layer priority order.
- // The only exception is when a sublayer gets added to a layer after adding other non-sublayers.
- // To resolve this we need look for a shared ancestor layer.
+ while (true) {
+ // Identifiers are in parse order.
auto aParent = m_ruleSet->cascadeLayerForIdentifier(a).parentIdentifier;
auto bParent = m_ruleSet->cascadeLayerForIdentifier(b).parentIdentifier;
- if (aParent == bParent || aParent == b || bParent == a)
- break;
+
+ // For sibling layers, the later layer in parse order has a higher priority.
+ if (aParent == bParent)
+ return a < b;
+
+ // For nested layers, the parent layer has a higher priority.
+ if (aParent == b)
+ return true;
+ if (a == bParent)
+ return false;
+
+ // Traverse to parent. Parent layer identifiers are always lower.
if (aParent > bParent)
a = aParent;
else
b = bParent;
}
- return a < b;
};
auto layerCount = m_ruleSet->m_cascadeLayers.size();
Modified: trunk/Source/WebCore/style/RuleSetBuilder.h (284181 => 284182)
--- trunk/Source/WebCore/style/RuleSetBuilder.h 2021-10-14 18:30:47 UTC (rev 284181)
+++ trunk/Source/WebCore/style/RuleSetBuilder.h 2021-10-14 18:37:42 UTC (rev 284182)
@@ -74,11 +74,11 @@
Resolver* m_resolver { nullptr };
const ShrinkToFit m_shrinkToFit { ShrinkToFit::Enable };
- CascadeLayerName m_resolvedCascadeLayerName { };
- HashMap<CascadeLayerName, RuleSet::CascadeLayerIdentifier> m_cascadeLayerIdentifierMap { };
+ CascadeLayerName m_resolvedCascadeLayerName;
+ HashMap<CascadeLayerName, RuleSet::CascadeLayerIdentifier> m_cascadeLayerIdentifierMap;
RuleSet::CascadeLayerIdentifier m_currentCascadeLayerIdentifier { 0 };
- Vector<RuleSet::ResolverMutatingRule> m_collectedResolverMutatingRules { };
+ Vector<RuleSet::ResolverMutatingRule> m_collectedResolverMutatingRules;
bool didSeeResolverMutationWithinDynamicMediaQuery { false };
};