mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Update web-platform-tests to revision b'7b6f075f0ec3c52d92c61fb9f35ce0ec927b17b2' (#34525)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
This commit is contained in:
parent
2fbe16876c
commit
b3977e7f6c
146 changed files with 4116 additions and 587 deletions
|
@ -1,6 +0,0 @@
|
||||||
[clear-computed.html]
|
|
||||||
[Property clear value 'inline-start']
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property clear value 'inline-end']
|
|
||||||
expected: FAIL
|
|
|
@ -1,6 +0,0 @@
|
||||||
[float-computed.html]
|
|
||||||
[Property float value 'inline-start']
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property float value 'inline-end']
|
|
||||||
expected: FAIL
|
|
|
@ -19,3 +19,6 @@
|
||||||
|
|
||||||
[@font-face matching for quoted and unquoted fangsong]
|
[@font-face matching for quoted and unquoted fangsong]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[@font-face matching for quoted and unquoted serif]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -361,3 +361,63 @@
|
||||||
|
|
||||||
[e.style.cssText = grid-template-rows: auto auto; grid-template-columns: repeat(auto-fit, 3px); grid-template-areas: "one two" "three four" should set grid-template-rows]
|
[e.style.cssText = grid-template-rows: auto auto; grid-template-columns: repeat(auto-fit, 3px); grid-template-areas: "one two" "three four" should set grid-template-rows]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: none; should set grid]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: none; should set grid-template]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: none; should set grid-template-areas]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: none; should set grid-template-columns]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: none; should set grid-template-rows]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: auto / auto; should set grid]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: auto / auto; should set grid-template]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: auto / auto; should set grid-template-areas]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: auto / auto; should set grid-template-columns]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: auto / auto; should set grid-template-rows]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] / auto 1fr auto should set grid]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] / auto 1fr auto should set grid-template]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] / auto 1fr auto should set grid-template-areas]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] / auto 1fr auto should set grid-template-columns]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] / auto 1fr auto should set grid-template-rows]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] "c c c" "d d d" / auto should set grid]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] "c c c" "d d d" / auto should set grid-template]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] "c c c" "d d d" / auto should set grid-template-areas]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] "c c c" "d d d" / auto should set grid-template-columns]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style.cssText = grid-template: [header-top\] "a a a" [header-bottom\] [main-top\] "b b b" 1fr [main-bottom\] "c c c" "d d d" / auto should set grid-template-rows]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -13,3 +13,6 @@
|
||||||
|
|
||||||
[grid-template: 10px 20px 30px / 40px 50px 60px 70px and "grid-template-areas: "a . b ." "c d . e" "f g h .";" should be valid.]
|
[grid-template: 10px 20px 30px / 40px 50px 60px 70px and "grid-template-areas: "a . b ." "c d . e" "f g h .";" should be valid.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[grid-template: none / none and "grid-template-areas: "a" "b" "c" "d" "e";" should be valid.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -70,3 +70,15 @@
|
||||||
|
|
||||||
[e.style['grid-template'\] = " [\] \\"a a a\\" [\] [\] \\"b b b\\" 1fr [\] / [\] auto 1fr [\] auto [\]" should not set unrelated longhands]
|
[e.style['grid-template'\] = " [\] \\"a a a\\" [\] [\] \\"b b b\\" 1fr [\] / [\] auto 1fr [\] auto [\]" should not set unrelated longhands]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template'\] = " [\] \\"a a a\\" [\] [\] \\"b b b\\" 1fr [\] \\"c c c\\" / [\] auto 1fr [\] auto [\]" should set grid-template-areas]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template'\] = " [\] \\"a a a\\" [\] [\] \\"b b b\\" 1fr [\] \\"c c c\\" / [\] auto 1fr [\] auto [\]" should set grid-template-columns]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template'\] = " [\] \\"a a a\\" [\] [\] \\"b b b\\" 1fr [\] \\"c c c\\" / [\] auto 1fr [\] auto [\]" should set grid-template-rows]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['grid-template'\] = " [\] \\"a a a\\" [\] [\] \\"b b b\\" 1fr [\] \\"c c c\\" / [\] auto 1fr [\] auto [\]" should not set unrelated longhands]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
[logical-values-float-clear.html]
|
|
||||||
[Test that 'clear: inline-start' is supported.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Test that 'clear: inline-end' is supported.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Test that 'float: inline-start' is supported.]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Test that 'float: inline-end' is supported.]
|
|
||||||
expected: FAIL
|
|
|
@ -1,36 +1,2 @@
|
||||||
[the-check-pseudo-element.tentative.html]
|
[the-check-pseudo-element.tentative.html]
|
||||||
["::check" should be a valid selector]
|
expected: TIMEOUT
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["*::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["foo.bar[baz\]::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::check::marker" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::slotted(*)::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::part(foo)::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["*::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["foo.bar[baz\]::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::checkmark::marker" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::slotted(*)::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::part(foo)::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,33 +1,2 @@
|
||||||
[the-select-arrow-pseudo-element.tentative.html]
|
[the-select-arrow-pseudo-element.tentative.html]
|
||||||
["::select-arrow" should be a valid selector]
|
expected: TIMEOUT
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["*::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["foo.bar[baz\]::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::select-arrow::marker" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::slotted(*)::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::part(foo)::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["*::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["foo.bar[baz\]::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::slotted(*)::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::part(foo)::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
[vh_not_refreshing_on_chrome.html]
|
[vh_not_refreshing_on_chrome.html]
|
||||||
bug: https://github.com/servo/servo/issues/8984
|
bug: https://github.com/servo/servo/issues/8984
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
[MediaQueryList-addListener-removeListener.html]
|
[MediaQueryList-addListener-removeListener.html]
|
||||||
[listeners are called when <iframe> is resized]
|
[listeners are called when <iframe> is resized]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[listeners are called correct number of times]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -824,9 +824,6 @@
|
||||||
[AbortSignal interface: calling any(sequence<AbortSignal>) on new AbortController().signal with too few arguments must throw TypeError]
|
[AbortSignal interface: calling any(sequence<AbortSignal>) on new AbortController().signal with too few arguments must throw TypeError]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[ShadowRoot interface: attribute clonable]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Document interface: operation prepend((Node or TrustedScript or DOMString)...)]
|
[Document interface: operation prepend((Node or TrustedScript or DOMString)...)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[request-init-001.sub.html]
|
|
||||||
type: testharness
|
|
||||||
[Check referrerPolicy init value of and associated getter]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -28,3 +28,6 @@
|
||||||
|
|
||||||
[sec-fetch-dest - Not sent to non-trustworthy same-origin destination]
|
[sec-fetch-dest - Not sent to non-trustworthy same-origin destination]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[sec-fetch-dest - Not sent to non-trustworthy same-site destination]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -61,3 +61,6 @@
|
||||||
|
|
||||||
[sec-fetch-site - source[srcset\] - Same-Site -> Cross-Site, no attributes]
|
[sec-fetch-site - source[srcset\] - Same-Site -> Cross-Site, no attributes]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[sec-fetch-mode - img[src\] - attributes: crossorigin=anonymous]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
[iframe-src-aboutblank-navigate-immediately.html]
|
[iframe-src-aboutblank-navigate-immediately.html]
|
||||||
[Navigating to a different document with window.open]
|
[Navigating to a different document with window.open]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Navigating to a different document with link click]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Navigating to a different document with location.href]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
[navigation-unload-cross-origin.sub.window.html]
|
|
||||||
[Cross-origin navigation started from unload handler must be ignored]
|
|
||||||
expected: FAIL
|
|
|
@ -1,5 +1,5 @@
|
||||||
[createImageBitmap-transfer.html]
|
[createImageBitmap-transfer.html]
|
||||||
expected: ERROR
|
expected: TIMEOUT
|
||||||
[Transfer ImageBitmap created from a vector HTMLImageElement]
|
[Transfer ImageBitmap created from a vector HTMLImageElement]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
[iframe-loading-lazy-nav-link-click.html]
|
||||||
|
[Navigating iframe loading='lazy' before it is loaded: link click]
|
||||||
|
expected: FAIL
|
|
@ -1,4 +1,3 @@
|
||||||
[iframe_sandbox_popups_escaping-2.html]
|
[iframe_sandbox_popups_escaping-2.html]
|
||||||
expected: CRASH
|
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: TIMEOUT
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[iframe_sandbox_popups_escaping-3.html]
|
[iframe_sandbox_popups_escaping-3.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[iframe_sandbox_popups_nonescaping-2.html]
|
[iframe_sandbox_popups_nonescaping-2.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
|
@ -11,3 +11,6 @@
|
||||||
|
|
||||||
[Check that rel=noopener with target=_parent does a normal load]
|
[Check that rel=noopener with target=_parent does a normal load]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Check that rel=noopener with target=_self does a normal load]
|
||||||
|
expected: FAIL
|
||||||
|
|
3
tests/wpt/meta-legacy-layout/html/syntax/parsing/DOMContentLoaded-defer.html.ini
vendored
Normal file
3
tests/wpt/meta-legacy-layout/html/syntax/parsing/DOMContentLoaded-defer.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[DOMContentLoaded-defer.html]
|
||||||
|
[The end: DOMContentLoaded and defer scripts]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
||||||
|
[module-static-import-delayed.html]
|
||||||
|
[document.write in an imported module]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
||||||
|
[child-document-raf-order.html]
|
||||||
|
[Ordering of steps in "Update the Rendering" - child document requestAnimationFrame order]
|
||||||
|
expected: FAIL
|
|
@ -1,11 +1,5 @@
|
||||||
[nested-context-navigations-iframe.html]
|
[nested-context-navigations-iframe.html]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
[Test that iframe navigations are not observable by the parent, even after history navigations by the parent]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[Test that crossorigin iframe navigations are not observable by the parent, even after history navigations by the parent]
|
|
||||||
expected: NOTRUN
|
|
||||||
|
|
||||||
[Test that cross-site iframe navigations are not observable by the parent, even after history navigations by the parent]
|
[Test that cross-site iframe navigations are not observable by the parent, even after history navigations by the parent]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[Worker-constructor.html]
|
|
||||||
expected: ERROR
|
|
1100
tests/wpt/meta/MANIFEST.json
vendored
1100
tests/wpt/meta/MANIFEST.json
vendored
File diff suppressed because it is too large
Load diff
2
tests/wpt/meta/css/css-conditional/container-queries/container-for-cue.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-conditional/container-queries/container-for-cue.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[container-for-cue.html]
|
||||||
|
expected: FAIL
|
6
tests/wpt/meta/css/css-grid/parsing/grid-template-shorthand-composition.html.ini
vendored
Normal file
6
tests/wpt/meta/css/css-grid/parsing/grid-template-shorthand-composition.html.ini
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[grid-template-shorthand-composition.html]
|
||||||
|
[grid-template-rows: auto, grid-template-columns: auto, and "grid-template-areas: "a a a" "b b b";" should be valid.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[grid-template-rows: min-content, grid-template-columns: min-content, and "grid-template-areas: "a a a" "b b b" "c c c" "d d d";" should be valid.]
|
||||||
|
expected: FAIL
|
12
tests/wpt/meta/css/css-overflow/scrollable-overflow-padding-inline.html.ini
vendored
Normal file
12
tests/wpt/meta/css/css-overflow/scrollable-overflow-padding-inline.html.ini
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
[scrollable-overflow-padding-inline.html]
|
||||||
|
[.scroller 1]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[.scroller 2]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[.scroller 4]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[.scroller 6]
|
||||||
|
expected: FAIL
|
|
@ -1,36 +0,0 @@
|
||||||
[the-check-pseudo-element.tentative.html]
|
|
||||||
["::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["*::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["foo.bar[baz\]::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::check::marker" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::slotted(*)::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::part(foo)::check" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["*::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["foo.bar[baz\]::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::checkmark::marker" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::slotted(*)::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::part(foo)::checkmark" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
15
tests/wpt/meta/css/css-pseudo/parsing/the-checkmark-pseudo-element.tentative.html.ini
vendored
Normal file
15
tests/wpt/meta/css/css-pseudo/parsing/the-checkmark-pseudo-element.tentative.html.ini
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[the-checkmark-pseudo-element.tentative.html]
|
||||||
|
["::checkmark" should be a valid selector]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["*::checkmark" should be a valid selector]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["foo.bar[baz\]::checkmark" should be a valid selector]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["::slotted(*)::checkmark" should be a valid selector]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["::part(foo)::checkmark" should be a valid selector]
|
||||||
|
expected: FAIL
|
15
tests/wpt/meta/css/css-pseudo/parsing/the-picker-icon-pseudo-element.tentative.html.ini
vendored
Normal file
15
tests/wpt/meta/css/css-pseudo/parsing/the-picker-icon-pseudo-element.tentative.html.ini
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[the-picker-icon-pseudo-element.tentative.html]
|
||||||
|
["::picker-icon" should be a valid selector]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["*::picker-icon" should be a valid selector]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["foo.bar[baz\]::picker-icon" should be a valid selector]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["::slotted(*)::picker-icon" should be a valid selector]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
["::part(foo)::picker-icon" should be a valid selector]
|
||||||
|
expected: FAIL
|
|
@ -1,33 +0,0 @@
|
||||||
[the-select-arrow-pseudo-element.tentative.html]
|
|
||||||
["::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["*::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["foo.bar[baz\]::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::select-arrow::marker" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::slotted(*)::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::part(foo)::select-arrow" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["*::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["foo.bar[baz\]::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::slotted(*)::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
["::part(foo)::picker-icon" should be a valid selector]
|
|
||||||
expected: FAIL
|
|
2
tests/wpt/meta/css/css-transitions/allow-discrete-auto-inset.html.ini
vendored
Normal file
2
tests/wpt/meta/css/css-transitions/allow-discrete-auto-inset.html.ini
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[allow-discrete-auto-inset.html]
|
||||||
|
expected: TIMEOUT
|
|
@ -1,3 +1,22 @@
|
||||||
[MediaQueryList-addListener-removeListener.html]
|
[MediaQueryList-addListener-removeListener.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[listeners are called when <iframe> is resized]
|
[listeners are called when <iframe> is resized]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[listeners are called correct number of times]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[listeners are called in order they were added]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[listener that was added twice is called only once]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[listeners are called in order their MQLs were created]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[removing listener from one MQL doesn't remove it from all MQLs]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[MediaQueryList::removeListener removes added listener]
|
||||||
|
expected: NOTRUN
|
||||||
|
|
6
tests/wpt/meta/css/cssom/getComputedStyle-pseudo-checkmark.html.ini
vendored
Normal file
6
tests/wpt/meta/css/cssom/getComputedStyle-pseudo-checkmark.html.ini
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[getComputedStyle-pseudo-checkmark.html]
|
||||||
|
[Resolution of width is correct when pseudo-element argument is ignored (due to single-colon)]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resolution of width is correct for pseudo-element (due to double-colon)]
|
||||||
|
expected: FAIL
|
9
tests/wpt/meta/css/cssom/getComputedStyle-pseudo-picker-icon.html.ini
vendored
Normal file
9
tests/wpt/meta/css/cssom/getComputedStyle-pseudo-picker-icon.html.ini
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[getComputedStyle-pseudo-picker-icon.html]
|
||||||
|
[Resolution of width is correct when pseudo-element argument is ignored (due to no colon)]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resolution of width is correct when pseudo-element argument is ignored (due to single-colon)]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resolution of width is correct for pseudo-element (due to double-colon)]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
||||||
|
[navigation-unload-same-origin.window.html]
|
||||||
|
[Same-origin navigation started from unload handler must be ignored]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
||||||
|
[2d.text.measure.actualBoundingBox.whitespace.html]
|
||||||
|
[Testing actualBoundingBox with leading/trailing whitespace]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
||||||
|
[2d.text.measure.actualBoundingBox.whitespace.html]
|
||||||
|
[Testing actualBoundingBox with leading/trailing whitespace]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
||||||
|
[2d.text.measure.actualBoundingBox.whitespace.worker.html]
|
||||||
|
[Testing actualBoundingBox with leading/trailing whitespace]
|
||||||
|
expected: FAIL
|
|
@ -22,3 +22,6 @@
|
||||||
|
|
||||||
[Leading/trailing space removal at display:inline-grid boundary ("<div>123<span style='display:inline-grid'> abc </span>def")]
|
[Leading/trailing space removal at display:inline-grid boundary ("<div>123<span style='display:inline-grid'> abc </span>def")]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[::first-line styles applied ("<div class='first-line-uppercase'>abc")]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
[iframe_sandbox_popups_escaping-3.html]
|
[iframe_sandbox_popups_escaping-3.html]
|
||||||
|
expected: TIMEOUT
|
||||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
[non-active-document.html]
|
|
||||||
[DOMParser]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[createHTMLDocument]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<template>]
|
|
||||||
expected: FAIL
|
|
|
@ -1,4 +0,0 @@
|
||||||
[reparent-form-during-planned-navigation-task.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[reparent-form-during-planned-navigation-task]
|
|
||||||
expected: TIMEOUT
|
|
3
tests/wpt/meta/html/webappapis/update-rendering/child-document-raf-order.html.ini
vendored
Normal file
3
tests/wpt/meta/html/webappapis/update-rendering/child-document-raf-order.html.ini
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[child-document-raf-order.html]
|
||||||
|
[Ordering of steps in "Update the Rendering" - child document requestAnimationFrame order]
|
||||||
|
expected: FAIL
|
|
@ -23,3 +23,6 @@
|
||||||
|
|
||||||
[Test that cross-site iframe refreshes are not observable by the parent]
|
[Test that cross-site iframe refreshes are not observable by the parent]
|
||||||
expected: NOTRUN
|
expected: NOTRUN
|
||||||
|
|
||||||
|
[Test that iframe navigations are not observable by the parent, even after history navigations by the parent]
|
||||||
|
expected: TIMEOUT
|
||||||
|
|
10
tests/wpt/meta/subresource-integrity/signatures/tentative/script.window.js.ini
vendored
Normal file
10
tests/wpt/meta/subresource-integrity/signatures/tentative/script.window.js.ini
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
[script.window.html]
|
||||||
|
expected: ERROR
|
||||||
|
[No signature, valid integrity check: loads.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Valid signature, mismatched integrity check: blocked.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Valid signatures, integrity check matches neither: blocked.]
|
||||||
|
expected: FAIL
|
8
tests/wpt/meta/wasm/jsapi/memory/to-fixed-length-buffer-shared.any.js.ini
vendored
Normal file
8
tests/wpt/meta/wasm/jsapi/memory/to-fixed-length-buffer-shared.any.js.ini
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[to-fixed-length-buffer-shared.any.html]
|
||||||
|
[toFixedLengthBuffer caching behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
|
[to-fixed-length-buffer-shared.any.worker.html]
|
||||||
|
[toFixedLengthBuffer caching behavior]
|
||||||
|
expected: FAIL
|
14
tests/wpt/meta/wasm/jsapi/memory/to-fixed-length-buffer.any.js.ini
vendored
Normal file
14
tests/wpt/meta/wasm/jsapi/memory/to-fixed-length-buffer.any.js.ini
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
[to-fixed-length-buffer.any.worker.html]
|
||||||
|
[API surface]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[toFixedLengthBuffer caching behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
|
[to-fixed-length-buffer.any.html]
|
||||||
|
[API surface]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[toFixedLengthBuffer caching behavior]
|
||||||
|
expected: FAIL
|
20
tests/wpt/meta/wasm/jsapi/memory/to-resizable-buffer-shared.any.js.ini
vendored
Normal file
20
tests/wpt/meta/wasm/jsapi/memory/to-resizable-buffer-shared.any.js.ini
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[to-resizable-buffer-shared.any.worker.html]
|
||||||
|
[toResizableBuffer caching behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[toResizableBuffer max size]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resizing a Memory's resizable buffer]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
|
[to-resizable-buffer-shared.any.html]
|
||||||
|
[toResizableBuffer caching behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[toResizableBuffer max size]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resizing a Memory's resizable buffer]
|
||||||
|
expected: FAIL
|
32
tests/wpt/meta/wasm/jsapi/memory/to-resizable-buffer.any.js.ini
vendored
Normal file
32
tests/wpt/meta/wasm/jsapi/memory/to-resizable-buffer.any.js.ini
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
[to-resizable-buffer.any.worker.html]
|
||||||
|
[API surface]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[toResizableBuffer caching behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[toResizableBuffer max size]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resizing a Memory's resizable buffer]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resizable buffers from Memory cannot be detached by JS]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
||||||
|
[to-resizable-buffer.any.html]
|
||||||
|
[API surface]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[toResizableBuffer caching behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[toResizableBuffer max size]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resizing a Memory's resizable buffer]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Resizable buffers from Memory cannot be detached by JS]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,4 @@
|
||||||
|
[localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html]
|
||||||
|
expected: TIMEOUT
|
||||||
|
[StorageKey: test 3P about:blank window opened from a 3P iframe]
|
||||||
|
expected: TIMEOUT
|
|
@ -1,2 +0,0 @@
|
||||||
[Worker-constructor.html]
|
|
||||||
expected: ERROR
|
|
|
@ -1,4 +1,5 @@
|
||||||
// META: title=translator.create without options do not crash
|
// META: title=translator.create without options do not crash
|
||||||
|
// META: global=window,worker
|
||||||
// META: timeout=long
|
// META: timeout=long
|
||||||
//
|
//
|
||||||
// Setting `timeout=long` as this test may require downloading the translation
|
// Setting `timeout=long` as this test may require downloading the translation
|
|
@ -1,4 +1,5 @@
|
||||||
// META: title=Translate from English to Japanese
|
// META: title=Translate from English to Japanese
|
||||||
|
// META: global=window,worker
|
||||||
// META: timeout=long
|
// META: timeout=long
|
||||||
//
|
//
|
||||||
// Setting `timeout=long` as this test may require downloading the translation
|
// Setting `timeout=long` as this test may require downloading the translation
|
|
@ -1,4 +1,5 @@
|
||||||
// META: title=Translate from English to Japanese
|
// META: title=Translate from English to Japanese
|
||||||
|
// META: global=window,worker
|
||||||
// META: timeout=long
|
// META: timeout=long
|
||||||
//
|
//
|
||||||
// Setting `timeout=long` as this test may require downloading the translation
|
// Setting `timeout=long` as this test may require downloading the translation
|
|
@ -2,6 +2,7 @@
|
||||||
<meta charset=utf-8>
|
<meta charset=utf-8>
|
||||||
<meta name=timeout content=long>
|
<meta name=timeout content=long>
|
||||||
<meta name=variant content="?method=a&expected-eligible=navigation-source">
|
<meta name=variant content="?method=a&expected-eligible=navigation-source">
|
||||||
|
<meta name=variant content="?method=area&expected-eligible=navigation-source">
|
||||||
<meta name=variant content="?method=img&expected-eligible=event-source, trigger">
|
<meta name=variant content="?method=img&expected-eligible=event-source, trigger">
|
||||||
<meta name=variant content="?method=img&eligible&expected-eligible=event-source, trigger">
|
<meta name=variant content="?method=img&eligible&expected-eligible=event-source, trigger">
|
||||||
<meta name=variant content="?method=open&expected-eligible=navigation-source">
|
<meta name=variant content="?method=open&expected-eligible=navigation-source">
|
||||||
|
|
|
@ -63,6 +63,23 @@ const resetRegisteredSources = () => {
|
||||||
return fetch(`${blankURL()}?clear-stash=true`);
|
return fetch(`${blankURL()}?clear-stash=true`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function prepareAnchorOrArea(tag, referrerPolicy, eligible, url) {
|
||||||
|
const el = document.createElement(tag);
|
||||||
|
el.referrerPolicy = referrerPolicy;
|
||||||
|
el.target = '_blank';
|
||||||
|
el.textContent = 'link';
|
||||||
|
if (eligible === null) {
|
||||||
|
el.attributionSrc = url;
|
||||||
|
el.href = blankURL();
|
||||||
|
} else {
|
||||||
|
el.attributionSrc = '';
|
||||||
|
el.href = url;
|
||||||
|
}
|
||||||
|
return el;
|
||||||
|
}
|
||||||
|
|
||||||
|
let nextMapId = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to clear the stash. Takes the URL as parameter. This could be for
|
* Method to clear the stash. Takes the URL as parameter. This could be for
|
||||||
* event-level or aggregatable reports.
|
* event-level or aggregatable reports.
|
||||||
|
@ -193,7 +210,7 @@ const registerAttributionSrc = ({
|
||||||
.forEach(([key, value]) => url.searchParams.set(key, value));
|
.forEach(([key, value]) => url.searchParams.set(key, value));
|
||||||
|
|
||||||
switch (method) {
|
switch (method) {
|
||||||
case 'img':
|
case 'img': {
|
||||||
const img = document.createElement('img');
|
const img = document.createElement('img');
|
||||||
img.referrerPolicy = referrerPolicy;
|
img.referrerPolicy = referrerPolicy;
|
||||||
if (eligible === null) {
|
if (eligible === null) {
|
||||||
|
@ -203,6 +220,7 @@ const registerAttributionSrc = ({
|
||||||
img.src = url;
|
img.src = url;
|
||||||
}
|
}
|
||||||
return 'event';
|
return 'event';
|
||||||
|
}
|
||||||
case 'script':
|
case 'script':
|
||||||
const script = document.createElement('script');
|
const script = document.createElement('script');
|
||||||
script.referrerPolicy = referrerPolicy;
|
script.referrerPolicy = referrerPolicy;
|
||||||
|
@ -215,20 +233,26 @@ const registerAttributionSrc = ({
|
||||||
}
|
}
|
||||||
return 'event';
|
return 'event';
|
||||||
case 'a':
|
case 'a':
|
||||||
const a = document.createElement('a');
|
const a = prepareAnchorOrArea('a', referrerPolicy, eligible, url);
|
||||||
a.referrerPolicy = referrerPolicy;
|
|
||||||
a.target = '_blank';
|
|
||||||
a.textContent = 'link';
|
|
||||||
if (eligible === null) {
|
|
||||||
a.attributionSrc = url;
|
|
||||||
a.href = blankURL();
|
|
||||||
} else {
|
|
||||||
a.attributionSrc = '';
|
|
||||||
a.href = url;
|
|
||||||
}
|
|
||||||
document.body.appendChild(a);
|
document.body.appendChild(a);
|
||||||
test_driver.click(a);
|
test_driver.click(a);
|
||||||
return 'navigation';
|
return 'navigation';
|
||||||
|
case 'area': {
|
||||||
|
const area = prepareAnchorOrArea('area', referrerPolicy, eligible, url);
|
||||||
|
const size = 100;
|
||||||
|
area.coords = `0,0,${size},${size}`;
|
||||||
|
area.shape = 'rect';
|
||||||
|
const map = document.createElement('map');
|
||||||
|
map.name = `map-${nextMapId++}`;
|
||||||
|
map.append(area);
|
||||||
|
const img = document.createElement('img');
|
||||||
|
img.width = size;
|
||||||
|
img.height = size;
|
||||||
|
img.useMap = `#${map.name}`;
|
||||||
|
document.body.append(map, img);
|
||||||
|
test_driver.click(area);
|
||||||
|
return 'navigation';
|
||||||
|
}
|
||||||
case 'open':
|
case 'open':
|
||||||
test_driver.bless('open window', () => {
|
test_driver.bless('open window', () => {
|
||||||
const feature = referrerPolicy === 'no-referrer' ? 'noreferrer' : '';
|
const feature = referrerPolicy === 'no-referrer' ? 'noreferrer' : '';
|
||||||
|
|
3
tests/wpt/tests/close-watcher/WEB_FEATURES.yml
vendored
Normal file
3
tests/wpt/tests/close-watcher/WEB_FEATURES.yml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
features:
|
||||||
|
- name: closewatcher
|
||||||
|
files: "**"
|
|
@ -1,92 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<title> Test the snapshotted CSP is checked during task creation, not during
|
|
||||||
execution.
|
|
||||||
</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<iframe id="iframe"></iframe>
|
|
||||||
<script>
|
|
||||||
setup({ single_test: true });
|
|
||||||
|
|
||||||
function f() {
|
|
||||||
location.href = "javascript:h()";
|
|
||||||
}
|
|
||||||
|
|
||||||
let e1Dispatched = false;
|
|
||||||
|
|
||||||
document.addEventListener("securitypolicyviolation", (e1) => {
|
|
||||||
if (e1.lineNumber == 88) {
|
|
||||||
e1Dispatched = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
document.addEventListener("securitypolicyviolation", (e2) => {
|
|
||||||
if (e2.lineNumber == 17) {
|
|
||||||
assert_true(e1Dispatched, "e1 was dispatched before e2");
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function addCSP() {
|
|
||||||
const m = document.createElement("meta");
|
|
||||||
m.setAttribute("http-equiv", "Content-Security-Policy");
|
|
||||||
m.setAttribute("content", "default-src 'none'");
|
|
||||||
document.head.append(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener("load", () => {
|
|
||||||
// Steps:
|
|
||||||
// 1. Execute `javascript:` URL: queues task for executing `f`.
|
|
||||||
// 2. Add CSP.
|
|
||||||
// 3. Execute `javascript:` URL: queues `securitypolicyviolation` event e1
|
|
||||||
// (expected) or a task for executing `g`.
|
|
||||||
|
|
||||||
// `f`: should queue another task, a different `securitypolicyviolation`
|
|
||||||
// e2.
|
|
||||||
// `g`: doesn't matter, won't be executed.
|
|
||||||
|
|
||||||
// Potentially two queues from the spec are relevant here:
|
|
||||||
// Queue 1 for the `javascript:` URL navigations:
|
|
||||||
// <https://html.spec.whatwg.org/#navigation-and-traversal-task-source>.
|
|
||||||
// Queue 2 for the "securitypolicyviolation" events:
|
|
||||||
// <https://github.com/w3c/webappsec-csp/issues/696>.
|
|
||||||
|
|
||||||
// After step 1:
|
|
||||||
// Queue 1: [javascript-f]
|
|
||||||
// After step 2:
|
|
||||||
// Queue 1: [javascript-f]
|
|
||||||
// Expected after step 3:
|
|
||||||
// Queue 1: [javascript-f]; Queue 2: [e1]
|
|
||||||
// After javascript-f:
|
|
||||||
// Queue 1: []; Queue 2: [e1, e2]*
|
|
||||||
// Unexpected after step 3:
|
|
||||||
// Queue 1: [javascript-f, javascript-g]
|
|
||||||
// After javascript-f:
|
|
||||||
// Queue 1: [javascript-g]; Queue 2: [e2]
|
|
||||||
// After javascript-g:
|
|
||||||
// Queue 1: []; Queue 2: [e2, e1]*
|
|
||||||
//
|
|
||||||
// *: the order or processing two elements of different queues is
|
|
||||||
// unspecified. For this test only the order within queue 2 matters.
|
|
||||||
//
|
|
||||||
// So e1 being dispatched before e2 implies the snapshotted CSP was
|
|
||||||
// checked during task creation, not during task execution.
|
|
||||||
//
|
|
||||||
// That behavior isn't specified; see
|
|
||||||
// <https://github.com/whatwg/html/issues/4651#issuecomment-2412623188>
|
|
||||||
// and related comments. This test is a first step towards specifying
|
|
||||||
// a deterministic behavior.
|
|
||||||
|
|
||||||
const iframe = document.getElementById("iframe");
|
|
||||||
iframe.contentWindow.location.href = "javascript:parent.f()";
|
|
||||||
addCSP();
|
|
||||||
iframe.contentWindow.location.href = "javascript:g()";
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
3
tests/wpt/tests/content-security-policy/report-hash/default-src.https.window.js
vendored
Normal file
3
tests/wpt/tests/content-security-policy/report-hash/default-src.https.window.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// META: script=/reporting/resources/report-helper.js
|
||||||
|
// META: script=resources/report-hash-test-runner.sub.js
|
||||||
|
run_tests();
|
3
tests/wpt/tests/content-security-policy/report-hash/default-src.https.window.js.sub.headers
vendored
Normal file
3
tests/wpt/tests/content-security-policy/report-hash/default-src.https.window.js.sub.headers
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy: default-src 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha256-1XF/E08XndkoxwN6eIa5J89hYn3OVZ/UyB8BrU5jgzk="
|
18
tests/wpt/tests/content-security-policy/report-hash/multiple-policies.https.sub.html
vendored
Normal file
18
tests/wpt/tests/content-security-policy/report-hash/multiple-policies.https.sub.html
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
|
<title>Test that reports for same-origin subresources are sent with hashes</title>
|
||||||
|
<script src='/resources/testharness.js'></script>
|
||||||
|
<script src='/resources/testharnessreport.js'></script>
|
||||||
|
<script src='/reporting/resources/report-helper.js'></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- Actually run the tests. -->
|
||||||
|
<script src='resources/report-hash-test-runner.sub.js'></script>
|
||||||
|
<script>
|
||||||
|
run_tests();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy: script-src-elem 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Reporting-Endpoints: csp-endpoint2="/reporting/resources/report.py?reportID={{$id2:uuid()}}"
|
||||||
|
Content-Security-Policy: script-src-elem 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha512'; report-to csp-endpoint2
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha256-1XF/E08XndkoxwN6eIa5J89hYn3OVZ/UyB8BrU5jgzk="
|
||||||
|
Server-Timing: uuid2;desc="{{$id2}}",hash2;desc="sha512-hG4x56V5IhUUepZdYU/lX7UOQJ2M7f6ud2EI7os4JV3OwXSZ002P3zkb9tXQkjpOO8UbtjuEufvdcU67Qt2tlw=="
|
||||||
|
|
3
tests/wpt/tests/content-security-policy/report-hash/reportonly-default-src.https.window.js
vendored
Normal file
3
tests/wpt/tests/content-security-policy/report-hash/reportonly-default-src.https.window.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// META: script=/reporting/resources/report-helper.js
|
||||||
|
// META: script=resources/report-hash-test-runner.sub.js
|
||||||
|
run_tests();
|
|
@ -0,0 +1,3 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy-Report-Only: default-src 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha256-1XF/E08XndkoxwN6eIa5J89hYn3OVZ/UyB8BrU5jgzk="
|
|
@ -0,0 +1,3 @@
|
||||||
|
// META: script=/reporting/resources/report-helper.js
|
||||||
|
// META: script=resources/report-hash-test-runner.sub.js
|
||||||
|
run_tests();
|
|
@ -0,0 +1,3 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy-Report-Only: script-src-elem 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha256-1XF/E08XndkoxwN6eIa5J89hYn3OVZ/UyB8BrU5jgzk="
|
|
@ -0,0 +1,4 @@
|
||||||
|
// META: script=/reporting/resources/report-helper.js
|
||||||
|
// META: script=resources/report-hash-test-runner.sub.js
|
||||||
|
run_tests();
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy-Report-Only: script-src 'none' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha256-1XF/E08XndkoxwN6eIa5J89hYn3OVZ/UyB8BrU5jgzk="
|
||||||
|
|
3
tests/wpt/tests/content-security-policy/report-hash/reportonly-script-src.https.window.js
vendored
Normal file
3
tests/wpt/tests/content-security-policy/report-hash/reportonly-script-src.https.window.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// META: script=/reporting/resources/report-helper.js
|
||||||
|
// META: script=resources/report-hash-test-runner.sub.js
|
||||||
|
run_tests();
|
|
@ -0,0 +1,3 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy-Report-Only: script-src 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha256-1XF/E08XndkoxwN6eIa5J89hYn3OVZ/UyB8BrU5jgzk="
|
129
tests/wpt/tests/content-security-policy/report-hash/resources/report-hash-test-runner.sub.js
vendored
Normal file
129
tests/wpt/tests/content-security-policy/report-hash/resources/report-hash-test-runner.sub.js
vendored
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
function find_server_timing(name) {
|
||||||
|
const server_timing = performance.getEntriesByType("navigation")[0].serverTiming;
|
||||||
|
for (entry of server_timing) {
|
||||||
|
if (entry.name == name) {
|
||||||
|
return entry.description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ORIGIN = "https://{{host}}:{{ports[https][0]}}";
|
||||||
|
const REMOTE_ORIGIN = "https://{{hosts[alt][www]}}:{{ports[https][0]}}";
|
||||||
|
const endpoint = `${ORIGIN}/reporting/resources/report.py`;
|
||||||
|
const id = find_server_timing("uuid");
|
||||||
|
const id2 = find_server_timing("uuid2");
|
||||||
|
const subresource_url = `${ORIGIN}/reporting/resources/comment.js`;
|
||||||
|
const crossorigin_subresource_url = `${REMOTE_ORIGIN}/reporting/resources/comment.js`;
|
||||||
|
const subresource_hash = find_server_timing("hash");
|
||||||
|
const subresource_hash2 = find_server_timing("hash2");
|
||||||
|
let counter = 0;
|
||||||
|
|
||||||
|
function reporting_observer_setup(expected_url, expected_hash) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
new ReportingObserver((reports, observer) => {
|
||||||
|
assert_unreached();
|
||||||
|
observer.disconnect();
|
||||||
|
}, { types: ["csp-hash"] }).observe();
|
||||||
|
step_timeout(resolve, 100);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function check_reports(uuid, expected_hash, url) {
|
||||||
|
const reports = await pollReports(endpoint, uuid);
|
||||||
|
checkReportExists(reports, 'csp-hash', location.href);
|
||||||
|
const report = getReport(reports, 'csp-hash', location.href, url);
|
||||||
|
assert_not_equals(report, null);
|
||||||
|
assert_equals(report.body.hash, expected_hash);
|
||||||
|
assert_equals(report.body.type, "subresource");
|
||||||
|
assert_equals(report.body.destination, "script");
|
||||||
|
}
|
||||||
|
|
||||||
|
function report_hash_test(url, populate_script_attributes, expected_hash, expected_hash2, description) {
|
||||||
|
promise_test(async t => {
|
||||||
|
const unique_subresource_url = `${url}?${++counter}`;
|
||||||
|
const observer_promise = reporting_observer_setup(unique_subresource_url, subresource_hash);
|
||||||
|
// Trigger a script load
|
||||||
|
await new Promise(resolve => {
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.src = unique_subresource_url;
|
||||||
|
populate_script_attributes(script);
|
||||||
|
script.addEventListener('load', resolve);
|
||||||
|
document.head.appendChild(script);
|
||||||
|
});
|
||||||
|
|
||||||
|
await check_reports(id, expected_hash, unique_subresource_url);
|
||||||
|
if (id2) {
|
||||||
|
await check_reports(id2, expected_hash2, unique_subresource_url);
|
||||||
|
}
|
||||||
|
await observer_promise;
|
||||||
|
}, description);
|
||||||
|
}
|
||||||
|
|
||||||
|
function no_report_test(create_element, description) {
|
||||||
|
promise_test(async t => {
|
||||||
|
const unique_subresource_url = `${subresource_url}?${++counter}`;
|
||||||
|
// Trigger a script load
|
||||||
|
await new Promise(resolve => {
|
||||||
|
const elem = create_element(unique_subresource_url);
|
||||||
|
elem.addEventListener('load', resolve);
|
||||||
|
elem.addEventListener('error', resolve);
|
||||||
|
document.head.appendChild(elem);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wait for report to be received.
|
||||||
|
const reports = await pollReports(endpoint, id);
|
||||||
|
const report = getReport(reports, 'csp-hash', location.href, unique_subresource_url);
|
||||||
|
assert_equals(report, null);
|
||||||
|
}, description);
|
||||||
|
};
|
||||||
|
|
||||||
|
function run_tests() {
|
||||||
|
report_hash_test(subresource_url, script => {
|
||||||
|
script.crossOrigin = "anonymous";
|
||||||
|
}, subresource_hash, subresource_hash2,
|
||||||
|
"Reporting endpoints received hash for same-origin CORS script.");
|
||||||
|
|
||||||
|
report_hash_test(subresource_url, script => {
|
||||||
|
}, subresource_hash, subresource_hash2,
|
||||||
|
"Reporting endpoints received hash for same-origin no-CORS script.");
|
||||||
|
|
||||||
|
report_hash_test(crossorigin_subresource_url, script => {
|
||||||
|
script.crossOrigin = "anonymous";
|
||||||
|
}, subresource_hash, subresource_hash2,
|
||||||
|
"Reporting endpoints received hash for cross-origin CORS script.");
|
||||||
|
|
||||||
|
report_hash_test(crossorigin_subresource_url, script => {
|
||||||
|
}, /*expected_hash=*/"", /*expected_hash2=*/"",
|
||||||
|
"Reporting endpoints received no hash for cross-origin no-CORS script.");
|
||||||
|
|
||||||
|
report_hash_test(subresource_url, script => {
|
||||||
|
script.crossOrigin = "anonymous";
|
||||||
|
script.integrity = "sha512-hG4x56V5IhUUepZdYU/lX7UOQJ2M7f6ud2EI7os4JV3OwXSZ002P3zkb9tXQkjpOO8UbtjuEufvdcU67Qt2tlw==";
|
||||||
|
}, subresource_hash, subresource_hash2,
|
||||||
|
"Reporting endpoints received the right hash for same-origin CORS script with integrity.");
|
||||||
|
|
||||||
|
no_report_test(url => {
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.src = url;
|
||||||
|
script.crossOrigin = "anonymous"
|
||||||
|
script.integrity = "sha256-foobar";
|
||||||
|
return script;
|
||||||
|
}, "Reporting endpoints received no report for failed integrity check with sha256.");
|
||||||
|
|
||||||
|
no_report_test(url => {
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.src = url;
|
||||||
|
script.crossOrigin = "anonymous"
|
||||||
|
script.integrity = "sha512-foobar";
|
||||||
|
return script;
|
||||||
|
}, "Reporting endpoints received no report for failed integrity check with sha512.");
|
||||||
|
|
||||||
|
no_report_test(url => {
|
||||||
|
const link = document.createElement('link');
|
||||||
|
link.href = url;
|
||||||
|
link.crossOrigin = "anonymous"
|
||||||
|
link.rel = "stylesheet"
|
||||||
|
return link;
|
||||||
|
}, "Reporting endpoints received no report for CORS stylesheet.");
|
||||||
|
}
|
3
tests/wpt/tests/content-security-policy/report-hash/script-src-elem.https.window.js
vendored
Normal file
3
tests/wpt/tests/content-security-policy/report-hash/script-src-elem.https.window.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// META: script=/reporting/resources/report-helper.js
|
||||||
|
// META: script=resources/report-hash-test-runner.sub.js
|
||||||
|
run_tests();
|
|
@ -0,0 +1,3 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy: script-src-elem 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha256-1XF/E08XndkoxwN6eIa5J89hYn3OVZ/UyB8BrU5jgzk="
|
3
tests/wpt/tests/content-security-policy/report-hash/script-src-sha512.https.window.js
vendored
Normal file
3
tests/wpt/tests/content-security-policy/report-hash/script-src-sha512.https.window.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// META: script=/reporting/resources/report-helper.js
|
||||||
|
// META: script=resources/report-hash-test-runner.sub.js
|
||||||
|
run_tests();
|
|
@ -0,0 +1,3 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy: script-src 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha512' 'report-sha384' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha512-hG4x56V5IhUUepZdYU/lX7UOQJ2M7f6ud2EI7os4JV3OwXSZ002P3zkb9tXQkjpOO8UbtjuEufvdcU67Qt2tlw=="
|
3
tests/wpt/tests/content-security-policy/report-hash/script-src.https.window.js
vendored
Normal file
3
tests/wpt/tests/content-security-policy/report-hash/script-src.https.window.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
// META: script=/reporting/resources/report-helper.js
|
||||||
|
// META: script=resources/report-hash-test-runner.sub.js
|
||||||
|
run_tests();
|
3
tests/wpt/tests/content-security-policy/report-hash/script-src.https.window.js.sub.headers
vendored
Normal file
3
tests/wpt/tests/content-security-policy/report-hash/script-src.https.window.js.sub.headers
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Reporting-Endpoints: csp-endpoint="/reporting/resources/report.py?reportID={{$id:uuid()}}"
|
||||||
|
Content-Security-Policy: script-src 'self' {{hosts[alt][www]}}:{{ports[https][0]}} 'unsafe-inline' 'report-sha256'; report-to csp-endpoint
|
||||||
|
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha256-1XF/E08XndkoxwN6eIa5J89hYn3OVZ/UyB8BrU5jgzk="
|
31
tests/wpt/tests/css/css-anchor-position/chrome-379758203-crash.html
vendored
Normal file
31
tests/wpt/tests/css/css-anchor-position/chrome-379758203-crash.html
vendored
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="test-wait">
|
||||||
|
<link rel="help" href="https://crbug.com/379758203">
|
||||||
|
<style>
|
||||||
|
.spacer { height: 2000px; }
|
||||||
|
.anchor { anchor-name: --a; }
|
||||||
|
#popover {
|
||||||
|
transition: bottom 1s allow-discrete;
|
||||||
|
position-anchor: --a;
|
||||||
|
position-try-fallbacks: flip-block;
|
||||||
|
top: anchor(bottom);
|
||||||
|
bottom: auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="spacer"></div>
|
||||||
|
<div class="anchor">
|
||||||
|
<div id="popover" popover>Hello World</div>
|
||||||
|
</div>
|
||||||
|
<div class="spacer"></div>
|
||||||
|
<script>
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
document.documentElement.scrollTop = 2000;
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
popover.showPopover();
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
document.documentElement.scrollTop = 0;
|
||||||
|
document.documentElement.classList.remove("test-wait");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -2,7 +2,7 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS Grid Layout Test: only serialize 'grid' when the value can roundtrip</title>
|
<title>CSS Grid Layout Test: only serialize 'grid' shorthands when the value can roundtrip</title>
|
||||||
<link rel="author" title="Daniel Libby" href="mailto:dlibby@microsoft.com">
|
<link rel="author" title="Daniel Libby" href="mailto:dlibby@microsoft.com">
|
||||||
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
|
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid">
|
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid">
|
||||||
|
@ -236,6 +236,41 @@
|
||||||
'grid-template-columns': 'none',
|
'grid-template-columns': 'none',
|
||||||
'grid-template-rows': 'repeat(auto-fit, 3px)'
|
'grid-template-rows': 'repeat(auto-fit, 3px)'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test_shorthand_roundtrip('grid-template: none;',
|
||||||
|
{
|
||||||
|
'grid': '',
|
||||||
|
'grid-template-areas': 'none',
|
||||||
|
'grid-template-rows': 'none',
|
||||||
|
'grid-template-columns': 'none',
|
||||||
|
'grid-template': 'none'
|
||||||
|
});
|
||||||
|
test_shorthand_roundtrip('grid-template: auto / auto;',
|
||||||
|
{
|
||||||
|
'grid': '',
|
||||||
|
'grid-template-areas': 'none',
|
||||||
|
'grid-template-rows': 'auto',
|
||||||
|
'grid-template-columns': 'auto',
|
||||||
|
'grid-template': 'auto / auto'
|
||||||
|
});
|
||||||
|
test_shorthand_roundtrip('grid-template: [header-top] "a a a" [header-bottom] [main-top] "b b b" 1fr [main-bottom] / auto 1fr auto',
|
||||||
|
{
|
||||||
|
'grid': '',
|
||||||
|
'grid-template-areas': '"a a a" "b b b"',
|
||||||
|
'grid-template-rows': '[header-top] auto [header-bottom main-top] 1fr [main-bottom]',
|
||||||
|
'grid-template-columns': 'auto 1fr auto',
|
||||||
|
'grid-template': '[header-top] "a a a" [header-bottom main-top] "b b b" 1fr [main-bottom] / auto 1fr auto'
|
||||||
|
});
|
||||||
|
|
||||||
|
test_shorthand_roundtrip('grid-template: [header-top] "a a a" [header-bottom] [main-top] "b b b" 1fr [main-bottom] "c c c" "d d d" / auto',
|
||||||
|
{
|
||||||
|
'grid': '',
|
||||||
|
'grid-template-areas': '"a a a" "b b b" "c c c" "d d d"',
|
||||||
|
'grid-template-rows': '[header-top] auto [header-bottom main-top] 1fr [main-bottom] auto auto',
|
||||||
|
'grid-template-columns': 'auto',
|
||||||
|
'grid-template': '[header-top] "a a a" [header-bottom main-top] "b b b" 1fr [main-bottom] "c c c" "d d d" / auto'
|
||||||
|
});
|
||||||
|
|
||||||
test_shorthand_roundtrip('grid-template-rows: auto auto; grid-template-columns: repeat(2, 3px); grid-template-areas: "one two" "three four"',
|
test_shorthand_roundtrip('grid-template-rows: auto auto; grid-template-columns: repeat(2, 3px); grid-template-areas: "one two" "three four"',
|
||||||
{
|
{
|
||||||
'grid': '',
|
'grid': '',
|
||||||
|
|
|
@ -28,6 +28,7 @@ function testValidGridTemplate(valueGridTemplate, valueGridAreas, serializedGrid
|
||||||
|
|
||||||
testValidGridTemplate("none / 1px", "\"a\"", "");
|
testValidGridTemplate("none / 1px", "\"a\"", "");
|
||||||
testValidGridTemplate("none / none", "\"a\"", "");
|
testValidGridTemplate("none / none", "\"a\"", "");
|
||||||
|
testValidGridTemplate("none / none", "\"a\" \"b\" \"c\" \"d\" \"e\"", "");
|
||||||
testValidGridTemplate("auto / 1px", "\"a a a\"", "\"a a a\" / 1px");
|
testValidGridTemplate("auto / 1px", "\"a a a\"", "\"a a a\" / 1px");
|
||||||
testValidGridTemplate("auto / auto", "\"a a a\"", "\"a a a\" / auto");
|
testValidGridTemplate("auto / auto", "\"a a a\"", "\"a a a\" / auto");
|
||||||
testValidGridTemplate("10px 20px 30px / 40px 50px 60px 70px",
|
testValidGridTemplate("10px 20px 30px / 40px 50px 60px 70px",
|
||||||
|
|
39
tests/wpt/tests/css/css-grid/parsing/grid-template-shorthand-composition.html
vendored
Normal file
39
tests/wpt/tests/css/css-grid/parsing/grid-template-shorthand-composition.html
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Grid Layout Test: grid-template-rows, grid-template-columns, and grid-template-areas properly set grid-template longhand</title>
|
||||||
|
<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#propdef-grid-template">
|
||||||
|
<meta name="assert" content="grid-template serializes properly when longhands are set.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
function testValidGridTemplate(valueGridTemplateRows, valueGridTemplateColumns, valueGridAreas, serializedGridTemplateValue) {
|
||||||
|
test(()=>{
|
||||||
|
const root = document.children[0];
|
||||||
|
root.style.gridTemplateRows = "";
|
||||||
|
root.style.gridTemplateRows = valueGridTemplateRows;
|
||||||
|
root.style.gridTemplateColumns = "";
|
||||||
|
root.style.gridTemplateColumns = valueGridTemplateColumns;
|
||||||
|
root.style.gridTemplateAreas = "";
|
||||||
|
root.style.gridTemplateAreas = valueGridAreas;
|
||||||
|
assert_equals(root.style.gridTemplate, serializedGridTemplateValue);
|
||||||
|
}, `grid-template-rows: ${valueGridTemplateRows}, grid-template-columns: ${valueGridTemplateColumns}, and "grid-template-areas: ${valueGridAreas};" should be valid.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// `none`
|
||||||
|
testValidGridTemplate("none", "none", "none", "none");
|
||||||
|
|
||||||
|
// `<'grid-template-rows'> / <'grid-template-columns'>`
|
||||||
|
testValidGridTemplate("auto", "auto", "none", "auto / auto");
|
||||||
|
|
||||||
|
// `[ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?`
|
||||||
|
testValidGridTemplate("[header-top] auto [header-bottom main-top] 1fr [main-bottom]", "auto 1fr auto", "\"a a a\" \"b b b\"", "[header-top] \"a a a\" [header-bottom main-top] \"b b b\" 1fr [main-bottom] / auto 1fr auto");
|
||||||
|
testValidGridTemplate("auto", "auto", "\"a a a\" \"b b b\"", "\"a a a\" \"b b b\" / auto");
|
||||||
|
testValidGridTemplate("min-content", "min-content", "\"a a a\" \"b b b\" \"c c c\" \"d d d\"", "\"a a a\" min-content \"b b b\" \"c c c\" \"d d d\" / min-content");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -58,6 +58,15 @@ test_shorthand_value('grid-template',
|
||||||
'grid-template-columns': 'auto 1fr auto',
|
'grid-template-columns': 'auto 1fr auto',
|
||||||
'grid-template-areas': '"a a a" "b b b"'
|
'grid-template-areas': '"a a a" "b b b"'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test_shorthand_value('grid-template',
|
||||||
|
' [] "a a a" []' +
|
||||||
|
' [] "b b b" 1fr []' +
|
||||||
|
' "c c c" / [] auto 1fr [] auto []', {
|
||||||
|
'grid-template-rows': 'auto 1fr auto',
|
||||||
|
'grid-template-columns': 'auto 1fr auto',
|
||||||
|
'grid-template-areas': '"a a a" "b b b" "c c c"'
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
57
tests/wpt/tests/css/css-overflow/scrollable-overflow-padding-inline.html
vendored
Normal file
57
tests/wpt/tests/css/css-overflow/scrollable-overflow-padding-inline.html
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>CSS Overflow Test: Ensure that padding inflation for inline elements are carried out as part of containing line box's bounds.</title>
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#scrollable">
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1934960">
|
||||||
|
<link rel="stylesheet" href="/fonts/ahem.css">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<style>
|
||||||
|
.scroller {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
font: 10px/1 Ahem;
|
||||||
|
padding: 10px;
|
||||||
|
overflow: scroll;
|
||||||
|
}
|
||||||
|
.filler {
|
||||||
|
width: 1px;
|
||||||
|
height: 100px;
|
||||||
|
background: purple;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/resources/check-layout-th.js"></script>
|
||||||
|
<body onload="checkLayout('.scroller')">
|
||||||
|
<!-- Block-end is padding-inflated from the last line,
|
||||||
|
even if it only consists of inline elements -->
|
||||||
|
<div class="scroller" data-expected-scroll-height="130">
|
||||||
|
<div class="filler"></div>
|
||||||
|
<span>X</span>
|
||||||
|
</div>
|
||||||
|
<!-- Inline element's margin should not add to scrollable overflow,
|
||||||
|
just like how it does not affect the next line's positioning -->
|
||||||
|
<div class="scroller" data-expected-scroll-height="130">
|
||||||
|
<div class="filler"></div>
|
||||||
|
<span style="margin-bottom: 100px;">X</span>
|
||||||
|
</div>
|
||||||
|
<!-- Line bound is padding-inflated, but not its overflow. -->
|
||||||
|
<div class="scroller" data-expected-scroll-height="120" style="line-height: 0;">
|
||||||
|
<div class="filler"></div>
|
||||||
|
<span>X</span>
|
||||||
|
</div>
|
||||||
|
<div class="scroller" data-expected-scroll-height="125" style="line-height: 5px;">
|
||||||
|
<div class="filler"></div>
|
||||||
|
<span>X</span>
|
||||||
|
</div>
|
||||||
|
<!-- Ruby element, despite being `display: ruby`, behaves as if inline -->
|
||||||
|
<div class="scroller" data-expected-scroll-height="120" style="line-height: 0;">
|
||||||
|
<div class="filler"></div>
|
||||||
|
<ruby>X</ruby>
|
||||||
|
</div>
|
||||||
|
<!-- Inline replaced elements still trigger padding-inflation -->
|
||||||
|
<div class="scroller" data-expected-scroll-height="280" style="line-height: 0px;">
|
||||||
|
<div class="filler"></div>
|
||||||
|
<img src="../css-images/support/60x60-green.png" style="margin-bottom: 100px;"></img>
|
||||||
|
</div>
|
||||||
|
</body>
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS ::checkmark Pseudo-Element Test</title>
|
<title>CSS ::checkmark Pseudo-Element Test</title>
|
||||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10986">
|
<link rel="help" href="https://drafts.csswg.org/css-forms/#checkmark-element">
|
||||||
<meta name="assert" content="This test checks the validity of the ::checkmark pseudo element selector." />
|
<meta name="assert" content="This test checks the validity of the ::checkmark pseudo element selector." />
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS ::picker-icon Pseudo-Element Test</title>
|
<title>CSS ::picker-icon Pseudo-Element Test</title>
|
||||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10986">
|
<link rel="help" href="https://drafts.csswg.org/css-forms/#picker-icon-pseudo-element">
|
||||||
<meta name="assert" content="This test checks the validity of the ::picker-icon pseudo element selector." />
|
<meta name="assert" content="This test checks the validity of the ::picker-icon pseudo element selector." />
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
60
tests/wpt/tests/css/css-rhythm/parsing/block-step-computed.html
vendored
Normal file
60
tests/wpt/tests/css/css-rhythm/parsing/block-step-computed.html
vendored
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CSS Rhythm: block-step computed values</title>
|
||||||
|
<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-rhythm/#block-step">
|
||||||
|
<meta name="assert" content="Checking computed values for block-step">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/computed-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="target"></div>
|
||||||
|
<script>
|
||||||
|
// Default values
|
||||||
|
test_computed_value("block-step", "none");
|
||||||
|
test_computed_value("block-step", "auto", "none");
|
||||||
|
test_computed_value("block-step", "margin-box", "none");
|
||||||
|
test_computed_value("block-step", "up", "none");
|
||||||
|
|
||||||
|
test_computed_value("block-step", "none auto", "none");
|
||||||
|
test_computed_value("block-step", "none margin-box", "none");
|
||||||
|
test_computed_value("block-step", "none up", "none");
|
||||||
|
|
||||||
|
test_computed_value("block-step", "auto none", "none");
|
||||||
|
test_computed_value("block-step", "auto margin-box", "none");
|
||||||
|
test_computed_value("block-step", "auto up", "none");
|
||||||
|
|
||||||
|
test_computed_value("block-step", "margin-box none", "none");
|
||||||
|
test_computed_value("block-step", "margin-box auto", "none");
|
||||||
|
test_computed_value("block-step", "margin-box up", "none");
|
||||||
|
|
||||||
|
test_computed_value("block-step", "up none", "none");
|
||||||
|
test_computed_value("block-step", "up auto", "none");
|
||||||
|
test_computed_value("block-step", "up margin-box", "none");
|
||||||
|
|
||||||
|
test_computed_value("block-step", "auto up margin-box", "none");
|
||||||
|
test_computed_value("block-step", "none auto up margin-box", "none");
|
||||||
|
|
||||||
|
// Non-default values
|
||||||
|
test_computed_value("block-step", "padding-box");
|
||||||
|
test_computed_value("block-step", "content-box");
|
||||||
|
test_computed_value("block-step", "100px");
|
||||||
|
test_computed_value("block-step", "center");
|
||||||
|
test_computed_value("block-step", "start");
|
||||||
|
test_computed_value("block-step", "end");
|
||||||
|
test_computed_value("block-step", "down");
|
||||||
|
test_computed_value("block-step", "nearest");
|
||||||
|
|
||||||
|
test_computed_value("block-step", "none padding-box up", "padding-box");
|
||||||
|
test_computed_value("block-step", "content-box 100px up", "100px content-box");
|
||||||
|
test_computed_value("block-step", "content-box start 100px", "100px content-box start");
|
||||||
|
test_computed_value("block-step", "100px center down padding-box", "100px padding-box center down");
|
||||||
|
test_computed_value("block-step", "start 100px", "100px start");
|
||||||
|
test_computed_value("block-step", "end 100px", "100px end");
|
||||||
|
test_computed_value("block-step", "end nearest 100px", "100px end nearest");
|
||||||
|
test_computed_value("block-step", "center content-box 100px", "100px content-box center");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
23
tests/wpt/tests/css/css-rhythm/parsing/block-step-invalid.html
vendored
Normal file
23
tests/wpt/tests/css/css-rhythm/parsing/block-step-invalid.html
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CSS Rhythm: block-step invalid values</title>
|
||||||
|
<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-rhythm/#block-step">
|
||||||
|
<meta name="assert" content="Invalid values for block-step should not be parsed">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_invalid_value("block-step", "auto auto");
|
||||||
|
test_invalid_value("block-step", "start end");
|
||||||
|
test_invalid_value("block-step", "center start");
|
||||||
|
test_invalid_value("block-step", "none none");
|
||||||
|
test_invalid_value("block-step", "300px none");
|
||||||
|
test_invalid_value("block-step", "300px start none");
|
||||||
|
test_invalid_value("block-step", "300px start border-box padding-box");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
59
tests/wpt/tests/css/css-rhythm/parsing/block-step-valid.html
vendored
Normal file
59
tests/wpt/tests/css/css-rhythm/parsing/block-step-valid.html
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>CSS Rhythm: block-step valid values</title>
|
||||||
|
<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-rhythm/#block-step">
|
||||||
|
<meta name="assert" content="Parsing valid values for block-step property">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
// Default values
|
||||||
|
test_valid_value("block-step", "none");
|
||||||
|
test_valid_value("block-step", "auto", "none");
|
||||||
|
test_valid_value("block-step", "margin-box", "none");
|
||||||
|
test_valid_value("block-step", "up", "none");
|
||||||
|
|
||||||
|
test_valid_value("block-step", "none auto", "none");
|
||||||
|
test_valid_value("block-step", "none margin-box", "none");
|
||||||
|
test_valid_value("block-step", "none up", "none");
|
||||||
|
|
||||||
|
test_valid_value("block-step", "auto none", "none");
|
||||||
|
test_valid_value("block-step", "auto margin-box", "none");
|
||||||
|
test_valid_value("block-step", "auto up", "none");
|
||||||
|
|
||||||
|
test_valid_value("block-step", "margin-box none", "none");
|
||||||
|
test_valid_value("block-step", "margin-box auto", "none");
|
||||||
|
test_valid_value("block-step", "margin-box up", "none");
|
||||||
|
|
||||||
|
test_valid_value("block-step", "up none", "none");
|
||||||
|
test_valid_value("block-step", "up auto", "none");
|
||||||
|
test_valid_value("block-step", "up margin-box", "none");
|
||||||
|
|
||||||
|
test_valid_value("block-step", "auto up margin-box", "none");
|
||||||
|
test_valid_value("block-step", "none auto up margin-box", "none");
|
||||||
|
|
||||||
|
// Non-default values
|
||||||
|
test_valid_value("block-step", "padding-box");
|
||||||
|
test_valid_value("block-step", "content-box");
|
||||||
|
test_valid_value("block-step", "100px");
|
||||||
|
test_valid_value("block-step", "center");
|
||||||
|
test_valid_value("block-step", "start");
|
||||||
|
test_valid_value("block-step", "end");
|
||||||
|
test_valid_value("block-step", "down");
|
||||||
|
test_valid_value("block-step", "nearest");
|
||||||
|
|
||||||
|
test_valid_value("block-step", "none padding-box up", "padding-box");
|
||||||
|
test_valid_value("block-step", "content-box 100px up", "100px content-box");
|
||||||
|
test_valid_value("block-step", "content-box start 100px", "100px content-box start");
|
||||||
|
test_valid_value("block-step", "100px center down padding-box", "100px padding-box center down");
|
||||||
|
test_valid_value("block-step", "start 100px", "100px start");
|
||||||
|
test_valid_value("block-step", "end 100px", "100px end");
|
||||||
|
test_valid_value("block-step", "end nearest 100px", "100px end nearest");
|
||||||
|
test_valid_value("block-step", "center content-box 100px", "100px content-box center");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -15,7 +15,6 @@ test_valid_selector("::part(mypart):active-view-transition-type(mytype)");
|
||||||
test_valid_selector("::part(mypart):any-link");
|
test_valid_selector("::part(mypart):any-link");
|
||||||
test_valid_selector("::part(mypart):autofill");
|
test_valid_selector("::part(mypart):autofill");
|
||||||
test_valid_selector("::part(mypart):checked");
|
test_valid_selector("::part(mypart):checked");
|
||||||
test_valid_selector("::part(mypart):closed");
|
|
||||||
test_valid_selector("::part(mypart):default");
|
test_valid_selector("::part(mypart):default");
|
||||||
test_valid_selector("::part(mypart):defined");
|
test_valid_selector("::part(mypart):defined");
|
||||||
test_valid_selector("::part(mypart):dir(ltr)");
|
test_valid_selector("::part(mypart):dir(ltr)");
|
||||||
|
|
29
tests/wpt/tests/css/css-transitions/allow-discrete-auto-inset.html
vendored
Normal file
29
tests/wpt/tests/css/css-transitions/allow-discrete-auto-inset.html
vendored
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>CSS Transitions Test: discrete transition for auto inset</title>
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-transitions-2/#transition-behavior-property">
|
||||||
|
<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
|
||||||
|
<style>
|
||||||
|
#container {
|
||||||
|
position: relative;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
#abs {
|
||||||
|
position: absolute;
|
||||||
|
transition: top 1000s step-start allow-discrete;
|
||||||
|
inset: 0px;
|
||||||
|
background: red;
|
||||||
|
}
|
||||||
|
#abs.auto {
|
||||||
|
top: auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p>Test passes if there is a filled green square.</p>
|
||||||
|
<div id="container">
|
||||||
|
<div id="abs"></div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
abs.offsetTop;
|
||||||
|
abs.className = "auto";
|
||||||
|
</script>
|
|
@ -4,10 +4,6 @@
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<script src="/css/css-animations/support/testcommon.js"></script>
|
<script src="/css/css-animations/support/testcommon.js"></script>
|
||||||
|
|
||||||
<div class=testcase id=discrete>Allow discrete</div>
|
|
||||||
<div class=testcase id=normal>No discrete</div>
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.testcase {
|
.testcase {
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -22,7 +18,10 @@
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
<body>
|
||||||
|
<div class=testcase id=discrete>Allow discrete</div>
|
||||||
|
<div class=testcase id=normal>No discrete</div>
|
||||||
|
</body>
|
||||||
<script>
|
<script>
|
||||||
promise_test(async () => {
|
promise_test(async () => {
|
||||||
await waitForAnimationFrames(2);
|
await waitForAnimationFrames(2);
|
||||||
|
|
|
@ -44,3 +44,12 @@ features:
|
||||||
- name: calc-constants
|
- name: calc-constants
|
||||||
files:
|
files:
|
||||||
- calc-infinity-*
|
- calc-infinity-*
|
||||||
|
- name: viewport-unit-variants
|
||||||
|
files:
|
||||||
|
- viewport-units-compute.html
|
||||||
|
- viewport-units-invalidation.html
|
||||||
|
- viewport-units-keyframes.html
|
||||||
|
- viewport-units-media-queries.html
|
||||||
|
- viewport-units-parsing.html
|
||||||
|
- viewport-units-writing-mode-font-size.html
|
||||||
|
- viewport-units-writing-mode.html
|
||||||
|
|
|
@ -66,7 +66,8 @@ function run() {
|
||||||
"multiplication of number and length");
|
"multiplication of number and length");
|
||||||
assert_invalid_value("margin-left", "calc(2px * 1px)", // invalid calc expression
|
assert_invalid_value("margin-left", "calc(2px * 1px)", // invalid calc expression
|
||||||
"multiplication of length and length");
|
"multiplication of length and length");
|
||||||
|
assert_invalid_value("margin-left", "calc(20 / 0.75rem)", // invalid calc expression
|
||||||
|
"division by non-number");
|
||||||
}
|
}
|
||||||
|
|
||||||
run();
|
run();
|
||||||
|
|
|
@ -5,10 +5,8 @@
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-variables/#using-variables">
|
<link rel="help" href="https://drafts.csswg.org/css-variables/#using-variables">
|
||||||
<link rel="match" href="variable-generated-content-dynamic-001-ref.html">
|
<link rel="match" href="variable-generated-content-dynamic-001-ref.html">
|
||||||
<style>
|
<style>
|
||||||
:root {
|
|
||||||
--my-attr: attr(data-foo);
|
|
||||||
}
|
|
||||||
div::before {
|
div::before {
|
||||||
|
--my-attr: attr(data-foo);
|
||||||
content: var(--my-attr);
|
content: var(--my-attr);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue