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:
Servo WPT Sync 2024-12-08 11:45:12 +01:00 committed by GitHub
parent 2fbe16876c
commit b3977e7f6c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
146 changed files with 4116 additions and 587 deletions

View file

@ -1,6 +0,0 @@
[clear-computed.html]
[Property clear value 'inline-start']
expected: FAIL
[Property clear value 'inline-end']
expected: FAIL

View file

@ -1,6 +0,0 @@
[float-computed.html]
[Property float value 'inline-start']
expected: FAIL
[Property float value 'inline-end']
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,5 +0,0 @@
[request-init-001.sub.html]
type: testharness
[Check referrerPolicy init value of and associated getter]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,3 +0,0 @@
[navigation-unload-cross-origin.sub.window.html]
[Cross-origin navigation started from unload handler must be ignored]
expected: FAIL

View file

@ -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

View file

@ -0,0 +1,3 @@
[iframe-loading-lazy-nav-link-click.html]
[Navigating iframe loading='lazy' before it is loaded: link click]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,3 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -0,0 +1,3 @@
[module-static-import-delayed.html]
[document.write in an imported module]
expected: FAIL

View file

@ -0,0 +1,3 @@
[child-document-raf-order.html]
[Ordering of steps in "Update the Rendering" - child document requestAnimationFrame order]
expected: FAIL

View file

@ -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

View file

@ -1,2 +0,0 @@
[Worker-constructor.html]
expected: ERROR

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
[container-for-cue.html]
expected: FAIL

View 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

View 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

View file

@ -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

View 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

View 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

View file

@ -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

View file

@ -0,0 +1,2 @@
[allow-discrete-auto-inset.html]
expected: TIMEOUT

View file

@ -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

View 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

View 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

View file

@ -0,0 +1,3 @@
[navigation-unload-same-origin.window.html]
[Same-origin navigation started from unload handler must be ignored]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.text.measure.actualBoundingBox.whitespace.html]
[Testing actualBoundingBox with leading/trailing whitespace]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.text.measure.actualBoundingBox.whitespace.html]
[Testing actualBoundingBox with leading/trailing whitespace]
expected: FAIL

View file

@ -0,0 +1,3 @@
[2d.text.measure.actualBoundingBox.whitespace.worker.html]
[Testing actualBoundingBox with leading/trailing whitespace]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -1,9 +0,0 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
[createHTMLDocument]
expected: FAIL
[<template>]
expected: FAIL

View file

@ -1,4 +0,0 @@
[reparent-form-during-planned-navigation-task.html]
expected: TIMEOUT
[reparent-form-during-planned-navigation-task]
expected: TIMEOUT

View file

@ -0,0 +1,3 @@
[child-document-raf-order.html]
[Ordering of steps in "Update the Rendering" - child document requestAnimationFrame order]
expected: FAIL

View file

@ -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

View 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

View 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

View 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

View 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

View 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

View file

@ -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

View file

@ -1,2 +0,0 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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">

View file

@ -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' : '';

View file

@ -0,0 +1,3 @@
features:
- name: closewatcher
files: "**"

View file

@ -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>

View file

@ -0,0 +1,3 @@
// META: script=/reporting/resources/report-helper.js
// META: script=resources/report-hash-test-runner.sub.js
run_tests();

View 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="

View 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>

View file

@ -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=="

View file

@ -0,0 +1,3 @@
// META: script=/reporting/resources/report-helper.js
// META: script=resources/report-hash-test-runner.sub.js
run_tests();

View file

@ -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="

View file

@ -0,0 +1,3 @@
// META: script=/reporting/resources/report-helper.js
// META: script=resources/report-hash-test-runner.sub.js
run_tests();

View file

@ -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="

View file

@ -0,0 +1,4 @@
// META: script=/reporting/resources/report-helper.js
// META: script=resources/report-hash-test-runner.sub.js
run_tests();

View file

@ -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="

View file

@ -0,0 +1,3 @@
// META: script=/reporting/resources/report-helper.js
// META: script=resources/report-hash-test-runner.sub.js
run_tests();

View file

@ -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="

View 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.");
}

View file

@ -0,0 +1,3 @@
// META: script=/reporting/resources/report-helper.js
// META: script=resources/report-hash-test-runner.sub.js
run_tests();

View file

@ -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="

View file

@ -0,0 +1,3 @@
// META: script=/reporting/resources/report-helper.js
// META: script=resources/report-hash-test-runner.sub.js
run_tests();

View 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-sha512' 'report-sha384' 'report-sha256'; report-to csp-endpoint
Server-Timing: uuid;desc="{{$id}}",hash;desc="sha512-hG4x56V5IhUUepZdYU/lX7UOQJ2M7f6ud2EI7os4JV3OwXSZ002P3zkb9tXQkjpOO8UbtjuEufvdcU67Qt2tlw=="

View file

@ -0,0 +1,3 @@
// META: script=/reporting/resources/report-helper.js
// META: script=resources/report-hash-test-runner.sub.js
run_tests();

View 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="

View 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>

View file

@ -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': '',

View file

@ -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",

View 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>

View file

@ -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>

View 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>

View file

@ -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>

View file

@ -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>

View 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>

View 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>

View 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>

View file

@ -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)");

View 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>

View file

@ -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);

View file

@ -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

View file

@ -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();

View file

@ -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