diff options
108 files changed, 2610 insertions, 110 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini deleted file mode 100644 index f64b45fea6b..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-002.html] - [Hit test float] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini index 4bfb0c2053a..f29da48a2a0 100644 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini @@ -1,4 +1,4 @@ -[hit-test-floats-004.html] +[hit-test-floats-003.html] [Miss float below something else] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini new file mode 100644 index 00000000000..baa9f1a7541 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-005.html] + [Miss clipped float] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos-descendent-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos-descendent-001.html.ini new file mode 100644 index 00000000000..c7ab3aaec53 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/abspos-descendent-001.html.ini @@ -0,0 +1,4 @@ +[abspos-descendent-001.html] + [.flexbox 1] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini new file mode 100644 index 00000000000..3e8f11fced8 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini @@ -0,0 +1,2 @@ +[flex-minimum-height-flex-items-022.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini new file mode 100644 index 00000000000..adb4df5cbe5 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini @@ -0,0 +1,4 @@ +[orthogonal-writing-modes-and-intrinsic-sizing.html] + [.flexbox 2] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-size.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-size.html.ini new file mode 100644 index 00000000000..936f73befed --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/percentage-size.html.ini @@ -0,0 +1,4 @@ +[percentage-size.html] + [.flexbox 8] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/position-relative-percentage-top-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/position-relative-percentage-top-001.html.ini new file mode 100644 index 00000000000..ff13b3f9f52 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/position-relative-percentage-top-001.html.ini @@ -0,0 +1,4 @@ +[position-relative-percentage-top-001.html] + [.border 1] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini index c131078eace..23c61ede1a1 100644 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPosition.html.ini @@ -17,3 +17,6 @@ [test the top of layer] expected: FAIL + [test some point of the element: top left corner] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini new file mode 100644 index 00000000000..18c6eafbf16 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini @@ -0,0 +1,2 @@ +[effect-reference-displacement-negative-scale-001.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini new file mode 100644 index 00000000000..45615ee1b57 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini @@ -0,0 +1,2 @@ +[effect-reference-merge-no-inputs.tentative.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-obb-dimensions.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-obb-dimensions.html.ini new file mode 100644 index 00000000000..9937095d513 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-obb-dimensions.html.ini @@ -0,0 +1,2 @@ +[effect-reference-obb-dimensions.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-on-span.html.ini b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-on-span.html.ini new file mode 100644 index 00000000000..adc9e6b7598 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/filter-effects/effect-reference-on-span.html.ini @@ -0,0 +1,2 @@ +[effect-reference-on-span.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini index 8d26725e946..8bd785894f8 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini @@ -318,15 +318,18 @@ [<iframe>: combined response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] + [<iframe>: separate response Content-Type: text/html */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" text/plain] + [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*] + [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + expected: FAIL + + [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini index 5c001592859..8456d88e4f3 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini @@ -56,6 +56,9 @@ [separate text/javascript x/x] expected: FAIL - [separate text/javascript;charset=windows-1252 error text/javascript] + [separate text/javascript; charset=windows-1252 text/javascript] + expected: FAIL + + [separate text/javascript;charset=windows-1252 text/javascript] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini index dc2e45516de..75d75b4cda2 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_5.html] +[traverse_the_history_2.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 295031c1812..ab43ed7acf4 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,5 +1,5 @@ [iframe_sandbox_popups_escaping-3.html] - expected: TIMEOUT + expected: CRASH [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini index 7a36937927c..f4f994c5d6f 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini @@ -1,4 +1,5 @@ [iframe_sandbox_popups_nonescaping-3.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini new file mode 100644 index 00000000000..efa8f0e8d34 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini @@ -0,0 +1,7 @@ +[natural-size-orientation.html] + [naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none] + expected: FAIL + + [naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini new file mode 100644 index 00000000000..58d16f8fd0d --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini @@ -0,0 +1,70 @@ +[clicking-interactive-content.html] + [interactive content <details></details> as second child under <label>] + expected: FAIL + + [interactive content <input> as first child of <label>] + expected: FAIL + + [interactive content <select></select> as second child under <label>] + expected: FAIL + + [interactive content <iframe></iframe> as second child under <label>] + expected: FAIL + + [interactive content <select></select> as first child of <label>] + expected: FAIL + + [interactive content <video tabindex=""></video> as second child under <label>] + expected: FAIL + + [interactive content <a tabindex=""></a> as second child under <label>] + expected: FAIL + + [interactive content <object tabindex=""></object> as second child under <label>] + expected: FAIL + + [interactive content <input> deeply nested under <label>] + expected: FAIL + + [interactive content <embed> as second child under <label>] + expected: FAIL + + [interactive content <object usemap=""></object> as second child under <label>] + expected: FAIL + + [interactive content <select></select> deeply nested under <label>] + expected: FAIL + + [interactive content <textarea></textarea> as first child of <label>] + expected: FAIL + + [interactive content <img usemap=""> as second child under <label>] + expected: FAIL + + [interactive content <audio controls=""></audio> as second child under <label>] + expected: FAIL + + [interactive content <input type="hidden" tabindex=""> as second child under <label>] + expected: FAIL + + [interactive content <video controls=""></video> as second child under <label>] + expected: FAIL + + [interactive content <audio tabindex=""></audio> as second child under <label>] + expected: FAIL + + [interactive content <div tabindex=""></div> as second child under <label>] + expected: FAIL + + [interactive content <input> as second child under <label>] + expected: FAIL + + [interactive content <textarea></textarea> deeply nested under <label>] + expected: FAIL + + [interactive content <img tabindex=""> as second child under <label>] + expected: FAIL + + [interactive content <textarea></textarea> as second child under <label>] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini index 5d9272664ee..256a49c578d 100644 --- a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini +++ b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini @@ -59,3 +59,6 @@ [X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 42303 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 10361.\n\t[10361\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 7056.\n\t[7056\]\t5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n] expected: FAIL + [X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44063 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 36821.\n\t[36821\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini index 2540cf056cf..7cb62c82da3 100644 --- a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini +++ b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini @@ -95,3 +95,9 @@ [X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-2.4090957641601563e+0\t5.6332010030746460e-1\t2.9724158644676208e+0\t5.2766018163478501e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5659909161559839e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 2.9724158644676208e+0 at index of 31080.\n\tMax RelError of 5.2766018163478501e+0 at index of 31080.\n] expected: FAIL + [X SNR (45.01863889546189 dB) is not greater than or equal to 85.58. Got 45.01863889546189.] + expected: FAIL + + [X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-8.5582718212587339e-15\t5.6332010030746460e-1\t5.6332010030747315e-1\t1.0000000000000151e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5672520847738763e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000151e+0 at index of 31080.\n] + expected: FAIL + diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 5b2ccdfb94b..7376fa59b3c 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -127129,6 +127129,19 @@ {} ] ], + "contain-size-063.html": [ + "31a6015cac35faa04b8f77d4388e429e2266ffdd", + [ + null, + [ + [ + "/css/css-contain/reference/contain-size-063-ref.html", + "==" + ] + ], + {} + ] + ], "contain-size-baseline-001.html": [ "0ffed1b3b6a08831792b0a5ac40d1340c142c48d", [ @@ -133062,6 +133075,19 @@ {} ] ], + "flex-minimum-height-flex-items-022.html": [ + "943ac525fb570adcf62d7ff0edfc88cdd5727a85", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "flex-minimum-width-flex-items-001.xht": [ "cd18483ba414160c46e30bc282dec0c2fcd2f418", [ @@ -133583,7 +133609,7 @@ ] ], "flexbox-with-multi-column-property.html": [ - "5b11b0f9fd245a451e289229c4ed3e6e183dd40b", + "56b56ca0935bc8869a4b19e0d70e2cf7cdb0a0b8", [ null, [ @@ -157041,6 +157067,19 @@ ] }, "css-pseudo": { + "active-selection-063.html": [ + "1d9a1c1ecd81008d4d3d5891b717d6bdadb3efe9", + [ + null, + [ + [ + "/css/css-pseudo/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "before-dynamic-display-none.html": [ "d8844f9c961e94b2fd353628cb2c6e3e12123054", [ @@ -202900,7 +202939,7 @@ ] ], "background-image-blur-repaint.html": [ - "7b3df263081ecceb6517e056e60cfaa35b9981a0", + "4a3c00c7ad334a67312346ce57aa81ac96d024d2", [ null, [ @@ -203263,6 +203302,32 @@ {} ] ], + "effect-reference-delete.html": [ + "314c9a7d123bd65b04483956513337116f7e0382", + [ + null, + [ + [ + "/css/filter-effects/reference/effect-reference-delete-ref.html", + "==" + ] + ], + {} + ] + ], + "effect-reference-displacement-negative-scale-001.html": [ + "282ea100508948125f3a834af9dd37e0be210a10", + [ + null, + [ + [ + "/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html", + "==" + ] + ], + {} + ] + ], "effect-reference-lighting-no-light.tentative.html": [ "beefd47a544d5c82b4b1d468ce99938e6d9924d9", [ @@ -203276,6 +203341,71 @@ {} ] ], + "effect-reference-merge-no-inputs.tentative.html": [ + "4fb67db643dd5aebdbff53a0773035747c18836c", + [ + null, + [ + [ + "/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html", + "==" + ] + ], + {} + ] + ], + "effect-reference-obb-dimensions.html": [ + "2bb424d90cd6b03145c481eb8be6b96c9d52d715", + [ + null, + [ + [ + "/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html", + "==" + ] + ], + {} + ] + ], + "effect-reference-on-span.html": [ + "66bd8fa886a86e5f5738d8373e2611c39cc1c8e3", + [ + null, + [ + [ + "/css/filter-effects/reference/effect-reference-on-span-ref.html", + "==" + ] + ], + {} + ] + ], + "effect-reference-rename-001.html": [ + "6c8374536f4cf748784b7a58fc158d230ea3557f", + [ + null, + [ + [ + "/css/filter-effects/reference/effect-reference-rename-001-ref.html", + "==" + ] + ], + {} + ] + ], + "effect-reference-rename-002.html": [ + "86528819bc7a0459a3d9c506284fc7d614049a00", + [ + null, + [ + [ + "/css/filter-effects/reference/effect-reference-rename-002-ref.html", + "==" + ] + ], + {} + ] + ], "empty-element-with-filter.html": [ "3e8fc7e164cde54a8ff81a241909c2f729f32afb", [ @@ -203510,6 +203640,32 @@ {} ] ], + "filter-region-negative-positioned-child-001.html": [ + "8f302ab52abe2f1008ca60d46fbc77d8ce35c22a", + [ + null, + [ + [ + "/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html", + "==" + ] + ], + {} + ] + ], + "filter-region-transformed-child-001.html": [ + "cd097faf706a1d15f4ce5616f7e67fbf234dc50c", + [ + null, + [ + [ + "/css/filter-effects/reference/filter-region-transformed-child-001-ref.html", + "==" + ] + ], + {} + ] + ], "filter-saturate-001-test.html": [ "52182deb3fed8985bc810dd1e5af95e3095979ae", [ @@ -203757,6 +203913,32 @@ {} ] ], + "reference-filter-update-on-attribute-change-001.html": [ + "cc5ac7c65d720804953df11f2b2cab268e383610", + [ + null, + [ + [ + "/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html", + "==" + ] + ], + {} + ] + ], + "root-element-with-opacity-filter-001.html": [ + "577e2bd4c032799a159c1c7542812e66081bfcea", + [ + null, + [ + [ + "/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html", + "==" + ] + ], + {} + ] + ], "svg-feflood-001.html": [ "4588cf93f6ca52386ce8af1dbe6e0462572bb559", [ @@ -203796,13 +203978,26 @@ {} ] ], - "svg-relative-urls-0001.html": [ - "3edf7447b8f7fa0cf55f87a6ba051797bdd6f914", + "svg-relative-urls-001.html": [ + "5dd382c6dfd2271449627e956f7723e810662cee", + [ + null, + [ + [ + "/css/filter-effects/reference/svg-relative-urls-001-ref.html", + "==" + ] + ], + {} + ] + ], + "svg-relative-urls-002.html": [ + "278ea1645437f7afa797091b2562b9ad3430e458", [ null, [ [ - "/css/filter-effects/reference/svg-relative-urls-0001-ref.html", + "/css/filter-effects/reference/svg-relative-urls-002-ref.html", "==" ] ], @@ -242786,6 +242981,10 @@ "6805c323df5a975231648b830e33ce183c3cbbd3", [] ], + "rendering-utils.js": [ + "46283bd5d078a14922e24160053017b6e8cb072c", + [] + ], "sab.js": [ "c7fd1a742e64f66744b416584952effe29fda208", [] @@ -261285,6 +261484,18 @@ [] ] }, + "content-index": { + "resources": { + "sw.js": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + [] + ] + }, + "resources.js": [ + "1a758abe27e0b31dd22d2b8c04a7943271dea95c", + [] + ] + }, "content-security-policy": { "META.yml": [ "ee8f1ea7e07b94711ddc65e43a6c32dbc5983612", @@ -284314,6 +284525,10 @@ "dbfa77f6ac0dfdc03d2f8a8b0407a704617c73a7", [] ], + "contain-size-063-ref.html": [ + "9544ebcac23af0c2caaa279154878c10349990ae", + [] + ], "contain-size-breaks-001-ref.html": [ "b807ea5a1160a4d29e46b91ca283c45b3c2fdeb5", [] @@ -296875,6 +297090,12 @@ "92ae71d83fcbea52e4120ed28af5438dd54d4509", [] ], + "reference": { + "ref-filled-green-100px-square.xht": [ + "05a13794482a94f6c10bd9d4c98704e63ef60331", + [] + ] + }, "selection-text-shadow-016-ref.html": [ "5e3eabc976e2bc75b6a290f2b740b54d8cdbf99a", [] @@ -307460,14 +307681,50 @@ "45192b13451fdfe2f00c17dbc84d30a770426e86", [] ], + "effect-reference-delete-ref.html": [ + "918715265fa4c1b95ec46d04014ea82e73cbcd40", + [] + ], + "effect-reference-displacement-negative-scale-001-ref.html": [ + "f718ea6abfbab54333ba674ff0dcd320d8672bcd", + [] + ], "effect-reference-lighting-no-light.tentative-ref.html": [ "e863a6703b2acebbdb10a5eef342cbbd1b6b5bc9", [] ], + "effect-reference-merge-no-inputs.tentative-ref.html": [ + "5743e0c3de96ba4fbdf814bf5ec997e0c93e65da", + [] + ], + "effect-reference-obb-dimensions-ref.html": [ + "f460c439aa8d6e56a8ad5a0826d6e0c0daf5df11", + [] + ], + "effect-reference-on-span-ref.html": [ + "76a7953831720fbe9556afdc4800879c5cdd2634", + [] + ], + "effect-reference-rename-001-ref.html": [ + "fe3beae2d4997a7603153c5c885f01c7ca656bcd", + [] + ], + "effect-reference-rename-002-ref.html": [ + "d8719aa43a43ebbfebe6caa43b961eeee10b99c5", + [] + ], "empty-element-with-filter-ref.html": [ "cf2c997f6c0d60cac9896c0b0014189cea7790bc", [] ], + "filter-region-negative-positioned-child-001-ref.html": [ + "c9da47b1b434303f0111e8d1f03d5518e8f573fc", + [] + ], + "filter-region-transformed-child-001-ref.html": [ + "bcf649411930d5cc839dca2a5098e12c0c49fda8", + [] + ], "filter-url-to-non-existent-filter-001-ref.html": [ "c1aeed8c441e6f72c6faa893d64ae30bdacbec06", [] @@ -307496,6 +307753,14 @@ "01546f115d112aa27495b3fd45347b22e30fe7ee", [] ], + "reference-filter-update-on-attribute-change-001-ref.html": [ + "91326ef585e6910cd499ad2d6650f18fca486921", + [] + ], + "root-element-with-opacity-filter-001-ref.html": [ + "cd16e54c8e5b73b02585c606d0133bb36c821b31", + [] + ], "svg-feflood-ref.html": [ "5623b08ecd71b292e698ee249a79b59d0046300f", [] @@ -307508,9 +307773,13 @@ "5623b08ecd71b292e698ee249a79b59d0046300f", [] ], - "svg-relative-urls-0001-ref.html": [ + "svg-relative-urls-001-ref.html": [ "82f301f5f6ff95f743f2488093fe63ac766a84bf", [] + ], + "svg-relative-urls-002-ref.html": [ + "344ee53e032e1bd588e971e16af2af5d0a6bcf41", + [] ] }, "support": { @@ -307582,6 +307851,10 @@ "0d5fc65c6fdfe2b4f507326fb379e468dbe85d46", [] ], + "filter-from-external-url.css": [ + "2940461016cad90f9218db1c7355434d9ca54e1c", + [] + ], "filtersubregion00.png": [ "b6c4bccb63cd850f473a59d9e3c0cf26c699db13", [] @@ -327090,6 +327363,10 @@ "e96e6471e6a8df81c462c47be588ffbbcac5ecfb", [] ], + "arrow-oriented-upright.jpg": [ + "cebc99af14b6050a416031cf219f8cd7a72ee458", + [] + ], "background.png": [ "6db6c6b1b9d851c7a85b93ddc9e5ddf368ac0a7e", [] @@ -328027,7 +328304,7 @@ [] ], "css-typed-om.idl": [ - "df9669e5637f18de89792facba8fabe234d658f8", + "00d3f49bfe653ce4782e13e6c0d46c65783874cc", [] ], "cssom-view.idl": [ @@ -328251,7 +328528,7 @@ [] ], "permissions.idl": [ - "9cde372a127188ef1081ad390d5301d2d8b198f8", + "d45c7f93cac7683a76e89d0e7f429f5f3cb695d9", [] ], "picture-in-picture.idl": [ @@ -328479,7 +328756,7 @@ [] ], "worklets.idl": [ - "16187664b3b4124758c84d054b02b8ddbf585508", + "f89eacd50bd58c02860c84b6e4c486ab978a5018", [] ], "xhr.idl": [ @@ -338033,7 +338310,7 @@ [] ], "safari-technology-preview.rb": [ - "5f8d6806107d8abd7418ae022e59a1af9da1632f", + "d58664c5b6c67e32c63f1d122625a56211371511", [] ], "system_info.yml": [ @@ -338513,7 +338790,7 @@ [] ], "test_manifest.py": [ - "6f11eb5974060c91c7ce849de2e54b6b30e78926", + "6d329ad38f969106c28e73de81dcbf1c468f9adf", [] ], "test_sourcefile.py": [ @@ -343644,7 +343921,7 @@ [] ], "safari.py": [ - "dba8432b5a75faf402cf74042b7a59c4b66f814a", + "cb2b175d4dfbc3166e4ad5a6afe174ffdbc6ff8a", [] ], "sauce.py": [ @@ -343910,7 +344187,7 @@ [] ], "test_formatters.py": [ - "72f3a591ad7f90532671ccb897dfcb161bc8f45d", + "60b1b0a5a878cda9c500eaae25f3fe89eadf819c", [] ], "test_manifestexpected.py": [ @@ -343922,7 +344199,7 @@ [] ], "test_stability.py": [ - "77cb23a71e13a6889d21d1ff47aa3dacf08a7425", + "9a8fccf935a136c6050e852f9a5704138b0d3f41", [] ], "test_testloader.py": [ @@ -344433,6 +344710,14 @@ ] } }, + "trust-tokens": { + "end-to-end": { + "README.txt": [ + "a86468df9d6b21dfc361d178eb3afc4b3c865fea", + [] + ] + } + }, "trusted-types": { "META.yml": [ "d0743949b6a122d8bd0adf7b1ed0181f0c51429d", @@ -373348,6 +373633,26 @@ ] ] }, + "content-index": { + "content-index.https.window.js": [ + "082ebc3b9ec599da21351d4be1f21a79810ec65d", + [ + "content-index/content-index.https.window.html", + { + "script_metadata": [ + [ + "script", + "/service-workers/service-worker/resources/test-helpers.sub.js" + ], + [ + "script", + "resources.js" + ] + ] + } + ] + ] + }, "content-security-policy": { "base-uri": { "base-uri-allow.sub.html": [ @@ -377254,7 +377559,7 @@ ] ], "cookieStore_get_arguments.tentative.https.any.js": [ - "79fc0d37488ef6dfed1f0bc210e2116111acc776", + "34f7dbcd948fd5e590b0e9f715ad878f4de9694d", [ "cookie-store/cookieStore_get_arguments.tentative.https.any.html", { @@ -377406,6 +377711,13 @@ {} ] ], + "cookieStore_opaque_origin.tentative.https.html": [ + "bbf0dbd9864c574fadbd2b464618766ff1919a19", + [ + null, + {} + ] + ], "cookieStore_set_arguments.tentative.https.any.js": [ "b9074c827d2a1ffa9b3ee1a0a28714396c4ae0d8", [ @@ -382064,6 +382376,13 @@ ] }, "css-flexbox": { + "abspos-descendent-001.html": [ + "1aebb0f319f566db19070e7bad66e622a4ab8d3f", + [ + null, + {} + ] + ], "align-content-wrap-001.html": [ "1e0ce42c75f462aea952113582e743bf8bda4dd8", [ @@ -382964,6 +383283,13 @@ {} ] ], + "orthogonal-writing-modes-and-intrinsic-sizing.html": [ + "032cd47df5d6ae928bf766aad248ccf120bd033a", + [ + null, + {} + ] + ], "overflow-auto-002.html": [ "2bb04a2604076d0883c1322e60015316f6f34b10", [ @@ -383246,6 +383572,13 @@ {} ] ], + "percentage-size.html": [ + "44c298672f2e39716d21d36220b270f0387aac2f", + [ + null, + {} + ] + ], "position-absolute-001.html": [ "f60174084652a3373c6b1873e02da373575c53cd", [ @@ -383274,6 +383607,13 @@ {} ] ], + "position-relative-percentage-top-001.html": [ + "3ec47c1d42d69330c616a87f0b22208f8d6196a6", + [ + null, + {} + ] + ], "quirks-auto-block-size-with-percentage-item.html": [ "966f39f173952f01268dcd26a9a5892bf4a689a9", [ @@ -404532,6 +404872,26 @@ } ] ], + "scrollend-event-fired-for-programmatic-scroll.html": [ + "79b5f5f0186871b7c139c551faf5cf1ef15f77b9", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], + "scrollend-event-fired-for-scrollIntoView.html": [ + "63e1c3e22eaafcb84b98f542778787b7ae397ca4", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], "scrollend-event-fired-to-document.html": [ "a35508e2c557a9280802ab3d0d937fce03628e44", [ @@ -436088,6 +436448,13 @@ {} ] ], + "natural-size-orientation.html": [ + "662dc0804fa32bff539467166fab134ce8ab22ff", + [ + null, + {} + ] + ], "non-active-document.html": [ "6072138cb387d98e3bc8ae86971e424fe7061194", [ @@ -437647,6 +438014,27 @@ ] }, "the-label-element": { + "clicking-interactive-content.html": [ + "60a80fad9d2aebf284e252949fba7b2bb15af134", + [ + null, + {} + ] + ], + "clicking-noninteractive-labelable-content.html": [ + "5563ef1e3c7472e8e831ee8d00c412dbcc0ef45a", + [ + null, + {} + ] + ], + "clicking-noninteractive-unlabelable-content.html": [ + "233168f5664cf972ad579ae4ccba7f674c965d25", + [ + null, + {} + ] + ], "forward-focus-to-associated-element.html": [ "86e3f652af0fb2b21d65d79da0c81a3e1daefdaa", [ @@ -482100,7 +482488,7 @@ ] ], "slots-imperative-slot-api.tentative.html": [ - "56dd71b1156cc3ac146a794e28e3b4b2bd58d143", + "6d3997b085c99b5163f1f1a747b792a5dbca9dea", [ null, {} @@ -491828,6 +492216,22 @@ ] }, "trust-tokens": { + "end-to-end": { + "has-trust-token-with-no-top-frame.tentative.https.html": [ + "4788cd9907331f07abc2374b4e4b48091877fc1c", + [ + null, + {} + ] + ], + "has-trust-token.tentative.https.html": [ + "17e037f739391c5adcab67fc54dd8d4f0cb7764f", + [ + null, + {} + ] + ] + }, "trust-token-parameter-validation-xhr.tentative.https.html": [ "4a6c30c6d32424c9b1d3dce883d3f44862c6e3b6", [ diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini deleted file mode 100644 index f64b45fea6b..00000000000 --- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-002.html] - [Hit test float] - expected: FAIL - diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini index 4bfb0c2053a..f29da48a2a0 100644 --- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini +++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini @@ -1,4 +1,4 @@ -[hit-test-floats-004.html] +[hit-test-floats-003.html] [Miss float below something else] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini new file mode 100644 index 00000000000..baa9f1a7541 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-005.html] + [Miss clipped float] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/abspos-descendent-001.html.ini b/tests/wpt/metadata/css/css-flexbox/abspos-descendent-001.html.ini new file mode 100644 index 00000000000..c7ab3aaec53 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/abspos-descendent-001.html.ini @@ -0,0 +1,4 @@ +[abspos-descendent-001.html] + [.flexbox 1] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini b/tests/wpt/metadata/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini new file mode 100644 index 00000000000..3e8f11fced8 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/flex-minimum-height-flex-items-022.html.ini @@ -0,0 +1,2 @@ +[flex-minimum-height-flex-items-022.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini b/tests/wpt/metadata/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini new file mode 100644 index 00000000000..adb4df5cbe5 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html.ini @@ -0,0 +1,4 @@ +[orthogonal-writing-modes-and-intrinsic-sizing.html] + [.flexbox 2] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/percentage-size.html.ini b/tests/wpt/metadata/css/css-flexbox/percentage-size.html.ini new file mode 100644 index 00000000000..936f73befed --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/percentage-size.html.ini @@ -0,0 +1,4 @@ +[percentage-size.html] + [.flexbox 8] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/position-relative-percentage-top-001.html.ini b/tests/wpt/metadata/css/css-flexbox/position-relative-percentage-top-001.html.ini new file mode 100644 index 00000000000..ff13b3f9f52 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/position-relative-percentage-top-001.html.ini @@ -0,0 +1,4 @@ +[position-relative-percentage-top-001.html] + [.border 1] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini index 85e94926cb3..5733d536fd3 100644 --- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini @@ -21,3 +21,6 @@ [test the top of layer] expected: FAIL + [test some point of the element: top left corner] + expected: FAIL + diff --git a/tests/wpt/metadata/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini b/tests/wpt/metadata/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini new file mode 100644 index 00000000000..18c6eafbf16 --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/effect-reference-displacement-negative-scale-001.html.ini @@ -0,0 +1,2 @@ +[effect-reference-displacement-negative-scale-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini b/tests/wpt/metadata/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini new file mode 100644 index 00000000000..45615ee1b57 --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/effect-reference-merge-no-inputs.tentative.html.ini @@ -0,0 +1,2 @@ +[effect-reference-merge-no-inputs.tentative.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/effect-reference-obb-dimensions.html.ini b/tests/wpt/metadata/css/filter-effects/effect-reference-obb-dimensions.html.ini new file mode 100644 index 00000000000..9937095d513 --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/effect-reference-obb-dimensions.html.ini @@ -0,0 +1,2 @@ +[effect-reference-obb-dimensions.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/effect-reference-on-span.html.ini b/tests/wpt/metadata/css/filter-effects/effect-reference-on-span.html.ini new file mode 100644 index 00000000000..adc9e6b7598 --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/effect-reference-on-span.html.ini @@ -0,0 +1,2 @@ +[effect-reference-on-span.html] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index 5e1fb1f51f7..f88cdea09d8 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -318,15 +318,18 @@ [<iframe>: combined response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] + [<iframe>: separate response Content-Type: text/html */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" text/plain] + [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*] + [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + expected: FAIL + + [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini index 5c001592859..8456d88e4f3 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -56,6 +56,9 @@ [separate text/javascript x/x] expected: FAIL - [separate text/javascript;charset=windows-1252 error text/javascript] + [separate text/javascript; charset=windows-1252 text/javascript] + expected: FAIL + + [separate text/javascript;charset=windows-1252 text/javascript] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini index dc2e45516de..75d75b4cda2 100644 --- a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_5.html] +[traverse_the_history_2.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 5f60c78e73c..b3bd9f4c289 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,6 +1,6 @@ [iframe_sandbox_popups_escaping-3.html] type: testharness - expected: TIMEOUT + expected: CRASH [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini index dc856a3d5a3..e440b1e38c6 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini @@ -1,5 +1,6 @@ [iframe_sandbox_popups_nonescaping-3.html] type: testharness + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini new file mode 100644 index 00000000000..efa8f0e8d34 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/natural-size-orientation.html.ini @@ -0,0 +1,7 @@ +[natural-size-orientation.html] + [naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none] + expected: FAIL + + [naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini b/tests/wpt/metadata/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini new file mode 100644 index 00000000000..58d16f8fd0d --- /dev/null +++ b/tests/wpt/metadata/html/semantics/forms/the-label-element/clicking-interactive-content.html.ini @@ -0,0 +1,70 @@ +[clicking-interactive-content.html] + [interactive content <details></details> as second child under <label>] + expected: FAIL + + [interactive content <input> as first child of <label>] + expected: FAIL + + [interactive content <select></select> as second child under <label>] + expected: FAIL + + [interactive content <iframe></iframe> as second child under <label>] + expected: FAIL + + [interactive content <select></select> as first child of <label>] + expected: FAIL + + [interactive content <video tabindex=""></video> as second child under <label>] + expected: FAIL + + [interactive content <a tabindex=""></a> as second child under <label>] + expected: FAIL + + [interactive content <object tabindex=""></object> as second child under <label>] + expected: FAIL + + [interactive content <input> deeply nested under <label>] + expected: FAIL + + [interactive content <embed> as second child under <label>] + expected: FAIL + + [interactive content <object usemap=""></object> as second child under <label>] + expected: FAIL + + [interactive content <select></select> deeply nested under <label>] + expected: FAIL + + [interactive content <textarea></textarea> as first child of <label>] + expected: FAIL + + [interactive content <img usemap=""> as second child under <label>] + expected: FAIL + + [interactive content <audio controls=""></audio> as second child under <label>] + expected: FAIL + + [interactive content <input type="hidden" tabindex=""> as second child under <label>] + expected: FAIL + + [interactive content <video controls=""></video> as second child under <label>] + expected: FAIL + + [interactive content <audio tabindex=""></audio> as second child under <label>] + expected: FAIL + + [interactive content <div tabindex=""></div> as second child under <label>] + expected: FAIL + + [interactive content <input> as second child under <label>] + expected: FAIL + + [interactive content <textarea></textarea> deeply nested under <label>] + expected: FAIL + + [interactive content <img tabindex=""> as second child under <label>] + expected: FAIL + + [interactive content <textarea></textarea> as second child under <label>] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini index 6e870f95c0c..192675d0844 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-multi-channels.html.ini @@ -128,3 +128,6 @@ [X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 42303 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 10361.\n\t[10361\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 7056.\n\t[7056\]\t5.8778524398803711e-1\t0.0000000000000000e+0\t5.8778524398803711e-1\tInfinity\t3.0517578125000000e-5\n] expected: FAIL + [X Rendered audio for channel 5 does not equal [0,0.0626220703125,0.125030517578125,0.18695068359375,0.24810791015625,0.308319091796875,0.3673095703125,0.42486572265625,0.480743408203125,0.53472900390625,0.58660888671875,0.636199951171875,0.68328857421875,0.727691650390625,0.76922607421875,0.8077392578125...\] with an element-wise tolerance of {"absoluteThreshold":0.000030517578125,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[1\]\t3.6732959747314453e-1\t6.2622070312500000e-2\t3.0470752716064453e-1\t4.8658168859649127e+0\t3.0517578125000000e-5\n\t[2\]\t6.8329977989196777e-1\t1.2503051757812500e-1\t5.5826926231384277e-1\t4.4650639949963384e+0\t3.0517578125000000e-5\n\t[3\]\t9.0373212099075317e-1\t1.8695068359375000e-1\t7.1678143739700317e-1\t3.8340669508039502e+0\t3.0517578125000000e-5\n\t[4\]\t9.9780619144439697e-1\t2.4810791015625000e-1\t7.4969828128814697e-1\t3.0216621502152523e+0\t3.0517578125000000e-5\n\t[5\]\t9.5236867666244507e-1\t3.0831909179687500e-1\t6.4404958486557007e-1\t2.0889059484187866e+0\t3.0517578125000000e-5\n\t...and 44063 more errors.\n\tMax AbsError of 1.9999977350234985e+0 at index of 36821.\n\t[36821\]\t9.9999773502349854e-1\t-1.0000000000000000e+0\t1.9999977350234985e+0\t1.9999977350234985e+0\t3.0517578125000000e-5\n\tMax RelError of Infinity at index of 12348.\n\t[12348\]\t9.5105654001235962e-1\t0.0000000000000000e+0\t9.5105654001235962e-1\tInfinity\t3.0517578125000000e-5\n] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini index 3f28908ad5f..06fdfd037df 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini @@ -326,3 +326,9 @@ [X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-2.4090957641601563e+0\t5.6332010030746460e-1\t2.9724158644676208e+0\t5.2766018163478501e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5659909161559839e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 2.9724158644676208e+0 at index of 31080.\n\tMax RelError of 5.2766018163478501e+0 at index of 31080.\n] expected: FAIL + [X SNR (45.01863889546189 dB) is not greater than or equal to 85.58. Got 45.01863889546189.] + expected: FAIL + + [X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[31080\]\t-8.5582718212587339e-15\t5.6332010030746460e-1\t5.6332010030747315e-1\t1.0000000000000151e+0\t9.0957000000000003e-5\n\t[31081\]\t4.5672520847738763e-41\t6.1397600173950195e-1\t6.1397600173950195e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 6.1397600173950195e-1 at index of 31081.\n\tMax RelError of 1.0000000000000151e+0 at index of 31080.\n] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/common/rendering-utils.js b/tests/wpt/web-platform-tests/common/rendering-utils.js new file mode 100644 index 00000000000..46283bd5d07 --- /dev/null +++ b/tests/wpt/web-platform-tests/common/rendering-utils.js @@ -0,0 +1,19 @@ +"use strict"; + +/** + * Waits until we have at least one frame rendered, regardless of the engine. + * + * @returns {Promise} + */ +function waitForAtLeastOneFrame() { + return new Promise(resolve => { + // Different web engines work slightly different on this area but waiting + // for two requestAnimationFrames() to happen, one after another, should be + // sufficient to ensure at least one frame has been generated anywhere. + window.requestAnimationFrame(() => { + window.requestAnimationFrame(() => { + resolve(); + }); + }); + }); +} diff --git a/tests/wpt/web-platform-tests/content-index/content-index.https.window.js b/tests/wpt/web-platform-tests/content-index/content-index.https.window.js new file mode 100644 index 00000000000..082ebc3b9ec --- /dev/null +++ b/tests/wpt/web-platform-tests/content-index/content-index.https.window.js @@ -0,0 +1,88 @@ +// META: script=/service-workers/service-worker/resources/test-helpers.sub.js +// META: script=resources.js +'use strict'; + +contentIndexTest(async (t, index) => { + // Exposure of the interface and method. + assert_own_property(window, 'ContentIndex'); + assert_own_property(ContentIndex.prototype, 'add'); + + assert_idl_attribute(index, 'add'); + assert_idl_attribute(index, 'delete'); + assert_idl_attribute(index, 'getAll'); + +}, 'The Content Index API is exposed'); + +contentIndexTest(async (t, index) => { + await expectTypeError( + index.add(createDescription({category: 'fake-category'}))); + + await expectTypeError( + index.add(createDescription({iconUrl: 'file://some-local-file.png'}))); + await expectTypeError(index.add(createDescription({iconUrl: '/non-existent-icon.png'}))); + await expectTypeError(index.add(createDescription({iconUrl: '/images/broken.png'}))); + + await expectTypeError(index.add(createDescription({launchUrl: 'https://other-domain.com/'}))); + await expectTypeError(index.add(createDescription({launchUrl: '/different-scope'}))); + + await index.add(createDescription({})); + +}, 'index.add parameters are validated.'); + +contentIndexTest(async (t, index) => { + const description = createDescription({}); + + // Initially there are no descriptions. + assert_array_equals(await index.getAll(), []); + + await index.add(description); + + const descriptions = await index.getAll(); + assert_equals(descriptions.length, 1); + + assert_object_equals(descriptions[0], description); + +}, 'index.getAll returns the same objects provided.'); + +contentIndexTest(async (t, index) => { + const description1 = createDescription({title: 'title1'}); + const description2 = createDescription({title: 'title2'}); + + await index.add(description1); + await index.add(description2); + + // There should be one description. + const descriptions = await index.getAll(); + assert_equals(descriptions.length, 1); + + assert_object_equals(descriptions[0], description2); + +}, 'index.add with same ID overwrites existing entry.'); + +contentIndexTest(async (t, index) => { + const description1 = createDescription({id: 'id1'}); + const description2 = createDescription({id: 'id2'}); + + await index.add(description1); + await index.add(description2); + + // There should be two descriptions. + assert_equals((await index.getAll()).length, 2); + + await index.delete('id1'); + + // There should be one description. + const descriptions = await index.getAll(); + assert_equals(descriptions.length, 1); + + assert_object_equals(descriptions[0], description2); + +}, 'index.delete removes entry.'); + +contentIndexTest(async (t, index) => { + const descriptions = await index.getAll(); + assert_equals(descriptions.length, 0); + + await index.delete('id'); + +}, 'index.delete works on invalid ID.'); diff --git a/tests/wpt/web-platform-tests/content-index/resources.js b/tests/wpt/web-platform-tests/content-index/resources.js new file mode 100644 index 00000000000..1a758abe27e --- /dev/null +++ b/tests/wpt/web-platform-tests/content-index/resources.js @@ -0,0 +1,40 @@ +'use strict'; + +const swUrl = 'resources/sw.js'; +const scope = 'resources/'; + +async function expectTypeError(promise) { + try { + await promise; + assert_unreached('Promise should have rejected'); + } catch (e) { + assert_equals(e.name, 'TypeError'); + } +} + +function createDescription({id = 'id', title = 'title', description = 'description', + category = 'homepage', iconUrl = '/images/green-256x256.png', + launchUrl = scope, includeIcons = true}) { + return {id, title, description, category, icons: includeIcons ? [{src: iconUrl}] : [], launchUrl}; +} + +// Creates a Promise test for |func| given the |description|. The |func| will be +// executed with the `index` object of an activated Service Worker Registration. +function contentIndexTest(func, description) { + promise_test(async t => { + const registration = await service_worker_unregister_and_register(t, swUrl, scope); + await wait_for_state(t, registration.installing, 'activated'); + return func(t, registration.index); + }, description); +} + +async function waitForMessageFromServiceWorker() { + return await new Promise(resolve => { + const listener = event => { + navigator.serviceWorker.removeEventListener('message', listener); + resolve(event.data); + }; + + navigator.serviceWorker.addEventListener('message', listener); + }); +} diff --git a/tests/wpt/web-platform-tests/content-index/resources/sw.js b/tests/wpt/web-platform-tests/content-index/resources/sw.js new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/wpt/web-platform-tests/content-index/resources/sw.js diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js index 79fc0d37488..34f7dbcd948 100644 --- a/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.https.any.js @@ -139,11 +139,6 @@ promise_test(async testCase => { }, 'cookieStore.get with relative url in options'); promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - testCase.add_cleanup(async () => { - await cookieStore.delete('cookie-name'); - }); - const invalid_url = `${self.location.protocol}//${self.location.host}/different/path`; await promise_rejects_js(testCase, TypeError, cookieStore.get( @@ -151,11 +146,6 @@ promise_test(async testCase => { }, 'cookieStore.get with invalid url path in options'); promise_test(async testCase => { - await cookieStore.set('cookie-name', 'cookie-value'); - testCase.add_cleanup(async () => { - await cookieStore.delete('cookie-name'); - }); - const invalid_url = `${self.location.protocol}//www.example.com${self.location.pathname}`; await promise_rejects_js(testCase, TypeError, cookieStore.get( diff --git a/tests/wpt/web-platform-tests/cookie-store/cookieStore_opaque_origin.tentative.https.html b/tests/wpt/web-platform-tests/cookie-store/cookieStore_opaque_origin.tentative.https.html new file mode 100644 index 00000000000..bbf0dbd9864 --- /dev/null +++ b/tests/wpt/web-platform-tests/cookie-store/cookieStore_opaque_origin.tentative.https.html @@ -0,0 +1,73 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Cookie Store API: Opaque origins for cookieStore</title> +<link rel=help href="https://wicg.github.io/cookie-store/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + +const apiCalls = { + 'get': 'cookieStore.get()', + 'getAll': 'cookieStore.getAll()', + 'set': 'cookieStore.set("cookie-name", "cookie-value")', + 'delete': 'cookieStore.delete("cookie-name")' +}; + +const script = ` +<script> + "use strict"; + window.onmessage = async () => { + try { + await %s; + window.parent.postMessage({result: "no exception"}, "*"); + } catch (ex) { + window.parent.postMessage({result: ex.name}, "*"); + }; + }; +<\/script> +`; + +function load_iframe(apiCall, sandbox) { + return new Promise(resolve => { + const iframe = document.createElement('iframe'); + iframe.onload = () => { resolve(iframe); }; + if (sandbox) + iframe.sandbox = sandbox; + iframe.srcdoc = script.replace("%s", apiCalls[apiCall]); + iframe.style.display = 'none'; + document.documentElement.appendChild(iframe); + }); +} + +function wait_for_message(iframe) { + return new Promise(resolve => { + self.addEventListener('message', function listener(e) { + if (e.source === iframe.contentWindow) { + resolve(e.data); + self.removeEventListener('message', listener); + } + }); + }); +} + +promise_test(async t => { + for (apiCall in apiCalls) { + const iframe = await load_iframe(apiCall); + iframe.contentWindow.postMessage({}, '*'); + const message = await wait_for_message(iframe); + assert_equals(message.result, 'no exception', + 'cookieStore ${apiCall} should not throw'); + } +}, 'cookieStore in non-sandboxed iframe should not throw'); + +promise_test(async t => { + for (apiCall in apiCalls) { + const iframe = await load_iframe(apiCall, 'allow-scripts'); + iframe.contentWindow.postMessage({}, '*'); + const message = await wait_for_message(iframe); + assert_equals(message.result, 'SecurityError', + 'cookieStore ${apiCall} should throw SecurityError'); + } +}, 'cookieStore in sandboxed iframe should throw SecurityError'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-063.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-063.html new file mode 100644 index 00000000000..31a6015cac3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-063.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>CSS Containment Test: 'contain: size' affects intrinsic size</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel="help" href="https://www.w3.org/TR/css-contain-1/#containment-size"> +<link rel="match" href="reference/contain-size-063-ref.html"> +<meta name="flags" content=""> +<meta name="asserts" content="the intrinsic size of a size-contained element is treated as 0 in various scenarios involving intrinsic sizing."> + +<style> +.red { + background: red; +} +.abs { + position: absolute; +} +.float { + float: left; +} +.zero { + width: 0; +} +.contained { + contain: size; + color: transparent; +} +.grid { + display: grid; + grid: max-content auto / min-content auto; +} +table { + border-collapse: collapse; +} +td { + padding: 0; +} +</style> + +<p>Test passes if there is no red below. + +<!-- max content sized--> +<div class="red abs"><div class="contained">Arbitrary content content<br>that takes up size.<br>Block Layout</div></div> + +<!-- max content sized--> +<div class="red float"><div class="contained">Arbitrary content content<br>that takes up size.<br>Float</div></div> + +<!-- min content sized--> +<div class=zero><div class="red float"><div class="contained">Arbitrary content content<br>that takes up size.<br>Float in narrow wrapper</div></div></div> + +<div class="grid red"> + <div class="red"></div> + <div class="contained">Arbitrary content content<br>that takes up size.<br>Grid item giving the first row it's height</div> + <div class="contained">Arbitrary content content<br>that takes up size.<br>Grid item giving the first column its width</div> +</div> + +<table class=red> + <tr> + <td class=red> + <td><div class="contained">Arbitrary content content<br>that takes up size.<br>content of a table cell giving the fist row it's height</div> + <tr> + <td><div class="contained">Arbitrary content content<br>that takes up size.<br>content of a table cell giving the first column it's width</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-063-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-063-ref.html new file mode 100644 index 00000000000..9544ebcac23 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-063-ref.html @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>Test reference</title> +<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> + +<p>Test passes if there is no red below. diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/abspos-descendent-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/abspos-descendent-001.html new file mode 100644 index 00000000000..1aebb0f319f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/abspos-descendent-001.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<title>CSS Flexbox: removing abspos descendents</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-containers"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items"> +<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=167566"> +<meta name="assert" content="This test ensures that flex item's padding doesn't disappear when an abspos descendent is removed."> +<link href="support/flexbox.css" rel="stylesheet"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<script> +window.onload = function() { + document.body.offsetHeight; + + document.getElementById('to-hide').style.display = "none"; + checkLayout(".flexbox"); +}; +</script> +</head> +<body> +<div id=log></div> +<div class="flexbox" style="height: 100px;" data-expected-height="100"> + <div style="width: 100%; overflow: auto; padding-bottom: 100px; background-color: red;" data-expected-height="100"> + <div style="position: relative; height: 100px; background-color: green;" data-expected-height="100"> + <div id="to-hide" style="position: absolute;" data-expected-height="0"></div> + </div> + </div> +</div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-022.html b/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-022.html new file mode 100644 index 00000000000..943ac525fb5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/flex-minimum-height-flex-items-022.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<title>Minimum height of a replaced element with borders</title> +<link rel="author" title="Google LLC" href="https://www.google.com/" /> +<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#min-size-auto" title="4.5. Implied Minimum Size of Flex Items" /> +<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 style="height: 100px; overflow: hidden;"> + <div style="display: flex; flex-direction: column; height: 0; width: 100px;"> + <img src="support/1x1-green.png" style="border-bottom: 99px solid green;"> + <div style="background-color: red; min-height: 100px;"></div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html b/tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html index 5b11b0f9fd2..56b56ca0935 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/flexbox-with-multi-column-property.html @@ -10,6 +10,7 @@ column-count: 2; column-gap: 100px; width: 20em; + font-kerning: none; } </style> <div class="flexbox"> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html b/tests/wpt/web-platform-tests/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html new file mode 100644 index 00000000000..032cd47df5d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/orthogonal-writing-modes-and-intrinsic-sizing.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> +<title>CSS Flexbox: main size on orthogonal flex item.</title> +<link rel="stylesheet" href="support/flexbox.css" > +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-base-size"> +<link rel="issue" href="https://codereview.chromium.org/1052363002"> +<meta name="assert" content="This test ensure the correct main sizes are used when flex item is orthogonal to the flex container."/> +<style> +.flexbox { + background-color: gray; +} + +.vertical { + writing-mode: vertical-lr; + width: min-content; + background-color: blue; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('.flexbox')"> +<div id=log></div> + +<div class="flexbox" data-expected-height="20"> + <div class="vertical" data-expected-width="50" data-expected-height="20"> + <div style="width: 50px; height: 20px; background-color: blue;" data-expected-width="50" data-expected-height="20"></div> + </div> +</div> + +<div class="flexbox column" data-expected-height="20"> + <div class="vertical" data-expected-width="50" data-expected-height="20"> + <div style="width: 50px; height: 20px; background-color: blue;" data-expected-width="50" data-expected-height="20"></div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/percentage-size.html b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-size.html new file mode 100644 index 00000000000..44c298672f2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/percentage-size.html @@ -0,0 +1,108 @@ +<!DOCTYPE html> +<title>CSS Flexbox: Percentage size in flexbox children</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-containers"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-3/#percentage-sizing"> +<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=81809"> +<meta name="assert" content="This test checks that percentage height/width values are correctly resolved in flexbox children."> +<style> +.flexbox { + display: flex; +} +.column, .column .fixed { + height: 50px; +} +.row, .row .fixed { + width: 50px; +} +.container > div { + outline: 2px solid blue; +} +.row > div > div { + height: 20px; +} +.flexbox > div { + flex: 0 0 auto; +} +.column > .flexbox { + flex-direction: column; +} +.container > div > :nth-child(1) { + background-color: orange; +} +.container > div > :nth-child(2) { + background-color: yellow; +} +.container > div > :nth-child(3) { + background-color: salmon; +} +.container > div > :nth-child(4) { + background-color: purple; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.flexbox')"> +<div id=log></div> + +<div class="container row"> + <div class="flexbox"> + <div style='width: 10px; min-width: 50%;' data-expected-width=25></div> + <div style='width: 50%;' data-expected-width=25></div> + <div style='width: 10px; max-width: 50%;' data-expected-width=10></div> + <div style='min-width: 10px; width: 100px; max-width: 50%;' data-expected-width=25></div> + </div> +</div> + +<div class="container row" style='width: 100px'> + <div class="flexbox fixed"> + <div style='width: 10px; min-width: 50%;' data-expected-width=25></div> + <div style='width: 50%;' data-expected-width=25></div> + <div style='width: 10px; max-width: 50%;' data-expected-width=10></div> + <div style='min-width: 10px; width: 100px; max-width: 50%;' data-expected-width=25></div> + </div> +</div> + +<div class="container column" style='margin-bottom: 100px'> + <div class="flexbox" style="height: auto"> + <div style='height: 10px; min-height: 50%;' data-expected-height=10></div> + <div style='height: 50%;' data-expected-height=0></div> + <div style='height: 10px; max-height: 50%;' data-expected-height=10></div> + <div style='min-height: 10px; height: 100px; max-height: 50%;' data-expected-height=100></div> + </div> +</div> + +<div class="container column"> + <div class="flexbox fixed"> + <div style='height: 10px; min-height: 50%;' data-expected-height=25></div> + <div style='height: 50%;' data-expected-height=25></div> + <div style='height: 10px; max-height: 50%;' data-expected-height=10></div> + <div style='min-height: 10px; height: 100px; max-height: 50%;' data-expected-height=25></div> + </div> +</div> + +<div class="container row"> + <div class="flexbox"> + <div style="flex: 0 0 50%" data-expected-width=25></div> + </div> +</div> + +<div class="container column"> + <div class="flexbox"> + <div style="flex: 0 0 50%" data-expected-height=0></div> + </div> +</div> + +<div class="container row"> + <div class="flexbox fixed"> + <div style="flex: 0 0 50%" data-expected-width=25></div> + </div> +</div> + +<div class="container column"> + <div class="flexbox fixed"> + <div style="flex: 0 0 50%" data-expected-height=25></div> + </div> +</div> + +</body> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/position-relative-percentage-top-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/position-relative-percentage-top-001.html new file mode 100644 index 00000000000..3ec47c1d42d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/position-relative-percentage-top-001.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<title>CSS Flexbox: Relative position with a percentage top</title> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#valdef-align-items-stretch"> +<meta name="assert" content="This test ensures that a flexbox with 'flex-flow: row wrap' properly centers a grandchild with 'position: relative' and 'top: 50%'."> +<style> +html, body { + margin: 0; +} + +.border { + border:1px solid #000; +} +.width-50 { + width: 50%; +} +.flex { + display: flex; + flex-flow: row wrap; +} +.tall { + height: 300px; +} +.top-50 { + position: relative; + top: 50%; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.border')"> +<div class="border"> + <div class="flex"> + <div class="width-50"> + <label class="top-50" data-offset-y="151">This should be in the center of the container</label> + </div> + <div class="width-50"> + <div class="tall"> + This is tall + </div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/active-selection-063.html b/tests/wpt/web-platform-tests/css/css-pseudo/active-selection-063.html new file mode 100644 index 00000000000..1d9a1c1ecd8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/active-selection-063.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Pseudo-Elements Test: active selection and consecutive preserved &Tab;</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-pseudo-4/#highlight-selectors"> + <link rel="help" href="https://www.w3.org/TR/css-text-3/#tab-size-property"> + <link rel="match" href="reference/ref-filled-green-100px-square.xht"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + + <meta content="" name="flags"> + <meta name="assert" content="In this test, tab characters are preserved and converted into 4 consecutive blank spaces. The background of such blank spaces can be painted. The lines are broken after each tab character since 'white-space: pre' preserves line breaks."> + + <style> + div + { + background-color: red; + color: red; + float: left; /* or display: inline-block or position: absolute or width: 4em */ + font-family: Ahem; + font-size: 25px; + line-height: 1; + /* -moz-tab-size: 4; */ + /* + Implement 'tab-size' (dropping the -moz- prefix) + https://bugzilla.mozilla.org/show_bug.cgi?id=737785 + */ + tab-size: 4; + white-space: pre; + } + + div::selection + { + background-color: green; + } + </style> + + <script> + function startTest() + { + var targetRange = document.createRange(); + /* We first create an empty range */ + targetRange.selectNodeContents(document.getElementById("test")); + /* Then we set the range boundaries to the children of div#test */ + window.getSelection().addRange(targetRange); + /* Finally, we now select such range of content */ + } + </script> + + <body onload="startTest();"> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div id="test">	 +	 +	 +	</div> diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/reference/ref-filled-green-100px-square.xht b/tests/wpt/web-platform-tests/css/css-pseudo/reference/ref-filled-green-100px-square.xht new file mode 100644 index 00000000000..05a13794482 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/reference/ref-filled-green-100px-square.xht @@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Reftest Reference</title> + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> + <style type="text/css"><![CDATA[ + div + { + background-color: green; + height: 100px; + width: 100px; + } + ]]></style> + </head> + <body> + <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + <div></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html b/tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html index 7b3df263081..4a3c00c7ad3 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/background-image-blur-repaint.html @@ -10,6 +10,7 @@ <meta name="assert" content="An element with background-image and a filter should be rendered correctly after other elements on the page change size. You should see a 50x50 green box over a blurred background."/> <script src="/common/reftest-wait.js"></script> +<script src="/common/rendering-utils.js"></script> <script> function runTest() { function shrinkBox() { @@ -18,13 +19,9 @@ function runTest() { box.style.height = "50px"; } - // Wait for two requestAnimationFrame() calls to make sure that at least one - // frame has been rendered before shrinking the box and taking the screenshot. - requestAnimationFrame(function() { - requestAnimationFrame(function() { - shrinkBox(); - takeScreenshot(); - }); + waitForAtLeastOneFrame().then(function() { + shrinkBox(); + takeScreenshot(); }); } </script> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-delete.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-delete.html new file mode 100644 index 00000000000..314c9a7d123 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-delete.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>CSS Filters: reference to deleted SVG filter</title> +<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty"> +<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=90405"> +<link rel="match" href="reference/effect-reference-delete-ref.html"> +<meta name="assert" content="Check that a CSS filter no longer affects its target element after having deleted the SVG element referenced from the CSS filter."/> + +<script src="/common/reftest-wait.js"></script> +<script src="/common/rendering-utils.js"></script> + +<svg width="0" height="0"> + <defs> + <filter id="MyFilter"> + <feColorMatrix type="hueRotate" values="180"/> + </filter> + </defs> +</svg> +<img style="filter: url(#MyFilter);" src="support/color-palette.png"> +<script> +waitForAtLeastOneFrame().then(function() { + document.querySelector('svg').remove(); + takeScreenshot(); +}); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-displacement-negative-scale-001.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-displacement-negative-scale-001.html new file mode 100644 index 00000000000..282ea100508 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-displacement-negative-scale-001.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<title>SVG Filters: feDisplacementMap filter with negative scale</title> +<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#feDisplacementMapElement"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=641854"> +<link rel="match" href="reference/effect-reference-displacement-negative-scale-001-ref.html"> +<meta name="assert" content="feDisplacementMap with a negative scale applies the displacement in the opposite direction."> + +<div style="position: relative"> + <div style="position: absolute; top: 20px; left: 20px; width: 100px; height: 100px; background: green; filter: url(#displacementFilter);"></div> +</div> +<svg width="0" height="0"> + <filter id="displacementFilter" x="-0.2" y="-0.2" color-interpolation-filters="sRGB"> + <feFlood flood-color="black"/> + <feDisplacementMap in="SourceGraphic" scale="-40" xChannelSelector="R" yChannelSelector="R"/> + </filter> +</svg> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-merge-no-inputs.tentative.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-merge-no-inputs.tentative.html new file mode 100644 index 00000000000..4fb67db643d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-merge-no-inputs.tentative.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<title>CSS Filters: feMerge with no input feMergeNode</title> +<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feMergeElement"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feCompositeElement"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=533457"> +<link rel="match" href="reference/effect-reference-merge-no-inputs.tentative-ref.html"> +<meta name="assert" content="Check that the result of an feMerge with no feMergeNode children is transparent black."/> + +<style> +#target { + width: 100px; + height: 100px; + background-color: blue; + filter: url(#emptyMerge); +} +</style> +<div id="target"></div> +<svg height="0"> + <filter id="emptyMerge"> + <feColorMatrix values="0 0 0 0 0, 0 0 1 0 0, 0 0 0 0 0, 0 0 0 1 0" result="lime"/> + <feColorMatrix values="0 1 0 0 0, 0 0 0 0 0, 0 0 0 0 0, 0 0 0 1 0" result="red"/> + <feMerge/> + <feComposite in2="lime"/> + </filter> +</svg> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-obb-dimensions.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-obb-dimensions.html new file mode 100644 index 00000000000..2bb424d90cd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-obb-dimensions.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>CSS Filters: objectBoundingBox type of primitiveUnits in SVG filters</title> +<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#InterfaceSVGFilterElement"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#attr-valuedef-primitiveunits-objectboundingbox"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=532938"> +<link rel="match" href="reference/effect-reference-obb-dimensions-ref.html"> +<meta name="assert" content="Check that primitiveUnits of type objectBoundingBox get properly applied in SVG filter primitives."/> + +<style> +body { + margin: 0; + padding: 0; +} +#target { + position: absolute; + width: 100px; + height: 100px; + background-color: green; + filter: url('#bboxOffset'); +} +</style> +<div id="target"></div> +<svg height="0"> + <filter id="bboxOffset" primitiveUnits="objectBoundingBox" x="0" y="0" width="1.25" height="1.25"> + <feOffset dx="0.2" dy="0.2"/> + </filter> +</svg> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-on-span.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-on-span.html new file mode 100644 index 00000000000..66bd8fa886a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-on-span.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html> +<title>CSS Filters: filters on <span> elements</title> +<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=513408"> +<link rel="match" href="reference/effect-reference-on-span-ref.html"> +<meta name="assert" content="Check that a CSS filter to a <span> element works as expected."/> + +<body> +<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1"> + <defs> + <filter id="colormatrix" color-interpolation-filters="sRGB"> + <feColorMatrix values="0 0 0 0 0, 0 0 0 0 0, 1 0 0 0 0, 0 0 0 1 0"/> + </filter> + </defs> +</svg><span style="background-color: red; filter: url(#colormatrix);">This text's background should be blue.</span> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-001.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-001.html new file mode 100644 index 00000000000..6c8374536f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-001.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<title>CSS Filters: reference to renamed SVG filter</title> +<link rel="author" title="Stephen White" href="mailto:senorblanco@chromium.org"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty"> +<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=90405"> +<link rel="match" href="reference/effect-reference-rename-001-ref.html"> +<meta name="assert" content="Check that a SVG filter, initially named differently than what an element expects, gets applied to such element once renamed with the expected value."/> + +<body> +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0"> + <defs> + <filter id="NotMyFilter"> + <feColorMatrix type="hueRotate" values="180"/> + </filter> + </defs> +</svg> +<img style="filter: url(#MyFilter);" src="support/color-palette.png"> +<script> +document.getElementById("NotMyFilter").id = "MyFilter"; +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-002.html b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-002.html new file mode 100644 index 00000000000..86528819bc7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/effect-reference-rename-002.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>CSS Filters: reference to renamed SVG filter</title> +<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=453019"> +<link rel="match" href="reference/effect-reference-rename-002-ref.html"> +<meta name="assert" content="Check that a SVG filter, initially named differently than what an element expects, gets applied to such element once renamed, after rendering the first frame."/> + +<script src="/common/reftest-wait.js"></script> +<script src="/common/rendering-utils.js"></script> + +<body> +<svg height="0"> + <filter id="NotMyFilter"> + <feColorMatrix type="hueRotate" values="90"/> + </filter> +</svg> +<div style="width: 100px; height: 100px; background-color: red; filter: url(#MyFilter);"></div> +<script> +waitForAtLeastOneFrame().then(function() { + document.getElementById("NotMyFilter").id = "MyFilter"; + takeScreenshot(); +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-region-negative-positioned-child-001.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-region-negative-positioned-child-001.html new file mode 100644 index 00000000000..8f302ab52ab --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-region-negative-positioned-child-001.html @@ -0,0 +1,41 @@ +<!DOCTYPE html> +<title>SVG Filters: CSS reference filters with negative positioned children</title> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#ColorInterpolationFiltersProperty"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feColorMatrixElement"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=638091"> +<link rel="match" href="reference/filter-region-negative-positioned-child-001-ref.html"> +<meta name="assert" content="CSS reference filters with negative positioned children"/> +<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1"> + <defs> + <filter id="f1" color-interpolation-filters="sRGB"> + <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"/> + </filter> + </defs> +</svg> +<style> +.box { + width: 100px; + height: 100px; + position: absolute; +} +.green { + background-color: green; +} +.blue { + background-color: blue; +} +.above { + top: -100px; +} +.parent { + filter: url(#f1); + background-color: white; + position: relative; + top: 100px; +} +</style> +<div class="parent"> +<div class="green box"></div> +<div class="blue box above"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-region-transformed-child-001.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-region-transformed-child-001.html new file mode 100644 index 00000000000..cd097faf706 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-region-transformed-child-001.html @@ -0,0 +1,30 @@ +<title>CSS Filter: Scale a transformed child element"></title> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#feComponentTransferElement"> +<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=333014"> +<link rel="match" href="reference/filter-region-transformed-child-001-ref.html"> +<meta name="assert" content="This test ensures that the feComponentTransfer filter scales a child with CSS scale transform."> +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0"> + <defs> + <filter id="filter" x="25%" y="0%" width="50%" height="100%"> + <feComponentTransfer> + <feFuncR type="linear" intercept="0" slope="1"/> + <feFuncG type="linear" intercept="0" slope="0"/> + <feFuncB type="linear" intercept="0" slope="0"/> + <feFuncA type="linear" intercept="0" slope="1"/> + </feComponentTransfer> + </filter> + </defs> +</svg> +<style> +#parent { + display: inline-block; + filter: url(#filter); +} +#child { + background-color: gray; + width: 50px; + height: 50px; + transform: translate(25px, 25px) scale(2); +} +</style> +<div id="parent"><div id="child"></div></div> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference-filter-update-on-attribute-change-001.html b/tests/wpt/web-platform-tests/css/filter-effects/reference-filter-update-on-attribute-change-001.html new file mode 100644 index 00000000000..cc5ac7c65d7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference-filter-update-on-attribute-change-001.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<title>SVG Filters: Invalidation of SVG filter attributes on HTML</title> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#feColorMatrixElement"> +<link rel="help" href="https://bugs.webkit.org/show_bug.cgi?id=105635"> +<link rel="match" href="reference/reference-filter-update-on-attribute-change-001-ref.html"> +<meta name="assert" content="Dynamically adding an attribute of a filter primitive"/> +<head> + <script> + function run() { + document.getElementById('color').setAttribute('values', '90'); + } + </script> +</head> +<body onload="run()"> + <svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1"> + <defs> + <filter id="MyFilter"> + <fecolormatrix id="color" type="hueRotate"></fecolormatrix> + </filter> + </defs> + </svg> + <div style="filter: url(#MyFilter); width:100px; height:100px; background-color:red;"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-delete-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-delete-ref.html new file mode 100644 index 00000000000..918715265fa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-delete-ref.html @@ -0,0 +1,5 @@ +<html> + <body> + <img src="../support/color-palette.png"> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html new file mode 100644 index 00000000000..f718ea6abfb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-displacement-negative-scale-001-ref.html @@ -0,0 +1,2 @@ +<!DOCTYPE html> +<div style="width: 100px; height: 100px; background-color: green"></div> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html new file mode 100644 index 00000000000..5743e0c3de9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-merge-no-inputs.tentative-ref.html @@ -0,0 +1,2 @@ +<!DOCTYPE html> +<div style="width: 100px; height: 100px; background-color: lime"></div> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html new file mode 100644 index 00000000000..f460c439aa8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-obb-dimensions-ref.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<style> +body { + margin: 0; + padding: 0; +} +#target { + position: absolute; + left: 20px; + top: 20px; + width: 100px; + height: 100px; + background-color: green; +} +</style> +<div id="target"></div> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-on-span-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-on-span-ref.html new file mode 100644 index 00000000000..76a79538317 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-on-span-ref.html @@ -0,0 +1,5 @@ +<html> +<body> +<span style="background-color: blue;">This text's background should be blue.</span> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-001-ref.html new file mode 100644 index 00000000000..fe3beae2d49 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-001-ref.html @@ -0,0 +1,12 @@ +<html> +<body> +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0"> + <defs> + <filter id="MyFilter"> + <feColorMatrix type="hueRotate" values="180"/> + </filter> + </defs> +</svg> +<img style="filter: url(#MyFilter);" src="../support/color-palette.png"> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-002-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-002-ref.html new file mode 100644 index 00000000000..d8719aa43a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/effect-reference-rename-002-ref.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<svg height="0"> + <filter id="MyFilter"> + <feColorMatrix type="hueRotate" values="90"/> + </filter> +</svg> +<div style="width: 100px; height: 100px; background-color: red; filter: url(#MyFilter);"></div> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html new file mode 100644 index 00000000000..c9da47b1b43 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-negative-positioned-child-001-ref.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1"> + <defs> + <filter id="f1" color-interpolation-filters="sRGB"> + <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"/> + </filter> + </defs> +</svg> +<style> +.box { + width: 100px; + height: 100px; + position: absolute; +} +.green { + background-color: green; +} +.blue { + background-color: blue; +} +.below { + top: 100px; +} +.parent { + filter: url(#f1); + background-color: white; + position: relative; +} +</style> +<div class="parent"> +<div class="blue box"></div> +<div class="green box below"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-transformed-child-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-transformed-child-001-ref.html new file mode 100644 index 00000000000..bcf64941193 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/filter-region-transformed-child-001-ref.html @@ -0,0 +1,23 @@ +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0"> + <defs> + <filter id="filter" x="25%" y="0%" width="50%" height="100%"> + <feComponentTransfer> + <feFuncR type="linear" intercept="0" slope="1"/> + <feFuncG type="linear" intercept="0" slope="0"/> + <feFuncB type="linear" intercept="0" slope="0"/> + <feFuncA type="linear" intercept="0" slope="1"/> + </feComponentTransfer> + </filter> + </defs> +</svg> +<style> +div { + display: inline-block; + filter: url(#filter); + background-color: gray; + width: 50px; + height: 50px; + transform: translate(25px, 25px) scale(2); +} +</style> +<div></div> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html new file mode 100644 index 00000000000..91326ef585e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/reference-filter-update-on-attribute-change-001-ref.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<body> + <svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" version="1.1"> + <defs> + <filter id="MyFilter"> + <fecolormatrix id="color" type="hueRotate" values="90"></fecolormatrix> + </filter> + </defs> + </svg> + <div style="filter: url(#MyFilter); width:100px; height:100px; background-color:red;"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html new file mode 100644 index 00000000000..cd16e54c8e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/root-element-with-opacity-filter-001-ref.html @@ -0,0 +1,4 @@ +<!DOCTYPE html> +<html> +<body style="filter: opacity(0.501)"> +This test ensures we properly paint the root element when an opacity filter is applied. diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-0001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-001-ref.html index 82f301f5f6f..82f301f5f6f 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-0001-ref.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-002-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-002-ref.html new file mode 100644 index 00000000000..344ee53e032 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/svg-relative-urls-002-ref.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<style> +img { + margin: 10px; +} +</style> +<img style="filter: url(../support/hueRotate.svg#MyFilter)" src="../support/color-palette.png"> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/root-element-with-opacity-filter-001.html b/tests/wpt/web-platform-tests/css/filter-effects/root-element-with-opacity-filter-001.html new file mode 100644 index 00000000000..577e2bd4c03 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/root-element-with-opacity-filter-001.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<title>Opacity Filter: root element opacity filter</title> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#funcdef-filter-opacity"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=349587"> +<link rel="match" href="reference/root-element-with-opacity-filter-001-ref.html"> +<meta name="assert" content="This test ensures that the root renderer has an opacity filter"/> +<html style="filter: opacity(0.501)"> +This test ensures we properly paint the root element when an opacity filter is applied. diff --git a/tests/wpt/web-platform-tests/css/filter-effects/support/filter-from-external-url.css b/tests/wpt/web-platform-tests/css/filter-effects/support/filter-from-external-url.css new file mode 100644 index 00000000000..2940461016c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/support/filter-from-external-url.css @@ -0,0 +1,3 @@ +.hue-rotate { + filter: url('hueRotate.svg#MyFilter'); +} diff --git a/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-0001.html b/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-001.html index 3edf7447b8f..5dd382c6dfd 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-0001.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-001.html @@ -4,7 +4,7 @@ <link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty"> <link rel="help" href="https://drafts.csswg.org/css-values-4/#relative-urls"> <link rel="help" href="https://crbug.com/405315"/> -<link rel="match" href="reference/svg-relative-urls-0001-ref.html"> +<link rel="match" href="reference/svg-relative-urls-001-ref.html"> <meta name="assert" content="This test checks that relative SVG filter references in inline styles are correct after an element moves documents."> <body onload="runTest()"> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-002.html b/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-002.html new file mode 100644 index 00000000000..278ea164543 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/svg-relative-urls-002.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<title>SVG Filters: relative URLs from external stylesheets</title> +<link rel="author" title="Fredrik Söderquist" href="mailto:fs@opera.com"> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#relative-urls"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects/#FilterProperty"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=405315"> +<link rel="match" href="reference/svg-relative-urls-002-ref.html"> +<meta name="assert" content="Check that SVG filters can be referenced from external stylesheets using a relative URL"> + +<link rel="stylesheet" href="support/filter-from-external-url.css" + onload="document.body && document.body.offsetTop"> +<style> +img { + margin: 10px; +} +</style> +<img class="hue-rotate" src="support/color-palette.png"> diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html new file mode 100644 index 00000000000..79b5f5f0186 --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html @@ -0,0 +1,134 @@ +<!DOCTYPE HTML> +<meta name="timeout" content="long"> +<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> +<script src="scroll_support.js"></script> +<style> +html { + height: 3000px; + width: 3000px; +} +#targetDiv { + width: 200px; + height: 200px; + overflow: scroll; +} + +#innerDiv { + width: 400px; + height: 400px; +} +</style> + +<body style="margin:0" onload=runTest()> +<div id="targetDiv"> + <div id="innerDiv"> + </div> +</div> +</body> +<script> +var element_scrollend_arrived = false; +var document_scrollend_arrived = false; + +function onElementScrollEnd(event) { + assert_false(event.cancelable); + assert_false(event.bubbles); + element_scrollend_arrived = true; +} + +function onDocumentScrollEnd(event) { + assert_false(event.cancelable); + // scrollend events are bubbled when the target node is document. + assert_true(event.bubbles); + document_scrollend_arrived = true; +} + +function callScrollFunction([scrollTarget, scrollFunction, args]) { + scrollTarget[scrollFunction](args); +} + +function runTest() { + let root_element = document.scrollingElement; + let target_div = document.getElementById("targetDiv"); + + promise_test (async (t) => { + await waitForCompositorCommit(); + target_div.addEventListener("scrollend", onElementScrollEnd); + document.addEventListener("scrollend", onDocumentScrollEnd); + + let test_cases = [ + [target_div, 200, 200, [target_div, "scrollTo", { top: 200, left: 200, behavior: "auto" }]], + [target_div, 0, 0, [target_div, "scrollTo", { top: 0, left: 0, behavior: "smooth" }]], + [root_element, 200, 200, [root_element, "scrollTo", { top: 200, left: 200, behavior: "auto" }]], + [root_element, 0, 0, [root_element, "scrollTo", { top: 0, left: 0, behavior: "smooth" }]], + [target_div, 200, 200, [target_div, "scrollBy", { top: 200, left: 200, behavior: "auto" }]], + [target_div, 0, 0, [target_div, "scrollBy", { top: -200, left: -200, behavior: "smooth" }]], + [root_element, 200, 200, [root_element, "scrollBy", { top: 200, left: 200, behavior: "auto" }]], + [root_element, 0, 0, [root_element, "scrollBy", { top: -200, left: -200, behavior: "smooth" }]] + ]; + + for(i = 0; i < test_cases.length; i++) { + let t = test_cases[i]; + let target = t[0]; + let expected_x = t[1]; + let expected_y = t[2]; + let scroll_datas = t[3]; + + callScrollFunction(scroll_datas); + await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + scroll_datas[1] + " did not receive scrollend event."); + if (target == root_element) + assert_false(element_scrollend_arrived); + else + assert_false(document_scrollend_arrived); + assert_equals(target.scrollLeft, expected_x, target.tagName + "." + scroll_datas[1] + " scrollLeft"); + assert_equals(target.scrollTop, expected_y, target.tagName + "." + scroll_datas[1] + " scrollTop"); + + element_scrollend_arrived = false; + document_scrollend_arrived = false; + } + }, "Tests scrollend event for calling scroll functions."); + + promise_test(async (t) => { + await waitForCompositorCommit(); + + let test_cases = [ + [target_div, "scrollTop"], + [target_div, "scrollLeft"], + [root_element, "scrollTop"], + [root_element, "scrollLeft"] + ]; + for (i = 0; i < test_cases.length; i++) { + let t = test_cases[i]; + let target = t[0]; + let attribute = t[1]; + let position = 200; + + target.style.scrollBehavior = "smooth"; + target[attribute] = position; + await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + attribute + " did not receive scrollend event."); + if (target == root_element) + assert_false(element_scrollend_arrived); + else + assert_false(document_scrollend_arrived); + assert_equals(target[attribute], position, target.tagName + "." + attribute + " "); + element_scrollend_arrived = false; + document_scrollend_arrived = false; + + await waitForCompositorCommit(); + target.style.scrollBehavior = "auto"; + target[attribute] = 0; + await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + "." + attribute + " did not receive scrollend event."); + if (target == root_element) + assert_false(element_scrollend_arrived); + else + assert_false(document_scrollend_arrived); + assert_equals(target[attribute], 0, target.tagName + "." + attribute + " "); + element_scrollend_arrived = false; + document_scrollend_arrived = false; + } + }, "Tests scrollend event for changing scroll attributes."); +} +</script> diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html new file mode 100644 index 00000000000..63e1c3e22ea --- /dev/null +++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html @@ -0,0 +1,123 @@ +<!DOCTYPE HTML> +<meta name="timeout" content="long"> +<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> +<script src="scroll_support.js"></script> +<style> +html { + height: 3000px; + width: 3000px; +} +#targetDiv { + width: 200px; + height: 200px; + overflow: scroll; +} + +#innerDiv { + width: 400px; + height: 400px; +} +</style> + +<body style="margin:0" onload=runTest()> +<div id="targetDiv"> + <div id="innerDiv"> + </div> +</div> +</body> +<script> +var element_scrollend_arrived = false; +var document_scrollend_arrived = false; + +function onElementScrollEnd(event) { + assert_false(event.cancelable); + assert_false(event.bubbles); + element_scrollend_arrived = true; +} + +function onDocumentScrollEnd(event) { + assert_false(event.cancelable); + // scrollend events are bubbled when the target node is document. + assert_true(event.bubbles); + document_scrollend_arrived = true; +} + +function callScrollFunction([scrollTarget, scrollFunction, args]) { + scrollTarget[scrollFunction](args); +} + +function runTest() { + let root_element = document.scrollingElement; + let target_div = document.getElementById("targetDiv"); + let inner_div = document.getElementById("innerDiv"); + + // Get expected position for root_element scrollIntoView. + root_element.scrollTo(10000, 10000); + let max_root_x = root_element.scrollLeft; + let max_root_y = root_element.scrollTop; + root_element.scrollTo(0, 0); + + target_div.scrollTo(10000, 10000); + let max_element_x = target_div.scrollLeft; + let max_element_y = target_div.scrollTop; + target_div.scrollTo(0, 0); + + promise_test (async (t) => { + await waitForCompositorCommit(); + target_div.addEventListener("scrollend", onElementScrollEnd); + document.addEventListener("scrollend", onDocumentScrollEnd); + + let test_cases = [ + [target_div, max_element_x, max_element_y, [inner_div, "scrollIntoView", { inline: "end", block: "end", behavior: "auto" }]], + [target_div, 0, 0, [inner_div, "scrollIntoView", { inline: "start", block: "start", behavior: "smooth" }]], + [root_element, max_root_x, max_root_y, [root_element, "scrollIntoView", { inline: "end", block: "end", behavior: "smooth" }]], + [root_element, 0, 0, [root_element, "scrollIntoView", { inline: "start", block: "start", behavior: "smooth" }]] + ]; + + for(i = 0; i < test_cases.length; i++) { + let t = test_cases[i]; + let target = t[0]; + let expected_x = t[1]; + let expected_y = t[2]; + let scroll_datas = t[3]; + + callScrollFunction(scroll_datas); + await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, target.tagName + ".scrollIntoView did not receive scrollend event."); + if (target == root_element) + assert_false(element_scrollend_arrived); + else + assert_false(document_scrollend_arrived); + assert_equals(target.scrollLeft, expected_x, target.tagName + ".scrollIntoView scrollLeft"); + assert_equals(target.scrollTop, expected_y, target.tagName + ".scrollIntoView scrollTop"); + + element_scrollend_arrived = false; + document_scrollend_arrived = false; + } + }, "Tests scrollend event for scrollIntoView."); + + promise_test(async (t) => { + document.body.removeChild(target_div); + let out_div = document.createElement("div"); + out_div.style = "width: 100px; height:100px; overflow:scroll; scroll-behavior:smooth;"; + out_div.appendChild(target_div); + document.body.appendChild(out_div); + await waitForCompositorCommit(); + + element_scrollend_arrived = false; + document_scrollend_arrived = false; + inner_div.scrollIntoView({ inline: "end", block: "end", behavior: "auto" }); + await waitFor(() => { return element_scrollend_arrived || document_scrollend_arrived; }, "Nested scrollIntoView did not receive scrollend event."); + assert_equals(root_element.scrollLeft, 0, "Nested scrollIntoView root_element scrollLeft"); + assert_equals(root_element.scrollTop, 0, "Nested scrollIntoView root_element scrollTop"); + assert_equals(out_div.scrollLeft, 100, "Nested scrollIntoView out_div scrollLeft"); + assert_equals(out_div.scrollTop, 100, "Nested scrollIntoView out_div scrollTop"); + assert_equals(target_div.scrollLeft, max_element_x, "Nested scrollIntoView target_div scrollLeft"); + assert_equals(target_div.scrollTop, max_element_y, "Nested scrollIntoView target_div scrollTop"); + assert_false(document_scrollend_arrived); + }, "Tests scrollend event for nested scrollIntoView."); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/natural-size-orientation.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/natural-size-orientation.html new file mode 100644 index 00000000000..662dc0804fa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/natural-size-orientation.html @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>naturalWidth and naturalHeight on HTMLImageElement reflect orientation metadata</title> +<link rel="author" title="Cameron McCormack" href="mailto:cam@mcc.id.au"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +.ignore-orientation { image-orientation: none; } +</style> +<body> +<script> +async_test(function(t) { + let img = document.createElement("img"); + img.src = "/images/green-100x50.png"; + img.onload = t.step_func_done(function() { + assert_equals(img.naturalWidth, 100); + assert_equals(img.naturalHeight, 50); + img.remove(); + }); + document.body.append(img); +}, "naturalWidth and naturalHeight return correct values for an image without orientation metadata"); + +async_test(function(t) { + let img = document.createElement("img"); + img.src = "/images/arrow-oriented-upright.jpg"; + img.onload = t.step_func_done(function() { + assert_equals(img.naturalWidth, 144); + assert_equals(img.naturalHeight, 240); + img.remove(); + }); + document.body.append(img); +}, "naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata"); + +async_test(function(t) { + let img = document.createElement("img"); + img.src = "/images/arrow-oriented-upright.jpg"; + img.className = "ignore-orientation"; + img.onload = t.step_func_done(function() { + assert_equals(img.naturalWidth, 144); + assert_equals(img.naturalHeight, 240); + img.remove(); + }); + document.body.append(img); +}, "naturalWidth and naturalHeight return re-oriented values for an image with orientation metadata even with image-orientation:none"); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-interactive-content.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-interactive-content.html new file mode 100644 index 00000000000..60a80fad9d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-interactive-content.html @@ -0,0 +1,123 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Label event handling when a descendant interactive content is clicked</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<label id=label></label> +<template id=interactive-content> + <a href="about:blank" onclick="event.preventDefault()"></a> + <audio controls></audio> + <button></button> + <details></details> + <embed> + <iframe></iframe> + <img usemap=""> + <input> + <label>label</label> + <object usemap=""></object> + <select></select> + <textarea></textarea> + <video controls></video> + + <div tabindex=""></div> + + <!-- These are interesting in that even without tabindex, they could become + interactive with the addition/removal of an attribute. --> + <a tabindex=""></a> + <audio tabindex=""></audio> + <img tabindex=""> + <input type=hidden tabindex=""> + <object tabindex=""></object> + <video tabindex=""></video> +</template> + +<script> +"use strict"; + +const interactiveContent = document.getElementById("interactive-content"); +const interactiveElements = Array.from(interactiveContent.content.children); +const label = document.getElementById("label"); + +for (const srcInteractiveElement of interactiveElements) { + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const interactiveElement = srcInteractiveElement.cloneNode(); + label.appendChild(interactiveElement); + + let clicked = 0; + interactiveElement.addEventListener("click", () => { + clicked++; + }); + interactiveElement.click(); + assert_equals(clicked, 1, "clicking interactive content"); + + clicked = 0; + const span = document.createElement("span"); + interactiveElement.appendChild(span); + span.click(); + assert_equals(clicked, 1, "clicking descendant of interactive content"); + }, `interactive content ${srcInteractiveElement.outerHTML} as first child of <label>`); + + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const interactiveElement = srcInteractiveElement.cloneNode(); + const div = document.createElement("div"); + div.appendChild(interactiveElement); + label.appendChild(div); + + let clicked = 0; + interactiveElement.addEventListener("click", () => { + clicked++; + }); + interactiveElement.click(); + assert_equals(clicked, 1, "clicking nested interactive content"); + + clicked = 0; + const span = document.createElement("span"); + interactiveElement.appendChild(span); + span.click(); + assert_equals(clicked, 1, "clicking descendant of nested interactive content"); + }, `interactive content ${srcInteractiveElement.outerHTML} deeply nested under <label>`); + + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const button = document.createElement("button"); + label.appendChild(button); + + const interactiveElement = srcInteractiveElement.cloneNode(); + label.appendChild(interactiveElement); + + let buttonClicked = 0; + button.addEventListener("click", () => { + buttonClicked++; + }); + + let clicked = 0; + interactiveElement.addEventListener("click", () => { + clicked++; + }); + interactiveElement.click(); + assert_equals(clicked, 1, "clicking nested interactive content"); + assert_equals(buttonClicked, 0, "clicking nested interactive content should not click button"); + + clicked = 0; + const span = document.createElement("span"); + interactiveElement.appendChild(span); + span.click(); + assert_equals(clicked, 1, "clicking descendant of nested interactive content"); + assert_equals(buttonClicked, 0, "clicking descendant of nested interactive content should not click button"); + }, `interactive content ${srcInteractiveElement.outerHTML} as second child under <label>`); +} + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-labelable-content.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-labelable-content.html new file mode 100644 index 00000000000..5563ef1e3c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-labelable-content.html @@ -0,0 +1,112 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Label event handling when a descendant labelable but not interactive element is clicked</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<label id=label></label> +<template id=labelable-not-interactive-content> + <meter></meter> + <output></output> + <progress></progress> +</template> + +<script> +"use strict"; + +const template = document.getElementById("labelable-not-interactive-content"); +const labelableNotInteractiveElements = Array.from(template.content.children); +const label = document.getElementById("label"); + +// This part may be subject to platform-dependent operations in the spec, so we +// only check for obvious errors. (Clicking once should register at least one +// click, but less than 30 clicks.) See +// https://github.com/whatwg/html/issues/5415 for possibly tightening this up. +function checkClickCount(clicked, description) { + assert_greater_than(clicked, 0, description); + assert_less_than(clicked, 30, description); +} + +for (const srcElement of labelableNotInteractiveElements) { + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const element = srcElement.cloneNode(); + label.appendChild(element); + + let clicked = 0; + element.addEventListener("click", () => { + clicked++; + }); + element.click(); + checkClickCount(clicked, "clicking labelable content"); + + clicked = 0; + const span = document.createElement("span"); + element.appendChild(span); + span.click(); + checkClickCount(clicked, "clicking descendant of labelable content"); + }, `labelable element ${srcElement.outerHTML} as first child of <label>`); + + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const element = srcElement.cloneNode(); + const div = document.createElement("div"); + div.appendChild(element); + label.appendChild(div); + + let clicked = 0; + element.addEventListener("click", () => { + clicked++; + }); + element.click(); + checkClickCount(clicked, "clicking nested labelable content"); + + clicked = 0; + const span = document.createElement("span"); + element.appendChild(span); + span.click(); + checkClickCount(clicked, "clicking descendant of nested labelable content"); + }, `labelable element ${srcElement.outerHTML} deeply nested under <label>`); + + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const button = document.createElement("button"); + label.appendChild(button); + + const element = srcElement.cloneNode(); + label.appendChild(element); + + let buttonClicked = 0; + button.addEventListener("click", () => { + buttonClicked++; + }); + + let clicked = 0; + element.addEventListener("click", () => { + clicked++; + }); + element.click(); + assert_equals(clicked, 1, "clicking nested labelable content"); + assert_equals(buttonClicked, 1, "clicking nested labelable content should click button"); + + buttonClicked = 0; + clicked = 0; + const span = document.createElement("span"); + element.appendChild(span); + span.click(); + assert_equals(clicked, 1, "clicking descendant of nested labelable content"); + assert_equals(buttonClicked, 1, "clicking descendant of nested labelable content should not click button"); + }, `labelable element ${srcElement.outerHTML} as second child under <label>`); +} + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html new file mode 100644 index 00000000000..233168f5664 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-label-element/clicking-noninteractive-unlabelable-content.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Label event handling when a descendant noninteractive and unlabelable content is clicked</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<label id=label></label> +<template id=noninteractive-unlabelable-content> + <div></div> + <svg></svg> + + <!-- These are "almost interactive": they could become interactive with the + addition/removal of a non-tabindex attribute. --> + <a></a> + <audio></audio> + <img> + <input type=hidden> + <object></object> + <video></video> +</template> + +<script> +"use strict"; + +const template = document.getElementById("noninteractive-unlabelable-content"); +{ + const details = document.createElementNS("http://www.w3.org/2000/svg", "details"); + template.content.appendChild(details); +} + +const elements = Array.from(template.content.children); +const label = document.getElementById("label"); + +for (const srcElement of elements) { + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const element = srcElement.cloneNode(); + label.appendChild(element); + + let clicked = 0; + element.addEventListener("click", () => { + clicked++; + }); + element.dispatchEvent(new MouseEvent("click", { bubbles: true })); + assert_equals(clicked, 1, "clicking interactive content"); + + clicked = 0; + const span = document.createElement("span"); + element.appendChild(span); + span.click(); + assert_equals(clicked, 1, "clicking descendant of interactive content"); + }, `noninteractive unlabelable content ${srcElement.outerHTML} as first child of <label>`); + + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const element = srcElement.cloneNode(); + const div = document.createElement("div"); + div.appendChild(element); + label.appendChild(div); + + let clicked = 0; + element.addEventListener("click", () => { + clicked++; + }); + element.dispatchEvent(new MouseEvent("click", { bubbles: true })); + assert_equals(clicked, 1, "clicking nested interactive content"); + + clicked = 0; + const span = document.createElement("span"); + element.appendChild(span); + span.click(); + assert_equals(clicked, 1, "clicking descendant of nested interactive content"); + }, `noninteractive unlabelable content ${srcElement.outerHTML} deeply nested under <label>`); + + test(t => { + t.add_cleanup(() => { + label.innerHTML = ""; + }); + + const button = document.createElement("button"); + label.appendChild(button); + + const element = srcElement.cloneNode(); + label.appendChild(element); + + let buttonClicked = 0; + button.addEventListener("click", () => { + buttonClicked++; + }); + + let clicked = 0; + element.addEventListener("click", () => { + clicked++; + }); + element.dispatchEvent(new MouseEvent("click", { bubbles: true })); + assert_equals(clicked, 1, "clicking noninteractive unlabelable content"); + assert_equals(buttonClicked, 1, "clicking noninteractive unlabelable content should click button"); + + buttonClicked = 0; + clicked = 0; + const span = document.createElement("span"); + element.appendChild(span); + span.click(); + assert_equals(clicked, 1, "clicking descendant of nested noninteractive unlabelable content"); + assert_equals( + buttonClicked, 1, + "clicking descendant of nested noninteractive unlabelable content should click button" + ); + }, `noninteractive unlabelable content ${srcElement.outerHTML} as second child under <label>`); +} + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/images/arrow-oriented-upright.jpg b/tests/wpt/web-platform-tests/images/arrow-oriented-upright.jpg Binary files differnew file mode 100644 index 00000000000..cebc99af14b --- /dev/null +++ b/tests/wpt/web-platform-tests/images/arrow-oriented-upright.jpg diff --git a/tests/wpt/web-platform-tests/interfaces/css-typed-om.idl b/tests/wpt/web-platform-tests/interfaces/css-typed-om.idl index df9669e5637..00d3f49bfe6 100644 --- a/tests/wpt/web-platform-tests/interfaces/css-typed-om.idl +++ b/tests/wpt/web-platform-tests/interfaces/css-typed-om.idl @@ -41,9 +41,9 @@ partial interface mixin ElementCSSInlineStyle { [SameObject] readonly attribute StylePropertyMap attributeStyleMap; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(sequence<CSSUnparsedSegment> members)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSUnparsedValue : CSSStyleValue { + constructor(sequence<CSSUnparsedSegment> members); iterable<CSSUnparsedSegment>; readonly attribute unsigned long length; getter CSSUnparsedSegment (unsigned long index); @@ -52,16 +52,16 @@ interface CSSUnparsedValue : CSSStyleValue { typedef (USVString or CSSVariableReferenceValue) CSSUnparsedSegment; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(USVString variable, optional CSSUnparsedValue? fallback = null)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSVariableReferenceValue { + constructor(USVString variable, optional CSSUnparsedValue? fallback = null); attribute USVString variable; readonly attribute CSSUnparsedValue? fallback; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(USVString value)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSKeywordValue : CSSStyleValue { + constructor(USVString value); attribute USVString value; }; @@ -108,9 +108,9 @@ interface CSSNumericValue : CSSStyleValue { [Exposed=Window] static CSSNumericValue parse(USVString cssText); }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(double value, USVString unit)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSUnitValue : CSSNumericValue { + constructor(double value, USVString unit); attribute double value; readonly attribute USVString unit; }; @@ -120,45 +120,45 @@ interface CSSMathValue : CSSNumericValue { readonly attribute CSSMathOperator operator; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumberish... args)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSMathSum : CSSMathValue { + constructor(CSSNumberish... args); readonly attribute CSSNumericArray values; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumberish... args)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSMathProduct : CSSMathValue { + constructor(CSSNumberish... args); readonly attribute CSSNumericArray values; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumberish arg)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSMathNegate : CSSMathValue { + constructor(CSSNumberish arg); readonly attribute CSSNumericValue value; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumberish arg)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSMathInvert : CSSMathValue { + constructor(CSSNumberish arg); readonly attribute CSSNumericValue value; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumberish... args)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSMathMin : CSSMathValue { + constructor(CSSNumberish... args); readonly attribute CSSNumericArray values; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumberish... args)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSMathMax : CSSMathValue { + constructor(CSSNumberish... args); readonly attribute CSSNumericArray values; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumberish min, CSSNumberish val, CSSNumberish max)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSMathClamp : CSSMathValue { + constructor(CSSNumberish min, CSSNumberish val, CSSNumberish max); readonly attribute CSSNumericValue min; readonly attribute CSSNumericValue val; readonly attribute CSSNumericValue max; @@ -230,9 +230,9 @@ partial namespace CSS { CSSUnitValue fr(double value); }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(sequence<CSSTransformComponent> transforms)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSTransformValue : CSSStyleValue { + constructor(sequence<CSSTransformComponent> transforms); iterable<CSSTransformComponent>; readonly attribute unsigned long length; getter CSSTransformComponent (unsigned long index); @@ -249,63 +249,63 @@ interface CSSTransformComponent { DOMMatrix toMatrix(); }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumericValue x, CSSNumericValue y, optional CSSNumericValue z)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSTranslate : CSSTransformComponent { + constructor(CSSNumericValue x, CSSNumericValue y, optional CSSNumericValue z); attribute CSSNumericValue x; attribute CSSNumericValue y; attribute CSSNumericValue z; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumericValue angle), - Constructor(CSSNumberish x, CSSNumberish y, CSSNumberish z, CSSNumericValue angle)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSRotate : CSSTransformComponent { + constructor(CSSNumericValue angle); + constructor(CSSNumberish x, CSSNumberish y, CSSNumberish z, CSSNumericValue angle); attribute CSSNumberish x; attribute CSSNumberish y; attribute CSSNumberish z; attribute CSSNumericValue angle; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumberish x, CSSNumberish y, optional CSSNumberish z)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSScale : CSSTransformComponent { + constructor(CSSNumberish x, CSSNumberish y, optional CSSNumberish z); attribute CSSNumberish x; attribute CSSNumberish y; attribute CSSNumberish z; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumericValue ax, CSSNumericValue ay)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSSkew : CSSTransformComponent { + constructor(CSSNumericValue ax, CSSNumericValue ay); attribute CSSNumericValue ax; attribute CSSNumericValue ay; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumericValue ax)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSSkewX : CSSTransformComponent { + constructor(CSSNumericValue ax); attribute CSSNumericValue ax; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumericValue ay)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSSkewY : CSSTransformComponent { + constructor(CSSNumericValue ay); attribute CSSNumericValue ay; }; /* Note that skew(x,y) is *not* the same as skewX(x) skewY(y), thus the separate interfaces for all three. */ -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(CSSNumericValue length)] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSPerspective : CSSTransformComponent { + constructor(CSSNumericValue length); attribute CSSNumericValue length; }; -[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet), - Constructor(DOMMatrixReadOnly matrix, optional CSSMatrixComponentOptions options = {})] +[Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSMatrixComponent : CSSTransformComponent { + constructor(DOMMatrixReadOnly matrix, optional CSSMatrixComponentOptions options = {}); attribute DOMMatrix matrix; }; diff --git a/tests/wpt/web-platform-tests/interfaces/permissions.idl b/tests/wpt/web-platform-tests/interfaces/permissions.idl index 9cde372a127..d45c7f93cac 100644 --- a/tests/wpt/web-platform-tests/interfaces/permissions.idl +++ b/tests/wpt/web-platform-tests/interfaces/permissions.idl @@ -46,6 +46,10 @@ dictionary DevicePermissionDescriptor : PermissionDescriptor { DOMString deviceId; }; +dictionary CameraDevicePermissionDescriptor : DevicePermissionDescriptor { + boolean panTiltZoom = false; +}; + dictionary PermissionSetParameters { required PermissionDescriptor descriptor; required PermissionState state; diff --git a/tests/wpt/web-platform-tests/interfaces/worklets.idl b/tests/wpt/web-platform-tests/interfaces/worklets.idl index 16187664b3b..f89eacd50bd 100644 --- a/tests/wpt/web-platform-tests/interfaces/worklets.idl +++ b/tests/wpt/web-platform-tests/interfaces/worklets.idl @@ -9,7 +9,7 @@ interface WorkletGlobalScope { [Exposed=Window] interface Worklet { - [NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options); + [NewObject] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options = {}); }; dictionary WorkletOptions { diff --git a/tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html b/tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html index 56dd71b1156..6d3997b085c 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html +++ b/tests/wpt/web-platform-tests/shadow-dom/slots-imperative-slot-api.tentative.html @@ -137,6 +137,21 @@ test(() => { }, 'Previously assigned slotable is moved to new slot when it\'s reassigned.'); test(() => { + let tTree = createTestTree(test_assign); + + tTree.s1.assign([tTree.c1]); + tTree.s2.assign([tTree.c2, tTree.c1]); + tTree.s3.assign([tTree.c1, tTree.c3]); + + assert_array_equals(tTree.s1.assignedNodes(), []); + assert_array_equals(tTree.s2.assignedNodes(), [tTree.c2]); + assert_array_equals(tTree.s3.assignedNodes(), [tTree.c1, tTree.c3]); + assert_equals(tTree.c1.assignedSlot, tTree.s3); + assert_equals(tTree.c2.assignedSlot, tTree.s2); + assert_equals(tTree.c3.assignedSlot, tTree.s3); +}, 'Order and assignment of nodes are preserved during multiple assignment in a row.'); + +test(() => { let tTree = createTestTree(test_assign); // tTree.c4 is invalid for tTree.host slot assignment. @@ -194,7 +209,7 @@ test(() => { assert_array_equals(tTree.s4.assignedNodes(), []); tTree.ns1.append(tTree.s1); - assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1, tTree.c2, tTree.c3]); + assert_array_equals(tTree.s1.assignedNodes(), []); }, 'Moving a slot\'s tree order position within a shadow host has no impact on its assigned slotables.'); test(() => { @@ -207,7 +222,7 @@ test(() => { assert_array_equals(tTree.s1.assignedNodes(), [tTree.c2, tTree.c3]); assert_array_equals(tTree.s4.assignedNodes(), []); - tTree.s4.assign(tTree.c1); + tTree.s4.assign([tTree.c1]); assert_array_equals(tTree.s4.assignedNodes(), [tTree.c1]); assert_equals(tTree.c1.assignedSlot, tTree.s4); }, 'Appending slotable to different host, it loses slot assignment. It can be re-assigned within a new host.'); @@ -215,6 +230,36 @@ test(() => { test(() => { let tTree = createTestTree(test_assign); + tTree.s1.assign([tTree.c1]); + assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1]); + + tTree.shadow_root4.insertBefore(tTree.s1, tTree.s4); + assert_array_equals(tTree.s1.assignedNodes(), []); + // Don't trigger slot assignment on previous shadow root. + // assert_array_equals(tTree.s2.assignedNodes(), []); + + tTree.shadow_root.insertBefore(tTree.s1, tTree.s2); + assert_array_equals(tTree.s1.assignedNodes(), []); +}, 'Previously assigned node should not be assigned if slot moved to a new shadow root. The slot remains empty when moved back, no trigger recalc.'); + +test(() => { + let tTree = createTestTree(test_assign); + + tTree.s1.assign([tTree.c1]); + assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1]); + + tTree.shadow_root4.insertBefore(tTree.s1, tTree.s4); + assert_array_equals(tTree.s1.assignedNodes(), []); + // Trigger slot assignment on previous shadow root. + assert_array_equals(tTree.s2.assignedNodes(), []); + + tTree.shadow_root.insertBefore(tTree.s1, tTree.s2); + assert_array_equals(tTree.s1.assignedNodes(), []); +}, 'Previously assigned node should not be assigned if slot moved to a new shadow root. The slot remains empty when moved back, trigger recalc.'); + +test(() => { + let tTree = createTestTree(test_assign); + tTree.s1.assign([tTree.c1, tTree.c1, tTree.c1]); assert_array_equals(tTree.s1.assignedNodes(), [tTree.c1]); diff --git a/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb b/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb index 5f8d6806107..d58664c5b6c 100644 --- a/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb +++ b/tests/wpt/web-platform-tests/tools/ci/azure/safari-technology-preview.rb @@ -1,10 +1,10 @@ cask 'safari-technology-preview' do if MacOS.version <= :mojave - version '103,061-90754-20200325-37467264-9c34-454c-be4a-1cb87e93c62c' - sha256 'f2175a2ca69152b6c1067d47b56d464b0ba0c71323a76137b488a8088a25f44c' + version '104,061-96689-20200407-7f675598-e07d-46db-8b24-b10c33a006ba' + sha256 'bc1b0a79f99022aae802bbb1e83a6a13613a339115063489fc240567b1b5d81d' else - version '103,061-90752-20200325-cc5192c4-619a-45b4-83b5-70a1bed8c912' - sha256 '846f2c9e7ebcc293f01ea36c8e1184e2d1bfb985eb3a590fc7c730c40e10a4b6' + version '104,061-96685-20200407-907fca12-9ba9-4bfa-8b8c-d5bf101d534b' + sha256 '3dcfde56386f38984c9ede1d67714c43699c5cafece9608ee2730484bffdcf9c' end url "https://secure-appldnld.apple.com/STP/#{version.after_comma}/SafariTechnologyPreview.dmg" diff --git a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py index 6f11eb59740..6d329ad38f9 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py +++ b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py @@ -1,4 +1,5 @@ import os +import sys import mock @@ -105,7 +106,10 @@ def manifest_tree(draw): return output + @h.given(manifest_tree()) +# FIXME: Workaround for https://github.com/web-platform-tests/wpt/issues/22758 +@h.settings(suppress_health_check=(h.HealthCheck.too_slow,) if sys.version_info.major == 3 else ()) @h.example([SourceFileWithTest("a", "0"*40, item.ConformanceCheckerTest)]) def test_manifest_to_json(s): m = manifest.Manifest() @@ -119,7 +123,10 @@ def test_manifest_to_json(s): assert loaded.to_json() == json_str + @h.given(manifest_tree()) +# FIXME: Workaround for https://github.com/web-platform-tests/wpt/issues/22758 +@h.settings(suppress_health_check=(h.HealthCheck.too_slow,) if sys.version_info.major == 3 else ()) @h.example([SourceFileWithTest("a", "0"*40, item.TestharnessTest)]) @h.example([SourceFileWithTest("a", "0"*40, item.RefTest, references=[("/aa", "==")])]) def test_manifest_idempotent(s): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py index dba8432b5a7..cb2b175d4df 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/safari.py @@ -3,7 +3,8 @@ from .base import get_timeout_multiplier # noqa: F401 from ..webdriver_server import SafariDriverServer from ..executors import executor_kwargs as base_executor_kwargs from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401 - WebDriverRefTestExecutor) # noqa: F401 + WebDriverRefTestExecutor, # noqa: F401 + WebDriverCrashtestExecutor) # noqa: F401 from ..executors.executorsafari import SafariDriverWdspecExecutor # noqa: F401 @@ -12,7 +13,8 @@ __wptrunner__ = {"product": "safari", "browser": "SafariBrowser", "executor": {"testharness": "WebDriverTestharnessExecutor", "reftest": "WebDriverRefTestExecutor", - "wdspec": "SafariDriverWdspecExecutor"}, + "wdspec": "SafariDriverWdspecExecutor", + "crashtest": "WebDriverCrashtestExecutor"}, "browser_kwargs": "browser_kwargs", "executor_kwargs": "executor_kwargs", "env_extras": "env_extras", diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py index 72f3a591ad7..60b1b0a5a87 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_formatters.py @@ -7,6 +7,7 @@ import mock from mozlog import handlers, structuredlog from ..formatters import wptreport +from ..formatters.wptscreenshot import WptscreenshotFormatter from ..formatters.wptreport import WptreportFormatter @@ -166,3 +167,26 @@ def test_wptreport_known_intermittent(capfd): subtest = test["subtests"][0] assert subtest["expected"] == u"PASS" assert subtest["known_intermittent"] == [u'FAIL'] + + +def test_wptscreenshot_test_end(capfd): + formatter = WptscreenshotFormatter() + + # Empty + data = {} + assert formatter.test_end(data) is None + + # No items + data['extra'] = {"reftest_screenshots": []} + assert formatter.test_end(data) is None + + # Invalid item + data['extra']['reftest_screenshots'] = ["no dict item"] + assert formatter.test_end(data) is None + + # Random hash + data['extra']['reftest_screenshots'] = [{"hash": "HASH", "screenshot": "DATA"}] + assert 'data:image/png;base64,DATA\n' == formatter.test_end(data) + + # Already cached hash + assert formatter.test_end(data) is None diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py index 77cb23a71e1..9a8fccf935a 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py @@ -117,3 +117,26 @@ def test_log_handler(): handler.test_start(data) handler.test_end(data) assert test["timeout"] == timeout * 1000 + + +def test_err_string(): + assert stability.err_string( + {u'OK': 1, u'FAIL': 1}, 1) == u"**Duplicate subtest name**" + assert stability.err_string( + {u'OK': 2, u'FAIL': 1}, 2) == u"**Duplicate subtest name**" + assert stability.err_string({u'SKIP': 1}, 0) == u"Duplicate subtest name" + assert stability.err_string( + {u'SKIP': 1, u'OK': 1}, 1) == u"Duplicate subtest name" + + assert stability.err_string( + {u'FAIL': 1}, 2) == u"**FAIL: 1/2, MISSING: 1/2**" + assert stability.err_string( + {u'FAIL': 1, u'OK': 1}, 3) == u"**FAIL: 1/3, OK: 1/3, MISSING: 1/3**" + + assert stability.err_string( + {u'OK': 1, u'FAIL': 1}, 2) == u"**FAIL: 1/2, OK: 1/2**" + + assert stability.err_string( + {u'OK': 2, u'FAIL': 1, u'SKIP': 1}, 4) == u"FAIL: 1/4, OK: 2/4, SKIP: 1/4" + assert stability.err_string( + {u'FAIL': 1, u'SKIP': 1, u'OK': 2}, 4) == u"FAIL: 1/4, OK: 2/4, SKIP: 1/4" diff --git a/tests/wpt/web-platform-tests/trust-tokens/end-to-end/README.txt b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/README.txt new file mode 100644 index 00000000000..a86468df9d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/README.txt @@ -0,0 +1,4 @@ +These tests confirm that Trust Tokens protocol operations executed correctly end +to end (in contrast to just checking, as the parent directory's +trust-token-parameter-validation does, that a method's interface is present and +correctly rejects invalid arguments). diff --git a/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token-with-no-top-frame.tentative.https.html b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token-with-no-top-frame.tentative.https.html new file mode 100644 index 00000000000..4788cd99073 --- /dev/null +++ b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token-with-no-top-frame.tentative.https.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Tests the Trust Token API's hasTrustToken behavior in documents with no top frame</title> +<link rel="help" href="https://github.com/WICG/trust-token-api" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<body> + <script> + 'use strict'; + + const frame = document.createElement('iframe'); + document.body.appendChild(frame); + const cachedDocument = window[0].document; + frame.remove(); + + test(() => { + assert_equals(cachedDocument.hasTrustToken("https://issuer.example"), undefined, + "Can't construct a Promise in a destroyed execution context."); + }, 'hasTrustToken in a destroyed document.'); + </script> +</body> diff --git a/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token.tentative.https.html b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token.tentative.https.html new file mode 100644 index 00000000000..17e037f7393 --- /dev/null +++ b/tests/wpt/web-platform-tests/trust-tokens/end-to-end/has-trust-token.tentative.https.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Tests the Trust Token API's hasTrustToken function (tentative: the API is a prototype).</title> +<link rel="help" href="https://github.com/WICG/trust-token-api#trust-token-redemption" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<script> + 'use strict'; + + promise_test((t) => { + return promise_rejects_js(t, TypeError, document.hasTrustToken( + "http://not-a-secure-url.example")); + }, + 'hasTrustToken requires a secure URL as its issuer argument.'); + + promise_test((t) => { + return promise_rejects_js(t, TypeError, document.hasTrustToken( + "file:///")); + }, + 'hasTrustToken requires a HTTP(S) URL as its issuer argument.'); + + // These hasTrustToken calls all affect global state: each call in the form + // of hasTrustToken(issuer) will result in |issuer| becoming associated in + // persistent storage with the calling top frame's origin. + // + // TODO(davidvc, crbug.com/1061764): Add a way to reset the global state after + // the test concludes. + // + // TODO(davidvc, crbug.com/1063140): Once it's possible to write WPTs that + // result in a trust token being deposited in storage, this should be + // expanded to cover the case where the user _does_ have a token. + promise_test(async (t) => { + let result = await document.hasTrustToken("https://issuer.example/"); + assert_false(result, "The client should not possess any trust tokens for " + + "https://issuer.example since it has not executed an issuance operation" + + " against that issuer."); + + result = await document.hasTrustToken("https://issuer2.example/"); + assert_false(result, "The client should not possess any trust tokens for" + + " https://issuer2.example since it has not executed an issuance " + + "operation against that issuer."); + + await promise_rejects_dom(t, "OperationError", document.hasTrustToken( + "https://issuer3.example/"), + "The first two hasTrustToken operations associated this top-level" + + " origin with the maximum number of issuers (2), so an attempt to " + + " execute hasTrustToken against another issuer should fail."); + + result = await document.hasTrustToken("https://issuer2.example/"); + assert_false(result, "Since this top-level origin is already associated " + + "with https://issuer2.example, subsequent hasTrustToken operations should " + + "not error out even though the top-level origin is at its " + + "number-of-issuers limit."); + }, "When given a valid, secure origin, hasTrustToken should succeed " + + "unless associating that origin with the top-level domain would exceed " + + "the top-level origin's number-of-associated-issuers limit."); +</script> |