Changeset 284182 in webkit
- Timestamp:
- Oct 14, 2021 11:37:42 AM (9 months ago)
- Location:
- trunk
- Files:
-
- 16 edited
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-basic.html (modified) (7 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-font-face-override.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-import.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-keyframes-override.html (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade.html (modified) (2 diffs)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/style/RuleSetBuilder.cpp (modified) (2 diffs)
-
Source/WebCore/style/RuleSetBuilder.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r284174 r284182 1 2021-10-14 Antti Koivisto <antti@apple.com> 2 3 [CSS Cascade Layers] Layer should have higher priority than its descendant layers 4 https://bugs.webkit.org/show_bug.cgi?id=231725 5 6 Reviewed by Simon Fraser. 7 8 Update from the WPT repo. 9 10 * web-platform-tests/css/css-cascade/layer-basic.html: 11 * web-platform-tests/css/css-cascade/layer-counter-style-override-expected.txt: 12 * web-platform-tests/css/css-cascade/layer-counter-style-override.html: 13 * web-platform-tests/css/css-cascade/layer-font-face-override.html: 14 * web-platform-tests/css/css-cascade/layer-import.html: 15 * web-platform-tests/css/css-cascade/layer-keyframes-override.html: 16 * web-platform-tests/css/css-cascade/layer-property-override-expected.txt: 17 * web-platform-tests/css/css-cascade/layer-property-override.html: 18 * web-platform-tests/css/css-cascade/layer-scroll-timeline-override-expected.txt: 19 * web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html: 20 * web-platform-tests/css/css-cascade/presentational-hints-cascade-expected.txt: 21 * web-platform-tests/css/css-cascade/presentational-hints-cascade.html: 22 1 23 2021-10-14 Tim Nguyen <ntim@apple.com> 2 24 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-basic.html
r283718 r284182 57 57 style: ` 58 58 @layer { 59 target { color: red; }60 @layer { 61 target { color: green; }59 target { color: green; } 60 @layer { 61 target { color: red; } 62 62 } 63 63 } … … 69 69 @layer { 70 70 @layer { 71 target { color: green; }72 } 73 target { color: red; }71 target { color: red; } 72 } 73 target { color: green; } 74 74 } 75 75 `, … … 86 86 @layer { 87 87 @layer { 88 target { color: green; }89 } 90 target { color: red; }88 target { color: red; } 89 } 90 target { color: green; } 91 91 } 92 92 `, … … 105 105 @layer { 106 106 @layer { 107 target { color: green; }108 } 109 target { color: red; }107 target { color: red; } 108 } 109 target { color: green; } 110 110 } 111 111 `, … … 123 123 @layer { 124 124 @layer { 125 target { color: green; }125 target { color: red; } 126 126 } 127 127 } 128 target { color: red; }128 target { color: green; } 129 129 } 130 130 `, … … 176 176 style: ` 177 177 @layer A { 178 target { color: red; }179 @layer A { 180 target { color: green; }178 target { color: green; } 179 @layer A { 180 target { color: red; } 181 181 } 182 182 } … … 363 363 @layer A { 364 364 @layer { 365 target { color: green; }366 } 367 } 368 @layer A { 369 target { color: red; }365 target { color: red; } 366 } 367 } 368 @layer A { 369 target { color: green; } 370 370 } 371 371 `, -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override-expected.txt
r283162 r284182 1 1 2 FAIL @counter-style layered overrides unlayered assert_equals: expected "31.21875px" but got "0px"2 FAIL @counter-style unlayered overrides layered assert_equals: expected "31.21875px" but got "0px" 3 3 FAIL @counter-style override between layers assert_equals: expected "31.21875px" but got "6px" 4 4 FAIL @counter-style override update with appended sheet 1 assert_equals: expected "31.21875px" but got "6px" -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-counter-style-override.html
r283162 r284182 36 36 const testCases = [ 37 37 { 38 title: '@counter-style layered overrides unlayered',38 title: '@counter-style unlayered overrides layered', 39 39 style: ` 40 40 #target::before { … … 42 42 } 43 43 44 @counter-style custom-counter-style { 45 system: extends four; 46 } 47 44 48 @layer { 45 49 @counter-style custom-counter-style { 46 system: extends four;50 system: extends three; 47 51 } 48 }49 50 @counter-style custom-counter-style {51 system: extends three;52 52 } 53 53 ` -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-font-face-override.html
r283718 r284182 25 25 } 26 26 27 @font-face { 28 font-family: custom-font; 29 src: url('/fonts/Ahem.ttf'); 30 } 31 27 32 @layer { 28 33 @font-face { … … 30 35 src: url('/fonts/noto/noto-sans-v8-latin-regular.woff') format('woff'); 31 36 } 32 }33 34 @font-face {35 font-family: custom-font;36 src: url('/fonts/Ahem.ttf');37 37 } 38 38 ` -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-import.html
r283718 r284182 146 146 title: 'C4 Named imports', 147 147 style: ` 148 @import url(layer- green.css) layer(A);148 @import url(layer-red.css) layer(A); 149 149 @layer A { 150 target { color: red; }150 target { color: green; } 151 151 } 152 152 ` … … 193 193 style: ` 194 194 @import url(basic-red.css) layer(A); 195 @import url(basic- green.css) layer(B.A);196 @import url(basic- red.css) layer(B);195 @import url(basic-red.css) layer(B.A); 196 @import url(basic-green.css) layer(B); 197 197 ` 198 198 }, -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-keyframes-override.html
r283718 r284182 30 30 } 31 31 32 @keyframes anim { 33 from { background-color: green; } 34 } 35 32 36 @layer { 33 37 @keyframes anim { 34 38 from { background-color: red; } 35 39 } 36 }37 38 @keyframes anim {39 from { background-color: green; }40 40 } 41 41 ` -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override-expected.txt
r283162 r284182 1 1 2 FAIL @property layered overrides unlayered assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)"2 FAIL @property unlayered overrides layered assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)" 3 3 FAIL @property override between layers assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)" 4 4 FAIL @property override update with appended sheet 1 assert_equals: expected "rgb(0, 128, 0)" but got "rgba(0, 0, 0, 0)" -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-property-override.html
r283162 r284182 24 24 const testCases = [ 25 25 { 26 title: '@property layered overrides unlayered',26 title: '@property unlayered overrides layered', 27 27 style: ` 28 28 #target { 29 29 background-color: var(--foo); 30 } 31 32 @property --foo { 33 syntax: '<color>'; 34 inherits: false; 35 initial-value: green; 30 36 } 31 37 … … 34 40 syntax: '<color>'; 35 41 inherits: false; 36 initial-value: green;42 initial-value: red; 37 43 } 38 44 } 39 40 @property --foo { 41 syntax: '<color>'; 42 inherits: false; 43 initial-value: red; 44 } 45 ` 45 ` 46 46 }, 47 47 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override-expected.txt
r283162 r284182 1 1 2 FAIL @scroll-timeline layered overrides unlayered assert_true: This test requires @scroll-timeline support expected true got false2 FAIL @scroll-timeline unlayered overrides layered assert_true: This test requires @scroll-timeline support expected true got false 3 3 FAIL @scroll-timeline override between layers assert_true: This test requires @scroll-timeline support expected true got false 4 4 FAIL @scroll-timeline override update with appended sheet 1 assert_true: This test requires @scroll-timeline support expected true got false -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/layer-scroll-timeline-override.html
r283162 r284182 47 47 const testCases = [ 48 48 { 49 title: '@scroll-timeline layered overrides unlayered',49 title: '@scroll-timeline unlayered overrides layered', 50 50 style: ` 51 51 #target { 52 52 animation-timeline: timeline; 53 } 54 55 @scroll-timeline timeline { 56 source: selector(#scroller); 57 start: 0px; 58 end: 50px; 53 59 } 54 60 … … 57 63 source: selector(#scroller); 58 64 start: 0px; 59 end: 50px;65 end: 100px; 60 66 } 61 }62 63 @scroll-timeline timeline {64 source: selector(#scroller);65 start: 0px;66 end: 100px;67 67 } 68 68 ` -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade-expected.txt
r283162 r284182 3 3 PASS Presentational hints have lower precedence than regular author style sheets 4 4 PASS Presentational hints have lower precedence than the style attribute 5 PASS Presentational hints have lower precedence than layered style 5 6 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/presentational-hints-cascade.html
r283162 r284182 13 13 width: 100px; 14 14 } 15 16 @layer { 17 #target3 { 18 width: 100px; 19 } 20 } 15 21 </style> 16 22 17 23 <img class=test id=target1 width=200> 18 24 <img class=test id=target2 width=200 style="width: 100px"> 25 <img class=test id=target3 width=200> 19 26 20 27 <script> … … 26 33 assert_equals(getComputedStyle(target2).width, '100px'); 27 34 }, 'Presentational hints have lower precedence than the style attribute'); 35 36 test(() => { 37 assert_equals(getComputedStyle(target3).width, '100px'); 38 }, 'Presentational hints have lower precedence than layered style'); 28 39 </script> -
trunk/Source/WebCore/ChangeLog
r284176 r284182 1 2021-10-14 Antti Koivisto <antti@apple.com> 2 3 [CSS Cascade Layers] Layer should have higher priority than its descendant layers 4 https://bugs.webkit.org/show_bug.cgi?id=231725 5 6 Reviewed by Simon Fraser. 7 8 The spec was updated in https://github.com/w3c/csswg-drafts/commit/a6fc16e1b65868c6f984918cc76ad9b238e7139e 9 10 "Cascade layers are sorted by the order in which they first are declared, with nested layers grouped 11 within their parent layers before any unlayered rules." 12 13 * style/RuleSetBuilder.cpp: 14 (WebCore::Style::RuleSetBuilder::updateCascadeLayerPriorities): 15 16 Change the sorting order so parents sort after their children. 17 18 * style/RuleSetBuilder.h: 19 1 20 2021-10-14 Tim Horton <timothy_horton@apple.com> 2 21 -
trunk/Source/WebCore/style/RuleSetBuilder.cpp
r284078 r284182 236 236 237 237 auto compare = [&](auto a, auto b) { 238 while (a && b) { 239 // Identifiers are in parse order which almost corresponds to the layer priority order. 240 // The only exception is when a sublayer gets added to a layer after adding other non-sublayers. 241 // To resolve this we need look for a shared ancestor layer. 238 while (true) { 239 // Identifiers are in parse order. 242 240 auto aParent = m_ruleSet->cascadeLayerForIdentifier(a).parentIdentifier; 243 241 auto bParent = m_ruleSet->cascadeLayerForIdentifier(b).parentIdentifier; 244 if (aParent == bParent || aParent == b || bParent == a) 245 break; 242 243 // For sibling layers, the later layer in parse order has a higher priority. 244 if (aParent == bParent) 245 return a < b; 246 247 // For nested layers, the parent layer has a higher priority. 248 if (aParent == b) 249 return true; 250 if (a == bParent) 251 return false; 252 253 // Traverse to parent. Parent layer identifiers are always lower. 246 254 if (aParent > bParent) 247 255 a = aParent; … … 249 257 b = bParent; 250 258 } 251 return a < b;252 259 }; 253 260 -
trunk/Source/WebCore/style/RuleSetBuilder.h
r283718 r284182 75 75 const ShrinkToFit m_shrinkToFit { ShrinkToFit::Enable }; 76 76 77 CascadeLayerName m_resolvedCascadeLayerName { };78 HashMap<CascadeLayerName, RuleSet::CascadeLayerIdentifier> m_cascadeLayerIdentifierMap { };77 CascadeLayerName m_resolvedCascadeLayerName; 78 HashMap<CascadeLayerName, RuleSet::CascadeLayerIdentifier> m_cascadeLayerIdentifierMap; 79 79 RuleSet::CascadeLayerIdentifier m_currentCascadeLayerIdentifier { 0 }; 80 80 81 Vector<RuleSet::ResolverMutatingRule> m_collectedResolverMutatingRules { };81 Vector<RuleSet::ResolverMutatingRule> m_collectedResolverMutatingRules; 82 82 bool didSeeResolverMutationWithinDynamicMediaQuery { false }; 83 83 };
Note: See TracChangeset
for help on using the changeset viewer.