diff options
466 files changed, 8189 insertions, 3117 deletions
diff --git a/tests/wpt/meta-legacy-layout/WebCryptoAPI/import_export/okp_importKey.https.any.js.ini b/tests/wpt/meta-legacy-layout/WebCryptoAPI/import_export/okp_importKey.https.any.js.ini index ed0fd4312df..4c3061e29a5 100644 --- a/tests/wpt/meta-legacy-layout/WebCryptoAPI/import_export/okp_importKey.https.any.js.ini +++ b/tests/wpt/meta-legacy-layout/WebCryptoAPI/import_export/okp_importKey.https.any.js.ini @@ -287,6 +287,66 @@ [Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits\])] expected: FAIL + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [verify, verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign, sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [verify, verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(crv, d, x, kty), {name: Ed448}, true, [sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(crv, d, x, kty), {name: Ed448}, true, [sign, sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(kty, crv, x), {name: X25519}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(kty, crv, x), {name: X448}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL + [okp_importKey.https.any.worker.html] [Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, true, [\])] @@ -576,3 +636,63 @@ [Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits\])] expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [verify, verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign, sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [verify, verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(crv, d, x, kty), {name: Ed448}, true, [sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(crv, d, x, kty), {name: Ed448}, true, [sign, sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(kty, crv, x), {name: X25519}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(kty, crv, x), {name: X448}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/align-tracks-computed.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/align-tracks-computed.html.ini deleted file mode 100644 index e63929a5b30..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-align/parsing/align-tracks-computed.html.ini +++ /dev/null @@ -1,45 +0,0 @@ -[align-tracks-computed.html] - [Property align-tracks value 'normal'] - expected: FAIL - - [Property align-tracks value 'baseline'] - expected: FAIL - - [Property align-tracks value 'last baseline'] - expected: FAIL - - [Property align-tracks value 'space-between'] - expected: FAIL - - [Property align-tracks value 'space-around'] - expected: FAIL - - [Property align-tracks value 'space-evenly'] - expected: FAIL - - [Property align-tracks value 'stretch'] - expected: FAIL - - [Property align-tracks value 'center'] - expected: FAIL - - [Property align-tracks value 'start'] - expected: FAIL - - [Property align-tracks value 'end'] - expected: FAIL - - [Property align-tracks value 'flex-start'] - expected: FAIL - - [Property align-tracks value 'flex-end'] - expected: FAIL - - [Property align-tracks value 'unsafe end'] - expected: FAIL - - [Property align-tracks value 'safe flex-start'] - expected: FAIL - - [Property align-tracks value 'normal, normal'] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/align-tracks-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/align-tracks-valid.html.ini deleted file mode 100644 index cbe763cc151..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-align/parsing/align-tracks-valid.html.ini +++ /dev/null @@ -1,54 +0,0 @@ -[align-tracks-valid.html] - [e.style['align-tracks'\] = "normal" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "baseline" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "first baseline" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "last baseline" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "space-between" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "space-around" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "space-evenly" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "stretch" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "center" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "start" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "end" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "flex-start" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "flex-end" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "unsafe end" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "safe flex-start" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "flex-start, last baseline" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "normal, normal" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "start, flex-end, flex-end, flex-end, flex-end" should set the property value] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/justify-tracks-computed.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/justify-tracks-computed.html.ini deleted file mode 100644 index c5b835863d7..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-align/parsing/justify-tracks-computed.html.ini +++ /dev/null @@ -1,45 +0,0 @@ -[justify-tracks-computed.html] - [Property justify-tracks value 'normal'] - expected: FAIL - - [Property justify-tracks value 'space-between'] - expected: FAIL - - [Property justify-tracks value 'space-around'] - expected: FAIL - - [Property justify-tracks value 'space-evenly'] - expected: FAIL - - [Property justify-tracks value 'stretch'] - expected: FAIL - - [Property justify-tracks value 'center'] - expected: FAIL - - [Property justify-tracks value 'start'] - expected: FAIL - - [Property justify-tracks value 'end'] - expected: FAIL - - [Property justify-tracks value 'flex-start'] - expected: FAIL - - [Property justify-tracks value 'flex-end'] - expected: FAIL - - [Property justify-tracks value 'unsafe end'] - expected: FAIL - - [Property justify-tracks value 'safe flex-start'] - expected: FAIL - - [Property justify-tracks value 'left'] - expected: FAIL - - [Property justify-tracks value 'unsafe right'] - expected: FAIL - - [Property justify-tracks value 'normal, normal'] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-align/parsing/justify-tracks-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-align/parsing/justify-tracks-valid.html.ini deleted file mode 100644 index 641b10fa7bd..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-align/parsing/justify-tracks-valid.html.ini +++ /dev/null @@ -1,51 +0,0 @@ -[justify-tracks-valid.html] - [e.style['justify-tracks'\] = "normal" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "space-between" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "space-around" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "space-evenly" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "stretch" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "center" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "start" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "end" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "flex-start" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "flex-end" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "unsafe end" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "safe flex-start" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "left" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "unsafe right" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "flex-start, last baseline" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "normal, normal" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "start, flex-end, flex-end, flex-end, flex-end" should set the property value] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-repeat-002.htm.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-repeat-002.htm.ini new file mode 100644 index 00000000000..fb4031b3d52 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-repeat-002.htm.ini @@ -0,0 +1,2 @@ +[border-image-repeat-002.htm] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-repeat-004.htm.ini b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-repeat-004.htm.ini new file mode 100644 index 00000000000..7ae2c899b70 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-backgrounds/border-image-repeat-004.htm.ini @@ -0,0 +1,2 @@ +[border-image-repeat-004.htm] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-color/light-dark-basic.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/light-dark-basic.html.ini new file mode 100644 index 00000000000..e04d692f0eb --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-color/light-dark-basic.html.ini @@ -0,0 +1,6 @@ +[light-dark-basic.html] + [light-dark(white, black)] + expected: FAIL + + [light-dark(light-dark(white, red), red)] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-color/light-dark-currentcolor.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/light-dark-currentcolor.html.ini new file mode 100644 index 00000000000..669af6d8ea5 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-color/light-dark-currentcolor.html.ini @@ -0,0 +1,2 @@ +[light-dark-currentcolor.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-color/light-dark-inheritance.html.ini b/tests/wpt/meta-legacy-layout/css/css-color/light-dark-inheritance.html.ini new file mode 100644 index 00000000000..bf8493daf3a --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-color/light-dark-inheritance.html.ini @@ -0,0 +1,2 @@ +[light-dark-inheritance.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/abspos/position-absolute-013.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/abspos/position-absolute-013.html.ini index 2b2e0fce8eb..80111fb0236 100644 --- a/tests/wpt/meta-legacy-layout/css/css-flexbox/abspos/position-absolute-013.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-flexbox/abspos/position-absolute-013.html.ini @@ -1,5 +1,4 @@ [position-absolute-013.html] - expected: TIMEOUT [.flexbox 309] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html.ini deleted file mode 100644 index 52b0d0166bc..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html.ini +++ /dev/null @@ -1,27 +0,0 @@ -[text-spacing-trim-combinations-001.html] - ["国((国"] - expected: FAIL - - ["国・(国"] - expected: FAIL - - ["国)(国"] - expected: FAIL - - ["国 (国"] - expected: FAIL - - ["国))国"] - expected: FAIL - - ["国)・国"] - expected: FAIL - - ["国) 国"] - expected: FAIL - - ["国(((国"] - expected: FAIL - - ["国)))国"] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-text/white-space/trailing-other-space-separators-break-spaces-004.html.ini b/tests/wpt/meta-legacy-layout/css/css-text/white-space/trailing-other-space-separators-break-spaces-004.html.ini deleted file mode 100644 index 3257d1b4d49..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-text/white-space/trailing-other-space-separators-break-spaces-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[trailing-other-space-separators-break-spaces-004.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-ui/parsing/form-sizing-computed.html.ini b/tests/wpt/meta-legacy-layout/css/css-ui/parsing/form-sizing-computed.html.ini index 39141cebc56..25c7ccdbe18 100644 --- a/tests/wpt/meta-legacy-layout/css/css-ui/parsing/form-sizing-computed.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-ui/parsing/form-sizing-computed.html.ini @@ -4,3 +4,9 @@ [Property form-sizing value 'normal'] expected: FAIL + + [Property form-sizing value 'fixed'] + expected: FAIL + + [Property form-sizing value 'content'] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-ui/parsing/form-sizing-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-ui/parsing/form-sizing-valid.html.ini index cda7dbed687..a31eb2c5cb0 100644 --- a/tests/wpt/meta-legacy-layout/css/css-ui/parsing/form-sizing-valid.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-ui/parsing/form-sizing-valid.html.ini @@ -4,3 +4,9 @@ [e.style['form-sizing'\] = "normal" should set the property value] expected: FAIL + + [e.style['form-sizing'\] = "fixed" should set the property value] + expected: FAIL + + [e.style['form-sizing'\] = "content" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini b/tests/wpt/meta-legacy-layout/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini new file mode 100644 index 00000000000..3fc2e24da01 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini @@ -0,0 +1,3 @@ +[MediaQueryList-extends-EventTarget.html] + [onchange removes listener] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/cssom-view/offsetTopLeft-border-box.html.ini b/tests/wpt/meta-legacy-layout/css/cssom-view/offsetTopLeft-border-box.html.ini new file mode 100644 index 00000000000..00753fab1d1 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/cssom-view/offsetTopLeft-border-box.html.ini @@ -0,0 +1,6 @@ +[offsetTopLeft-border-box.html] + [container: 0] + expected: FAIL + + [container: 1] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/selectors/is-where-parsing.html.ini b/tests/wpt/meta-legacy-layout/css/selectors/is-where-parsing.html.ini index dae62bf6253..83f85b33d30 100644 --- a/tests/wpt/meta-legacy-layout/css/selectors/is-where-parsing.html.ini +++ b/tests/wpt/meta-legacy-layout/css/selectors/is-where-parsing.html.ini @@ -40,3 +40,99 @@ [Pseudo-elements inside] expected: FAIL + + [":is(div )" should be a valid selector] + expected: FAIL + + [":where(div )" should be a valid selector] + expected: FAIL + + [":is(div + bar, div ~ .baz)" should be a valid selector] + expected: FAIL + + [":where(div + bar, div ~ .baz)" should be a valid selector] + expected: FAIL + + [":is(:is(div))" should be a valid selector] + expected: FAIL + + [":where(:is(div))" should be a valid selector] + expected: FAIL + + [":is(:where(div))" should be a valid selector] + expected: FAIL + + [":where(:where(div))" should be a valid selector] + expected: FAIL + + [":host(:is(div))" should be a valid selector] + expected: FAIL + + [":host(:where(div))" should be a valid selector] + expected: FAIL + + [":host(:is(div ))" should be a valid selector] + expected: FAIL + + [":host(:where(div ))" should be a valid selector] + expected: FAIL + + [":host(:is(div .foo))" should be a valid selector] + expected: FAIL + + [":host(:where(div .foo))" should be a valid selector] + expected: FAIL + + [":is(:hover, :active)" should be a valid selector] + expected: FAIL + + [":where(:hover, :active)" should be a valid selector] + expected: FAIL + + [":is(div):hover" should be a valid selector] + expected: FAIL + + [":where(div):hover" should be a valid selector] + expected: FAIL + + [":is(div)::before" should be a valid selector] + expected: FAIL + + [":where(div)::before" should be a valid selector] + expected: FAIL + + [":is(::before)" should be a valid selector] + expected: FAIL + + [":where(::before)" should be a valid selector] + expected: FAIL + + [":is(div) + bar" should be a valid selector] + expected: FAIL + + [":where(div) + bar" should be a valid selector] + expected: FAIL + + ["::part(foo):is(:hover)" should be a valid selector] + expected: FAIL + + ["::part(foo):where(:hover)" should be a valid selector] + expected: FAIL + + ["::part(foo):is([attr='value'\])" should be a valid selector] + expected: FAIL + + ["::part(foo):where([attr='value'\])" should be a valid selector] + expected: FAIL + + [":not(:is(div))" should be a valid selector] + expected: FAIL + + [":not(:where(div))" should be a valid selector] + expected: FAIL + + [":not(:is(div .foo))" should be a valid selector] + expected: FAIL + + [":not(:where(div .foo))" should be a valid selector] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html.ini b/tests/wpt/meta-legacy-layout/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html.ini index 7b4af3d0cd3..6d4e77b234b 100644 --- a/tests/wpt/meta-legacy-layout/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html.ini +++ b/tests/wpt/meta-legacy-layout/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html.ini @@ -16,3 +16,9 @@ [CSS Selectors: The relational pseudo-class (disallow nesting :has() inside :has())] expected: FAIL + + [":has(:is(:has(*)))" should be a valid selector] + expected: FAIL + + [":has(:where(:has(*)))" should be a valid selector] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-constructor.any.js.ini b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-constructor.any.js.ini new file mode 100644 index 00000000000..5eb54f20977 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/observable/tentative/observable-constructor.any.js.ini @@ -0,0 +1,80 @@ +[observable-constructor.any.worker.html] + [Observable constructor] + expected: FAIL + + [Subscriber interface is not constructible] + expected: FAIL + + [subscribe() can be called with no arguments] + expected: FAIL + + [Observable constructor calls initializer on subscribe] + expected: FAIL + + [Observable error path called synchronously] + expected: FAIL + + [Observable should error if initializer throws] + expected: FAIL + + [Subscription does not emit values after completion] + expected: FAIL + + [Subscription does not emit values after error] + expected: FAIL + + [Completing or nexting a subscriber after an error does nothing] + expected: FAIL + + [Errors pushed to the subscriber that are not handled by the subscription are reported to the global] + expected: FAIL + + [Errors thrown in the initializer that are not handled by the subscription are reported to the global] + expected: FAIL + + [Subscription reports errors that are pushed after subscriber is closed by completion] + expected: FAIL + + [Errors thrown by initializer function after subscriber is closed by completion are reported] + expected: FAIL + + +[observable-constructor.any.html] + [Observable constructor] + expected: FAIL + + [Subscriber interface is not constructible] + expected: FAIL + + [subscribe() can be called with no arguments] + expected: FAIL + + [Observable constructor calls initializer on subscribe] + expected: FAIL + + [Observable error path called synchronously] + expected: FAIL + + [Observable should error if initializer throws] + expected: FAIL + + [Subscription does not emit values after completion] + expected: FAIL + + [Subscription does not emit values after error] + expected: FAIL + + [Completing or nexting a subscriber after an error does nothing] + expected: FAIL + + [Errors pushed to the subscriber that are not handled by the subscription are reported to the global] + expected: FAIL + + [Errors thrown in the initializer that are not handled by the subscription are reported to the global] + expected: FAIL + + [Subscription reports errors that are pushed after subscriber is closed by completion] + expected: FAIL + + [Errors thrown by initializer function after subscriber is closed by completion are reported] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html.ini b/tests/wpt/meta-legacy-layout/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html.ini new file mode 100644 index 00000000000..c68ae3e8990 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html.ini @@ -0,0 +1,27 @@ +[basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html] + [Declarative DOM Parts innerHTML <div><h1>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <div><h1 parseparts>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <div parseparts=""><h1>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <div parseparts=""><h1 parseparts>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <template><h1>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <template><h1 parseparts>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <template parseparts="" class="expect_success"><h1>content... (expect parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <template parseparts="" class="expect_success"><h1 parseparts>content... (expect parts)] + expected: FAIL + + [Basic NodePart parsing] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-images.sub.tentative.html.ini index f9de5391ad6..f2d7867c9ff 100644 --- a/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-images.sub.tentative.html.ini +++ b/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-images.sub.tentative.html.ini @@ -146,3 +146,12 @@ [list-style-image sec-fetch-site - HTTPS downgrade-upgrade] expected: FAIL + + [border-image sec-fetch-mode - Not sent to non-trustworthy cross-site destination] + expected: FAIL + + [background-image sec-fetch-site - HTTPS downgrade (header not sent)] + expected: TIMEOUT + + [border-image sec-fetch-site - HTTPS downgrade (header not sent)] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini new file mode 100644 index 00000000000..3e07e6b7d1f --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini @@ -0,0 +1,6 @@ +[empty-iframe-load-event.html] + [Check execution order from nested timeout] + expected: FAIL + + [Check execution order on load handler] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index c5fc1407992..1bca09f21d6 100644 --- a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -1,5 +1,4 @@ [iframe-src-aboutblank-navigate-immediately.html] - expected: TIMEOUT [Navigating to a different document with window.open] expected: FAIL @@ -7,4 +6,4 @@ expected: FAIL [Navigating to a different document with form submission] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini index 149bcb4ff8c..51fd557bd7f 100644 --- a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini @@ -7,6 +7,3 @@ [load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank#foo'] expected: FAIL - - [load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank'] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini index 324db3d9b35..5aef7ce66ce 100644 --- a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html.ini @@ -10,3 +10,6 @@ [load event does not fire on window.open('about:blank?foo')] expected: FAIL + + [load event does not fire on window.open('about:blank')] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini index 7dc346632a4..7dc346632a4 100644 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini new file mode 100644 index 00000000000..60a4fa51f8a --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini @@ -0,0 +1,3 @@ +[a-click.html] + [aElement.click() before the load event must NOT replace] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html.ini index e84cccbbd1f..6c777ea167c 100644 --- a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html.ini +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html.ini @@ -1,3 +1,4 @@ [form-submit-button-click.html] + expected: TIMEOUT [Replace before load, triggered by submitButton.click()] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1.html.ini new file mode 100644 index 00000000000..02bd301a7ca --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1.html.ini @@ -0,0 +1,3 @@ +[traverse_the_history_write_onload_1.html] + [Traverse the history when a history entry is written in the load event] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected-font-size-math.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected-font-size-math.html.ini deleted file mode 100644 index addd810a23d..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected-font-size-math.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[canvas.2d.disconnected-font-size-math.html] - expected: CRASH diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/text/canvas.2d.disconnected.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/text/canvas.2d.disconnected.html.ini index 17247137cb1..5cdcce07c65 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/text/canvas.2d.disconnected.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/text/canvas.2d.disconnected.html.ini @@ -1,2 +1,2 @@ [canvas.2d.disconnected.html] - expected: CRASH + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-01.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-01.html.ini new file mode 100644 index 00000000000..cc76a05c1d8 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-01.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-01.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-02.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-02.html.ini new file mode 100644 index 00000000000..d83ab8db3b9 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-02.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-02.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-03.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-03.html.ini new file mode 100644 index 00000000000..341d054ebbc --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-03.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-03.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-04.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-04.html.ini new file mode 100644 index 00000000000..d34ae8710b2 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-04.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-04.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-05.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-05.html.ini new file mode 100644 index 00000000000..c80d7307d57 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-05.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-05.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-06.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-06.html.ini new file mode 100644 index 00000000000..40d08e09e38 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-06.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-06.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-07.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-07.html.ini new file mode 100644 index 00000000000..8b118b20ad7 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-07.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-07.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-08.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-08.html.ini new file mode 100644 index 00000000000..927891eb7e0 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-08.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-08.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-09.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-09.html.ini new file mode 100644 index 00000000000..53ac23518f6 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-09.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-09.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-10.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-10.html.ini new file mode 100644 index 00000000000..9e6f6f536c0 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-10.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-10.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-11.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-11.html.ini new file mode 100644 index 00000000000..69ea943cfa8 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-11.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-11.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-12.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-12.html.ini new file mode 100644 index 00000000000..cb9af7df593 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-12.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-12.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-13.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-13.html.ini new file mode 100644 index 00000000000..43a10154051 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-13.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-13.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-14.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-14.html.ini new file mode 100644 index 00000000000..5b3c17a3035 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-14.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-14.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-15.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-15.html.ini new file mode 100644 index 00000000000..9b7646bf688 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-15.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-15.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-16.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-16.html.ini new file mode 100644 index 00000000000..57a8aa33c82 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-16.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-16.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-17.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-17.html.ini new file mode 100644 index 00000000000..8436d0266fe --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-17.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-17.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-18.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-18.html.ini new file mode 100644 index 00000000000..1a75c98888d --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-18.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-18.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-19.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-19.html.ini new file mode 100644 index 00000000000..882a73cedc1 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-19.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-19.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-20.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-20.html.ini new file mode 100644 index 00000000000..e2ac54e85b6 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-20.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-20.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-21.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-21.html.ini new file mode 100644 index 00000000000..1fe6eed4d86 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-21.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-21.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-22.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-22.html.ini new file mode 100644 index 00000000000..2bbb71f26cf --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-22.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-22.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-23.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-23.html.ini new file mode 100644 index 00000000000..340f5057d5c --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-23.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-23.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-24.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-24.html.ini new file mode 100644 index 00000000000..d4a3db2a878 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-24.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-24.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-25.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-25.html.ini new file mode 100644 index 00000000000..2ef28e7d55d --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-25.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-25.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-26.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-26.html.ini new file mode 100644 index 00000000000..eae14c85b6d --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-26.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-26.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-27.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-27.html.ini new file mode 100644 index 00000000000..49b7b6b841b --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-27.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-27.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-28.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-28.html.ini new file mode 100644 index 00000000000..c168cc1a8b6 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-28.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-28.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-29.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-29.html.ini new file mode 100644 index 00000000000..d03ea918944 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-29.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-29.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-30.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-30.html.ini new file mode 100644 index 00000000000..bbb82b3cd63 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-30.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-30.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-31.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-31.html.ini new file mode 100644 index 00000000000..052af599162 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-31.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-31.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-32.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-32.html.ini new file mode 100644 index 00000000000..d6240b000ed --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-32.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-32.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-33.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-33.html.ini new file mode 100644 index 00000000000..993ccadc8f3 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-33.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-33.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-34.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-34.html.ini new file mode 100644 index 00000000000..9a036bcae5c --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-34.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-34.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-35.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-35.html.ini new file mode 100644 index 00000000000..4b931e6b885 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-35.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-35.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-36.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-36.html.ini new file mode 100644 index 00000000000..5c6d67ba0d4 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-36.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-36.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-37.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-37.html.ini new file mode 100644 index 00000000000..fbada3e32c8 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-37.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-37.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-38.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-38.html.ini new file mode 100644 index 00000000000..09b03873496 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-38.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-38.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-39.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-39.html.ini new file mode 100644 index 00000000000..8d63022c0f9 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-39.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-39.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-40.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-40.html.ini new file mode 100644 index 00000000000..026d2a27546 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-40.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-40.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-41.html.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-41.html.ini new file mode 100644 index 00000000000..75cf38f059b --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/dir-shadow-41.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-41.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/lang-attribute-shadow.window.js.ini b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/lang-attribute-shadow.window.js.ini new file mode 100644 index 00000000000..ec7919c1c68 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/dom/elements/global-attributes/lang-attribute-shadow.window.js.ini @@ -0,0 +1,18 @@ +[lang-attribute-shadow.window.html] + [lang only on slot] + expected: FAIL + + [lang only on host] + expected: FAIL + + [lang on host and slot] + expected: FAIL + + [lang on host and slotted element] + expected: FAIL + + [lang on host and slot and slotted element] + expected: FAIL + + [lang on slot inherits from shadow host] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html.ini b/tests/wpt/meta-legacy-layout/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html.ini deleted file mode 100644 index b21e45dd17f..00000000000 --- a/tests/wpt/meta-legacy-layout/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[document-base-url-changes-about-srcdoc-2.https.html] - [document-base-url-changes-about-srcdoc-2] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/interaction/focus/the-autofocus-attribute/document-with-fragment-top.html.ini b/tests/wpt/meta-legacy-layout/html/interaction/focus/the-autofocus-attribute/document-with-fragment-top.html.ini index ab1003579be..6f0fc648f04 100644 --- a/tests/wpt/meta-legacy-layout/html/interaction/focus/the-autofocus-attribute/document-with-fragment-top.html.ini +++ b/tests/wpt/meta-legacy-layout/html/interaction/focus/the-autofocus-attribute/document-with-fragment-top.html.ini @@ -1,7 +1,6 @@ [document-with-fragment-top.html] - expected: TIMEOUT [Autofocus elements in iframed documents with "top" fragments should work.] expected: FAIL [Autofocus elements in top-level browsing context's documents with "top" fragments should work.] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/meta-legacy-layout/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini index 8a926207630..d169bd2e9fa 100644 --- a/tests/wpt/meta-legacy-layout/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini +++ b/tests/wpt/meta-legacy-layout/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini @@ -1,5 +1,4 @@ [supported-elements.html] - expected: TIMEOUT [Contenteditable element should support autofocus] expected: FAIL @@ -7,10 +6,10 @@ expected: FAIL [Host element with delegatesFocus including no focusable descendants should be skipped] - expected: TIMEOUT + expected: FAIL [Area element should support autofocus] - expected: NOTRUN + expected: FAIL [Host element with delegatesFocus should support autofocus] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/rendering/the-details-element/details-display-type-002.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/rendering/the-details-element/details-display-type-002.tentative.html.ini new file mode 100644 index 00000000000..4e5a3ff1e5b --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/rendering/the-details-element/details-display-type-002.tentative.html.ini @@ -0,0 +1,2 @@ +[details-display-type-002.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini index a7b23688dad..516e1fa0442 100644 --- a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini +++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini @@ -1,3 +1,4 @@ [resource-selection-source-media-env-change.html] + expected: TIMEOUT [the <source> media attribute: no reaction to environment change] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini deleted file mode 100644 index 30b696b181c..00000000000 --- a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[image-compositing-change.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini b/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini index 52f30c9e707..ad86a0c8730 100644 --- a/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini +++ b/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini @@ -178,3 +178,9 @@ [multipart/form-data: 0x00 in name (normal form)] expected: FAIL + + [multipart/form-data: Basic test (formdata event)] + expected: FAIL + + [multipart/form-data: non-ASCII in name and value (normal form)] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html.ini new file mode 100644 index 00000000000..7682a4830bf --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/reparent-form-during-planned-navigation-task.html.ini @@ -0,0 +1,4 @@ +[reparent-form-during-planned-navigation-task.html] + expected: TIMEOUT + [reparent-form-during-planned-navigation-task] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini b/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini index 63ed783745e..091da3d48a6 100644 --- a/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini +++ b/tests/wpt/meta-legacy-layout/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini @@ -143,9 +143,6 @@ [application/x-www-form-urlencoded: character not in encoding in filename (normal form)] expected: FAIL - [application/x-www-form-urlencoded: 0x00 in name (formdata event)] - expected: FAIL - [application/x-www-form-urlencoded: backslash in value (normal form)] expected: FAIL @@ -167,9 +164,6 @@ [application/x-www-form-urlencoded: double quote in value (normal form)] expected: FAIL - [application/x-www-form-urlencoded: Basic test (formdata event)] - expected: FAIL - [application/x-www-form-urlencoded: lone surrogate in name and value (normal form)] expected: FAIL @@ -178,3 +172,6 @@ [application/x-www-form-urlencoded: non-ASCII in filename (formdata event)] expected: FAIL + + [application/x-www-form-urlencoded: 0x00 in value (formdata event)] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-details-element/name-attribute.html.ini index 2646908c361..d569dd37abc 100644 --- a/tests/wpt/meta/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini +++ b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-details-element/name-attribute.html.ini @@ -1,4 +1,4 @@ -[name-attribute.tentative.html] +[name-attribute.html] [basic handling of mutually exclusive details] expected: FAIL @@ -8,7 +8,7 @@ [mutually exclusive details across multiple names and multiple tree scopes] expected: FAIL - [mutation event and toggle event order matches tree order] + [mutation event and toggle event order] expected: FAIL [exclusivity enforcement with attachment scenario connected] @@ -35,9 +35,6 @@ [exclusivity enforcement with attachment scenario connected-in-template] expected: FAIL - [mutation event and toggle event order] - expected: FAIL - [handling of name attribute changes] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html.ini deleted file mode 100644 index 267c09e0562..00000000000 --- a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[fixed-position-child-with-transformed-ancestor.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.tentative.html.ini new file mode 100644 index 00000000000..5def8ec35f5 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.tentative.html.ini @@ -0,0 +1,2 @@ +[fixed-position-child-with-transformed-ancestor.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html.ini deleted file mode 100644 index 32f315368ab..00000000000 --- a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[fixed-position-child-with-will-change-ancestor.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.tentative.html.ini new file mode 100644 index 00000000000..cddca13cbcc --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.tentative.html.ini @@ -0,0 +1,2 @@ +[fixed-position-child-with-will-change-ancestor.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html.ini deleted file mode 100644 index d85ee8e016a..00000000000 --- a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[top-layer-stacking.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.tentative.html.ini new file mode 100644 index 00000000000..3f6ad25adbf --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.tentative.html.ini @@ -0,0 +1,2 @@ +[top-layer-stacking.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/interfaces.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/interfaces.html.ini index f2d3fc77517..f4015594b6b 100644 --- a/tests/wpt/meta-legacy-layout/html/semantics/interfaces.html.ini +++ b/tests/wpt/meta-legacy-layout/html/semantics/interfaces.html.ini @@ -110,3 +110,12 @@ [Interfaces for SLOT: createElement] expected: FAIL + + [Interfaces for permission: useNS] + expected: FAIL + + [Interfaces for permission: useParser] + expected: FAIL + + [Interfaces for PERMISSION: createElement] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini index cc18f512574..2d44172f4dc 100644 --- a/tests/wpt/meta-legacy-layout/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini +++ b/tests/wpt/meta-legacy-layout/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini @@ -1,5 +1,6 @@ [htmlanchorelement_noopener.html] type: testharness + expected: TIMEOUT [Check that targeting of rel=noopener with a given name ignores an existing window with that name] expected: NOTRUN @@ -7,10 +8,10 @@ expected: FAIL [Check that rel=noopener with target=_top does a normal load] - expected: FAIL + expected: NOTRUN [Check that rel=noopener with target=_parent does a normal load] - expected: FAIL + expected: NOTRUN [Check that rel=noopener with target=_self does a normal load] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/meta-legacy-layout/html/semantics/permission-element/no-end-tag-no-contents.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/permission-element/no-end-tag-no-contents.html.ini new file mode 100644 index 00000000000..9a7c183ef37 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/semantics/permission-element/no-end-tag-no-contents.html.ini @@ -0,0 +1,3 @@ +[no-end-tag-no-contents.html] + [The permission element should have no end tag or contents] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/uievents/idlharness.window.js.ini b/tests/wpt/meta-legacy-layout/uievents/idlharness.window.js.ini index 25d032b22eb..4995d1d82da 100644 --- a/tests/wpt/meta-legacy-layout/uievents/idlharness.window.js.ini +++ b/tests/wpt/meta-legacy-layout/uievents/idlharness.window.js.ini @@ -157,3 +157,21 @@ [MutationEvent interface: operation initMutationEvent(DOMString, optional boolean, optional boolean, optional Node?, optional DOMString, optional DOMString, optional DOMString, optional unsigned short)] expected: FAIL + + [MouseEvent interface: attribute layerX] + expected: FAIL + + [MouseEvent interface: attribute layerY] + expected: FAIL + + [MouseEvent interface: new MouseEvent("event") must inherit property "layerX" with the proper type] + expected: FAIL + + [MouseEvent interface: new MouseEvent("event") must inherit property "layerY" with the proper type] + expected: FAIL + + [MouseEvent interface: new WheelEvent("event") must inherit property "layerX" with the proper type] + expected: FAIL + + [MouseEvent interface: new WheelEvent("event") must inherit property "layerY" with the proper type] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/webaudio/idlharness.https.window.js.ini b/tests/wpt/meta-legacy-layout/webaudio/idlharness.https.window.js.ini index b5e9c75e20a..63969725792 100644 --- a/tests/wpt/meta-legacy-layout/webaudio/idlharness.https.window.js.ini +++ b/tests/wpt/meta-legacy-layout/webaudio/idlharness.https.window.js.ini @@ -1303,3 +1303,12 @@ [AudioParamMap interface: maplike<DOMString, AudioParam>] expected: FAIL + + [BaseAudioContext interface: attribute renderQuantumSize] + expected: FAIL + + [BaseAudioContext interface: context must inherit property "renderQuantumSize" with the proper type] + expected: FAIL + + [BaseAudioContext interface: new OfflineAudioContext(1, 1, sample_rate) must inherit property "renderQuantumSize" with the proper type] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini b/tests/wpt/meta-legacy-layout/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini index eed03df37f3..b7537329068 100644 --- a/tests/wpt/meta-legacy-layout/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini +++ b/tests/wpt/meta-legacy-layout/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini @@ -1,4 +1,5 @@ [audiocontext-not-fully-active.html] + expected: TIMEOUT [frame in navigated remote-site frame] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html.ini b/tests/wpt/meta-legacy-layout/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html.ini new file mode 100644 index 00000000000..4880a89bc1a --- /dev/null +++ b/tests/wpt/meta-legacy-layout/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html.ini @@ -0,0 +1,3 @@ +[moderate-exponentialRamp.html] + [Test exponentialRampToValueAtTime() with a moderate ratio of change] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/webgl/idlharness.any.js.ini b/tests/wpt/meta-legacy-layout/webgl/idlharness.any.js.ini index 020e2f36dd9..b429262aa81 100644 --- a/tests/wpt/meta-legacy-layout/webgl/idlharness.any.js.ini +++ b/tests/wpt/meta-legacy-layout/webgl/idlharness.any.js.ini @@ -3896,6 +3896,9 @@ [WebGL2RenderingContext interface: attribute unpackColorSpace] expected: FAIL + [WebGL2RenderingContext interface: operation getBufferSubData(GLenum, GLintptr, ArrayBufferView, optional unsigned long long, optional GLuint)] + expected: FAIL + [idlharness.any.worker.html] [WebGL2RenderingContext interface: constant ONE_MINUS_SRC_COLOR on interface object] @@ -10179,3 +10182,6 @@ [WebGL2RenderingContext interface: attribute unpackColorSpace] expected: FAIL + + [WebGL2RenderingContext interface: operation getBufferSubData(GLenum, GLintptr, ArrayBufferView, optional unsigned long long, optional GLuint)] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/webmessaging/with-ports/017.html.ini b/tests/wpt/meta-legacy-layout/webmessaging/with-ports/017.html.ini deleted file mode 100644 index c7946fc91b4..00000000000 --- a/tests/wpt/meta-legacy-layout/webmessaging/with-ports/017.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[017.html] - expected: TIMEOUT - [origin of the script that invoked the method, about:blank] - expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/meta-legacy-layout/workers/constructors/Worker/Worker-constructor.html.ini new file mode 100644 index 00000000000..80f9a4f15b8 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/workers/constructors/Worker/Worker-constructor.html.ini @@ -0,0 +1,2 @@ +[Worker-constructor.html] + expected: ERROR diff --git a/tests/wpt/meta-legacy-layout/workers/shared-worker-partitioned-cookies.tentative.https.html.ini b/tests/wpt/meta-legacy-layout/workers/shared-worker-partitioned-cookies.tentative.https.html.ini new file mode 100644 index 00000000000..0f221c965c3 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/workers/shared-worker-partitioned-cookies.tentative.https.html.ini @@ -0,0 +1,3 @@ +[shared-worker-partitioned-cookies.tentative.https.html] + [SharedWorker: Partitioned Cookies] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/xhr/xhr-timeout-longtask.any.js.ini b/tests/wpt/meta-legacy-layout/xhr/xhr-timeout-longtask.any.js.ini deleted file mode 100644 index 36b2068c5a6..00000000000 --- a/tests/wpt/meta-legacy-layout/xhr/xhr-timeout-longtask.any.js.ini +++ /dev/null @@ -1,6 +0,0 @@ -[xhr-timeout-longtask.any.worker.html] - [Long tasks should not trigger load timeout] - expected: FAIL - - -[xhr-timeout-longtask.any.html] diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index b4f38f5d3d9..a61c4b4600f 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -1191,6 +1191,13 @@ null, {} ] + ], + "tons-of-declarations-crash.html": [ + "50a32c19389667a17768794415bbd89021fe1d88", + [ + null, + {} + ] ] }, "css-contain": { @@ -5901,6 +5908,13 @@ {} ] ], + "input-importNode-to-detached-document-crash.html": [ + "5e0cff4fa309a4286f922082264e2ae82bc00321", + [ + null, + {} + ] + ], "input-type-change-empty-crash.html": [ "6e44250ccb79f3a2a06b6ef639914cad656a4bb6", [ @@ -30681,7 +30695,22 @@ ], {} ] - ] + ], + "sticky": { + "position-sticky-offset-print.html": [ + "3954bbcf4418b8af87dca12949efc7e6f59c963e", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ] + } }, "css-tables": { "tfoot-crash-print.html": [ @@ -130518,6 +130547,19 @@ } }, "css-anchor-position": { + "anchor-center-002.html": [ + "b7f61003a67be5baf897fa5a9c7da982586820b1", + [ + null, + [ + [ + "/css/css-anchor-position/anchor-center-002-ref.html", + "==" + ] + ], + {} + ] + ], "anchor-default-001.html": [ "8bb59851ee656715cb30d3a26690ee807b7fd7ca", [ @@ -137660,6 +137702,32 @@ {} ] ], + "border-image-repeat-002.htm": [ + "a0c081863d42cd4c0ea24996e23ace8537c7a133", + [ + null, + [ + [ + "/css/css-backgrounds/reference/border-image-repeat-002-ref.html", + "==" + ] + ], + {} + ] + ], + "border-image-repeat-004.htm": [ + "40194506940c38f2669ae1c5e8fd43b74b2313ce", + [ + null, + [ + [ + "/css/css-backgrounds/reference/border-image-repeat-004-ref.html", + "==" + ] + ], + {} + ] + ], "border-image-repeat-005.html": [ "f5078fc322c936d65415a4bfec5d022357cb714c", [ @@ -138181,6 +138249,19 @@ {} ] ], + "border-image-slice-004.htm": [ + "1e5adb311f597fc4fa3c4413628b70ebd4c4103e", + [ + null, + [ + [ + "/css/css-backgrounds/reference/border-image-slice-004-ref.html", + "==" + ] + ], + {} + ] + ], "border-image-slice-005.htm": [ "5d8bd7df1c3fe1b09a8a9387e355e2c7d111b805", [ @@ -153525,6 +153606,32 @@ {} ] ], + "light-dark-currentcolor.html": [ + "512a492b293d469b4c66052dd0b1d4ba9ca15b30", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "light-dark-inheritance.html": [ + "1128b57319b0e9b8b4224b6c3005e18d349d8191", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "named-001.html": [ "61a98dcb7bb02fab3db18ed337eee5ddb07724fc", [ @@ -180184,6 +180291,19 @@ ] ], "order": { + "order-abs-children-painting-order-different-container.html": [ + "202581dd1d1b668722182aa22744b092c064cb95", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "order-abs-children-painting-order.html": [ "248f380e5aebb651069116cb32722389a511d962", [ @@ -183588,6 +183708,19 @@ {} ] ], + "font-synthesis-08.html": [ + "b3de1afcaee681b7e79969b325fc6bf98de4ec1c", + [ + null, + [ + [ + "/css/css-fonts/font-synthesis-08-ref.html", + "==" + ] + ], + {} + ] + ], "font-synthesis-position-001.html": [ "1ed13f67c1950f3abf4b599c2b58ad1b0db3d169", [ @@ -192783,60 +192916,6 @@ ] ] }, - "align-tracks": { - "masonry-align-tracks-001.html": [ - "4ff3e61087597bee960e30d245bf3aae255cec72", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-001-ref.html", - "==" - ] - ], - {} - ] - ], - "masonry-align-tracks-multi-001.html": [ - "0e20217da8063dc2e35fae3333b93988210e7eb1", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-multi-001-ref.html", - "==" - ] - ], - {} - ] - ], - "masonry-align-tracks-stretch-001.html": [ - "d2fede7a8edcd0ddec450baa2961d767ba89a81a", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-001-ref.html", - "==" - ] - ], - {} - ] - ], - "masonry-align-tracks-stretch-002.html": [ - "1631ac3c07d3f97c30ebcad6f16f9b3cd29cd4d4", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-002-ref.html", - "==" - ] - ], - {} - ] - ] - }, "baseline": { "masonry-grid-item-content-baseline-001.html": [ "60d11653b3f231a07ad7aa493a0effeae7720671", @@ -193293,60 +193372,6 @@ ] ] }, - "justify-tracks": { - "masonry-justify-tracks-001.html": [ - "bfd3c1ca587bb0bdb534a281824f158dace0c04c", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-001-ref.html", - "==" - ] - ], - {} - ] - ], - "masonry-justify-tracks-multi-001.html": [ - "011c487cb721d6185d6a27debf9fec0953af5bfe", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-multi-001-ref.html", - "==" - ] - ], - {} - ] - ], - "masonry-justify-tracks-stretch-001.html": [ - "17cb321821830281a65b284af2de40ab3a6f53ef", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-001-ref.html", - "==" - ] - ], - {} - ] - ], - "masonry-justify-tracks-stretch-002.html": [ - "6b7746722dca430951c2f3be63e8d66308566b0c", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-002-ref.html", - "==" - ] - ], - {} - ] - ] - }, "masonry-columns-item-containing-block-is-grid-content-width.html": [ "e48b650253974a22e2dbf68eee6505ca918ddde7", [ @@ -206909,6 +206934,19 @@ {} ] ], + "clip-path-foreignobject-non-zero-xy.html": [ + "a63f4c8aa294db0b3e1ed3a3434015d65ecf453f", + [ + null, + [ + [ + "/css/css-masking/clip-path/reference/green-100x100.html", + "==" + ] + ], + {} + ] + ], "clip-path-geometryBox-2.html": [ "d4c47349d2053c90ebb82998b10b16e916421dbb", [ @@ -207871,6 +207909,19 @@ {} ] ], + "clip-path-shape-foreignobject-non-zero-xy.html": [ + "4e221f36e4cb7bc698f1929dcc09096114ab2693", + [ + null, + [ + [ + "/css/css-masking/clip-path/reference/green-100x100.html", + "==" + ] + ], + {} + ] + ], "clip-path-strokeBox-1a.html": [ "487f5363b694304923538d0314d3c6d2a685da6b", [ @@ -299067,6 +299118,57 @@ {} ] ], + "file-input-horizontal.optional.html": [ + "b7bcb340e0ef1644e99bbe665d544cc51f446ce8", + [ + null, + [ + [ + "/css/css-writing-modes/forms/file-input-vertical.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/file-input-vertical-rtl.optional.html", + "!=" + ] + ], + {} + ] + ], + "file-input-vertical-rtl.optional.html": [ + "b58242555b31251ba174fd691240337fc927f19b", + [ + null, + [ + [ + "/css/css-writing-modes/forms/file-input-horizontal.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/file-input-vertical.optional.html", + "!=" + ] + ], + {} + ] + ], + "file-input-vertical.optional.html": [ + "c9b4272f84b2ed4b29a63516d156fb7c26f2b3fa", + [ + null, + [ + [ + "/css/css-writing-modes/forms/file-input-vertical-rtl.optional.html", + "!=" + ], + [ + "/css/css-writing-modes/forms/file-input-horizontal.optional.html", + "!=" + ] + ], + {} + ] + ], "meter-appearance-native-horizontal.optional.html": [ "7b25e1a9000d6c611c62c770871b7e32e4f8c696", [ @@ -319920,6 +320022,539 @@ }, "elements": { "global-attributes": { + "dir-shadow-01.html": [ + "2d6983cb14b3f3f2c4f4ddbb2dcb987ecbc99bcf", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-01-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-02.html": [ + "0553ef9a333a03f211c3fd302011c0b1c17c52a4", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-02-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-03.html": [ + "5986a9d0f74a3e07ffbfa3e86b180d722feb3d01", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-03-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-04.html": [ + "aa2ab9dc93e1e163e6408eb768a815e514f56c5b", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-04-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-05.html": [ + "597cb8d5b8e4934ac4214a2d37f8fc52096e4e8f", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-05-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-06.html": [ + "6cfaf7fcecd84f447b81209e31040d16558a175d", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-06-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-07.html": [ + "dd11f4a605dfae855158673b281ecc7c55b111d0", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-07-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-08.html": [ + "8b1377d32add450e7a2f244e4c443d7844c7f9ec", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-08-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-09.html": [ + "d9c66e79319b75ded2a6cdc8c2da4a1854813f43", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-09-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-10.html": [ + "ad35af808eb8128f613e2ec1f399b8b3e44febbf", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-10-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-11.html": [ + "31e04f065e978d7e7e9c011f6cce2c2bd3aace75", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-11-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-12.html": [ + "f6183a98d9dc290a3dd23be2f575a8052620c523", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-12-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-13.html": [ + "35a00e6d288cc52b3b62300b956ecf5ff4ca2268", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-13-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-14.html": [ + "6aa4a639fd03c4c2eb858e4eb3bc078d503c3bb0", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-14-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-15.html": [ + "37c05d283c25b617095e4b2580334dceb77ff599", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-15-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-16.html": [ + "2a8bb64a1bd5b10deb5bfa554832c11fac8e65b4", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-16-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-17.html": [ + "7016a271741bb51b57b67afd4ab6e7c25adcf018", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-17-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-18.html": [ + "6796dd18eaff02072147c2727a8d403e09d425b7", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-18-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-19.html": [ + "a345a7b60d4c41abac9c9c56a444a0d28b90fee3", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-19-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-20.html": [ + "0072d9b6c96adc4beb0814d02da56f944e925868", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-20-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-21.html": [ + "5b9a4aa184bd65e565a1352dc36848f26482f292", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-21-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-22.html": [ + "009ba460ce1e9b8870970f451cf563f76e4f2313", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-22-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-23.html": [ + "dea79b93e13ae0609549d1fa61d6757776270138", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-23-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-24.html": [ + "d26ccb270a25e91bd835401026f52a95b15e319d", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-24-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-25.html": [ + "508b8260ff923a2208cd7aa1ab8407141604c6aa", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-25-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-26.html": [ + "b19cb976f88ee216abf781e0d7a4333fca37d050", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-26-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-27.html": [ + "8380f17b2186be630977f43bf90590bb945c9b8f", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-27-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-28.html": [ + "3a0d6756b355270b9bd0ae3a2c225e39f8158159", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-28-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-29.html": [ + "46cbf8d2911a85105ebd28f171a89e977b446781", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-29-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-30.html": [ + "2a3e56e62cc6447fc9f0cd784839f8d7fe5457f3", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-30-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-31.html": [ + "d48a0f8c0403e6dc56ebdea975b36161233917fd", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-31-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-32.html": [ + "ac9c9e45792c2a61181abf7336613144cd2008eb", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-32-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-33.html": [ + "814e3b34d6f66add65d08e1a7680c1b009475d49", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-33-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-34.html": [ + "07f75d216a898b4d81e7c591f59e3d5d292fbb25", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-34-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-35.html": [ + "0f2a7c882f80b9107704b5c0000bf4f3c5520d63", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-35-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-36.html": [ + "ff4f11b3a6f7edbb83c74757e8fa3d6542901901", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-36-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-37.html": [ + "ba0480636a0fd51ac83d32b65834789afa7428b5", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-37-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-38.html": [ + "e8f25eb5689c89c64eb1d91fcaf4c71e6e5b3f7a", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-38-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-39.html": [ + "72fdd665fc3ec8377e5f5f9fa165d724a30291a8", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-39-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-40.html": [ + "567f4fa9da833fb38cf3b7cc4699487816dea3e4", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-40-ref.html", + "==" + ] + ], + {} + ] + ], + "dir-shadow-41.html": [ + "48e2057552c3a696cdf26eb70368a6a2c8dac64f", + [ + null, + [ + [ + "/html/dom/elements/global-attributes/dir-shadow-41-ref.html", + "==" + ] + ], + {} + ] + ], "dir_auto-EN-L.html": [ "fa8d793bd043d008a98020063dcea6549e9d3e19", [ @@ -323735,6 +324370,19 @@ {} ] ], + "details-display-type-002.tentative.html": [ + "716221f7c5c6f83f4b341e4affce90c2622cc40f", + [ + null, + [ + [ + "/html/rendering/the-details-element/details-display-type-002-ref.html", + "==" + ] + ], + {} + ] + ], "details-pseudo-elements-001.tentative.html": [ "08321977c6b4abe71b88d6fa448b088688dccb45", [ @@ -324667,7 +325315,7 @@ ] ], "image-compositing-change.html": [ - "658c2ad39ea343e40de9aaf64dcb7c75b346ae6b", + "d3e7ee41711fbd1a02bb1c8f76c31435d52151a5", [ null, [ @@ -324682,11 +325330,11 @@ null, [ [ - 150, + 0, 150 ], [ - 296, + 0, 296 ] ] @@ -326188,7 +326836,7 @@ {} ] ], - "fixed-position-child-with-transformed-ancestor.html": [ + "fixed-position-child-with-transformed-ancestor.tentative.html": [ "527d508252c15d0f1b46580afc0a0ae8bbe625d8", [ null, @@ -326201,7 +326849,7 @@ {} ] ], - "fixed-position-child-with-will-change-ancestor.html": [ + "fixed-position-child-with-will-change-ancestor.tentative.html": [ "e9db7321cd703d26e90c4a50932892da7d504218", [ null, @@ -326552,7 +327200,7 @@ {} ] ], - "top-layer-stacking.html": [ + "top-layer-stacking.tentative.html": [ "6407ef23c2e38ef000bfb59be340900312935a8a", [ null, @@ -339870,7 +340518,7 @@ [] ], "eddsa.js": [ - "d425fec2dc343ef456ba714e51b940477436a32a", + "d77a880883117634aaba9c34ddda9b7ba60f9804", [] ], "eddsa_vectors.js": [ @@ -339878,7 +340526,7 @@ [] ], "hmac.js": [ - "8df4b042f54cf68599b5d59feb8a7794205dc007", + "f5e2ad2769cdd8d7be5e781eb983d66837bfe3af", [] ], "hmac_vectors.js": [ @@ -383381,6 +384029,10 @@ } }, "css-anchor-position": { + "anchor-center-002-ref.html": [ + "40ccc2b044b3da3be44582522d99e5a138b6f354", + [] + ], "anchor-default-ref.html": [ "4d7de12447c8297b8f0fc04338d80a028a3e9798", [] @@ -384696,6 +385348,14 @@ "690f9ad11ad0e63d57c8c7ee10737690b7c8a061", [] ], + "border-image-repeat-002-ref.html": [ + "e295a5c65dc1f864adffffe2d9c12fdee0a97a6e", + [] + ], + "border-image-repeat-004-ref.html": [ + "9c3f7176633b639c24bc6736713d34505da798e6", + [] + ], "border-image-repeat-005-ref.html": [ "0a372e088baa0045bb972c7398085da56a216d03", [] @@ -384740,6 +385400,10 @@ "3ff7980de6c04776bba4ded110e14229d92e5c06", [] ], + "border-image-slice-004-ref.html": [ + "d9c798a616771db9bb9470253fda0b7fe3a012f8", + [] + ], "border-image-slice-005-ref.html": [ "d4a4040a7854d7578e94b372650318792925f662", [] @@ -385084,6 +385748,10 @@ "93f566194785c0bbe7fc9767dda86fd7ae62acf1", [] ], + "9grid20-40-red.png": [ + "75173b7edc09ab93eb76bf292eda63e207505cc9", + [] + ], "9grid40-30-20-10-green.png": [ "329699bf9d1cb665ba9be62bcb76da8ffd137f34", [] @@ -391999,6 +392667,10 @@ "428c8c401856627c81bc7d03663317fd76bbf08b", [] ], + "font-synthesis-08-ref.html": [ + "39cd4558d98b1fcdbc78968dff477c44d7f0fa94", + [] + ], "font-synthesis-position-001-ref.html": [ "228dc652f29d0cd1d73f0d88b8d970699070191e", [] @@ -399947,24 +400619,6 @@ [] ] }, - "align-tracks": { - "masonry-align-tracks-001-ref.html": [ - "3b22489fdb935ed1691714ddb1ddc96b6a948db1", - [] - ], - "masonry-align-tracks-multi-001-ref.html": [ - "b0bf3578618df14a95e65e5dbcec8a8ef55442df", - [] - ], - "masonry-align-tracks-stretch-001-ref.html": [ - "0712f14bb3136b96897513cc524ee0004350ccd4", - [] - ], - "masonry-align-tracks-stretch-002-ref.html": [ - "01f24ea986f588856cb9ea8d126632d88316ef49", - [] - ] - }, "baseline": { "masonry-grid-item-content-baseline-001-ref.html": [ "cdb6d4fdf8ff8aeb8f56ae14e52b73aa370977eb", @@ -400115,24 +400769,6 @@ [] ] }, - "justify-tracks": { - "masonry-justify-tracks-001-ref.html": [ - "912c9c9f823ddabbf2a2ebd0c19feacc38db34fb", - [] - ], - "masonry-justify-tracks-multi-001-ref.html": [ - "319ef217ea759acf81037e414ec0762363bca6c9", - [] - ], - "masonry-justify-tracks-stretch-001-ref.html": [ - "39053051cc837bff68d39e16a1e5ff27ee0d8ed9", - [] - ], - "masonry-justify-tracks-stretch-002-ref.html": [ - "69759484f298f1220f87c73a582131812b2cf407", - [] - ] - }, "order": { "masonry-order-001-ref.html": [ "371699981544487f6b7c6b1e8d084e746057a07d", @@ -422910,7 +423546,7 @@ [] ], "parsing-testcommon.js": [ - "e480f26b3f3db5bc95ecd152c9711c3bccfcfcfe", + "93fd0090770b548c5116b59b037114616f541b14", [] ], "pattern-grg-rgr-grg.png": [ @@ -428668,7 +429304,7 @@ "fledge": { "tentative": { "TODO": [ - "7ec6d8808017cbef7062a28df30efb4e0513f629", + "2f3e72b21287a98d370bef18c23fbd2bddab97a3", [] ], "resources": { @@ -428677,7 +429313,7 @@ [] ], "decision-logic.sub.py": [ - "165d98400283c1af965b7feb270c939a5c691b84", + "d5ecd2db87a34136c5a0e8e07f1751811296f634", [] ], "empty.html": [ @@ -428689,17 +429325,17 @@ [] ], "fledge-util.js": [ - "7ed5b13f8d987715558a129dfa93bd5a0fed4e1c", - [] - ], - "iframe.sub.html": [ - "0bc0ea357f6385c77a83629f34748a599ff6ad17", + "c89814507cbd197d12d8b6284dc18dd76d9e9ae3", [] ], "request-tracker.py": [ "46da796f30102e0e32a82a4dab96fa9217154306", [] ], + "subordinate-frame.sub.html": [ + "465f8e7bdf0c010d733779d528e183825ae76f97", + [] + ], "trusted-bidding-signals.py": [ "86e4db8ad448ade94b4c5885ea6b99b9f80e2871", [] @@ -430012,7 +430648,7 @@ [] ], "test-helpers.js": [ - "f185e2f48b6e7915e5dd6354c62923beb98e8a25", + "4bcf5d7e8341e221741cd9383a8b93d785d90131", [] ] }, @@ -430098,7 +430734,7 @@ [] ], "FileSystemFileHandle-move.js": [ - "dd848626e4a747f8c74dff65157704952fbff6c0", + "c5d08f305d0612376a3641798d0a6b3b909cf404", [] ], "FileSystemSyncAccessHandle-flush.js": [ @@ -435413,6 +436049,174 @@ "94e9a4f1908e4f4eb3216981a91c3c8174902fcb", [] ], + "dir-shadow-01-ref.html": [ + "3462b908b3df0d5550e74fa2ea93e9b2ff959b9b", + [] + ], + "dir-shadow-02-ref.html": [ + "8f358cf6471ca8d31ebad27872ec9071d28bae94", + [] + ], + "dir-shadow-03-ref.html": [ + "a2f574820f2049487e330765997bd8983af5a483", + [] + ], + "dir-shadow-04-ref.html": [ + "5724b5b84db4a6f96fa350a8e11a8c99e29c9e9c", + [] + ], + "dir-shadow-05-ref.html": [ + "13c5b16240c4879ff84d4c5c24ceaf3daabee49e", + [] + ], + "dir-shadow-06-ref.html": [ + "ca54b3bb2c8e5c13f551057d2653030ece98ddb1", + [] + ], + "dir-shadow-07-ref.html": [ + "0a2de4d398f5d820d5e55eb8f45ce34df6dbff97", + [] + ], + "dir-shadow-08-ref.html": [ + "09d8b24094f56aadb293d995fb4c8c66e1011d6d", + [] + ], + "dir-shadow-09-ref.html": [ + "73b9cb14870fb0dc292b0cfd49ac1afe3f2ccc9c", + [] + ], + "dir-shadow-10-ref.html": [ + "391e5047f91ca9282448b83987a06cd1ab32c01c", + [] + ], + "dir-shadow-11-ref.html": [ + "ae7e849c9773c07b5fb38c56e9d33baeec24dabc", + [] + ], + "dir-shadow-12-ref.html": [ + "6f6b40218a8e713a278471681f46e8d93fe53070", + [] + ], + "dir-shadow-13-ref.html": [ + "a6ec54186fede6655579f8f86d85925fea54475e", + [] + ], + "dir-shadow-14-ref.html": [ + "73d4eab9622f043302ab9c44ae49453abf47083f", + [] + ], + "dir-shadow-15-ref.html": [ + "0139997e657345168f7c3b0daf683fb1938a103d", + [] + ], + "dir-shadow-16-ref.html": [ + "926b7a900d7a220e22ab01b35a2b918d69977296", + [] + ], + "dir-shadow-17-ref.html": [ + "b17c3e191d8845c359ffdaedc351d2a266d5f1d7", + [] + ], + "dir-shadow-18-ref.html": [ + "6155a9f2c952c5114710d68beff8e23ae0d42c39", + [] + ], + "dir-shadow-19-ref.html": [ + "61a9592a4a8a4004755eccc6c895592cda57a875", + [] + ], + "dir-shadow-20-ref.html": [ + "2e813817722407eae4c6c535ace690e148a4293b", + [] + ], + "dir-shadow-21-ref.html": [ + "58c8d426f288273e0e190e1a72ff343695356cab", + [] + ], + "dir-shadow-22-ref.html": [ + "6721da534f76f0f6b5639abb7a630878c2eb7ef1", + [] + ], + "dir-shadow-23-ref.html": [ + "bf06a4484707cf68b38aba35e5729da7b7894109", + [] + ], + "dir-shadow-24-ref.html": [ + "8453e9453372cc0ac16afd7d9fafdc107b0b39b0", + [] + ], + "dir-shadow-25-ref.html": [ + "5a2f6d57776cb07d8b8a35f172467057a1ec6229", + [] + ], + "dir-shadow-26-ref.html": [ + "41e1dbc8a81ee046ffa8a178dede9e0438c3aaf6", + [] + ], + "dir-shadow-27-ref.html": [ + "075230d055cd50767d2da7d8c81a610c7a27449a", + [] + ], + "dir-shadow-28-ref.html": [ + "580f5fe3b11acfb9a70c1f460134c12068e18f66", + [] + ], + "dir-shadow-29-ref.html": [ + "4b949acb0985160061176a0e33ca0477837e3c45", + [] + ], + "dir-shadow-30-ref.html": [ + "be2cc44abd56e71797c4f1ec2662dc5e41741f68", + [] + ], + "dir-shadow-31-ref.html": [ + "1c5b5b11a8cabbbda078b0bd490eebb5c9e91c4a", + [] + ], + "dir-shadow-32-ref.html": [ + "6e5d9a96e8e5fb6dfa14d6a7a5630adc074fbba7", + [] + ], + "dir-shadow-33-ref.html": [ + "cdf89d78bb6126c7b350471373d9339ae60af35a", + [] + ], + "dir-shadow-34-ref.html": [ + "4cedca8e50d76568c381c4180780f040d2be8ea2", + [] + ], + "dir-shadow-35-ref.html": [ + "c4e9f8c70eb520dfc19bef0a0c91ec7f45117710", + [] + ], + "dir-shadow-36-ref.html": [ + "f8af117e3bf71d673906acc0ff14dc8259db14bc", + [] + ], + "dir-shadow-37-ref.html": [ + "5941b23c02a5aae31146e8286992a4e431795d6c", + [] + ], + "dir-shadow-38-ref.html": [ + "f8af117e3bf71d673906acc0ff14dc8259db14bc", + [] + ], + "dir-shadow-39-ref.html": [ + "8f75e9877c4051a3ae532c94cde2d9bae2270556", + [] + ], + "dir-shadow-40-ref.html": [ + "c1c074812b5ed248ab9aa02c10818041c56856fa", + [] + ], + "dir-shadow-41-ref.html": [ + "41f9c8bc31c57c4af85d8c2bc2e7024a484497bd", + [] + ], + "dir-shadow-utils.js": [ + "c7d89cf908286bf2ebad72abc59abe26949a209a", + [] + ], "dir_auto-EN-L-ref.html": [ "de6e13b3a3221f6054e387eb76525673bc1201f9", [] @@ -440346,6 +441150,10 @@ "4349df38d6aabc9bcc98a5a2666139a6d52a8881", [] ], + "details-display-type-002-ref.html": [ + "297634b521fab5e61d0bbac9edb4480b5de7366d", + [] + ], "details-pseudo-elements-001-ref.html": [ "43f2216bec7894f5ffd060bd52375697dbb3faec", [] @@ -440766,7 +441574,7 @@ [] ], "media-min-width.html": [ - "7c309469024ad95eb294d32e1d97868718ff1722", + "8a4ad500cb184296864ea87113635f303f412e76", [] ] } @@ -442446,7 +443254,7 @@ } }, "interfaces.js": [ - "96abf61e2ce1e3523ac60427dad07de9686d9c15", + "05fc82f767358a75cc2c536d3944f234f4a3532b", [] ], "links": { @@ -444048,11 +444856,11 @@ [] ], "delay-load-event-iframe.html": [ - "38a9a21541987f501f8c718202ddf25da48bdca5", + "efec7657c3620f6ddabe6581b0ba8c6c1c187f0a", [] ], "helper.js": [ - "331cf79bf0bab55f33c7ee95b46de634ea6d0ccc", + "cb5f45eb0d656a09c8f12aa37c1127f2752f1c09", [] ] }, @@ -447453,7 +448261,7 @@ [] ], "WEBGL_clip_cull_distance.idl": [ - "46fa921fd5392807558518742eff3436702030fc", + "a3a6dd869f9515d406e4296a7e2016d395f231ea", [] ], "WEBGL_color_buffer_float.idl": [ @@ -447509,11 +448317,11 @@ [] ], "WEBGL_multi_draw.idl": [ - "ee8c044b5296f5a68c6edb48cc3e2d99a839f457", + "fc2270029b13d7876f717e4529b94e507809df50", [] ], "WEBGL_multi_draw_instanced_base_vertex_base_instance.idl": [ - "2258fa9a10cf9f05e80ab1b220452070c0fbd87b", + "7e4515cc36bba40fb35aa4970d02247e558a1a1d", [] ], "WEBGL_provoking_vertex.idl": [ @@ -447544,6 +448352,10 @@ "80ceb225308a057d99ce39f575ebcf8eb40ab5fb", [] ], + "audio-session.idl": [ + "f542347c710143e6003e96907c989614a40c701a", + [] + ], "autoplay-detection.idl": [ "cd0884fe521f3af9385ec46f65d67b7d3045f4b0", [] @@ -447581,7 +448393,7 @@ [] ], "clipboard-apis.idl": [ - "3f2c9ba6f28253f6febaf689e150d188d4fc3374", + "51d5af18dc208b3953eb0db531343207be8e2c90", [] ], "compat.idl": [ @@ -447740,6 +448552,10 @@ "b0f26ea83c777becd82d86d02964c8627b3a6d83", [] ], + "css-view-transitions-2.idl": [ + "6d23f406b01ae9795a2edfaf4f2b6ade9ceb3925", + [] + ], "css-view-transitions.idl": [ "745eb1d96913389a24b933152c674abb086e3c28", [] @@ -447785,7 +448601,7 @@ [] ], "edit-context.idl": [ - "937b6579376b5d4d5bb28fbc885278c539b65e98", + "011130480e9f3b89b0a227d82c527aa334b5e55f", [] ], "element-capture.idl": [ @@ -447817,7 +448633,7 @@ [] ], "fenced-frame.idl": [ - "75196932821489cb7c76fa0b29c2a0b3f2a6d90f", + "0eed6a6b4ba46e0eb30b26cc78a4b9cc65fc544d", [] ], "fetch.idl": [ @@ -447889,7 +448705,7 @@ [] ], "html.idl": [ - "eec3f781c7436848e705d4f82875b19accdf8ebd", + "c7f744ccbe601bd075f218878f618897f09413b3", [] ], "idle-detection.idl": [ @@ -447917,7 +448733,7 @@ [] ], "intersection-observer.idl": [ - "52db1c4baa9562f836f2273a4b21a4f970ff9318", + "8502a11357faabd327d5659089198f0133a9db4c", [] ], "intervention-reporting.idl": [ @@ -448009,7 +448825,7 @@ [] ], "mediasession.idl": [ - "cca46ac5a85a6384e75f20bcc670a2d3025c409a", + "83c1eb59dffd7caf2a811caaba72a6ebd0bacdc5", [] ], "mediastream-recording.idl": [ @@ -448233,7 +449049,7 @@ [] ], "shared-storage.idl": [ - "d223736f29f5933c9f59eb220c49912f8439d50d", + "edbe2c2bcc3e913ff42575fe8ffef7e2425051d9", [] ], "speech-api.idl": [ @@ -448285,15 +449101,15 @@ [] ], "turtledove.idl": [ - "393792ffeac7749d3e2575160106b0038701aede", + "c7f49f70a92522e14790bc65a11b2f3890de9e61", [] ], "ua-client-hints.idl": [ - "c69714b9734ade32207ba1b2ff9a6cd5c2f46924", + "6a40e1bdc4bae6dddcb649d7f146fb6aba74b516", [] ], "uievents.idl": [ - "5fdc812e700ccd0f99175b99ca4fe80d7748b13b", + "fef90d48410b343483493a6be6b734a7c972583e", [] ], "url.idl": [ @@ -448369,7 +449185,7 @@ [] ], "webaudio.idl": [ - "1569de204bd9ff0d8d784cd0347c35a9ab1f645f", + "73dc35d260946aed4e24013d5882c5dbeb86423d", [] ], "webauthn.idl": [ @@ -448421,7 +449237,7 @@ [] ], "webgl2.idl": [ - "5499e5a68b1be50f1e398de0d82c34b97c83f8bf", + "9cb639932e82fc45ab626ec00f8f28831c66eb13", [] ], "webgpu.idl": [ @@ -448445,7 +449261,7 @@ [] ], "webrtc-encoded-transform.idl": [ - "6dd2ba3fffa0072136dabf9826299c40d4557dc2", + "1a456577d38870c033417e45cc0fa9b6317875b4", [] ], "webrtc-ice.idl": [ @@ -448477,7 +449293,7 @@ [] ], "webtransport.idl": [ - "a9f514e2366e1ea2200989aef84abe612596f369", + "284ab350829cb4faea0ef6f62dacb4eb465a7aad", [] ], "webusb.idl": [ @@ -452359,6 +453175,14 @@ "12fc99b50b2e4c875c0b31d0d81d3a3f33e0eea3", [] ], + "report-only-and-enforce.https.sub.html.sub.headers": [ + "48f483dd45ee40c869aa833a61f6af3a5f889a8c", + [] + ], + "report-only-single-endpoint.https.sub.html.sub.headers": [ + "881eaba1493667075156de4b0a8a29da3d92c90c", + [] + ], "report-to-multiple-endpoints.https.sub.html.sub.headers": [ "14b742c5587b928b6b3bac3963443ea2c7251e1c", [] @@ -455438,7 +456262,7 @@ [] ], "generic_sensor_mocks.js": [ - "98a29c2104fd91eccce12d10ecd58561755cbf82", + "5ca8dc0173bbe89f3bb2d54d8d955d4cd036126f", [] ], "generic_sensor_mocks.js.headers": [ @@ -459928,7 +460752,7 @@ [] ], "soft-navigation-helper.js": [ - "7f83df75f8fe5db63bd0e2714b424a319f852a74", + "1116ebccb359e302f109bdb7ba455c827a43a193", [] ] } @@ -461956,7 +462780,7 @@ [] ], "run_tc.py": [ - "a5a6256ad542e1601988c5ad408804ec671d7298", + "b91825497d4996f5b3599502f7bed65475d4130f", [] ], "taskcluster-run.py": [ @@ -470285,7 +471109,7 @@ [] ], "script.py": [ - "99b26927403515de31d822336ee4d5ed062f7cd6", + "f128b0d089c28bef46ce571a17e10d02b4fce8bd", [] ], "session.py": [ @@ -470660,11 +471484,11 @@ [] ], "firefox.py": [ - "d91703f42dd2a2faeab45b2e5941ad626603ceb5", + "2ef3e18900ff98e5793f2cc374a5c171ada84818", [] ], "firefox_android.py": [ - "8437dd2005929834db22626cbbb3dcd3f4a5b926", + "1937d97c40193972ae44a434287cf64b362639ac", [] ], "ie.py": [ @@ -471041,7 +471865,7 @@ [] ], "wptcommandline.py": [ - "58c726fe379e0cadbef9f89dcf21200189d3999e", + "d90f028ceb6dce9418a2c1787210db7d74e4d98e", [] ], "wptlogging.py": [ @@ -479345,6 +480169,22 @@ "f00448271922785d499a31e7126dfd9c63ebec95", [] ], + "shared-worker-echo-cookies.js": [ + "34dcbc9d260bd8acc87c3d4c78a4e187981d27b5", + [] + ], + "shared-worker-partitioned-cookies-3p-frame.html": [ + "dc700d31f97a2b2c85040531dfe52924f0058d56", + [] + ], + "shared-worker-partitioned-cookies-3p-window.html": [ + "e37e0a2cc6b6e53340cc46b6816b881b33c2d876", + [] + ], + "shared-worker-partitioned-cookies-helper.js": [ + "3bcdc879e8e5aaf6e5e73126bd0786cbd31fa618", + [] + ], "sync_xhr.js": [ "5de74765373876ef77b2ab5b8addffaa33e7e045", [] @@ -492929,7 +493769,7 @@ ] ], "okp_importKey.https.any.js": [ - "a0ec3e81c877e12539528ca5ba60502bc4f91979", + "a56bd31cbe14b1e5a2024a75fa77491bed2256ea", [ "WebCryptoAPI/import_export/okp_importKey.https.any.html", { @@ -493702,7 +494542,7 @@ ], "name": { "comp_embedded_control.html": [ - "09856ef662e90cba81059ad3c8a977e63b3781b5", + "2cdb5cbdf7d0e269a3613dd5af611d282af3bf64", [ null, { @@ -493711,7 +494551,7 @@ ] ], "comp_hidden_not_referenced.html": [ - "84a2a2ca8026e3f82db1d66d6d4ffb1ddc3d13ef", + "7d9cf2c36f6426a472eceae995e1e4a0de8abb81", [ null, { @@ -502903,15 +503743,6 @@ } ] ], - "async-unsanitized-standard-html-formats-write-read.tentative.https.html": [ - "0eb97926bc091fff89913e830498d50c43049fe3", - [ - null, - { - "testdriver": true - } - ] - ], "async-unsanitized-standard-html-read-fail.tentative.https.html": [ "e7ddbb0cdf6e29f98ff7eb86e16c1658c94b54f8", [ @@ -515780,27 +516611,6 @@ {} ] ], - "align-tracks-computed.html": [ - "76241f694af632f0258c167e9b624e5db306c8de", - [ - null, - {} - ] - ], - "align-tracks-invalid.html": [ - "68f38f5a61ce5e43da50add0daf0a56b86042f72", - [ - null, - {} - ] - ], - "align-tracks-valid.html": [ - "1c9a8b040cd88d0ae91fd83b4806f8fd0a5b198b", - [ - null, - {} - ] - ], "column-gap-computed.html": [ "01e04b04994ae61e1e94952f06757cc896ab75df", [ @@ -515913,27 +516723,6 @@ {} ] ], - "justify-tracks-computed.html": [ - "372d17c91018e1600e76ebe5caba0e6584daab4b", - [ - null, - {} - ] - ], - "justify-tracks-invalid.html": [ - "a1dc2cc73880039993e2de0d5dd6114db88d63dd", - [ - null, - {} - ] - ], - "justify-tracks-valid.html": [ - "be4f426f144b474555b7f40da563a9d3338f3665", - [ - null, - {} - ] - ], "place-content-computed.html": [ "1fc152c231d271163f20cba74e471734e7fbc134", [ @@ -516156,6 +516945,13 @@ } }, "css-anchor-position": { + "anchor-center-001.html": [ + "f8583e68c00183023b88690c79cfc1d3524ab00d", + [ + null, + {} + ] + ], "anchor-default-003.html": [ "00c20324344d0d888aace7f5414ba7e5354af786", [ @@ -516569,6 +517365,20 @@ {} ] ], + "anchor-scroll-006.html": [ + "2ffd026b55296f105e37141646f12d999cd56d5b", + [ + null, + {} + ] + ], + "anchor-scroll-007.html": [ + "ec519106190c7cebe095a2dc4396cfe94486fb61", + [ + null, + {} + ] + ], "anchor-scroll-fallback-position-001.html": [ "04518e5019349f74a2435f6c80318b2481f8fa15", [ @@ -519850,6 +520660,13 @@ {} ] ], + "light-dark-basic.html": [ + "ee0533223842e9ec0dc7b72cf4756aa296abccf0", + [ + null, + {} + ] + ], "nested-color-mix-with-currentcolor.html": [ "a4dd687dd5814af2e4660586a2c97c09ba34ffe4", [ @@ -529026,6 +529843,13 @@ ] }, "subgrid": { + "align-self-baseline-with-subgrid-mbp.html": [ + "bb9f8444835787f0d3fa0ee2b2f7b76dc8001a6a", + [ + null, + {} + ] + ], "grid-template-computed-nogrid.html": [ "1f37ce860acfd3eeec3f00dcd09819e00b15a5b9", [ @@ -533244,7 +534068,7 @@ ] ], "determine-registration.html": [ - "20cddc48adcc9c313f3097c2ff6883a64bd4df1c", + "99e39c191ec0dc9fe6e2e3e93ae6f121a9cffd53", [ null, {} @@ -533257,6 +534081,13 @@ {} ] ], + "get-computed-style-enumeration.html": [ + "909247f69a887913c67ece8494f77d8e99e63127", + [ + null, + {} + ] + ], "idlharness.html": [ "6f053757c3cef099f0cea41716a942dfa7e66100", [ @@ -533264,6 +534095,13 @@ {} ] ], + "invalid-at-computed-value-time.html": [ + "56a7756f40643478b5505390f29a982e7754bd8c", + [ + null, + {} + ] + ], "property-cascade.html": [ "bb50213d5ce171b98b3569e2fd39fcc3b3b22abb", [ @@ -533901,7 +534739,7 @@ ] ], "slotted-parsing.html": [ - "bed4dedd56072ad1937ec536f2e6bc04f1fb70fd", + "e4657b588af5e0fd5edaac23c5c94ae49f17750d", [ null, {} @@ -540359,15 +541197,6 @@ ] ] }, - "text-spacing-trim": { - "text-spacing-trim-combinations-001.html": [ - "4b49e64323a9c1a116fc1b2a1ba8138ad3170aa6", - [ - null, - {} - ] - ] - }, "white-space": { "append-whitespace-only-node-crash-001.html": [ "b32555b18876898beb1b3b7b4559268d64ae9c1c", @@ -545184,21 +546013,21 @@ ] ], "form-sizing-computed.html": [ - "557b1d5eb960d4afe4b073b376d476108dc2fb95", + "e508cd2050e3e0dad6c4fc66cbc82d9a4d9329c9", [ null, {} ] ], "form-sizing-invalid.html": [ - "80ab546f90e1ea1f54a1661ea68623ffa942e9c9", + "5589707b25e32da8bed734db32a6a5f491853895", [ null, {} ] ], "form-sizing-valid.html": [ - "f7cc8f44c3cc06d482b0956a7e0635408d9abb9d", + "d9d39f79132dc4b187e2e4079ca103af471d1919", [ null, {} @@ -546862,6 +547691,13 @@ {} ] ], + "file-input-computed-style.html": [ + "417534e9bd6cfa6ebae9f5ecb5f37b5de45b3d9b", + [ + null, + {} + ] + ], "meter-appearance-native-computed-style.optional.html": [ "446036b73c92734f8d4099b3d9018879bdce1239", [ @@ -546876,6 +547712,15 @@ {} ] ], + "select-multiple-keyboard-selection.optional.html": [ + "1b160946f5c3bbcd0c7887a8527eb023c78e3b9a", + [ + null, + { + "testdriver": true + } + ] + ], "select-multiple-options-visual-order.html": [ "359c09279ed856087e4967ed44521dce7fd63c5c", [ @@ -551768,7 +552613,7 @@ ] ], "is-where-parsing.html": [ - "3159ecfe6a65b715912eeee10041b56defc89416", + "6d404dd953b28e2a1f79ce9de57ec57bbe8805f1", [ null, {} @@ -551915,14 +552760,14 @@ ] ], "parse-has-disallow-nesting-has-inside-has.html": [ - "a633c913d160164023a33ff1a6ffe74dc617eb29", + "8ea816b5d898ebaa6a721f94ecfb4a26dadf79e4", [ null, {} ] ], "parse-has.html": [ - "3492373a3362f8e220f02c84bfc8b8eb5a6e29c8", + "949040838cf0409e0ee4bc80fdf4ebe9095eb3de", [ null, {} @@ -556943,7 +557788,29 @@ ] ] }, + "observable": { + "tentative": { + "observable-constructor.any.js": [ + "37c242661d6041db1df39802768d440e53b515c8", + [ + "dom/observable/tentative/observable-constructor.any.html", + {} + ], + [ + "dom/observable/tentative/observable-constructor.any.worker.html", + {} + ] + ] + } + }, "parts": { + "basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html": [ + "a1af7e89c29c01d6341093fddc21653f16b87a9b", + [ + null, + {} + ] + ], "basic-dom-part-declarative-brace-syntax.tentative.html": [ "dd5f1ba7b1052d7b39597ae43fdbe455c6225c89", [ @@ -556959,7 +557826,7 @@ ] ], "basic-dom-part-objects.tentative.html": [ - "af77b28b02f91b1e553901ad2f2ea4e96d8ea97b", + "d7adf61739cd61e975d00896bcb29f15091566d9", [ null, {} @@ -590882,7 +591749,7 @@ ] ], "cross-origin.https.sub.window.js": [ - "1c1d5f2f6b77ac777b4d1c5167abba439b0bc577", + "178b3284bd5264997666dfde4eefa1c6c30bcdad", [ "fledge/tentative/cross-origin.https.sub.window.html?1-4", { @@ -630094,6 +630961,13 @@ {} ] ], + "lang-attribute-shadow.window.js": [ + "9ed242df169c11ce7da4779ff809d16a255a6194", + [ + "html/dom/elements/global-attributes/lang-attribute-shadow.window.html", + {} + ] + ], "mapped-attribute-adopt-001.html": [ "66ff3d64f13cdffe4413ee19534604af020203df", [ @@ -631528,7 +632402,7 @@ ] ], "document-base-url-changes-about-srcdoc-2.https.html": [ - "eac1eaf7d0a511a5de3a0d4906842bc065e90bea", + "14e712ce254951f22916c5269206f2cc18b82c4c", [ null, {} @@ -634290,28 +635164,28 @@ ] }, "form-sizing-input-number.tentative.html": [ - "59835805a07148061b3e37b12d98d345a7f6b4cb", + "0bf64c181d0f1e12da6b4d71ea449d0be0f40d39", [ null, {} ] ], "form-sizing-input-text.tentative.html": [ - "32cabc557f6fc2d7cc22dcfa5eac7bd9059d5615", + "065994471f02867be1d2825d19e47489771e324f", [ null, {} ] ], "form-sizing-select.tentative.html": [ - "f9efdc74f9145b73d02e15105a9d19996d47d277", + "7ce6f03ff4bd3f2edba9c684365678d858db1cdb", [ null, {} ] ], "form-sizing-textarea.tentative.html": [ - "ae20e59290c7d4d8bef9d36af583356f08819014", + "fb4ce762e323102c0128815479daddc46ff39f9e", [ null, {} @@ -635964,7 +636838,7 @@ ] ], "resource-selection-source-media-env-change.html": [ - "30d591ae6e7db18116eeb47dcf0be7c980112288", + "67f2c8300d2dcc4b1b23a4e0976f3fe14495ea51", [ null, {} @@ -639566,7 +640440,7 @@ ] ], "resize-during-playback.html": [ - "1b057bbeac322e4bcdaa2ab7d1ff664b06402846", + "e1f35768bc41b4356f0638821ea42fb727d56fc4", [ null, {} @@ -642279,8 +643153,8 @@ {} ] ], - "name-attribute.tentative.html": [ - "6f45b3da089e3f14ae8a0d4c712b0dde1dd2607a", + "name-attribute.html": [ + "2685546e9b00cf39f25fbb790c3543028274b598", [ null, {} @@ -643011,6 +643885,15 @@ ] } }, + "permission-element": { + "no-end-tag-no-contents.html": [ + "5fcce1421b6cd2abed01ab95c381aa7d29708e98", + [ + null, + {} + ] + ] + }, "popovers": { "hide-other-popover-side-effects.html": [ "7cc95a95e907df3fc9eee30f45a4a46f38fc90dd", @@ -647334,14 +648217,14 @@ ], "ordering": { "delay-load-event-1.html": [ - "5c8acd470eb578f33247f6244e9c4bbd99022768", + "c5812765ebb74312cba9df4afbf7f4fe607d06a2", [ null, {} ] ], "delay-load-event-2.html": [ - "3399a8c001f0b9e0859d414373eced05a6ce9431", + "916673894dc174fc16b785b059b3861bbcb35935", [ null, {} @@ -664199,7 +665082,7 @@ ] ], "RTCRtpSendParameters-degradationEffect.html": [ - "e6a03c593f3a2e9e37cd2520181b266fc827d8a2", + "a2da6cd139fa40978895bfc8ba2571384c280c8f", [ null, { @@ -664275,7 +665158,7 @@ ] ], "after-transition-traverse.html": [ - "7dd1226e54c10c7cd502048aca469d0f722737b1", + "d348a218ac4a4b7efa0c54ac8e50b51783b1253a", [ null, {} @@ -664312,7 +665195,7 @@ }, "currententrychange-event": { "anchor-click.html": [ - "e0bf91166aa2386b7043ccc12aed636c965952a5", + "ce8fc69f5d4486c990284adfa5e4608af8fd198e", [ null, {} @@ -664326,28 +665209,28 @@ ] ], "history-back-same-doc.html": [ - "768805b7526fcd25898200d0d33f87f9440e6893", + "885d558bb5d5350afb817c9db64be442e7155862", [ null, {} ] ], "history-pushState.html": [ - "1a17a7cec0cade51f537d1ef719fed647e6ebfb6", + "cfefcda1d6a8e5d769c0f26373565b25d68523bf", [ null, {} ] ], "history-replaceState.html": [ - "e8ae8ee57a2c78f36f27643274be01c9fe44b602", + "5b6fc09bf949a2f41e2393774673c7707c6a5dc7", [ null, {} ] ], "location-api.html": [ - "88ebd985a1e9803a4c66b71afc4dda3033fa0565", + "b142fabb2279f2b81dec595865126c9cd438c33c", [ null, {} @@ -664382,7 +665265,7 @@ ] ], "navigation-back-forward-same-doc.html": [ - "8182673aa59dc007d52de97d9cce27614eec38cb", + "cd307a3d538e5842e1061fc9523af5ad84dd5f91", [ null, {} @@ -664424,14 +665307,14 @@ ] ], "navigation-navigate-replace-same-doc.html": [ - "f993597305723d1bb5810b7ea8a4ab83cfb3074a", + "79ade9396f393484ae5c6cb19936238cd9749a4f", [ null, {} ] ], "navigation-navigate-same-doc.html": [ - "87fc28d174a6c8bfbcde746fc019cbd833800319", + "0cf5214eae62c0259cccb6c80e3d46f4fa21f551", [ null, {} @@ -665282,7 +666165,7 @@ ] ], "current-basic.html": [ - "78bbbb05607c3b8c5338d1c062c192936de69407", + "66a7100bf6d3e72ac0ade9a7320b387b55f0916c", [ null, {} @@ -665345,7 +666228,7 @@ ] ], "entries-after-navigations-in-multiple-windows.html": [ - "d1d4d86eb382cab6d9f538a6aa35cc51e64da5a0", + "8cba4c80b7e505595af4b3a4ecd1a3773b2462de", [ null, {} @@ -665380,7 +666263,7 @@ ] ], "entries-when-inactive.html": [ - "c70b6d8bf870fbbffc7214d14e436ad83613368b", + "1130f69800fa50b168eff37c9860dbc04232a8b9", [ null, {} @@ -665394,21 +666277,21 @@ ] ], "index-not-in-entries.html": [ - "a16d130ba16b39b80ad9b968fd16406897c9a9d1", + "021848f1a3e09ae4b31a85ce5014209ab2a45793", [ null, {} ] ], "key-id-back-cross-document.html": [ - "2dd58c03e9d7cd3f81f50ad0c320e60dcaa07bf7", + "efede38ab312cfe5cb474477414ed3d4b0efe060", [ null, {} ] ], "key-id-back-same-document.html": [ - "858b5fd2c896347ae86680ed554f4160636aa3fd", + "d3c0252fdbbd9c178736ce5c4331b6e983e0ca44", [ null, {} @@ -665422,7 +666305,7 @@ ] ], "key-id-location-reload.html": [ - "f950e2f3a2172e266810fa44ded85647a8eb5247", + "aacd8a28598bbb3bdba3a947c6f24ea803cfd16c", [ null, {} @@ -665436,7 +666319,7 @@ ] ], "key-id-location-replace.html": [ - "a58772a7f479ba2f64f2b220c85588e496e8e4c4", + "d741049c44d76e913f9e4052c251745c66aed077", [ null, {} @@ -665478,7 +666361,7 @@ ] ], "sameDocument-after-fragment-navigate.html": [ - "a197f825d8eda300250af2961bfd14448cdc3fc2", + "1c0cd6e82530fd347d7760fcf64e5b41798e7f17", [ null, {} @@ -666358,14 +667241,14 @@ ] ], "currententrychange-before-popstate-intercept.html": [ - "c51c7c444cb9a574f334e87ee1107271971dc42f", + "10627c5875433a44dcf18e080239c5e520f6c939", [ null, {} ] ], "currententrychange-dispose-ordering.html": [ - "4ca9ba29800b737ba36f9eb040be44b1162290f2", + "ecca39e6a0a69e5f680df1e4d581555f5c5e7473", [ null, {} @@ -666616,28 +667499,28 @@ ] ], "dispose-for-full-session-history.tentative.html": [ - "9bed225cf36550a71942188a2b9d701e02244cdb", + "6f5007ac569f6245a8fe4e5f0ff4c4502f078bec", [ null, {} ] ], "dispose-for-navigation-in-child.html": [ - "24828770852687fc0af9aa1473119e2ac40f6a1a", + "d351fad6c0895b7240e64319594deb9dff2731d1", [ null, {} ] ], "dispose-same-document-intercept.html": [ - "44aa096aafec78dd06215b90ac75316d61b5c5e2", + "862e01127bed042f29d32def902a381452ae78d1", [ null, {} ] ], "dispose-same-document-navigate-during.html": [ - "59d9b3cce3977ae255e25a2e96220ef92700c63c", + "88eb35c225fa7cbeb8bf03a2af8f37629ff580c5", [ null, {} @@ -666651,28 +667534,28 @@ ] ], "dispose-same-document-replace-with-intercept.html": [ - "4e492e30aedeb69030cb596e2e5b8f117290d2de", + "7814543e7142229b300ecf51d17eb9fd9a4ca764", [ null, {} ] ], "dispose-same-document-replaceState.html": [ - "a6197260a28b8137a142453fd669fbeb82b12680", + "78df25774c33d8812f920921015dd6d692b5050d", [ null, {} ] ], "dispose-same-document.html": [ - "27806ce3c86a672701785be2453788e50b9b7388", + "e41403e773cdbdbfaa109a29055397bf5a3b40da", [ null, {} ] ], "dispose-skip-current-on-truncate.html": [ - "56ec4d301f9540fc7baf3f0f8daf52df6b4ea4b2", + "bcf0ee3b79e577a1d31094426d7f320743572164", [ null, {} @@ -666893,14 +667776,14 @@ ] ], "same-document-away-and-back-location-api.html": [ - "d161df8b5295f1bbc8e396a4345ef2ae0112264f", + "ddc90eef8c57027c20e3c53ae900087dd5ea988d", [ null, {} ] ], "same-document-away-and-back-navigation-api.html": [ - "220908e4c46cb91ad24408078ef1f7846b45e1b6", + "cfb7765b0d5dc49a910b3d9ee15fb93af28ab4ff", [ null, {} @@ -666993,7 +667876,7 @@ ] ], "same-document-away-and-back-location-api.html": [ - "47b1904f4f46f6cbd1a8bbdebbd2516e9669df93", + "04b615cf831ed20f397d56a997075748aa681f33", [ null, {} @@ -671475,6 +672358,24 @@ } ] ], + "report-only-and-enforce.https.sub.html": [ + "6254b3247e2d1075b1c34db70c0092b9dfd39089", + [ + null, + { + "testdriver": true + } + ] + ], + "report-only-single-endpoint.https.sub.html": [ + "7f9bad40cbba1650a2df88b43b84ccf5d55086e8", + [ + null, + { + "testdriver": true + } + ] + ], "report-to-multiple-endpoints.https.sub.html": [ "ce392ed94124d35726bc8fdbdbb6c855d69d0cb8", [ @@ -698949,7 +699850,25 @@ ] ], "keydown.tentative.html": [ - "fac86d71d2cc04c17fedc98e4d8ba8133050725a", + "19971e6d2da58d50cc6e94411b644e74fb4db137", + [ + null, + { + "testdriver": true + } + ] + ], + "keypress.tentative.html": [ + "5bd512ec3e74a1cb3ac5da0e3d6406a3799c96e6", + [ + null, + { + "testdriver": true + } + ] + ], + "keyup.tentative.html": [ + "8b5717d62e935676aea2894d601f0075878edb44", [ null, { @@ -710832,7 +711751,7 @@ ] ], "SVGLength-px-with-context.html": [ - "b5c2149b692eea53d7565031d135317526736c44", + "7cbe27f83a3be8a2f106eb27bc6540d0274ec56c", [ null, {} @@ -724092,6 +725011,13 @@ {} ] ], + "moderate-exponentialRamp.html": [ + "cf32d253ae625cf82f9475b5469dfdef9973cc8f", + [ + null, + {} + ] + ], "nan-param.html": [ "e9b8f0accbd1b0359275615f3ef12bd7e9317c4f", [ @@ -725797,7 +726723,7 @@ ] ], "audio-encoder.https.any.js": [ - "cd7739bcd26deb4fb8e5970d39180d68e3a331d3", + "51496551cf525b3208be63bb3dbce325a13882ed", [ "webcodecs/audio-encoder.https.any.html", { @@ -728221,7 +729147,7 @@ ] ], "transfering.https.any.js": [ - "b9487e589d833d8617eeae4d7f4cc513c30a9c69", + "b127670d7b4c6f78382f1b34a080ac9b7a119a6c", [ "webcodecs/transfering.https.any.html", { @@ -744509,6 +745435,147 @@ {} ] ], + "close-connecting-async.any.js": [ + "c7ace1fca2734085705e191cd2a5e089f2306664", + [ + "websockets/interfaces/WebSocket/close/close-connecting-async.any.html", + { + "script_metadata": [ + [ + "script", + "../../../constants.sub.js" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wpt_flags=h2" + ], + [ + "variant", + "?wss" + ] + ] + } + ], + [ + "websockets/interfaces/WebSocket/close/close-connecting-async.any.html?wpt_flags=h2", + { + "script_metadata": [ + [ + "script", + "../../../constants.sub.js" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wpt_flags=h2" + ], + [ + "variant", + "?wss" + ] + ] + } + ], + [ + "websockets/interfaces/WebSocket/close/close-connecting-async.any.html?wss", + { + "script_metadata": [ + [ + "script", + "../../../constants.sub.js" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wpt_flags=h2" + ], + [ + "variant", + "?wss" + ] + ] + } + ], + [ + "websockets/interfaces/WebSocket/close/close-connecting-async.any.worker.html", + { + "script_metadata": [ + [ + "script", + "../../../constants.sub.js" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wpt_flags=h2" + ], + [ + "variant", + "?wss" + ] + ] + } + ], + [ + "websockets/interfaces/WebSocket/close/close-connecting-async.any.worker.html?wpt_flags=h2", + { + "script_metadata": [ + [ + "script", + "../../../constants.sub.js" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wpt_flags=h2" + ], + [ + "variant", + "?wss" + ] + ] + } + ], + [ + "websockets/interfaces/WebSocket/close/close-connecting-async.any.worker.html?wss", + { + "script_metadata": [ + [ + "script", + "../../../constants.sub.js" + ], + [ + "variant", + "" + ], + [ + "variant", + "?wpt_flags=h2" + ], + [ + "variant", + "?wss" + ] + ] + } + ] + ], "close-connecting.html": [ "de038ca09f0ea6b24419e9ae3da1c621b6302f3c", [ @@ -753762,6 +754829,15 @@ {} ] ], + "shared-worker-partitioned-cookies.tentative.https.html": [ + "e5f79cd864965af352c5ebcc4491d1311b652ef0", + [ + null, + { + "timeout": "long" + } + ] + ], "shared-worker-partitioned.tentative.html": [ "0be8479fa9b0d6f8bca1109d3adc27ae76242cef", [ @@ -775666,41 +776742,6 @@ {} ] ], - "border-image-repeat-001.htm": [ - "e447421a89ff6a0036a209b1c2ecef93f256a6ae", - [ - null, - {} - ] - ], - "border-image-repeat-002.htm": [ - "f1fd6ffbc3bf56c18c6d10a7460dc5be3a073117", - [ - null, - {} - ] - ], - "border-image-repeat-003.htm": [ - "255fdfccb96fe5a27ceba17aa72728dd528f0edc", - [ - null, - {} - ] - ], - "border-image-repeat-004.htm": [ - "acf7cfa7b842b96c70a57dda047e834e8649f594", - [ - null, - {} - ] - ], - "border-image-slice-004.htm": [ - "86b3c1e6b1dd80770c3867b058e9a8920786db06", - [ - null, - {} - ] - ], "border-images.html": [ "930a1df3b7fda4098f36cc9691a544f46e2311d5", [ @@ -780166,10 +781207,12 @@ ] ], "invalid.py": [ - "cfe5711e63bed061462fb1cd5da75e023883b5fb", + "9de343955c8a260203f0a0beee962e0aa2ddaaf6", [ null, - {} + { + "timeout": "long" + } ] ], "invalid_tentative.py": [ @@ -780248,6 +781291,13 @@ null, {} ] + ], + "user_activation.py": [ + "786fb43954f19d28e08b9b75b88b06d29dad89bc", + [ + null, + {} + ] ] }, "classic_interop": { @@ -780326,7 +781376,7 @@ ] ], "invalid.py": [ - "666bf4d06e0ef128132ef659c8ce039e3821f6fc", + "f27720a204e5ae78e12fcfa6be883750b9767337", [ null, {} @@ -780380,6 +781430,13 @@ null, {} ] + ], + "user_activation.py": [ + "4ca558435d70e3890b0b8b8c7b7b3f4cd28db91e", + [ + null, + {} + ] ] }, "get_realms": { diff --git a/tests/wpt/meta/WebCryptoAPI/import_export/okp_importKey.https.any.js.ini b/tests/wpt/meta/WebCryptoAPI/import_export/okp_importKey.https.any.js.ini index 5c65209a084..381ee699ecc 100644 --- a/tests/wpt/meta/WebCryptoAPI/import_export/okp_importKey.https.any.js.ini +++ b/tests/wpt/meta/WebCryptoAPI/import_export/okp_importKey.https.any.js.ini @@ -287,6 +287,66 @@ [Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits\])] expected: FAIL + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [verify, verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign, sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [verify, verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(crv, d, x, kty), {name: Ed448}, true, [sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(crv, d, x, kty), {name: Ed448}, true, [sign, sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(kty, crv, x), {name: X25519}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(kty, crv, x), {name: X448}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL + [okp_importKey.https.any.html] [Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, true, [\])] @@ -576,3 +636,63 @@ [Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits\])] expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(kty, crv, x), {name: Ed25519}, true, [verify, verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed25519 (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign, sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(kty, crv, x), {name: Ed448}, true, [verify, verify\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(crv, d, x, kty), {name: Ed448}, true, [sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: Ed448 (jwk, object(crv, d, x, kty), {name: Ed448}, true, [sign, sign\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(kty, crv, x), {name: X25519}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(kty, crv, x), {name: X448}, true, [\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits, deriveKey\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits\])] + expected: FAIL + + [Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits\])] + expected: FAIL diff --git a/tests/wpt/meta/css/css-align/parsing/align-tracks-computed.html.ini b/tests/wpt/meta/css/css-align/parsing/align-tracks-computed.html.ini deleted file mode 100644 index e63929a5b30..00000000000 --- a/tests/wpt/meta/css/css-align/parsing/align-tracks-computed.html.ini +++ /dev/null @@ -1,45 +0,0 @@ -[align-tracks-computed.html] - [Property align-tracks value 'normal'] - expected: FAIL - - [Property align-tracks value 'baseline'] - expected: FAIL - - [Property align-tracks value 'last baseline'] - expected: FAIL - - [Property align-tracks value 'space-between'] - expected: FAIL - - [Property align-tracks value 'space-around'] - expected: FAIL - - [Property align-tracks value 'space-evenly'] - expected: FAIL - - [Property align-tracks value 'stretch'] - expected: FAIL - - [Property align-tracks value 'center'] - expected: FAIL - - [Property align-tracks value 'start'] - expected: FAIL - - [Property align-tracks value 'end'] - expected: FAIL - - [Property align-tracks value 'flex-start'] - expected: FAIL - - [Property align-tracks value 'flex-end'] - expected: FAIL - - [Property align-tracks value 'unsafe end'] - expected: FAIL - - [Property align-tracks value 'safe flex-start'] - expected: FAIL - - [Property align-tracks value 'normal, normal'] - expected: FAIL diff --git a/tests/wpt/meta/css/css-align/parsing/align-tracks-valid.html.ini b/tests/wpt/meta/css/css-align/parsing/align-tracks-valid.html.ini deleted file mode 100644 index cbe763cc151..00000000000 --- a/tests/wpt/meta/css/css-align/parsing/align-tracks-valid.html.ini +++ /dev/null @@ -1,54 +0,0 @@ -[align-tracks-valid.html] - [e.style['align-tracks'\] = "normal" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "baseline" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "first baseline" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "last baseline" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "space-between" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "space-around" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "space-evenly" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "stretch" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "center" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "start" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "end" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "flex-start" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "flex-end" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "unsafe end" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "safe flex-start" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "flex-start, last baseline" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "normal, normal" should set the property value] - expected: FAIL - - [e.style['align-tracks'\] = "start, flex-end, flex-end, flex-end, flex-end" should set the property value] - expected: FAIL diff --git a/tests/wpt/meta/css/css-align/parsing/justify-tracks-computed.html.ini b/tests/wpt/meta/css/css-align/parsing/justify-tracks-computed.html.ini deleted file mode 100644 index c5b835863d7..00000000000 --- a/tests/wpt/meta/css/css-align/parsing/justify-tracks-computed.html.ini +++ /dev/null @@ -1,45 +0,0 @@ -[justify-tracks-computed.html] - [Property justify-tracks value 'normal'] - expected: FAIL - - [Property justify-tracks value 'space-between'] - expected: FAIL - - [Property justify-tracks value 'space-around'] - expected: FAIL - - [Property justify-tracks value 'space-evenly'] - expected: FAIL - - [Property justify-tracks value 'stretch'] - expected: FAIL - - [Property justify-tracks value 'center'] - expected: FAIL - - [Property justify-tracks value 'start'] - expected: FAIL - - [Property justify-tracks value 'end'] - expected: FAIL - - [Property justify-tracks value 'flex-start'] - expected: FAIL - - [Property justify-tracks value 'flex-end'] - expected: FAIL - - [Property justify-tracks value 'unsafe end'] - expected: FAIL - - [Property justify-tracks value 'safe flex-start'] - expected: FAIL - - [Property justify-tracks value 'left'] - expected: FAIL - - [Property justify-tracks value 'unsafe right'] - expected: FAIL - - [Property justify-tracks value 'normal, normal'] - expected: FAIL diff --git a/tests/wpt/meta/css/css-align/parsing/justify-tracks-valid.html.ini b/tests/wpt/meta/css/css-align/parsing/justify-tracks-valid.html.ini deleted file mode 100644 index 641b10fa7bd..00000000000 --- a/tests/wpt/meta/css/css-align/parsing/justify-tracks-valid.html.ini +++ /dev/null @@ -1,51 +0,0 @@ -[justify-tracks-valid.html] - [e.style['justify-tracks'\] = "normal" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "space-between" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "space-around" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "space-evenly" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "stretch" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "center" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "start" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "end" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "flex-start" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "flex-end" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "unsafe end" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "safe flex-start" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "left" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "unsafe right" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "flex-start, last baseline" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "normal, normal" should set the property value] - expected: FAIL - - [e.style['justify-tracks'\] = "start, flex-end, flex-end, flex-end, flex-end" should set the property value] - expected: FAIL diff --git a/tests/wpt/meta/css/css-backgrounds/border-image-repeat-002.htm.ini b/tests/wpt/meta/css/css-backgrounds/border-image-repeat-002.htm.ini new file mode 100644 index 00000000000..fb4031b3d52 --- /dev/null +++ b/tests/wpt/meta/css/css-backgrounds/border-image-repeat-002.htm.ini @@ -0,0 +1,2 @@ +[border-image-repeat-002.htm] + expected: FAIL diff --git a/tests/wpt/meta/css/css-backgrounds/border-image-repeat-004.htm.ini b/tests/wpt/meta/css/css-backgrounds/border-image-repeat-004.htm.ini new file mode 100644 index 00000000000..7ae2c899b70 --- /dev/null +++ b/tests/wpt/meta/css/css-backgrounds/border-image-repeat-004.htm.ini @@ -0,0 +1,2 @@ +[border-image-repeat-004.htm] + expected: FAIL diff --git a/tests/wpt/meta/css/css-backgrounds/border-image-slice-004.htm.ini b/tests/wpt/meta/css/css-backgrounds/border-image-slice-004.htm.ini new file mode 100644 index 00000000000..33ecfc8ebc7 --- /dev/null +++ b/tests/wpt/meta/css/css-backgrounds/border-image-slice-004.htm.ini @@ -0,0 +1,2 @@ +[border-image-slice-004.htm] + expected: FAIL diff --git a/tests/wpt/meta/css/css-color/light-dark-basic.html.ini b/tests/wpt/meta/css/css-color/light-dark-basic.html.ini new file mode 100644 index 00000000000..e04d692f0eb --- /dev/null +++ b/tests/wpt/meta/css/css-color/light-dark-basic.html.ini @@ -0,0 +1,6 @@ +[light-dark-basic.html] + [light-dark(white, black)] + expected: FAIL + + [light-dark(light-dark(white, red), red)] + expected: FAIL diff --git a/tests/wpt/meta/css/css-color/light-dark-currentcolor.html.ini b/tests/wpt/meta/css/css-color/light-dark-currentcolor.html.ini new file mode 100644 index 00000000000..669af6d8ea5 --- /dev/null +++ b/tests/wpt/meta/css/css-color/light-dark-currentcolor.html.ini @@ -0,0 +1,2 @@ +[light-dark-currentcolor.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-color/light-dark-inheritance.html.ini b/tests/wpt/meta/css/css-color/light-dark-inheritance.html.ini new file mode 100644 index 00000000000..bf8493daf3a --- /dev/null +++ b/tests/wpt/meta/css/css-color/light-dark-inheritance.html.ini @@ -0,0 +1,2 @@ +[light-dark-inheritance.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/meta/css/css-fonts/variations/at-font-face-font-matching.html.ini index d12a4482f02..ca491f611bd 100644 --- a/tests/wpt/meta/css/css-fonts/variations/at-font-face-font-matching.html.ini +++ b/tests/wpt/meta/css/css-fonts/variations/at-font-face-font-matching.html.ini @@ -50,9 +50,6 @@ [Matching font-stretch: '110%' should prefer '115% 116%' over '105%'] expected: FAIL - [Matching font-stretch: '90%' should prefer '90% 100%' over '50% 80%'] - expected: FAIL - [Matching font-style: 'normal' should prefer 'oblique 0deg' over 'oblique 10deg 40deg'] expected: FAIL @@ -71,9 +68,6 @@ [Matching font-style: 'oblique 10deg' should prefer 'oblique -50deg -20deg' over 'oblique -40deg -30deg'] expected: FAIL - [Matching font-style: 'oblique 0deg' should prefer 'oblique 5deg' over 'oblique 15deg 20deg'] - expected: FAIL - [Matching font-style: 'oblique 0deg' should prefer 'oblique 15deg 20deg' over 'oblique 30deg 60deg'] expected: FAIL @@ -107,9 +101,6 @@ [Matching font-weight: '430' should prefer '340 398' over '501 550'] expected: FAIL - [Matching font-style: 'oblique 10deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg'] - expected: FAIL - [Matching font-style: 'oblique -20deg' should prefer 'oblique -10deg' over 'italic'] expected: FAIL @@ -146,9 +137,6 @@ [Matching font-weight: '400' should prefer '400' over '450 460'] expected: FAIL - [Matching font-style: 'italic' should prefer 'normal' over 'oblique 0deg'] - expected: FAIL - [Matching font-style: 'oblique 20deg' should prefer 'oblique 40deg 50deg' over 'oblique 10deg'] expected: FAIL @@ -164,12 +152,6 @@ [Matching font-style: 'oblique 20deg' should prefer 'oblique 20deg' over 'oblique 30deg 60deg'] expected: FAIL - [Matching font-style: 'oblique 21deg' should prefer 'oblique 10deg' over 'italic'] - expected: FAIL - - [Matching font-style: 'oblique 10deg' should prefer 'oblique 5deg' over 'oblique 15deg 20deg'] - expected: FAIL - [Matching font-weight: '399' should prefer '400' over '450 460'] expected: FAIL @@ -191,9 +173,6 @@ [Matching font-style: 'oblique 10deg' should prefer 'oblique 10deg' over 'oblique 5deg'] expected: FAIL - [Matching font-style: 'oblique 10deg' should prefer 'oblique 40deg 50deg' over 'italic'] - expected: FAIL - [Matching font-style: 'oblique -20deg' should prefer 'italic' over 'oblique 0deg'] expected: FAIL @@ -206,9 +185,6 @@ [Matching font-weight: '430' should prefer '500' over '400 425'] expected: FAIL - [Matching font-weight: '500' should prefer '350 399' over '351 398'] - expected: FAIL - [Matching font-weight: '501' should prefer '500' over '450 460'] expected: FAIL @@ -224,9 +200,6 @@ [Matching font-style: 'oblique -10deg' should prefer 'oblique -50deg -40deg' over 'italic'] expected: FAIL - [Matching font-style: 'normal' should prefer 'normal' over 'oblique 0deg'] - expected: FAIL - [Matching font-style: 'normal' should prefer 'oblique 10deg 40deg' over 'oblique 20deg 30deg'] expected: FAIL @@ -248,9 +221,6 @@ [Matching font-style: 'italic' should prefer 'oblique 0deg' over 'oblique -60deg -30deg'] expected: FAIL - [Matching font-style: 'oblique -10deg' should prefer 'italic' over 'oblique 0deg 10deg'] - expected: FAIL - [Matching font-style: 'oblique 20deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg'] expected: FAIL @@ -260,9 +230,6 @@ [Matching font-weight: '500' should prefer '500' over '450 460'] expected: FAIL - [Matching font-weight: '501' should prefer '501' over '502 510'] - expected: FAIL - [Matching font-style: 'normal' should prefer 'oblique -50deg -20deg' over 'oblique -40deg -30deg'] expected: FAIL @@ -277,3 +244,45 @@ [Matching font-style: 'oblique -21deg' should prefer 'italic' over 'oblique 0deg'] expected: FAIL + + [Matching font-weight: '500' should prefer '450 460' over '400'] + expected: FAIL + + [Matching font-weight: '399' should prefer '350 399' over '340 360'] + expected: FAIL + + [Matching font-stretch: '110%' should prefer '100%' over '50% 80%'] + expected: FAIL + + [Matching font-stretch: '90%' should prefer '50% 80%' over '60% 70%'] + expected: FAIL + + [Matching font-stretch: '90%' should prefer '110% 140%' over '120% 130%'] + expected: FAIL + + [Matching font-style: 'italic' should prefer 'oblique 20deg' over 'oblique 30deg 60deg'] + expected: FAIL + + [Matching font-style: 'italic' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg'] + expected: FAIL + + [Matching font-style: 'italic' should prefer 'oblique 5deg' over 'normal'] + expected: FAIL + + [Matching font-style: 'oblique 20deg' should prefer 'oblique 10deg' over 'italic'] + expected: FAIL + + [Matching font-style: 'oblique 10deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg'] + expected: FAIL + + [Matching font-style: 'oblique 0deg' should prefer 'italic' over 'oblique -50deg -20deg'] + expected: FAIL + + [Matching font-style: 'oblique -20deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg'] + expected: FAIL + + [Matching font-style: 'oblique -21deg' should prefer 'oblique -21deg' over 'oblique -60deg -40deg'] + expected: FAIL + + [Matching font-style: 'oblique -21deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg'] + expected: FAIL diff --git a/tests/wpt/meta/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html.ini b/tests/wpt/meta/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html.ini deleted file mode 100644 index 52b0d0166bc..00000000000 --- a/tests/wpt/meta/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html.ini +++ /dev/null @@ -1,27 +0,0 @@ -[text-spacing-trim-combinations-001.html] - ["国((国"] - expected: FAIL - - ["国・(国"] - expected: FAIL - - ["国)(国"] - expected: FAIL - - ["国 (国"] - expected: FAIL - - ["国))国"] - expected: FAIL - - ["国)・国"] - expected: FAIL - - ["国) 国"] - expected: FAIL - - ["国(((国"] - expected: FAIL - - ["国)))国"] - expected: FAIL diff --git a/tests/wpt/meta/css/css-ui/parsing/form-sizing-computed.html.ini b/tests/wpt/meta/css/css-ui/parsing/form-sizing-computed.html.ini index 39141cebc56..25c7ccdbe18 100644 --- a/tests/wpt/meta/css/css-ui/parsing/form-sizing-computed.html.ini +++ b/tests/wpt/meta/css/css-ui/parsing/form-sizing-computed.html.ini @@ -4,3 +4,9 @@ [Property form-sizing value 'normal'] expected: FAIL + + [Property form-sizing value 'fixed'] + expected: FAIL + + [Property form-sizing value 'content'] + expected: FAIL diff --git a/tests/wpt/meta/css/css-ui/parsing/form-sizing-valid.html.ini b/tests/wpt/meta/css/css-ui/parsing/form-sizing-valid.html.ini index cda7dbed687..a31eb2c5cb0 100644 --- a/tests/wpt/meta/css/css-ui/parsing/form-sizing-valid.html.ini +++ b/tests/wpt/meta/css/css-ui/parsing/form-sizing-valid.html.ini @@ -4,3 +4,9 @@ [e.style['form-sizing'\] = "normal" should set the property value] expected: FAIL + + [e.style['form-sizing'\] = "fixed" should set the property value] + expected: FAIL + + [e.style['form-sizing'\] = "content" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/selectors/is-where-parsing.html.ini b/tests/wpt/meta/css/selectors/is-where-parsing.html.ini index dae62bf6253..83f85b33d30 100644 --- a/tests/wpt/meta/css/selectors/is-where-parsing.html.ini +++ b/tests/wpt/meta/css/selectors/is-where-parsing.html.ini @@ -40,3 +40,99 @@ [Pseudo-elements inside] expected: FAIL + + [":is(div )" should be a valid selector] + expected: FAIL + + [":where(div )" should be a valid selector] + expected: FAIL + + [":is(div + bar, div ~ .baz)" should be a valid selector] + expected: FAIL + + [":where(div + bar, div ~ .baz)" should be a valid selector] + expected: FAIL + + [":is(:is(div))" should be a valid selector] + expected: FAIL + + [":where(:is(div))" should be a valid selector] + expected: FAIL + + [":is(:where(div))" should be a valid selector] + expected: FAIL + + [":where(:where(div))" should be a valid selector] + expected: FAIL + + [":host(:is(div))" should be a valid selector] + expected: FAIL + + [":host(:where(div))" should be a valid selector] + expected: FAIL + + [":host(:is(div ))" should be a valid selector] + expected: FAIL + + [":host(:where(div ))" should be a valid selector] + expected: FAIL + + [":host(:is(div .foo))" should be a valid selector] + expected: FAIL + + [":host(:where(div .foo))" should be a valid selector] + expected: FAIL + + [":is(:hover, :active)" should be a valid selector] + expected: FAIL + + [":where(:hover, :active)" should be a valid selector] + expected: FAIL + + [":is(div):hover" should be a valid selector] + expected: FAIL + + [":where(div):hover" should be a valid selector] + expected: FAIL + + [":is(div)::before" should be a valid selector] + expected: FAIL + + [":where(div)::before" should be a valid selector] + expected: FAIL + + [":is(::before)" should be a valid selector] + expected: FAIL + + [":where(::before)" should be a valid selector] + expected: FAIL + + [":is(div) + bar" should be a valid selector] + expected: FAIL + + [":where(div) + bar" should be a valid selector] + expected: FAIL + + ["::part(foo):is(:hover)" should be a valid selector] + expected: FAIL + + ["::part(foo):where(:hover)" should be a valid selector] + expected: FAIL + + ["::part(foo):is([attr='value'\])" should be a valid selector] + expected: FAIL + + ["::part(foo):where([attr='value'\])" should be a valid selector] + expected: FAIL + + [":not(:is(div))" should be a valid selector] + expected: FAIL + + [":not(:where(div))" should be a valid selector] + expected: FAIL + + [":not(:is(div .foo))" should be a valid selector] + expected: FAIL + + [":not(:where(div .foo))" should be a valid selector] + expected: FAIL diff --git a/tests/wpt/meta/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html.ini b/tests/wpt/meta/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html.ini index 7b4af3d0cd3..6d4e77b234b 100644 --- a/tests/wpt/meta/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html.ini +++ b/tests/wpt/meta/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html.ini @@ -16,3 +16,9 @@ [CSS Selectors: The relational pseudo-class (disallow nesting :has() inside :has())] expected: FAIL + + [":has(:is(:has(*)))" should be a valid selector] + expected: FAIL + + [":has(:where(:has(*)))" should be a valid selector] + expected: FAIL diff --git a/tests/wpt/meta/dom/observable/tentative/observable-constructor.any.js.ini b/tests/wpt/meta/dom/observable/tentative/observable-constructor.any.js.ini new file mode 100644 index 00000000000..5eb54f20977 --- /dev/null +++ b/tests/wpt/meta/dom/observable/tentative/observable-constructor.any.js.ini @@ -0,0 +1,80 @@ +[observable-constructor.any.worker.html] + [Observable constructor] + expected: FAIL + + [Subscriber interface is not constructible] + expected: FAIL + + [subscribe() can be called with no arguments] + expected: FAIL + + [Observable constructor calls initializer on subscribe] + expected: FAIL + + [Observable error path called synchronously] + expected: FAIL + + [Observable should error if initializer throws] + expected: FAIL + + [Subscription does not emit values after completion] + expected: FAIL + + [Subscription does not emit values after error] + expected: FAIL + + [Completing or nexting a subscriber after an error does nothing] + expected: FAIL + + [Errors pushed to the subscriber that are not handled by the subscription are reported to the global] + expected: FAIL + + [Errors thrown in the initializer that are not handled by the subscription are reported to the global] + expected: FAIL + + [Subscription reports errors that are pushed after subscriber is closed by completion] + expected: FAIL + + [Errors thrown by initializer function after subscriber is closed by completion are reported] + expected: FAIL + + +[observable-constructor.any.html] + [Observable constructor] + expected: FAIL + + [Subscriber interface is not constructible] + expected: FAIL + + [subscribe() can be called with no arguments] + expected: FAIL + + [Observable constructor calls initializer on subscribe] + expected: FAIL + + [Observable error path called synchronously] + expected: FAIL + + [Observable should error if initializer throws] + expected: FAIL + + [Subscription does not emit values after completion] + expected: FAIL + + [Subscription does not emit values after error] + expected: FAIL + + [Completing or nexting a subscriber after an error does nothing] + expected: FAIL + + [Errors pushed to the subscriber that are not handled by the subscription are reported to the global] + expected: FAIL + + [Errors thrown in the initializer that are not handled by the subscription are reported to the global] + expected: FAIL + + [Subscription reports errors that are pushed after subscriber is closed by completion] + expected: FAIL + + [Errors thrown by initializer function after subscriber is closed by completion are reported] + expected: FAIL diff --git a/tests/wpt/meta/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html.ini b/tests/wpt/meta/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html.ini new file mode 100644 index 00000000000..c68ae3e8990 --- /dev/null +++ b/tests/wpt/meta/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html.ini @@ -0,0 +1,27 @@ +[basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html] + [Declarative DOM Parts innerHTML <div><h1>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <div><h1 parseparts>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <div parseparts=""><h1>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <div parseparts=""><h1 parseparts>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <template><h1>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <template><h1 parseparts>content... (expect no parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <template parseparts="" class="expect_success"><h1>content... (expect parts)] + expected: FAIL + + [Declarative DOM Parts innerHTML <template parseparts="" class="expect_success"><h1 parseparts>content... (expect parts)] + expected: FAIL + + [Basic NodePart parsing] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index 530635e744f..1bca09f21d6 100644 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -4,3 +4,6 @@ [Navigating to a different document with link click] expected: FAIL + + [Navigating to a different document with form submission] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini index 51fd557bd7f..574b2fd8927 100644 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini +++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-iframe-contentWindow.html.ini @@ -5,5 +5,5 @@ [load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank?foo'] expected: FAIL - [load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank#foo'] + [load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank'] expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini index f27acdd3b9d..78240a2f463 100644 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini +++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini @@ -4,3 +4,15 @@ [Test javascript URL string return values in direct and indirect (target) frame contexts. 9] expected: FAIL + + [0041 set in href="" targeting a frame and clicked] + expected: FAIL + + [0080 00FF set in href="" targeting a frame and clicked] + expected: FAIL + + [0080 00FF 0100 set in href="" targeting a frame and clicked] + expected: FAIL + + [D83D DE0D set in href="" targeting a frame and clicked] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini index 27889a98fb5..24d2f8ac554 100644 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini +++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini @@ -1,6 +1,3 @@ [navigate-to-unparseable-url.html] [location.href setter throws a SyntaxError DOMException for unparseable URLs] expected: FAIL - - [<a> tag navigate fails for unparseable URLs] - expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini index 0e40ffc0656..9f7f24f662e 100644 --- a/tests/wpt/meta/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini +++ b/tests/wpt/meta/html/browsers/browsing-the-web/overlapping-navigations-and-traversals/nav-cancelation-2.sub.html.ini @@ -1,4 +1,3 @@ [nav-cancelation-2.sub.html] - expected: TIMEOUT [grandparent cancels a pending navigation in a cross-origin grandchild] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini deleted file mode 100644 index 7a5fcb79165..00000000000 --- a/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[traverse_the_history_5.html] - [Multiple history traversals, last would be aborted] - expected: FAIL diff --git a/tests/wpt/meta/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini b/tests/wpt/meta/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini deleted file mode 100644 index 4b4820d1729..00000000000 --- a/tests/wpt/meta/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[creating_browsing_context_test_01.html] - [first argument: absolute url] - expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-01.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-01.html.ini new file mode 100644 index 00000000000..cc76a05c1d8 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-01.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-01.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-02.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-02.html.ini new file mode 100644 index 00000000000..d83ab8db3b9 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-02.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-02.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-03.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-03.html.ini new file mode 100644 index 00000000000..341d054ebbc --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-03.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-03.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-04.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-04.html.ini new file mode 100644 index 00000000000..d34ae8710b2 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-04.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-04.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-05.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-05.html.ini new file mode 100644 index 00000000000..c80d7307d57 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-05.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-05.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-06.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-06.html.ini new file mode 100644 index 00000000000..40d08e09e38 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-06.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-06.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-07.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-07.html.ini new file mode 100644 index 00000000000..8b118b20ad7 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-07.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-07.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-08.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-08.html.ini new file mode 100644 index 00000000000..927891eb7e0 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-08.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-08.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-09.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-09.html.ini new file mode 100644 index 00000000000..53ac23518f6 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-09.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-09.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-10.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-10.html.ini new file mode 100644 index 00000000000..9e6f6f536c0 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-10.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-10.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-11.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-11.html.ini new file mode 100644 index 00000000000..69ea943cfa8 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-11.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-11.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-12.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-12.html.ini new file mode 100644 index 00000000000..cb9af7df593 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-12.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-12.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-13.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-13.html.ini new file mode 100644 index 00000000000..43a10154051 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-13.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-13.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-14.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-14.html.ini new file mode 100644 index 00000000000..5b3c17a3035 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-14.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-14.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-15.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-15.html.ini new file mode 100644 index 00000000000..9b7646bf688 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-15.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-15.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-16.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-16.html.ini new file mode 100644 index 00000000000..57a8aa33c82 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-16.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-16.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-17.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-17.html.ini new file mode 100644 index 00000000000..8436d0266fe --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-17.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-17.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-18.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-18.html.ini new file mode 100644 index 00000000000..1a75c98888d --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-18.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-18.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-19.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-19.html.ini new file mode 100644 index 00000000000..882a73cedc1 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-19.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-19.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-20.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-20.html.ini new file mode 100644 index 00000000000..e2ac54e85b6 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-20.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-20.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-21.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-21.html.ini new file mode 100644 index 00000000000..1fe6eed4d86 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-21.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-21.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-22.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-22.html.ini new file mode 100644 index 00000000000..2bbb71f26cf --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-22.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-22.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-23.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-23.html.ini new file mode 100644 index 00000000000..340f5057d5c --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-23.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-23.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-24.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-24.html.ini new file mode 100644 index 00000000000..d4a3db2a878 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-24.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-24.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-25.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-25.html.ini new file mode 100644 index 00000000000..2ef28e7d55d --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-25.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-25.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-26.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-26.html.ini new file mode 100644 index 00000000000..eae14c85b6d --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-26.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-26.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-27.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-27.html.ini new file mode 100644 index 00000000000..49b7b6b841b --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-27.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-27.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-28.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-28.html.ini new file mode 100644 index 00000000000..c168cc1a8b6 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-28.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-28.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-29.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-29.html.ini new file mode 100644 index 00000000000..d03ea918944 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-29.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-29.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-30.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-30.html.ini new file mode 100644 index 00000000000..bbb82b3cd63 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-30.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-30.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-31.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-31.html.ini new file mode 100644 index 00000000000..052af599162 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-31.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-31.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-32.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-32.html.ini new file mode 100644 index 00000000000..d6240b000ed --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-32.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-32.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-33.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-33.html.ini new file mode 100644 index 00000000000..993ccadc8f3 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-33.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-33.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-34.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-34.html.ini new file mode 100644 index 00000000000..9a036bcae5c --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-34.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-34.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-35.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-35.html.ini new file mode 100644 index 00000000000..4b931e6b885 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-35.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-35.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-36.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-36.html.ini new file mode 100644 index 00000000000..5c6d67ba0d4 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-36.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-36.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-37.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-37.html.ini new file mode 100644 index 00000000000..fbada3e32c8 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-37.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-37.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-38.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-38.html.ini new file mode 100644 index 00000000000..09b03873496 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-38.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-38.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-39.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-39.html.ini new file mode 100644 index 00000000000..8d63022c0f9 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-39.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-39.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-40.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-40.html.ini new file mode 100644 index 00000000000..026d2a27546 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-40.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-40.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-41.html.ini b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-41.html.ini new file mode 100644 index 00000000000..75cf38f059b --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/dir-shadow-41.html.ini @@ -0,0 +1,2 @@ +[dir-shadow-41.html] + expected: FAIL diff --git a/tests/wpt/meta/html/dom/elements/global-attributes/lang-attribute-shadow.window.js.ini b/tests/wpt/meta/html/dom/elements/global-attributes/lang-attribute-shadow.window.js.ini new file mode 100644 index 00000000000..ec7919c1c68 --- /dev/null +++ b/tests/wpt/meta/html/dom/elements/global-attributes/lang-attribute-shadow.window.js.ini @@ -0,0 +1,18 @@ +[lang-attribute-shadow.window.html] + [lang only on slot] + expected: FAIL + + [lang only on host] + expected: FAIL + + [lang on host and slot] + expected: FAIL + + [lang on host and slotted element] + expected: FAIL + + [lang on host and slot and slotted element] + expected: FAIL + + [lang on slot inherits from shadow host] + expected: FAIL diff --git a/tests/wpt/meta/html/editing/dnd/the-draggable-attribute/draggable_attribute.html.ini b/tests/wpt/meta/html/editing/dnd/the-draggable-attribute/draggable_attribute.html.ini index 3aefca6fde9..91cac15f60d 100644 --- a/tests/wpt/meta/html/editing/dnd/the-draggable-attribute/draggable_attribute.html.ini +++ b/tests/wpt/meta/html/editing/dnd/the-draggable-attribute/draggable_attribute.html.ini @@ -880,3 +880,9 @@ [Element å-bar draggable attribute test] expected: FAIL + + [Element permission should have draggable property] + expected: FAIL + + [Element permission draggable attribute test] + expected: FAIL diff --git a/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html.ini b/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html.ini deleted file mode 100644 index b21e45dd17f..00000000000 --- a/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[document-base-url-changes-about-srcdoc-2.https.html] - [document-base-url-changes-about-srcdoc-2] - expected: FAIL diff --git a/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/document-with-fragment-nonexistent.html.ini b/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/document-with-fragment-nonexistent.html.ini index 114d6424efc..a10be12e8cc 100644 --- a/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/document-with-fragment-nonexistent.html.ini +++ b/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/document-with-fragment-nonexistent.html.ini @@ -1,6 +1,7 @@ [document-with-fragment-nonexistent.html] + expected: TIMEOUT [Autofocus elements in iframed documents with non-existent fragments should work.] expected: FAIL [Autofocus elements in top-level browsing context's documents with non-existent fragments should work.] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini index ddd65fdcec8..16db1ea9c58 100644 --- a/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini +++ b/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini @@ -1,15 +1,16 @@ [supported-elements.html] + expected: TIMEOUT [Contenteditable element should support autofocus] expected: FAIL [Host element with delegatesFocus including no focusable descendants should be skipped] - expected: FAIL + expected: TIMEOUT [Element with tabindex should support autofocus] expected: FAIL [Area element should support autofocus] - expected: FAIL + expected: NOTRUN [Host element with delegatesFocus should support autofocus] expected: FAIL diff --git a/tests/wpt/meta/html/rendering/the-details-element/details-display-type-002.tentative.html.ini b/tests/wpt/meta/html/rendering/the-details-element/details-display-type-002.tentative.html.ini new file mode 100644 index 00000000000..4e5a3ff1e5b --- /dev/null +++ b/tests/wpt/meta/html/rendering/the-details-element/details-display-type-002.tentative.html.ini @@ -0,0 +1,2 @@ +[details-display-type-002.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini b/tests/wpt/meta/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini index a7b23688dad..516e1fa0442 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html.ini @@ -1,3 +1,4 @@ [resource-selection-source-media-env-change.html] + expected: TIMEOUT [the <source> media attribute: no reaction to environment change] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini index 841bafc6eca..26704422bbe 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_escaping-2.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini index 4034793cc72..c6f1e5d7d84 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_nonescaping-2.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini deleted file mode 100644 index 30b696b181c..00000000000 --- a/tests/wpt/meta/html/semantics/embedded-content/the-img-element/image-compositing-change.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[image-compositing-change.html] - expected: FAIL diff --git a/tests/wpt/meta/html/semantics/forms/historical.html.ini b/tests/wpt/meta/html/semantics/forms/historical.html.ini deleted file mode 100644 index 5d8289307cc..00000000000 --- a/tests/wpt/meta/html/semantics/forms/historical.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[historical.html] - [<input name=isindex> should not be supported] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini b/tests/wpt/meta/html/semantics/interactive-elements/the-details-element/name-attribute.html.ini index 1b9c7154376..d569dd37abc 100644 --- a/tests/wpt/meta-legacy-layout/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html.ini +++ b/tests/wpt/meta/html/semantics/interactive-elements/the-details-element/name-attribute.html.ini @@ -1,4 +1,4 @@ -[name-attribute.tentative.html] +[name-attribute.html] [basic handling of mutually exclusive details] expected: FAIL @@ -8,10 +8,7 @@ [mutually exclusive details across multiple names and multiple tree scopes] expected: FAIL - [mutation event and toggle event order matches order of insertion in set of named elements] - expected: FAIL - - [mutation event and toggle event order matches tree order] + [mutation event and toggle event order] expected: FAIL [exclusivity enforcement with attachment scenario connected] @@ -38,9 +35,6 @@ [exclusivity enforcement with attachment scenario connected-in-template] expected: FAIL - [mutation event and toggle event order] - expected: FAIL - [handling of name attribute changes] expected: FAIL diff --git a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html.ini b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html.ini deleted file mode 100644 index 267c09e0562..00000000000 --- a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[fixed-position-child-with-transformed-ancestor.html] - expected: FAIL diff --git a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.tentative.html.ini b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.tentative.html.ini new file mode 100644 index 00000000000..5def8ec35f5 --- /dev/null +++ b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.tentative.html.ini @@ -0,0 +1,2 @@ +[fixed-position-child-with-transformed-ancestor.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html.ini b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html.ini deleted file mode 100644 index 32f315368ab..00000000000 --- a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[fixed-position-child-with-will-change-ancestor.html] - expected: FAIL diff --git a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.tentative.html.ini b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.tentative.html.ini new file mode 100644 index 00000000000..cddca13cbcc --- /dev/null +++ b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.tentative.html.ini @@ -0,0 +1,2 @@ +[fixed-position-child-with-will-change-ancestor.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html.ini b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html.ini deleted file mode 100644 index d85ee8e016a..00000000000 --- a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[top-layer-stacking.html] - expected: FAIL diff --git a/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.tentative.html.ini b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.tentative.html.ini new file mode 100644 index 00000000000..3f6ad25adbf --- /dev/null +++ b/tests/wpt/meta/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.tentative.html.ini @@ -0,0 +1,2 @@ +[top-layer-stacking.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/interfaces.html.ini b/tests/wpt/meta/html/semantics/interfaces.html.ini index 1eb16ea6005..bc426a7a6f2 100644 --- a/tests/wpt/meta/html/semantics/interfaces.html.ini +++ b/tests/wpt/meta/html/semantics/interfaces.html.ini @@ -61,3 +61,12 @@ [Interfaces for SLOT: createElement] expected: FAIL + + [Interfaces for permission: useNS] + expected: FAIL + + [Interfaces for permission: useParser] + expected: FAIL + + [Interfaces for PERMISSION: createElement] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini b/tests/wpt/meta/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini index dcd52d2fee8..e0d30013daf 100644 --- a/tests/wpt/meta/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini +++ b/tests/wpt/meta/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini @@ -1,4 +1,5 @@ [htmlanchorelement_noopener.html] + expected: TIMEOUT [Check that targeting of rel=noopener with a given name reuses an existing window with that name] expected: FAIL @@ -9,4 +10,4 @@ expected: FAIL [Check that rel=noopener with target=_self does a normal load] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/meta/html/semantics/permission-element/no-end-tag-no-contents.html.ini b/tests/wpt/meta/html/semantics/permission-element/no-end-tag-no-contents.html.ini new file mode 100644 index 00000000000..9a7c183ef37 --- /dev/null +++ b/tests/wpt/meta/html/semantics/permission-element/no-end-tag-no-contents.html.ini @@ -0,0 +1,3 @@ +[no-end-tag-no-contents.html] + [The permission element should have no end tag or contents] + expected: FAIL diff --git a/tests/wpt/meta/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini b/tests/wpt/meta/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini deleted file mode 100644 index fc0233f5241..00000000000 --- a/tests/wpt/meta/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[module-delayed.html] - [async document.write in a module] - expected: FAIL diff --git a/tests/wpt/meta/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/meta/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini index 1053fb90051..6206f8c0210 100644 --- a/tests/wpt/meta/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini +++ b/tests/wpt/meta/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini @@ -2,6 +2,3 @@ expected: TIMEOUT [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] expected: TIMEOUT - - [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] - expected: FAIL diff --git a/tests/wpt/meta/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini b/tests/wpt/meta/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini index 8bcf3a07de4..6ab46a7862c 100644 --- a/tests/wpt/meta/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini +++ b/tests/wpt/meta/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini @@ -4,10 +4,10 @@ expected: FAIL [Rejection handler on pending-then-rejected promise] - expected: TIMEOUT + expected: FAIL [Sanity check: this all works as expected with no promises involved] - expected: FAIL + expected: TIMEOUT [Thenable resolution] expected: FAIL @@ -16,4 +16,4 @@ expected: FAIL [Fulfillment handler on pending-then-fulfilled promise] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/meta/uievents/idlharness.window.js.ini b/tests/wpt/meta/uievents/idlharness.window.js.ini index 6df68cc5a33..22e2d482930 100644 --- a/tests/wpt/meta/uievents/idlharness.window.js.ini +++ b/tests/wpt/meta/uievents/idlharness.window.js.ini @@ -154,3 +154,21 @@ [MutationEvent interface: operation initMutationEvent(DOMString, optional boolean, optional boolean, optional Node?, optional DOMString, optional DOMString, optional DOMString, optional unsigned short)] expected: FAIL + + [MouseEvent interface: attribute layerX] + expected: FAIL + + [MouseEvent interface: attribute layerY] + expected: FAIL + + [MouseEvent interface: new MouseEvent("event") must inherit property "layerX" with the proper type] + expected: FAIL + + [MouseEvent interface: new MouseEvent("event") must inherit property "layerY" with the proper type] + expected: FAIL + + [MouseEvent interface: new WheelEvent("event") must inherit property "layerX" with the proper type] + expected: FAIL + + [MouseEvent interface: new WheelEvent("event") must inherit property "layerY" with the proper type] + expected: FAIL diff --git a/tests/wpt/meta/webaudio/idlharness.https.window.js.ini b/tests/wpt/meta/webaudio/idlharness.https.window.js.ini index b5e9c75e20a..63969725792 100644 --- a/tests/wpt/meta/webaudio/idlharness.https.window.js.ini +++ b/tests/wpt/meta/webaudio/idlharness.https.window.js.ini @@ -1303,3 +1303,12 @@ [AudioParamMap interface: maplike<DOMString, AudioParam>] expected: FAIL + + [BaseAudioContext interface: attribute renderQuantumSize] + expected: FAIL + + [BaseAudioContext interface: context must inherit property "renderQuantumSize" with the proper type] + expected: FAIL + + [BaseAudioContext interface: new OfflineAudioContext(1, 1, sample_rate) must inherit property "renderQuantumSize" with the proper type] + expected: FAIL diff --git a/tests/wpt/meta/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html.ini b/tests/wpt/meta/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html.ini new file mode 100644 index 00000000000..4880a89bc1a --- /dev/null +++ b/tests/wpt/meta/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html.ini @@ -0,0 +1,3 @@ +[moderate-exponentialRamp.html] + [Test exponentialRampToValueAtTime() with a moderate ratio of change] + expected: FAIL diff --git a/tests/wpt/meta/webgl/idlharness.any.js.ini b/tests/wpt/meta/webgl/idlharness.any.js.ini index 6447307c2e8..51c3f3177a7 100644 --- a/tests/wpt/meta/webgl/idlharness.any.js.ini +++ b/tests/wpt/meta/webgl/idlharness.any.js.ini @@ -3884,6 +3884,9 @@ [WebGL2RenderingContext interface: attribute unpackColorSpace] expected: FAIL + [WebGL2RenderingContext interface: operation getBufferSubData(GLenum, GLintptr, ArrayBufferView, optional unsigned long long, optional GLuint)] + expected: FAIL + [idlharness.any.worker.html] [WebGLRenderingContext includes WebGLRenderingContextOverloads: member names are unique] @@ -10149,3 +10152,6 @@ [WebGL2RenderingContext interface: attribute unpackColorSpace] expected: FAIL + + [WebGL2RenderingContext interface: operation getBufferSubData(GLenum, GLintptr, ArrayBufferView, optional unsigned long long, optional GLuint)] + expected: FAIL diff --git a/tests/wpt/meta/webmessaging/without-ports/018.html.ini b/tests/wpt/meta/webmessaging/without-ports/018.html.ini deleted file mode 100644 index b7b36c1d3a4..00000000000 --- a/tests/wpt/meta/webmessaging/without-ports/018.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[018.html] - expected: TIMEOUT - [origin of the script that invoked the method, javascript:] - expected: TIMEOUT diff --git a/tests/wpt/meta/workers/shared-worker-partitioned-cookies.tentative.https.html.ini b/tests/wpt/meta/workers/shared-worker-partitioned-cookies.tentative.https.html.ini new file mode 100644 index 00000000000..0f221c965c3 --- /dev/null +++ b/tests/wpt/meta/workers/shared-worker-partitioned-cookies.tentative.https.html.ini @@ -0,0 +1,3 @@ +[shared-worker-partitioned-cookies.tentative.https.html] + [SharedWorker: Partitioned Cookies] + expected: FAIL diff --git a/tests/wpt/tests/WebCryptoAPI/import_export/okp_importKey.https.any.js b/tests/wpt/tests/WebCryptoAPI/import_export/okp_importKey.https.any.js index a0ec3e81c87..a56bd31cbe1 100644 --- a/tests/wpt/tests/WebCryptoAPI/import_export/okp_importKey.https.any.js +++ b/tests/wpt/tests/WebCryptoAPI/import_export/okp_importKey.https.any.js @@ -81,6 +81,11 @@ } testFormat(format, algorithm, data, vector.name, usages, extractable); + + // Test for https://github.com/WICG/webcrypto-secure-curves/pull/24 + if (format === "jwk" && extractable) { + testJwkAlgBehaviours(algorithm, data.jwk, vector.name, usages); + } }); }); @@ -92,6 +97,11 @@ var data = keyData[vector.name]; testFormat(format, algorithm, data, vector.name, usages, extractable); + + // Test for https://github.com/WICG/webcrypto-secure-curves/pull/24 + if (format === "jwk" && extractable) { + testJwkAlgBehaviours(algorithm, data.jwk, vector.name, usages); + } }); }); }); @@ -126,6 +136,28 @@ }, "Good parameters: " + keySize.toString() + " bits " + parameterString(format, keyData[format], algorithm, extractable, usages)); } + // Test importKey/exportKey "alg" behaviours, alg is ignored upon import and alg is missing for Ed25519 and Ed448 JWK export + // https://github.com/WICG/webcrypto-secure-curves/pull/24 + function testJwkAlgBehaviours(algorithm, keyData, crv, usages) { + promise_test(function(test) { + return subtle.importKey('jwk', { ...keyData, alg: 'this is ignored' }, algorithm, true, usages). + then(function(key) { + assert_equals(key.constructor, CryptoKey, "Imported a CryptoKey object"); + + return subtle.exportKey('jwk', key). + then(function(result) { + assert_equals(Object.keys(result).length, keyData.d ? 6 : 5, "Correct number of JWK members"); + assert_equals(result.alg, undefined, 'No JWK "alg" member is present'); + assert_true(equalJwk(keyData, result), "Round trip works"); + }, function(err) { + assert_unreached("Threw an unexpected error: " + err.toString()); + }); + }, function(err) { + assert_unreached("Threw an unexpected error: " + err.toString()); + }); + }, "Good parameters with ignored JWK alg: " + crv.toString() + " " + parameterString('jwk', keyData, algorithm, true, usages)); + } + // Helper methods follow: diff --git a/tests/wpt/tests/WebCryptoAPI/sign_verify/eddsa.js b/tests/wpt/tests/WebCryptoAPI/sign_verify/eddsa.js index d425fec2dc3..d77a8808831 100644 --- a/tests/wpt/tests/WebCryptoAPI/sign_verify/eddsa.js +++ b/tests/wpt/tests/WebCryptoAPI/sign_verify/eddsa.js @@ -167,6 +167,7 @@ function run_test() { promise_test(function(test) { return subtle.sign(algorithm, vector.privateKey, vector.data) .then(function(signature) { + assert_true(equalBuffers(signature, vector.signature), "Signing did not give the expected output"); // Can we verify the signature? return subtle.verify(algorithm, vector.publicKey, signature, vector.data) .then(function(is_verified) { diff --git a/tests/wpt/tests/WebCryptoAPI/sign_verify/hmac.js b/tests/wpt/tests/WebCryptoAPI/sign_verify/hmac.js index 8df4b042f54..f5e2ad2769c 100644 --- a/tests/wpt/tests/WebCryptoAPI/sign_verify/hmac.js +++ b/tests/wpt/tests/WebCryptoAPI/sign_verify/hmac.js @@ -117,6 +117,7 @@ function run_test() { promise_test(function(test) { return subtle.sign({name: "HMAC", hash: vector.hash}, vector.key, vector.plaintext) .then(function(signature) { + assert_true(equalBuffers(signature, vector.signature), "Signing did not give the expected output"); // Can we get the verify the new signature? return subtle.verify({name: "HMAC", hash: vector.hash}, vector.key, signature, vector.plaintext) .then(function(is_verified) { diff --git a/tests/wpt/tests/accname/name/comp_embedded_control.html b/tests/wpt/tests/accname/name/comp_embedded_control.html index 09856ef662e..2cdb5cbdf7d 100644 --- a/tests/wpt/tests/accname/name/comp_embedded_control.html +++ b/tests/wpt/tests/accname/name/comp_embedded_control.html @@ -13,24 +13,119 @@ <p>Tests the <a href="https://w3c.github.io/accname/#comp_embedded_control">#comp_embedded_control</a> portions of the AccName <em>Name Computation</em> algorithm.</p> +<!-- Textfield (textbox) --> <label> <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded textfield" class="ex"> Flash the screen <input value="3" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded textfield inside checkbox label" class="ex"> times </label> +<br><br> +<!-- HTML select:not([size]) element renders as menu button (on Mac) or single-row listbox (on Windows/Linux) --> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded select:not([size])" class="ex"> + Flash the screen + <select aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded select:not([size]) inside checkbox label" class="ex"> + <option value="1">1</option> + <option value="2">2</option> + <option value="3" selected>3</option> + <option value="4">4</option> + <option value="5">5</option> + </select> + times +</label> +<br><br> + +<!-- HTML select[size] element renders as multi-row listbox --> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded select[size]" class="ex"> + Flash the screen + <select size=5 aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded select[size] inside checkbox label" class="ex"> + <option value="1">1</option> + <option value="2">2</option> + <option value="3" selected>3</option> + <option value="4">4</option> + <option value="5">5</option> + </select> + times +</label> +<br><br> + +<!-- ARIA combobox examples (not interactive) --> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded combobox (input[type=text])" class="ex"> + Flash the screen + <input role="combobox" value="3" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded combobox (input[type=text]) inside checkbox label" class="ex"> times +</label> +<br><br> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded combobox (span)" class="ex"> + Flash the screen + <span role="combobox" tabindex="0" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded combobox (span) inside checkbox label" class="ex">3</span> times +</label> +<br><br> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded combobox (div)" class="ex"> + Flash the screen + <div style="display: inline-block;" role="combobox" tabindex="0" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded combobox (div) inside checkbox label" class="ex">3</div> times +</label> +<br><br> +<!-- Todo: we may want another combobox example using aria-activedescendant? --> + + +<!-- ARIA listbox examples (not interactive) --> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded listbox>option[aria-selected=true]" class="ex"> + Flash the screen + <ul role="listbox" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded listbox>option[aria-selected=true] inside checkbox label" class="ex" style="padding:0; list-style:none; border: solid 1px gray; width: 15em; display: inline-block;"> + <li role="option" tabindex="-1" style="padding:0.2em 0.8em; list-style:none;">1</li> + <li role="option" tabindex="-1" style="padding:0.2em 0.8em; list-style:none;">2</li> + <li role="option" tabindex="0" aria-selected="true" style="padding:0.2em 0.8em; list-style:none; color: white; background-color: #555;">3</li> + <li role="option" tabindex="-1" style="padding:0.2em 0.8em; list-style:none;">4</li> + <li role="option" tabindex="-1" style="padding:0.2em 0.8em; list-style:none;">5</li> + </ul> times +</label> +<br><br> -<!-- -Todo: test all remaining cases of https://w3c.github.io/accname/#comp_embedded_control - - comp_embedded_control_textbox - - comp_embedded_control_combobox_or_listbox - - comp_embedded_control_range - - comp_embedded_control_range_valuetext - - comp_embedded_control_range_valuenow - - comp_embedded_control_range_host_language_value +<!-- Ranges: HTML native and ARIA sliders and steppers (valuetext, valuenow, host language specific) --> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded input[type=range]" class="ex"> + Flash the screen + <input type ="range" min="1" max="5" value="3" step="1" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded input[type=range] inside checkbox label" class="ex"> times +</label> +<br><br> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded input[type=number]" class="ex"> + Flash the screen + <input type ="number" min="1" max="5" value="3" step="1" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded input[type=number] inside checkbox label" class="ex"> times +</label> +<br><br> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded ARIA slider (aria-valuenow)" class="ex"> + Flash the screen + <span tabindex="0" role="slider" aria-valuemin="1" aria-valuemax="5" aria-valuenow="3" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded ARIA slider (aria-valuenow) inside checkbox label" class="ex">3.0</span> times +</label> +<br><br> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded ARIA slider (aria-valuetext)" class="ex"> + Flash the screen + <span tabindex="0" role="slider" aria-valuemin="1.0" aria-valuemax="5.0" aria-valuenow="3.0" aria-valuetext="3" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded ARIA slider (aria-valuetext) inside checkbox label" class="ex">3.0</span> times +</label> +<br><br> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded ARIA spinbutton (aria-valuenow)" class="ex"> + Flash the screen + <span tabindex="0" role="spinbutton" aria-valuemin="1" aria-valuemax="5" aria-valuenow="3" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded ARIA spinbutton (aria-valuenow) inside checkbox label" class="ex">3.0</span> times +</label> +<br><br> +<label> + <input type="checkbox" data-expectedlabel="Flash the screen 3 times" data-testname="checkbox label with embedded ARIA spinbutton (aria-valuetext)" class="ex"> + Flash the screen + <span tabindex="0" role="spinbutton" aria-valuemin="1.0" aria-valuemax="5.0" aria-valuenow="3.0" aria-valuetext="3" aria-label="number of times" data-expectedlabel="number of times" data-testname="label of embedded ARIA spinbutton (aria-valuetext) inside checkbox label" class="ex">3.0</span> times +</label> +<br><br> ---> <script> AriaUtils.verifyLabelsBySelector(".ex"); diff --git a/tests/wpt/tests/accname/name/comp_hidden_not_referenced.html b/tests/wpt/tests/accname/name/comp_hidden_not_referenced.html index 84a2a2ca802..7d9cf2c36f6 100644 --- a/tests/wpt/tests/accname/name/comp_hidden_not_referenced.html +++ b/tests/wpt/tests/accname/name/comp_hidden_not_referenced.html @@ -1,6 +1,7 @@ <!doctype html> <html> <head> + <meta charset="utf-8"> <title>Name Comp: Hidden Not Referenced</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -13,16 +14,79 @@ <p>Tests the <a href="https://w3c.github.io/accname/#comp_hidden_not_referenced">#comp_hidden_not_referenced</a> portions of the AccName <em>Name Computation</em> algorithm.</p> -<h2 class="ex" data-expectedlabel="heading label" data-testname="heading with interior hidden node"> - heading - <span hidden>bogus</span> - label +<button + class="ex" + data-expectedlabel="visible to all users" + data-testname="button containing a rendered, unreferenced element that is aria-hidden=true, an unreferenced element with the hidden host language attribute, and an unreferenced element that is unconditionally rendered" +> + <span aria-hidden="true">hidden,</span> + <span hidden>hidden from all users,</span> + <span>visible to all users</span> +</button> + +<button + class="ex" + data-expectedlabel="hidden but referenced," + data-testname="button labelled by element that is aria-hidden=true" + aria-labelledby="button-label-2" +> + <span aria-hidden="true" id="button-label-2">hidden but referenced,</span> + <span hidden>hidden from all users,</span> + <span>visible to all users</span> +</button> + +<button + class="ex" + data-expectedlabel="hidden from all users but referenced," + data-testname="button labelled by element with the hidden host language attribute" + aria-labelledby="button-label-3" +> + <span aria-hidden="true">hidden,</span> + <span hidden id="button-label-3">hidden from all users but referenced,</span> + <span>visible to all users</span> +</button> + +<a + class="ex" + data-testname="link labelled by elements with assorted visibility and a11y tree exposure" + data-expectedlabel="visible to all users, hidden but referenced, hidden from all users but referenced" + href="#" + aria-labelledby="link-label-1a link-label-1b link-label-1c" +> + <span id="link-label-1a"> + <span>visible to all users,</span> + <span aria-hidden="true">hidden,</span> + </span> + <span aria-hidden="true" id="link-label-1b">hidden but referenced,</span> + <span hidden id="link-label-1c">hidden from all users but referenced</span> +</a> + +<h2 + class="ex" + data-testname="heading with name from content, containing element that is visibility:hidden with nested content that is visibility:visible" + data-expectedlabel="visible to all users, un-hidden for all users" +> + visible to all users, + <span style="visibility: hidden;"> + hidden from all users, + <span style="visibility: visible;">un-hidden for all users</span> + </span> </h2> -<!-- Todo: test all remaining cases of https://w3c.github.io/accname/#comp_hidden_not_referenced --> +<!-- TODO: Test cases once https://github.com/w3c/aria/issues/1256 resolved: --> +<!-- - button labelled by an element that is aria-hidden=true which contains a nested child that is aria-hidden=false --> +<!-- - button labelled by an element that is aria-hidden=false which belongs to a parent that is aria-hidden=true --> +<!-- - heading with name from content, containing rendered content that is aria-hidden=true with nested, rendered content that is aria-hidden=false --> +<!-- - heading with name from content, containing element with the hidden host language attribute with nested content that is aria-hidden=false --> + +<!-- TODO: New test case? +<!-- What is the expectation for a details element when it’s given an --> +<!-- explicit role that allows name from contents (e.g., `comment`) --> +<!-- but is also not in the open state, and therefore has contents --> +<!-- that are both not rendered and excluded from the a11y tree. --> <script> AriaUtils.verifyLabelsBySelector(".ex"); </script> </body> -</html>
\ No newline at end of file +</html> diff --git a/tests/wpt/tests/clipboard-apis/async-unsanitized-standard-html-formats-write-read.tentative.https.html b/tests/wpt/tests/clipboard-apis/async-unsanitized-standard-html-formats-write-read.tentative.https.html deleted file mode 100644 index 0eb97926bc0..00000000000 --- a/tests/wpt/tests/clipboard-apis/async-unsanitized-standard-html-formats-write-read.tentative.https.html +++ /dev/null @@ -1,64 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>Async Clipboard unsanitized HTML write -> Async Clipboard unsanitized HTML read test</title> -<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api"> -<body>Body needed for test_driver.click()</body> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/testdriver.js"></script> -<script src="/resources/testdriver-vendor.js"></script> -<script src="resources/user-activation.js"></script> -<script> -'use strict'; - -// This function removes extra spaces between tags in html. For example, the -// following html: "<p> Hello </p> <body> World </body>" would turn into this -// html: "<p> Hello </p> <body> World </body>" -// We remove the extra spaces because in html they are considered equivalent, -// but when we are comparing for equality the spaces make a difference. -function reformatHtml(html) { - const parser = new DOMParser(); - const htmlString = - parser.parseFromString(html, 'text/html').documentElement.innerHTML; - const reformattedString = htmlString.replace(/\>\s*\</g, '> <').replace(/<!--[a-zA-Z]*?-->/g, ''); - return reformattedString; -} - -// Writes a payload with HTML content and checks to ensure the correct data -// was written successfully. -promise_test(async t => { - await test_driver.set_permission({name: 'clipboard-read'}, 'granted'); - await test_driver.set_permission({name: 'clipboard-write'}, 'granted'); - - // Create and write unsanitized version of standard HTML format. - const format1 = 'text/html'; - // The string must be concatenated in this way because the html parser - // will recognize a script tag even in quotes as a real script tag. By - // splitting it up in this way we avoid that error. - const html_script = '<script>const a = 5;</scr' - + 'ipt> <p>Hello World</p>'; - const textInput = '<head><style>color:blue</style><head>' + - '<body><p>Hello</p>' + html_script + '</body>'; - const blobInput1 = new Blob([textInput], {type: format1}); - const clipboardItemInput = new ClipboardItem({[format1]: blobInput1}); - await waitForUserActivation(); - await navigator.clipboard.write([clipboardItemInput]); - - // Read unsanitized version of HTML format. - await waitForUserActivation(); - const clipboardItems = - await navigator.clipboard.read({unsanitized: ["text/html"]}); - assert_equals(clipboardItems.length, 1); - const clipboardItem = clipboardItems[0]; - assert_true(clipboardItem instanceof ClipboardItem); - - const blobOutput1 = await clipboardItem.getType(format1); - assert_equals(blobOutput1.type, format1); - - const data1 = await (new Response(blobOutput1)).text(); - const outputHtml = reformatHtml(data1); - const expectedHtml = '<html>' + textInput + '</html>'; - const unsanitizedExpectedHtml = reformatHtml(expectedHtml); - assert_equals(outputHtml, unsanitizedExpectedHtml); -}, 'Verify write and read unsanitized content to the clipboard given text/html format as input'); -</script> diff --git a/tests/wpt/tests/css/css-align/parsing/align-tracks-computed.html b/tests/wpt/tests/css/css-align/parsing/align-tracks-computed.html deleted file mode 100644 index 76241f694af..00000000000 --- a/tests/wpt/tests/css/css-align/parsing/align-tracks-computed.html +++ /dev/null @@ -1,37 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8"> -<title>CSS Grid Level 3: getComputedStyle().alignContent</title> -<link rel="help" href="https://drafts.csswg.org/css-grid-3/#tracks-alignment"> -<meta name="assert" content="align-tracks computed value is as specified."> -<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> -test_computed_value("align-tracks", "normal"); - -test_computed_value("align-tracks", "baseline"); -test_computed_value("align-tracks", "last baseline"); - -test_computed_value("align-tracks", "space-between"); -test_computed_value("align-tracks", "space-around"); -test_computed_value("align-tracks", "space-evenly"); -test_computed_value("align-tracks", "stretch"); - -test_computed_value("align-tracks", "center"); -test_computed_value("align-tracks", "start"); -test_computed_value("align-tracks", "end"); -test_computed_value("align-tracks", "flex-start"); -test_computed_value("align-tracks", "flex-end"); -test_computed_value("align-tracks", "unsafe end"); -test_computed_value("align-tracks", "safe flex-start"); - -test_computed_value("align-tracks", "normal, normal", "normal") -</script> -</body> -</html> diff --git a/tests/wpt/tests/css/css-align/parsing/align-tracks-invalid.html b/tests/wpt/tests/css/css-align/parsing/align-tracks-invalid.html deleted file mode 100644 index 68f38f5a61c..00000000000 --- a/tests/wpt/tests/css/css-align/parsing/align-tracks-invalid.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8"> -<title>CSS Grid Level 3: parsing align-tracks with invalid values</title> -<link rel="help" href="https://drafts.csswg.org/css-grid-3/#tracks-alignment"> -<meta name="assert" content="align-tracks supports only the grammar 'normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>'."> -<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("align-tracks", "auto"); -test_invalid_value("align-tracks", "baseline last"); -test_invalid_value("align-tracks", "center baseline"); -test_invalid_value("align-tracks", "first"); -test_invalid_value("align-tracks", "flex-start flex-end"); -test_invalid_value("align-tracks", "last"); -test_invalid_value("align-tracks", "left"); -test_invalid_value("align-tracks", "legacy center"); -test_invalid_value("align-tracks", "legacy left"); -test_invalid_value("align-tracks", "legacy"); -test_invalid_value("align-tracks", "normal baseline"); -test_invalid_value("align-tracks", "right legacy"); -test_invalid_value("align-tracks", "safe self-end"); -test_invalid_value("align-tracks", "safe"); -test_invalid_value("align-tracks", "self-end unsafe"); -test_invalid_value("align-tracks", "self-start"); -test_invalid_value("align-tracks", "start safe"); -test_invalid_value("align-tracks", "unsafe right"); -test_invalid_value("align-tracks", "unsafe"); - -test_invalid_value("align-tracks", "auto, left"); -test_invalid_value("align-tracks", "foo, auto"); -test_invalid_value("align-tracks", "start, left, end"); -test_invalid_value("align-tracks", "left, start, end"); -test_invalid_value("align-tracks", "start, end, left"); -</script> -</body> -</html> diff --git a/tests/wpt/tests/css/css-align/parsing/align-tracks-valid.html b/tests/wpt/tests/css/css-align/parsing/align-tracks-valid.html deleted file mode 100644 index 1c9a8b040cd..00000000000 --- a/tests/wpt/tests/css/css-align/parsing/align-tracks-valid.html +++ /dev/null @@ -1,44 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8"> -<title>CSS Grid Level 3: parsing align-tracks with valid values</title> -<link rel="help" href="https://drafts.csswg.org/css-grid-3/#tracks-alignment"> -<meta name="assert" content="align-tracks supports the full grammar 'normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>'."> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/css/support/parsing-testcommon.js"></script> -</head> -<body> -<script> -test_valid_value("align-tracks", "normal"); - -// <baseline-position> = [ first | last ]? baseline -test_valid_value("align-tracks", "baseline"); -test_valid_value("align-tracks", "first baseline", "baseline"); -test_valid_value("align-tracks", "last baseline"); - -// <content-distribution> = space-between | space-around | space-evenly | stretch -test_valid_value("align-tracks", "space-between"); -test_valid_value("align-tracks", "space-around"); -test_valid_value("align-tracks", "space-evenly"); -test_valid_value("align-tracks", "stretch"); - -// <overflow-position>? <content-position> -// <overflow-position> = unsafe | safe -// <content-position> = center | start | end | flex-start | flex-end -test_valid_value("align-tracks", "center"); -test_valid_value("align-tracks", "start"); -test_valid_value("align-tracks", "end"); -test_valid_value("align-tracks", "flex-start"); -test_valid_value("align-tracks", "flex-end"); -test_valid_value("align-tracks", "unsafe end"); -test_valid_value("align-tracks", "safe flex-start"); - -test_valid_value("align-tracks", "flex-start, last baseline"); -test_valid_value("align-tracks", "normal, normal", "normal"); -test_valid_value("align-tracks", "start, flex-end, flex-end, flex-end, flex-end", "start, flex-end"); - -</script> -</body> -</html> diff --git a/tests/wpt/tests/css/css-align/parsing/justify-tracks-computed.html b/tests/wpt/tests/css/css-align/parsing/justify-tracks-computed.html deleted file mode 100644 index 372d17c9101..00000000000 --- a/tests/wpt/tests/css/css-align/parsing/justify-tracks-computed.html +++ /dev/null @@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8"> -<title>CSS Grid Level 3: getComputedStyle().justifyContent</title> -<link rel="help" href="https://drafts.csswg.org/css-grid-3/#tracks-alignment"> -<meta name="assert" content="justify-tracks computed value is as specified."> -<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> -test_computed_value("justify-tracks", "normal"); - -test_computed_value("justify-tracks", "space-between"); -test_computed_value("justify-tracks", "space-around"); -test_computed_value("justify-tracks", "space-evenly"); -test_computed_value("justify-tracks", "stretch"); - -test_computed_value("justify-tracks", "center"); -test_computed_value("justify-tracks", "start"); -test_computed_value("justify-tracks", "end"); -test_computed_value("justify-tracks", "flex-start"); -test_computed_value("justify-tracks", "flex-end"); -test_computed_value("justify-tracks", "unsafe end"); -test_computed_value("justify-tracks", "safe flex-start"); -test_computed_value("justify-tracks", "left"); -test_computed_value("justify-tracks", "unsafe right"); - -test_computed_value("justify-tracks", "normal, normal", "normal") -</script> -</body> -</html> diff --git a/tests/wpt/tests/css/css-align/parsing/justify-tracks-invalid.html b/tests/wpt/tests/css/css-align/parsing/justify-tracks-invalid.html deleted file mode 100644 index a1dc2cc7388..00000000000 --- a/tests/wpt/tests/css/css-align/parsing/justify-tracks-invalid.html +++ /dev/null @@ -1,42 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8"> -<title>CSS Grid Level 3: parsing justify-tracks with invalid values</title> -<link rel="help" href="https://drafts.csswg.org/css-grid-3/#tracks-alignment"> -<meta name="assert" content="justify-tracks supports only the grammar 'normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]'."> -<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("justify-tracks", "auto"); -test_invalid_value("justify-tracks", "baseline last"); -test_invalid_value("justify-tracks", "baseline"); -test_invalid_value("justify-tracks", "center baseline"); -test_invalid_value("justify-tracks", "first baseline"); -test_invalid_value("justify-tracks", "first"); -test_invalid_value("justify-tracks", "flex-start flex-end"); -test_invalid_value("justify-tracks", "last baseline"); -test_invalid_value("justify-tracks", "last"); -test_invalid_value("justify-tracks", "legacy center"); -test_invalid_value("justify-tracks", "legacy left"); -test_invalid_value("justify-tracks", "legacy"); -test_invalid_value("justify-tracks", "normal baseline"); -test_invalid_value("justify-tracks", "right legacy"); -test_invalid_value("justify-tracks", "safe self-end"); -test_invalid_value("justify-tracks", "safe"); -test_invalid_value("justify-tracks", "self-end unsafe"); -test_invalid_value("justify-tracks", "self-start"); -test_invalid_value("justify-tracks", "start safe"); -test_invalid_value("justify-tracks", "unsafe"); - -test_invalid_value("align-tracks", "auto, left"); -test_invalid_value("align-tracks", "foo, auto"); -test_invalid_value("align-tracks", "start, foo, end"); -test_invalid_value("align-tracks", "first, start, end"); -test_invalid_value("align-tracks", "start, end, unsafe"); -</script> -</body> -</html> diff --git a/tests/wpt/tests/css/css-align/parsing/justify-tracks-valid.html b/tests/wpt/tests/css/css-align/parsing/justify-tracks-valid.html deleted file mode 100644 index be4f426f144..00000000000 --- a/tests/wpt/tests/css/css-align/parsing/justify-tracks-valid.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8"> -<title>CSS Grid Level 3: parsing justify-tracks with valid values</title> -<link rel="help" href="https://drafts.csswg.org/css-grid-3/#tracks-alignment"> -<meta name="assert" content="justify-tracks supports the full grammar 'normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]'."> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/css/support/parsing-testcommon.js"></script> -</head> -<body> -<script> -test_valid_value("justify-tracks", "normal"); - -// <content-distribution> = space-between | space-around | space-evenly | stretch -test_valid_value("justify-tracks", "space-between"); -test_valid_value("justify-tracks", "space-around"); -test_valid_value("justify-tracks", "space-evenly"); -test_valid_value("justify-tracks", "stretch"); - -// <overflow-position>? [ <content-position> | left | right ] -// <overflow-position> = unsafe | safe -// <content-position> = center | start | end | flex-start | flex-end -test_valid_value("justify-tracks", "center"); -test_valid_value("justify-tracks", "start"); -test_valid_value("justify-tracks", "end"); -test_valid_value("justify-tracks", "flex-start"); -test_valid_value("justify-tracks", "flex-end"); -test_valid_value("justify-tracks", "unsafe end"); -test_valid_value("justify-tracks", "safe flex-start"); -test_valid_value("justify-tracks", "left"); -test_valid_value("justify-tracks", "unsafe right"); - -test_valid_value("justify-tracks", "flex-start, last baseline"); -test_valid_value("justify-tracks", "normal, normal", "normal"); -test_valid_value("justify-tracks", "start, flex-end, flex-end, flex-end, flex-end", "start, flex-end"); - -</script> -</body> -</html> diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-center-001.html b/tests/wpt/tests/css/css-anchor-position/anchor-center-001.html new file mode 100644 index 00000000000..f8583e68c00 --- /dev/null +++ b/tests/wpt/tests/css/css-anchor-position/anchor-center-001.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<title>Tests the anchor-center keyword is parsed and computed as specified</title> +<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#anchor-center"> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script src="/css/support/computed-testcommon.js"></script> + +<div id="container"> + <div id="target"></div> +</div> + +<script> +test_valid_value('align-self', 'anchor-center'); +test_valid_value('align-items', 'anchor-center'); +test_valid_value('justify-self', 'anchor-center'); +test_valid_value('justify-items', 'anchor-center'); + +test_computed_value('align-self', 'anchor-center'); +test_computed_value('align-items', 'anchor-center'); +test_computed_value('justify-self', 'anchor-center'); +test_computed_value('justify-items', 'anchor-center'); +</script> diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-center-002-ref.html b/tests/wpt/tests/css/css-anchor-position/anchor-center-002-ref.html new file mode 100644 index 00000000000..40ccc2b044b --- /dev/null +++ b/tests/wpt/tests/css/css-anchor-position/anchor-center-002-ref.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> +<title>Tests that 'anchor-center' behaves as 'center' in non-OOF layout modes</title> + +<style> +.container { + width: 100px; + height: 100px; + background: orange; + margin-block: 5px; +} + +.item { + width: 40px; + height: 40px; + background: lime; +} + +.flex { + display: flex; +} + +.grid { + display: grid; + grid-template-columns: repeat(8, 1fr); + grid-auto-rows: 50px; + grid-template-areas: + "a a a a b b b b" + "a a a a b b b b"; +} +</style> + +<div class="flex container" style="align-items: center"> + <div class="item"></div> +</div> + +<div class="flex container"> + <div class="item" style="align-self: center"></div> +</div> + +<div class="grid container" + style="align-items: center; justify-items: center"> + <div class="item" style="grid-area: a"></div> + <div class="item" style="grid-area: b"></div> +</div> + +<div class="grid container"> + <div class="item" style="grid-area: a; align-self: center"></div> + <div class="item" style="grid-area: b; justify-self: center"></div> +</div> diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-center-002.html b/tests/wpt/tests/css/css-anchor-position/anchor-center-002.html new file mode 100644 index 00000000000..b7f61003a67 --- /dev/null +++ b/tests/wpt/tests/css/css-anchor-position/anchor-center-002.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<title>Tests that 'anchor-center' behaves as 'center' in non-OOF layout modes</title> +<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#anchor-center"> +<link rel="match" href="anchor-center-002-ref.html"> +<link rel="author" href="mailto:xiaochengh@chromium.org"> + +<style> +.container { + width: 100px; + height: 100px; + background: orange; + margin-block: 5px; +} + +.item { + width: 40px; + height: 40px; + background: lime; +} + +.flex { + display: flex; +} + +.grid { + display: grid; + grid-template-columns: repeat(8, 1fr); + grid-auto-rows: 50px; + grid-template-areas: + "a a a a b b b b" + "a a a a b b b b"; +} +</style> + +<div class="flex container" style="align-items: anchor-center"> + <div class="item"></div> +</div> + +<div class="flex container"> + <div class="item" style="align-self: anchor-center"></div> +</div> + +<div class="grid container" + style="align-items: anchor-center; justify-items: anchor-center"> + <div class="item" style="grid-area: a"></div> + <div class="item" style="grid-area: b"></div> +</div> + +<div class="grid container"> + <div class="item" style="grid-area: a; align-self: center"></div> + <div class="item" style="grid-area: b; justify-self: center"></div> +</div> diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-scroll-006.html b/tests/wpt/tests/css/css-anchor-position/anchor-scroll-006.html new file mode 100644 index 00000000000..2ffd026b552 --- /dev/null +++ b/tests/wpt/tests/css/css-anchor-position/anchor-scroll-006.html @@ -0,0 +1,137 @@ +<!DOCTYPE html> +<title>Tests that scroll adjustment is applied per-axis</title> +<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#needs-scroll-adjustment"> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support/test-common.js"></script> + +<style> +body { + margin: 0; +} + +.scroller { + width: 150px; + height: 150px; + margin-bottom: 50px; + overflow: scroll; + position: relative; +} + +.spacer { + width: 400px; + height: 400px; +} + +.anchor { + position: absolute; + width: 50px; + height: 50px; + top: 50px; + left: 50px; + background: orange; +} + +.target { + position: fixed; + width: 50px; + height: 50px; + background: lime; +} + +#scroller1 { anchor-name: --scroller1; } +#scroller2 { anchor-name: --scroller2; } +#scroller3 { anchor-name: --scroller3; } + +#anchor1 { anchor-name: --a1; } +#anchor2 { anchor-name: --a2; } +#anchor3 { anchor-name: --a3; } + +/* Needs scroll adjustment in x axis only */ +#target1 { + anchor-default: --a1; + left: anchor(left); + top: anchor(--scroller1 bottom); +} + +/* Needs scroll adjustment in y axis only */ +#target2 { + anchor-default: --a2; + top: anchor(top); + left: anchor(--scroller2 right); +} + +/* No scroll adjustment needed */ +#target3 { + anchor-default: --a3; + top: anchor(--scroller3 bottom); + left: anchor(--scroller3 right); +} +</style> + +<div class="scroller" id="scroller1"> + <div class="spacer"></div> + <div class="anchor" id="anchor1"></div> +</div> +<div class="target" id="target1"></div> + +<script> +promise_test(async () => { + await waitUntilNextAnimationFrame(); + assert_equals(target1.getBoundingClientRect().left, 50); + assert_equals(target1.getBoundingClientRect().top, 150); + + scroller1.scrollLeft = 50; + await waitUntilNextAnimationFrame(); + assert_equals(target1.getBoundingClientRect().left, 0); + + scroller1.scrollTop = 50; + await waitUntilNextAnimationFrame(); + assert_equals(target1.getBoundingClientRect().top, 150); +}, '#target1 is scroll-adjusted in x axis only'); +</script> + +<div class="scroller" id="scroller2"> + <div class="spacer"></div> + <div class="anchor" id="anchor2"></div> +</div> +<div class="target" id="target2"></div> + +<script> +promise_test(async () => { + await waitUntilNextAnimationFrame(); + assert_equals(target2.getBoundingClientRect().left, 150); + assert_equals(target2.getBoundingClientRect().top, 250); + + scroller2.scrollLeft = 50; + await waitUntilNextAnimationFrame(); + assert_equals(target2.getBoundingClientRect().left, 150); + + scroller2.scrollTop = 50; + await waitUntilNextAnimationFrame(); + assert_equals(target2.getBoundingClientRect().top, 200); +}, '#target2 is scroll-adjusted in y axis only'); +</script> + +<div class="scroller" id="scroller3"> + <div class="spacer"></div> + <div class="anchor" id="anchor3"></div> +</div> +<div class="target" id="target3"></div> + +<script> +promise_test(async () => { + await waitUntilNextAnimationFrame(); + assert_equals(target3.getBoundingClientRect().left, 150); + assert_equals(target3.getBoundingClientRect().top, 550); + + scroller3.scrollLeft = 50; + await waitUntilNextAnimationFrame(); + assert_equals(target3.getBoundingClientRect().left, 150); + + scroller3.scrollTop = 50; + await waitUntilNextAnimationFrame(); + assert_equals(target3.getBoundingClientRect().top, 550); +}, '#target3 is scroll-adjusted in neither axis'); +</script> diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-scroll-007.html b/tests/wpt/tests/css/css-anchor-position/anchor-scroll-007.html new file mode 100644 index 00000000000..ec519106190 --- /dev/null +++ b/tests/wpt/tests/css/css-anchor-position/anchor-scroll-007.html @@ -0,0 +1,86 @@ +<!DOCTYPE html> +<title>Tests that scroll adjustment still applies when using another anchor in default anchor's scroll container</title> +<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#needs-scroll-adjustment"> +<link rel="author" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="support/test-common.js"></script> + +<style> +body { + margin: 0; +} + +#scroller { + width: 400px; + height: 400px; + overflow: scroll; + position: relative; +} + +#spacer { + width: 1000px; + height: 1000px; +} + +.anchor { + width: 50px; + height: 50px; + position: absolute; + background: orange; +} + +#anchor1 { + anchor-name: --a1; + left: 300px; + top: 100px; +} + +#anchor2 { + anchor-name: --a2; + left: 200px; + top: 200px; +} + +#anchor3 { + anchor-name: --a3; + left: 100px; + top: 300px; +} + +/* Uses different anchors in insets instead of the default anchor. + * Still scroll-adjusted because they are in the same scroll container. */ +#target { + position: fixed; + width: 50px; + height: 50px; + left: anchor(--a3 left); + top: anchor(--a1 top); + anchor-default: --a2; + background: lime; +} +</style> + +<div id="scroller"> + <div id="spacer"></div> + <div class="anchor" id="anchor1"></div> + <div class="anchor" id="anchor2"></div> + <div class="anchor" id="anchor3"></div> +</div> +<div id="target"></div> + +<script> +promise_test(async () => { + await waitUntilNextAnimationFrame(); + assert_equals(target.getBoundingClientRect().left, 100); + assert_equals(target.getBoundingClientRect().top, 100); + + scroller.scrollLeft = 50; + await waitUntilNextAnimationFrame(); + assert_equals(target.getBoundingClientRect().left, 50); + + scroller.scrollTop = 50; + await waitUntilNextAnimationFrame(); + assert_equals(target.getBoundingClientRect().top, 50); +}, '#target3 is scroll-adjusted in both axises'); +</script> diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-repeat-001.htm b/tests/wpt/tests/css/css-backgrounds/border-image-repeat-001.htm Binary files differdeleted file mode 100644 index e447421a89f..00000000000 --- a/tests/wpt/tests/css/css-backgrounds/border-image-repeat-001.htm +++ /dev/null diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-repeat-002.htm b/tests/wpt/tests/css/css-backgrounds/border-image-repeat-002.htm Binary files differindex f1fd6ffbc3b..a0c081863d4 100644 --- a/tests/wpt/tests/css/css-backgrounds/border-image-repeat-002.htm +++ b/tests/wpt/tests/css/css-backgrounds/border-image-repeat-002.htm diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-repeat-003.htm b/tests/wpt/tests/css/css-backgrounds/border-image-repeat-003.htm Binary files differdeleted file mode 100644 index 255fdfccb96..00000000000 --- a/tests/wpt/tests/css/css-backgrounds/border-image-repeat-003.htm +++ /dev/null diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-repeat-004.htm b/tests/wpt/tests/css/css-backgrounds/border-image-repeat-004.htm Binary files differindex acf7cfa7b84..40194506940 100644 --- a/tests/wpt/tests/css/css-backgrounds/border-image-repeat-004.htm +++ b/tests/wpt/tests/css/css-backgrounds/border-image-repeat-004.htm diff --git a/tests/wpt/tests/css/css-backgrounds/border-image-slice-004.htm b/tests/wpt/tests/css/css-backgrounds/border-image-slice-004.htm Binary files differindex 86b3c1e6b1d..1e5adb311f5 100644 --- a/tests/wpt/tests/css/css-backgrounds/border-image-slice-004.htm +++ b/tests/wpt/tests/css/css-backgrounds/border-image-slice-004.htm diff --git a/tests/wpt/tests/css/css-backgrounds/reference/border-image-repeat-002-ref.html b/tests/wpt/tests/css/css-backgrounds/reference/border-image-repeat-002-ref.html new file mode 100644 index 00000000000..e295a5c65dc --- /dev/null +++ b/tests/wpt/tests/css/css-backgrounds/reference/border-image-repeat-002-ref.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reftest reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + table + { + border-spacing: 0px; + margin: 70px; + table-layout: fixed; + } + + td + { + height: 40px; + padding: 0px; + } + + td.corner + { + background-image: url("../support/new-red-diamond-27x27.png"); + background-size: cover; + } + + td#first-row-second-cell , td#third-row-second-cell , td.second-row + { + background-image: url("../support/blue-diamond-27x27.png"); + background-size: 34px 40px; + } + + td.second-row + { + background-size: 40px 34px; + height: 102px; + } + </style> + + <p>Test passes if there are three whole blue diamonds without clipping on four sides of the border. + + <table> + + <col width="40"><col width="102"><col width="40"> + + <tr><td class="corner"><td id="first-row-second-cell"><td class="corner"> + + <tr><td class="second-row"><td><td class="second-row"> + + <tr><td class="corner"><td id="third-row-second-cell"><td class="corner"> + + </table> diff --git a/tests/wpt/tests/css/css-backgrounds/reference/border-image-repeat-004-ref.html b/tests/wpt/tests/css/css-backgrounds/reference/border-image-repeat-004-ref.html new file mode 100644 index 00000000000..9c3f7176633 --- /dev/null +++ b/tests/wpt/tests/css/css-backgrounds/reference/border-image-repeat-004-ref.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reftest reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + table + { + border-spacing: 0px; + margin: 70px; + table-layout: fixed; + } + + td + { + height: 40px; + padding: 0px; + } + + td.corner + { + background-image: url("../support/new-red-diamond-27x27.png"); + background-size: cover; + } + + td#first-row-second-cell , td#third-row-second-cell , td.second-row + { + background-image: url("../support/blue-diamond-27x27.png"); + background-size: 100px 40px; + } + + td.second-row + { + background-size: 40px 100px; + height: 100px; + } + </style> + + <p>Test passes if there is only one (and streched) blue diamond on each side of the border. + + <table> + + <col width="40"><col width="100"><col width="40"> + + <tr><td class="corner"><td id="first-row-second-cell"><td class="corner"> + + <tr><td class="second-row"><td><td class="second-row"> + + <tr><td class="corner"><td id="third-row-second-cell"><td class="corner"> + + </table> diff --git a/tests/wpt/tests/css/css-backgrounds/reference/border-image-slice-004-ref.html b/tests/wpt/tests/css/css-backgrounds/reference/border-image-slice-004-ref.html new file mode 100644 index 00000000000..d9c798a6167 --- /dev/null +++ b/tests/wpt/tests/css/css-backgrounds/reference/border-image-slice-004-ref.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Reftest reference</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + border: green solid 30px; + height: 100px; + margin: 50px; + width: 100px; + } + </style> + + <p>Test passes if there is no red color visible on the page. + + <div></div> diff --git a/tests/wpt/tests/css/css-backgrounds/support/9grid20-40-red.png b/tests/wpt/tests/css/css-backgrounds/support/9grid20-40-red.png Binary files differnew file mode 100644 index 00000000000..75173b7edc0 --- /dev/null +++ b/tests/wpt/tests/css/css-backgrounds/support/9grid20-40-red.png diff --git a/tests/wpt/tests/css/css-cascade/tons-of-declarations-crash.html b/tests/wpt/tests/css/css-cascade/tons-of-declarations-crash.html new file mode 100644 index 00000000000..50a32c19389 --- /dev/null +++ b/tests/wpt/tests/css/css-cascade/tons-of-declarations-crash.html @@ -0,0 +1,6 @@ +<!doctype html> +<style></style> +<script> +document.querySelector('style').innerText = `input { border: 1px solid }`.repeat(2 << 16); +</script> +<input> diff --git a/tests/wpt/tests/css/css-color/light-dark-basic.html b/tests/wpt/tests/css/css-color/light-dark-basic.html new file mode 100644 index 00000000000..ee053322384 --- /dev/null +++ b/tests/wpt/tests/css/css-color/light-dark-basic.html @@ -0,0 +1,26 @@ +<!doctype html> +<title>light-dark() color-scheme propagation</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-effect"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7561"> +<div id="system"></div> +<div id="light" style="color-scheme: light"></div> +<div id="dark" style="color-scheme: dark"></div> +<script> +const system_is_dark = matchMedia("(prefers-color-scheme: dark)").matches; +const elements = ["system", "light", "dark"].map(document.getElementById.bind(document)); +function test_light_dark(color, expected_light, expected_dark) { + test(() => { + for (let element of elements) { + let should_be_dark = element.id == "dark" || (element.id == "system" && system_is_dark); + element.style.backgroundColor = color; + assert_not_equals(element.style.backgroundColor, "", "Should be valid"); + assert_equals(getComputedStyle(element).backgroundColor, should_be_dark ? expected_dark : expected_light); + } + }, color); +} + +test_light_dark("light-dark(white, black)", "rgb(255, 255, 255)", "rgb(0, 0, 0)"); +test_light_dark("light-dark(light-dark(white, red), red)", "rgb(255, 255, 255)", "rgb(255, 0, 0)"); +</script> diff --git a/tests/wpt/tests/css/css-color/light-dark-currentcolor.html b/tests/wpt/tests/css/css-color/light-dark-currentcolor.html new file mode 100644 index 00000000000..512a492b293 --- /dev/null +++ b/tests/wpt/tests/css/css-color/light-dark-currentcolor.html @@ -0,0 +1,16 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CurrentColor can be used inside light-dark</title> +<link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-effect"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7561"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<style> +.square { + width: 100px; + height: 100px; + color: green; + background-color: light-dark(currentColor, currentColor); +} +</style> +<p>Test passes if there is a filled green square.</p> +<div class="square"></div> diff --git a/tests/wpt/tests/css/css-color/light-dark-inheritance.html b/tests/wpt/tests/css/css-color/light-dark-inheritance.html new file mode 100644 index 00000000000..1128b57319b --- /dev/null +++ b/tests/wpt/tests/css/css-color/light-dark-inheritance.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<title>light-dark() computes to the actual value, like system colors</title> +<link rel="help" href="https://drafts.csswg.org/css-color-adjust/#color-scheme-effect"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7561"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<style> +.square { + width: 100px; + height: 100px; + color-scheme: dark; + background-color: currentColor; +} +.container { + color-scheme: light; + color: light-dark(green, red); +} +</style> +<p>Test passes if there is a filled green square.</p> +<div class="container"> + <div class="square"></div> +</div> diff --git a/tests/wpt/tests/css/css-flexbox/order/order-abs-children-painting-order-different-container.html b/tests/wpt/tests/css/css-flexbox/order/order-abs-children-painting-order-different-container.html new file mode 100644 index 00000000000..202581dd1d1 --- /dev/null +++ b/tests/wpt/tests/css/css-flexbox/order/order-abs-children-painting-order-different-container.html @@ -0,0 +1,53 @@ +<!DOCTYPE html> +<title>CSS Test: flex order affects painting order of absolutely positioned boxes inside flex</title> +<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-order"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1489495"> +<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html"> +<meta name="assert" content="This test check that relative positioned boxes that are grandchildren of two flexboxes don't sort paint order relative to each other."> +<style> + #test { + display: flex; + height: 100px; + width: 100px; + } + + #test2 { + display: flex; + height: 100px; + width: 100px; + } + + #order-1 { + order: 1; + } + + #order-2 { + order: 2; + } + + .inner { + position: relative; + width: 100px; + height: 100px; + } + + #order-1 .inner { + background-color: green; + } + + #order-2 .inner { + background-color: red; + } +</style> +<p>Test passes if there is a filled green square.</p> +<div id="test"> + <div id="order-2"> + <div class="inner"></div> + </div> +</div> +<div id="test2" style="margin-top: -100px"> + <div id="order-1"> + <div class="inner"></div> + </div> +</div> diff --git a/tests/wpt/tests/css/css-fonts/font-synthesis-08-ref.html b/tests/wpt/tests/css/css-fonts/font-synthesis-08-ref.html new file mode 100644 index 00000000000..39cd4558d98 --- /dev/null +++ b/tests/wpt/tests/css/css-fonts/font-synthesis-08-ref.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html lang="en"> +<meta charset="utf-8"/> +<title>CSS Test: font-synthesis style and weight</title> +<style> + @font-face { + font-family: "lato"; + src: url(support/fonts/Lato-Medium.ttf); + } + .test { + font-family: "lato"; + font-size: 3em; + } + .auto { + font-style: italic; + font-weight: bold; + } + .weight { + font-weight: bold; + } + .style { + font-style: italic; + } +</style> + +<section class="test"> + <p class="auto">Filler text</p> + <p class>Filler text</p> + <p class="weight">Filler text</p> + <p class="style">Filler text</p> +</section>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-fonts/font-synthesis-08.html b/tests/wpt/tests/css/css-fonts/font-synthesis-08.html new file mode 100644 index 00000000000..b3de1afcaee --- /dev/null +++ b/tests/wpt/tests/css/css-fonts/font-synthesis-08.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html lang="en"> +<meta charset="utf-8"/> +<title>CSS Test: font-synthesis style and weight</title> +<link rel="match" href="font-synthesis-08-ref.html"> +<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-synthesis"> +<meta name="assert" content="If ‘weight’/'style' is not specified for + font-synthesis property, user agents must not synthesize bold/italic faces"> +<style> + @font-face { + font-family: "lato"; + src: url(support/fonts/Lato-Medium.ttf); + } + .test { + font-family: "lato"; + font-size: 3em; + font-style: italic; + font-weight: bold; + } + .auto { + font-synthesis: weight style; + } + .none { + font-synthesis: none; + } + .weight { + font-synthesis: weight; + } + .style { + font-synthesis: style; + } +</style> + +<!-- If a previous font-synthesis property and value was encountered by the + style engine, make sure that this newer value is correctly updated and not + confused with an earlier value due to incorrect caching. Appearance of the + 4 section needs to differ in weight and style respectively. --> +<section class="test"> + <p class="auto">Filler text</p> + <p class="none">Filler text</p> + <p class="weight">Filler text</p> + <p class="style">Filler text</p> +</section> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-001-ref.html b/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-001-ref.html deleted file mode 100644 index 3b22489fdb9..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-001-ref.html +++ /dev/null @@ -1,120 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>Reference: Masonry layout with `align-tracks` alignment</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <style> -html,body { - color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; -} - -.hl { writing-mode: horizontal-tb; direction:ltr; } -.hr { writing-mode: horizontal-tb; direction:rtl; } -.vll { writing-mode: vertical-lr; direction:ltr; } -.vlr { writing-mode: vertical-lr; direction:rtl; } -.vrl { writing-mode: vertical-rl; direction:ltr; } -.vrr { writing-mode: vertical-rl; direction:rtl; } -.swl { writing-mode: sideways-lr; direction:ltr; } -.swr { writing-mode: sideways-lr; direction:rtl; } - -grid { - display: inline-grid; - gap: 1px 2px; - background: content-box silver; - color: #444; - padding: 1px 2px; - block-size: 30px; - vertical-align: top; -} -grid.vll, grid.vrr, grid.vlr, grid.vrl, grid.swl, grid.swr { - inline-size: 22px; -} - -grid > div { - display: inline-flex; - inline-size: min-content; -} - -grid2 { - display: inline-grid; - row-gap: 1px; - grid-template-columns: 8px; - vertical-align: top; - block-size: 21px; -} - -item { - background-color: #444; - color: #fff; - writing-mode: horizontal-tb; - direction: ltr; -} -grid2:nth-child(1) { - grid-template-rows: 8px 8px; - margin-inline-end: 2px; -} -grid2:nth-child(2) { - grid-template-rows: 12px 8px; -} - -.vll grid2:nth-child(1) { block-size:17px; } -.vrr grid2:nth-child(1) { block-size:17px; } -.vlr grid2:nth-child(1) { block-size:17px; } -.vrl grid2:nth-child(1) { block-size:17px; } -.swl grid2:nth-child(1) { block-size:17px; } -.swr grid2:nth-child(1) { block-size:17px; } - -.vll grid2:nth-child(2) { grid-template-rows:8px 8px; } -.vrr grid2:nth-child(2) { grid-template-rows:8px 8px; } -.vlr grid2:nth-child(2) { grid-template-rows:8px 8px; } -.vrl grid2:nth-child(2) { grid-template-rows:8px 8px; } -.swl grid2:nth-child(2) { grid-template-rows:8px 8px; } -.swr grid2:nth-child(2) { grid-template-rows:8px 8px; } - -grid2:nth-child(1) > item:nth-child(1) { background: blue; inline-size:8px; block-size:8px; z-index:1; } -grid2:nth-child(2) > item:nth-child(1) { background: magenta; inline-size:8px; block-size:12px; z-index:1; } -grid2:nth-child(1) > item:nth-child(2) { background: lime; inline-size:12px; block-size:8px; z-index:2; } -grid2:nth-child(2) > item:nth-child(2) { background: purple; inline-size:8px; block-size:8px; z-index:2; } -</style> -</head> -<body> -<div style="display:none"> -<grid> - <div> - <grid2> - <item></item> - <item></item> - </grid2><grid2> - <item></item> - <item></item> - </grid2> - </div> -</grid> -</div> - -<script> -let wms = [ "hl", "hr", "vll", "vrr", "vlr", "vrl", "swl", "swr", ]; -let ats = [ "start", "self-start", "center", "end", "self-end", "stretch", "space-between", "space-around", "space-evenly", ]; -let acs = [ "start", "center", "end", ]; -let grid = document.getElementsByTagName('grid')[0]; -for (const ac of acs) { - for (const at of ats) { - for (const wm of wms) { - let e = grid.cloneNode(true); - e.className = wm; - e.children[0].children[1].style.className = wm; - e.children[0].children[0].style.alignContent = at; - e.children[0].children[1].style.alignContent = at; - e.style.alignContent = ac; - document.body.appendChild(e); - } - } -} -</script> - -</body> -</html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-001.html deleted file mode 100644 index 4ff3e610875..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-001.html +++ /dev/null @@ -1,80 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid Test: Masonry layout with `align-tracks` alignment</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-2"> - <link rel="match" href="masonry-align-tracks-001-ref.html"> - <style> -html,body { - color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; -} - -.hl { writing-mode: horizontal-tb; direction:ltr; } -.hr { writing-mode: horizontal-tb; direction:rtl; } -.vll { writing-mode: vertical-lr; direction:ltr; } -.vlr { writing-mode: vertical-lr; direction:rtl; } -.vrl { writing-mode: vertical-rl; direction:ltr; } -.vrr { writing-mode: vertical-rl; direction:rtl; } -.swl { writing-mode: sideways-lr; direction:ltr; } -.swr { writing-mode: sideways-lr; direction:rtl; } - -grid { - display: inline-grid; - gap: 1px 2px; - grid-template-columns: repeat(2,auto); - grid-template-rows: masonry; - background: content-box silver; - color: #444; - padding: 1px 2px; - block-size: 30px; - vertical-align: top; -} - -item { - background-color: #444; - color: #fff; - writing-mode: horizontal-tb; - direction: ltr; -} - -item:nth-child(1) { background: blue; inline-size:8px; block-size:8px; } -item:nth-child(2) { background: magenta; inline-size:8px; block-size:12px; } -item:nth-child(3) { background: lime; inline-size:12px; block-size:8px; } -item:nth-child(4) { background: purple; inline-size:8px; block-size:8px; } -</style> -</head> -<body> -<div style="display:none"> -<grid> - <item></item> - <item></item> - <item></item> - <item></item> -</grid> -</div> - -<script> -let wms = [ "hl", "hr", "vll", "vrr", "vlr", "vrl", "swl", "swr", ]; -let ats = [ "start", "self-start", "center", "end", "self-end", "stretch", "space-between", "space-around", "space-evenly", ]; -let acs = [ "start", "center", "end", ]; -let grid = document.getElementsByTagName('grid')[0]; -for (const ac of acs) { - for (const at of ats) { - for (const wm of wms) { - let e = grid.cloneNode(true); - e.className = wm; - e.style.alignTracks = at; - e.style.alignContent = ac; - document.body.appendChild(e); - } - } -} -</script> - -</body> -</html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-multi-001-ref.html b/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-multi-001-ref.html deleted file mode 100644 index b0bf3578618..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-multi-001-ref.html +++ /dev/null @@ -1,116 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>Reference: Masonry layout with multiple `align-tracks` values</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> -<style> -html,body { - color:black; background-color:white; font:15px/1 "Courier New", monospace; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-rows: auto; - grid-template-columns: repeat(8,50px); /*intentionally one more than align-tracks values*/ - gap: 3px 5px; - padding: 10px 3px 1px 7px; - border: solid; - border-width: 1px 7px 3px 5px; - background: lightgrey content-box; - height: 500px; - vertical-align: top; -} -.fallback { grid-template-columns:3px; padding:0; border:0; } -item { - background: grey; - height: 2em; - position: relative; - border: 1px solid; -} -.purple { background:purple; height:auto; border-top:3px solid; } -z { display: block; background: yellow; height: 0; width:80%; } -a { - position: absolute; - inset: 0; - top: auto; - border: 2px solid lime; -} -masonry-track { - display: grid; - gap: 3px 5px; -} -masonry-track:nth-child(1) { align-content:start } -masonry-track:nth-child(2) { align-content:end } -masonry-track:nth-child(3) { align-content:center } -masonry-track:nth-child(4) { align-content:stretch; grid-template-rows: auto auto repeat(3,max-content) } -masonry-track:nth-child(5) { align-content:space-between } -masonry-track:nth-child(6) { align-content:space-around } -masonry-track:nth-child(7) { align-content:space-evenly } -masonry-track:nth-child(8) { align-content:space-evenly } -</style> -</head> -<body> -<grid> - <masonry-track> - <item style="width:25px">1</item> - <item>11</item> - <item class="purple">20</item> - <item class="purple">24</item> - <item>29</item> - </masonry-track> - <masonry-track> - <item class="purple" style="height:50px">2</item> - <item class="purple" style="writing-mode:vertical-rl">16 vertical-rl</item> - </masonry-track> - <masonry-track> - <item style="margin-left:5px">3</item> - <item class="purple">12<z></z></item> - <item>17</item> - <item>25</item> - <item>33</item> - </masonry-track> - <masonry-track> - <item class="purple" style="margin-top:5px">4</item> - <item class="purple">10</item> - <item>15</item> - <item>23</item> - <item>31</item> - </masonry-track> - <masonry-track> - <item>5</item> - <item>13</item> - <item>21</item> - <item class="purple">28</item> - </masonry-track> - <masonry-track> - <item class="purple">6<a></a></item> - <item>9<a></a></item> - <item class="purple">18</item> - <item class="purple">22</item> - <item>27</item> - </masonry-track> - <masonry-track> - <item>7</item> - <item class="purple">14<z></z><a></a></item> - <item>19</item> - <item class="purple">26</item> - <item class="purple">30</item> - </masonry-track> - <masonry-track> - <item class="purple" style="writing-mode:vertical-lr">8 vertical-lr</item> - <item class="purple">32</item> - </masonry-track> -</grid> -<grid class="fallback" style="align-content:start"> - <item></item> -</grid> -<grid class="fallback" style="align-content:center"> - <item></item> -</grid> -<grid class="fallback" style="align-content:center"> - <item></item> -</grid> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-multi-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-multi-001.html deleted file mode 100644 index 0e20217da80..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-multi-001.html +++ /dev/null @@ -1,91 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid Test: Masonry layout with multiple `align-tracks` values</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-2"> - <link rel="match" href="masonry-align-tracks-multi-001-ref.html"> -<style> -html,body { - color:black; background-color:white; font:15px/1 "Courier New", monospace; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-rows: masonry; - grid-template-columns: repeat(8,50px); /*intentionally one more than align-tracks values*/ - gap: 3px 5px; - padding: 10px 3px 1px 7px; - border: solid; - border-width: 1px 7px 3px 5px; - background: lightgrey content-box; - align-tracks: start,end,center,stretch,space-between,space-around,space-evenly; - height: 500px; - vertical-align: top; -} -.fallback { grid-template-columns:3px; padding:0; border:0; } -item { - background: grey; - height: 2em; - position: relative; - border: 1px solid; -} -item:nth-child(2n) { background:purple; height:auto; border-top:3px solid; } -z { display: block; background: yellow; height: 20%; width:80%; } -a { - position: absolute; - inset: 0; - top: auto; - border: 2px solid lime; -} -</style> -</head> -<body> -<grid> - <item style="width:50%">1</item> - <item style="height:10%">2</item> - <item style="margin-left:10%">3</item> - <item style="margin-top:10%">4</item> - <item>5</item> - <item>6<a></a></item> - <item>7</item> - <item style="writing-mode:vertical-lr">8 vertical-lr</item> - <item>9<a></a></item> - <item>10</item> - <item>11</item> - <item>12<z></z></item> - <item>13</item> - <item><z></z>14<a></a></item> - <item>15</item> - <item style="writing-mode:vertical-rl">16 vertical-rl</item> - <item>17</item> - <item>18</item> - <item>19</item> - <item>20</item> - <item>21</item> - <item>22</item> - <item>23</item> - <item>24</item> - <item>25</item> - <item>26</item> - <item>27</item> - <item>28</item> - <item>29</item> - <item>30</item> - <item>31</item> - <item>32</item> - <item>33</item> -</grid> -<grid class="fallback" style="align-tracks:space-between"> - <item></item> -</grid> -<grid class="fallback" style="align-tracks:space-around"> - <item></item> -</grid> -<grid class="fallback" style="align-tracks:space-evenly"> - <item></item> -</grid> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-001-ref.html b/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-001-ref.html deleted file mode 100644 index 0712f14bb31..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-001-ref.html +++ /dev/null @@ -1,87 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>Reference: Masonry layout with `align-tracks:stretch`</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> -<style> -html,body { - color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-rows: 500px; - grid-template-columns: 150px 100px 50px; - gap: 3px 5px; - padding: 10px; - border: 3px solid; - background: lightgrey content-box; - height: 500px; -} -masonry-track { - display: grid; - gap: 3px 5px; - align-content: stretch; - height: 500px; -} -masonry-track:nth-child(1) { - grid-template-columns: 150px; - grid-template-rows: min-content min-content min-content auto min-content min-content min-content; -} -masonry-track:nth-child(2) { - grid-template-columns: 100px; - grid-template-rows: auto 50px auto auto 30px; -} -masonry-track:nth-child(3) { - grid-template-columns: 50px; - grid-template-rows: 30px 30px 30px auto 30px 30px auto auto; -} -item { - background: grey; - height: 30px; - position: relative; -} -.purple { background:purple; height:auto; } -z { display: block; background: yellow; height: 20%; width:80%; } -a { - position: absolute; - inset: 0; - top: auto; - border: 2px solid lime; -} -</style> -</head> -<body> -<grid> - <masonry-track> - <item style="border:10px solid; margin: 10px 0 5px 3px;">1</item> - <item>9<a></a></item> - <item>11</item> - <item class="purple">12<br><br><z></z></item> - <item class="purple" style="height:116px; border:2px solid; margin:1px">14<z></z><a></a></item> - <item style="align-self:start" class="purple">16</item> - <item>17</item> - </masonry-track> - <masonry-track> - <item class="purple">2</item> - <item style="height:40px; margin-top:10px" class="purple">4</item> - <item class="purple">6<a></a></item> - <item style="writing-mode:vertical-lr" class="purple">8 vertical</item> - <item>19</item> - </masonry-track> - <masonry-track> - <item>3</item> - <item>5</item> - <item>7</item> - <item class="purple">10 A<br>B</item> - <item>13</item> - <item>15</item> - <item style="margin:auto 0" class="purple">18</item> - <item style="margin-top: auto" class="purple">20</item> - </masonry-track> -</grid> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-001.html deleted file mode 100644 index d2fede7a8ed..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-001.html +++ /dev/null @@ -1,67 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid Test: Masonry layout with `align-tracks:stretch`</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-2"> - <link rel="match" href="masonry-align-tracks-stretch-001-ref.html"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> -<style> -html,body { - color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-rows: masonry; - grid-template-columns: 150px 100px 50px; - gap: 3px 5px; - padding: 10px; - border: 3px solid; - background: lightgrey content-box; - align-tracks: stretch; - height: 500px; -} -item { - background: grey; - height: 30px; - position: relative; -} -item:nth-child(2n) { background:purple; height:auto; } -item:nth-child(1) { border:10px solid; margin: 10px 0 5px 3px; } -z { display: block; background: yellow; height: 20%; width:80%; } -a { - position: absolute; - inset: 0; - top: auto; - border: 2px solid lime; -} -</style> -</head> -<body> -<grid> - <item>1</item> - <item>2</item> - <item>3</item> - <item style="max-height:40px; margin-top:10px">4</item> - <item>5</item> - <item>6<a></a></item> - <item>7</item> - <item style="writing-mode:vertical-lr">8 vertical</item> - <item>9<a></a></item> - <item>10 A<br>B</item> - <item>11</item> - <item>12<br><br><z></z></item> - <item>13</item> - <item style="max-height:120px; border:2px solid; box-sizing:border-box; margin:1px">14<z></z><a></a></item> - <item>15</item> - <item style="align-self:end">16</item> - <item>17</item> - <item style="margin:auto 0">18</item> - <item>19</item> - <item style="margin-top: auto">20</item> -</grid> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-002-ref.html b/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-002-ref.html deleted file mode 100644 index 01f24ea986f..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-002-ref.html +++ /dev/null @@ -1,68 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>Reference: Masonry layout with `align-tracks:stretch`</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> -<style> -html,body { - color:black; background-color:white; font:6px/1 monospace; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-rows: auto auto; - grid-template-columns: 30px; - gap: 1px 2px; - padding: 2px 3px 1px 1px; - border-style: solid; - border-width: 1px 7px 3px 5px; - border-inline-start-color: magenta; - border-block-start-color: blue; - background: lightgrey content-box; - block-size: 25px; - vertical-align: top; -} -item { - border-inline-start: 1px solid magenta; - border-block-start: 2px solid blue; -} -item:nth-child(2n+1) { background: grey; } -item:nth-child(2n) { background: cyan; } -.hl { writing-mode: horizontal-tb; direction:ltr; } -.hr { writing-mode: horizontal-tb; direction:rtl; } -.vll { writing-mode: vertical-lr; direction:ltr; } -.vlr { writing-mode: vertical-lr; direction:rtl; } -.vrl { writing-mode: vertical-rl; direction:ltr; } -.vrr { writing-mode: vertical-rl; direction:rtl; } -.swl { writing-mode: sideways-lr; direction:ltr; } -.swr { writing-mode: sideways-lr; direction:rtl; } -</style> -</head> -<body> -<div style="display:none"> -<grid> - <item>1</item> - <item>2a<br>2b</item> -</grid> -</div> -<script> -let wms = [ "hl", "hr", "vll", "vrr", "vlr", "vrl", "swl", "swr", ]; -let grid = document.getElementsByTagName('grid')[0]; -for (const reorder of [false, true]) { - for (const cb_wm of wms) { - for (const child_wm of wms) { - let e = grid.cloneNode(true); - e.className = cb_wm; - e.children[1].className = child_wm; - if (reorder) { - e.children[0].style.order = '1'; - } - document.body.appendChild(e); - } - } -} -</script> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-002.html b/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-002.html deleted file mode 100644 index 1631ac3c07d..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/align-tracks/masonry-align-tracks-stretch-002.html +++ /dev/null @@ -1,71 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid Test: Masonry layout with `align-tracks:stretch`</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-2"> - <link rel="match" href="masonry-align-tracks-stretch-002-ref.html"> -<style> -html,body { - color:black; background-color:white; font:6px/1 monospace; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-rows: masonry; - grid-template-columns: 30px; - gap: 1px 2px; - padding: 2px 3px 1px 1px; - border-style: solid; - border-width: 1px 7px 3px 5px; - border-inline-start-color: magenta; - border-block-start-color: blue; - background: lightgrey content-box; - align-tracks: stretch; - block-size: 25px; - vertical-align: top; -} -item { - border-inline-start: 1px solid magenta; - border-block-start: 2px solid blue; -} -item:nth-child(2n+1) { background: grey; } -item:nth-child(2n) { background: cyan; } -.hl { writing-mode: horizontal-tb; direction:ltr; } -.hr { writing-mode: horizontal-tb; direction:rtl; } -.vll { writing-mode: vertical-lr; direction:ltr; } -.vlr { writing-mode: vertical-lr; direction:rtl; } -.vrl { writing-mode: vertical-rl; direction:ltr; } -.vrr { writing-mode: vertical-rl; direction:rtl; } -.swl { writing-mode: sideways-lr; direction:ltr; } -.swr { writing-mode: sideways-lr; direction:rtl; } -</style> -</head> -<body> -<div style="display:none"> -<grid> - <item>1</item> - <item>2a<br>2b</item> -</grid> -</div> -<script> -let wms = [ "hl", "hr", "vll", "vrr", "vlr", "vrl", "swl", "swr", ]; -let grid = document.getElementsByTagName('grid')[0]; -for (const reorder of [false, true]) { - for (const cb_wm of wms) { - for (const child_wm of wms) { - let e = grid.cloneNode(true); - e.className = cb_wm; - e.children[1].className = child_wm; - if (reorder) { - e.children[0].style.order = '1'; - } - document.body.appendChild(e); - } - } -} -</script> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-001-ref.html b/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-001-ref.html deleted file mode 100644 index 912c9c9f823..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-001-ref.html +++ /dev/null @@ -1,114 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>Reference: Masonry layout with `justify-tracks` alignment</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <style> -html,body { - color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; -} - -.hl { writing-mode: horizontal-tb; direction:ltr; } -.hr { writing-mode: horizontal-tb; direction:rtl; } -.vll { writing-mode: vertical-lr; direction:ltr; } -.vlr { writing-mode: vertical-lr; direction:rtl; } -.vrl { writing-mode: vertical-rl; direction:ltr; } -.vrr { writing-mode: vertical-rl; direction:rtl; } -.swl { writing-mode: sideways-lr; direction:ltr; } -.swr { writing-mode: sideways-lr; direction:rtl; } - -grid { - display: inline-flex; - flex-flow: row wrap; - background: content-box silver; - color: #444; - padding: 1px 2px; - inline-size: 30px; - vertical-align: top; -} -grid.vll, grid.vrr, grid.vlr, grid.vrl, grid.swl, grid.swr { - block-size: 17px; -} -grid2 { - display: inline-grid; - column-gap: 2px; - grid-template-columns: 8px 8px; - vertical-align: top; -} - -item { - background-color: #444; - color: #fff; - writing-mode: horizontal-tb; - direction: ltr; -} - -grid > div { - display: inline-flex; - flex-flow: row wrap; - inline-size: min-content; -} - -grid2:nth-child(1) { margin-block-end:1px; } -grid2:nth-child(2) { inline-size: 22px; block-size: 12px; } -.vll grid2:nth-child(2) { margin-block-start:-4px; grid-template-columns: 12px 8px;} -.vrr grid2:nth-child(2) { margin-block-start:-4px; grid-template-columns: 12px 8px;} -.vlr grid2:nth-child(2) { margin-block-start:-4px; grid-template-columns: 12px 8px;} -.vrl grid2:nth-child(2) { margin-block-start:-4px; grid-template-columns: 12px 8px;} -.swl grid2:nth-child(2) { margin-block-start:-4px; grid-template-columns: 12px 8px;} -.swr grid2:nth-child(2) { margin-block-start:-4px; grid-template-columns: 12px 8px;} - -.vll grid2:nth-child(1) { inline-size: 22px; } -.vrr grid2:nth-child(1) { inline-size: 22px; } -.vlr grid2:nth-child(1) { inline-size: 22px; } -.vrl grid2:nth-child(1) { inline-size: 22px; } -.swl grid2:nth-child(1) { inline-size: 22px; } -.swr grid2:nth-child(1) { inline-size: 22px; } - -grid2:nth-child(1) > item:nth-child(1) { background: blue; inline-size:8px; block-size:8px; z-index:1; } -grid2:nth-child(2) > item:nth-child(1) { background: magenta; inline-size:8px; block-size:12px; z-index:1; } -grid2:nth-child(1) > item:nth-child(2) { background: lime; inline-size:12px; block-size:8px; z-index:2; } -grid2:nth-child(2) > item:nth-child(2) { background: purple; inline-size:8px; block-size:8px; z-index:2; } -</style> -</head> -<body> -<div style="display:none"> -<grid> - <div> - <grid2> - <item></item> - <item></item> - </grid2><grid2> - <item></item> - <item></item> - </grid2> - </div> -</grid> -</div> - -<script> -let wms = [ "hl", "hr", "vll", "vrr", "vlr", "vrl", "swl", "swr", ]; -let ats = [ "start", "self-start", "center", "end", "self-end", "stretch", "space-between", "space-around", "space-evenly", ]; -let acs = [ "start", "center", "end", ]; -let grid = document.getElementsByTagName('grid')[0]; -for (const ac of acs) { - for (const at of ats) { - for (const wm of wms) { - let e = grid.cloneNode(true); - e.className = wm; - e.children[0].children[0].children[0].className = "vrl"; - e.children[0].children[0].style.justifyContent = at; - e.children[0].children[1].style.justifyContent = at; - e.style.justifyContent = ac; - document.body.appendChild(e); - } - } -} -</script> - -</body> -</html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-001.html deleted file mode 100644 index bfd3c1ca587..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-001.html +++ /dev/null @@ -1,81 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid Test: Masonry layout with `justify-tracks` alignment</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-2"> - <link rel="match" href="masonry-justify-tracks-001-ref.html"> - <style> -html,body { - color:black; background-color:white; font:10px/1 monospace; padding:0; margin:0; -} - -.hl { writing-mode: horizontal-tb; direction:ltr; } -.hr { writing-mode: horizontal-tb; direction:rtl; } -.vll { writing-mode: vertical-lr; direction:ltr; } -.vlr { writing-mode: vertical-lr; direction:rtl; } -.vrl { writing-mode: vertical-rl; direction:ltr; } -.vrr { writing-mode: vertical-rl; direction:rtl; } -.swl { writing-mode: sideways-lr; direction:ltr; } -.swr { writing-mode: sideways-lr; direction:rtl; } - -grid { - display: inline-grid; - gap: 1px 2px; - grid-template-columns: masonry; - grid-template-rows: repeat(2,auto); - background: content-box silver; - color: #444; - padding: 1px 2px; - inline-size: 30px; - vertical-align: top; -} - -item { - background-color: #444; - color: #fff; - writing-mode: horizontal-tb; - direction: ltr; -} - -item:nth-child(1) { background: blue; inline-size:8px; block-size:8px; } -item:nth-child(2) { background: magenta; inline-size:8px; block-size:12px; } -item:nth-child(3) { background: lime; inline-size:12px; block-size:8px; } -item:nth-child(4) { background: purple; inline-size:8px; block-size:8px; } -</style> -</head> -<body> -<div style="display:none"> -<grid> - <item></item> - <item></item> - <item></item> - <item></item> -</grid> -</div> - -<script> -let wms = [ "hl", "hr", "vll", "vrr", "vlr", "vrl", "swl", "swr", ]; -let ats = [ "start", "self-start", "center", "end", "self-end", "stretch", "space-between", "space-around", "space-evenly", ]; -let acs = [ "start", "center", "end", ]; -let grid = document.getElementsByTagName('grid')[0]; -for (const ac of acs) { - for (const at of ats) { - for (const wm of wms) { - let e = grid.cloneNode(true); - e.className = wm; - e.children[0].className = "vrl"; - e.style.justifyTracks = at; - e.style.justifyContent = ac; - document.body.appendChild(e); - } - } -} -</script> - -</body> -</html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-multi-001-ref.html b/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-multi-001-ref.html deleted file mode 100644 index 319ef217ea7..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-multi-001-ref.html +++ /dev/null @@ -1,117 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>Reference: Masonry layout with multiple `justify-tracks` values</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> -<style> -html,body { - color:black; background-color:white; font:15px/1 "Courier New", monospace; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-columns: auto; - grid-template-rows: repeat(8,50px); - gap: 3px 5px; - padding: 10px 3px 1px 7px; - border: solid; - border-width: 1px 7px 3px 5px; - background: lightgrey content-box; - width: 500px; - vertical-justify: top; -} -.fallback { grid-template-rows:3px; padding:0; border:0; display: grid; } -item { - background: grey; - width: 3ch; - position: relative; - border: 1px solid; -} -.purple { background:purple; width:auto; border-left:3px solid; } -z { display: block; background: yellow; height: calc(.2 * (50px - 2px)); width:calc(.8 * 2ch); } -a { - position: absolute; - inset: 0; - top: auto; - border: 2px solid lime; -} -masonry-track { - display: grid; - grid-auto-flow: column; - gap: 3px 5px; -} -masonry-track:nth-child(1) { justify-content:start } -masonry-track:nth-child(2) { justify-content:end } -masonry-track:nth-child(3) { justify-content:center } -masonry-track:nth-child(4) { justify-content:stretch; grid-template-columns: repeat(3,auto) repeat(2,max-content); } -masonry-track:nth-child(5) { justify-content:space-between } -masonry-track:nth-child(6) { justify-content:space-around } -masonry-track:nth-child(7) { justify-content:space-evenly } -masonry-track:nth-child(8) { justify-content:space-evenly } -</style> -</head> -<body> -<grid> - <masonry-track> - <item style="width:50px">1</item> - <item class="purple">20</item> - <item class="purple">26</item> - <item>33</item> - </masonry-track> - <masonry-track> - <item class="purple" style="height:25px">2</item> - <item>9<a></a></item> - <item class="purple">18</item> - <item>25</item> - </masonry-track> - <masonry-track> - <item style="margin-left:10px">3</item> - <item>15</item> - <item class="purple">24</item> - <item class="purple">32</item> - </masonry-track> - <masonry-track> - <item class="purple" style="margin-top:5px">4</item> - <item class="purple">10</item> - <item class="purple" style="writing-mode:vertical-rl">16</item> - <item>23</item> - <item>31</item> - </masonry-track> - <masonry-track> - <item>5</item> - <item>13</item> - <item class="purple">22</item> - <item>29</item> - </masonry-track> - <masonry-track> - <item class="purple">6<a></a></item> - <item>11</item> - <item>19</item> - <item class="purple">28</item> - </masonry-track> - <masonry-track> - <item>7</item> - <item class="purple"><z></z>14<a></a></item> - <item>21</item> - <item class="purple">30</item> - </masonry-track> - <masonry-track> - <item class="purple" style="writing-mode:vertical-lr">8</item> - <item class="purple">12<z></z></item> - <item>17</item> - <item>27</item> - </masonry-track> -</grid> -<grid class="fallback" style="justify-content:start"> - <item></item> -</grid> -<grid class="fallback" style="justify-content:center"> - <item></item> -</grid> -<grid class="fallback" style="justify-content:center"> - <item></item> -</grid> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-multi-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-multi-001.html deleted file mode 100644 index 011c487cb72..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-multi-001.html +++ /dev/null @@ -1,91 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid Test: Masonry layout with multiple `justify-tracks` values</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-2"> - <link rel="match" href="masonry-justify-tracks-multi-001-ref.html"> -<style> -html,body { - color:black; background-color:white; font:15px/1 "Courier New", monospace; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-columns: masonry; - grid-template-rows: repeat(8,50px); /*intentionally one more than justify-tracks values*/ - gap: 3px 5px; - padding: 10px 3px 1px 7px; - border: solid; - border-width: 1px 7px 3px 5px; - background: lightgrey content-box; - justify-tracks: start,end,center,stretch,space-between,space-around,space-evenly; - width: 500px; - vertical-justify: top; -} -.fallback { grid-template-rows:3px; padding:0; border:0; display: grid; } -item { - background: grey; - width: 3ch; - position: relative; - border: 1px solid; -} -item:nth-child(2n) { background:purple; width:auto; border-left:3px solid; } -z { display: block; background: yellow; height: 20%; width:80%; } -a { - position: absolute; - inset: 0; - top: auto; - border: 2px solid lime; -} -</style> -</head> -<body> -<grid> - <item style="width:10%">1</item> - <item style="height:50%">2</item> - <item style="margin-left:2%">3</item> - <item style="margin-top:1%">4</item> - <item>5</item> - <item>6<a></a></item> - <item>7</item> - <item style="writing-mode:vertical-lr">8</item> - <item>9<a></a></item> - <item>10</item> - <item>11</item> - <item>12<z></z></item> - <item>13</item> - <item><z></z>14<a></a></item> - <item>15</item> - <item style="writing-mode:vertical-rl">16</item> - <item>17</item> - <item>18</item> - <item>19</item> - <item>20</item> - <item>21</item> - <item>22</item> - <item>23</item> - <item>24</item> - <item>25</item> - <item>26</item> - <item>27</item> - <item>28</item> - <item>29</item> - <item>30</item> - <item>31</item> - <item>32</item> - <item>33</item> -</grid> -<grid class="fallback" style="justify-tracks:space-between"> - <item></item> -</grid> -<grid class="fallback" style="justify-tracks:space-around"> - <item></item> -</grid> -<grid class="fallback" style="justify-tracks:space-evenly"> - <item></item> -</grid> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-001-ref.html b/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-001-ref.html deleted file mode 100644 index 39053051cc8..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-001-ref.html +++ /dev/null @@ -1,86 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>Reference: Masonry layout with `justify-tracks:stretch`</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> -<style> -html,body { - color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-rows: 150px 100px 50px; - grid-template-columns: 500px; - gap: 5px 3px; - padding: 10px; - border: 3px solid; - background: lightgrey content-box; - width: 500px; -} -masonry-track { - display: grid; - gap: 5px 3px; - width: 500px; -} -masonry-track:nth-child(1) { - grid-template-rows: 150px; - grid-template-columns: max-content auto auto min-content min-content auto; -} -masonry-track:nth-child(2) { - grid-template-rows: 100px; - grid-template-columns: auto 50px 3ch 3ch 3ch min-content min-content; -} -masonry-track:nth-child(3) { - grid-template-rows: 50px; - grid-template-columns: 3ch auto 3ch 3ch auto 3ch auto; -} -item { - background: grey; - width: 3ch; - position: relative; -} -.purple { background:purple; width:auto; } -z { display: block; background: yellow; width: 20%; height:10%; } -a { - position: absolute; - inset: 0; - left: auto; - border: 2px solid lime; -} -</style> -</head> -<body> -<grid> - <masonry-track> - <item style="border:10px solid; margin:10px 0 5px 3px;">1</item> - <item style="writing-mode:vertical-lr" class="purple">8<br>vertical</item> - <item class="purple">10</item> - <item class="purple" style="width:86px; border:solid; border-width:0 2px; margin-right:1px">12<z></z></item> - <item>15</item> - <item style="margin:0 auto" class="purple">18</item> - </masonry-track> - <masonry-track> - <item class="purple">2</item> - <item style="width:40px; margin-right:10px" class="purple">4</item> - <item>5</item> - <item>9<a></a></item> - <item>13</item> - <item style="justify-self:start" class="purple">16</item> - <item>19</item> - </masonry-track> - <masonry-track> - <item>3</item> - <item class="purple">6<a></a></item> - <item>7</item> - <item>11</item> - <item class="purple">14<z></z><a></a></item> - <item>17</item> - <item style="margin-left: auto" class="purple">20</item> - </masonry-track> -</grid> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-001.html deleted file mode 100644 index 17cb3218218..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-001.html +++ /dev/null @@ -1,67 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid Test: Masonry layout with `justify-tracks:stretch`</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-2"> - <link rel="match" href="masonry-justify-tracks-stretch-001-ref.html"> - <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> -<style> -html,body { - color:black; background-color:white; font:16px/1 Ahem; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-rows: 150px 100px 50px; - grid-template-columns: masonry; - justify-tracks: stretch; - gap: 5px 3px; - padding: 10px; - border: 3px solid; - background: lightgrey content-box; - width: 500px; -} -item { - background: grey; - width: 3ch; - position: relative; -} -item:nth-child(2n) { background:purple; width:auto; } -item:nth-child(1) { border:10px solid; margin: 10px 0 5px 3px; } -z { display: block; background: yellow; width: 20%; height:10%; } -a { - position: absolute; - inset: 0; - left: auto; - border: 2px solid lime; -} -</style> -</head> -<body> -<grid> - <item>1</item> - <item>2</item> - <item>3</item> - <item style="max-width:40px; margin-right:10px">4</item> - <item>5</item> - <item>6<a></a></item> - <item>7</item> - <item style="writing-mode:vertical-lr">8 vertical</item> - <item>9<a></a></item> - <item>10</item> - <item>11</item> - <item style="max-width:90px; border:solid; border-width:0 2px; box-sizing:border-box; margin-right:1px">12<z></z></item> - <item>13</item> - <item>14<z></z><a></a></item> - <item>15</item> - <item style="justify-self:start">16</item> - <item>17</item> - <item style="margin:0 auto">18</item> - <item>19</item> - <item style="margin-left: auto">20</item> -</grid> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-002-ref.html b/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-002-ref.html deleted file mode 100644 index 69759484f29..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-002-ref.html +++ /dev/null @@ -1,68 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>Reference: Masonry layout with `justify-tracks:stretch`</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> -<style> -html,body { - color:black; background-color:white; font:6px/1 monospace; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-columns: auto auto; - grid-template-rows: 30px; - gap: 1px 2px; - padding: 2px 3px 1px 1px; - border-style: solid; - border-width: 1px 7px 3px 5px; - border-inline-start-color: magenta; - border-block-start-color: blue; - background: lightgrey content-box; - inline-size: 25px; - vertical-align: top; -} -item { - border-inline-start: 1px solid magenta; - border-block-start: 2px solid blue; -} -item:nth-child(2n+1) { background: grey; } -item:nth-child(2n) { background: cyan; } -.hl { writing-mode: horizontal-tb; direction:ltr; } -.hr { writing-mode: horizontal-tb; direction:rtl; } -.vll { writing-mode: vertical-lr; direction:ltr; } -.vlr { writing-mode: vertical-lr; direction:rtl; } -.vrl { writing-mode: vertical-rl; direction:ltr; } -.vrr { writing-mode: vertical-rl; direction:rtl; } -.swl { writing-mode: sideways-lr; direction:ltr; } -.swr { writing-mode: sideways-lr; direction:rtl; } -</style> -</head> -<body> -<div style="display:none"> -<grid> - <item>1</item> - <item>2a<br>2b</item> -</grid> -</div> -<script> -let wms = [ "hl", "hr", "vll", "vrr", "vlr", "vrl", "swl", "swr", ]; -let grid = document.getElementsByTagName('grid')[0]; -for (const reorder of [false, true]) { - for (const cb_wm of wms) { - for (const child_wm of wms) { - let e = grid.cloneNode(true); - e.className = cb_wm; - e.children[1].className = child_wm; - if (reorder) { - e.children[0].style.order = '1'; - } - document.body.appendChild(e); - } - } -} -</script> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-002.html b/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-002.html deleted file mode 100644 index 6b7746722dc..00000000000 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/justify-tracks/masonry-justify-tracks-stretch-002.html +++ /dev/null @@ -1,72 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid Test: Masonry layout with `justify-tracks:stretch`</title> - <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-2"> - <link rel="match" href="masonry-justify-tracks-stretch-002-ref.html"> -<style> -html,body { - color:black; background-color:white; font:6px/1 monospace; padding:0; margin:0; -} -grid { - display: inline-grid; - grid-template-columns: masonry; - grid-template-rows: 30px; - gap: 1px 2px; - padding: 2px 3px 1px 1px; - border-style: solid; - border-width: 1px 7px 3px 5px; - border-inline-start-color: magenta; - border-block-start-color: blue; - background: lightgrey content-box; - justify-tracks: stretch; - inline-size: 25px; - vertical-align: top; -} -item { - position: relative; - border-inline-start: 1px solid magenta; - border-block-start: 2px solid blue; -} -item:nth-child(2n+1) { background: grey; } -item:nth-child(2n) { background: cyan; } -.hl { writing-mode: horizontal-tb; direction:ltr; } -.hr { writing-mode: horizontal-tb; direction:rtl; } -.vll { writing-mode: vertical-lr; direction:ltr; } -.vlr { writing-mode: vertical-lr; direction:rtl; } -.vrl { writing-mode: vertical-rl; direction:ltr; } -.vrr { writing-mode: vertical-rl; direction:rtl; } -.swl { writing-mode: sideways-lr; direction:ltr; } -.swr { writing-mode: sideways-lr; direction:rtl; } -</style> -</head> -<body> -<div style="display:none"> -<grid> - <item>1</item> - <item>2a<br>2b</item> -</grid> -</div> -<script> -let wms = [ "hl", "hr", "vll", "vrr", "vlr", "vrl", "swl", "swr", ]; -let grid = document.getElementsByTagName('grid')[0]; -for (const reorder of [false, true]) { - for (const cb_wm of wms) { - for (const child_wm of wms) { - let e = grid.cloneNode(true); - e.className = cb_wm; - e.children[1].className = child_wm; - if (reorder) { - e.children[0].style.order = '1'; - } - document.body.appendChild(e); - } - } -} -</script> -</body></html> diff --git a/tests/wpt/tests/css/css-grid/subgrid/align-self-baseline-with-subgrid-mbp.html b/tests/wpt/tests/css/css-grid/subgrid/align-self-baseline-with-subgrid-mbp.html new file mode 100644 index 00000000000..bb9f8444835 --- /dev/null +++ b/tests/wpt/tests/css/css-grid/subgrid/align-self-baseline-with-subgrid-mbp.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> +<head> +<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com"> +<meta name="assert" content="Margin, border, and padding of subgrids should influence the offset of items in the same baseline alignment context"> +<link rel="help" href="https://drafts.csswg.org/css-grid-2/#subgrid-item-contribution"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<style> +html,body { + color:black; background-color:white; padding:0; margin:0; +} +.grid { + font:16px/1 Ahem; + display: inline-grid; + border: 1px solid black; + grid-template-columns: auto auto; +} +.subgrid { + display: grid; + grid-template-rows: subgrid; + border: 9px solid blue; + margin-top: 15px; + padding-top: 6px; +} +.first-baseline { + align-self: baseline; +} +</style> +</head> +<body onload="checkLayout('.first-baseline')"> +<div id="target" class="grid"> + <div data-offset-y="31" class="first-baseline">X</div> + <div class="subgrid"> + <div data-offset-y="31" class="first-baseline">X</div> + </div> +</div> +</body> +</html> diff --git a/tests/wpt/tests/css/css-masking/clip-path/clip-path-foreignobject-non-zero-xy.html b/tests/wpt/tests/css/css-masking/clip-path/clip-path-foreignobject-non-zero-xy.html new file mode 100644 index 00000000000..a63f4c8aa29 --- /dev/null +++ b/tests/wpt/tests/css/css-masking/clip-path/clip-path-foreignobject-non-zero-xy.html @@ -0,0 +1,14 @@ +<!doctype html> +<title>CSS Masking: clip-path on a foreignObject with non-zero 'x' and 'y' render correctly</title> +<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-clip-path"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1218383"> +<link rel="match" href="reference/green-100x100.html"> +<svg viewBox="25 50 200 100" width="200"> + <rect x="25" y="50" width="100" height="100" fill="red"/> + <clipPath id="r"> + <rect x="25" y="50" width="100" height="100"/> + </clipPath> + <foreignObject x="25" y="50" width="150" height="100" clip-path="url(#r)"> + <div style="width: 100px; height: 100px; background-color: green; border-right: 50px solid red"></div> + </foreignObject> +</svg> diff --git a/tests/wpt/tests/css/css-masking/clip-path/clip-path-shape-foreignobject-non-zero-xy.html b/tests/wpt/tests/css/css-masking/clip-path/clip-path-shape-foreignobject-non-zero-xy.html new file mode 100644 index 00000000000..4e221f36e4c --- /dev/null +++ b/tests/wpt/tests/css/css-masking/clip-path/clip-path-shape-foreignobject-non-zero-xy.html @@ -0,0 +1,11 @@ +<!doctype html> +<title>CSS Masking: clip-path on a foreignObject with non-zero 'x' and 'y' render correctly</title> +<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-clip-path"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1218383"> +<link rel="match" href="reference/green-100x100.html"> +<svg viewBox="25 50 200 100" width="200"> + <rect x="25" y="50" width="100" height="100" fill="red"/> + <foreignObject x="25" y="50" width="150" height="100" clip-path="inset(0 50 0 0)"> + <div style="width: 100px; height: 100px; background-color: green; border-right: 50px solid red"></div> + </foreignObject> +</svg> diff --git a/tests/wpt/tests/css/css-position/sticky/position-sticky-offset-print.html b/tests/wpt/tests/css/css-position/sticky/position-sticky-offset-print.html new file mode 100644 index 00000000000..3954bbcf441 --- /dev/null +++ b/tests/wpt/tests/css/css-position/sticky/position-sticky-offset-print.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1485969"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div id="scroller" style="position:relative; width:200px; height:100px; overflow:hidden;"> + <div style="position:absolute; width:1000px;"> + <div style="position:sticky; left:0; height:100px; width:100px; background:green;"></div> + </div> + <div style="width:100px; height:100px; background:red;"></div> +</div> +<script> +document.getElementById('scroller').scrollLeft = 100; +</script> diff --git a/tests/wpt/tests/css/css-properties-values-api/determine-registration.html b/tests/wpt/tests/css/css-properties-values-api/determine-registration.html index 20cddc48adc..99e39c191ec 100644 --- a/tests/wpt/tests/css/css-properties-values-api/determine-registration.html +++ b/tests/wpt/tests/css/css-properties-values-api/determine-registration.html @@ -46,6 +46,38 @@ test_with_at_property({ }); }, '@property later in document order wins'); +test_with_at_property({ + syntax: '"<length>"', + inherits: false, + initialValue: '10px' +}, (name1) => { + with_at_property({ + name: name1, + syntax: '"<length>"', + inherits: true, + initialValue: '20px' + }, (name2) => { + assert_equals(name1, name2); + assert_equals(getComputedStyle(div).getPropertyValue(name2), '20px'); + }); +}, '@property later in document order wins (overridding definition with inherits=true)'); + +test_with_at_property({ + syntax: '"<length>"', + inherits: true, + initialValue: '10px' +}, (name1) => { + with_at_property({ + name: name1, + syntax: '"<length>"', + inherits: false, + initialValue: '20px' + }, (name2) => { + assert_equals(name1, name2); + assert_equals(getComputedStyle(div).getPropertyValue(name2), '20px'); + }); +}, '@property later in document order wins (overridding definition with inherits=false)'); + test(() => { let name = generate_name(); diff --git a/tests/wpt/tests/css/css-properties-values-api/get-computed-style-enumeration.html b/tests/wpt/tests/css/css-properties-values-api/get-computed-style-enumeration.html new file mode 100644 index 00000000000..909247f69a8 --- /dev/null +++ b/tests/wpt/tests/css/css-properties-values-api/get-computed-style-enumeration.html @@ -0,0 +1,96 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#at-property-rule"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + @property --inherited-length-1 { + syntax: "<length>"; + inherits: true; + initial-value: 10px; + } + @property --inherited-length-2 { + syntax: "<length>"; + inherits: true; + initial-value: 20px; + } + @property --non-inherited-length-1 { + syntax: "<length>"; + inherits: false; + initial-value: 30px; + } + @property --non-inherited-length-2 { + syntax: "<length>"; + inherits: false; + initial-value: 40px; + } + @property --inherited-no-initial-value-1 { + syntax: "*"; + inherits: true; + } + @property --inherited-no-initial-value-2 { + syntax: "*"; + inherits: true; + } + @property --inherited-no-initial-value-3 { + syntax: "*"; + inherits: true; + } + @property --non-inherited-no-initial-value-1 { + syntax: "*"; + inherits: false; + } + @property --non-inherited-no-initial-value-2 { + syntax: "*"; + inherits: false; + } + @property --non-inherited-no-initial-value-3 { + syntax: "*"; + inherits: false; + } + #parent { + --inherited-no-initial-value-2: parent-A; + --non-inherited-no-initial-value-2: parent-B; + --non-registered-property-2: parent-C; + } + #node { + --inherited-length-1: 50px; + --non-inherited-length-1: 60px; + --inherited-no-initial-value-1: child-A; + --non-inherited-no-initial-value-1: child-B; + --non-registered-property-1: child-C; + } +</style> +<div id="parent"><div id="node"></div></div> +<script> + let style = window.getComputedStyle(document.getElementById("node")); + let properties = new Map(); + Array.from(style).filter(name => name.startsWith("--")) + .forEach(name => properties.set(name, style.getPropertyValue(name))); + + test(() => { + assert_equals(properties.get("--inherited-length-1"), "50px"); + assert_equals(properties.get("--non-inherited-length-1"), "60px"); + assert_equals(properties.get("--inherited-no-initial-value-1"), "child-A"); + assert_equals(properties.get("--non-inherited-no-initial-value-1"), "child-B"); + assert_equals(properties.get("--non-registered-property-1"), "child-C"); + }, "Custom properties specified on the node exposed when enumerating computed style."); + + test(() => { + assert_equals(properties.get("--inherited-no-initial-value-2"), "parent-A"); + assert_equals(properties.get("--non-registered-property-2"), "parent-C"); + }, "Inherited custom properties specified on the parent exposed when enumerating computed style."); + + test(() => { + assert_equals(properties.get("--inherited-length-2"), "20px"); + assert_equals(properties.get("--non-inherited-length-2"), "40px"); + }, "Unspecified properties with initial values exposed when enumerating computed style."); + + test(() => { + assert_false(properties.has("--non-inherited-no-initial-value-2")); + }, "Non-inherited custom properties specified on the parent without initial values not exposed when enumerating computed style."); + + test(() => { + assert_false(properties.has("--inherited-no-initial-value-3"), "inherited"); + assert_false(properties.has("--non-inherited-no-initial-value-3"), "non-inherited"); + }, "Unspecified properties without initial values not exposed when enumerating computed style."); +</script> diff --git a/tests/wpt/tests/css/css-properties-values-api/invalid-at-computed-value-time.html b/tests/wpt/tests/css/css-properties-values-api/invalid-at-computed-value-time.html new file mode 100644 index 00000000000..56a7756f406 --- /dev/null +++ b/tests/wpt/tests/css/css-properties-values-api/invalid-at-computed-value-time.html @@ -0,0 +1,73 @@ +<!DOCTYPE HTML> +<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api/#dom-propertydescriptor-inherits" /> +<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api/#register-a-custom-property" /> +<link rel="help" href="https://drafts.csswg.org/css-variables-2/#invalid-at-computed-value-time" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=outer><div id=inner></div></div> +<script> + +test(function(){ + CSS.registerProperty({name: '--p1', syntax: '*', initialValue: '0px', inherits: true}); + outer.style = '--p1: 42px'; + inner.style = '--p1: var(--undefined)'; + assert_equals(getComputedStyle(inner).getPropertyValue('--p1'), ''); + + CSS.registerProperty({name: '--p2', syntax: '*', initialValue: '0px', inherits: false}); + outer.style = '--p2: 42px'; + inner.style = '--p2: var(--undefined)'; + assert_equals(getComputedStyle(inner).getPropertyValue('--p2'), ''); +}, "Universal syntax: Undefined reference results in guaranteed-invalid value."); + +test(function(){ + CSS.registerProperty({name: '--p3', syntax: '<length>', initialValue: '0px', inherits: true}); + outer.style = '--p3: 42px'; + inner.style = '--p3: var(--undefined)'; + assert_equals(getComputedStyle(inner).getPropertyValue('--p3'), '42px'); + + CSS.registerProperty({name: '--p4', syntax: '<length>', initialValue: '0px', inherits: false}); + outer.style = '--p4: 42px'; + inner.style = '--incompatible: nolength; --p4: var(--undefined)'; + assert_equals(getComputedStyle(inner).getPropertyValue('--p4'), '0px'); +}, "Undefined reference results in unsetting the property."); + +test(function(){ + CSS.registerProperty({name: '--p5', syntax: '<length>', initialValue: '0px', inherits: true}); + outer.style = '--p5: 42px'; + inner.style = '--incompatible: nolength; --p5: var(--incompatible)'; + assert_equals(getComputedStyle(inner).getPropertyValue('--p5'), '42px'); + + CSS.registerProperty({name: '--p6', syntax: '<length>', initialValue: '0px', inherits: false}); + outer.style = '--p6: 42px'; + inner.style = '--incompatible: nolength; --p6: var(--incompatible)'; + assert_equals(getComputedStyle(inner).getPropertyValue('--p6'), '0px'); +}, "Syntax-incompatible reference results in unsetting the property."); + +test(function(){ + CSS.registerProperty({name: '--p7', syntax: '<length>', initialValue: '0px', inherits: true}); + outer.style = '--p7: 42px'; + inner.style = '--p7: var(--undefined, nolength)'; + assert_equals(getComputedStyle(inner).getPropertyValue('--p7'), '42px'); + + CSS.registerProperty({name: '--p8', syntax: '<length>', initialValue: '0px', inherits: false}); + outer.style = '--p8: 42px'; + inner.style = 'var(--undefined, nolength)'; + assert_equals(getComputedStyle(inner).getPropertyValue('--p8'), '0px'); +}, "Syntax-incompatible fallback results in unsetting the property."); + +test(function(){ + const rootElement = document.documentElement; + CSS.registerProperty({name: '--p9', syntax: '<length>', initialValue: '0px', inherits: true}); + rootElement.style = '--p9: var(--undefined);'; + assert_equals(getComputedStyle(rootElement).getPropertyValue('--p9'), '0px'); + + CSS.registerProperty({name: '--p10', syntax: '<length>', initialValue: '0px', inherits: true}); + rootElement.style = '--incompatible: nolength; --p10: var(--incompatible)'; + assert_equals(getComputedStyle(rootElement).getPropertyValue('--p10'), '0px'); + + CSS.registerProperty({name: '--p11', syntax: '<length>', initialValue: '0px', inherits: true}); + rootElement.style = '--p11: var(--undefined, nolength)'; + assert_equals(getComputedStyle(rootElement).getPropertyValue('--p11'), '0px'); +}, "Unsetting inherited properties on the root results in initial value."); + +</script> diff --git a/tests/wpt/tests/css/css-scoping/slotted-parsing.html b/tests/wpt/tests/css/css-scoping/slotted-parsing.html index bed4dedd560..e4657b588af 100644 --- a/tests/wpt/tests/css/css-scoping/slotted-parsing.html +++ b/tests/wpt/tests/css/css-scoping/slotted-parsing.html @@ -27,13 +27,14 @@ test_valid_selector("::slotted([attr]:hover)"); test_valid_selector("::slotted(:not(.a))"); - test_valid_selector("::slotted(*):is()"); - test_valid_selector("::slotted(*):is(:hover)"); - test_valid_selector("::slotted(*):is(#id)"); + test_valid_forgiving_selector("::slotted(*):is()"); + test_valid_forgiving_selector("::slotted(*):is(:hover)"); + test_valid_forgiving_selector("::slotted(*):is(#id)"); - test_valid_selector("::slotted(*):where()"); - test_valid_selector("::slotted(*):where(:hover)"); - test_valid_selector("::slotted(*):where(#id)"); + test_valid_forgiving_selector("::slotted(*):where()"); + test_valid_forgiving_selector("::slotted(*):where(:hover)"); + test_valid_forgiving_selector("::slotted(*):where(#id)"); + test_valid_forgiving_selector("::slotted(*):where(::before)"); // Allow tree-abiding pseudo elements after ::slotted test_valid_selector("::slotted(*)::before"); diff --git a/tests/wpt/tests/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html b/tests/wpt/tests/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html deleted file mode 100644 index 4b49e64323a..00000000000 --- a/tests/wpt/tests/css/css-text/text-spacing-trim/text-spacing-trim-combinations-001.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-spacing-trim-property"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="../support/get-char-advances.js"></script> -<style> -#container { - /* This test prefers fonts with the `halt` feature. */ - font-family: 'Yu Gothic', 'Noto Sans CJK JP'; - font-size: 10px; -} -</style> -<div id="container"> - <div expect="FFHF">国((国</div> - <div expect="FFHF">国・(国</div> - <div expect="FFHF">国)(国</div> - <div expect="FFHF">国 (国</div> - <div expect="FHFF">国))国</div> - <div expect="FHFF">国)・国</div> - <div expect="FHFF">国) 国</div> - <div expect="FFHHF">国(((国</div> - <div expect="FHHFF">国)))国</div> -</div> -<script> -const range = document.createRange(); - -function assertNode(element, expect) { - const advances = getCharAdvances(element); - const results = advances.map(advance => advance >= 8 ? 'F' : 'H'); - const result = results.join(''); - assert_equals(result, expect); -} - -for (const element of document.querySelectorAll('div[expect]')) { - test(() => { - let expect = element.getAttribute('expect'); - assertNode(element, expect); - }, `"${element.innerHTML}"`); -} -</script> diff --git a/tests/wpt/tests/css/css-ui/parsing/form-sizing-computed.html b/tests/wpt/tests/css/css-ui/parsing/form-sizing-computed.html index 557b1d5eb96..e508cd2050e 100644 --- a/tests/wpt/tests/css/css-ui/parsing/form-sizing-computed.html +++ b/tests/wpt/tests/css/css-ui/parsing/form-sizing-computed.html @@ -8,7 +8,7 @@ <body> <div id="target"></div> <script> -test_computed_value('form-sizing', 'auto'); -test_computed_value('form-sizing', 'normal'); +test_computed_value('form-sizing', 'fixed'); +test_computed_value('form-sizing', 'content'); </script> </body> diff --git a/tests/wpt/tests/css/css-ui/parsing/form-sizing-invalid.html b/tests/wpt/tests/css/css-ui/parsing/form-sizing-invalid.html index 80ab546f90e..5589707b25e 100644 --- a/tests/wpt/tests/css/css-ui/parsing/form-sizing-invalid.html +++ b/tests/wpt/tests/css/css-ui/parsing/form-sizing-invalid.html @@ -9,6 +9,8 @@ <script> test_invalid_value('form-sizing', 'none'); test_invalid_value('form-sizing', 'legacy'); +test_invalid_value('form-sizing', 'auto'); +test_invalid_value('form-sizing', 'normal'); test_invalid_value('form-sizing', 'normal auto'); test_invalid_value('form-sizing', '100%'); test_invalid_value('form-sizing', '10px'); diff --git a/tests/wpt/tests/css/css-ui/parsing/form-sizing-valid.html b/tests/wpt/tests/css/css-ui/parsing/form-sizing-valid.html index f7cc8f44c3c..d9d39f79132 100644 --- a/tests/wpt/tests/css/css-ui/parsing/form-sizing-valid.html +++ b/tests/wpt/tests/css/css-ui/parsing/form-sizing-valid.html @@ -7,7 +7,7 @@ <script src="/css/support/parsing-testcommon.js"></script> <body> <script> -test_valid_value('form-sizing', 'auto'); -test_valid_value('form-sizing', 'normal'); +test_valid_value('form-sizing', 'fixed'); +test_valid_value('form-sizing', 'content'); </script> </body> diff --git a/tests/wpt/tests/css/css-writing-modes/forms/file-input-computed-style.html b/tests/wpt/tests/css/css-writing-modes/forms/file-input-computed-style.html new file mode 100644 index 00000000000..417534e9bd6 --- /dev/null +++ b/tests/wpt/tests/css/css-writing-modes/forms/file-input-computed-style.html @@ -0,0 +1,39 @@ +<!doctype html> +<meta charset="utf-8"> +<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes/#block-flow"> +<title>File input writing mode computed style</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<input type="file" id="horizontal-input" style="writing-mode: horizontal-tb"> +<input type="file" id="vertical-lr-input" style="writing-mode: vertical-lr"> +<input type="file" id="vertical-rl-input" style="writing-mode: vertical-rl"> + +<script> +for (const element of document.querySelectorAll("[id^='horizontal-']")) { + test(() => { + const style = getComputedStyle(element); + const blockSize = parseInt(style.blockSize, 10); + const inlineSize = parseInt(style.inlineSize, 10); + assert_not_equals(blockSize, 0); + assert_not_equals(inlineSize, 0); + assert_greater_than(inlineSize, blockSize); + assert_equals(style.blockSize, style.height); + assert_equals(style.inlineSize, style.width); + }, `${element.id} block size should match height and inline size should match width`); +} + +for (const element of document.querySelectorAll("[id^='vertical-']")) { + test(() => { + const style = getComputedStyle(element); + const blockSize = parseInt(style.blockSize, 10); + const inlineSize = parseInt(style.inlineSize, 10); + assert_not_equals(blockSize, 0); + assert_not_equals(inlineSize, 0); + assert_greater_than(inlineSize, blockSize); + assert_equals(style.blockSize, style.width); + assert_equals(style.inlineSize, style.height); + }, `${element.id} block size should match width and inline size should match height`); +} +</script> diff --git a/tests/wpt/tests/css/css-writing-modes/forms/file-input-horizontal.optional.html b/tests/wpt/tests/css/css-writing-modes/forms/file-input-horizontal.optional.html new file mode 100644 index 00000000000..b7bcb340e0e --- /dev/null +++ b/tests/wpt/tests/css/css-writing-modes/forms/file-input-horizontal.optional.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder"> +<link rel="help" href="https://html.spec.whatwg.org/#file-upload-state-(type=file)"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow"> +<title>File input writing mode horizontal</title> +<meta charset="utf-8"> +<link rel="mismatch" href="file-input-vertical.optional.html"> +<link rel="mismatch" href="file-input-vertical-rtl.optional.html"> + +<!-- Note test description should be the same across all files to mismatch on. --> +<p>The file input below should match the correct writing mode.</p> +<input type="file" style="writing-mode: horizontal-tb"> diff --git a/tests/wpt/tests/css/css-writing-modes/forms/file-input-vertical-rtl.optional.html b/tests/wpt/tests/css/css-writing-modes/forms/file-input-vertical-rtl.optional.html new file mode 100644 index 00000000000..b58242555b3 --- /dev/null +++ b/tests/wpt/tests/css/css-writing-modes/forms/file-input-vertical-rtl.optional.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder"> +<link rel="help" href="https://html.spec.whatwg.org/#file-upload-state-(type=file)"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow"> +<title>File input writing mode vertical RTL</title> +<meta charset="utf-8"> +<link rel="mismatch" href="file-input-horizontal.optional.html"> +<link rel="mismatch" href="file-input-vertical.optional.html"> + +<!-- Note test description should be the same across all files to mismatch on. --> +<p>The file input below should match the correct writing mode.</p> +<input type="file" style="writing-mode: vertical-lr; direction: rtl;"> diff --git a/tests/wpt/tests/css/css-writing-modes/forms/file-input-vertical.optional.html b/tests/wpt/tests/css/css-writing-modes/forms/file-input-vertical.optional.html new file mode 100644 index 00000000000..c9b4272f84b --- /dev/null +++ b/tests/wpt/tests/css/css-writing-modes/forms/file-input-vertical.optional.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder"> +<link rel="help" href="https://html.spec.whatwg.org/#file-upload-state-(type=file)"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow"> +<title>File input writing mode vertical</title> +<meta charset="utf-8"> +<link rel="mismatch" href="file-input-vertical-rtl.optional.html"> +<link rel="mismatch" href="file-input-horizontal.optional.html"> + +<!-- Note test description should be the same across all files to mismatch on. --> +<p>The file input below should match the correct writing mode.</p> +<input type="file" style="writing-mode: vertical-lr"> diff --git a/tests/wpt/tests/css/css-writing-modes/forms/select-multiple-keyboard-selection.optional.html b/tests/wpt/tests/css/css-writing-modes/forms/select-multiple-keyboard-selection.optional.html new file mode 100644 index 00000000000..1b160946f5c --- /dev/null +++ b/tests/wpt/tests/css/css-writing-modes/forms/select-multiple-keyboard-selection.optional.html @@ -0,0 +1,87 @@ +<!doctype html> +<link rel="author" title="Aditya Keerthi" href="https://github.com/pxlcoder"> +<link rel="help" href="https://html.spec.whatwg.org/#the-select-element"> +<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#block-flow"> +<title>Test <select> multiple keyboard selection</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<select multiple size="4"></select> +<script> +const select = document.querySelector("select"); +for (let i = 0; i < 5; i++) { + const option = document.createElement("option"); + option.textContent = `Option ${i + 1}`; + select.appendChild(option); +} + +const arrow_left = "\uE012"; +const arrow_up = "\uE013"; +const arrow_right = "\uE014"; +const arrow_down = "\uE015"; + +for (const writingMode of ["horizontal-tb", "vertical-lr", "vertical-rl", "sideways-lr", "sideways-rl"]) { + if (!CSS.supports(`writing-mode: ${writingMode}`)) + continue; + + const isHorizontal = writingMode === "horizontal-tb"; + const isReversedBlockFlowDirection = writingMode.endsWith("-rl"); + const scrollBlockAxis = isHorizontal ? "scrollTop" : "scrollLeft"; + + let nextKey = isHorizontal ? arrow_down : arrow_right; + let previousKey = isHorizontal ? arrow_up : arrow_left; + + if (isReversedBlockFlowDirection) { + [nextKey, previousKey] = [previousKey, nextKey]; + } + + promise_test(async function() { + select.selectedIndex = 0; + select.style.writingMode = writingMode; + this.add_cleanup(() => { + select.scrollTop = 0; + select.scrollLeft = 0; + select.removeAttribute("style"); + }); + + assert_equals(select.value, "Option 1"); + assert_equals(select[scrollBlockAxis], 0); + + select.focus(); + + assert_equals(document.activeElement, select); + + await test_driver.send_keys(document.activeElement, previousKey); + assert_equals(select.value, "Option 1"); + assert_equals(select[scrollBlockAxis], 0); + + await test_driver.send_keys(document.activeElement, nextKey); + assert_equals(select.value, "Option 2"); + assert_equals(select[scrollBlockAxis], 0); + + for (let i = 0; i < select.size - 1; i++) { + await test_driver.send_keys(document.activeElement, nextKey); + } + + assert_equals(select.value, "Option 5"); + + if (!isReversedBlockFlowDirection) { + assert_true(select[scrollBlockAxis] > 0); + } else { + assert_true(select[scrollBlockAxis] < 0); + } + + await test_driver.send_keys(document.activeElement, previousKey); + assert_equals(select.value, "Option 4"); + + if (!isReversedBlockFlowDirection) { + assert_true(select[scrollBlockAxis] > 0); + } else { + assert_true(select[scrollBlockAxis] < 0); + } + }, `select[multiple][style="writing-mode: ${writingMode}"] supports keyboard navigation`); +}; +</script> diff --git a/tests/wpt/tests/css/selectors/is-where-parsing.html b/tests/wpt/tests/css/selectors/is-where-parsing.html index 3159ecfe6a6..6d404dd953b 100644 --- a/tests/wpt/tests/css/selectors/is-where-parsing.html +++ b/tests/wpt/tests/css/selectors/is-where-parsing.html @@ -5,27 +5,20 @@ <link rel="help" href="https://drafts.csswg.org/selectors-4/#zero-matches"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<style id="test-sheet"> - random-selector { color: blue; } -</style> +<script src="/css/support/parsing-testcommon.js"></script> <script> - let rule = document.getElementById("test-sheet").sheet.cssRules[0]; - function assert_valid(expected_parseable, pattern, expected_pattern, description) { - test(function() { - for (let pseudo of ["is", "where"]) { - let selector = pattern.replace("{}", ":" + pseudo); - let expected_selector = selector; - if (expected_pattern != null) - expected_selector = expected_pattern.replace("{}", ":" + pseudo); - rule.selectorText = "random-selector"; - rule.selectorText = selector; - (expected_parseable ? assert_equals : assert_not_equals)( - rule.selectorText, - expected_selector, - `${description}: ${selector}` - ); + function assert_valid(valid, pattern, expected_pattern, description) { + for (let pseudo of ["is", "where"]) { + let selector = pattern.replace("{}", ":" + pseudo); + let expected_selector = selector; + if (expected_pattern != null) + expected_selector = expected_pattern.replace("{}", ":" + pseudo); + if (valid) { + test_valid_selector(selector, expected_selector); + } else { + test_valid_forgiving_selector(selector); } - }, description); + } } assert_valid(true, "{}(div )", "{}(div)", "Trailing whitespace"); @@ -42,12 +35,11 @@ assert_valid(true, "{}(:hover, :active)", null, "Pseudo-classes inside"); assert_valid(true, "{}(div):hover", null, "Pseudo-classes after"); assert_valid(true, "{}(div)::before", null, "Pseudo-elements after"); - // Should ask clarification from CSSWG - assert_valid(true, "{}(::before)", null, "Pseudo-elements inside"); + assert_valid(false, "{}(::before)", null, "Pseudo-elements inside"); assert_valid(true, "{}(div) + bar", null, "Combinators after"); - assert_valid(true, "::part(foo):is(:hover)", null, "After part with simple pseudo-class"); - assert_valid(false, "::part(foo):is([attr='value'])", null, "After part with invalid selector after"); + assert_valid(true, "::part(foo){}(:hover)", null, "After part with simple pseudo-class"); + assert_valid(false, "::part(foo){}([attr='value'])", null, "After part with invalid selector after"); assert_valid(true, ":not({}(div))", null, "Nested inside :not, without combinators"); assert_valid(true, ":not({}(div .foo))", null, "Nested inside :not, with combinators"); diff --git a/tests/wpt/tests/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html b/tests/wpt/tests/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html index a633c913d16..8ea816b5d89 100644 --- a/tests/wpt/tests/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html +++ b/tests/wpt/tests/css/selectors/parsing/parse-has-disallow-nesting-has-inside-has.html @@ -8,6 +8,8 @@ <script src="/css/support/parsing-testcommon.js"></script> <script> test_invalid_selector('.a:has(.b:has(.c))'); + test_valid_forgiving_selector(':has(:is(:has(*)))'); + test_valid_forgiving_selector(':has(:where(:has(*)))'); test(() => { // It's not easy to check that these are invalid because :is() and :where() // use forgiving parsing. Check that they never match instead. diff --git a/tests/wpt/tests/css/selectors/parsing/parse-has.html b/tests/wpt/tests/css/selectors/parsing/parse-has.html index 3492373a336..949040838cf 100644 --- a/tests/wpt/tests/css/selectors/parsing/parse-has.html +++ b/tests/wpt/tests/css/selectors/parsing/parse-has.html @@ -37,5 +37,5 @@ test_invalid_selector(':has()'); test_invalid_selector(':has(123)'); test_invalid_selector(':has(.a, 123)'); - test_valid_selector(':has(:is(.a, 123))', [':has(:is(.a, 123))', ':has(:is(.a))']); + test_valid_forgiving_selector(':has(:is(.a, 123))'); </script> diff --git a/tests/wpt/tests/css/support/parsing-testcommon.js b/tests/wpt/tests/css/support/parsing-testcommon.js index e480f26b3f3..93fd0090770 100644 --- a/tests/wpt/tests/css/support/parsing-testcommon.js +++ b/tests/wpt/tests/css/support/parsing-testcommon.js @@ -50,10 +50,14 @@ function test_invalid_value(property, value) { }, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value"); } +function test_valid_forgiving_selector(selector) { + test_valid_selector(selector, selector, { onlyWhenForgiving: true }); +} + // serializedSelector can be the expected serialization of selector, // or an array of permitted serializations, // or omitted if value should serialize as selector. -function test_valid_selector(selector, serializedSelector) { +function test_valid_selector(selector, serializedSelector, options) { if (arguments.length < 2) serializedSelector = selector; @@ -85,6 +89,9 @@ function test_valid_selector(selector, serializedSelector) { assert_equals(cssRules.length, 1, "Sheet should have 1 rule"); assert_equals(cssRules[0].selectorText, readSelector, "serialization should round-trip"); + + let supports = !options?.onlyWhenForgiving; + assert_equals(CSS.supports(`selector(${selector})`), supports, "CSS.supports() reports the expected value"); }, stringifiedSelector + " should be a valid selector"); } diff --git a/tests/wpt/tests/dom/observable/tentative/observable-constructor.any.js b/tests/wpt/tests/dom/observable/tentative/observable-constructor.any.js new file mode 100644 index 00000000000..37c242661d6 --- /dev/null +++ b/tests/wpt/tests/dom/observable/tentative/observable-constructor.any.js @@ -0,0 +1,341 @@ +test(() => { + assert_implements(self.Observable, "The Observable interface is not implemented"); + + assert_true( + typeof Observable === "function", + "Observable constructor is defined" + ); + + assert_throws_js(TypeError, () => { new Observable(); }); +}, "Observable constructor"); + +test(() => { + assert_implements(self.Subscriber, "The Subscriber interface is not implemented"); + assert_true( + typeof Subscriber === "function", + "Subscriber interface is defined as a function" + ); + + assert_throws_js(TypeError, () => { new Subscriber(); }); + + new Observable(subscriber => { + assert_not_equals(subscriber, undefined, "A Subscriber must be passed into the subscribe callback"); + assert_implements(subscriber.next, "A Subscriber object must have a next() method"); + assert_implements(subscriber.complete, "A Subscriber object must have a complete() method"); + assert_implements(subscriber.error, "A Subscriber object must have an error() method"); + }).subscribe(); +}, "Subscriber interface is not constructible"); + +test(() => { + let initializerCalled = false; + const source = new Observable(() => { + initializerCalled = true; + }); + + assert_false( + initializerCalled, + "initializer should not be called by construction" + ); + source.subscribe(); + assert_true(initializerCalled, "initializer should be called by subscribe"); +}, "subscribe() can be called with no arguments"); + +test(() => { + let initializerCalled = false; + const results = []; + + const source = new Observable((subscriber) => { + initializerCalled = true; + subscriber.next(1); + subscriber.next(2); + subscriber.next(3); + subscriber.complete(); + }); + + assert_false( + initializerCalled, + "initializer should not be called by construction" + ); + + source.subscribe({ + next: (x) => results.push(x), + error: () => assert_unreached("error should not be called"), + complete: () => results.push("complete"), + }); + + assert_true(initializerCalled, "initializer should be called by subscribe"); + assert_array_equals( + results, + [1, 2, 3, "complete"], + "should emit values synchronously" + ); +}, "Observable constructor calls initializer on subscribe"); + +test(() => { + const error = new Error("error"); + const results = []; + + const source = new Observable((subscriber) => { + subscriber.next(1); + subscriber.next(2); + subscriber.error(error); + }); + + source.subscribe({ + next: () => assert_unreached("next should not be called"), + error: (e) => results.push(e), + complete: () => assert_unreached("complete should not be called"), + }); + + assert_array_equals( + results, + [1, 2, error], + "should emit error synchronously" + ); +}, "Observable error path called synchronously"); + +test(() => { + const error = new Error("error"); + const results = []; + + const source = new Observable((subscriber) => { + subscriber.next(1); + throw error; + // TODO(https://github.com/WICG/observable/issues/76): If we add the + // `subscriber.closed` attribute, consider a try-finally block to assert + // that `subscriber.closed` is true after throwing. Also TODO: ensure that + // that would even be the right behavior. + }); + + source.subscribe({ + next: (x) => results.push(x), + error: (e) => results.push(e), + complete: () => assert_unreached("complete should not be called"), + }); + + assert_array_equals( + results, + [1, error], + "should emit values and the throw error synchronously" + ); +}, "Observable should error if initializer throws"); + +// TODO(https://github.com/WICG/observable/issues/76): If we decide the +// `subscriber.closed` attribute is needed, re-visit these two tests that were +// originally included: +// https://github.com/web-platform-tests/wpt/blob/0246526ca46ef4e5eae8b8e4a87dd905c40f5326/dom/observable/tentative/observable-ctor.any.js#L123-L137. + +test(() => { + const results = []; + + const source = new Observable((subscriber) => { + subscriber.next(1); + subscriber.next(2); + subscriber.complete(); + subscriber.next(3); + }); + + source.subscribe({ + next: (x) => results.push(x), + error: () => assert_unreached("error should not be called"), + complete: () => results.push("complete"), + }); + + assert_array_equals( + results, + [1, 2, "complete"], + "should emit values synchronously, but not nexted values after complete" + ); +}, "Subscription does not emit values after completion"); + +test(() => { + const error = new Error("error"); + const results = []; + + const source = new Observable((subscriber) => { + subscriber.next(1); + subscriber.next(2); + subscriber.error(error); + subscriber.next(3); + }); + + source.subscribe({ + next: (x) => results.push(x), + error: (e) => results.push(e), + complete: () => assert_unreached("complete should not be called"), + }); + + assert_array_equals( + results, + [1, 2, error], + "should emit values synchronously, but not nexted values after error" + ); +}, "Subscription does not emit values after error"); + +test(() => { + const error = new Error("error"); + const results = []; + + const source = new Observable((subscriber) => { + subscriber.next(1); + subscriber.next(2); + subscriber.error(error); + // TODO(https://github.com/WICG/observable/issues/76): Assert + // `subscriber.closed` is true, if we add that attribute. + // assert_true(subscriber.closed, "subscriber is closed after error"); + subscriber.next(); + subscriber.complete(); + }); + + source.subscribe({ + next: (x) => results.push(x), + error: (error) => results.push(error), + complete: () => assert_unreached("complete should not be called"), + }); + + assert_array_equals(results, [1, 2, error], "should emit synchronously"); +}, "Completing or nexting a subscriber after an error does nothing"); + +test(() => { + const error = new Error("error"); + let errorReported = false; + + self.addEventListener( + "error", + (e) => { + assert_equals(e.message, "Uncaught (in observable) error"); + assert_equals(e.filename, location.href); + assert_greater_than(e.lineno, 0); + assert_greater_than(e.colno, 0); + assert_equals(e.error, error); + errorReported = true; + }, + { once: true } + ); + + const source = new Observable((subscriber) => { + subscriber.error(error); + }); + + // No error handler provided. + source.subscribe({ + next: () => assert_unreached("next should not be called"), + complete: () => assert_unreached("complete should not be called"), + }); + + assert_true(errorReported); +}, "Errors pushed to the subscriber that are not handled by the subscription " + + "are reported to the global"); + +test(() => { + const error = new Error("error"); + let errorReported = false; + + self.addEventListener( + "error", + (e) => { + assert_equals(e.message, "Uncaught (in observable) error"); + assert_equals(e.filename, location.href); + assert_greater_than(e.lineno, 0); + assert_greater_than(e.colno, 0); + assert_equals(e.error, error); + errorReported = true; + }, + { once: true } + ); + + const source = new Observable((subscriber) => { + throw error; + }); + + // No error handler provided. + source.subscribe({ + next: () => assert_unreached("next should not be called"), + complete: () => assert_unreached("complete should not be called"), + }); + + assert_true(errorReported); +}, "Errors thrown in the initializer that are not handled by the " + + "subscription are reported to the global"); + +test(() => { + const error = new Error("error"); + const results = []; + let errorReported = false; + + self.addEventListener( + "error", + (e) => { + assert_equals(e.message, "Uncaught (in observable) error"); + assert_equals(e.filename, location.href); + assert_greater_than(e.lineno, 0); + assert_greater_than(e.colno, 0); + assert_equals(e.error, error); + errorReported = true; + }, + { once: true } + ); + + const source = new Observable((subscriber) => { + subscriber.next(1); + subscriber.next(2); + subscriber.complete(); + subscriber.error(error); + }); + + source.subscribe({ + next: (x) => results.push(x), + error: () => assert_unreached("error should not be called"), + complete: () => results.push("complete"), + }); + + assert_array_equals( + results, + [1, 2, "complete"], + "should emit values synchronously, but not error values after complete" + ); + + assert_true(errorReported); +}, "Subscription reports errors that are pushed after subscriber is closed " + + "by completion"); + +test(() => { + const error = new Error("error"); + const results = []; + let errorReported = false; + + self.addEventListener( + "error", + (e) => { + assert_equals(e.message, "Uncaught (in observable) error"); + assert_equals(e.filename, location.href); + assert_greater_than(e.lineno, 0); + assert_greater_than(e.colno, 0); + assert_equals(e.error, error); + errorReported = true; + }, + { once: true } + ); + + const source = new Observable((subscriber) => { + subscriber.next(1); + subscriber.next(2); + subscriber.complete(); + throw error; + }); + + source.subscribe({ + next: (x) => results.push(x), + error: () => assert_unreached("error should not be called"), + complete: () => results.push("complete"), + }); + + assert_array_equals( + results, + [1, 2, "complete"], + "should emit values synchronously, but not error after complete" + ); + + assert_true(errorReported); +}, "Errors thrown by initializer function after subscriber is closed by " + + "completion are reported"); diff --git a/tests/wpt/tests/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html b/tests/wpt/tests/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html new file mode 100644 index 00000000000..a1af7e89c29 --- /dev/null +++ b/tests/wpt/tests/dom/parts/basic-dom-part-declarative-brace-syntax-innerhtml.tentative.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<title>DOM Parts: Basic object structure, {{}} declarative API</title> +<meta name="author" href="mailto:masonf@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/domparts-utils.js"></script> + +<div id=context_elements> + <div></div> + <div parseparts></div> + <template></template> + <template parseparts class=expect_success></template> +</div> + +<script> +function assertIsComment(node,commentText) { + assert_true(node instanceof Comment); + assert_equals(node.textContent,commentText); +} + +const declarativeOpenerNoParseparts = '<h1>'; +const declarativeOpenerParseparts = '<h1 parseparts>'; +const declarativeContent = '{{#}}First{{#}}<span {{}}>Middle</span>{{/}}Last{{/}}</h1>'; + +Array.from(document.querySelectorAll('#context_elements>*')).forEach(contextEl => { + const expectParts = contextEl.classList.contains('expect_success'); + [false,true].forEach(addParsePartsInside => { + const description = `${contextEl.outerHTML.split('><')[0]}><h1${addParsePartsInside ? " parseparts" : ""}>content...`; + const content = (addParsePartsInside ? declarativeOpenerParseparts : declarativeOpenerNoParseparts) + declarativeContent; + + test((t) => { + const root = contextEl.content ? contextEl.content.getPartRoot() : document.getPartRoot(); + assert_equals(root.getParts().length,0,'Should start with no parts'); + t.add_cleanup(() => { + contextEl.replaceChildren(); + root.getParts().forEach(part => part.disconnect()); + }); + contextEl.innerHTML = content; + if (expectParts) { + let expectedRootParts = [{type:'ChildNodePart',metadata:[]}]; + assertEqualParts(root.getParts(),expectedRootParts,0,'declarative root missing parts'); + const childPart1 = root.getParts()[0]; + assertIsComment(childPart1.previousSibling,''); + assertIsComment(childPart1.nextSibling,''); + const expectedChild1Parts = [{type:'ChildNodePart',metadata:[]}]; + assertEqualParts(childPart1.getParts(),expectedChild1Parts,0,'First level childpart should just have one child part'); + const childPart2 = childPart1.getParts()[0]; + assertIsComment(childPart2.previousSibling,''); + assertIsComment(childPart2.nextSibling,''); + const expectedChild2Parts = [{type:'NodePart',metadata:[]}]; + assertEqualParts(childPart2.getParts(),expectedChild2Parts,0,'Second level childpart should have just the node part'); + assert_true(childPart2.getParts()[0].node instanceof HTMLSpanElement); + assert_equals(childPart2.getParts()[0].node.textContent,'Middle'); + } else { + assert_equals(root.getParts().length,0); + } + }, `Declarative DOM Parts innerHTML ${description} (expect${expectParts ? "" : " no"} parts)`); + }); +}); + +test((t) => { + const tmpl = document.createElement('template'); + tmpl.parseparts = true; + // See crbug.com/1490375. + tmpl.innerHTML = '<div {{}}></div>'; + const root = tmpl.content.getPartRoot(); + t.add_cleanup(() => { + tmpl.remove(); + root.getParts().forEach(part => part.disconnect()); + }); + assert_equals(root.getParts().length,1,'There should be one NodePart'); +}, `Basic NodePart parsing`); +</script> + diff --git a/tests/wpt/tests/dom/parts/basic-dom-part-objects.tentative.html b/tests/wpt/tests/dom/parts/basic-dom-part-objects.tentative.html index af77b28b02f..d7adf61739c 100644 --- a/tests/wpt/tests/dom/parts/basic-dom-part-objects.tentative.html +++ b/tests/wpt/tests/dom/parts/basic-dom-part-objects.tentative.html @@ -120,6 +120,7 @@ function addCleanup(t, part) { // Test cloning of the entire DocumentPartRoot. const clonedPartRoot = root.clone(); + assertEqualParts(root.getParts(),rootExpectations,[nodePart,childNodePart],'cloning a part root should not change the original'); const clonedContainer = clonedPartRoot.rootContainer; assert_true(clonedPartRoot instanceof DocumentPartRoot); assert_true(clonedContainer instanceof (useTemplate ? DocumentFragment : Document)); diff --git a/tests/wpt/tests/fledge/tentative/TODO b/tests/wpt/tests/fledge/tentative/TODO index 7ec6d880801..2f3e72b2128 100644 --- a/tests/wpt/tests/fledge/tentative/TODO +++ b/tests/wpt/tests/fledge/tentative/TODO @@ -25,12 +25,13 @@ Need tests for (likely not a complete list): currently guaranteed to work, due to potential time skew between processes). * Multiple buyers. * Multiple interest groups with same owner. -* Multiple origin auctions (buyer != publisher != seller). * Multiple frame tests (including join IG policy, run auction policy, loading URNs in fencedframes in other frames, loading component ad URNs in fenced frames of other frames, etc) * adAuctionConfig passed to reportResult(). * Component auctions. + * Including cross-origin sellers. +* clearOriginJoinedInterestGroups. * browserSignals fields in scoring/bidding methods. * In reporting methods, browserSignals fields: dataVersion, topLevelSeller, componentSeller, modifiedBid, adCost, madeHighestScoringOtherBid diff --git a/tests/wpt/tests/fledge/tentative/cross-origin.https.sub.window.js b/tests/wpt/tests/fledge/tentative/cross-origin.https.sub.window.js index 1c1d5f2f6b7..178b3284bd5 100644 --- a/tests/wpt/tests/fledge/tentative/cross-origin.https.sub.window.js +++ b/tests/wpt/tests/fledge/tentative/cross-origin.https.sub.window.js @@ -12,13 +12,18 @@ const OTHER_ORIGIN1 = 'https://{{hosts[alt][]}}:{{ports[https][0]}}'; const OTHER_ORIGIN2 = 'https://{{hosts[alt][]}}:{{ports[https][1]}}'; - -// Runs "script" in "iframe" via an eval call. The iframe must have been -// created by calling "createIframe()" below. "param" is passed to the +const OTHER_ORIGIN3 = 'https://{{hosts[][]}}:{{ports[https][1]}}'; +const OTHER_ORIGIN4 = 'https://{{hosts[][www]}}:{{ports[https][0]}}'; +const OTHER_ORIGIN5 = 'https://{{hosts[][www]}}:{{ports[https][1]}}'; +const OTHER_ORIGIN6 = 'https://{{hosts[alt][www]}}:{{ports[https][0]}}'; +const OTHER_ORIGIN7 = 'https://{{hosts[alt][www]}}:{{ports[https][1]}}'; + +// Runs "script" in "child_window" via an eval call. The "child_window" must +// have been created by calling "createFrame()" below. "param" is passed to the // context "script" is run in, so can be used to pass objects that // "script" references that can't be serialized to a string, like // fencedFrameConfigs. -async function runInIframe(test, iframe, script, param) { +async function runInFrame(test, child_window, script, param) { const messageUuid = generateUuid(test); let receivedResponse = {}; @@ -34,27 +39,29 @@ async function runInIframe(test, iframe, script, param) { } } window.addEventListener('message', WaitForMessage); - iframe.contentWindow.postMessage( + child_window.postMessage( {messageUuid: messageUuid, script: script, param: param}, '*'); }); await promise; return receivedResponse.returnValue; } -// Creates an iframe and navigates to a URL on "origin", and waits for the URL -// to finish loading by waiting for the iframe to send an event. Then returns -// the iframe. +// Creates an frame and navigates it to a URL on "origin", and waits for the URL +// to finish loading by waiting for the frame to send an event. Then returns +// the frame's Window object. Depending on the value of "is_iframe", the created +// frame will either be a new iframe, or a new top-level main frame. In the iframe +// case, its "allow" field will be set to "permissions". // // Also adds a cleanup callback to "test", which runs all cleanup functions -// added to the iframe and waits for them to complete, and then destroys the -// iframe. -async function createIframe(test, origin, permissions) { - const iframeUuid = generateUuid(test); - const iframeUrl = `${origin}${RESOURCE_PATH}iframe.sub.html?uuid=${iframeUuid}`; - let iframe = document.createElement('iframe'); - await new Promise(function(resolve, reject) { +// added within the frame and waits for them to complete, and then destroys the +// iframe or closes the window. +async function createFrame(test, origin, is_iframe = true, permissions = null) { + const frameUuid = generateUuid(test); + const frameUrl = + `${origin}${RESOURCE_PATH}subordinate-frame.sub.html?uuid=${frameUuid}`; + let promise = new Promise(function(resolve, reject) { function WaitForMessage(event) { - if (event.data.messageUuid != iframeUuid) + if (event.data.messageUuid != frameUuid) return; if (event.data.result === 'load complete') { resolve(); @@ -63,17 +70,38 @@ async function createIframe(test, origin, permissions) { } } window.addEventListener('message', WaitForMessage); + }); + + if (is_iframe) { + let iframe = document.createElement('iframe'); if (permissions) iframe.allow = permissions; - iframe.src = iframeUrl; + iframe.src = frameUrl; document.body.appendChild(iframe); test.add_cleanup(async () => { - await runInIframe(test, iframe, "await test_instance.do_cleanup();"); + await runInFrame(test, iframe.contentWindow, "await test_instance.do_cleanup();"); document.body.removeChild(iframe); }); + + await promise; + return iframe.contentWindow; + } + + let child_window = window.open(frameUrl); + test.add_cleanup(async () => { + await runInFrame(test, child_window, "await test_instance.do_cleanup();"); + child_window.close(); }); - return iframe; + + await promise; + return child_window; +} + +// Wrapper around createFrame() that creates an iframe and optionally sets +// permissions. +async function createIframe(test, origin, permissions) { + return createFrame(test, origin, /*is_iframe=*/ true, permissions); } //////////////////////////////////////////////////////////////////////////////// @@ -85,7 +113,7 @@ subsetTest(promise_test, async test => { let iframe = await createIframe(test, document.location.origin); // Join a same-origin InterestGroup in a iframe navigated to its origin. - await runInIframe(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`); + await runInFrame(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`); // Run an auction using window.location.origin as a bidder. The IG should // make a bid and win an auction. @@ -97,7 +125,7 @@ subsetTest(promise_test, async test => { let iframe = await createIframe(test, OTHER_ORIGIN1); // Join a cross-origin InterestGroup in a iframe navigated to its origin. - await runInIframe(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`); + await runInFrame(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`); // Run an auction in this frame using the other origin as a bidder. The IG should // make a bid and win an auction. @@ -117,7 +145,7 @@ subsetTest(promise_test, async test => { let iframe = await createIframe(test, OTHER_ORIGIN1, 'join-ad-interest-group'); // Join a cross-origin InterestGroup in a iframe navigated to its origin. - await runInIframe(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`); + await runInFrame(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`); // Run an auction in this frame using the other origin as a bidder. The IG should // make a bid and win an auction. @@ -136,7 +164,7 @@ subsetTest(promise_test, async test => { // Try to join an InterestGroup in a cross-origin iframe whose permissions policy // blocks joining interest groups. An exception should be thrown, and the interest // group should not be joined. - await runInIframe(test, iframe, + await runInFrame(test, iframe, `try { await joinInterestGroup(test_instance, "${uuid}"); } catch (e) { @@ -161,7 +189,7 @@ subsetTest(promise_test, async test => { // This should require a .well-known fetch to the parents origin, which will not // grant permission. The case where permission is granted is not yet testable. let interestGroup = JSON.stringify(createInterestGroupForOrigin(uuid, window.location.origin)); - await runInIframe(test, iframe, + await runInFrame(test, iframe, `joinInterestGroup(test_instance, "${uuid}", ${interestGroup})`); // Run an auction with this page's origin as a bidder. Since the join @@ -180,10 +208,10 @@ subsetTest(promise_test, async test => { let iframe = await createIframe(test, document.location.origin); // Join a same-origin InterestGroup in a iframe navigated to its origin. - await runInIframe(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`); + await runInFrame(test, iframe, `await joinInterestGroup(test_instance, "${uuid}");`); // Run auction in same-origin iframe. This should succeed, by default. - await runInIframe( + await runInFrame( test, iframe, `await runBasicFledgeTestExpectingWinner(test_instance, "${uuid}");`); }, 'Run auction in same-origin iframe, default permissions.'); @@ -196,7 +224,7 @@ subsetTest(promise_test, async test => { let iframe = await createIframe(test, OTHER_ORIGIN1); // Run auction in cross-origin iframe. Currently, this is allowed by default. - await runInIframe( + await runInFrame( test, iframe, `await runBasicFledgeTestExpectingWinner( test_instance, "${uuid}", @@ -211,7 +239,7 @@ subsetTest(promise_test, async test => { let iframe = await createIframe(test, OTHER_ORIGIN1, "run-ad-auction"); // Run auction in cross-origin iframe that should allow the auction to occur. - await runInIframe( + await runInFrame( test, iframe, `await runBasicFledgeTestExpectingWinner( test_instance, "${uuid}", @@ -227,7 +255,7 @@ subsetTest(promise_test, async test => { let iframe = await createIframe(test, OTHER_ORIGIN1, "run-ad-auction 'none'"); // Run auction in cross-origin iframe that should not allow the auction to occur. - await runInIframe( + await runInFrame( test, iframe, `try { await runBasicFledgeAuction(test_instance, "${uuid}"); @@ -246,7 +274,7 @@ subsetTest(promise_test, async test => { let iframe = await createIframe(test, OTHER_ORIGIN1, `run-ad-auction ${OTHER_ORIGIN1}`); - await runInIframe( + await runInFrame( test, iframe, `await runBasicFledgeTestExpectingWinner( test_instance, "${uuid}", @@ -271,7 +299,7 @@ subsetTest(promise_test, async test => { // with no fledge-related permissions. let iframe = await createIframe( test, OTHER_ORIGIN1, "join-ad-interest-group 'none'; run-ad-auction 'none'"); - await runInIframe( + await runInFrame( test, iframe, `await createAndNavigateFencedFrame(test_instance, param);`, /*param=*/config); @@ -284,7 +312,7 @@ subsetTest(promise_test, async test => { let iframe = await createIframe( test, OTHER_ORIGIN1, "join-ad-interest-group; run-ad-auction"); - await runInIframe( + await runInFrame( test, iframe, `await joinInterestGroup(test_instance, "${uuid}"); await runBasicFledgeAuctionAndNavigate(test_instance, "${uuid}"); @@ -298,7 +326,7 @@ subsetTest(promise_test, async test => { // Run an auction in an cross-origin iframe, and get the resulting FencedFrameConfig. let iframe = await createIframe( test, OTHER_ORIGIN1, "join-ad-interest-group; run-ad-auction"); - let config = await runInIframe( + let config = await runInFrame( test, iframe, `await joinInterestGroup(test_instance, "${uuid}"); let config = await runBasicFledgeTestExpectingWinner(test_instance, "${uuid}"); @@ -322,7 +350,7 @@ subsetTest(promise_test, async test => { // Run an auction in an cross-origin iframe, and get the resulting FencedFrameConfig. let iframe = await createIframe( test, OTHER_ORIGIN1, "join-ad-interest-group; run-ad-auction"); - let config = await runInIframe( + let config = await runInFrame( test, iframe, `await joinInterestGroup(test_instance, "${uuid}"); let config = await runBasicFledgeTestExpectingWinner(test_instance, "${uuid}"); @@ -336,7 +364,7 @@ subsetTest(promise_test, async test => { // first cross-origin iframe. let iframe2 = await createIframe( test, OTHER_ORIGIN2, "join-ad-interest-group 'none'; run-ad-auction 'none'"); - await runInIframe( + await runInFrame( test, iframe2, `await createAndNavigateFencedFrame(test_instance, param);`, /*param=*/config); @@ -345,3 +373,167 @@ subsetTest(promise_test, async test => { [ createBidderReportURL(uuid, '1', OTHER_ORIGIN1), createSellerReportURL(uuid, '1', OTHER_ORIGIN1)]); }, 'Run auction in cross-origin iframe and open winning ad in a fenced frame child of another cross-origin iframe.'); + +//////////////////////////////////////////////////////////////////////////////// +// Other tests. +//////////////////////////////////////////////////////////////////////////////// + +subsetTest(promise_test, async test => { + const uuid = generateUuid(test); + + let iframe = await createIframe(test, OTHER_ORIGIN1, "run-ad-auction"); + + // Do everything in a cross-origin iframe, and make sure correct top-frame origin is used. + await runInFrame( + test, iframe, + `const uuid = "${uuid}"; + const renderURL = createRenderURL(uuid, /*script=*/null, /*signalsParam=*/'hostname'); + + await joinInterestGroup( + test_instance, uuid, + { trustedBiddingSignalsKeys: ['hostname'], + trustedBiddingSignalsURL: TRUSTED_BIDDING_SIGNALS_URL, + ads: [{ renderURL: renderURL }], + biddingLogicURL: createBiddingScriptURL({ + generateBid: + \`if (browserSignals.topWindowHostname !== "${document.location.hostname}") + throw "Wrong topWindowHostname: " + browserSignals.topWindowHostname; + if (trustedBiddingSignals.hostname !== '${window.location.hostname}') + throw 'Wrong hostname: ' + trustedBiddingSignals.hostname;\`})}); + + await runBasicFledgeTestExpectingWinner( + test_instance, uuid, + { trustedScoringSignalsURL: TRUSTED_SCORING_SIGNALS_URL, + decisionLogicURL: + createDecisionScriptURL( + uuid, + { scoreAd: + \`if (browserSignals.topWindowHostname !== "${document.location.hostname}") + throw "Wrong topWindowHostname: " + browserSignals.topWindowHostname; + if (trustedScoringSignals.renderURL["\${renderURL}"] !== '${window.location.hostname}') + throw 'Wrong hostname: ' + trustedScoringSignals.renderURL["\${renderURL}"];\` })});`); +}, 'Different top-frame origin.'); + +subsetTest(promise_test, async test => { + const uuid = generateUuid(test); + + let bidderOrigin = OTHER_ORIGIN1; + let sellerOrigin = OTHER_ORIGIN2; + let bidderSendReportToURL = createBidderReportURL(uuid, '1', OTHER_ORIGIN3); + let sellerSendReportToURL = createSellerReportURL(uuid, '2', OTHER_ORIGIN4); + let bidderBeaconURL = createBidderBeaconURL(uuid, '3', OTHER_ORIGIN5); + let sellerBeaconURL = createSellerBeaconURL(uuid, '4', OTHER_ORIGIN6); + let renderURL = createRenderURL( + uuid, + `window.fence.reportEvent({ + eventType: "beacon", + eventData: window.location.href, + destination: ["buyer", "seller"] + })`, + /*signalsParams=*/null, OTHER_ORIGIN7); + + let iframe = await createIframe(test, bidderOrigin, "join-ad-interest-group"); + let interestGroup = createInterestGroupForOrigin( + uuid, bidderOrigin, + {biddingLogicURL: createBiddingScriptURL( + { origin: bidderOrigin, + generateBid: `if (browserSignals.topWindowHostname !== "${document.location.hostname}") + throw "Wrong topWindowHostname: " + browserSignals.topWindowHostname; + if (interestGroup.owner !== "${bidderOrigin}") + throw "Wrong origin: " + interestGroup.owner; + if (!interestGroup.biddingLogicURL.startsWith("${bidderOrigin}")) + throw "Wrong origin: " + interestGroup.biddingLogicURL; + if (interestGroup.ads[0].renderUrl != "${renderURL}") + throw "Wrong renderURL: " + interestGroup.ads[0].renderUrl; + if (browserSignals.seller !== "${sellerOrigin}") + throw "Wrong origin: " + browserSignals.seller;`, + reportWin: `if (browserSignals.topWindowHostname !== "${document.location.hostname}") + throw "Wrong topWindowHostname: " + browserSignals.topWindowHostname; + if (browserSignals.seller !== "${sellerOrigin}") + throw "Wrong seller: " + browserSignals.seller; + if (browserSignals.interestGroupOwner !== "${bidderOrigin}") + throw "Wrong interestGroupOwner: " + browserSignals.interestGroupOwner; + if (browserSignals.renderURL !== "${renderURL}") + throw "Wrong renderURL: " + browserSignals.renderURL; + if (browserSignals.seller !== "${sellerOrigin}") + throw "Wrong seller: " + browserSignals.seller; + sendReportTo("${bidderSendReportToURL}"); + registerAdBeacon({beacon: "${bidderBeaconURL}"});` }), + ads: [{ renderURL: renderURL }]}); + await runInFrame( + test, iframe, + `await joinInterestGroup(test_instance, "${uuid}", ${JSON.stringify(interestGroup)});`); + + await runBasicFledgeAuctionAndNavigate(test, uuid, + { seller: sellerOrigin, + interestGroupBuyers: [bidderOrigin], + decisionLogicURL: createDecisionScriptURL( + uuid, + { origin: sellerOrigin, + scoreAd: `if (browserSignals.topWindowHostname !== "${document.location.hostname}") + throw "Wrong topWindowHostname: " + browserSignals.topWindowHostname; + if (auctionConfig.seller !== "${sellerOrigin}") + throw "Wrong seller: " + auctionConfig.seller; + if (auctionConfig.interestGroupBuyers[0] !== "${bidderOrigin}") + throw "Wrong interestGroupBuyers: " + auctionConfig.interestGroupBuyers; + if (browserSignals.interestGroupOwner !== "${bidderOrigin}") + throw "Wrong interestGroupOwner: " + browserSignals.interestGroupOwner; + if (browserSignals.renderURL !== "${renderURL}") + throw "Wrong renderURL: " + browserSignals.renderURL;`, + reportResult: `if (browserSignals.topWindowHostname !== "${document.location.hostname}") + throw "Wrong topWindowHostname: " + browserSignals.topWindowHostname; + if (browserSignals.interestGroupOwner !== "${bidderOrigin}") + throw "Wrong interestGroupOwner: " + browserSignals.interestGroupOwner; + if (browserSignals.renderURL !== "${renderURL}") + throw "Wrong renderURL: " + browserSignals.renderURL; + sendReportTo("${sellerSendReportToURL}"); + registerAdBeacon({beacon: "${sellerBeaconURL}"});`}) + }); + + await waitForObservedRequests( + uuid, + [ bidderSendReportToURL, + sellerSendReportToURL, + `${bidderBeaconURL}, body: ${renderURL}`, + `${sellerBeaconURL}, body: ${renderURL}` + ]); +}, 'Single seller auction with as many distinct origins as possible (except no component ads).'); + +subsetTest(promise_test, async test => { + const uuid = generateUuid(test); + + // Join an interest group and run an auction with a winner. Use a tracking + // URL for the ad, so that if it's incorrectly loaded in this test, the + // waitForObservedRequests() at the end of the test will see it, and the + // test will fail. + await joinInterestGroup( + test, uuid, + {ads: [{renderURL: createTrackerURL(window.location.origin, uuid, 'track_get', 'renderURL')}]}); + let config = await runBasicFledgeTestExpectingWinner(test, uuid); + + // Try to navigate a fenced frame to the winning ad in a new same-origin + // window. This should fail. Unfortunately, there's no assertion that + // can be checked for, and can't communicate with the contents of the + // fenced frame to make sure the load fails. + // + // So instead, join an interest group with a different sendReportTo-url, + // overwriting the previously joined one, and run another auction, loading + // the winner in another fenced frame. + // + // Then wait to see that only the reporting URLs from that second auction + // are requested. They should almost always be requested after the URLs + // from the first auction. + let child_window = + await createFrame(test, document.location.origin, /*is_iframe=*/false); + await runInFrame( + test, child_window, + `await createAndNavigateFencedFrame(test_instance, param); + await joinInterestGroup( + test_instance, "${uuid}", + {biddingLogicURL: createBiddingScriptURL( + {reportWin: "sendReportTo('${createBidderReportURL(uuid, "2")}');" })}); + await runBasicFledgeAuctionAndNavigate(test_instance, "${uuid}");`, + /*param=*/config); + await waitForObservedRequests( + uuid, [createBidderReportURL(uuid, "2"), createSellerReportURL(uuid)]); +}, 'Run auction in main frame, try to open winning ad in different same-origin main frame.'); diff --git a/tests/wpt/tests/fledge/tentative/resources/decision-logic.sub.py b/tests/wpt/tests/fledge/tentative/resources/decision-logic.sub.py index 165d9840028..d5ecd2db87a 100644 --- a/tests/wpt/tests/fledge/tentative/resources/decision-logic.sub.py +++ b/tests/wpt/tests/fledge/tentative/resources/decision-logic.sub.py @@ -40,8 +40,10 @@ def main(request, response): // Don't bid on interest group with the wrong uuid. This is to prevent // left over interest groups from other tests from affecting auction // results. - if (!browserSignals.renderUrl.endsWith('{{GET[uuid]}}')) + if (!browserSignals.renderUrl.endsWith('uuid={{GET[uuid]}}') && + !browserSignals.renderUrl.includes('uuid={{GET[uuid]}}&')) { return 0; + } {{GET[scoreAd]}}; return {desirability: 2 * bid, allowComponentAuction: true}; diff --git a/tests/wpt/tests/fledge/tentative/resources/fledge-util.js b/tests/wpt/tests/fledge/tentative/resources/fledge-util.js index 7ed5b13f8d9..c89814507cb 100644 --- a/tests/wpt/tests/fledge/tentative/resources/fledge-util.js +++ b/tests/wpt/tests/fledge/tentative/resources/fledge-util.js @@ -162,8 +162,10 @@ function createDecisionScriptURL(uuid, params = {}) { // by the decision logic script before accepting a bid. "uuid" is expected to // be last. "signalsParams" also has no effect, but is used by // trusted-scoring-signals.py to affect the response. -function createRenderURL(uuid, script, signalsParams) { - let url = new URL(`${BASE_URL}resources/fenced-frame.sub.py`); +function createRenderURL(uuid, script, signalsParams, origin) { + if (origin == null) + origin = new URL(BASE_URL).origin; + let url = new URL(`${origin}${RESOURCE_PATH}fenced-frame.sub.py`); if (script) url.searchParams.append('script', script); if (signalsParams) diff --git a/tests/wpt/tests/fledge/tentative/resources/iframe.sub.html b/tests/wpt/tests/fledge/tentative/resources/subordinate-frame.sub.html index 0bc0ea357f6..465f8e7bdf0 100644 --- a/tests/wpt/tests/fledge/tentative/resources/iframe.sub.html +++ b/tests/wpt/tests/fledge/tentative/resources/subordinate-frame.sub.html @@ -10,6 +10,14 @@ <body> <script> + // This can be used for either iframes or top-level windows. + // If there is an opener, this is a top-level window, so + // send messages to the opener. Otherwise, this is an iframe, + // so send messages to the parent. + let message_dest = window.opener; + if (!message_dest) + message_dest = window.parent; + // Fake Test class that only supports adding cleanup callbacks, // primarily to leave interest groups once the test is complete. function Test() { @@ -31,8 +39,9 @@ }; // Create a bogus test instance that tracks cleanup callbacks. The - // parent frame is expected to run test_instance.do_cleanup() and - // wait for it to complete before destroying the frame. + // main frame managing the test is expected to post a message + // to run test_instance.do_cleanup() and wait for it to complete + // before destroying the frame. let test_instance = new Test(); // Register a message event listener that listens for events with data @@ -66,11 +75,12 @@ message.result = e.toString(); } message.messageUuid = event.data.messageUuid; - window.parent.postMessage(message, '*'); + + message_dest.postMessage(message, '*'); }); - // Inform parent that the iframe has finished loading. - window.parent.postMessage( + // Inform "message_dest" that the frame has finished loading. + message_dest.postMessage( {messageUuid: '{{GET[uuid]}}', result: 'load complete'}, '*'); </script> diff --git a/tests/wpt/tests/fs/resources/test-helpers.js b/tests/wpt/tests/fs/resources/test-helpers.js index f185e2f48b6..4bcf5d7e834 100644 --- a/tests/wpt/tests/fs/resources/test-helpers.js +++ b/tests/wpt/tests/fs/resources/test-helpers.js @@ -17,13 +17,9 @@ const LOCK_ACCESS = { }; // Array of separators used to separate components in hierarchical paths. -let kPathSeparators; -if (navigator.userAgent.includes('Windows NT')) { - // Windows uses both '/' and '\' as path separators. - kPathSeparators = ['/', '\\']; -} else { - kPathSeparators = ['/']; -} +// Consider both '/' and '\' as path separators to ensure file names are +// platform-agnostic. +let kPathSeparators = ['/', '\\']; async function getFileSize(handle) { const file = await handle.getFile(); diff --git a/tests/wpt/tests/fs/script-tests/FileSystemFileHandle-move.js b/tests/wpt/tests/fs/script-tests/FileSystemFileHandle-move.js index dd848626e4a..c5d08f305d0 100644 --- a/tests/wpt/tests/fs/script-tests/FileSystemFileHandle-move.js +++ b/tests/wpt/tests/fs/script-tests/FileSystemFileHandle-move.js @@ -51,24 +51,14 @@ directory_test(async (t, root) => { }, 'move(name) can be called multiple times'); directory_test(async (t, root) => { - const dir = await root.getDirectoryHandle('dir', {create: true}); - const handle = await createFileWithContents(t, 'file-before', 'foo', dir); - await promise_rejects_js(t, TypeError, handle.move('Lorem.')); - - assert_array_equals(await getSortedDirectoryEntries(root), ['dir/']); - assert_array_equals(await getSortedDirectoryEntries(dir), ['file-before']); - assert_equals(await getFileContents(handle), 'foo'); - assert_equals(await getFileSize(handle), 3); -}, 'move(name) with a name with a trailing period should fail'); - -directory_test(async (t, root) => { const handle = await createFileWithContents(t, 'file-before', 'foo', root); await promise_rejects_js(t, TypeError, handle.move('test/test')); + await promise_rejects_js(t, TypeError, handle.move('test\\test')); assert_array_equals(await getSortedDirectoryEntries(root), ['file-before']); assert_equals(await getFileContents(handle), 'foo'); assert_equals(await getFileSize(handle), 3); -}, 'move(name) with a name with invalid characters should fail'); +}, 'move(name) with a name with path separators should fail'); directory_test(async (t, root) => { const handle = await createFileWithContents(t, 'file-before', 'abc', root); diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-01-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-01-ref.html new file mode 100644 index 00000000000..3462b908b3d --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-01-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=ltr` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-01.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-01.html new file mode 100644 index 00000000000..2d6983cb14b --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-01.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-01-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot dir="ltr"></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-02-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-02-ref.html new file mode 100644 index 00000000000..8f358cf6471 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-02-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=ltr` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-02.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-02.html new file mode 100644 index 00000000000..0553ef9a333 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-02.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-02-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot dir="ltr"></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-03-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-03-ref.html new file mode 100644 index 00000000000..a2f574820f2 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-03-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=rtl` on the <slot>, paragraph in the light tree</p> +<div id="host"><p dir="rtl">paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-03.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-03.html new file mode 100644 index 00000000000..5986a9d0f74 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-03.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-03-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot dir="rtl"></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-04-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-04-ref.html new file mode 100644 index 00000000000..5724b5b84db --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-04-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=rtl` on the <slot>, paragraph in the light tree</p> +<div id="host"><p dir="rtl">اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-04.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-04.html new file mode 100644 index 00000000000..aa2ab9dc93e --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-04.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-04-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot dir="rtl"></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-05-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-05-ref.html new file mode 100644 index 00000000000..13c5b16240c --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-05-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=auto` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-05.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-05.html new file mode 100644 index 00000000000..597cb8d5b8e --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-05.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-05-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot dir="auto"></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-06-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-06-ref.html new file mode 100644 index 00000000000..ca54b3bb2c8 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-06-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=auto` on the <slot>, paragraph in the light tree</p> +<div id="host"><p dir="rtl">اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-06.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-06.html new file mode 100644 index 00000000000..6cfaf7fcecd --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-06.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the slot, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-06-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the <slot>, paragraph in the light tree</p> +<div id="host"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot dir="auto"></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-07-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-07-ref.html new file mode 100644 index 00000000000..0a2de4d398f --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-07-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=ltr` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="ltr"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-07.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-07.html new file mode 100644 index 00000000000..dd11f4a605d --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-07.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-07-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="ltr"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-08-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-08-ref.html new file mode 100644 index 00000000000..09d8b24094f --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-08-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=ltr` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="ltr"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-08.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-08.html new file mode 100644 index 00000000000..8b1377d32ad --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-08.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-08-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="ltr"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-09-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-09-ref.html new file mode 100644 index 00000000000..73b9cb14870 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-09-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=rtl` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="rtl"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: rtl / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-09.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-09.html new file mode 100644 index 00000000000..d9c66e79319 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-09.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-09-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="rtl"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-10-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-10-ref.html new file mode 100644 index 00000000000..391e5047f91 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-10-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=rtl` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="rtl"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: rtl / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-10.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-10.html new file mode 100644 index 00000000000..ad35af808eb --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-10.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-10-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="rtl"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-11-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-11-ref.html new file mode 100644 index 00000000000..ae7e849c977 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-11-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=auto` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="auto"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-11.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-11.html new file mode 100644 index 00000000000..31e04f065e9 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-11.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-11-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="auto"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = ` + <slot></slot> + `; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-12-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-12-ref.html new file mode 100644 index 00000000000..6f6b40218a8 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-12-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=auto` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="rtl"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: rtl / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-12.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-12.html new file mode 100644 index 00000000000..f6183a98d9d --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-12.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the shadow host, paragraph in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-12-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the shadow host, paragraph in the light tree</p> +<div id="host" dir="rtl"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<slot></slot>`; + result.innerHTML += html_direction(host.firstChild) + " / " + getComputedStyle(host.firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-13-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-13-ref.html new file mode 100644 index 00000000000..a6ec54186fe --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-13-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=ltr` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="ltr"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-13.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-13.html new file mode 100644 index 00000000000..35a00e6d288 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-13.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-13-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="ltr"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p>paragraph.</p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-14-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-14-ref.html new file mode 100644 index 00000000000..73d4eab9622 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-14-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=ltr` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="ltr"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-14.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-14.html new file mode 100644 index 00000000000..6aa4a639fd0 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-14.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-14-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="ltr"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p>اختبر.</p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-15-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-15-ref.html new file mode 100644 index 00000000000..0139997e657 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-15-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=rtl` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="rtl"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: rtl / rtl.</p> + + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-15.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-15.html new file mode 100644 index 00000000000..37c05d283c2 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-15.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-15-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="rtl"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p>paragraph.</p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-16-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-16-ref.html new file mode 100644 index 00000000000..926b7a900d7 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-16-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=rtl` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="rtl"><p>اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: rtl / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-16.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-16.html new file mode 100644 index 00000000000..2a8bb64a1bd --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-16.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-16-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="rtl"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p>اختبر.</p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-17-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-17-ref.html new file mode 100644 index 00000000000..b17c3e191d8 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-17-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=auto` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="auto"><p>paragraph.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-17.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-17.html new file mode 100644 index 00000000000..7016a271741 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-17.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-17-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="auto"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p>paragraph.</p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-18-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-18-ref.html new file mode 100644 index 00000000000..6155a9f2c95 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-18-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=auto` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="ltr"><p dir="">اختبر.</p></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-18.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-18.html new file mode 100644 index 00000000000..6796dd18eaf --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-18.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the shadow host, paragraph in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-18-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the shadow host, paragraph in the shadow tree</p> +<div id="host" dir="auto"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p>اختبر.</p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-19-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-19-ref.html new file mode 100644 index 00000000000..61a9592a4a8 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-19-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} + +</style> +</head> +<body> + +<p>`dir=ltr` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="ltr">text.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-19.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-19.html new file mode 100644 index 00000000000..a345a7b60d4 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-19.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-19-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="ltr"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `text.`; + result.innerHTML += html_direction(host) + " / " + getComputedStyle(host).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-20-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-20-ref.html new file mode 100644 index 00000000000..2e813817722 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-20-ref.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +</head> +<body> + +<p>`dir=ltr` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="ltr">اختبر.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-20.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-20.html new file mode 100644 index 00000000000..0072d9b6c96 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-20.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-20-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="ltr"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `اختبر.`; + result.innerHTML += html_direction(host) + " / " + getComputedStyle(host).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-21-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-21-ref.html new file mode 100644 index 00000000000..58c8d426f28 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-21-ref.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +</head> +<body> + +<p>`dir=rtl` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="rtl">text.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: rtl / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-21.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-21.html new file mode 100644 index 00000000000..5b9a4aa184b --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-21.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-21-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="rtl"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `text.`; + result.innerHTML += html_direction(host) + " / " + getComputedStyle(host).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-22-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-22-ref.html new file mode 100644 index 00000000000..6721da534f7 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-22-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +</head> +<body> + +<p>`dir=rtl` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="rtl">اختبر.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: rtl / rtl.</p> + + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-22.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-22.html new file mode 100644 index 00000000000..009ba460ce1 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-22.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-22-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="rtl"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `اختبر.`; + result.innerHTML += html_direction(host) + " / " + getComputedStyle(host).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-23-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-23-ref.html new file mode 100644 index 00000000000..bf06a448470 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-23-ref.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +</head> +<body> + +<p>`dir=auto` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="auto">text.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-23.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-23.html new file mode 100644 index 00000000000..dea79b93e13 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-23.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-23-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="auto"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `text.`; + result.innerHTML += html_direction(host) + " / " + getComputedStyle(host).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-24-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-24-ref.html new file mode 100644 index 00000000000..8453e945337 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-24-ref.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +</head> +<body> + +<p>`dir=auto` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="ltr">اختبر.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-24.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-24.html new file mode 100644 index 00000000000..d26ccb270a2 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-24.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the div (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-24-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the div (shadow host), text in the shadow tree</p> +<div id="host" dir="auto"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the host’s text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `اختبر.`; + result.innerHTML += html_direction(host) + " / " + getComputedStyle(host).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-25-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-25-ref.html new file mode 100644 index 00000000000..5a2f6d57776 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-25-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=ltr` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +<p dir="ltr">paragraph.</p> +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-25.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-25.html new file mode 100644 index 00000000000..508b8260ff9 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-25.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-25-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +paragraph. +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p dir="ltr"><slot></slot></p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-26-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-26-ref.html new file mode 100644 index 00000000000..41e1dbc8a81 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-26-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=ltr` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +<p dir="ltr">اختبر.</p> +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-26.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-26.html new file mode 100644 index 00000000000..b19cb976f88 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-26.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-26-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +اختبر. +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p dir="ltr"><slot></slot></p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-27-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-27-ref.html new file mode 100644 index 00000000000..075230d055c --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-27-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=rtl` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +<p dir="rtl">paragraph.</p> +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: rtl / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-27.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-27.html new file mode 100644 index 00000000000..8380f17b218 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-27.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-27-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +paragraph. +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p dir="rtl"><slot></slot></p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-28-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-28-ref.html new file mode 100644 index 00000000000..580f5fe3b11 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-28-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=rtl` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +<p dir="rtl">اختبر.</p> +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: rtl / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-28.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-28.html new file mode 100644 index 00000000000..3a0d6756b35 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-28.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-28-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +اختبر. +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p dir="rtl"><slot></slot></p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-29-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-29-ref.html new file mode 100644 index 00000000000..4b949acb098 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-29-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=auto` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +<p dir="ltr">para.</p> +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-29.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-29.html new file mode 100644 index 00000000000..46cbf8d2911 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-29.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-29-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +para. +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p dir="auto"><slot></slot></p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-30-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-30-ref.html new file mode 100644 index 00000000000..be2cc44abd5 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-30-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +div p {width: 50%; border: 1px dotted;} +</style> +</head> +<body> + +<p>`dir=auto` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +<p dir="ltr">اختبر.</p> +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-30.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-30.html new file mode 100644 index 00000000000..2a3e56e62cc --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-30.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on a paragraph in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-30-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on a paragraph in the shadow tree, text in the light tree</p> +<div id="host"> +اختبر. +</div> +<p id="result">The HTML direction / computed CSS `direction` value for the paragraph is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>p {width: 50%; border: 1px dotted;}</style><p dir="auto"><slot></slot></p>`; + result.innerHTML += html_direction(root.querySelector('p')) + " / " + getComputedStyle(root.querySelector('p')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-31-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-31-ref.html new file mode 100644 index 00000000000..1c5b5b11a8c --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-31-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the slot, span in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} +</style> +</head> +<body> + +<p>`dir=rtl` on the slot, span in the light tree</p> +<div id="host" dir="ltr"><span dir="rtl" style="unicode-bidi: normal">RTL.</span></div> +<p id="result">The HTML direction / computed CSS `direction` value for the span is: ltr / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-31.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-31.html new file mode 100644 index 00000000000..d48a0f8c040 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-31.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the slot, span in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-31-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the slot, span in the light tree</p> +<div id="host" dir="ltr"><span>RTL.</span></div> +<p id="result">The HTML direction / computed CSS `direction` value for the span is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<slot dir="rtl"></slot>`; + result.innerHTML += html_direction(host.querySelector('span')) + " / " + getComputedStyle(host.querySelector('span')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-32-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-32-ref.html new file mode 100644 index 00000000000..6e5d9a96e8e --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-32-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, span in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} +</style> +</head> +<body> + +<p>`dir=rtl` on the shadow host, span in the shadow tree</p> +<div id="host" dir="rtl"><span>RTL.</span></div> +<p id="result">The HTML direction / computed CSS `direction` value for the shadow span is: rtl / rtl.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-32.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-32.html new file mode 100644 index 00000000000..ac9c9e45792 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-32.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=rtl on the shadow host, span in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-32-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=rtl` on the shadow host, span in the shadow tree</p> +<div id="host" dir="rtl"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the shadow span is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<style>span {border: 1px solid silver;}</style><span>RTL.</span>`; + result.innerHTML += html_direction(root.querySelector('span')) + " / " + getComputedStyle(root.querySelector('span')).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-33-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-33-ref.html new file mode 100644 index 00000000000..cdf89d78bb6 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-33-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the span (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} +</style> +</head> +<body> + +<p>`dir=auto` on the span (shadow host), text in the shadow tree</p> +<span id="host" dir="ltr">اختبر.</span> +<p id="result">The HTML direction / computed CSS `direction` value for the shadow host is: ltr / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-33.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-33.html new file mode 100644 index 00000000000..814e3b34d6f --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-33.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on the span (shadow host), text in the shadow tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-33-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on the span (shadow host), text in the shadow tree</p> +<span id="host" dir="auto"></span> +<p id="result">The HTML direction / computed CSS `direction` value for the shadow host is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `اختبر.`; + result.innerHTML += html_direction(host) + " / " + getComputedStyle(host).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-34-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-34-ref.html new file mode 100644 index 00000000000..4cedca8e50d --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-34-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on a span in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +</style> +</head> +<body> + +<p>`dir=auto` on a span in the shadow tree, text in the light tree</p> +<div id="host"><span dir="ltr">اختبر.</span></div> +<p id="result">The HTML direction / computed CSS `direction` value for the shadow span is: ltr / ltr.</p> + + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-34.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-34.html new file mode 100644 index 00000000000..07f75d216a8 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-34.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto on a span in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-34-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` on a span in the shadow tree, text in the light tree</p> +<div id="host">اختبر.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the shadow span is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<span dir="auto"><slot></slot></span>`; + result.innerHTML += html_direction(root.querySelector("span")) + " / " + getComputedStyle(root.querySelector("span")).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-35-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-35-ref.html new file mode 100644 index 00000000000..c4e9f8c70eb --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-35-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on a div in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div#host {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} +</style> +</head> +<body> + +<p>`dir=ltr` on a div in the shadow tree, text in the light tree</p> +<div id="host" dir="rtl"><div dir="ltr"><span>اختبر.</span></div></div> +<p id="result">The HTML direction / computed CSS `direction` value for the span is: rtl / ltr.</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-35.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-35.html new file mode 100644 index 00000000000..0f2a7c882f8 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-35.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on a div in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-35-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on a div in the shadow tree, text in the light tree</p> +<div id="host" dir="rtl"><span>اختبر.</span></div> +<p id="result">The HTML direction / computed CSS `direction` value for the span is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<div dir="ltr"><slot></slot></div>`; + result.innerHTML += html_direction(root.querySelector("div").firstChild) + " / " + getComputedStyle(root.querySelector("div").firstChild).direction + '.'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-36-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-36-ref.html new file mode 100644 index 00000000000..f8af117e3bf --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-36-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto and text in a slot in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} +</style> +</head> +<body> + +<p>`dir=auto` and text in a slot in the shadow tree, text in the light tree</p> +<div id="host">English.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the light tree text is: ltr / ltr (on the slot) and ltr / ltr (on the host).</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-36.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-36.html new file mode 100644 index 00000000000..ff4f11b3a6f --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-36.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto and text in a slot in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-36-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` and text in a slot in the shadow tree, text in the light tree</p> +<div id="host">English.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the light tree text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<slot dir=auto>اختبر</slot>`; + result.innerHTML += html_direction(root.firstChild) + " / " + getComputedStyle(root.firstChild).direction + " (on the " + root.firstChild.localName + ') and ' + html_direction(host) + " / " + getComputedStyle(host).direction + ' (on the ' + host.id + ').'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-37-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-37-ref.html new file mode 100644 index 00000000000..5941b23c02a --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-37-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto and text in a div in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} +</style> +</head> +<body> + +<p>`dir=auto` and text in a div in the shadow tree, text in the light tree</p> +<div id="host" dir="rtl">اختبر.123 456.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the light tree text is: rtl / rtl (on the div) and ltr / ltr (on the host).</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-37.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-37.html new file mode 100644 index 00000000000..ba0480636a0 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-37.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto and text in a div in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-37-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` and text in a div in the shadow tree, text in the light tree</p> +<div id="host">123 456.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the light tree text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<div dir="auto">اختبر.<slot></slot></div>`; + result.innerHTML += html_direction(root.firstChild) + " / " + getComputedStyle(root.firstChild).direction + " (on the " + root.firstChild.localName + ') and ' + html_direction(host) + " / " + getComputedStyle(host).direction + ' (on the ' + host.id + ').'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-38-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-38-ref.html new file mode 100644 index 00000000000..f8af117e3bf --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-38-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto and text in a slot in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} +</style> +</head> +<body> + +<p>`dir=auto` and text in a slot in the shadow tree, text in the light tree</p> +<div id="host">English.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the light tree text is: ltr / ltr (on the slot) and ltr / ltr (on the host).</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-38.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-38.html new file mode 100644 index 00000000000..e8f25eb5689 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-38.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=auto and text in a slot in the shadow tree, text in the light tree</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-38-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=auto` and text in a slot in the shadow tree, text in the light tree</p> +<div id="host">English.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the light tree text is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<slot dir=auto>اختبر.</slot>`; + result.innerHTML += html_direction(root.firstChild) + " / " + getComputedStyle(root.firstChild).direction + " (on the " + root.firstChild.localName + ') and ' + html_direction(host) + " / " + getComputedStyle(host).direction + ' (on the ' + host.id + ').'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-39-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-39-ref.html new file mode 100644 index 00000000000..8f75e9877c4 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-39-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: text in the light tree, slotted node</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +</head> +<body> + +<p>text in the light tree, slotted node</p> +<div id="host">slotted text.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the defaultContent when there is a slotted node: ltr / ltr (on the div).</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-39.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-39.html new file mode 100644 index 00000000000..72fdd665fc3 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-39.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: text in the light tree, slotted node</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-39-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>text in the light tree, slotted node</p> +<div id="host">slotted text.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the defaultContent when there is a slotted node: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<slot dir=auto><div>أخبار</div>.</slot>`; + result.innerHTML += html_direction(root.firstChild.firstChild) + " / " + getComputedStyle(root.firstChild.firstChild).direction + " (on the " + root.firstChild.firstChild.localName + ').'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-40-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-40-ref.html new file mode 100644 index 00000000000..c1c074812b5 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-40-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: text in the light tree, no slotted node</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} +</style> +</head> +<body> + +<p>text in the light tree, no slotted node</p> +<div id="host" dir="rtl">أخبار.</div> +<p id="result">The HTML direction / computed CSS `direction` value for the defaultContent when there is not a slotted node: rtl / rtl (on the div).</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-40.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-40.html new file mode 100644 index 00000000000..567f4fa9da8 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-40.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: text in the light tree, no slotted node</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-40-ref.html"> +<style type="text/css"> +body {width: 600px;} +div {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>text in the light tree, no slotted node</p> +<div id="host"></div> +<p id="result">The HTML direction / computed CSS `direction` value for the defaultContent when there is not a slotted node: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<slot dir=auto><div>أخبار.</div></slot>`; + result.innerHTML += html_direction(root.firstChild.firstChild) + " / " + getComputedStyle(root.firstChild.firstChild).direction + " (on the " + root.firstChild.firstChild.localName + ').'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-41-ref.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-41-ref.html new file mode 100644 index 00000000000..41f9c8bc31c --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-41-ref.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on a div in the shadow tree, dir=rtl on the shadow host, no slotted text in the light or dark trees</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<style type="text/css"> +body {width: 600px;} +#host {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +</head> +<body> + +<p>`dir=ltr` on a div in the shadow tree, `dir=rtl` on the shadow host, no slotted text in the light or dark trees</p> +<div id="host" dir="rtl"><div dir="ltr"><span dir="rtl"></span></div></div> +<p id="result">The HTML direction / computed CSS `direction` value is: rtl / rtl (on the slot).</p> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-41.html b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-41.html new file mode 100644 index 00000000000..48e2057552c --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-41.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"/> +<title>[dir] and shadow slots: dir=ltr on a div in the shadow tree, dir=rtl on the shadow host, no slotted text in the light or dark trees</title> +<link rel="author" title="Eric Meyer" href="mailto:emeyer@igalia.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/C#the-dir-attribute"> +<link rel="help" href="https://github.com/whatwg/html/issues/3699"> +<link rel="help" href="https://github.com/whatwg/html/pull/9796"> +<link rel="match" href="dir-shadow-41-ref.html"> +<style type="text/css"> +body {width: 600px;} +#host {border: 1px solid gray; margin: 1em; padding: 0.25em;} +span {border: 1px solid silver;} + +</style> +<script src="dir-shadow-utils.js"></script> +</head> +<body> + +<p>`dir=ltr` on a div in the shadow tree, `dir=rtl` on the shadow host, no slotted text in the light or dark trees</p> +<div id="host" dir="rtl"><span slot="x1"></span></div> +<p id="result">The HTML direction / computed CSS `direction` value is: </p> + +<script type="text/javascript"> + let root = host.attachShadow({mode:"open"}); + root.innerHTML = `<div dir="ltr"><slot dir="auto" name="x1"></slot></div>`; + result.innerHTML += html_direction(root.querySelector("div[dir=ltr]").firstChild) + " / " + getComputedStyle(root.querySelector("div[dir=ltr]").firstChild).direction + " (on the " + root.querySelector("div[dir=ltr]").firstChild.localName + ').'; +</script> + +</body> +</html> diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-utils.js b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-utils.js new file mode 100644 index 00000000000..c7d89cf9082 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/dir-shadow-utils.js @@ -0,0 +1,8 @@ +function html_direction(element) { + let is_ltr = element.matches(":dir(ltr)"); + let is_rtl = element.matches(":dir(rtl)"); + if (is_ltr == is_rtl) { + return "error"; + } + return is_ltr ? "ltr" : "rtl"; +} diff --git a/tests/wpt/tests/html/dom/elements/global-attributes/lang-attribute-shadow.window.js b/tests/wpt/tests/html/dom/elements/global-attributes/lang-attribute-shadow.window.js new file mode 100644 index 00000000000..9ed242df169 --- /dev/null +++ b/tests/wpt/tests/html/dom/elements/global-attributes/lang-attribute-shadow.window.js @@ -0,0 +1,81 @@ +const TESTS = [ + { + title: "lang only on slot", + light_tree: ` + <div id="host" data-expected="en-US"><span data-expected="en-US"></span></div> + `, + shadow_tree: ` + <slot lang="en-AU" data-expected="en-AU"></slot> + `, + }, + { + title: "lang only on host", + light_tree: ` + <div id="host" lang="en-AU" data-expected="en-AU"><span data-expected="en-AU"></span></div> + `, + shadow_tree: ` + <slot data-expected="en-AU"></slot> + `, + }, + { + title: "lang on host and slot", + light_tree: ` + <div id="host" lang="en-AU" data-expected="en-AU"><span data-expected="en-AU"></span></div> + `, + shadow_tree: ` + <slot lang="en-GB" data-expected="en-GB"></slot> + `, + }, + { + title: "lang on host and slotted element", + light_tree: ` + <div id="host" lang="en-AU" data-expected="en-AU"><span lang="en-GB" data-expected="en-GB"></span></div> + `, + shadow_tree: ` + <slot data-expected="en-AU"></slot> + `, + }, + { + title: "lang on host and slot and slotted element", + light_tree: ` + <div id="host" lang="en-AU" data-expected="en-AU"><span lang="en-GB" data-expected="en-GB"></span></div> + `, + shadow_tree: ` + <slot lang="en-NZ" data-expected="en-NZ"></slot> + `, + }, + { + title: "lang on slot inherits from shadow host", + light_tree: ` + <div id="host" lang="en-GB" data-expected="en-GB"><span lang="en-US" data-expected="en-US"></span></div> + `, + shadow_tree: ` + <div lang="en-CA" data-expected="en-CA"> + <slot data-expected="en-GB"></slot> + </div> + `, + }, +]; + +const container = document.createElement("div"); +document.body.append(container); +container.lang = "en-US"; + +for (const obj of TESTS) { + test(() => { + container.innerHTML = obj.light_tree; + let shadow = container.querySelector("#host").attachShadow({mode: "open"}); + shadow.innerHTML = obj.shadow_tree; + for (const element of Array.from(container.querySelectorAll("[data-expected]")).concat(Array.from(shadow.querySelectorAll("[data-expected]")))) { + const expected = element.getAttribute("data-expected"); + assert_true(element.matches(`:lang(${expected})`), `element matches expected language ${expected}`); + for (const other_lang of ["en-US", "en-AU", "en-GB", "en-NZ", "en-CA"]) { + if (expected != other_lang) { + assert_false(element.matches(`:lang(${other_lang})`), `element does not match language ${other_lang}`); + } + } + } + }, obj.title); +} + +container.remove(); diff --git a/tests/wpt/tests/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html b/tests/wpt/tests/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html index eac1eaf7d0a..14e712ce254 100644 --- a/tests/wpt/tests/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html +++ b/tests/wpt/tests/html/infrastructure/urls/base-url/document-base-url-changes-about-srcdoc-2.https.html @@ -10,25 +10,19 @@ setup({ explicit_done: true }); window.start = childDocument => { const grandchildDocument = - childDocument.querySelector('iframe').contentDocument; + childDocument.getElementById('foo').contentDocument; test(t => { - // Clean up the iframe so that the dangling document.open() doesn't cause a - // harness timeout. - t.add_cleanup(() => { - document.querySelector('iframe').remove(); - }); - - assert_equals(childDocument.URL, 'about:srcdoc', + assert_equals(childDocument.URL, 'about:blank', 'Child document starting URL'); - assert_equals(grandchildDocument.URL, 'about:blank', + assert_equals(grandchildDocument.URL, 'about:srcdoc', 'Grandchild document starting URL'); const originalChildBaseURL = childDocument.baseURI; grandchildDocument.open("", ""); // Verify that the document.open() trick worked: the grandchild should now // have the same url as the child, and have inherited the child's base url. - assert_equals(grandchildDocument.URL, 'about:srcdoc', + assert_equals(grandchildDocument.URL, 'about:blank', 'Grandchild document after document.open() trick'); assert_equals(grandchildDocument.baseURI, originalChildBaseURL, 'Grandchild base URL must match child base URL'); @@ -41,7 +35,7 @@ window.start = childDocument => { // Verify that changing the child's base url succeeded and did not affect // the grandchild's base url. const newChildBaseURL = childDocument.baseURI; - assert_equals(grandchildDocument.URL, 'about:srcdoc', + assert_equals(grandchildDocument.URL, 'about:blank', 'Grandchild document after child gets new base URL'); assert_not_equals(newChildBaseURL, originalChildBaseURL, 'Child base URL must change'); @@ -53,5 +47,25 @@ window.start = childDocument => { }; </script> -<iframe srcdoc="<iframe></iframe><script>parent.start(document)</script>"> -</iframe> +<iframe src='about:blank'></iframe> + +<script> + window.onload = () => { + let subframe_doc = document.querySelector('iframe').contentDocument; + subframe_doc.body.innerHTML = '<iframe srcdoc="foo" id="foo"></iframe>'; + promise_test((test) => { + return new Promise(async resolve => { + // We need a timeout since the srcdoc frame takes time to setup and + // doesn't fire a loadstop. + test.step_timeout(resolve, 100); + }).then(() => { + assert_equals( + subframe_doc.getElementById('foo').contentDocument.URL, + 'about:srcdoc'); + let script = subframe_doc.createElement('script'); + script.innerHTML = 'parent.start(document);'; + subframe_doc.body.appendChild(script); + }); + }, "wrapper promise test for timeout."); + }; +</script> diff --git a/tests/wpt/tests/html/rendering/the-details-element/details-display-type-002-ref.html b/tests/wpt/tests/html/rendering/the-details-element/details-display-type-002-ref.html new file mode 100644 index 00000000000..297634b521f --- /dev/null +++ b/tests/wpt/tests/html/rendering/the-details-element/details-display-type-002-ref.html @@ -0,0 +1,10 @@ +<!doctype html> +<style> + div { + margin-top: 3em; + } +</style> +<details open> + <summary>The summary.</summary> + <div>Some details.</div> +</details> diff --git a/tests/wpt/tests/html/rendering/the-details-element/details-display-type-002.tentative.html b/tests/wpt/tests/html/rendering/the-details-element/details-display-type-002.tentative.html new file mode 100644 index 00000000000..716221f7c5c --- /dev/null +++ b/tests/wpt/tests/html/rendering/the-details-element/details-display-type-002.tentative.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML> +<meta charset="utf-8"> +<title>Details display property (flex)</title> +<link rel="match" href="details-display-type-002-ref.html"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1856374"> +<link rel="help" href="https://github.com/dbaron/details-styling"> +<style> + details { + display: flex; + flex-direction: column; + gap: 3em; + } +</style> +<details open> + <summary>The summary.</summary> + Some details. +</details> diff --git a/tests/wpt/tests/html/rendering/widgets/form-sizing-input-number.tentative.html b/tests/wpt/tests/html/rendering/widgets/form-sizing-input-number.tentative.html index 59835805a07..0bf64c181d0 100644 --- a/tests/wpt/tests/html/rendering/widgets/form-sizing-input-number.tentative.html +++ b/tests/wpt/tests/html/rendering/widgets/form-sizing-input-number.tentative.html @@ -4,7 +4,7 @@ <script src="/resources/testharnessreport.js"></script> <style> .disable-default { - form-sizing: normal; + form-sizing: content; } .small-placeholder { @@ -51,7 +51,7 @@ function addTwoElements(source1, source2) { test(() => { let pair = addElements(`<input type=${type}>`); // A text <input> has approximately 20ch width by default. - // A text <input> with form-sizing:normal must be shorter than the default. + // A text <input> with form-sizing:content must be shorter than the default. assert_less_than(pair.content.offsetWidth, pair.fixed.offsetWidth); assert_equals(pair.content.offsetHeight, pair.fixed.offsetHeight); diff --git a/tests/wpt/tests/html/rendering/widgets/form-sizing-input-text.tentative.html b/tests/wpt/tests/html/rendering/widgets/form-sizing-input-text.tentative.html index 32cabc557f6..065994471f0 100644 --- a/tests/wpt/tests/html/rendering/widgets/form-sizing-input-text.tentative.html +++ b/tests/wpt/tests/html/rendering/widgets/form-sizing-input-text.tentative.html @@ -4,7 +4,7 @@ <script src="/resources/testharnessreport.js"></script> <style> .disable-default { - form-sizing: normal; + form-sizing: content; } .small-placeholder { @@ -50,7 +50,7 @@ function addTwoElements(source1, source2) { test(() => { let pair = addElements(`<input type=${type}>`); // A text <input> has approximately 20ch width by default. - // A text <input> with form-sizing:normal must be shorter than the default. + // A text <input> with form-sizing:content must be shorter than the default. assert_less_than(pair.content.offsetWidth, pair.fixed.offsetWidth); assert_equals(pair.content.offsetHeight, pair.fixed.offsetHeight); diff --git a/tests/wpt/tests/html/rendering/widgets/form-sizing-select.tentative.html b/tests/wpt/tests/html/rendering/widgets/form-sizing-select.tentative.html index f9efdc74f91..7ce6f03ff4b 100644 --- a/tests/wpt/tests/html/rendering/widgets/form-sizing-select.tentative.html +++ b/tests/wpt/tests/html/rendering/widgets/form-sizing-select.tentative.html @@ -5,7 +5,7 @@ <body> <style> .disable-default { - form-sizing: normal; + form-sizing: content; } </style> <div id="container"></div> @@ -18,7 +18,7 @@ const DISABLE = 'class="disable-default"'; test(() => { const s = '<select>><option>1<option>quick brown<option>fox</select>'; container.innerHTML = s + s; - container.lastElementChild.style.formSizing = 'normal'; + container.lastElementChild.style.formSizing = 'content'; const widthForContent1 = container.lastElementChild.offsetWidth; assert_greater_than(container.firstElementChild.offsetWidth, widthForContent1); @@ -31,9 +31,9 @@ test(() => { container.innerHTML = '<select><option>foo<option>quick brown fox</select>'; const select = container.firstElementChild; const initialWidth = select.offsetWidth; - select.style.formSizing = 'normal'; + select.style.formSizing = 'content'; assert_less_than(select.offsetWidth, initialWidth); - select.style.formSizing = 'auto'; + select.style.formSizing = 'fixed'; assert_equals(select.offsetWidth, initialWidth); }, 'dropdown: Change the form-sizing value dynamically'); @@ -76,9 +76,9 @@ if (container.firstElementChild.offsetHeight != container.lastElementChild.offse container.innerHTML = '<select multiple><option>foo<option>quick brown fox</select>'; const select = container.firstElementChild; const initialHeight = select.offsetHeight; - select.style.formSizing = 'normal'; + select.style.formSizing = 'content'; assert_less_than(select.offsetHeight, initialHeight); - select.style.formSizing = 'auto'; + select.style.formSizing = 'fixed'; assert_equals(select.offsetHeight, initialHeight); }, 'listbox: Change the form-sizing value dynamically'); diff --git a/tests/wpt/tests/html/rendering/widgets/form-sizing-textarea.tentative.html b/tests/wpt/tests/html/rendering/widgets/form-sizing-textarea.tentative.html index ae20e59290c..fb4ce762e32 100644 --- a/tests/wpt/tests/html/rendering/widgets/form-sizing-textarea.tentative.html +++ b/tests/wpt/tests/html/rendering/widgets/form-sizing-textarea.tentative.html @@ -4,7 +4,7 @@ <script src="/resources/testharnessreport.js"></script> <style> .disable-default { - form-sizing: normal; + form-sizing: content; } .small-placeholder { @@ -49,7 +49,7 @@ function addTwoElements(source1, source2) { test(() => { let pair = addElements('<textarea></textarea>'); // Historically a <textarea> has approximately 20ch x 2lh size by default. - // A <textarea> with form-sizing:normal must be samller than the default. + // A <textarea> with form-sizing:content must be samller than the default. assert_less_than(pair.content.offsetWidth, pair.fixed.offsetWidth); assert_less_than(pair.content.offsetHeight, pair.fixed.offsetHeight); diff --git a/tests/wpt/tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html b/tests/wpt/tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html index 30d591ae6e7..67f2c8300d2 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html +++ b/tests/wpt/tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-env-change.html @@ -5,10 +5,20 @@ <div id=log></div> <iframe src="resources/media-min-width.html" width="300"></iframe> <script> +// promises for the iframed test to resolve +let beforeEnvChange = new Promise((resolve, reject) => { + window[0].resolveBeforeEnvChange = resolve; +}); +let afterEnvChange = new Promise((resolve, reject) => { + window[0].resolveAfterEnvChange = resolve; +}); +let afterLoadCalled = new Promise((resolve, reject) => { + window[0].resolveAfterLoadCalled = resolve; +}); const t = promise_test(async () => { - await new Promise(resolve => window.onload = resolve); - assert_equals(window[0].beforeEnvChange, '#a', 'beforeEnvChange'); - assert_equals(window[0].afterEnvChange, '#a', 'afterEnvChange'); - assert_equals(window[0].afterLoadCalled, '#b', 'afterLoadCalled'); + [beforeEnvChange, afterEnvChange, afterLoadCalled] = await Promise.all([ beforeEnvChange, afterEnvChange, afterLoadCalled ]); + assert_equals(beforeEnvChange, '#a', 'beforeEnvChange'); + assert_equals(afterEnvChange, '#a', 'afterEnvChange'); + assert_equals(afterLoadCalled, '#b', 'afterLoadCalled'); }); </script> diff --git a/tests/wpt/tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html b/tests/wpt/tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html index 7c309469024..8a4ad500cb1 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html +++ b/tests/wpt/tests/html/semantics/embedded-content/media-elements/loading-the-media-resource/resources/media-min-width.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<video></video> +<video width="200"></video> <script> function createSource(src, media) { var source = document.createElement('source'); @@ -14,18 +14,18 @@ const hash = str => str.substr(str.lastIndexOf('#')); (async () => { const v = document.querySelector('video'); v.getBoundingClientRect(); // force layout flush. ensure viewport dimensions are up-to-date - v.append(createSource('delayed-broken-video.py#a', '(min-width: 200px)')); - v.append(createSource('delayed-broken-video.py#b')); + v.append(createSource('/media-source/mp4/test.mp4#a', '(min-width: 200px)')); + v.append(createSource('/media-source/mp4/test.mp4#b')); await rAF(); await rAF(); - window.beforeEnvChange = hash(v.currentSrc); + window.resolveBeforeEnvChange(hash(v.currentSrc)); window.frameElement.width = '150'; await rAF(); await rAF(); - window.afterEnvChange = hash(v.currentSrc); + window.resolveAfterEnvChange(hash(v.currentSrc)); v.load() await rAF(); await rAF(); - window.afterLoadCalled = hash(v.currentSrc); + window.resolveAfterLoadCalled(hash(v.currentSrc)); })(); </script> diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/image-compositing-change.html b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/image-compositing-change.html index 658c2ad39ea..d3e7ee41711 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/image-compositing-change.html +++ b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/image-compositing-change.html @@ -2,7 +2,7 @@ <html class="reftest-wait"> <title>Composited images correctly re-raster when the image and bounds change</title> <meta charset="utf-8"> -<meta name=fuzzy content="maxDifference=150;totalPixels=296"> +<meta name=fuzzy content="maxDifference=0-150;totalPixels=0-296"> <link rel="match" href="image-compositing-change-ref.html"/> <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-img-element"> <style> diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-video-element/resize-during-playback.html b/tests/wpt/tests/html/semantics/embedded-content/the-video-element/resize-during-playback.html index 1b057bbeac3..e1f35768bc4 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/the-video-element/resize-during-playback.html +++ b/tests/wpt/tests/html/semantics/embedded-content/the-video-element/resize-during-playback.html @@ -14,12 +14,15 @@ for (const format of ['mp4', 'webm']) { const video = document.createElement('video'); assert_implements_optional(video.canPlayType(`video/${format}`), `${format} supported`); + const eventWatcher = new EventWatcher(t, video, ['resize', 'playing', 'error', 'ended']); + // Load the video and wait for initial resize event. - video.src = `/media/400x300-red-resize-200x150-green.${format}`; video.muted = true; video.preload = 'auto'; + video.onerror = t.unreached_func("error during playback"); + video.src = `/media/400x300-red-resize-200x150-green.${format}`; document.body.appendChild(video); - const eventWatcher = new EventWatcher(t, video, ['resize', 'playing', 'error', 'ended']); + await eventWatcher.wait_for(['resize']); assert_equals(video.videoWidth, 400, 'width after first resize event'); assert_equals(video.videoHeight, 300, 'height after first resize event'); diff --git a/tests/wpt/tests/html/semantics/forms/the-input-element/input-importNode-to-detached-document-crash.html b/tests/wpt/tests/html/semantics/forms/the-input-element/input-importNode-to-detached-document-crash.html new file mode 100644 index 00000000000..5e0cff4fa30 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-input-element/input-importNode-to-detached-document-crash.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<body> +<p>This test passes if it does not crash.</p> +<input id="input" type="image" src="data:image/gif;base64,"> +<iframe id="iframe"></iframe> +<script> +let i_doc = iframe.contentDocument; +iframe.remove(); +i_doc.importNode(input); +</script> +</body> diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html b/tests/wpt/tests/html/semantics/interactive-elements/the-details-element/name-attribute.html index 6f45b3da089..2685546e9b0 100644 --- a/tests/wpt/tests/html/semantics/interactive-elements/the-details-element/name-attribute.tentative.html +++ b/tests/wpt/tests/html/semantics/interactive-elements/the-details-element/name-attribute.html @@ -153,8 +153,8 @@ promise_test(async t => { if (mutation_event_received_ids.length == 0) { // ok if mutation events are not supported } else { - assert_array_equals(mutation_event_received_ids, ["e0", "e1"], - "removal event followed by addition event"); + assert_array_equals(mutation_event_received_ids, ["e1"], + "mutation events received only for open attribute mutation and not for closing other element"); } assert_element_states(elements, [0, 1, 0, 0], "states after mutation"); assert_array_equals(toggle_event_received_ids, [], "toggle events received before awaiting promises"); @@ -205,8 +205,8 @@ promise_test(async t => { assert_array_equals(received_ids, []); assert_element_states(elements, [1, 0, 0], "states before mutation"); elements[1].open = true; - assert_array_equals(received_ids, ["e0", "e1"], - "removal events received in tree order, followed by addition event, despite changes to name during mutation event"); + assert_array_equals(received_ids, ["e1"], + "mutation events received only for open attribute mutation and not for closing other element"); assert_element_states(elements, [0, 1, 0], "states after mutation"); }, "interaction of open attribute changes with mutation events"); @@ -336,14 +336,47 @@ promise_test(async t => { document.getElementById("e1"), document.getElementById("e2") ]; + let mutation_received_ids = []; + let listener = event => { + mutation_received_ids.push(event.target.id); + }; + for (let element of elements) { + element.addEventListener("DOMSubtreeModified", listener); + } + assert_element_states(elements, [1, 0, 1], "states before first mutation"); + assert_array_equals(mutation_received_ids, [], "mutation events received before first mutation"); elements[2].name = "a"; assert_element_states(elements, [1, 0, 0], "states after first mutation"); + if (mutation_received_ids.length != 0) { + // OK to not support mutation events, or to send DOMSubtreeModified + // only for attribute addition/removal (open) but not for attribute + // change (name) + assert_array_equals(mutation_received_ids, ["e2"], "mutation events received after first mutation"); + } elements[0].name = "c"; elements[2].open = true; assert_element_states(elements, [1, 0, 1], "states before second mutation"); + if (mutation_received_ids.length != 0) { // OK to not support mutation events + if (mutation_received_ids.length == 1) { + // OK to receive DOMSubtreeModified for attribute addition/removal + // (open) but not for attribute change (name) + assert_array_equals(mutation_received_ids, ["e2"], "mutation events received before second mutation"); + } else { + assert_array_equals(mutation_received_ids, ["e2", "e0", "e2"], "mutation events received before second mutation"); + } + } elements[0].name = "a"; assert_element_states(elements, [0, 0, 1], "states after second mutation"); + if (mutation_received_ids.length != 0) { // OK to not support mutation events + if (mutation_received_ids.length == 1) { + // OK to receive DOMSubtreeModified for attribute addition/removal + // (open) but not for attribute change (name) + assert_array_equals(mutation_received_ids, ["e2"], "mutation events received before second mutation"); + } else { + assert_array_equals(mutation_received_ids, ["e2", "e0", "e2", "e0"], "mutation events received after second mutation"); + } + } }, "handling of name attribute changes"); promise_test(async t => { @@ -392,28 +425,45 @@ promise_test(async t => { }); }; + let track_mutations = (element) => { + let result = { count: 0 }; + let listener = event => { + ++result.count; + }; + element.addEventListener("DOMSubtreeModified", listener); + return result; + } + await expect_opening(watch_e0); // Test appending an open element in the group. let new1 = make_details(); + let mutations1 = track_mutations(new1); let watch_new1 = new EventWatcher(t, new1, ['toggle']); new1.open = true; + assert_in_array(mutations1.count, [0, 1], "mutation events count before inserting new1"); await expect_opening(watch_new1); container.appendChild(new1); await expect_closing(watch_new1); + assert_in_array(mutations1.count, [0, 1], "mutation events count after inserting new1"); // Test appending a closed element in the group. let new2 = make_details(); + let mutations2 = track_mutations(new2); let watch_new2 = new EventWatcher(t, new2, ['toggle']); container.appendChild(new2); + assert_equals(mutations2.count, 0, "mutation events count after inserting new2"); // Test inserting an open element at the start of the group. let new3 = make_details(); + let mutations3 = track_mutations(new3); new3.open = true; // this time do this before creating the EventWatcher let watch_new3 = new EventWatcher(t, new3, ['toggle']); + assert_in_array(mutations3.count, [0, 1], "mutation events count before inserting new3"); await expect_opening(watch_new3); container.insertBefore(new3, elements[0]); await expect_closing(watch_new3); + assert_in_array(mutations3.count, [0, 1], "mutation events count after inserting new3"); }, "handling of insertion of elements into group"); </script> diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.tentative.html index 527d508252c..527d508252c 100644 --- a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html +++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.tentative.html diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.tentative.html index e9db7321cd7..e9db7321cd7 100644 --- a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html +++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.tentative.html diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.tentative.html index 6407ef23c2e..6407ef23c2e 100644 --- a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html +++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.tentative.html diff --git a/tests/wpt/tests/html/semantics/interfaces.js b/tests/wpt/tests/html/semantics/interfaces.js index 96abf61e2ce..05fc82f7673 100644 --- a/tests/wpt/tests/html/semantics/interfaces.js +++ b/tests/wpt/tests/html/semantics/interfaces.js @@ -100,6 +100,7 @@ var elements = [ ["output", "Output"], ["p", "Paragraph"], ["param", "Param"], + ["permission", "Permission"], ["picture", "Picture"], ["plaintext", ""], ["pre", "Pre"], diff --git a/tests/wpt/tests/html/semantics/permission-element/no-end-tag-no-contents.html b/tests/wpt/tests/html/semantics/permission-element/no-end-tag-no-contents.html new file mode 100644 index 00000000000..5fcce1421b6 --- /dev/null +++ b/tests/wpt/tests/html/semantics/permission-element/no-end-tag-no-contents.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<!--The permission element should have no end tag or content. + Therefore the parsing should stop after the beginning tag, and the following + element and text will become part of the 'body' element's contents. +--> +<permission type="geolocation"><span>this is some text</span></permission> + +<script> + test(function(){ + assert_equals(3, document.body.childElementCount); // permission, span, script + assert_equals(document.body.innerText, "this is some text", "The text should be part of the 'body' element's text"); + + assert_true(document.body.children[0] instanceof HTMLPermissionElement, "First element should be a permission element"); + var permission = document.body.children[0]; + assert_equals(permission.innerText, "", "The permission element should have no text"); + assert_equals(permission.childElementCount, 0, "The permission element should have no children"); + + assert_true(document.body.children[1] instanceof HTMLSpanElement, "Second element should be a span element"); + var span = document.body.children[1]; + assert_equals(span.innerText, "this is some text", "The span element should contain the text"); + }, "The permission element should have no end tag or contents"); +</script> +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-1.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-1.html index 5c8acd470eb..c5812765ebb 100644 --- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-1.html +++ b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-1.html @@ -3,8 +3,10 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="helper.js"></script> + <body> <script> runDelayEventTest('Script elements (parser-blocking)'); </script> + <script id="to-be-moved" src="../../resources/throw.js?pipe=trickle(d3)"></script> diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-2.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-2.html index 3399a8c001f..916673894dc 100644 --- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-2.html +++ b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-2.html @@ -3,6 +3,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="helper.js"></script> + <body> <script> runDelayEventTest('Script elements (async)'); diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-iframe.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-iframe.html index 38a9a215419..efec7657c36 100644 --- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-iframe.html +++ b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/delay-load-event-iframe.html @@ -2,4 +2,3 @@ <meta charset="utf-8"> <body onload="parent.onloadIframe()"> <script src="../../resources/throw.js?pipe=trickle(d2)"></script> -</body> diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/helper.js b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/helper.js index 331cf79bf0b..cb5f45eb0d6 100644 --- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/helper.js +++ b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/moving-between-documents/ordering/helper.js @@ -1,14 +1,14 @@ function runDelayEventTest(description) { - const t = async_test(description + + const t_original = async_test(description + ' still delay the load event in the original Document after move'); const t_new = async_test(description + ' does not delay the load event in the new Document after move'); - const start_time = performance.now(); const iframe = document.createElement('iframe'); iframe.setAttribute('src', 'delay-load-event-iframe.html'); + const start_time = performance.now(); document.body.appendChild(iframe); - window.onload = t.step_func_done(() => { + window.onload = t_original.step_func_done(() => { // The `#to-be-moved` script should delay the load event until it is loaded // (i.e. 3 seconds), not just until it is moved out to another Document // (i.e. 1 second). Here we expect the delay should be at least 2 seconds, @@ -20,11 +20,11 @@ function runDelayEventTest(description) { window.onloadIframe = t_new.step_func_done(() => { // The iframe's load event is fired after 2 seconds of its subresource // loading, and shouldn't wait for the `#to-be-moved` script. - assert_less_than(performance.now() - start_time, 2500, + assert_less_than(performance.now() - start_time, 3000, 'Load event should not be delayed until moved script is loaded'); }); - t.step_timeout(() => { + t_original.step_timeout(() => { const script = document.querySelector('#to-be-moved'); iframe.contentDocument.body.appendChild(script); }, 1000); diff --git a/tests/wpt/tests/interfaces/WEBGL_clip_cull_distance.idl b/tests/wpt/tests/interfaces/WEBGL_clip_cull_distance.idl index 46fa921fd53..a3a6dd869f9 100644 --- a/tests/wpt/tests/interfaces/WEBGL_clip_cull_distance.idl +++ b/tests/wpt/tests/interfaces/WEBGL_clip_cull_distance.idl @@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT // Content was automatically extracted by Reffy into webref // (https://github.com/w3c/webref) -// Source: WebGL WEBGL_clip_cull_distance Extension Draft Specification (https://registry.khronos.org/webgl/extensions/WEBGL_clip_cull_distance/) +// Source: WebGL WEBGL_clip_cull_distance Extension Specification (https://registry.khronos.org/webgl/extensions/WEBGL_clip_cull_distance/) [Exposed=(Window,Worker), LegacyNoInterfaceObject] interface WEBGL_clip_cull_distance { diff --git a/tests/wpt/tests/interfaces/WEBGL_multi_draw.idl b/tests/wpt/tests/interfaces/WEBGL_multi_draw.idl index ee8c044b529..fc2270029b1 100644 --- a/tests/wpt/tests/interfaces/WEBGL_multi_draw.idl +++ b/tests/wpt/tests/interfaces/WEBGL_multi_draw.idl @@ -7,26 +7,26 @@ interface WEBGL_multi_draw { undefined multiDrawArraysWEBGL( GLenum mode, - ([AllowShared] Int32Array or sequence<GLint>) firstsList, GLuint firstsOffset, - ([AllowShared] Int32Array or sequence<GLsizei>) countsList, GLuint countsOffset, + ([AllowShared] Int32Array or sequence<GLint>) firstsList, unsigned long long firstsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) countsList, unsigned long long countsOffset, GLsizei drawcount); undefined multiDrawElementsWEBGL( GLenum mode, - ([AllowShared] Int32Array or sequence<GLsizei>) countsList, GLuint countsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) countsList, unsigned long long countsOffset, GLenum type, - ([AllowShared] Int32Array or sequence<GLsizei>) offsetsList, GLuint offsetsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) offsetsList, unsigned long long offsetsOffset, GLsizei drawcount); undefined multiDrawArraysInstancedWEBGL( GLenum mode, - ([AllowShared] Int32Array or sequence<GLint>) firstsList, GLuint firstsOffset, - ([AllowShared] Int32Array or sequence<GLsizei>) countsList, GLuint countsOffset, - ([AllowShared] Int32Array or sequence<GLsizei>) instanceCountsList, GLuint instanceCountsOffset, + ([AllowShared] Int32Array or sequence<GLint>) firstsList, unsigned long long firstsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) countsList, unsigned long long countsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) instanceCountsList, unsigned long long instanceCountsOffset, GLsizei drawcount); undefined multiDrawElementsInstancedWEBGL( GLenum mode, - ([AllowShared] Int32Array or sequence<GLsizei>) countsList, GLuint countsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) countsList, unsigned long long countsOffset, GLenum type, - ([AllowShared] Int32Array or sequence<GLsizei>) offsetsList, GLuint offsetsOffset, - ([AllowShared] Int32Array or sequence<GLsizei>) instanceCountsList, GLuint instanceCountsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) offsetsList, unsigned long long offsetsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) instanceCountsList, unsigned long long instanceCountsOffset, GLsizei drawcount); }; diff --git a/tests/wpt/tests/interfaces/WEBGL_multi_draw_instanced_base_vertex_base_instance.idl b/tests/wpt/tests/interfaces/WEBGL_multi_draw_instanced_base_vertex_base_instance.idl index 2258fa9a10c..7e4515cc36b 100644 --- a/tests/wpt/tests/interfaces/WEBGL_multi_draw_instanced_base_vertex_base_instance.idl +++ b/tests/wpt/tests/interfaces/WEBGL_multi_draw_instanced_base_vertex_base_instance.idl @@ -7,20 +7,20 @@ interface WEBGL_multi_draw_instanced_base_vertex_base_instance { undefined multiDrawArraysInstancedBaseInstanceWEBGL( GLenum mode, - ([AllowShared] Int32Array or sequence<GLint>) firstsList, GLuint firstsOffset, - ([AllowShared] Int32Array or sequence<GLsizei>) countsList, GLuint countsOffset, - ([AllowShared] Int32Array or sequence<GLsizei>) instanceCountsList, GLuint instanceCountsOffset, - ([AllowShared] Uint32Array or sequence<GLuint>) baseInstancesList, GLuint baseInstancesOffset, + ([AllowShared] Int32Array or sequence<GLint>) firstsList, unsigned long long firstsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) countsList, unsigned long long countsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) instanceCountsList, unsigned long long instanceCountsOffset, + ([AllowShared] Uint32Array or sequence<GLuint>) baseInstancesList, unsigned long long baseInstancesOffset, GLsizei drawcount ); undefined multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL( GLenum mode, - ([AllowShared] Int32Array or sequence<GLsizei>) countsList, GLuint countsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) countsList, unsigned long long countsOffset, GLenum type, - ([AllowShared] Int32Array or sequence<GLsizei>) offsetsList, GLuint offsetsOffset, - ([AllowShared] Int32Array or sequence<GLsizei>) instanceCountsList, GLuint instanceCountsOffset, - ([AllowShared] Int32Array or sequence<GLint>) baseVerticesList, GLuint baseVerticesOffset, - ([AllowShared] Uint32Array or sequence<GLuint>) baseInstancesList, GLuint baseInstancesOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) offsetsList, unsigned long long offsetsOffset, + ([AllowShared] Int32Array or sequence<GLsizei>) instanceCountsList, unsigned long long instanceCountsOffset, + ([AllowShared] Int32Array or sequence<GLint>) baseVerticesList, unsigned long long baseVerticesOffset, + ([AllowShared] Uint32Array or sequence<GLuint>) baseInstancesList, unsigned long long baseInstancesOffset, GLsizei drawcount ); }; diff --git a/tests/wpt/tests/interfaces/audio-session.idl b/tests/wpt/tests/interfaces/audio-session.idl new file mode 100644 index 00000000000..f542347c710 --- /dev/null +++ b/tests/wpt/tests/interfaces/audio-session.idl @@ -0,0 +1,33 @@ +// GENERATED CONTENT - DO NOT EDIT +// Content was automatically extracted by Reffy into webref +// (https://github.com/w3c/webref) +// Source: Audio Session (https://w3c.github.io/audio-session/) + +enum AudioSessionState { + "inactive", + "active", + "interrupted" +}; + +enum AudioSessionType { + "auto", + "playback", + "transient", + "transient-solo", + "ambient", + "play-and-record" +}; + +[Exposed=Window] +partial interface Navigator { + // The default audio session that the user agent will use when media elements start/stop playing. + readonly attribute AudioSession audioSession; +}; + +[Exposed=Window] +interface AudioSession : EventTarget { + attribute AudioSessionType type; + + readonly attribute AudioSessionState state; + attribute EventHandler onstatechange; +}; diff --git a/tests/wpt/tests/interfaces/clipboard-apis.idl b/tests/wpt/tests/interfaces/clipboard-apis.idl index 3f2c9ba6f28..51d5af18dc2 100644 --- a/tests/wpt/tests/interfaces/clipboard-apis.idl +++ b/tests/wpt/tests/interfaces/clipboard-apis.idl @@ -28,6 +28,8 @@ interface ClipboardItem { readonly attribute FrozenArray<DOMString> types; Promise<Blob> getType(DOMString type); + + static boolean supports(DOMString type); }; enum PresentationStyle { "unspecified", "inline", "attachment" }; diff --git a/tests/wpt/tests/interfaces/css-view-transitions-2.idl b/tests/wpt/tests/interfaces/css-view-transitions-2.idl new file mode 100644 index 00000000000..6d23f406b01 --- /dev/null +++ b/tests/wpt/tests/interfaces/css-view-transitions-2.idl @@ -0,0 +1,9 @@ +// GENERATED CONTENT - DO NOT EDIT +// Content was automatically extracted by Reffy into webref +// (https://github.com/w3c/webref) +// Source: CSS View Transitions Module Level 2 (https://drafts.csswg.org/css-view-transitions-2/) + +[Exposed=Window] +interface PageRevealEvent : Event { + readonly attribute ViewTransition? viewTransition; +}; diff --git a/tests/wpt/tests/interfaces/edit-context.idl b/tests/wpt/tests/interfaces/edit-context.idl index 937b6579376..011130480e9 100644 --- a/tests/wpt/tests/interfaces/edit-context.idl +++ b/tests/wpt/tests/interfaces/edit-context.idl @@ -66,11 +66,14 @@ interface TextUpdateEvent : Event { readonly attribute unsigned long compositionEnd; }; +enum UnderlineStyle { "none", "solid", "double", "dotted", "dashed", "wavy" }; +enum UnderlineThickness { "none", "thin", "thick" }; + dictionary TextFormatInit { unsigned long rangeStart; unsigned long rangeEnd; - DOMString underlineStyle; - DOMString underlineThickness; + UnderlineStyle underlineStyle; + UnderlineThickness underlineThickness; }; [Exposed=Window] @@ -78,8 +81,8 @@ interface TextFormat { constructor(optional TextFormatInit options = {}); readonly attribute unsigned long rangeStart; readonly attribute unsigned long rangeEnd; - readonly attribute DOMString underlineStyle; - readonly attribute DOMString underlineThickness; + readonly attribute UnderlineStyle underlineStyle; + readonly attribute UnderlineThickness underlineThickness; }; dictionary TextFormatUpdateEventInit : EventInit { diff --git a/tests/wpt/tests/interfaces/fenced-frame.idl b/tests/wpt/tests/interfaces/fenced-frame.idl index 75196932821..0eed6a6b4ba 100644 --- a/tests/wpt/tests/interfaces/fenced-frame.idl +++ b/tests/wpt/tests/interfaces/fenced-frame.idl @@ -28,6 +28,13 @@ interface FencedFrameConfig { undefined setSharedStorageContext(DOMString contextString); }; +typedef (USVString or FencedFrameConfig) UrnOrConfig; + +partial interface Navigator { + Promise<undefined> deprecatedReplaceInURN( + UrnOrConfig urnOrConfig, record<USVString, USVString> replacements); +}; + enum FenceReportingDestination { "buyer", "seller", @@ -37,18 +44,27 @@ enum FenceReportingDestination { }; dictionary FenceEvent { - required DOMString eventType; - required DOMString eventData; - required sequence<FenceReportingDestination> destination; + // This dictionary has two mutually exclusive modes that aren’t represented as + // distinct IDL types due to distinguishability issues: + // + // When reporting to a preregistered destination (specified by enum), the following + // properties are used: + DOMString eventType; + DOMString eventData; + sequence<FenceReportingDestination> destination; boolean once = false; + + // When reporting to a custom destination URL (with substitution of macros defined by + // the Protected Audience buyer), the following property is used: + USVString destinationURL; }; typedef (FenceEvent or DOMString) ReportEventType; [Exposed=Window] interface Fence { - undefined reportEvent(ReportEventType event); - undefined setReportEventDataForAutomaticBeacons(FenceEvent event); + undefined reportEvent(optional ReportEventType event = {}); + undefined setReportEventDataForAutomaticBeacons(optional FenceEvent event = {}); sequence<FencedFrameConfig> getNestedConfigs(); }; diff --git a/tests/wpt/tests/interfaces/html.idl b/tests/wpt/tests/interfaces/html.idl index eec3f781c74..c7f744ccbe6 100644 --- a/tests/wpt/tests/interfaces/html.idl +++ b/tests/wpt/tests/interfaces/html.idl @@ -1783,7 +1783,7 @@ interface Window : EventTarget { // the user agent readonly attribute Navigator navigator; - readonly attribute Navigator clientInformation; // legacy alias of .navigator + [Replaceable] readonly attribute Navigator clientInformation; // legacy alias of .navigator readonly attribute boolean originAgentCluster; // user prompts diff --git a/tests/wpt/tests/interfaces/intersection-observer.idl b/tests/wpt/tests/interfaces/intersection-observer.idl index 52db1c4baa9..8502a11357f 100644 --- a/tests/wpt/tests/interfaces/intersection-observer.idl +++ b/tests/wpt/tests/interfaces/intersection-observer.idl @@ -10,6 +10,7 @@ interface IntersectionObserver { constructor(IntersectionObserverCallback callback, optional IntersectionObserverInit options = {}); readonly attribute (Element or Document)? root; readonly attribute DOMString rootMargin; + readonly attribute DOMString scrollMargin; readonly attribute FrozenArray<double> thresholds; undefined observe(Element target); undefined unobserve(Element target); @@ -42,5 +43,6 @@ dictionary IntersectionObserverEntryInit { dictionary IntersectionObserverInit { (Element or Document)? root = null; DOMString rootMargin = "0px"; + DOMString scrollMargin = "0px"; (double or sequence<double>) threshold = 0; }; diff --git a/tests/wpt/tests/interfaces/mediasession.idl b/tests/wpt/tests/interfaces/mediasession.idl index cca46ac5a85..83c1eb59dff 100644 --- a/tests/wpt/tests/interfaces/mediasession.idl +++ b/tests/wpt/tests/interfaces/mediasession.idl @@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT // Content was automatically extracted by Reffy into webref // (https://github.com/w3c/webref) -// Source: Media Session Standard (https://w3c.github.io/mediasession/) +// Source: Media Session (https://w3c.github.io/mediasession/) [Exposed=Window] partial interface Navigator { diff --git a/tests/wpt/tests/interfaces/shared-storage.idl b/tests/wpt/tests/interfaces/shared-storage.idl index d223736f29f..edbe2c2bcc3 100644 --- a/tests/wpt/tests/interfaces/shared-storage.idl +++ b/tests/wpt/tests/interfaces/shared-storage.idl @@ -84,3 +84,14 @@ interface WorkletSharedStorage : SharedStorage { async iterable<DOMString, DOMString>; }; + +interface mixin HTMLSharedStorageWritableElementUtils { + [CEReactions, SecureContext] attribute boolean sharedStorageWritable; +}; + +HTMLIFrameElement includes HTMLSharedStorageWritableElementUtils; +HTMLImageElement includes HTMLSharedStorageWritableElementUtils; + +partial dictionary RequestInit { + boolean sharedStorageWritable; +}; diff --git a/tests/wpt/tests/interfaces/turtledove.idl b/tests/wpt/tests/interfaces/turtledove.idl index 393792ffeac..c7f49f70a92 100644 --- a/tests/wpt/tests/interfaces/turtledove.idl +++ b/tests/wpt/tests/interfaces/turtledove.idl @@ -11,8 +11,10 @@ partial interface Navigator { dictionary AuctionAd { required USVString renderURL; any metadata; + USVString buyerReportingId; USVString buyerAndSellerReportingId; + sequence<USVString> allowedReportingOrigins; }; dictionary GenerateBidInterestGroup { @@ -121,6 +123,7 @@ interface InterestGroupReportingScriptRunnerGlobalScope : InterestGroupScriptRunnerGlobalScope { undefined sendReportTo(DOMString url); undefined registerAdBeacon(record<DOMString, USVString> map); + undefined registerAdMacro(DOMString name, USVString value); }; [SecureContext] diff --git a/tests/wpt/tests/interfaces/ua-client-hints.idl b/tests/wpt/tests/interfaces/ua-client-hints.idl index c69714b9734..6a40e1bdc4b 100644 --- a/tests/wpt/tests/interfaces/ua-client-hints.idl +++ b/tests/wpt/tests/interfaces/ua-client-hints.idl @@ -12,7 +12,7 @@ dictionary UADataValues { DOMString architecture; DOMString bitness; sequence<NavigatorUABrandVersion> brands; - DOMString formFactor; + sequence<DOMString> formFactor; sequence<NavigatorUABrandVersion> fullVersionList; DOMString model; boolean mobile; diff --git a/tests/wpt/tests/interfaces/uievents.idl b/tests/wpt/tests/interfaces/uievents.idl index 5fdc812e700..fef90d48410 100644 --- a/tests/wpt/tests/interfaces/uievents.idl +++ b/tests/wpt/tests/interfaces/uievents.idl @@ -32,6 +32,8 @@ interface MouseEvent : UIEvent { readonly attribute long screenY; readonly attribute long clientX; readonly attribute long clientY; + readonly attribute long layerX; + readonly attribute long layerY; readonly attribute boolean ctrlKey; readonly attribute boolean shiftKey; diff --git a/tests/wpt/tests/interfaces/webaudio.idl b/tests/wpt/tests/interfaces/webaudio.idl index 1569de204bd..73dc35d2609 100644 --- a/tests/wpt/tests/interfaces/webaudio.idl +++ b/tests/wpt/tests/interfaces/webaudio.idl @@ -9,6 +9,11 @@ enum AudioContextState { "closed" }; +enum AudioContextRenderSizeCategory { + "default", + "hardware" +}; + callback DecodeErrorCallback = undefined (DOMException error); callback DecodeSuccessCallback = undefined (AudioBuffer decodedData); @@ -20,6 +25,7 @@ interface BaseAudioContext : EventTarget { readonly attribute double currentTime; readonly attribute AudioListener listener; readonly attribute AudioContextState state; + readonly attribute unsigned long renderQuantumSize; [SameObject, SecureContext] readonly attribute AudioWorklet audioWorklet; attribute EventHandler onstatechange; @@ -92,6 +98,7 @@ dictionary AudioContextOptions { (AudioContextLatencyCategory or double) latencyHint = "interactive"; float sampleRate; (DOMString or AudioSinkOptions) sinkId; + (AudioContextRenderSizeCategory or unsigned long) renderSizeHint = "default"; }; dictionary AudioSinkOptions { @@ -150,6 +157,7 @@ dictionary OfflineAudioContextOptions { unsigned long numberOfChannels = 1; required unsigned long length; required float sampleRate; + (AudioContextRenderSizeCategory or unsigned long) renderSizeHint = "default"; }; [Exposed=Window] @@ -629,6 +637,7 @@ interface AudioWorkletGlobalScope : WorkletGlobalScope { readonly attribute unsigned long long currentFrame; readonly attribute double currentTime; readonly attribute float sampleRate; + readonly attribute unsigned long renderQuantumSize; readonly attribute MessagePort port; }; diff --git a/tests/wpt/tests/interfaces/webgl2.idl b/tests/wpt/tests/interfaces/webgl2.idl index 5499e5a68b1..9cb639932e8 100644 --- a/tests/wpt/tests/interfaces/webgl2.idl +++ b/tests/wpt/tests/interfaces/webgl2.idl @@ -304,7 +304,7 @@ interface mixin WebGL2RenderingContextBase // can not be exposed safely to JavaScript. GetBufferSubData // replaces it for the purpose of fetching data back from the GPU. undefined getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer, - optional GLuint dstOffset = 0, optional GLuint length = 0); + optional unsigned long long dstOffset = 0, optional GLuint length = 0); /* Framebuffer objects */ undefined blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, @@ -336,7 +336,7 @@ interface mixin WebGL2RenderingContextBase GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? srcData); undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, - GLuint srcOffset); + unsigned long long srcOffset); undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, @@ -346,7 +346,7 @@ interface mixin WebGL2RenderingContextBase TexImageSource source); // May throw DOMException undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, - [AllowShared] ArrayBufferView? srcData, optional GLuint srcOffset = 0); + [AllowShared] ArrayBufferView? srcData, optional unsigned long long srcOffset = 0); undefined copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); @@ -355,7 +355,7 @@ interface mixin WebGL2RenderingContextBase GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLintptr offset); undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, [AllowShared] ArrayBufferView srcData, - optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0); undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, @@ -363,7 +363,7 @@ interface mixin WebGL2RenderingContextBase undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, [AllowShared] ArrayBufferView srcData, - optional GLuint srcOffset = 0, + optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0); /* Programs and shaders */ @@ -375,28 +375,28 @@ interface mixin WebGL2RenderingContextBase undefined uniform3ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2); undefined uniform4ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); - undefined uniform1uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0, + undefined uniform1uiv(WebGLUniformLocation? location, Uint32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform2uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0, + undefined uniform2uiv(WebGLUniformLocation? location, Uint32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform3uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0, + undefined uniform3uiv(WebGLUniformLocation? location, Uint32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform4uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0, + undefined uniform4uiv(WebGLUniformLocation? location, Uint32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); /* Vertex attribs */ undefined vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w); @@ -415,11 +415,11 @@ interface mixin WebGL2RenderingContextBase undefined drawBuffers(sequence<GLenum> buffers); undefined clearBufferfv(GLenum buffer, GLint drawbuffer, Float32List values, - optional GLuint srcOffset = 0); + optional unsigned long long srcOffset = 0); undefined clearBufferiv(GLenum buffer, GLint drawbuffer, Int32List values, - optional GLuint srcOffset = 0); + optional unsigned long long srcOffset = 0); undefined clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32List values, - optional GLuint srcOffset = 0); + optional unsigned long long srcOffset = 0); undefined clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); @@ -486,10 +486,10 @@ interface mixin WebGL2RenderingContextOverloads undefined bufferData(GLenum target, AllowSharedBufferSource? srcData, GLenum usage); undefined bufferSubData(GLenum target, GLintptr dstByteOffset, AllowSharedBufferSource srcData); // WebGL2: - undefined bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, GLuint srcOffset, + undefined bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, unsigned long long srcOffset, optional GLuint length = 0); undefined bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData, - GLuint srcOffset, optional GLuint length = 0); + unsigned long long srcOffset, optional GLuint length = 0); // WebGL1 legacy entrypoints: undefined texImage2D(GLenum target, GLint level, GLint internalformat, @@ -512,7 +512,7 @@ interface mixin WebGL2RenderingContextOverloads TexImageSource source); // May throw DOMException undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, - GLuint srcOffset); + unsigned long long srcOffset); undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr pboOffset); @@ -521,46 +521,46 @@ interface mixin WebGL2RenderingContextOverloads TexImageSource source); // May throw DOMException undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, - GLuint srcOffset); + unsigned long long srcOffset); undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLintptr offset); undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, [AllowShared] ArrayBufferView srcData, - optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0); undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLintptr offset); undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, [AllowShared] ArrayBufferView srcData, - optional GLuint srcOffset = 0, + optional unsigned long long srcOffset = 0, optional GLuint srcLengthOverride = 0); - undefined uniform1fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0, + undefined uniform1fv(WebGLUniformLocation? location, Float32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform2fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0, + undefined uniform2fv(WebGLUniformLocation? location, Float32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform3fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0, + undefined uniform3fv(WebGLUniformLocation? location, Float32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform4fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0, + undefined uniform4fv(WebGLUniformLocation? location, Float32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform1iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0, + undefined uniform1iv(WebGLUniformLocation? location, Int32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform2iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0, + undefined uniform2iv(WebGLUniformLocation? location, Int32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform3iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0, + undefined uniform3iv(WebGLUniformLocation? location, Int32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); - undefined uniform4iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0, + undefined uniform4iv(WebGLUniformLocation? location, Int32List data, optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); undefined uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data, - optional GLuint srcOffset = 0, optional GLuint srcLength = 0); + optional unsigned long long srcOffset = 0, optional GLuint srcLength = 0); /* Reading back pixels */ // WebGL1: @@ -570,7 +570,7 @@ interface mixin WebGL2RenderingContextOverloads undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset); undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, - [AllowShared] ArrayBufferView dstData, GLuint dstOffset); + [AllowShared] ArrayBufferView dstData, unsigned long long dstOffset); }; [Exposed=(Window,Worker)] diff --git a/tests/wpt/tests/interfaces/webrtc-encoded-transform.idl b/tests/wpt/tests/interfaces/webrtc-encoded-transform.idl index 6dd2ba3fffa..1a456577d38 100644 --- a/tests/wpt/tests/interfaces/webrtc-encoded-transform.idl +++ b/tests/wpt/tests/interfaces/webrtc-encoded-transform.idl @@ -78,7 +78,7 @@ dictionary RTCEncodedVideoFrameMetadata { // New interfaces to define encoded video and audio frames. Will eventually // re-use or extend the equivalent defined in WebCodecs. -[Exposed=(Window,DedicatedWorker)] +[Exposed=(Window,DedicatedWorker), Serializable] interface RTCEncodedVideoFrame { readonly attribute RTCEncodedVideoFrameType type; readonly attribute unsigned long timestamp; @@ -93,7 +93,7 @@ dictionary RTCEncodedAudioFrameMetadata { short sequenceNumber; }; -[Exposed=(Window,DedicatedWorker)] +[Exposed=(Window,DedicatedWorker), Serializable] interface RTCEncodedAudioFrame { readonly attribute unsigned long timestamp; attribute ArrayBuffer data; diff --git a/tests/wpt/tests/interfaces/webtransport.idl b/tests/wpt/tests/interfaces/webtransport.idl index a9f514e2366..284ab350829 100644 --- a/tests/wpt/tests/interfaces/webtransport.idl +++ b/tests/wpt/tests/interfaces/webtransport.idl @@ -19,7 +19,7 @@ interface WebTransportDatagramDuplexStream { interface WebTransport { constructor(USVString url, optional WebTransportOptions options = {}); - Promise<WebTransportStats> getStats(); + Promise<WebTransportConnectionStats> getStats(); readonly attribute Promise<undefined> ready; readonly attribute WebTransportReliabilityMode reliability; readonly attribute WebTransportCongestionControl congestionControl; @@ -73,13 +73,12 @@ dictionary WebTransportSendStreamOptions { long long? sendOrder = null; }; -dictionary WebTransportStats { +dictionary WebTransportConnectionStats { DOMHighResTimeStamp timestamp; unsigned long long bytesSent; unsigned long long packetsSent; + unsigned long long bytesLost; unsigned long long packetsLost; - unsigned long numOutgoingStreamsCreated; - unsigned long numIncomingStreamsCreated; unsigned long long bytesReceived; unsigned long long packetsReceived; DOMHighResTimeStamp smoothedRtt; diff --git a/tests/wpt/tests/mst-content-hint/RTCRtpSendParameters-degradationEffect.html b/tests/wpt/tests/mst-content-hint/RTCRtpSendParameters-degradationEffect.html index e6a03c593f3..a2da6cd139f 100644 --- a/tests/wpt/tests/mst-content-hint/RTCRtpSendParameters-degradationEffect.html +++ b/tests/wpt/tests/mst-content-hint/RTCRtpSendParameters-degradationEffect.html @@ -11,56 +11,61 @@ // This file contains tests that check that degradation preference // actually has the desired effect. These tests take a long time to run. +// The signal generator will generate a video stream with at least this +// many bits per second if unconstrained. +const minUnconstrainedBandwidth = 30000; + // Returns incoming bandwidth usage between stats1 and stats2 // in bits per second. function bandwidth(stats1, stats2) { + if (!stats1 || !stats2) { + return null; + } const transport1 = [...stats1.values()].filter(({type}) => type === 'transport')[0]; const transport2 = [...stats2.values()].filter(({type}) => type === 'transport')[0]; const bytes = transport2.bytesReceived - transport1.bytesReceived; - // Multiply by 1000 to get per second, divide by 8 to get bits. + // If time interval is too short for proper measurement, return null. + if (transport1.timestamp > transport2.timestamp - 100) { + return null; + } + // Multiply by 1000 to get per second, multiply by 8 to get bits. const bandwidth = 1000 * 8 * bytes / (transport2.timestamp - transport1.timestamp); return bandwidth; } +let oldStats; + // Returns tuple of { bandwidth, fps, x-res, y-res } -async function measureStuff(t, pc, intervalMs) { - const stats1 = await pc.getStats(); - await new Promise(r => t.step_timeout(r, intervalMs)); - const stats2 = await pc.getStats(); +// Updates oldStats. +async function measureStuff(pc) { + const stats = await pc.getStats(); + if (!oldStats) { + oldStats = stats; + return {}; + } // RTCInboundStreamStats - const inboundRtp1List = [...stats1.values()].filter(({type}) => type === 'inbound-rtp'); - const inboundRtp2List = [...stats2.values()].filter(({type}) => type === 'inbound-rtp'); - const inboundRtp1 = inboundRtp1List[0]; - const inboundRtp2 = inboundRtp2List[0]; - const fps = 1000 * (inboundRtp2.framesReceived - inboundRtp1.framesReceived) / - (inboundRtp2.timestamp - inboundRtp1.timestamp); + const oldRtpList = [...oldStats.values()].filter(({type}) => type === 'inbound-rtp'); + const inboundRtpList = [...stats.values()].filter(({type}) => type === 'inbound-rtp'); + const oldRtp = oldRtpList[0]; + const inboundRtp = inboundRtpList[0]; + const fps = 1000.0 * (inboundRtp.framesReceived - oldRtp.framesReceived) / + (inboundRtp.timestamp - oldRtp.timestamp); const result = { - bandwidth: bandwidth(stats1, stats2), + bandwidth: bandwidth(oldStats, stats), fps: fps, - width: inboundRtp2.frameWidth, - height: inboundRtp2.frameHeight + width: inboundRtp.frameWidth, + height: inboundRtp.frameHeight }; + oldStats = stats; + if (!result.bandwidth) { + return {}; + } // Unbreak for debugging. // con sole.log('Measure: ', performance.now(), " ", JSON.stringify(result)); return result; } -// Wait for a certain condition to be true on the traffic measures -// on the PC. Will typically be conditions on resolution, framerate -// or bandwidth. -async function waitForCondition(t, pc, condition, maxWait, stepName) { - let counter = 1; - let measure = await measureStuff(t, pc, 1000); - while (counter < maxWait && !condition(measure)) { - measure = await measureStuff(t, pc, 1000); - counter += 1; - } - assert_true(condition(measure), - `failure in ${stepName}, measure is ${JSON.stringify(measure)}`); - return condition(measure); -} - promise_test(async t => { const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); @@ -71,9 +76,6 @@ promise_test(async t => { let param = sender.getParameters(); - assert_equals(param.degradationPreference, undefined, - 'Expect initial param.degradationPreference to be undefined'); - param.degradationPreference = 'maintain-framerate'; await sender.setParameters(param); @@ -83,38 +85,45 @@ promise_test(async t => { exchangeIceCandidates(pc1, pc2); await exchangeOfferAnswer(pc1, pc2); await listenToConnected(pc1); + // Allow the keyframe to pass. + await new Promise(r => t.step_timeout(r, 1000)); // Wait a few seconds to allow things to settle (rampup) // We know that the generator is supposed to produce 640x480 // at 10 fps with a bandwidth exceeding 30 kbits/second. - assert_true(await waitForCondition(t, pc2, (measure) => { - return (measure.bandwidth > 30000 && + await t.step_wait(async () => { + const measure = await measureStuff(pc2); + return (measure.bandwidth > minUnconstrainedBandwidth && measure.width == 640 && measure.fps > 9); - }, 60, 'preconditions')); + }, 'Test error: Preconditions not achieved', 30000, 500); // Measure BW, resolution and frame rate over one second - const stats1 = await measureStuff(t, pc2, 1000); + // after measurements have stabilized. + await new Promise(r => t.step_timeout(r, 1000)); + const stats1 = await measureStuff(pc2); // Constrain BW to 1/2 of measured value const newBandwidth = stats1.bandwidth / 2; + // Guard against inappropriate bandwidth + assert_greater_than(newBandwidth, minUnconstrainedBandwidth/2, + "Test error: Constraint too low"); const parameters = sender.getParameters(); parameters.encodings[0].maxBitrate = newBandwidth; await sender.setParameters(parameters); // Wait until the expected result happens. - let stats2 = await measureStuff(t, pc2, 1000); - let counter = 1; - const maxWaitCount = 20; const kBandwidthMargin = 1.3; // It takes time to adapt to a new bandwidth, time to scale down, // and time to acknowledge that framerate should not be reduced. // Measured time is around 16 seconds. - assert_true(await waitForCondition(t, pc2, (measure) => { - return (measure.bandwidth < newBandwidth * kBandwidthMargin && + await t.step_wait(async () => { + let measure = await measureStuff(pc2); + return (measure.bandwidth && + measure.bandwidth < newBandwidth * kBandwidthMargin && measure.width < stats1.width && measure.fps > stats1.fps * 0.9); - }, 60, 'adaptation'), - `Target bandwidth ${newBandwidth * kBandwidthMargin}, target min FPS ${stats1.fps * 0.9}`); + }, 'Adaptation did not succeed', + 30000, 500); }, 'Maintain-framerate reduces resolution on bandwidth cut', { timeout: 35000 }); </script> diff --git a/tests/wpt/tests/navigation-api/commit-behavior/after-transition-traverse.html b/tests/wpt/tests/navigation-api/commit-behavior/after-transition-traverse.html index 7dd1226e54c..d348a218ac4 100644 --- a/tests/wpt/tests/navigation-api/commit-behavior/after-transition-traverse.html +++ b/tests/wpt/tests/navigation-api/commit-behavior/after-transition-traverse.html @@ -5,11 +5,13 @@ <script src="resources/after-transition-commit-helpers.js"></script> <body> <script> +let start_index = navigation.currentEntry.index; + let tests = [ - { mode: "rejectBeforeCommit", destinationIndex: 0, description: "{ commit: 'after-transition' } for a traverse navigation, reject before commit" }, - { mode: "rejectAfterCommit", destinationIndex: 1, description: "{ commit: 'after-transition' } for a traverse navigation, reject after commit" }, - { mode: "successExplicitCommit", destinationIndex: 2, description: "{ commit: 'after-transition' } for a traverse navigation, explicit commit()" }, - { mode: "successNoExplicitCommit", destinationIndex: 3, description: "{ commit: 'after-transition' } for a traverse navigation, commit when handler resolves" } + { mode: "rejectBeforeCommit", destinationIndex: start_index, description: "{ commit: 'after-transition' } for a traverse navigation, reject before commit" }, + { mode: "rejectAfterCommit", destinationIndex: start_index + 1, description: "{ commit: 'after-transition' } for a traverse navigation, reject after commit" }, + { mode: "successExplicitCommit", destinationIndex: start_index + 2, description: "{ commit: 'after-transition' } for a traverse navigation, explicit commit()" }, + { mode: "successNoExplicitCommit", destinationIndex: start_index + 3, description: "{ commit: 'after-transition' } for a traverse navigation, commit when handler resolves" } ]; // Push a bunch of history entries so each test case can target a unique entry. diff --git a/tests/wpt/tests/navigation-api/currententrychange-event/anchor-click.html b/tests/wpt/tests/navigation-api/currententrychange-event/anchor-click.html index e0bf91166aa..ce8fc69f5d4 100644 --- a/tests/wpt/tests/navigation-api/currententrychange-event/anchor-click.html +++ b/tests/wpt/tests/navigation-api/currententrychange-event/anchor-click.html @@ -4,13 +4,15 @@ <a id="a" href="#foo"></a> <script> test(t => { + let start_index = navigation.currentEntry.index; + let oncurrententrychange_called = false; navigation.oncurrententrychange = t.step_func(e => { oncurrententrychange_called = true; - assert_equals(e.from, navigation.entries()[0]); - assert_equals(e.from.index, 0); + assert_equals(e.from, navigation.entries()[start_index]); + assert_equals(e.from.index, start_index); assert_equals(e.navigationType, "push"); - assert_equals(navigation.currentEntry.index, 1); + assert_equals(navigation.currentEntry.index, start_index + 1); }); a.click(); assert_true(oncurrententrychange_called); diff --git a/tests/wpt/tests/navigation-api/currententrychange-event/history-back-same-doc.html b/tests/wpt/tests/navigation-api/currententrychange-event/history-back-same-doc.html index 768805b7526..885d558bb5d 100644 --- a/tests/wpt/tests/navigation-api/currententrychange-event/history-back-same-doc.html +++ b/tests/wpt/tests/navigation-api/currententrychange-event/history-back-same-doc.html @@ -3,18 +3,21 @@ <script src="/resources/testharnessreport.js"></script> <script> promise_test(async t => { + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; + // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); await navigation.navigate("#foo"); - assert_equals(navigation.entries().length, 2); + assert_equals(navigation.entries().length, start_length + 1); let oncurrententrychange_called = false; navigation.oncurrententrychange = t.step_func(e => { oncurrententrychange_called = true; - assert_equals(e.from, navigation.entries()[1]); + assert_equals(e.from, navigation.entries()[start_index + 1]); assert_equals(e.navigationType, "traverse"); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); }); history.back(); assert_false(oncurrententrychange_called); diff --git a/tests/wpt/tests/navigation-api/currententrychange-event/history-pushState.html b/tests/wpt/tests/navigation-api/currententrychange-event/history-pushState.html index 1a17a7cec0c..cfefcda1d6a 100644 --- a/tests/wpt/tests/navigation-api/currententrychange-event/history-pushState.html +++ b/tests/wpt/tests/navigation-api/currententrychange-event/history-pushState.html @@ -3,12 +3,14 @@ <script src="/resources/testharnessreport.js"></script> <script> test(t => { + let start_index = navigation.currentEntry.index; + let oncurrententrychange_called = false; navigation.oncurrententrychange = t.step_func(e => { oncurrententrychange_called = true; - assert_equals(e.from, navigation.entries()[0]); + assert_equals(e.from, navigation.entries()[start_index]); assert_equals(e.navigationType, "push"); - assert_equals(navigation.currentEntry.index, 1); + assert_equals(navigation.currentEntry.index, start_index + 1); }); history.pushState(1, "", "#1"); assert_true(oncurrententrychange_called); diff --git a/tests/wpt/tests/navigation-api/currententrychange-event/history-replaceState.html b/tests/wpt/tests/navigation-api/currententrychange-event/history-replaceState.html index e8ae8ee57a2..5b6fc09bf94 100644 --- a/tests/wpt/tests/navigation-api/currententrychange-event/history-replaceState.html +++ b/tests/wpt/tests/navigation-api/currententrychange-event/history-replaceState.html @@ -3,6 +3,8 @@ <script src="/resources/testharnessreport.js"></script> <script> test(t => { + let start_index = navigation.currentEntry.index; + let oncurrententrychange_called = false; let original_currentEntry = navigation.currentEntry; navigation.oncurrententrychange = t.step_func(e => { @@ -10,7 +12,7 @@ test(t => { assert_equals(e.from, original_currentEntry); assert_equals(e.from.index, -1); assert_equals(e.navigationType, "replace"); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); }); history.replaceState(1, "", "#1"); assert_true(oncurrententrychange_called); diff --git a/tests/wpt/tests/navigation-api/currententrychange-event/location-api.html b/tests/wpt/tests/navigation-api/currententrychange-event/location-api.html index 88ebd985a1e..b142fabb227 100644 --- a/tests/wpt/tests/navigation-api/currententrychange-event/location-api.html +++ b/tests/wpt/tests/navigation-api/currententrychange-event/location-api.html @@ -3,6 +3,8 @@ <script src="/resources/testharnessreport.js"></script> <script> test(t => { + let start_index = navigation.currentEntry.index; + let oncurrententrychange_called = false; let original_entry = navigation.currentEntry; navigation.oncurrententrychange = t.step_func(e => { @@ -10,7 +12,7 @@ test(t => { assert_equals(e.from, original_entry); assert_equals(e.from.index, -1); assert_equals(e.navigationType, "replace"); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); }); location.hash = "#foo"; assert_true(oncurrententrychange_called); diff --git a/tests/wpt/tests/navigation-api/currententrychange-event/navigation-back-forward-same-doc.html b/tests/wpt/tests/navigation-api/currententrychange-event/navigation-back-forward-same-doc.html index 8182673aa59..cd307a3d538 100644 --- a/tests/wpt/tests/navigation-api/currententrychange-event/navigation-back-forward-same-doc.html +++ b/tests/wpt/tests/navigation-api/currententrychange-event/navigation-back-forward-same-doc.html @@ -3,19 +3,22 @@ <script src="/resources/testharnessreport.js"></script> <script> promise_test(async t => { + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; + // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); await navigation.navigate("#foo").committed; - assert_equals(navigation.entries().length, 2); + assert_equals(navigation.entries().length, start_length + 1); let oncurrententrychange_back_called = false; let back_committed = false; navigation.oncurrententrychange = t.step_func(e => { oncurrententrychange_back_called = true; - assert_equals(e.from, navigation.entries()[1]); + assert_equals(e.from, navigation.entries()[start_index + 1]); assert_equals(e.navigationType, "traverse"); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); assert_false(back_committed); }); let back_result = navigation.back(); @@ -27,9 +30,9 @@ promise_test(async t => { let forward_committed = false; navigation.oncurrententrychange = t.step_func(e => { oncurrententrychange_forward_called = true; - assert_equals(e.from, navigation.entries()[0]); + assert_equals(e.from, navigation.entries()[start_index]); assert_equals(e.navigationType, "traverse"); - assert_equals(navigation.currentEntry.index, 1); + assert_equals(navigation.currentEntry.index, start_index + 1); assert_false(forward_committed); }); let forward_result = navigation.forward(); diff --git a/tests/wpt/tests/navigation-api/currententrychange-event/navigation-navigate-replace-same-doc.html b/tests/wpt/tests/navigation-api/currententrychange-event/navigation-navigate-replace-same-doc.html index f9935973057..79ade9396f3 100644 --- a/tests/wpt/tests/navigation-api/currententrychange-event/navigation-navigate-replace-same-doc.html +++ b/tests/wpt/tests/navigation-api/currententrychange-event/navigation-navigate-replace-same-doc.html @@ -3,6 +3,8 @@ <script src="/resources/testharnessreport.js"></script> <script> promise_test(async t => { + let start_index = navigation.currentEntry.index; + // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); @@ -14,7 +16,7 @@ promise_test(async t => { assert_equals(e.from, original_entry); assert_equals(e.from.index, -1); assert_equals(e.navigationType, "replace"); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); }); let result = navigation.navigate("#foo", { history: "replace" }); assert_true(oncurrententrychange_called); diff --git a/tests/wpt/tests/navigation-api/currententrychange-event/navigation-navigate-same-doc.html b/tests/wpt/tests/navigation-api/currententrychange-event/navigation-navigate-same-doc.html index 87fc28d174a..0cf5214eae6 100644 --- a/tests/wpt/tests/navigation-api/currententrychange-event/navigation-navigate-same-doc.html +++ b/tests/wpt/tests/navigation-api/currententrychange-event/navigation-navigate-same-doc.html @@ -3,6 +3,8 @@ <script src="/resources/testharnessreport.js"></script> <script> promise_test(async t => { + let start_index = navigation.currentEntry.index; + // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); @@ -10,9 +12,9 @@ promise_test(async t => { let oncurrententrychange_called = false; navigation.oncurrententrychange = t.step_func(e => { oncurrententrychange_called = true; - assert_equals(e.from, navigation.entries()[0]); + assert_equals(e.from, navigation.entries()[start_index]); assert_equals(e.navigationType, "push"); - assert_equals(navigation.currentEntry.index, 1); + assert_equals(navigation.currentEntry.index, start_index + 1); }); let result = navigation.navigate("#foo"); assert_true(oncurrententrychange_called); diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/current-basic.html b/tests/wpt/tests/navigation-api/navigation-history-entry/current-basic.html index 78bbbb05607..66a7100bf6d 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/current-basic.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/current-basic.html @@ -4,7 +4,9 @@ <script src="resources/is_uuid.js"></script> <script> test(() => { + let start_length = navigation.entries().length; let first_entry = navigation.currentEntry; + let start_index = first_entry.index; assert_not_equals(first_entry, null); assert_not_equals(first_entry.key, null); assert_true(isUUID(first_entry.key)); @@ -12,8 +14,8 @@ test(() => { assert_true(isUUID(first_entry.id)); assert_equals(first_entry.url, location.href); assert_true(first_entry.sameDocument); - assert_equals(navigation.entries().length, 1); - assert_equals(first_entry, navigation.entries()[0]); + assert_equals(navigation.entries().length, start_length); + assert_equals(first_entry, navigation.entries()[start_index]); history.replaceState(2, "", "#2"); let second_entry = navigation.currentEntry; @@ -24,8 +26,8 @@ test(() => { assert_true(isUUID(second_entry.id)); assert_equals(second_entry.url, location.href); assert_true(second_entry.sameDocument); - assert_equals(navigation.entries().length, 1); - assert_equals(second_entry, navigation.entries()[0]); + assert_equals(navigation.entries().length, start_length); + assert_equals(second_entry, navigation.entries()[start_index]); history.pushState(3, "", "#3"); let third_entry = navigation.currentEntry; @@ -36,8 +38,8 @@ test(() => { assert_true(isUUID(third_entry.id)); assert_equals(third_entry.url, location.href); assert_true(third_entry.sameDocument); - assert_equals(navigation.entries().length, 2); - assert_equals(third_entry, navigation.entries()[1]); + assert_equals(navigation.entries().length, start_length + 1); + assert_equals(third_entry, navigation.entries()[start_index + 1]); history.pushState(4, ""); let fourth_entry = navigation.currentEntry; @@ -48,8 +50,8 @@ test(() => { assert_true(isUUID(fourth_entry.id)); assert_equals(fourth_entry.url, third_entry.url); assert_true(fourth_entry.sameDocument); - assert_equals(navigation.entries().length, 3); - assert_equals(fourth_entry, navigation.entries()[2]); + assert_equals(navigation.entries().length, start_length + 2); + assert_equals(fourth_entry, navigation.entries()[start_index + 2]); history.replaceState(5, ""); let fifth_entry = navigation.currentEntry; @@ -60,8 +62,8 @@ test(() => { assert_true(isUUID(fifth_entry.id)); assert_equals(fifth_entry.url, fourth_entry.url); assert_true(fifth_entry.sameDocument); - assert_equals(navigation.entries().length, 3); - assert_equals(fifth_entry, navigation.entries()[2]); + assert_equals(navigation.entries().length, start_length + 2); + assert_equals(fifth_entry, navigation.entries()[start_index + 2]); history.pushState(5, ""); let fifth_entry_after_push = navigation.currentEntry; @@ -72,8 +74,8 @@ test(() => { assert_true(isUUID(fifth_entry_after_push.id)); assert_equals(fifth_entry_after_push.url, fifth_entry.url); assert_true(fifth_entry_after_push.sameDocument); - assert_equals(navigation.entries().length, 4); - assert_equals(fifth_entry_after_push, navigation.entries()[3]); + assert_equals(navigation.entries().length, start_length + 3); + assert_equals(fifth_entry_after_push, navigation.entries()[start_index + 3]); history.replaceState(5, ""); let fifth_entry_after_replace = navigation.currentEntry; @@ -84,8 +86,8 @@ test(() => { assert_true(isUUID(fifth_entry_after_replace.id)); assert_equals(fifth_entry_after_replace.url, fifth_entry_after_push.url); assert_true(fifth_entry_after_replace.sameDocument); - assert_equals(navigation.entries().length, 4); - assert_equals(fifth_entry_after_replace, navigation.entries()[3]); + assert_equals(navigation.entries().length, start_length + 3); + assert_equals(fifth_entry_after_replace, navigation.entries()[start_index + 3]); location.hash = "6"; let sixth_entry = navigation.currentEntry; @@ -96,8 +98,8 @@ test(() => { assert_true(isUUID(sixth_entry.id)); assert_not_equals(sixth_entry.url, fifth_entry_after_replace.url); assert_true(sixth_entry.sameDocument); - assert_equals(navigation.entries().length, 4); - assert_equals(sixth_entry, navigation.entries()[3]); + assert_equals(navigation.entries().length, start_length + 3); + assert_equals(sixth_entry, navigation.entries()[start_index + 3]); navigation.entries().forEach(entry => { assert_true(isUUID(entry.id)); diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/entries-after-navigations-in-multiple-windows.html b/tests/wpt/tests/navigation-api/navigation-history-entry/entries-after-navigations-in-multiple-windows.html index d1d4d86eb38..8cba4c80b7e 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/entries-after-navigations-in-multiple-windows.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/entries-after-navigations-in-multiple-windows.html @@ -5,6 +5,7 @@ <iframe id="i" src="/common/blank.html"></iframe> <script> async_test(t => { + let start_index = navigation.currentEntry.index; // The navigations in each window should have only added an navigation to // their own window. function assertExpectedEntries(entries, expected_url) { @@ -25,7 +26,7 @@ async_test(t => { window.onload = () => t.step_timeout(t.step_func(() => { location.hash = "#1"; i.onload = t.step_func_done(() => { - assertExpectedEntries(navigation.entries(), location.href); + assertExpectedEntries(navigation.entries().slice(start_index), location.href); assertExpectedEntries(i.contentWindow.navigation.entries(), i.contentWindow.location.href); }); i.contentWindow.location = "/common/blank.html?2"; diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/entries-when-inactive.html b/tests/wpt/tests/navigation-api/navigation-history-entry/entries-when-inactive.html index c70b6d8bf87..1130f69800f 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/entries-when-inactive.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/entries-when-inactive.html @@ -3,14 +3,15 @@ <script src="/resources/testharnessreport.js"></script> <script> async_test(t => { - const first_entry = navigation.entries()[0]; + let start_index = navigation.currentEntry.index; + const first_entry = navigation.entries()[start_index]; history.pushState(1, "", "#1"); - assert_equals(navigation.entries()[0], first_entry); + assert_equals(navigation.entries()[start_index], first_entry); history.back(); window.onpopstate = t.step_func_done(() => { - const second_entry = navigation.entries()[1]; + const second_entry = navigation.entries()[start_index + 1]; history.replaceState(0, "", "#0"); - assert_equals(navigation.entries()[1], second_entry); + assert_equals(navigation.entries()[start_index + 1], second_entry); }); }, "A non-active entry in navigation.entries() should not be modified when a different entry is modified"); </script> diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/index-not-in-entries.html b/tests/wpt/tests/navigation-api/navigation-history-entry/index-not-in-entries.html index a16d130ba16..021848f1a3e 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/index-not-in-entries.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/index-not-in-entries.html @@ -4,12 +4,14 @@ <iframe id="i" src="/common/blank.html"></iframe> <script> async_test(t => { + let start_index = navigation.currentEntry.index; + // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. window.onload = () => t.step_timeout(t.step_func_done(() => { // Remove the entry by replacing it. let replaced_entry = navigation.currentEntry; - assert_equals(replaced_entry.index, 0); + assert_equals(replaced_entry.index, start_index); navigation.navigate("#0", { history: "replace" }); assert_equals(replaced_entry.index, -1); diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-back-cross-document.html b/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-back-cross-document.html index 2dd58c03e9d..efede38ab31 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-back-cross-document.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-back-cross-document.html @@ -4,12 +4,13 @@ <iframe id="i" src="resources/key-navigate-back-cross-document-helper.html"></iframe> <script> async_test(t => { + let start_length = navigation.entries().length; window.finish = t.step_func_done((end_key, end_id) => { assert_equals(window.start_key, end_key); assert_equals(window.start_id, end_id); // The new history entry in the iframe should not add any entries to // this window's navigation. - assert_equals(navigation.entries().length, 1); + assert_equals(navigation.entries().length, start_length); }); }, "NavigationHistoryEntry's key and id on cross-document back navigation"); </script> diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-back-same-document.html b/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-back-same-document.html index 858b5fd2c89..d3c0252fdbb 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-back-same-document.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-back-same-document.html @@ -3,21 +3,22 @@ <script src="/resources/testharnessreport.js"></script> <script> async_test(t => { + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; let key = navigation.currentEntry.key; let id = navigation.currentEntry.id; - assert_equals(navigation.entries().length, 1); history.pushState("hash", "", "#hash"); assert_not_equals(key, navigation.currentEntry.key); assert_not_equals(id, navigation.currentEntry.id); - assert_equals(navigation.entries().length, 2); - assert_equals(navigation.currentEntry.index, 1); + assert_equals(navigation.entries().length, start_length + 1); + assert_equals(navigation.currentEntry.index, start_index + 1); window.onpopstate = t.step_func_done(() => { assert_equals(key, navigation.currentEntry.key); assert_equals(id, navigation.currentEntry.id); - assert_equals(navigation.entries().length, 2); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.entries().length, start_length + 1); + assert_equals(navigation.currentEntry.index, start_index); }); history.back(); }, "NavigationHistoryEntry's key and id on same-document back navigation"); diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-location-reload.html b/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-location-reload.html index f950e2f3a21..aacd8a28598 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-location-reload.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-location-reload.html @@ -4,6 +4,7 @@ <iframe id="i" src="/common/blank.html"></iframe> <script> async_test(t => { + let start_length = navigation.entries().length; window.onload = t.step_func(() => { let key = i.contentWindow.navigation.currentEntry.key; let id = i.contentWindow.navigation.currentEntry.id; @@ -11,7 +12,7 @@ async_test(t => { i.onload = t.step_func_done(() => { assert_equals(key, i.contentWindow.navigation.currentEntry.key); assert_equals(id, i.contentWindow.navigation.currentEntry.id); - assert_equals(navigation.entries().length, 1); + assert_equals(navigation.entries().length, start_length); }); }); }, "NavigationHistoryEntry's key and id after location.reload()"); diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-location-replace.html b/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-location-replace.html index a58772a7f47..d741049c44d 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-location-replace.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/key-id-location-replace.html @@ -4,6 +4,7 @@ <iframe id="i" src="/common/blank.html"></iframe> <script> async_test(t => { + let start_length = navigation.entries().length; window.onload = t.step_func(() => { let key = i.contentWindow.navigation.currentEntry.key; let id = i.contentWindow.navigation.currentEntry.id; @@ -11,7 +12,7 @@ async_test(t => { i.onload = t.step_func_done(() => { assert_equals(key, i.contentWindow.navigation.currentEntry.key); assert_not_equals(id, i.contentWindow.navigation.currentEntry.id); - assert_equals(navigation.entries().length, 1); + assert_equals(navigation.entries().length, start_length); }); }); }, "NavigationHistoryEntry's key and id after location.replace()"); diff --git a/tests/wpt/tests/navigation-api/navigation-history-entry/sameDocument-after-fragment-navigate.html b/tests/wpt/tests/navigation-api/navigation-history-entry/sameDocument-after-fragment-navigate.html index a197f825d8e..1c0cd6e8253 100644 --- a/tests/wpt/tests/navigation-api/navigation-history-entry/sameDocument-after-fragment-navigate.html +++ b/tests/wpt/tests/navigation-api/navigation-history-entry/sameDocument-after-fragment-navigate.html @@ -3,6 +3,9 @@ <script src="/resources/testharnessreport.js"></script> <script> async_test(t => { + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; + // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. window.onload = () => t.step_timeout(t.step_func_done(() => { @@ -21,10 +24,10 @@ async_test(t => { assert_true(entry1.sameDocument); assert_true(entry2.sameDocument); - assert_equals(navigation.entries().length, 3); - assert_equals(navigation.entries()[0], entry1); - assert_equals(navigation.entries()[1], entry2); - assert_equals(navigation.entries()[2], entry3); + assert_equals(navigation.entries().length, start_length + 2); + assert_equals(navigation.entries()[start_index], entry1); + assert_equals(navigation.entries()[start_index + 1], entry2); + assert_equals(navigation.entries()[start_index + 2], entry3); }), 0); }, "entry.sameDocument after same-document navigations"); </script> diff --git a/tests/wpt/tests/navigation-api/ordering-and-transition/currententrychange-before-popstate-intercept.html b/tests/wpt/tests/navigation-api/ordering-and-transition/currententrychange-before-popstate-intercept.html index c51c7c444cb..10627c58754 100644 --- a/tests/wpt/tests/navigation-api/ordering-and-transition/currententrychange-before-popstate-intercept.html +++ b/tests/wpt/tests/navigation-api/ordering-and-transition/currententrychange-before-popstate-intercept.html @@ -3,11 +3,12 @@ <script src="/resources/testharnessreport.js"></script> <script> promise_test(async t => { + let start_length = navigation.entries().length; // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); await navigation.navigate("#foo").committed; - assert_equals(navigation.entries().length, 2); + assert_equals(navigation.entries().length, start_length + 1); navigation.onnavigate = e => e.intercept(); diff --git a/tests/wpt/tests/navigation-api/ordering-and-transition/currententrychange-dispose-ordering.html b/tests/wpt/tests/navigation-api/ordering-and-transition/currententrychange-dispose-ordering.html index 4ca9ba29800..ecca39e6a0a 100644 --- a/tests/wpt/tests/navigation-api/ordering-and-transition/currententrychange-dispose-ordering.html +++ b/tests/wpt/tests/navigation-api/ordering-and-transition/currententrychange-dispose-ordering.html @@ -3,6 +3,7 @@ <script src="/resources/testharnessreport.js"></script> <script> test(t => { + let start_index = navigation.currentEntry.index; let oncurrententrychange_called = false; let ondispose_called = false; @@ -17,7 +18,7 @@ test(t => { assert_equals(e.from, original_entry); assert_equals(e.from.index, -1); assert_equals(e.navigationType, "replace"); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); }); navigation.navigate("#foo", { history: "replace" }); assert_true(oncurrententrychange_called); diff --git a/tests/wpt/tests/navigation-api/per-entry-events/dispose-for-full-session-history.tentative.html b/tests/wpt/tests/navigation-api/per-entry-events/dispose-for-full-session-history.tentative.html index 9bed225cf36..6f5007ac569 100644 --- a/tests/wpt/tests/navigation-api/per-entry-events/dispose-for-full-session-history.tentative.html +++ b/tests/wpt/tests/navigation-api/per-entry-events/dispose-for-full-session-history.tentative.html @@ -6,9 +6,8 @@ promise_test(async (t) => { // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(r => window.onload = () => t.step_timeout(r, 0)); - assert_equals(navigation.entries().length, 1); - let dispose_promise = new Promise(r => navigation.entries()[0].ondispose = r); + let dispose_promise = new Promise(r => navigation.currentEntry.ondispose = r); // There is no spec for the maximum number of joint session history entries // (hence this is a .tentative.html test). However, all(?) browsers have a diff --git a/tests/wpt/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html b/tests/wpt/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html index 24828770852..d351fad6c08 100644 --- a/tests/wpt/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html +++ b/tests/wpt/tests/navigation-api/per-entry-events/dispose-for-navigation-in-child.html @@ -7,20 +7,22 @@ promise_test(async (t) => { // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(r => window.onload = () => t.step_timeout(r, 0)); + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; await iframe.contentWindow.navigation.navigate("#a"); await navigation.navigate("#1").finished; await navigation.navigate("#2").finished; await navigation.navigate("#3").finished; await iframe.contentWindow.navigation.back().finished; - assert_equals(navigation.entries().length, 4); + assert_equals(navigation.entries().length, start_length + 3); assert_equals(iframe.contentWindow.navigation.entries().length, 2); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); assert_equals(iframe.contentWindow.navigation.currentEntry.index, 0); - let top_entry_0_before = navigation.entries()[0]; + let top_entry_0_before = navigation.entries()[start_index]; let dispose_promises = []; - for (let i = 1; i < navigation.entries().length; i++) { + for (let i = start_index + 1; i < navigation.entries().length; i++) { dispose_promises.push(new Promise(r => navigation.entries()[i].ondispose = r)) } @@ -31,11 +33,11 @@ promise_test(async (t) => { // top window should have dispose events, even though that wasn't the window // that navigated. await Promise.all(dispose_promises); - assert_equals(navigation.entries().length, 1); + assert_equals(navigation.entries().length, start_length); assert_equals(iframe.contentWindow.navigation.entries().length, 2); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); assert_equals(iframe.contentWindow.navigation.currentEntry.index, 1); - assert_equals(navigation.entries()[0], top_entry_0_before); + assert_equals(navigation.entries()[start_index], top_entry_0_before); }, "Dispose events should fire when entries are removed by a navigation in a different frame"); </script> diff --git a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-intercept.html b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-intercept.html index 44aa096aafe..862e01127be 100644 --- a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-intercept.html +++ b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-intercept.html @@ -6,13 +6,15 @@ promise_test(async (t) => { // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(r => window.onload = () => t.step_timeout(r, 0)); + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; location.hash = "#1"; location.hash = "#2"; location.hash = "#3"; - assert_equals(navigation.entries().length, 4); - const [entry0, entry1, entry2, entry3] = navigation.entries(); + assert_equals(navigation.entries().length, start_length + 3); + const [entry0, entry1, entry2, entry3] = navigation.entries().slice(start_index); assert_equals((new URL(entry2.url)).hash, "#2"); assert_equals((new URL(entry3.url)).hash, "#3"); @@ -26,7 +28,7 @@ promise_test(async (t) => { assert_equals(e.composed, false); assert_array_equals( - navigation.entries(), + navigation.entries().slice(start_index), [entry0, entry1, navigation.currentEntry], "entries() is updated during dispose for entry 2"); assert_not_equals(navigation.currentEntry, entry1, "current entry must be updated during dispose for entry 3"); @@ -41,7 +43,7 @@ promise_test(async (t) => { assert_true(dispose2Called, "dispose for entry 2 must have happened before entry 3"); assert_array_equals( - navigation.entries(), + navigation.entries().slice(start_index), [entry0, entry1, navigation.currentEntry], "entries() is updated during dispose for entry 3"); assert_not_equals(navigation.currentEntry, entry1, "current entry must be updated during dispose for entry 3"); @@ -60,8 +62,8 @@ promise_test(async (t) => { navigation.navigate("#fork"); - assert_equals(navigation.entries().length, 3); - const [finalEntry0, finalEntry1, finalEntry2] = navigation.entries(); + assert_equals(navigation.entries().length, start_length + 2); + const [finalEntry0, finalEntry1, finalEntry2] = navigation.entries().slice(start_index); assert_equals(finalEntry0, entry0); assert_equals(finalEntry1, entry1); assert_not_equals(finalEntry2, entry2); diff --git a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-navigate-during.html b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-navigate-during.html index 59d9b3cce39..88eb35c225f 100644 --- a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-navigate-during.html +++ b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-navigate-during.html @@ -6,13 +6,15 @@ promise_test(async (t) => { // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(r => window.onload = () => t.step_timeout(r, 0)); + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; location.hash = "#1"; location.hash = "#2"; location.hash = "#3"; - assert_equals(navigation.entries().length, 4); - const [entry0, entry1, entry2, entry3] = navigation.entries(); + assert_equals(navigation.entries().length, start_length + 3); + const [entry0, entry1, entry2, entry3] = navigation.entries().slice(start_index); assert_equals((new URL(entry2.url)).hash, "#2"); assert_equals((new URL(entry3.url)).hash, "#3"); @@ -37,8 +39,8 @@ promise_test(async (t) => { assert_equals(dispose3Called, 1, "dispose for entry 3 must happen exactly once (final check)"); - assert_equals(navigation.entries().length, 4); - const [finalEntry0, finalEntry1, finalEntry2, finalEntry3] = navigation.entries(); + assert_equals(navigation.entries().length, start_length + 3); + const [finalEntry0, finalEntry1, finalEntry2, finalEntry3] = navigation.entries().slice(start_index); assert_equals(finalEntry0, entry0); assert_equals(finalEntry1, entry1); assert_not_equals(finalEntry2, entry2); diff --git a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-replace-with-intercept.html b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-replace-with-intercept.html index 4e492e30aed..7814543e714 100644 --- a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-replace-with-intercept.html +++ b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-replace-with-intercept.html @@ -8,7 +8,6 @@ promise_test(async (t) => { // automatically before the load event completes. await new Promise(r => window.onload = () => t.step_timeout(r, 0)); - const entriesBefore = navigation.entries(); const currentBefore = navigation.currentEntry; let disposeCalled = false; @@ -21,10 +20,10 @@ promise_test(async (t) => { assert_equals(e.composed, false); assert_not_equals(navigation.currentEntry, currentBefore); - assert_array_equals(navigation.entries(), [navigation.currentEntry]); + assert_array_equals(navigation.entries().slice(navigation.currentEntry.index), [navigation.currentEntry]); assert_equals((new URL(navigation.currentEntry.url)).search, "?replacement"); assert_equals(navigation.transition.navigationType, "replace"); - assert_equals(navigation.transition.from, entriesBefore[0]); + assert_equals(navigation.transition.from, currentBefore); assert_equals(location.search, "?replacement"); }); diff --git a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-replaceState.html b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-replaceState.html index a6197260a28..78df25774c3 100644 --- a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-replaceState.html +++ b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document-replaceState.html @@ -3,7 +3,8 @@ <script src="/resources/testharnessreport.js"></script> <script> test(t => { - const entriesBefore = navigation.entries(); + let start_index = navigation.currentEntry.index; + const currentBefore = navigation.currentEntry; let disposeCalled = false; @@ -16,7 +17,7 @@ test(t => { assert_equals(e.composed, false); assert_not_equals(navigation.currentEntry, currentBefore); - assert_array_equals(navigation.entries(), [navigation.currentEntry]); + assert_array_equals(navigation.entries().slice(start_index), [navigation.currentEntry]); assert_equals((new URL(navigation.currentEntry.url)).search, "?replacement"); assert_equals(navigation.transition, null); assert_equals(location.search, "?replacement"); diff --git a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document.html b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document.html index 27806ce3c86..e41403e773c 100644 --- a/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document.html +++ b/tests/wpt/tests/navigation-api/per-entry-events/dispose-same-document.html @@ -6,13 +6,15 @@ promise_test(async (t) => { // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(r => window.onload = () => t.step_timeout(r, 0)); + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; location.hash = "#1"; location.hash = "#2"; location.hash = "#3"; - assert_equals(navigation.entries().length, 4); - const [entry0, entry1, entry2, entry3] = navigation.entries(); + assert_equals(navigation.entries().length, start_length + 3); + const [entry0, entry1, entry2, entry3] = navigation.entries().slice(start_index); assert_equals((new URL(entry2.url)).hash, "#2"); assert_equals((new URL(entry3.url)).hash, "#3"); @@ -26,7 +28,7 @@ promise_test(async (t) => { assert_equals(e.composed, false); assert_array_equals( - navigation.entries(), + navigation.entries().slice(start_index), [entry0, entry1, navigation.currentEntry], "entries() is updated during dispose for entry 2"); assert_not_equals(navigation.currentEntry, entry1, "current entry must be updated during dispose for entry 3"); @@ -40,7 +42,7 @@ promise_test(async (t) => { assert_true(dispose2Called, "dispose for entry 2 must have happened before entry 3"); assert_array_equals( - navigation.entries(), + navigation.entries().slice(start_index), [entry0, entry1, navigation.currentEntry], "entries() is updated during dispose for entry 3"); assert_not_equals(navigation.currentEntry, entry1, "current entry must be updated during dispose for entry 3"); @@ -54,8 +56,8 @@ promise_test(async (t) => { navigation.navigate("#fork"); - assert_equals(navigation.entries().length, 3); - const [finalEntry0, finalEntry1, finalEntry2] = navigation.entries(); + assert_equals(navigation.entries().length, start_length + 2); + const [finalEntry0, finalEntry1, finalEntry2] = navigation.entries().slice(start_index); assert_equals(finalEntry0, entry0); assert_equals(finalEntry1, entry1); assert_not_equals(finalEntry2, entry2); diff --git a/tests/wpt/tests/navigation-api/per-entry-events/dispose-skip-current-on-truncate.html b/tests/wpt/tests/navigation-api/per-entry-events/dispose-skip-current-on-truncate.html index 56ec4d301f9..bcf0ee3b79e 100644 --- a/tests/wpt/tests/navigation-api/per-entry-events/dispose-skip-current-on-truncate.html +++ b/tests/wpt/tests/navigation-api/per-entry-events/dispose-skip-current-on-truncate.html @@ -3,11 +3,14 @@ <script src="/resources/testharnessreport.js"></script> <script> promise_test(async (t) => { + let start_length = navigation.entries().length; + let start_index = navigation.currentEntry.index; + // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. await new Promise(r => window.onload = () => t.step_timeout(r, 0)); await navigation.navigate("#1").finished; - assert_equals(navigation.entries().length, 2); + assert_equals(navigation.entries().length, start_length + 1); let iframe = document.createElement("iframe"); iframe.src = "/common/blank.html"; @@ -19,22 +22,22 @@ promise_test(async (t) => { // document, but we will be at a joint session history entry that was created // before the iframe was added to the document. await navigation.back().finished; - assert_equals(navigation.entries().length, 2); + assert_equals(navigation.entries().length, start_length + 1); assert_equals(iframe.contentWindow.navigation.entries().length, 1); - assert_equals(navigation.currentEntry.index, 0); + assert_equals(navigation.currentEntry.index, start_index); assert_equals(iframe.contentWindow.navigation.currentEntry.index, 0); // A push navigation in the top window will truncate-then-push the joint // session history. This should dispose the forward entry in the top window, // but should not interfere with the currentEntry in the iframe. - let dispose_promise = new Promise(r => navigation.entries()[1].ondispose = r); + let dispose_promise = new Promise(r => navigation.entries()[start_index + 1].ondispose = r); iframe.contentWindow.navigation.currentEntry.ondispose = t.unreached_func("iframe entry must not be disposed"); await navigation.navigate("#b").finished; await dispose_promise; - assert_equals(navigation.entries().length, 2); + assert_equals(navigation.entries().length, start_length + 1); assert_equals(iframe.contentWindow.navigation.entries().length, 1); - assert_equals(navigation.currentEntry.index, 1); + assert_equals(navigation.currentEntry.index, start_index + 1); assert_equals(iframe.contentWindow.navigation.currentEntry.index, 0); }, "Removing a currentEntry from the joint session history shouldn't dispose it"); </script> diff --git a/tests/wpt/tests/navigation-api/state/same-document-away-and-back-location-api.html b/tests/wpt/tests/navigation-api/state/same-document-away-and-back-location-api.html index d161df8b529..ddc90eef8c5 100644 --- a/tests/wpt/tests/navigation-api/state/same-document-away-and-back-location-api.html +++ b/tests/wpt/tests/navigation-api/state/same-document-away-and-back-location-api.html @@ -6,7 +6,9 @@ async_test(t => { // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. window.onload = () => t.step_timeout(async () => { + let start_length = navigation.entries().length; let entry0 = navigation.currentEntry; + let start_index = entry0.index; let navState = { statevar: "state" }; await navigation.navigate("#1", { state: navState }); @@ -15,10 +17,10 @@ async_test(t => { location.href = "#2"; let entry2 = navigation.currentEntry; - assert_equals(navigation.entries().length, 3); - assert_equals(entry0, navigation.entries()[0]); - assert_equals(entry1, navigation.entries()[1]); - assert_equals(entry2, navigation.entries()[2]); + assert_equals(navigation.entries().length, start_length + 2); + assert_equals(entry0, navigation.entries()[start_index]); + assert_equals(entry1, navigation.entries()[start_index + 1]); + assert_equals(entry2, navigation.entries()[start_index + 2]); assert_equals(entry0.getState(), undefined); @@ -34,9 +36,9 @@ async_test(t => { history.back(); window.onpopstate = t.step_func_done(() => { - assert_equals(navigation.entries().length, 3); + assert_equals(navigation.entries().length, start_length + 2); let back_entry = navigation.currentEntry; - assert_equals(back_entry, navigation.entries()[1]); + assert_equals(back_entry, navigation.entries()[start_index + 1]); let back_state = back_entry.getState(); assert_not_equals(back_state, state1); assert_not_equals(back_state, state2); diff --git a/tests/wpt/tests/navigation-api/state/same-document-away-and-back-navigation-api.html b/tests/wpt/tests/navigation-api/state/same-document-away-and-back-navigation-api.html index 220908e4c46..cfb7765b0d5 100644 --- a/tests/wpt/tests/navigation-api/state/same-document-away-and-back-navigation-api.html +++ b/tests/wpt/tests/navigation-api/state/same-document-away-and-back-navigation-api.html @@ -6,7 +6,9 @@ async_test(t => { // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. window.onload = () => t.step_timeout(async () => { + let start_length = navigation.entries().length; let entry0 = navigation.currentEntry; + let start_index = entry0.index; let navState = { statevar: "state" }; await navigation.navigate("#1", { state: navState }).committed; @@ -17,10 +19,10 @@ async_test(t => { let entry2 = navigation.currentEntry; t.step_func(() => { - assert_equals(navigation.entries().length, 3); - assert_equals(entry0, navigation.entries()[0]); - assert_equals(entry1, navigation.entries()[1]); - assert_equals(entry2, navigation.entries()[2]); + assert_equals(navigation.entries().length, start_length + 2); + assert_equals(entry0, navigation.entries()[start_index]); + assert_equals(entry1, navigation.entries()[start_index + 1]); + assert_equals(entry2, navigation.entries()[start_index + 2]); assert_equals(entry0.getState(), undefined); @@ -38,9 +40,9 @@ async_test(t => { navigation.back(); window.onpopstate = t.step_func_done(() => { - assert_equals(navigation.entries().length, 3); + assert_equals(navigation.entries().length, start_length + 2); let back_entry = navigation.currentEntry; - assert_equals(back_entry, navigation.entries()[1]); + assert_equals(back_entry, navigation.entries()[start_index + 1]); let back_state = back_entry.getState(); assert_not_equals(back_state, state1); assert_not_equals(back_state, state2); diff --git a/tests/wpt/tests/navigation-api/updateCurrentEntry-method/same-document-away-and-back-location-api.html b/tests/wpt/tests/navigation-api/updateCurrentEntry-method/same-document-away-and-back-location-api.html index 47b1904f4f4..04b615cf831 100644 --- a/tests/wpt/tests/navigation-api/updateCurrentEntry-method/same-document-away-and-back-location-api.html +++ b/tests/wpt/tests/navigation-api/updateCurrentEntry-method/same-document-away-and-back-location-api.html @@ -6,7 +6,9 @@ async_test(t => { // Wait for after the load event so that the navigation doesn't get converted // into a replace navigation. window.onload = () => t.step_timeout(async () => { + let start_length = navigation.entries().length; let entry0 = navigation.currentEntry; + let start_index = entry0.index; let navState = { statevar: "state" }; navigation.updateCurrentEntry({ state: navState }); @@ -15,9 +17,9 @@ async_test(t => { location.href = "#2"; let entry1 = navigation.currentEntry; - assert_equals(navigation.entries().length, 2); - assert_equals(entry0, navigation.entries()[0]); - assert_equals(entry1, navigation.entries()[1]); + assert_equals(navigation.entries().length, start_length + 1); + assert_equals(entry0, navigation.entries()[start_index]); + assert_equals(entry1, navigation.entries()[start_index + 1]); assert_equals(entry0.getState().statevar, "state"); assert_not_equals(entry0.getState(), navState); @@ -28,7 +30,7 @@ async_test(t => { history.back(); window.onpopstate = t.step_func_done(() => { - assert_equals(navigation.entries().length, 2); + assert_equals(navigation.entries().length, start_length + 1); let back_entry = navigation.currentEntry; assert_equals(back_entry, entry0); let back_state = back_entry.getState(); diff --git a/tests/wpt/tests/permissions-policy/reporting/report-only-and-enforce.https.sub.html b/tests/wpt/tests/permissions-policy/reporting/report-only-and-enforce.https.sub.html new file mode 100644 index 00000000000..6254b3247e2 --- /dev/null +++ b/tests/wpt/tests/permissions-policy/reporting/report-only-and-enforce.https.sub.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + <script src='/resources/testdriver.js'></script> + <script src='/resources/testdriver-vendor.js'></script> + <script src='../../mediacapture-streams/permission-helper.js'></script> + <script src='/reporting/resources/report-helper.js'></script> + </head> + <body> + <script> + const base_url = `${location.protocol}//${location.host}`; + const endpoint = `${base_url}/reporting/resources/report.py`; + const enforcing_id = '69c90b97-8b7c-4439-b5d2-ff03f237b2b2'; + const report_only_id = '9d095a14-6b1c-40e1-be19-55a1fec97d11'; + + promise_test(async t => { + await setMediaPermission("granted", ["camera","microphone"]); + await promise_rejects_dom( + t, "NotAllowedError", navigator.mediaDevices.getUserMedia({video: true}), + "UserMedia camera access should not be allowed in this document."); + while(true) { + await wait(100); + const reports = await pollReports(endpoint, enforcing_id); + if (reports.length) { + checkReportExists(reports, 'permissions-policy-violation', location.href); + break; + } + } + const report_only_reports = await pollReports(endpoint, report_only_id); + assert_equals(report_only_reports.length, 0, "Report-only endpoint should not receive report."); + }, "Enforcing policy receives reports when both enforcing and report-only policies are set."); + </script> + </body> +</html> diff --git a/tests/wpt/tests/permissions-policy/reporting/report-only-and-enforce.https.sub.html.sub.headers b/tests/wpt/tests/permissions-policy/reporting/report-only-and-enforce.https.sub.html.sub.headers new file mode 100644 index 00000000000..48f483dd45e --- /dev/null +++ b/tests/wpt/tests/permissions-policy/reporting/report-only-and-enforce.https.sub.html.sub.headers @@ -0,0 +1,3 @@ +Permissions-Policy: camera=();report-to=enforcing-endpoint +Permissions-Policy-Report-Only: camera=();report-to=report-only-endpoint +Reporting-Endpoints: enforcing-endpoint="https://{{host}}:{{ports[https][0]}}/reporting/resources/report.py?reportID=69c90b97-8b7c-4439-b5d2-ff03f237b2b2", report-only-endpoint="https://{{host}}:{{ports[https][0]}}/reporting/resources/report.py?reportID=9d095a14-6b1c-40e1-be19-55a1fec97d11" diff --git a/tests/wpt/tests/permissions-policy/reporting/report-only-single-endpoint.https.sub.html b/tests/wpt/tests/permissions-policy/reporting/report-only-single-endpoint.https.sub.html new file mode 100644 index 00000000000..7f9bad40cbb --- /dev/null +++ b/tests/wpt/tests/permissions-policy/reporting/report-only-single-endpoint.https.sub.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + <script src='/resources/testdriver.js'></script> + <script src='/resources/testdriver-vendor.js'></script> + <script src='../../mediacapture-streams/permission-helper.js'></script> + <script src='/reporting/resources/report-helper.js'></script> + </head> + <body> + <script> + const base_url = `${location.protocol}//${location.host}`; + const endpoint = `${base_url}/reporting/resources/report.py`; + const id = 'c3841a1a-e750-4801-a50b-c4222d386515'; + + promise_test(async t => { + await setMediaPermission("granted", ["camera","microphone"]); + // This should not throw, as the enforcing policy does not block it. + await navigator.mediaDevices.getUserMedia({video: true}); + while(true) { + await wait(100); + const reports = await pollReports(endpoint, id); + if (reports.length) { + checkReportExists(reports, 'permissions-policy-violation', location.href); + break; + } + } + }, "Reporting-Endpoints defined endpoint received reports in report-only mode."); + </script> + </body> +</html> diff --git a/tests/wpt/tests/permissions-policy/reporting/report-only-single-endpoint.https.sub.html.sub.headers b/tests/wpt/tests/permissions-policy/reporting/report-only-single-endpoint.https.sub.html.sub.headers new file mode 100644 index 00000000000..881eaba1493 --- /dev/null +++ b/tests/wpt/tests/permissions-policy/reporting/report-only-single-endpoint.https.sub.html.sub.headers @@ -0,0 +1,2 @@ +Permissions-Policy-Report-Only: camera=();report-to=camera-endpoint +Reporting-Endpoints: camera-endpoint="https://{{host}}:{{ports[https][0]}}/reporting/resources/report.py?reportID=c3841a1a-e750-4801-a50b-c4222d386515" diff --git a/tests/wpt/tests/resources/chromium/generic_sensor_mocks.js b/tests/wpt/tests/resources/chromium/generic_sensor_mocks.js index 98a29c2104f..5ca8dc0173b 100644 --- a/tests/wpt/tests/resources/chromium/generic_sensor_mocks.js +++ b/tests/wpt/tests/resources/chromium/generic_sensor_mocks.js @@ -1,5 +1,6 @@ import {ReportingMode, Sensor, SensorClientRemote, SensorReceiver, SensorRemote, SensorType} from '/gen/services/device/public/mojom/sensor.mojom.m.js'; -import {SensorCreationResult, SensorInitParams_READ_BUFFER_SIZE_FOR_TESTS, SensorProvider, SensorProviderReceiver} from '/gen/services/device/public/mojom/sensor_provider.mojom.m.js'; +import {SensorCreationResult, SensorInitParams_READ_BUFFER_SIZE_FOR_TESTS} from '/gen/services/device/public/mojom/sensor_provider.mojom.m.js'; +import {WebSensorProvider, WebSensorProviderReceiver} from '/gen/third_party/blink/public/mojom/sensor/web_sensor_provider.mojom.m.js'; // A "sliding window" that iterates over |data| and returns one item at a // time, advancing and wrapping around as needed. |data| must be an array of @@ -287,8 +288,8 @@ self.GenericSensorTest = (() => { } } - // Class that mocks SensorProvider interface defined in - // https://cs.chromium.org/chromium/src/services/device/public/mojom/sensor_provider.mojom + // Class that mocks the WebSensorProvider interface defined in + // https://cs.chromium.org/chromium/src/third_party/blink/public/mojom/sensor/web_sensor_provider.mojom class MockSensorProvider { constructor() { this.readingSizeInBytes_ = @@ -334,10 +335,10 @@ self.GenericSensorTest = (() => { SensorType.RELATIVE_ORIENTATION_EULER_ANGLES], ['ProximitySensor', SensorType.PROXIMITY] ]); - this.receiver_ = new SensorProviderReceiver(this); + this.receiver_ = new WebSensorProviderReceiver(this); this.interceptor_ = - new MojoInterfaceInterceptor(SensorProvider.$interfaceName); + new MojoInterfaceInterceptor(WebSensorProvider.$interfaceName); this.interceptor_.oninterfacerequest = e => { this.bindToPipe(e.handle); }; diff --git a/tests/wpt/tests/soft-navigation-heuristics/keydown.tentative.html b/tests/wpt/tests/soft-navigation-heuristics/keydown.tentative.html index fac86d71d2c..19971e6d2da 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/keydown.tentative.html +++ b/tests/wpt/tests/soft-navigation-heuristics/keydown.tentative.html @@ -2,7 +2,7 @@ <html> <head> <meta charset="utf-8"> -<title>Detect hashchange event.</title> +<title>Detect keyboard-event based soft navigations.</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/resources/testdriver.js"></script> diff --git a/tests/wpt/tests/soft-navigation-heuristics/keypress.tentative.html b/tests/wpt/tests/soft-navigation-heuristics/keypress.tentative.html new file mode 100644 index 00000000000..5bd512ec3e7 --- /dev/null +++ b/tests/wpt/tests/soft-navigation-heuristics/keypress.tentative.html @@ -0,0 +1,31 @@ +<!DOCTYPE HTML> +<html> +<head> +<meta charset="utf-8"> +<title>Detect keyboard-event based soft navigations.</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/soft-navigation-helper.js"></script> +</head> +<!-- Not including a body element to ensure the keypress heuristic works on + malformed HTML --> + <main id=main> + <div> + First LCP! + </div> + </main> + <script> + testSoftNavigation({ + addContent: () => { + addTextToDivOnMain(); + }, + link: document.body, + interactionType: "keypress", + eventType: "keypress", + test: "Keypress on body triggers SoftNavigationHeuristics"}); + </script> +</html> + + diff --git a/tests/wpt/tests/soft-navigation-heuristics/keyup.tentative.html b/tests/wpt/tests/soft-navigation-heuristics/keyup.tentative.html new file mode 100644 index 00000000000..8b5717d62e9 --- /dev/null +++ b/tests/wpt/tests/soft-navigation-heuristics/keyup.tentative.html @@ -0,0 +1,30 @@ +<!DOCTYPE HTML> +<html> +<head> +<meta charset="utf-8"> +<title>Detect keyboard-event based soft navigations.</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/soft-navigation-helper.js"></script> +</head> +<!-- Not including a body element to ensure the keyup heuristic works on + malformed HTML --> + <main id=main> + <div> + First LCP! + </div> + </main> + <script> + testSoftNavigation({ + addContent: () => { + addTextToDivOnMain(); + }, + link: document.body, + interactionType: "keyup", + eventType: "keyup", + test: "Keyup on body triggers SoftNavigationHeuristics"}); + </script> +</html> + diff --git a/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js b/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js index 7f83df75f8f..1116ebccb35 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js +++ b/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js @@ -149,7 +149,7 @@ const interact = const setEvent = (t, button, pushState, addContent, pushUrl, eventType, prepWork) => { const eventObject = - (eventType == 'click' || eventType == 'keydown') ? button : window; + (eventType == 'click' || eventType.startsWith("key")) ? button : window; eventObject.addEventListener(eventType, async e => { if (prepWork &&!prepWork(t)) { return; @@ -194,7 +194,8 @@ const validateSoftNavigationEntry = async (clicks, extraValidations, assert_true(entry.name.includes(pushUrl ? URL : document.location.href), "The soft navigation name is properly set"); const entryTimestamp = entry.startTime; - assert_less_than_equal(timestamps[i]["syncPostInteraction"], entryTimestamp); + assert_less_than_equal(timestamps[i]["syncPostInteraction"], entryTimestamp, + "Entry timestamp is lower than the post interaction one"); assert_greater_than_equal( timestamps[i]['eventStart'], entryTimestamp, 'Event start timestamp matches'); diff --git a/tests/wpt/tests/svg/types/scripted/SVGLength-px-with-context.html b/tests/wpt/tests/svg/types/scripted/SVGLength-px-with-context.html index b5c2149b692..7cbe27f83a3 100644 --- a/tests/wpt/tests/svg/types/scripted/SVGLength-px-with-context.html +++ b/tests/wpt/tests/svg/types/scripted/SVGLength-px-with-context.html @@ -26,11 +26,11 @@ setup(function() { function calculateXHeight() { // Crude hack to calculate the x-height - var divElement = document.createElement("div"); + let divElement = document.createElement("div"); divElement.setAttribute("style", "height: 1ex; font-size: 12px; font-family: Ahem;"); - var pElement = document.querySelector("p"); + let pElement = document.querySelector("p"); pElement.appendChild(divElement); - var xHeight = divElement.offsetHeight; + let xHeight = divElement.offsetHeight; pElement.removeChild(divElement); return xHeight; } @@ -48,7 +48,7 @@ test(function() { test(function() { length.valueAsString = "3px"; length.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE); - var referenceValue = 3 / svgWidth * 100; + let referenceValue = 3 / svgWidth * 100; assert_equals(length.valueAsString, referenceValue + "%"); assert_equals(length.valueInSpecifiedUnits, referenceValue); assert_equals(length.value, 3); @@ -56,9 +56,23 @@ test(function() { }, document.title + ", percentage"); test(function() { + let svgElement = document.getElementsByTagName("svg")[0]; + let viewBox = svgElement.getAttribute("viewBox"); + svgElement.removeAttribute("viewBox"); + length.valueAsString = "50%"; + let referenceValue = svgWidth / 2; + assert_equals(length.value, referenceValue); + svgElement.width.baseVal.value = 300; + referenceValue = svgElement.width.baseVal.value / 2; + assert_equals(length.value, referenceValue); + svgElement.width.baseVal.value = 150; + svgElement.setAttribute("viewBox", viewBox); +}, document.title + ", changing percentage basis"); + +test(function() { length.valueAsString = "6px"; length.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_EMS); - var referenceValue = 6 / fontSize; + let referenceValue = 6 / fontSize; assert_equals(length.valueAsString, referenceValue + "em"); assert_equals(length.valueInSpecifiedUnits, referenceValue); assert_equals(length.value, 6); @@ -68,7 +82,7 @@ test(function() { test(function() { length.valueAsString = "2px"; length.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_EXS); - var referenceValue = 2 / xHeight; + let referenceValue = 2 / xHeight; // Don't check valueAsString here, it's unreliable across browsers. assert_approx_equals(length.valueInSpecifiedUnits, referenceValue, 0.1); assert_approx_equals(length.value, 2.0, 0.1); @@ -89,7 +103,7 @@ test(function() { test(function() { length.valueAsString = "48px"; length.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_CM); - var referenceValue = 48 * 2.54 / cssPixelsPerInch; + let referenceValue = 48 * 2.54 / cssPixelsPerInch; assert_equals(length.valueAsString, referenceValue.toFixed(2) + "cm"); assert_approx_equals(length.valueInSpecifiedUnits, referenceValue, 0.001); assert_equals(length.value, 48); @@ -99,7 +113,7 @@ test(function() { test(function() { length.valueAsString = "48px"; length.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_MM); - var referenceValue = 48 * 25.4 / cssPixelsPerInch; + let referenceValue = 48 * 25.4 / cssPixelsPerInch; assert_equals(length.valueAsString, referenceValue.toFixed(1) + "mm"); assert_approx_equals(length.valueInSpecifiedUnits, referenceValue, 0.001); assert_equals(length.value, 48); @@ -109,7 +123,7 @@ test(function() { test(function() { length.valueAsString = "48px"; length.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_IN); - var referenceValue = 48 / cssPixelsPerInch; + let referenceValue = 48 / cssPixelsPerInch; assert_equals(length.valueAsString, referenceValue + "in"); assert_equals(length.valueInSpecifiedUnits, referenceValue); assert_equals(length.value, 48); @@ -119,7 +133,7 @@ test(function() { test(function() { length.valueAsString = "4px"; length.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PT); - var referenceValue = 4 / cssPixelsPerInch * 72; + let referenceValue = 4 / cssPixelsPerInch * 72; assert_equals(length.valueAsString, referenceValue + "pt"); assert_equals(length.valueInSpecifiedUnits, referenceValue); assert_equals(length.value, 4); @@ -129,7 +143,7 @@ test(function() { test(function() { length.valueAsString = "16px"; length.convertToSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PC); - var referenceValue = 16 / cssPixelsPerInch * 6; + let referenceValue = 16 / cssPixelsPerInch * 6; // Don't check valueAsString here, it's unreliable across browsers. assert_equals(length.valueInSpecifiedUnits, referenceValue); assert_equals(length.value, 16); diff --git a/tests/wpt/tests/tools/ci/run_tc.py b/tests/wpt/tests/tools/ci/run_tc.py index a5a6256ad54..b91825497d4 100755 --- a/tests/wpt/tests/tools/ci/run_tc.py +++ b/tests/wpt/tests/tools/ci/run_tc.py @@ -140,6 +140,13 @@ def install_certificates(): run(["sudo", "update-ca-certificates"]) +def start_dbus(): + run(["sudo", "service", "dbus", "start"]) + # Enable dbus autolaunch for Chrome + # https://source.chromium.org/chromium/chromium/src/+/main:content/app/content_main.cc;l=220;drc=0bcc023b8cdbc073aa5c48db373810db3f765c87. + os.environ["DBUS_SESSION_BUS_ADDRESS"] = "autolaunch:" + + def install_chrome(channel): if channel in ("experimental", "dev"): deb_archive = "google-chrome-unstable_current_amd64.deb" @@ -257,6 +264,8 @@ def setup_environment(args): if "chrome" in args.browser: assert args.channel is not None install_chrome(args.channel) + # Chrome is using dbus for various features. + start_dbus() if args.xvfb: start_xvfb() diff --git a/tests/wpt/tests/tools/webdriver/webdriver/bidi/modules/script.py b/tests/wpt/tests/tools/webdriver/webdriver/bidi/modules/script.py index 99b26927403..f128b0d089c 100644 --- a/tests/wpt/tests/tools/webdriver/webdriver/bidi/modules/script.py +++ b/tests/wpt/tests/tools/webdriver/webdriver/bidi/modules/script.py @@ -124,7 +124,8 @@ class Script(BidiModule): arguments: Optional[List[Mapping[str, Any]]] = None, this: Optional[Mapping[str, Any]] = None, result_ownership: Optional[OwnershipModel] = None, - serialization_options: Optional[SerializationOptions] = None + serialization_options: Optional[SerializationOptions] = None, + user_activation: Optional[bool] = None ) -> Mapping[str, Any]: params: MutableMapping[str, Any] = { "functionDeclaration": function_declaration, @@ -140,6 +141,8 @@ class Script(BidiModule): params["resultOwnership"] = result_ownership if serialization_options is not None: params["serializationOptions"] = serialization_options + if user_activation is not None: + params["userActivation"] = user_activation return params @call_function.result @@ -165,7 +168,8 @@ class Script(BidiModule): target: Target, await_promise: bool, result_ownership: Optional[OwnershipModel] = None, - serialization_options: Optional[SerializationOptions] = None + serialization_options: Optional[SerializationOptions] = None, + user_activation: Optional[bool] = None ) -> Mapping[str, Any]: params: MutableMapping[str, Any] = { "expression": expression, @@ -177,6 +181,8 @@ class Script(BidiModule): params["resultOwnership"] = result_ownership if serialization_options is not None: params["serializationOptions"] = serialization_options + if user_activation is not None: + params["userActivation"] = user_activation return params @evaluate.result diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py index d91703f42dd..2ef3e18900f 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py @@ -117,7 +117,7 @@ def browser_kwargs(logger, test_type, run_info_data, config, subsuite, **kwargs) "certutil_binary": kwargs["certutil_binary"], "ca_certificate_path": config.ssl_config["ca_cert_path"], "e10s": kwargs["gecko_e10s"], - "enable_fission": run_info_data["fission"], + "disable_fission": kwargs["disable_fission"], "stackfix_dir": kwargs["stackfix_dir"], "binary_args": kwargs["binary_args"].copy(), "timeout_multiplier": get_timeout_multiplier(test_type, @@ -174,6 +174,7 @@ def executor_kwargs(logger, test_type, test_environment, run_info_data, executor_kwargs["ccov"] = run_info_data.get("ccov", False) executor_kwargs["browser_version"] = run_info_data.get("browser_version") executor_kwargs["debug_test"] = kwargs["debug_test"] + executor_kwargs["disable_fission"] = kwargs["disable_fission"] return executor_kwargs @@ -203,18 +204,13 @@ def run_info_extras(**kwargs): pref_value = get_bool_pref_if_exists(pref) return pref_value if pref_value is not None else False - # Default fission to on, unless we get --[no-]enable-fission or - # --set-pref fission.autostart=[true|false] - enable_fission = [item for item in [kwargs.get("enable_fission"), - get_bool_pref_if_exists("fission.autostart"), - True] if item is not None][0] - + # Default fission to on, unless we get --disable-fission rv = {"e10s": kwargs["gecko_e10s"], "wasm": kwargs.get("wasm", True), "verify": kwargs["verify"], "headless": kwargs.get("headless", False) or "MOZ_HEADLESS" in os.environ, - "fission": enable_fission, - "sessionHistoryInParent": (enable_fission or + "fission": not kwargs.get("disable_fission"), + "sessionHistoryInParent": (not kwargs.get("disable_fission") or not get_bool_pref("fission.disableSessionHistoryInParent")), "swgl": get_bool_pref("gfx.webrender.software")} @@ -610,7 +606,7 @@ class FirefoxOutputHandler(OutputHandler): class ProfileCreator: def __init__(self, logger, prefs_root, config, test_type, extra_prefs, e10s, - enable_fission, debug_test, browser_channel, binary, certutil_binary, + disable_fission, debug_test, browser_channel, binary, certutil_binary, ca_certificate_path): self.logger = logger self.prefs_root = prefs_root @@ -618,7 +614,7 @@ class ProfileCreator: self.test_type = test_type self.extra_prefs = extra_prefs self.e10s = e10s - self.enable_fission = enable_fission + self.disable_fission = disable_fission self.debug_test = debug_test self.browser_channel = browser_channel self.ca_certificate_path = ca_certificate_path @@ -693,9 +689,8 @@ class ProfileCreator: if self.e10s: profile.set_preferences({"browser.tabs.remote.autostart": True}) - if self.enable_fission: - profile.set_preferences({"fission.autostart": True}) - else: + profile.set_preferences({"fission.autostart": True}) + if self.disable_fission: profile.set_preferences({"fission.autostart": False}) if self.test_type in ("reftest", "print-reftest"): @@ -707,7 +702,7 @@ class ProfileCreator: # Bug 1262954: winxp + e10s, disable hwaccel if (self.e10s and platform.system() in ("Windows", "Microsoft") and "5.1" in platform.version()): - self.profile.set_preferences({"layers.acceleration.disabled": True}) + profile.set_preferences({"layers.acceleration.disabled": True}) if self.debug_test: profile.set_preferences({"devtools.console.stdout.content": True}) @@ -769,7 +764,7 @@ class FirefoxBrowser(Browser): def __init__(self, logger, binary, prefs_root, test_type, extra_prefs=None, debug_info=None, symbols_path=None, stackwalk_binary=None, certutil_binary=None, - ca_certificate_path=None, e10s=False, enable_fission=True, + ca_certificate_path=None, e10s=False, disable_fission=False, stackfix_dir=None, binary_args=None, timeout_multiplier=None, leak_check=False, asan=False, chaos_mode_flags=None, config=None, browser_channel="nightly", headless=None, preload_browser=False, @@ -799,7 +794,7 @@ class FirefoxBrowser(Browser): test_type, extra_prefs, e10s, - enable_fission, + disable_fission, debug_test, browser_channel, binary, @@ -872,7 +867,7 @@ class FirefoxWdSpecBrowser(WebDriverBrowser): def __init__(self, logger, binary, prefs_root, webdriver_binary, webdriver_args, extra_prefs=None, debug_info=None, symbols_path=None, stackwalk_binary=None, certutil_binary=None, ca_certificate_path=None, e10s=False, - enable_fission=False, stackfix_dir=None, leak_check=False, + disable_fission=False, stackfix_dir=None, leak_check=False, asan=False, chaos_mode_flags=None, config=None, browser_channel="nightly", headless=None, debug_test=False, **kwargs): @@ -896,7 +891,7 @@ class FirefoxWdSpecBrowser(WebDriverBrowser): "wdspec", extra_prefs, e10s, - enable_fission, + disable_fission, debug_test, browser_channel, binary, diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py index 8437dd20059..1937d97c401 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py @@ -62,6 +62,7 @@ def browser_kwargs(logger, test_type, run_info_data, config, **kwargs): run_info_data, **kwargs), "e10s": run_info_data["e10s"], + "disable_fission": kwargs["disable_fission"], # desktop only "leak_check": False, "chaos_mode_flags": kwargs["chaos_mode_flags"], @@ -113,9 +114,9 @@ def get_environ(chaos_mode_flags, env_extras=None): class ProfileCreator(FirefoxProfileCreator): def __init__(self, logger, prefs_root, config, test_type, extra_prefs, - enable_fission, debug_test, browser_channel, certutil_binary, ca_certificate_path): + disable_fission, debug_test, browser_channel, certutil_binary, ca_certificate_path): super().__init__(logger, prefs_root, config, test_type, extra_prefs, - True, enable_fission, debug_test, browser_channel, None, + True, disable_fission, debug_test, browser_channel, None, certutil_binary, ca_certificate_path) def _set_required_prefs(self, profile): @@ -141,6 +142,10 @@ class ProfileCreator(FirefoxProfileCreator): "layout.testing.overlay-scrollbars.always-visible": True, }) + profile.set_preferences({"fission.autostart": True}) + if self.disable_fission: + profile.set_preferences({"fission.autostart": False}) + class FirefoxAndroidBrowser(Browser): init_timeout = 300 @@ -153,7 +158,7 @@ class FirefoxAndroidBrowser(Browser): binary_args=None, timeout_multiplier=None, leak_check=False, asan=False, chaos_mode_flags=None, config=None, browser_channel="nightly", install_fonts=False, tests_root=None, specialpowers_path=None, adb_binary=None, - debug_test=False, **kwargs): + debug_test=False, disable_fission=False, **kwargs): super().__init__(logger) self.prefs_root = prefs_root @@ -178,13 +183,14 @@ class FirefoxAndroidBrowser(Browser): self.tests_root = tests_root self.specialpowers_path = specialpowers_path self.adb_binary = adb_binary + self.disable_fission = disable_fission self.profile_creator = ProfileCreator(logger, prefs_root, config, test_type, extra_prefs, - False, + disable_fission, debug_test, browser_channel, certutil_binary, @@ -309,7 +315,7 @@ class FirefoxAndroidWdSpecBrowser(FirefoxWdSpecBrowser): def __init__(self, logger, prefs_root, webdriver_binary, webdriver_args, extra_prefs=None, debug_info=None, symbols_path=None, stackwalk_binary=None, certutil_binary=None, ca_certificate_path=None, e10s=False, - enable_fission=False, stackfix_dir=None, leak_check=False, + disable_fission=False, stackfix_dir=None, leak_check=False, asan=False, chaos_mode_flags=None, config=None, browser_channel="nightly", headless=None, package_name="org.mozilla.geckoview.test_runner", device_serial=None, @@ -319,7 +325,7 @@ class FirefoxAndroidWdSpecBrowser(FirefoxWdSpecBrowser): extra_prefs=extra_prefs, debug_info=debug_info, symbols_path=symbols_path, stackwalk_binary=stackwalk_binary, certutil_binary=certutil_binary, ca_certificate_path=ca_certificate_path, e10s=e10s, - enable_fission=enable_fission, stackfix_dir=stackfix_dir, + disable_fission=disable_fission, stackfix_dir=stackfix_dir, leak_check=leak_check, asan=asan, chaos_mode_flags=chaos_mode_flags, config=config, browser_channel=browser_channel, headless=headless, **kwargs) diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/wptcommandline.py b/tests/wpt/tests/tools/wptrunner/wptrunner/wptcommandline.py index 58c726fe379..d90f028ceb6 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/wptcommandline.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/wptcommandline.py @@ -323,10 +323,7 @@ scheme host and port.""") default=None, help="Don't preload a gecko instance for faster restarts") gecko_group.add_argument("--disable-e10s", dest="gecko_e10s", action="store_false", default=True, help="Run tests without electrolysis preferences") - gecko_group.add_argument("--enable-fission", dest="enable_fission", action="store_true", default=None, - help="Enable fission in Gecko (defaults to enabled; " - "this option only exists for backward compatibility).") - gecko_group.add_argument("--no-enable-fission", dest="enable_fission", action="store_false", + gecko_group.add_argument("--disable-fission", dest="disable_fission", action="store_true", default=False, help="Disable fission in Gecko.") gecko_group.add_argument("--stackfix-dir", dest="stackfix_dir", action="store", help="Path to directory containing assertion stack fixing scripts") diff --git a/tests/wpt/tests/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html b/tests/wpt/tests/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html new file mode 100644 index 00000000000..cf32d253ae6 --- /dev/null +++ b/tests/wpt/tests/webaudio/the-audio-api/the-audioparam-interface/moderate-exponentialRamp.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<title>Test exponentialRampToValueAtTime() with a moderate ratio of change</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +'use strict'; + +promise_test(async function() { + const bufferSize = 128; + const sampleRate = 16384; + // 3 * 2^6, not a power of two, so that there is some rounding error in the + // exponent + const rampEndSample = 192; + // These values are chosen so that there is rounding error in + // (offset1/offset0)^(1/rampEndSample). + const offset0 = 4.; + const offset1 = 7.; + // 8 units in the last place (ulp) is a generous tolerance if single + // precision powf() is used. Math.pow(2, -23) ~ 1 ulp. + // A simple recurrence relation formulation with only single precision + // arithmetic applied across the whole rendering quantum would accumulate + // error up to 50 ulp, losing 5.6 of the 24 bits of precision. + const relativeTolerance = 8 * Math.pow(2, -23); + + const context = new OfflineAudioContext(1, bufferSize, sampleRate); + + const source = new ConstantSourceNode(context); + source.start(); + // Explicit event to work around + // https://bugzilla.mozilla.org/show_bug.cgi?id=1265393 + source.offset.setValueAtTime(offset0, 0.); + source.offset.exponentialRampToValueAtTime(offset1, rampEndSample/sampleRate); + source.connect(context.destination); + + const buffer = await context.startRendering(); + assert_equals(buffer.length, bufferSize, "output buffer length"); + const output = buffer.getChannelData(0); + const ratio = offset1 / offset0; + for (let i = 0; i < bufferSize; ++i) { + // Math.pow() uses double precision, while `output` has single precision, + // but `tolerance` is more than enough to accommodate differences. + const expected = offset0 * Math.pow(offset1/offset0, i/rampEndSample); + assert_approx_equals( + output[i], + expected, + relativeTolerance * expected, + "scheduled value at " + i); + } +}); +</script> diff --git a/tests/wpt/tests/webcodecs/audio-encoder.https.any.js b/tests/wpt/tests/webcodecs/audio-encoder.https.any.js index cd7739bcd26..51496551cf5 100644 --- a/tests/wpt/tests/webcodecs/audio-encoder.https.any.js +++ b/tests/wpt/tests/webcodecs/audio-encoder.https.any.js @@ -241,7 +241,7 @@ async function checkEncodingError(t, config, good_data, bad_data) { encoder.encode(bad_data); await promise_rejects_dom(t, 'EncodingError', encoder.flush().catch((e) => { - assert_equals(errors, 0); + assert_equals(errors, 1); throw e; })); diff --git a/tests/wpt/tests/webcodecs/transfering.https.any.js b/tests/wpt/tests/webcodecs/transfering.https.any.js index b9487e589d8..b127670d7b4 100644 --- a/tests/wpt/tests/webcodecs/transfering.https.any.js +++ b/tests/wpt/tests/webcodecs/transfering.https.any.js @@ -131,3 +131,57 @@ promise_test(async t => { // `data.buffer` didn't get detached assert_equals(data.length, 16, 'data.length'); }, 'Test transfering same array buffer twice'); + +promise_test(async t => { + const bytes = [ 0xBA, 0xDF, 0x00, 0xD0, 0xBA, 0xDF, 0x01, 0xD0, 0xBA, 0xDF ]; + let data = new Uint8Array(bytes); + let unused_buffer = new ArrayBuffer(123); + let init = { + type: 'key', + timestamp: 0, + data: data, + transfer: [data.buffer, unused_buffer] + }; + + assert_equals(data.length, 10, 'data.length'); + assert_equals(unused_buffer.byteLength, 123, 'unused_buffer.byteLength'); + + let chunk = new EncodedAudioChunk(init); + assert_equals(data.length, 0, 'data.length after detach'); + assert_equals(unused_buffer.byteLength, 0, 'unused_buffer after detach'); + + let output_data = new Uint8Array(chunk.byteLength); + chunk.copyTo(output_data); + let expected_data = new Uint8Array(bytes); + assert_equals(expected_data.length, chunk.byteLength, 'expected_data size'); + for (let i = 0; i < chunk.byteLength; i++) { + assert_equals(expected_data[i], output_data[i], `expected_data[${i}]`); + } +}, 'Test transfering ArrayBuffer to EncodedAudioChunk'); + +promise_test(async t => { + const bytes = [ 0xBA, 0xDF, 0x00, 0xD0, 0xBA, 0xDF, 0x01, 0xD0, 0xBA, 0xDF ]; + let data = new Uint8Array(bytes); + let unused_buffer = new ArrayBuffer(123); + let init = { + type: 'key', + timestamp: 0, + data: data, + transfer: [data.buffer, unused_buffer] + }; + + assert_equals(data.length, 10, 'data.length'); + assert_equals(unused_buffer.byteLength, 123, 'unused_buffer.byteLength'); + + let chunk = new EncodedVideoChunk(init); + assert_equals(data.length, 0, 'data.length after detach'); + assert_equals(unused_buffer.byteLength, 0, 'unused_buffer after detach'); + + let output_data = new Uint8Array(chunk.byteLength); + chunk.copyTo(output_data); + let expected_data = new Uint8Array(bytes); + assert_equals(expected_data.length, chunk.byteLength, 'expected_data size'); + for (let i = 0; i < chunk.byteLength; i++) { + assert_equals(expected_data[i], output_data[i], `expected_data[${i}]`); + } +}, 'Test transfering ArrayBuffer to EncodedVideoChunk');
\ No newline at end of file diff --git a/tests/wpt/tests/webdriver/tests/bidi/script/call_function/invalid.py b/tests/wpt/tests/webdriver/tests/bidi/script/call_function/invalid.py index cfe5711e63b..9de343955c8 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/script/call_function/invalid.py +++ b/tests/wpt/tests/webdriver/tests/bidi/script/call_function/invalid.py @@ -1,3 +1,5 @@ +# META: timeout=long + import pytest import webdriver.bidi.error as error @@ -421,3 +423,13 @@ async def test_params_include_shadow_tree_invalid_value(bidi_session, top_contex serialization_options=SerializationOptions(include_shadow_tree="foo"), target=ContextTarget(top_context["context"]), await_promise=True) + + +@pytest.mark.parametrize("user_activation", ["foo", 42, {}, []]) +async def test_params_user_activation_invalid_type(bidi_session, top_context, user_activation): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.script.call_function( + function_declaration="(arg) => arg", + target=ContextTarget(top_context["context"]), + await_promise=False, + user_activation=user_activation) diff --git a/tests/wpt/tests/webdriver/tests/bidi/script/call_function/user_activation.py b/tests/wpt/tests/webdriver/tests/bidi/script/call_function/user_activation.py new file mode 100644 index 00000000000..786fb43954f --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/script/call_function/user_activation.py @@ -0,0 +1,43 @@ +import pytest + +from webdriver.bidi.modules.script import ContextTarget + + +@pytest.mark.asyncio +@pytest.mark.parametrize("user_activation", [True, False]) +async def test_userActivation(bidi_session, top_context, user_activation): + # Consume any previously set activation. + await bidi_session.script.evaluate( + expression="""window.open();""", + target=ContextTarget(top_context["context"]), + await_promise=False) + + result = await bidi_session.script.call_function( + function_declaration="() => navigator.userActivation.isActive && navigator.userActivation.hasBeenActive", + target=ContextTarget(top_context["context"]), + await_promise=True, + user_activation=user_activation) + + assert result == { + "type": "boolean", + "value": user_activation} + + +@pytest.mark.asyncio +@pytest.mark.parametrize("user_activation", [True, False]) +async def test_userActivation_copy(bidi_session, top_context, user_activation): + # Consume any previously set activation. + await bidi_session.script.evaluate( + expression="""window.open();""", + target=ContextTarget(top_context["context"]), + await_promise=False) + + result = await bidi_session.script.call_function( + function_declaration="() => document.body.appendChild(document.createTextNode('test')) && document.execCommand('selectAll') && document.execCommand('copy')", + target=ContextTarget(top_context["context"]), + await_promise=True, + user_activation=user_activation) + + assert result == { + "type": "boolean", + "value": user_activation} diff --git a/tests/wpt/tests/webdriver/tests/bidi/script/evaluate/invalid.py b/tests/wpt/tests/webdriver/tests/bidi/script/evaluate/invalid.py index 666bf4d06e0..f27720a204e 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/script/evaluate/invalid.py +++ b/tests/wpt/tests/webdriver/tests/bidi/script/evaluate/invalid.py @@ -152,3 +152,13 @@ async def test_params_include_shadow_tree_invalid_value( serialization_options=SerializationOptions(include_shadow_tree="foo"), target=ContextTarget(top_context["context"]), await_promise=True) + + +@pytest.mark.parametrize("user_activation", ["foo", 42, {}, []]) +async def test_params_user_activation_invalid_type(bidi_session, top_context, user_activation): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.script.evaluate( + expression="1 + 2", + user_activation=user_activation, + target=ContextTarget(top_context["context"]), + await_promise=True) diff --git a/tests/wpt/tests/webdriver/tests/bidi/script/evaluate/user_activation.py b/tests/wpt/tests/webdriver/tests/bidi/script/evaluate/user_activation.py new file mode 100644 index 00000000000..4ca558435d7 --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/script/evaluate/user_activation.py @@ -0,0 +1,43 @@ +import pytest + +from webdriver.bidi.modules.script import ContextTarget + + +@pytest.mark.asyncio +@pytest.mark.parametrize("user_activation", [True, False]) +async def test_userActivation(bidi_session, top_context, user_activation): + # Consume any previously set activation. + await bidi_session.script.evaluate( + expression="""window.open();""", + target=ContextTarget(top_context["context"]), + await_promise=False) + + result = await bidi_session.script.evaluate( + expression="navigator.userActivation.isActive && navigator.userActivation.hasBeenActive", + target=ContextTarget(top_context["context"]), + await_promise=True, + user_activation=user_activation) + + assert result == { + "type": "boolean", + "value": user_activation} + + +@pytest.mark.asyncio +@pytest.mark.parametrize("user_activation", [True, False]) +async def test_userActivation_copy(bidi_session, top_context, user_activation): + # Consume any previously set activation. + await bidi_session.script.evaluate( + expression="""window.open();""", + target=ContextTarget(top_context["context"]), + await_promise=False) + + result = await bidi_session.script.evaluate( + expression="document.body.appendChild(document.createTextNode('test')) && document.execCommand('selectAll') && document.execCommand('copy')", + target=ContextTarget(top_context["context"]), + await_promise=True, + user_activation=user_activation) + + assert result == { + "type": "boolean", + "value": user_activation} diff --git a/tests/wpt/tests/websockets/interfaces/WebSocket/close/close-connecting-async.any.js b/tests/wpt/tests/websockets/interfaces/WebSocket/close/close-connecting-async.any.js new file mode 100644 index 00000000000..c7ace1fca27 --- /dev/null +++ b/tests/wpt/tests/websockets/interfaces/WebSocket/close/close-connecting-async.any.js @@ -0,0 +1,31 @@ +// META: script=../../../constants.sub.js +// META: variant= +// META: variant=?wpt_flags=h2 +// META: variant=?wss + +async_test(t => { + const ws = new WebSocket(SCHEME_DOMAIN_PORT + '/handshake_sleep_2'); + let closeMethodReturned = false; + let errorEventSeen = false; + let closeEventSeen = false; + ws.onerror = t.step_func(() => { + assert_true(closeMethodReturned, 'ws.close() should have returned'); + assert_false(errorEventSeen, 'error event should only fire once'); + errorEventSeen = true; + assert_false(closeEventSeen, 'error event should come before close event'); + }); + ws.onclose = t.step_func_done(() => { + assert_true(closeMethodReturned, 'ws.close() should have returned'); + assert_true(errorEventSeen, 'error event should have fired'); + assert_false(closeEventSeen, 'close event should only fire once'); + closeEventSeen = true; + assert_equals(ws.readyState, WebSocket.CLOSED, + 'readyState should be CLOSED'); + }); + assert_equals(ws.readyState, WebSocket.CONNECTING, + 'readyState should be CONNECTING'); + ws.close(); + closeMethodReturned = true; + assert_equals(ws.readyState, WebSocket.CLOSING, + 'readyState should be CLOSING'); +}, 'close event should be fired asynchronously when WebSocket is connecting'); diff --git a/tests/wpt/tests/workers/shared-worker-partitioned-cookies.tentative.https.html b/tests/wpt/tests/workers/shared-worker-partitioned-cookies.tentative.https.html new file mode 100644 index 00000000000..e5f79cd8649 --- /dev/null +++ b/tests/wpt/tests/workers/shared-worker-partitioned-cookies.tentative.https.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<head> +<meta charset="utf-8"/> +<meta name="timeout" content="long"> +<title>SharedWorker: Partitioned Cookies</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/test-helpers.sub.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="support/shared-worker-partitioned-cookies-helper.js"></script> +</head> + +<body> +<script> + +promise_test(async () => { + // Set a Partitioned cookie. + document.cookie = + '__Host-partitioned=123; Secure; Path=/; SameSite=None; Partitioned;'; + assert_true(document.cookie.includes('__Host-partitioned=123')); + + // Set an unpartitioned cookie. + document.cookie = 'unpartitioned=456; Secure; Path=/; SameSite=None;'; + assert_true(document.cookie.includes('unpartitioned=456')); + + const worker = new SharedWorker('support/shared-worker-echo-cookies.js'); + const nextMessage = workerMessageGenerator(worker); + + worker.port.postMessage({type: 'test_message'}); + const msg1 = await nextMessage(); + assert_true(msg1.ok, 'Message passing'); + + worker.port.postMessage({type: 'echo_cookies_http'}); + const msg2 = await nextMessage(); + assert_true(msg2.ok, 'Get cookies'); + assert_true( + msg2.cookies.includes('__Host-partitioned'), + 'Can access partitioned cookie via HTTP'); + assert_true( + msg2.cookies.includes('unpartitioned'), + 'Can access unpartitioned cookie via HTTP'); + + worker.port.postMessage({type: 'echo_cookies_import'}); + const msg3 = await nextMessage(); + assert_true(msg3.ok, 'Get cookies'); + assert_true(msg3.cookies.includes( + '__Host-partitioned'), + 'Can access partitioned cookie via importScripts'); + assert_true( + msg3.cookies.includes('unpartitioned'), + 'Can access unpartitioned cookie via importScripts'); + + const popup = window.open( + new URL( + `./support/shared-worker-partitioned-cookies-3p-window.html?origin=${ + encodeURIComponent(self.location.origin)}`, + get_host_info().HTTPS_NOTSAMESITE_ORIGIN + self.location.pathname)); + await fetch_tests_from_window(popup); +}); + +</script> +</body> diff --git a/tests/wpt/tests/workers/support/shared-worker-echo-cookies.js b/tests/wpt/tests/workers/support/shared-worker-echo-cookies.js new file mode 100644 index 00000000000..34dcbc9d260 --- /dev/null +++ b/tests/wpt/tests/workers/support/shared-worker-echo-cookies.js @@ -0,0 +1,40 @@ +let port; + +self.onconnect = e => { + port = e.ports[0]; + port.addEventListener('message', onMessage); + port.start(); +}; + +async function onMessage(e) { + switch (e.data.type) { + case 'test_message': + port.postMessage({ok: true}); + return; + case 'echo_cookies_http': + return onEchoCookiesHttp(e); + case 'echo_cookies_import': + return onEchoCookiesImport(); + default: + throw new Error('Unexpected message type ' + e.data.type); + } +} + +async function onEchoCookiesHttp(e) { + try { + const resp = await fetch( + `${self.origin}/cookies/resources/list.py`, {credentials: 'include'}); + const cookies = await resp.json(); + port.postMessage({ok: true, cookies: Object.keys(cookies)}); + } catch (err) { + port.postMessage({ok: false}); + } +} + +// Sets `self._cookies` variable, array of the names of cookies available to +// the request. +importScripts(`${self.origin}/cookies/resources/list-cookies-for-script.py`); + +function onEchoCookiesImport() { + port.postMessage({ok: true, cookies: self._cookies}); +} diff --git a/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-3p-frame.html b/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-3p-frame.html new file mode 100644 index 00000000000..dc700d31f97 --- /dev/null +++ b/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-3p-frame.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<head> +<meta charset="utf-8"/> +<meta name="timeout" content="long"> +<title>Service Worker: Partitioned Cookies 3P Iframe</title> +<script src="/resources/testharness.js"></script> +<script src="shared-worker-partitioned-cookies-helper.js"></script> +</head> + +<body> +<script> + +promise_test(async () => { + assert_false( + document.cookie.includes('__Host-partitioned=123'), + 'DOM cannot access partitioned cookie'); + assert_true( + document.cookie.includes('unpartitioned=456'), + 'DOM can access unpartitioned cookie'); + + const worker = new SharedWorker('./shared-worker-echo-cookies.js'); + const nextMessage = workerMessageGenerator(worker); + + worker.port.postMessage({type: 'test_message'}); + const msg1 = await nextMessage(); + assert_true(msg1.ok, 'Message passing'); + + worker.port.postMessage({type: 'echo_cookies_http'}); + const msg2 = await nextMessage(); + assert_true(msg2.ok, 'Get cookies'); + assert_false( + msg2.cookies.includes('__Host-partitioned'), + 'Cannot access partitioned cookie via HTTP'); + assert_true( + msg2.cookies.includes('unpartitioned'), + 'Can access unpartitioned cookie via HTTP'); + + worker.port.postMessage({type: 'echo_cookies_import'}); + const msg3 = await nextMessage(); + assert_true(msg3.ok, 'Get cookies'); + assert_false( + msg3.cookies.includes('__Host-partitioned'), + 'Cannot access partitioned cookie via importScripts'); + assert_true( + msg3.cookies.includes('unpartitioned'), + 'Can access unpartitioned cookie via importScripts'); +}); + +</script> +</body> diff --git a/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-3p-window.html b/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-3p-window.html new file mode 100644 index 00000000000..e37e0a2cc6b --- /dev/null +++ b/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-3p-window.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<head> +<meta charset="utf-8"/> +<meta name="timeout" content="long"> +<title>SharedWorker: Partitioned Cookies 3P Window</title> +<script src="/resources/testharness.js"></script> +</head> + +<body> +<script> + +promise_test(async t => { + assert_true( + location.search.includes('origin='), 'First party origin passed'); + const first_party_origin = + new URLSearchParams(window.location.search).get('origin'); + const iframe = document.createElement('iframe'); + iframe.src = new URL( + './shared-worker-partitioned-cookies-3p-frame.html', + first_party_origin + location.pathname).href; + document.body.appendChild(iframe); + await fetch_tests_from_window(iframe.contentWindow); +}); + +</script> +</body> diff --git a/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-helper.js b/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-helper.js new file mode 100644 index 00000000000..3bcdc879e8e --- /dev/null +++ b/tests/wpt/tests/workers/support/shared-worker-partitioned-cookies-helper.js @@ -0,0 +1,28 @@ +// Return a generator containing the worker's message. +// +// Usage: +// const worker = new SharedWorker(...); +// const nextMessage = workerMessages(worker); +// const msg_1 = await nextMessage(); +// const msg_2 = await nextMessage(); +// const msg_3 = await nextMessage(); +function workerMessageGenerator(shared_worker) { + const buffer = []; + let resolve = null; + + shared_worker.port.onmessage = message => { + buffer.push(message.data); + if (resolve) { + resolve(); + } + } + shared_worker.port.start(); + + return async function() { + if (buffer.length != 0) { + return buffer.shift(); + } + await new Promise(r => resolve = r); + return buffer.shift(); + } +} diff --git a/tests/wpt/webgl/meta-legacy-layout/conformance2/state/gl-object-get-calls.html.ini b/tests/wpt/webgl/meta-legacy-layout/conformance2/state/gl-object-get-calls.html.ini index 6e0dee35b92..97a24e350d4 100644 --- a/tests/wpt/webgl/meta-legacy-layout/conformance2/state/gl-object-get-calls.html.ini +++ b/tests/wpt/webgl/meta-legacy-layout/conformance2/state/gl-object-get-calls.html.ini @@ -2,7 +2,6 @@ bug: https://github.com/servo/servo/issues/26128 expected: if os == "mac": CRASH - TIMEOUT [WebGL test #201: gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_R) should be 33071 (of type number). Was null (of type object).] expected: FAIL @@ -119,6 +118,3 @@ [WebGL test #202: gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_IMMUTABLE_FORMAT) should be false (of type boolean). Was 0 (of type number).] expected: FAIL - - [Overall test] - expected: NOTRUN |