diff options
author | Servo WPT Sync <32481905+servo-wpt-sync@users.noreply.github.com> | 2024-10-06 04:45:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-06 02:45:43 +0000 |
commit | f8933a57353aeca14a6cbc60b3cb0cf98cab6c5d (patch) | |
tree | 78bca9ca575bc712d107e0601471e9a24adb4697 | |
parent | ea84f7b135fa4341908b2000aefe18a6907f2994 (diff) | |
download | servo-f8933a57353aeca14a6cbc60b3cb0cf98cab6c5d.tar.gz servo-f8933a57353aeca14a6cbc60b3cb0cf98cab6c5d.zip |
Sync WPT with upstream (06-10-2024) (#33668)
* Update web-platform-tests to revision b'9448ab31f11e671a8b069e3407b4f6279bea698e'
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
* Remove intermittent failure.
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
---------
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
592 files changed, 12415 insertions, 3945 deletions
diff --git a/tests/wpt/meta-legacy-layout/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html.ini b/tests/wpt/meta-legacy-layout/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html.ini new file mode 100644 index 00000000000..54f0dbef7d1 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html.ini @@ -0,0 +1,7 @@ +[cross-partition-worker-creation.tentative.https.html] + expected: TIMEOUT + [Cross-partition Shared worker shouldn't be created from blob URL.] + expected: TIMEOUT + + [Cross-partition Dedicated worker shouldn't be created from blob URL.] + expected: NOTRUN diff --git a/tests/wpt/meta-legacy-layout/FileAPI/blob/Blob-slice.any.js.ini b/tests/wpt/meta-legacy-layout/FileAPI/blob/Blob-slice.any.js.ini deleted file mode 100644 index 57ce4dda486..00000000000 --- a/tests/wpt/meta-legacy-layout/FileAPI/blob/Blob-slice.any.js.ini +++ /dev/null @@ -1,110 +0,0 @@ -[Blob-slice.any.worker.html] - [Slicing test: slice (2,1).] - expected: FAIL - - [Slicing test: slice (2,2).] - expected: FAIL - - [Slicing test: slice (2,3).] - expected: FAIL - - [Slicing test: slice (3,0).] - expected: FAIL - - [Slicing test: slice (3,1).] - expected: FAIL - - [Slicing test: slice (3,2).] - expected: FAIL - - [Slicing test: slice (3,3).] - expected: FAIL - - [Slicing test: slice (3,4).] - expected: FAIL - - [Slicing test: slice (4,0).] - expected: FAIL - - [Slicing test: slice (4,1).] - expected: FAIL - - [Slicing test: slice (4,2).] - expected: FAIL - - [Slicing test: slice (4,3).] - expected: FAIL - - [Slicing test: slice (4,4).] - expected: FAIL - - [Slicing test: slice (5,1).] - expected: FAIL - - [Slicing test: slice (5,2).] - expected: FAIL - - [Slicing test: slice (6,0).] - expected: FAIL - - [Slicing test: slice (6,1).] - expected: FAIL - - [Slicing test: slice (6,2).] - expected: FAIL - - -[Blob-slice.any.html] - [Slicing test: slice (2,1).] - expected: FAIL - - [Slicing test: slice (2,2).] - expected: FAIL - - [Slicing test: slice (2,3).] - expected: FAIL - - [Slicing test: slice (3,0).] - expected: FAIL - - [Slicing test: slice (3,1).] - expected: FAIL - - [Slicing test: slice (3,2).] - expected: FAIL - - [Slicing test: slice (3,3).] - expected: FAIL - - [Slicing test: slice (3,4).] - expected: FAIL - - [Slicing test: slice (4,0).] - expected: FAIL - - [Slicing test: slice (4,1).] - expected: FAIL - - [Slicing test: slice (4,2).] - expected: FAIL - - [Slicing test: slice (4,3).] - expected: FAIL - - [Slicing test: slice (4,4).] - expected: FAIL - - [Slicing test: slice (5,1).] - expected: FAIL - - [Slicing test: slice (5,2).] - expected: FAIL - - [Slicing test: slice (6,0).] - expected: FAIL - - [Slicing test: slice (6,1).] - expected: FAIL - - [Slicing test: slice (6,2).] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-conditional/container-queries/flex-basis-with-container-type.html.ini b/tests/wpt/meta-legacy-layout/css/css-conditional/container-queries/flex-basis-with-container-type.html.ini new file mode 100644 index 00000000000..fd2cb707c4b --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-conditional/container-queries/flex-basis-with-container-type.html.ini @@ -0,0 +1,2 @@ +[flex-basis-with-container-type.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-flexbox/aspect-ratio-transferred-max-size.html.ini b/tests/wpt/meta-legacy-layout/css/css-flexbox/aspect-ratio-transferred-max-size.html.ini new file mode 100644 index 00000000000..2a8c07e7cbf --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-flexbox/aspect-ratio-transferred-max-size.html.ini @@ -0,0 +1,2 @@ +[aspect-ratio-transferred-max-size.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini index 08810e4a65c..a29b8868eeb 100644 --- a/tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-fonts/generic-family-keywords-001.html.ini @@ -5,9 +5,6 @@ [@font-face matching for quoted and unquoted ui-rounded] expected: FAIL - [@font-face matching for quoted and unquoted ui-monospace] - expected: FAIL - [@font-face matching for quoted and unquoted serif] expected: FAIL @@ -19,3 +16,6 @@ [@font-face matching for quoted and unquoted monospace] expected: FAIL + + [@font-face matching for quoted and unquoted system-ui] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini b/tests/wpt/meta-legacy-layout/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini new file mode 100644 index 00000000000..c53c0174f86 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini @@ -0,0 +1,45 @@ +[gap-decorations-color-valid.html] + [e.style['column-rule-color'\] = "repeat(4, blue)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(3, red green blue)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(1, red green blue yellow)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "red" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(4, cyan)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "green blue" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "red blue green yellow pink" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(3, blue) repeat(4, red)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "red repeat(3, blue) blue repeat(4, red green cyan)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(4, red green cyan) repeat(5, yellow) blue" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(auto, red)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(auto, red green blue)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(auto, red green) red" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(4, blue red green) repeat(auto, red)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "blue repeat(auto, red green) repeat(4, blue red green)" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html.ini new file mode 100644 index 00000000000..2143c01fbdf --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html.ini @@ -0,0 +1,2 @@ +[clip-path-url-reference-empty-while-loading.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html.ini deleted file mode 100644 index 0ee497e3bcd..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[line-clamp-auto-026.tentative.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html.ini deleted file mode 100644 index 00093f16b28..00000000000 --- a/tests/wpt/meta-legacy-layout/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[line-clamp-auto-032.tentative.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html.ini b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html.ini index 99456944d45..01066b3680d 100644 --- a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html.ini @@ -13,3 +13,6 @@ [getComputedStyle() for ::highlight(foo)] expected: FAIL + + [getComputedStyle() for ::search-text] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html.ini b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html.ini index d29df11928e..9fb9c49a30b 100644 --- a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html.ini @@ -28,3 +28,9 @@ [getComputedStyle() for ::highlight(foo) at #target2] expected: FAIL + + [getComputedStyle() for ::search-text at #target1] + expected: FAIL + + [getComputedStyle() for ::search-text at #target2] + expected: FAIL diff --git a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-001.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-search-text.tentative.html.ini index b963cc0fd2c..83fb225c6ac 100644 --- a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-001.tentative.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-search-text.tentative.html.ini @@ -1,4 +1,4 @@ -[highlight-pseudos-computed-001.tentative.html] +[highlight-pseudos-computed-search-text.tentative.html] [getComputedStyle() for ::search-text] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html.ini index a4e4bdc95a6..d656412b418 100644 --- a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html.ini @@ -28,3 +28,9 @@ [getComputedStyle() for ::highlight(foo) at #child2] expected: FAIL + + [getComputedStyle() for ::search-text at #child1] + expected: FAIL + + [getComputedStyle() for ::search-text at #child2] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html.ini b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html.ini index 267ebaa918b..5e40d3bc896 100644 --- a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html.ini @@ -28,3 +28,9 @@ [getComputedStyle() for ::highlight(foo) at #target2] expected: FAIL + + [getComputedStyle() for ::search-text at #target1] + expected: FAIL + + [getComputedStyle() for ::search-text at #target2] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-pseudo/parsing/highlight-pseudos-001.tentative.html.ini b/tests/wpt/meta-legacy-layout/css/css-pseudo/parsing/highlight-pseudos-search-text.tentative.html.ini index b416a0e6b82..baec5e636e4 100644 --- a/tests/wpt/meta-legacy-layout/css/css-pseudo/parsing/highlight-pseudos-001.tentative.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-pseudo/parsing/highlight-pseudos-search-text.tentative.html.ini @@ -1,4 +1,4 @@ -[highlight-pseudos-001.tentative.html] +[highlight-pseudos-search-text.tentative.html] ["::search-text" should be a valid selector] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/height-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/height-interpolation.html.ini index 91770eebef3..4e9354a0d3b 100644 --- a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/height-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/height-interpolation.html.ini @@ -377,90 +377,6 @@ [Web Animations: property <height> from [max-content\] to [fit-content\] at (1.5) should be [fit-content\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (0) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (0) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - [CSS Animations: property <height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/max-height-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/max-height-interpolation.html.ini index 8eaf2327da4..58832208dcc 100644 --- a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/max-height-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/max-height-interpolation.html.ini @@ -302,18 +302,6 @@ [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.3) should be [stretch\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.6) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (1) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (1.5) should be [fit-content\]] - expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (-0.3) should be [stretch\]] expected: FAIL @@ -323,60 +311,6 @@ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.3) should be [stretch\]] expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.6) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (1) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (1.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (-0.3) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (0) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (0.3) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (0.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (0.6) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (1) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (1.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (-0.3) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (0) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (0.3) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (0.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (0.6) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (1) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (1.5) should be [fit-content\]] - expected: FAIL - [CSS Animations: property <max-height> from [stretch\] to [fit-content\] at (-0.3) should be [stretch\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/max-width-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/max-width-interpolation.html.ini index c958add5ba3..2ae4eda83cc 100644 --- a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/max-width-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/max-width-interpolation.html.ini @@ -242,18 +242,6 @@ [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.3) should be [stretch\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (1.5) should be [none\]] - expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (-0.3) should be [stretch\]] expected: FAIL @@ -263,60 +251,6 @@ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.3) should be [stretch\]] expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (1.5) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (-0.3) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (0) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (0.3) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (1.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (-0.3) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (0) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (0.3) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (1.5) should be [none\]] - expected: FAIL - [CSS Animations: property <max-width> from [stretch\] to [none\] at (-0.3) should be [stretch\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/min-height-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/min-height-interpolation.html.ini index c30064e42fd..7258b235c2b 100644 --- a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/min-height-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/min-height-interpolation.html.ini @@ -362,18 +362,6 @@ [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] expected: FAIL @@ -383,60 +371,6 @@ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - [CSS Animations: property <min-height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/min-width-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/min-width-interpolation.html.ini index 435b28a7aec..e4bceb7f4ba 100644 --- a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/min-width-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/min-width-interpolation.html.ini @@ -242,18 +242,6 @@ [CSS Transitions with transition-behavior:allow-discrete: property <min-width> from [0px\] to [stretch\] at (0.3) should be [0px\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <min-width> from [0px\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-width> from [0px\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-width> from [0px\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-width> from [0px\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-width> from [0px\] to [stretch\] at (-0.3) should be [0px\]] expected: FAIL @@ -263,60 +251,6 @@ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-width> from [0px\] to [stretch\] at (0.3) should be [0px\]] expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-width> from [0px\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-width> from [0px\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-width> from [0px\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-width> from [0px\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-width> from [0px\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-width> from [0px\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-width> from [0px\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-width> from [0px\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-width> from [0px\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-width> from [0px\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-width> from [0px\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-width> from [0px\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-width> from [0px\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-width> from [0px\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-width> from [0px\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-width> from [0px\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-width> from [0px\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-width> from [0px\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - [CSS Animations: property <min-width> from [0px\] to [stretch\] at (-0.3) should be [0px\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/width-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/width-interpolation.html.ini index da3bd55134b..f79e548f7f3 100644 --- a/tests/wpt/meta-legacy-layout/css/css-sizing/animation/width-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-sizing/animation/width-interpolation.html.ini @@ -311,90 +311,6 @@ [Web Animations: property <width> from [auto\] to [fit-content\] at (1.5) should be [fit-content\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (-0.3) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (0) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (0.3) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (-0.3) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (0) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (0.3) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - [CSS Animations: property <width> from [stretch\] to [auto\] at (-0.3) should be [stretch\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-ui/animation/caret-animation-parsing.html.ini b/tests/wpt/meta-legacy-layout/css/css-ui/animation/caret-animation-parsing.html.ini new file mode 100644 index 00000000000..e2e52fff6fb --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/css-ui/animation/caret-animation-parsing.html.ini @@ -0,0 +1,18 @@ +[caret-animation-parsing.html] + [e.style['caret-animation'\] = "initial" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "inherit" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "unset" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "revert" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "auto" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "manual" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-height-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-height-interpolation.html.ini index f11bb6ed9b0..e4edd08848a 100644 --- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-height-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-height-interpolation.html.ini @@ -149,111 +149,6 @@ [Web Animations: property <height> from [max-content\] to [fit-content\] at (1.5) should be [fit-content\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (0) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (0) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Animations: property <height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] - expected: FAIL - - [CSS Animations: property <height> from [max-content\] to [stretch\] at (0) should be [max-content\]] - expected: FAIL - - [CSS Animations: property <height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] - expected: FAIL - - [CSS Animations: property <height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Animations: property <height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Animations: property <height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Animations: property <height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - [Web Animations: property <height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-max-height-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-max-height-interpolation.html.ini index ade8b9fa430..7ce4e81a18e 100644 --- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-max-height-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-max-height-interpolation.html.ini @@ -248,18 +248,6 @@ [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.3) should be [stretch\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.6) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (1) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (1.5) should be [fit-content\]] - expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (-0.3) should be [stretch\]] expected: FAIL @@ -269,60 +257,6 @@ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.3) should be [stretch\]] expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (0.6) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (1) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-height> from [stretch\] to [fit-content\] at (1.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (-0.3) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (0) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (0.3) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (0.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (0.6) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (1) should be [fit-content\]] - expected: FAIL - - [CSS Transitions: property <max-height> from [stretch\] to [fit-content\] at (1.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (-0.3) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (0) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (0.3) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (0.5) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (0.6) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (1) should be [fit-content\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-height> from [stretch\] to [fit-content\] at (1.5) should be [fit-content\]] - expected: FAIL - [CSS Animations: property <max-height> from [stretch\] to [fit-content\] at (-0.3) should be [stretch\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-max-width-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-max-width-interpolation.html.ini index 5fe600a79ac..19c91574c31 100644 --- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-max-width-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-max-width-interpolation.html.ini @@ -188,18 +188,6 @@ [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.3) should be [stretch\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <max-width> from [stretch\] to [none\] at (1.5) should be [none\]] - expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (-0.3) should be [stretch\]] expected: FAIL @@ -209,60 +197,6 @@ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.3) should be [stretch\]] expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <max-width> from [stretch\] to [none\] at (1.5) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (-0.3) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (0) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (0.3) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions: property <max-width> from [stretch\] to [none\] at (1.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (-0.3) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (0) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (0.3) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (0.5) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (0.6) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (1) should be [none\]] - expected: FAIL - - [CSS Transitions with transition: all: property <max-width> from [stretch\] to [none\] at (1.5) should be [none\]] - expected: FAIL - [CSS Animations: property <max-width> from [stretch\] to [none\] at (-0.3) should be [stretch\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-min-height-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-min-height-interpolation.html.ini index 4b06d92eaf6..77ad852894f 100644 --- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-min-height-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-min-height-interpolation.html.ini @@ -284,18 +284,6 @@ [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] expected: FAIL @@ -305,60 +293,6 @@ [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.3) should be [max-content\]] expected: FAIL - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <min-height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions: property <min-height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (0.5) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (0.6) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (1) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition: all: property <min-height> from [max-content\] to [stretch\] at (1.5) should be [stretch\]] - expected: FAIL - [CSS Animations: property <min-height> from [max-content\] to [stretch\] at (-0.3) should be [max-content\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-min-width-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-min-width-interpolation.html.ini index 1e50c658869..b4da72f0f64 100644 --- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-min-width-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-min-width-interpolation.html.ini @@ -197,24 +197,6 @@ [CSS Transitions with transition: all: property <min-width> from [0px\] to [stretch\] at (1.5) should be [calc-size(stretch, 0px + size * 1.5)\]] expected: FAIL - [CSS Animations: property <min-width> from [0px\] to [stretch\] at (-0.3) should be [calc-size(stretch, 0px + size * -0.3)\]] - expected: FAIL - - [CSS Animations: property <min-width> from [0px\] to [stretch\] at (0) should be [calc-size(stretch, 0px + size * 0)\]] - expected: FAIL - - [CSS Animations: property <min-width> from [0px\] to [stretch\] at (0.3) should be [calc-size(stretch, 0px + size * 0.3)\]] - expected: FAIL - - [CSS Animations: property <min-width> from [0px\] to [stretch\] at (0.6) should be [calc-size(stretch, 0px + size * 0.6)\]] - expected: FAIL - - [CSS Animations: property <min-width> from [0px\] to [stretch\] at (1) should be [calc-size(stretch, 0px + size * 1)\]] - expected: FAIL - - [CSS Animations: property <min-width> from [0px\] to [stretch\] at (1.5) should be [calc-size(stretch, 0px + size * 1.5)\]] - expected: FAIL - [Web Animations: property <min-width> from [0px\] to [stretch\] at (-0.3) should be [calc-size(stretch, 0px + size * -0.3)\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-width-interpolation.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-width-interpolation.html.ini index a9f4baabd9e..8061d226850 100644 --- a/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-width-interpolation.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-values/calc-size/animation/interpolate-size-width-interpolation.html.ini @@ -74,111 +74,6 @@ [Web Animations: property <width> from [auto\] to [fit-content\] at (1.5) should be [fit-content\]] expected: FAIL - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-behavior:allow-discrete: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition-property:all and transition-behavor:allow-discrete: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (-0.3) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (0) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (0.3) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Transitions: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (-0.3) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (0) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (0.3) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Transitions with transition: all: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - - [CSS Animations: property <width> from [stretch\] to [auto\] at (-0.3) should be [stretch\]] - expected: FAIL - - [CSS Animations: property <width> from [stretch\] to [auto\] at (0) should be [stretch\]] - expected: FAIL - - [CSS Animations: property <width> from [stretch\] to [auto\] at (0.3) should be [stretch\]] - expected: FAIL - - [CSS Animations: property <width> from [stretch\] to [auto\] at (0.5) should be [auto\]] - expected: FAIL - - [CSS Animations: property <width> from [stretch\] to [auto\] at (0.6) should be [auto\]] - expected: FAIL - - [CSS Animations: property <width> from [stretch\] to [auto\] at (1) should be [auto\]] - expected: FAIL - - [CSS Animations: property <width> from [stretch\] to [auto\] at (1.5) should be [auto\]] - expected: FAIL - [Web Animations: property <width> from [stretch\] to [auto\] at (-0.3) should be [stretch\]] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-values/vh_not_refreshing_on_chrome.html.ini b/tests/wpt/meta-legacy-layout/css/css-values/vh_not_refreshing_on_chrome.html.ini index 9bafc27593e..599b3e07f8d 100644 --- a/tests/wpt/meta-legacy-layout/css/css-values/vh_not_refreshing_on_chrome.html.ini +++ b/tests/wpt/meta-legacy-layout/css/css-values/vh_not_refreshing_on_chrome.html.ini @@ -1,3 +1,2 @@ [vh_not_refreshing_on_chrome.html] bug: https://github.com/servo/servo/issues/8984 - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html.ini b/tests/wpt/meta-legacy-layout/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html.ini new file mode 100644 index 00000000000..5447455d504 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html.ini @@ -0,0 +1,2 @@ +[host-has-shadow-tree-element-at-nonsubject-position.html] + expected: ERROR diff --git a/tests/wpt/meta-legacy-layout/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html.ini b/tests/wpt/meta-legacy-layout/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html.ini new file mode 100644 index 00000000000..d7a08061d8f --- /dev/null +++ b/tests/wpt/meta-legacy-layout/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html.ini @@ -0,0 +1,2 @@ +[host-has-shadow-tree-element-at-subject-position.html] + expected: ERROR diff --git a/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/listed-form-element-reset.html.ini b/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/listed-form-element-reset.html.ini new file mode 100644 index 00000000000..e4667498992 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/listed-form-element-reset.html.ini @@ -0,0 +1,3 @@ +[listed-form-element-reset.html] + [Listed form element form owner is reset when a new form is moved closer before the listed element] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html.ini b/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html.ini new file mode 100644 index 00000000000..0fb300926bd --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html.ini @@ -0,0 +1,2 @@ +[preserve-render-blocking-script.html] + expected: ERROR diff --git a/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html.ini b/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html.ini new file mode 100644 index 00000000000..8bc8c59c036 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html.ini @@ -0,0 +1,2 @@ +[preserve-render-blocking-style.html] + expected: ERROR diff --git a/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/relevant-mutations.html.ini b/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/relevant-mutations.html.ini new file mode 100644 index 00000000000..d3be9248876 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/dom/nodes/moveBefore/tentative/relevant-mutations.html.ini @@ -0,0 +1,6 @@ +[relevant-mutations.html] + [Moving <source> out of <picture> triggers a relevant mutation on sibling <img>] + expected: FAIL + + [Moving <img> into a <picture> triggers a relevant mutation on the <img>, loading <source>] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/data-urls/processing.any.js.ini b/tests/wpt/meta-legacy-layout/fetch/data-urls/processing.any.js.ini index 1eb903db554..e2cb6baee6d 100644 --- a/tests/wpt/meta-legacy-layout/fetch/data-urls/processing.any.js.ini +++ b/tests/wpt/meta-legacy-layout/fetch/data-urls/processing.any.js.ini @@ -2,17 +2,11 @@ ["data:†,X"] expected: FAIL - ["data:†,X"] - expected: FAIL - [processing.any.html] ["data:†,X"] expected: FAIL - ["data:†,X"] - expected: FAIL - [processing.any.serviceworker.html] expected: ERROR diff --git a/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini b/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini index f94dc94caaa..304848598dd 100644 --- a/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini +++ b/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-font-face.sub.tentative.html.ini @@ -23,8 +23,8 @@ [sec-fetch-dest - Not sent to non-trustworthy same-origin destination] expected: FAIL - [sec-fetch-user - Not sent to non-trustworthy cross-site destination] + [sec-fetch-dest - Not sent to non-trustworthy same-site destination] expected: FAIL - [sec-fetch-dest - Not sent to non-trustworthy same-site destination] + [sec-fetch-mode - Not sent to non-trustworthy cross-site destination] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-images.sub.tentative.html.ini index 36a410bfecb..f9de5391ad6 100644 --- a/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-images.sub.tentative.html.ini +++ b/tests/wpt/meta-legacy-layout/fetch/metadata/generated/css-images.sub.tentative.html.ini @@ -146,6 +146,3 @@ [list-style-image sec-fetch-site - HTTPS downgrade-upgrade] expected: FAIL - - [border-image sec-fetch-site - HTTPS downgrade (header not sent)] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index 1bca09f21d6..530635e744f 100644 --- a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -4,6 +4,3 @@ [Navigating to a different document with link click] expected: FAIL - - [Navigating to a different document with form submission] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini deleted file mode 100644 index 4ecd6d9f753..00000000000 --- a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[navigation-unload-cross-origin.sub.window.html] - [Cross-origin navigation started from unload handler must be ignored] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini new file mode 100644 index 00000000000..7dc346632a4 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini @@ -0,0 +1,3 @@ +[navigation-unload-same-origin.window.html] + [Same-origin navigation started from unload handler must be ignored] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/meta-legacy-layout/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini new file mode 100644 index 00000000000..7a5fcb79165 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini @@ -0,0 +1,3 @@ +[traverse_the_history_5.html] + [Multiple history traversals, last would be aborted] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.colorMatrix.tentative.html.ini index e2f8f0a630a..663b846985e 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.worker.js.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.colorMatrix.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.colorMatrix.worker.html] +[2d.filter.layers.colorMatrix.tentative.html] [Test the functionality of ColorMatrix filters] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.html.ini deleted file mode 100644 index 28eee7745b4..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.discrete.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini new file mode 100644 index 00000000000..13ba229fab2 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.discrete.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.html.ini deleted file mode 100644 index 59b029b6229..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.gamma.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini new file mode 100644 index 00000000000..162a33cac46 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.gamma.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.html.ini deleted file mode 100644 index e09298d1220..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.identity.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini new file mode 100644 index 00000000000..ddb1c12c339 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.identity.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.html.ini deleted file mode 100644 index 5a9b35c68fa..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.linear.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini new file mode 100644 index 00000000000..5afc47edd7e --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.linear.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.html.ini deleted file mode 100644 index 3ec9d635126..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.table.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini new file mode 100644 index 00000000000..96ec16d1e6b --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.table.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html.ini index d868cd8c204..c7bf1cb5be1 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.convolveMatrix.exceptions.html] +[2d.filter.layers.convolveMatrix.exceptions.tentative.html] [Test exceptions on CanvasFilter() convolveMatrix] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.tentative.html.ini index 7d7a9154df7..f21bd3c3a70 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.dropShadow.exceptions.html] +[2d.filter.layers.dropShadow.exceptions.tentative.html] [Test exceptions on CanvasFilter() dropShadow object] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.html.ini deleted file mode 100644 index 7369fa6d232..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.dropShadow.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative.html.ini new file mode 100644 index 00000000000..1ce7d57bea8 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.dropShadow.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.gaussianBlur.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.gaussianBlur.html.ini deleted file mode 100644 index 98f326c567b..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.gaussianBlur.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.gaussianBlur.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative.html.ini new file mode 100644 index 00000000000..a52f916d74f --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.gaussianBlur.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.tentative.html.ini index e16419cdde1..746fe06a9f8 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.turbulence.inputTypes.html] +[2d.filter.layers.turbulence.inputTypes.tentative.html] [Test exceptions on CanvasFilter() turbulence object] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini index b44bcf4550f..1cb6ce30242 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini @@ -5,3 +5,6 @@ [createImageBitmap from a Blob, and drawImage on the created ImageBitmap with colorSpaceConversion: none] expected: FAIL + + [createImageBitmap from a Video, and drawImage on the created ImageBitmap with colorSpaceConversion: none] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini index 18fa4ea84ea..c94490ae5ee 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini @@ -1,5 +1,5 @@ [createImageBitmap-drawImage.html] - expected: TIMEOUT + expected: ERROR [createImageBitmap from an OffscreenCanvas resized, and drawImage on the created ImageBitmap] expected: NOTRUN diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html.ini index 886e606f855..56d7b5fb58d 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html.ini @@ -17,3 +17,12 @@ [createImageBitmap with EXIF rotation, imageOrientation from-image, and cropping] expected: TIMEOUT + + [createImageBitmap with EXIF rotation, imageOrientation from-image, no cropping, and resize] + expected: TIMEOUT + + [createImageBitmap with EXIF rotation, imageOrientation flipY, cropping, and resize] + expected: TIMEOUT + + [createImageBitmap with EXIF rotation, imageOrientation flipY, cropping, and nonuniform resize] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini index a4620cd6816..f08e8a2918a 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini @@ -1,5 +1,5 @@ [createImageBitmap-flipY.html] - expected: TIMEOUT + expected: ERROR [createImageBitmap from a vector SVGImageElement imageOrientation: "none", and drawImage on the created ImageBitmap] expected: NOTRUN diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini index 8daf97ba765..673fc1e4ffd 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini @@ -1,5 +1,5 @@ [createImageBitmap-invalid-args.html] - expected: TIMEOUT + expected: ERROR [createImageBitmap with a vector HTMLImageElement source and sw set to 0] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini new file mode 100644 index 00000000000..469ece4b78a --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-exceptions.tentative.html] + [Check that TextMetrics::getTextClusters() throws when using invalid indexes.] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html.ini new file mode 100644 index 00000000000..fbb87063451 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-split.tentative.html] + [Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together.] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/canvas-host/2d.canvas.host.size.attributes.parse.minus.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/canvas-host/2d.canvas.host.size.attributes.parse.minus.worker.js.ini index ffc69c8722c..f40514bce36 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/canvas-host/2d.canvas.host.size.attributes.parse.minus.worker.js.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/canvas-host/2d.canvas.host.size.attributes.parse.minus.worker.js.ini @@ -1,4 +1,3 @@ [2d.canvas.host.size.attributes.parse.minus.worker.html] - expected: CRASH [Parsing of non-negative integers] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.colorMatrix.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.html.ini index 9b2b4119845..663b846985e 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.colorMatrix.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.colorMatrix.html] +[2d.filter.layers.colorMatrix.tentative.html] [Test the functionality of ColorMatrix filters] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.js.ini new file mode 100644 index 00000000000..4df84f50dd6 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.filter.layers.colorMatrix.tentative.worker.html] + [Test the functionality of ColorMatrix filters] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.html.ini deleted file mode 100644 index 28eee7745b4..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.discrete.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini new file mode 100644 index 00000000000..13ba229fab2 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.discrete.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.w.html.ini new file mode 100644 index 00000000000..16e81be271d --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.discrete.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.w.html.ini deleted file mode 100644 index b01f46aed3d..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.discrete.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.html.ini deleted file mode 100644 index 59b029b6229..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.gamma.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini new file mode 100644 index 00000000000..162a33cac46 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.gamma.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.w.html.ini new file mode 100644 index 00000000000..92fb2a5b198 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.gamma.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.w.html.ini deleted file mode 100644 index 00e0f519dbd..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.gamma.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.html.ini deleted file mode 100644 index e09298d1220..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.identity.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini new file mode 100644 index 00000000000..ddb1c12c339 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.identity.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.w.html.ini new file mode 100644 index 00000000000..8ebdd1c0a3c --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.identity.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.w.html.ini deleted file mode 100644 index 93ebc7a0293..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.identity.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.html.ini deleted file mode 100644 index 5a9b35c68fa..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.linear.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini new file mode 100644 index 00000000000..5afc47edd7e --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.linear.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.w.html.ini new file mode 100644 index 00000000000..84050348f62 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.linear.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.w.html.ini deleted file mode 100644 index 38923d05ade..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.linear.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.html.ini deleted file mode 100644 index 3ec9d635126..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.table.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini new file mode 100644 index 00000000000..96ec16d1e6b --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.table.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.w.html.ini new file mode 100644 index 00000000000..57e743307d5 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.table.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.w.html.ini deleted file mode 100644 index a5076d74370..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.table.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html.ini index a1ae7043728..c7bf1cb5be1 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.worker.js.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.convolveMatrix.exceptions.worker.html] +[2d.filter.layers.convolveMatrix.exceptions.tentative.html] [Test exceptions on CanvasFilter() convolveMatrix] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js.ini new file mode 100644 index 00000000000..bcb0c3cbb9e --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.filter.layers.convolveMatrix.exceptions.tentative.worker.html] + [Test exceptions on CanvasFilter() convolveMatrix] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.html.ini index 5e424dff115..f21bd3c3a70 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.worker.js.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.dropShadow.exceptions.worker.html] +[2d.filter.layers.dropShadow.exceptions.tentative.html] [Test exceptions on CanvasFilter() dropShadow object] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.js.ini new file mode 100644 index 00000000000..50b1944c836 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.filter.layers.dropShadow.exceptions.tentative.worker.html] + [Test exceptions on CanvasFilter() dropShadow object] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.w.html.ini new file mode 100644 index 00000000000..03194c83ee7 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.dropShadow.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.w.html.ini deleted file mode 100644 index 4c282823717..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.dropShadow.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.html.ini deleted file mode 100644 index 98f326c567b..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.gaussianBlur.html] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.html.ini new file mode 100644 index 00000000000..a52f916d74f --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.gaussianBlur.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.w.html.ini new file mode 100644 index 00000000000..29156648497 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.gaussianBlur.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.w.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.w.html.ini deleted file mode 100644 index a15fb4e1371..00000000000 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.gaussianBlur.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.html.ini index e16419cdde1..746fe06a9f8 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.html.ini +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.turbulence.inputTypes.html] +[2d.filter.layers.turbulence.inputTypes.tentative.html] [Test exceptions on CanvasFilter() turbulence object] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.js.ini new file mode 100644 index 00000000000..136dcf478d2 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.filter.layers.turbulence.inputTypes.tentative.worker.html] + [Test exceptions on CanvasFilter() turbulence object] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini new file mode 100644 index 00000000000..469ece4b78a --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-exceptions.tentative.html] + [Check that TextMetrics::getTextClusters() throws when using invalid indexes.] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js.ini new file mode 100644 index 00000000000..51c88622854 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-exceptions.tentative.worker.html] + [Check that TextMetrics::getTextClusters() throws when using invalid indexes.] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html.ini new file mode 100644 index 00000000000..fbb87063451 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-split.tentative.html] + [Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together.] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js.ini b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js.ini new file mode 100644 index 00000000000..f72d6ce36d3 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-split.tentative.worker.html] + [Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together.] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html.ini new file mode 100644 index 00000000000..6be756afbd4 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html.ini @@ -0,0 +1,3 @@ +[embed-document-under-content-visibility-focus.html] + [ensure onload happens] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html.ini new file mode 100644 index 00000000000..acfb4e31c9d --- /dev/null +++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html.ini @@ -0,0 +1,3 @@ +[embed-document-under-content-visibility-gbcr.html] + [ensure onload happens] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index 66e6567502d..25d9964f057 100644 --- a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,5 +1,4 @@ [iframe_sandbox_popups_escaping-1.html] type: testharness - expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini index 4c03d0c5c3d..76e34322dca 100644 --- a/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini +++ b/tests/wpt/meta-legacy-layout/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini @@ -2,4 +2,4 @@ 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/meta-legacy-layout/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini b/tests/wpt/meta-legacy-layout/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini deleted file mode 100644 index f9a4f08cd70..00000000000 --- a/tests/wpt/meta-legacy-layout/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[module-tla-delayed.html] - [document.write in an imported module] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/selection/contenteditable/modify-around-non-editable-span.html.ini b/tests/wpt/meta-legacy-layout/selection/contenteditable/modify-around-non-editable-span.html.ini new file mode 100644 index 00000000000..32817c673a9 --- /dev/null +++ b/tests/wpt/meta-legacy-layout/selection/contenteditable/modify-around-non-editable-span.html.ini @@ -0,0 +1,48 @@ +[modify-around-non-editable-span.html] + [getSelection().modify("move", "forward", "character") when " [\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "forward", "character") when "editable[\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "right", "character") when " [\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "right", "character") when "editable[\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "backward", "character") when " <span contenteditable=false>...</span>[\]editable"] + expected: FAIL + + [getSelection().modify("move", "backward", "character") when "editable<span contenteditable=false>...</span>[\] "] + expected: FAIL + + [getSelection().modify("move", "left", "character") when " <span contenteditable=false>...</span>[\]editable"] + expected: FAIL + + [getSelection().modify("move", "left", "character") when "editable<span contenteditable=false>...</span>[\] "] + expected: FAIL + + [getSelection().modify("move", "forward", "character") after getSelection().selectAllChildren(editingHost) when " [\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "forward", "character") after getSelection().selectAllChildren(editingHost) when "editable[\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "right", "character") after getSelection().selectAllChildren(editingHost) when " [\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "right", "character") after getSelection().selectAllChildren(editingHost) when "editable[\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "backward", "character") after getSelection().selectAllChildren(editingHost) when " <span contenteditable=false>...</span>[\]editable"] + expected: FAIL + + [getSelection().modify("move", "backward", "character") after getSelection().selectAllChildren(editingHost) when "editable<span contenteditable=false>...</span>[\] "] + expected: FAIL + + [getSelection().modify("move", "left", "character") after getSelection().selectAllChildren(editingHost) when " <span contenteditable=false>...</span>[\]editable"] + expected: FAIL + + [getSelection().modify("move", "left", "character") after getSelection().selectAllChildren(editingHost) when "editable<span contenteditable=false>...</span>[\] "] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/selection/idlharness.window.js.ini b/tests/wpt/meta-legacy-layout/selection/idlharness.window.js.ini index adc033c4f6d..c8e15e841ca 100644 --- a/tests/wpt/meta-legacy-layout/selection/idlharness.window.js.ini +++ b/tests/wpt/meta-legacy-layout/selection/idlharness.window.js.ini @@ -31,3 +31,12 @@ [Selection interface: calling getComposedRanges(ShadowRoot...) on getSelection() with too few arguments must throw TypeError] expected: FAIL + + [Selection interface: operation getComposedRanges(optional GetComposedRangesOptions)] + expected: FAIL + + [Selection interface: getSelection() must inherit property "getComposedRanges(optional GetComposedRangesOptions)" with the proper type] + expected: FAIL + + [Selection interface: calling getComposedRanges(optional GetComposedRangesOptions) on getSelection() with too few arguments must throw TypeError] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/wasm/webapi/status.any.js.ini b/tests/wpt/meta-legacy-layout/wasm/webapi/status.any.js.ini index 4e59b48d12b..17d77d9c842 100644 --- a/tests/wpt/meta-legacy-layout/wasm/webapi/status.any.js.ini +++ b/tests/wpt/meta-legacy-layout/wasm/webapi/status.any.js.ini @@ -1,46 +1,4 @@ [status.any.html] - [Response with status 300: instantiateStreaming] - expected: FAIL - - [Response with status 500: instantiateStreaming] - expected: FAIL - - [Response with status 404: compileStreaming] - expected: FAIL - - [Response with status 500: compileStreaming] - expected: FAIL - - [Response with status 300: compileStreaming] - expected: FAIL - - [Response with status 400: compileStreaming] - expected: FAIL - - [Response with status 400: instantiateStreaming] - expected: FAIL - - [Response with status 404: instantiateStreaming] - expected: FAIL - - [Response with status 600: compileStreaming] - expected: FAIL - - [Response with status 700: compileStreaming] - expected: FAIL - - [Response with status 999: compileStreaming] - expected: FAIL - - [Response with status 600: instantiateStreaming] - expected: FAIL - - [Response with status 700: instantiateStreaming] - expected: FAIL - - [Response with status 999: instantiateStreaming] - expected: FAIL - [status.any.serviceworker.html] expected: ERROR @@ -55,44 +13,3 @@ [status.any.worker.html] - [Response with status 300: instantiateStreaming] - expected: FAIL - - [Response with status 500: instantiateStreaming] - expected: FAIL - - [Response with status 404: compileStreaming] - expected: FAIL - - [Response with status 500: compileStreaming] - expected: FAIL - - [Response with status 300: compileStreaming] - expected: FAIL - - [Response with status 400: compileStreaming] - expected: FAIL - - [Response with status 400: instantiateStreaming] - expected: FAIL - - [Response with status 404: instantiateStreaming] - expected: FAIL - - [Response with status 600: compileStreaming] - expected: FAIL - - [Response with status 700: compileStreaming] - expected: FAIL - - [Response with status 999: compileStreaming] - expected: FAIL - - [Response with status 600: instantiateStreaming] - expected: FAIL - - [Response with status 700: instantiateStreaming] - expected: FAIL - - [Response with status 999: instantiateStreaming] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/webstorage/symbol-props.window.js.ini b/tests/wpt/meta-legacy-layout/webstorage/symbol-props.window.js.ini index 5b87ea15f62..bc20460625b 100644 --- a/tests/wpt/meta-legacy-layout/webstorage/symbol-props.window.js.ini +++ b/tests/wpt/meta-legacy-layout/webstorage/symbol-props.window.js.ini @@ -1,2 +1,6 @@ [symbol-props.window.html] - expected: CRASH + [localStorage: defineProperty not configurable] + expected: FAIL + + [sessionStorage: defineProperty not configurable] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/workers/semantics/run-a-worker/003.html.ini b/tests/wpt/meta-legacy-layout/workers/semantics/run-a-worker/003.html.ini index e083d83077b..f4318e59a8d 100644 --- a/tests/wpt/meta-legacy-layout/workers/semantics/run-a-worker/003.html.ini +++ b/tests/wpt/meta-legacy-layout/workers/semantics/run-a-worker/003.html.ini @@ -1,4 +1,5 @@ [003.html] type: testharness + expected: ERROR [shared] expected: FAIL diff --git a/tests/wpt/meta/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html.ini b/tests/wpt/meta/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html.ini new file mode 100644 index 00000000000..54f0dbef7d1 --- /dev/null +++ b/tests/wpt/meta/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html.ini @@ -0,0 +1,7 @@ +[cross-partition-worker-creation.tentative.https.html] + expected: TIMEOUT + [Cross-partition Shared worker shouldn't be created from blob URL.] + expected: TIMEOUT + + [Cross-partition Dedicated worker shouldn't be created from blob URL.] + expected: NOTRUN diff --git a/tests/wpt/meta/FileAPI/blob/Blob-slice.any.js.ini b/tests/wpt/meta/FileAPI/blob/Blob-slice.any.js.ini deleted file mode 100644 index 57ce4dda486..00000000000 --- a/tests/wpt/meta/FileAPI/blob/Blob-slice.any.js.ini +++ /dev/null @@ -1,110 +0,0 @@ -[Blob-slice.any.worker.html] - [Slicing test: slice (2,1).] - expected: FAIL - - [Slicing test: slice (2,2).] - expected: FAIL - - [Slicing test: slice (2,3).] - expected: FAIL - - [Slicing test: slice (3,0).] - expected: FAIL - - [Slicing test: slice (3,1).] - expected: FAIL - - [Slicing test: slice (3,2).] - expected: FAIL - - [Slicing test: slice (3,3).] - expected: FAIL - - [Slicing test: slice (3,4).] - expected: FAIL - - [Slicing test: slice (4,0).] - expected: FAIL - - [Slicing test: slice (4,1).] - expected: FAIL - - [Slicing test: slice (4,2).] - expected: FAIL - - [Slicing test: slice (4,3).] - expected: FAIL - - [Slicing test: slice (4,4).] - expected: FAIL - - [Slicing test: slice (5,1).] - expected: FAIL - - [Slicing test: slice (5,2).] - expected: FAIL - - [Slicing test: slice (6,0).] - expected: FAIL - - [Slicing test: slice (6,1).] - expected: FAIL - - [Slicing test: slice (6,2).] - expected: FAIL - - -[Blob-slice.any.html] - [Slicing test: slice (2,1).] - expected: FAIL - - [Slicing test: slice (2,2).] - expected: FAIL - - [Slicing test: slice (2,3).] - expected: FAIL - - [Slicing test: slice (3,0).] - expected: FAIL - - [Slicing test: slice (3,1).] - expected: FAIL - - [Slicing test: slice (3,2).] - expected: FAIL - - [Slicing test: slice (3,3).] - expected: FAIL - - [Slicing test: slice (3,4).] - expected: FAIL - - [Slicing test: slice (4,0).] - expected: FAIL - - [Slicing test: slice (4,1).] - expected: FAIL - - [Slicing test: slice (4,2).] - expected: FAIL - - [Slicing test: slice (4,3).] - expected: FAIL - - [Slicing test: slice (4,4).] - expected: FAIL - - [Slicing test: slice (5,1).] - expected: FAIL - - [Slicing test: slice (5,2).] - expected: FAIL - - [Slicing test: slice (6,0).] - expected: FAIL - - [Slicing test: slice (6,1).] - expected: FAIL - - [Slicing test: slice (6,2).] - expected: FAIL diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index ff11f20b1a8..77470263559 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -42,13 +42,6 @@ {} ] ], - "aom-in-destroyed-iframe.html": [ - "c8f0aca12ebbf8719228e0d857d8e5c799e3b669", - [ - null, - {} - ] - ], "append-image-using-illegal-map.html": [ "c78e74eeed7b6dfee3b267c4b81bd2f511923de9", [ @@ -175,34 +168,6 @@ {} ] ], - "computed-accessible-child-of-pseudo-element.html": [ - "b00ee7ba56f2caee01532f62df2dc2d81f8b3bbf", - [ - null, - {} - ] - ], - "computed-accessible-text-node.html": [ - "47183ce6ec64a630f0a6c78102337ea3f0667b7d", - [ - null, - {} - ] - ], - "computed-node-checked.html": [ - "47e715b233884fad02d03a111fe03448b1faa92e", - [ - null, - {} - ] - ], - "computed-node.html": [ - "159b217a086c0a8bbe246a976c0ad8f6c8a57dc8", - [ - null, - {} - ] - ], "content-visibility-focusable-scroller-descendant.html": [ "e9b027b5c7b94f22d17c1e726a819bb9b573612d", [ @@ -238,13 +203,6 @@ {} ] ], - "displaylocked-serialize.html": [ - "8dd8efaa6af5f48a4148dc142348888b129e53bf", - [ - null, - {} - ] - ], "first-letter-inside-before-pseudo.html": [ "d4eb11a76dbcf646ad2c2a2fb6728a91e2233cae", [ @@ -427,13 +385,6 @@ {} ] ], - "serialize-with-no-document.html": [ - "f7719cf2ff1838b1125e08c5f86cf57910732c0e", - [ - null, - {} - ] - ], "slot-assignment-lockup.html": [ "85b6c9294a5eaa86c445607b552ece296c509614", [ @@ -5632,6 +5583,13 @@ {} ] ], + "feimage-svg-image-with-nested-data-url-crash.html": [ + "54ae7f02a096b8d38ddd06776ad339e3463f286e", + [ + null, + {} + ] + ], "feimage-target-child-reference-crash.html": [ "eef96ef094d913fb9423616af9177ddfd932796c", [ @@ -35629,6 +35587,19 @@ } ] ], + "destination-backslash-crash-print.html": [ + "e3abfd6ee49bf37f79ab5df8826d53a65067124a", + [ + null, + [ + [ + "/css/reference/blank.html", + "!=" + ] + ], + {} + ] + ], "emoji-print.html": [ "689c337acba6f84d088b3e8ed5cffe9c3ef6dd5c", [ @@ -152812,6 +152783,19 @@ {} ] ], + "flex-basis-with-container-type.html": [ + "ebe95e578f16a7f542ef7894f71ca6b07caed68b", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "inline-size-bfc-floats.html": [ "f4d5af65f56a5c8f8e182e7167177c9ef48b7568", [ @@ -167235,6 +167219,19 @@ {} ] ], + "aspect-ratio-transferred-max-size.html": [ + "3331e5fabef369880f0b5e074fecb6464926ffb8", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "auto-height-column-with-border-and-padding.html": [ "2151c21f61e915883a11bb78d7f785bdc5f5606c", [ @@ -167300,6 +167297,19 @@ {} ] ], + "baseline-outside-flex-item.html": [ + "feb1930df46b6b11455f456aa71ef1f2c8b4c09e", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "baseline-synthesis-001.html": [ "b1fa84c94caef8a350391c011c45a0431aedf1c6", [ @@ -199684,12 +199694,32 @@ ] ], "initial-letter-raise-initial.html": [ - "4b8e81453b74bb0fdf68fc5631b289e32ddaf2cb", + "ec2ec6bdc07983435ffc4125fde58a296fb06ec3", [ - null, + "css/css-inline/initial-letter/initial-letter-raise-initial.html?class=", + [ + [ + "/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html?class=", + "==" + ] + ], + {} + ], + [ + "css/css-inline/initial-letter/initial-letter-raise-initial.html?class=no-ascent", + [ + [ + "/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html?class=no-ascent", + "==" + ] + ], + {} + ], + [ + "css/css-inline/initial-letter/initial-letter-raise-initial.html?class=no-descent", [ [ - "/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html", + "/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html?class=no-descent", "==" ] ], @@ -199788,12 +199818,32 @@ ] ], "initial-letter-sunk-initial.html": [ - "701469ca90b9e6fb1ce9506a50dff346624b76f2", + "3c00662d73cba1830a7a67ce931ec936ae3253d9", [ - null, + "css/css-inline/initial-letter/initial-letter-sunk-initial.html?class=", + [ + [ + "/css/css-inline/initial-letter/initial-letter-sunk-initial-ref.html?class=", + "==" + ] + ], + {} + ], + [ + "css/css-inline/initial-letter/initial-letter-sunk-initial.html?class=no-ascent", [ [ - "/css/css-inline/initial-letter/initial-letter-sunk-initial-ref.html", + "/css/css-inline/initial-letter/initial-letter-sunk-initial-ref.html?class=no-ascent", + "==" + ] + ], + {} + ], + [ + "css/css-inline/initial-letter/initial-letter-sunk-initial.html?class=no-descent", + [ + [ + "/css/css-inline/initial-letter/initial-letter-sunk-initial-ref.html?class=no-descent", "==" ] ], @@ -200296,7 +200346,7 @@ ] ], "text-box-trim-line-clamp-001.html": [ - "46c10c859eaa14f02ae5f9e07162006d2b112d4a", + "56af569fd667cb122942c5d2436f4e05d8f3b556", [ null, [ @@ -200308,6 +200358,32 @@ {} ] ], + "text-box-trim-line-clamp-auto-001.html": [ + "05987167ff662184ed8ba877e4b95dad9b460066", + [ + null, + [ + [ + "/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-001-ref.html", + "==" + ] + ], + {} + ] + ], + "text-box-trim-line-clamp-auto-002.html": [ + "ddb5df156662842f3e039939d6b23d2b9d1a700b", + [ + null, + [ + [ + "/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-002-ref.html", + "==" + ] + ], + {} + ] + ], "text-box-trim-multicol-001.html": [ "e8669b4651c4a97329690a657c70c4784f48c988", [ @@ -207498,6 +207574,19 @@ {} ] ], + "clip-path-url-reference-empty-while-loading.tentative.html": [ + "346db822af279a47ace5519b29cd5ba2b21f7590", + [ + null, + [ + [ + "/css/css-masking/clip-path/reference/green-100x100.html", + "==" + ] + ], + {} + ] + ], "clip-path-url-reference-external.html": [ "91737bf9b7059eaa454e4974c3d242e7e49dd615", [ @@ -217483,7 +217572,7 @@ ] ], "line-clamp-auto-011.tentative.html": [ - "00076a5336e89004b6a2143e9bd6c72ec9fe95e0", + "50513516cc9daa3d90063277f2d8d00e52db4f78", [ null, [ @@ -217665,25 +217754,12 @@ ] ], "line-clamp-auto-025.tentative.html": [ - "ee394b2a76d12a276c8809577e92993e2e32e7a8", + "ab741d3df4d9ba823897ee1bcff1de9118353ada", [ null, [ [ - "/css/css-overflow/line-clamp/reference/line-clamp-auto-025-ref.html", - "==" - ] - ], - {} - ] - ], - "line-clamp-auto-026.tentative.html": [ - "f616cbed028a82638dfd84465e134230eb109219", - [ - null, - [ - [ - "/css/css-overflow/line-clamp/reference/line-clamp-auto-026-ref.html", + "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html", "==" ] ], @@ -217755,19 +217831,6 @@ {} ] ], - "line-clamp-auto-032.tentative.html": [ - "17c6981ae33f115d8b7ab4245f44c6c837b44d1a", - [ - null, - [ - [ - "/css/css-overflow/line-clamp/reference/line-clamp-auto-032-ref.html", - "==" - ] - ], - {} - ] - ], "line-clamp-auto-033.tentative.html": [ "f18d7eefb271e8529d0f2dedde8fe3fe9d7ea947", [ @@ -217782,12 +217845,12 @@ ] ], "line-clamp-auto-034.tentative.html": [ - "ebb676dfd8e0fa265ddf0280b3987fd1eb8f3587", + "96fe675d1b10c74516b7d2e1a38425b220817a52", [ null, [ [ - "/css/css-overflow/line-clamp/reference/line-clamp-auto-034-ref.html", + "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html", "==" ] ], @@ -217821,12 +217884,12 @@ ] ], "line-clamp-auto-037.tentative.html": [ - "4a2fc3c82064e12b5ff282c56f4e3a03035ee9e9", + "37b366660241f9542b273d5999d357b8bdb497fe", [ null, [ [ - "/css/css-overflow/line-clamp/reference/line-clamp-auto-011-ref.html", + "/css/css-overflow/line-clamp/reference/line-clamp-auto-037-ref.html", "==" ] ], @@ -229586,7 +229649,7 @@ ] ], "has-slotted-001.tentative.html": [ - "9a9563287631b6544b9009b16200791424d5d868", + "e750d97a180b5daa6eb0ac18e7178372eeaf96b6", [ null, [ @@ -229599,7 +229662,7 @@ ] ], "has-slotted-002.tentative.html": [ - "40b4edb3841684d29c6a058ccbea2da1c40893bb", + "729f105719b98ac791cf1f7ba9ceae88f38a4b4e", [ null, [ @@ -229612,7 +229675,7 @@ ] ], "has-slotted-003.tentative.html": [ - "9565b1594c3ed71094f7cf826653f6c06f486a1d", + "7578413ff3977094a5ffbcb151498a92ddc4c36d", [ null, [ @@ -229624,8 +229687,8 @@ {} ] ], - "has-slotted-004.tentative.html": [ - "2d980e10051eb5a654771a9069eeb74f7f4f5890", + "has-slotted-flattened-001.tentative.html": [ + "0235f99e21f1c9ba0382e7a8936f8f1050a854fe", [ null, [ @@ -229637,8 +229700,8 @@ {} ] ], - "has-slotted-005.tentative.html": [ - "3de7c16f287cb6fc5681362f7def0252981bde24", + "has-slotted-flattened-002.tentative.html": [ + "f37b6217789954240d4577b05bd5669950d72477", [ null, [ @@ -229650,8 +229713,8 @@ {} ] ], - "has-slotted-006.tentative.html": [ - "aea5c6b2a141fd297859635509bd976772cd1908", + "has-slotted-flattened-003.tentative.html": [ + "5f007fbd1b0fb4220a2214cb169c93a88dd2029a", [ null, [ @@ -229663,8 +229726,8 @@ {} ] ], - "has-slotted-007.tentative.html": [ - "e750d97a180b5daa6eb0ac18e7178372eeaf96b6", + "has-slotted-functional-001.tentative.html": [ + "9a9563287631b6544b9009b16200791424d5d868", [ null, [ @@ -229676,8 +229739,8 @@ {} ] ], - "has-slotted-flattened-001.tentative.html": [ - "f14bdbc776d639a5f52c9d69bf25882d601da876", + "has-slotted-functional-002.tentative.html": [ + "a67f788f78563382862dc722782ca186010b6c30", [ null, [ @@ -229689,8 +229752,8 @@ {} ] ], - "has-slotted-flattened-002.tentative.html": [ - "f72ff1de5aa298a2dac90d9a2a406029156a764e", + "has-slotted-functional-003.tentative.html": [ + "9565b1594c3ed71094f7cf826653f6c06f486a1d", [ null, [ @@ -229702,8 +229765,8 @@ {} ] ], - "has-slotted-flattened-003.tentative.html": [ - "bca81b971de20dd8e5174052623ad2da21ad11fc", + "has-slotted-functional-004.tentative.html": [ + "2d980e10051eb5a654771a9069eeb74f7f4f5890", [ null, [ @@ -229715,8 +229778,8 @@ {} ] ], - "has-slotted-flattened-004.tentative.html": [ - "7b299d25baa36f23d6311ac1fd5981a50f9d6a5b", + "has-slotted-functional-005.tentative.html": [ + "3de7c16f287cb6fc5681362f7def0252981bde24", [ null, [ @@ -229728,8 +229791,8 @@ {} ] ], - "has-slotted-flattened-005.tentative.html": [ - "7fccf604d8bcbf0f3452c3e8c79f2da24122b9b0", + "has-slotted-functional-006.tentative.html": [ + "aea5c6b2a141fd297859635509bd976772cd1908", [ null, [ @@ -229741,8 +229804,8 @@ {} ] ], - "has-slotted-flattened-006.tentative.html": [ - "cfe415c7948cbd07622b870121b6c42ffa335eed", + "has-slotted-functional-007.tentative.html": [ + "d7e015056300ca81a5a38c2020c59332f9258d6c", [ null, [ @@ -229754,8 +229817,73 @@ {} ] ], - "has-slotted-flattened-007.tentative.html": [ - "0235f99e21f1c9ba0382e7a8936f8f1050a854fe", + "has-slotted-functional-flattened-001.tentative.html": [ + "f14bdbc776d639a5f52c9d69bf25882d601da876", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "has-slotted-functional-flattened-002.tentative.html": [ + "ff13ac70963c4fac875ba0202185d7320253b6ec", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "has-slotted-functional-flattened-003.tentative.html": [ + "bca81b971de20dd8e5174052623ad2da21ad11fc", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "has-slotted-functional-flattened-004.tentative.html": [ + "7b299d25baa36f23d6311ac1fd5981a50f9d6a5b", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "has-slotted-functional-flattened-005.tentative.html": [ + "7fccf604d8bcbf0f3452c3e8c79f2da24122b9b0", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], + "has-slotted-functional-flattened-006.tentative.html": [ + "fd3dda69bc8a70300437ace996362431019d8329", [ null, [ @@ -293835,6 +293963,45 @@ {} ] ], + "auto-name-from-id-shadow.html": [ + "b5020d658eca8797925d04bb7fb78401d738f147", + [ + null, + [ + [ + "/css/css-view-transitions/auto-name-ref.html", + "==" + ] + ], + {} + ] + ], + "auto-name-from-id.html": [ + "9a04d431dfdc2225670e6bb2f87e6ac7a4fcd486", + [ + null, + [ + [ + "/css/css-view-transitions/auto-name-ref.html", + "==" + ] + ], + {} + ] + ], + "auto-name.html": [ + "205c8e559dc8cdd2eeb6d1a8e0e9b098fb791301", + [ + null, + [ + [ + "/css/css-view-transitions/auto-name-ref.html", + "==" + ] + ], + {} + ] + ], "backdrop-filter-animated.html": [ "3a5f0665b00c476add8795fb59e7c29dea51fcb0", [ @@ -295718,6 +295885,19 @@ {} ] ], + "auto-name-from-id.html": [ + "c916733224282623559e963d2a7e7d33173bf986", + [ + null, + [ + [ + "/css/css-view-transitions/navigation/auto-name-from-id-ref.html", + "==" + ] + ], + {} + ] + ], "chromium-paint-holding-timeout.html": [ "83596940fa420005492b38def7e8cd49d0252632", [ @@ -296347,6 +296527,35 @@ } ] ], + "custom-ident-implies-contain.html": [ + "6524d2c2680cd1ebcd00d5335adde259b321a6cd", + [ + null, + [ + [ + "/css/css-view-transitions/nested/nested-ref.html", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 255 + ], + [ + 0, + 515 + ] + ] + ] + ] + } + ] + ], "nearest-direct.tentative.html": [ "a42e5a847c053b2b248208df64be87512b24716e", [ @@ -296405,6 +296614,35 @@ } ] ], + "nearest-implies-contain.html": [ + "94f8b8d1b7e84bd4055a202729c41efa70cb9a5a", + [ + null, + [ + [ + "/css/css-view-transitions/nested/nested-ref.html", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 255 + ], + [ + 0, + 515 + ] + ] + ] + ] + } + ] + ], "nearest-nested.tentative.html": [ "9ec3e8f95ffe3194e85cdbe455ee3b3a3d723211", [ @@ -326670,13 +326908,13 @@ {} ] ], - "2d.filter.layers.componentTransfer.discrete.html": [ - "249f7915cc0e1081ab1de6f1fec4978a8070e9cc", + "2d.filter.layers.componentTransfer.discrete.tentative.html": [ + "4a307d75a8f0a4af4843125d5241d8f7e7acbcad", [ null, [ [ - "/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete-expected.html", + "/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative-expected.html", "==" ] ], @@ -326699,13 +326937,13 @@ } ] ], - "2d.filter.layers.componentTransfer.gamma.html": [ - "53722ee02b8068391411442f3d5634920f44d255", + "2d.filter.layers.componentTransfer.gamma.tentative.html": [ + "43390dbdd0b20d0a2fbb47c70fcec9e5325ade24", [ null, [ [ - "/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma-expected.html", + "/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative-expected.html", "==" ] ], @@ -326728,26 +326966,26 @@ } ] ], - "2d.filter.layers.componentTransfer.identity.html": [ - "62739dc1a0afb414ea3bda26d908c36b23c83f67", + "2d.filter.layers.componentTransfer.identity.tentative.html": [ + "10a9853213ed23fb9d9e7b1cf5e40569422275fe", [ null, [ [ - "/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity-expected.html", + "/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative-expected.html", "==" ] ], {} ] ], - "2d.filter.layers.componentTransfer.linear.html": [ - "ebf7cf0b48a60f263665c53b908c7e55722f9c4e", + "2d.filter.layers.componentTransfer.linear.tentative.html": [ + "5e2404b204d4e1554964a1fea7a8834ed8f5db0c", [ null, [ [ - "/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear-expected.html", + "/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative-expected.html", "==" ] ], @@ -326770,13 +327008,13 @@ } ] ], - "2d.filter.layers.componentTransfer.table.html": [ - "b7c4050b40cc0d44c374dd720203af6e0f12b522", + "2d.filter.layers.componentTransfer.table.tentative.html": [ + "43af2bc7d9ed49b9099970db7719605a49bba7fe", [ null, [ [ - "/html/canvas/element/filters/2d.filter.layers.componentTransfer.table-expected.html", + "/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative-expected.html", "==" ] ], @@ -326799,26 +327037,26 @@ } ] ], - "2d.filter.layers.dropShadow.html": [ - "0e3af8d12feb9b82121102e76bc7f2a8f944d41e", + "2d.filter.layers.dropShadow.tentative.html": [ + "6f31ef221e6bc654bbee9b4f0f1d5afbd9de8744", [ null, [ [ - "/html/canvas/element/filters/2d.filter.layers.dropShadow-expected.html", + "/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative-expected.html", "==" ] ], {} ] ], - "2d.filter.layers.gaussianBlur.html": [ - "72908aa1796c4be0fe54d4440b9e739cab633fd1", + "2d.filter.layers.gaussianBlur.tentative.html": [ + "0bfd704ca1dea73145fffe7a6cfb3c0ec8c9113f", [ null, [ [ - "/html/canvas/element/filters/2d.filter.layers.gaussianBlur-expected.html", + "/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative-expected.html", "==" ] ], @@ -329070,13 +329308,13 @@ {} ] ], - "2d.filter.layers.componentTransfer.discrete.html": [ - "db2479f55caaf6c52c5c310b7f9c8d2eb525c1d1", + "2d.filter.layers.componentTransfer.discrete.tentative.html": [ + "b72a42b7c290a1b75ce623c5b29129d87c017d75", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative-expected.html", "==" ] ], @@ -329099,13 +329337,13 @@ } ] ], - "2d.filter.layers.componentTransfer.discrete.w.html": [ - "c098017cb05f265902f7b4c8693727538e440701", + "2d.filter.layers.componentTransfer.discrete.tentative.w.html": [ + "4ad1b74ed9ccce5067f989e9658e73d14f4430af", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative-expected.html", "==" ] ], @@ -329128,13 +329366,13 @@ } ] ], - "2d.filter.layers.componentTransfer.gamma.html": [ - "58f45c421688d2b3ae2201f873eea0d02a8e6c55", + "2d.filter.layers.componentTransfer.gamma.tentative.html": [ + "cba3615168b14adb15d02e59e90f13d62e3a0a8d", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative-expected.html", "==" ] ], @@ -329157,13 +329395,13 @@ } ] ], - "2d.filter.layers.componentTransfer.gamma.w.html": [ - "a59bc255061d043b84867bebdc1324c1c1d05ffb", + "2d.filter.layers.componentTransfer.gamma.tentative.w.html": [ + "8e946c27940f6ea41818b4640c7945d4b3240402", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative-expected.html", "==" ] ], @@ -329186,39 +329424,39 @@ } ] ], - "2d.filter.layers.componentTransfer.identity.html": [ - "e4582647902340b314594412f01c2d385521065f", + "2d.filter.layers.componentTransfer.identity.tentative.html": [ + "57fbe556486e987b51a3fe49a737355435fe1994", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative-expected.html", "==" ] ], {} ] ], - "2d.filter.layers.componentTransfer.identity.w.html": [ - "b60110f56fb5bd883bf88b9a5b9603218efbf4d7", + "2d.filter.layers.componentTransfer.identity.tentative.w.html": [ + "a12b7cb302d0a4a7ddab3490f8cb13c4d7107b74", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative-expected.html", "==" ] ], {} ] ], - "2d.filter.layers.componentTransfer.linear.html": [ - "aaf8acaaeb0d4ab1941cef13e4fcaab461005b24", + "2d.filter.layers.componentTransfer.linear.tentative.html": [ + "2893fa48ccc594b1a1b9791efb3ef9a7238e13c8", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative-expected.html", "==" ] ], @@ -329241,13 +329479,13 @@ } ] ], - "2d.filter.layers.componentTransfer.linear.w.html": [ - "f0b3dc7b6dea459f02b01a6f6bd1b5b1a5b3f467", + "2d.filter.layers.componentTransfer.linear.tentative.w.html": [ + "c824c1bd07bf2dee422684fcf8fef8b925cb8206", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative-expected.html", "==" ] ], @@ -329270,13 +329508,13 @@ } ] ], - "2d.filter.layers.componentTransfer.table.html": [ - "91e96a48850d06f08936f5039a4f4e12274a28b4", + "2d.filter.layers.componentTransfer.table.tentative.html": [ + "b80daa4baca9970ed435baee9e6a58162577b72d", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative-expected.html", "==" ] ], @@ -329299,13 +329537,13 @@ } ] ], - "2d.filter.layers.componentTransfer.table.w.html": [ - "a7df25ac57a7b8c121431cd152c0ebb982ce1ed3", + "2d.filter.layers.componentTransfer.table.tentative.w.html": [ + "8ea58b3014eb4e3e5eebac6dd1763ac8de1c6920", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative-expected.html", "==" ] ], @@ -329328,52 +329566,52 @@ } ] ], - "2d.filter.layers.dropShadow.html": [ - "273118a0a11f7958eba8d7ad10c936ba0101c534", + "2d.filter.layers.dropShadow.tentative.html": [ + "5a7edafe94230de1954b3322003c394a712e8314", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.dropShadow-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative-expected.html", "==" ] ], {} ] ], - "2d.filter.layers.dropShadow.w.html": [ - "cf29fc880d69a427c6de829a35be616daec68d1d", + "2d.filter.layers.dropShadow.tentative.w.html": [ + "5df5262c89258e9b5d2622caae75b1123f90e973", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.dropShadow-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative-expected.html", "==" ] ], {} ] ], - "2d.filter.layers.gaussianBlur.html": [ - "212f4f1dd02eae7c496c886660567404eea73f05", + "2d.filter.layers.gaussianBlur.tentative.html": [ + "f4bbfd8bf2ce0d6a3f2d905fcc70472a3ed08cc5", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative-expected.html", "==" ] ], {} ] ], - "2d.filter.layers.gaussianBlur.w.html": [ - "39bf90207c51cd73470bfa6fa6d86c09a6a71013", + "2d.filter.layers.gaussianBlur.tentative.w.html": [ + "ffbed3f53b77b5692efb420aa090c70ef989b051", [ null, [ [ - "/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur-expected.html", + "/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative-expected.html", "==" ] ], @@ -350280,6 +350518,19 @@ {} ] ], + "text-path-transformed.html": [ + "0c1b5a5d0e66fcd91e24692156a6e1eb0144b43e", + [ + null, + [ + [ + "/svg/text/reftests/text-path-transformed-ref.html", + "==" + ] + ], + {} + ] + ], "text-shape-inside-001.svg": [ "248fe1a44f98099dd678e9ef63f1b97a5c09cfdf", [ @@ -358653,10 +358904,6 @@ "90ed0a78576edc041caaa2ae70c319837152b726", [] ], - "pressure-helpers.js": [ - "5234cf2d78c90d559d3cfd8ee1b86d9b3fa97861", - [] - ], "support-iframe.html": [ "6b2b3097926b192df23c3e21dd19742bb19e69d4", [] @@ -378914,6 +379161,10 @@ "f40364379514854a7acb5d56a9e85b2c7200e4c3", [] ], + "ancestor-chain-same-site-to-cross-site-embed.html": [ + "d49d558fe8f59d19b5dbce123c0531f4641303a4", + [] + ], "partitioned-cookies-cross-site-embed.html": [ "05a99626dc4211c64b9e092366e0e3ed4933ab39", [] @@ -416507,11 +416758,11 @@ [] ], "Initial-letter-breaking-vlr-ref.html": [ - "d43b2e39bfaca8ee7a70478bafa4ea762c9c7d08", + "2c047b0b4aaff8ee0467fb92ca986257a195de08", [] ], "Initial-letter-breaking-vrl-ref.html": [ - "0fe5e74a082b110e8779a174269a1cdf19b50f2d", + "ce2b41135ea88cb7a8ad0d99e0c79a2f2e97b0b9", [] ], "initial-letter-block-position-drop-over-ruby-ref.html": [ @@ -416539,27 +416790,27 @@ [] ], "initial-letter-block-position-margins-vlr-ref.html": [ - "6bbc5c3b7a620f0f524e1eda22c9940438a77ca0", + "677e2a40db68ff38e0069f129e228b754e8d254b", [] ], "initial-letter-block-position-margins-vrl-ref.html": [ - "d608d256c969035f4395669a3d23bfb63b44c0c4", + "532f3a7d837639a491a0119d130311b2d2585b87", [] ], "initial-letter-block-position-raise-over-ruby-ref.html": [ - "43222b43dac567241f64ea0ef17ea18ef254b775", + "23401fd646bba6b98d7ce178acf25705b79dc542", [] ], "initial-letter-block-position-raise-over-ruby-tall-ref.html": [ - "f1086074c2a66593dd5fe8b97eb1b5c294e6cfa4", + "9511f3e6f2d180f98641b44622c1602f7e1acbcb", [] ], "initial-letter-block-position-raise-under-ruby-ref.html": [ - "9adde375569332e32890a3b472ff60c7da1efaa2", + "87bc6d0ff41281e6ae4f05d499f9efb8d77b5ac8", [] ], "initial-letter-block-position-raise-under-ruby-tall-ref.html": [ - "7e334e55dbf062392c6a2718c9078c289abba4ee", + "e818de68cd8d1b1cb00321e6ba713e29dd1be362", [] ], "initial-letter-drop-initial-ref.html": [ @@ -416571,11 +416822,11 @@ [] ], "initial-letter-drop-initial-vlr-ref.html": [ - "f28d1eed83013f5eb1de2df76ed8aed9f0f44be5", + "5447e2f099a9ac397982de6ecbb3d1a1225cf405", [] ], "initial-letter-drop-initial-vrl-ref.html": [ - "4ec34f4c0bb49139f6d19767743f64601539d5d2", + "e1e04ccffe298085eafe2730756a24f5d9389f2c", [] ], "initial-letter-float-001-ref.html": [ @@ -416587,7 +416838,7 @@ [] ], "initial-letter-float-001-vlr-ref.html": [ - "3982a3669cd3945cf1f31995d620213b8660500d", + "b4567d288129e07e466ca2e7b0d95eadd234549c", [] ], "initial-letter-float-001-vrl-ref.html": [ @@ -416623,27 +416874,27 @@ [] ], "initial-letter-raise-initial-ref.html": [ - "f59625a4a9de3e9dcac9739a62fc959e0114ab1d", + "29594f45f9595d372bb8bb5726454430206f3d89", [] ], "initial-letter-raise-initial-rtl-ref.html": [ - "9dce9e6e14c71474909f490881710376a5d21dd6", + "e5dd8f96b5cf40157f2811074d526ac7c1b2dc09", [] ], "initial-letter-raise-initial-vlr-ref.html": [ - "58e5c333e110402df0c7a0eb6a3a7416899358be", + "72d2dd05a3edbf99d784abe61a173b29089034fb", [] ], "initial-letter-raise-initial-vrl-ref.html": [ - "5fa68450681e0dfea7bb708c4358e75694defb25", + "38be19283b2ba0802fdb7cdfc626a860329c2725", [] ], "initial-letter-raised-sunken-caps-raise-ref.html": [ - "7285ed8a82289fefb98bfb90d5442bdc554bb09c", + "0a134fcfe9eef6a8e784dbe32cf5a7ed76573417", [] ], "initial-letter-raised-sunken-caps-sunken-ref.html": [ - "a68a760ac62a2c0610bfadac74f1d9f56e557f19", + "41031ff8782cf674628d7215d45093a29425285c", [] ], "initial-letter-short-para-initial-letter-clears-ref.html": [ @@ -416655,19 +416906,19 @@ [] ], "initial-letter-sunk-initial-ref.html": [ - "9b036a2be38ef38f379df2a7d2ce1fe5dbea109d", + "0b569177a87642a7f3deca9d1aa3306e80256d8c", [] ], "initial-letter-sunk-initial-rtl-ref.html": [ - "3318c7e8bdd2dcaf4aac9c871485234e529e907f", + "cb26ab05f1e01617a6896fde2a983ebc13582158", [] ], "initial-letter-sunk-initial-vlr-ref.html": [ - "c3ccef28140cf574e722ddd23309083149e47b01", + "ebdb5a15694c24238bd7d9f8400b0a4db7f1e043", [] ], "initial-letter-sunk-initial-vrl-ref.html": [ - "a7db8b9ea095d07065bf975b3eb896d11589c149", + "18735029d0c281ac784842cd8f6dedc27903972b", [] ], "initial-letter-with-first-line-ref.html": [ @@ -416681,7 +416932,13 @@ "initial-letter-with-tab-rtl-ref.html": [ "0b9a074af70d652f61eacfd206cd8a1dca9cb5ff", [] - ] + ], + "resources": { + "initial-letter-variants.js": [ + "a3eceae8a92f5ccdc5e1860b0e0401c917819450", + [] + ] + } }, "text-box-trim": { "WEB_FEATURES.yml": [ @@ -416782,6 +417039,14 @@ "9d03140f4d7454f77e960816b8fe96d05f2aec89", [] ], + "text-box-trim-line-clamp-auto-001-ref.html": [ + "508d262c541325291bab3af68200632e7092d48f", + [] + ], + "text-box-trim-line-clamp-auto-002-ref.html": [ + "046d17c02df93eaeaf145fcb17cc5abe8fd03921", + [] + ], "text-box-trim-multicol-001-ref.html": [ "aa81e23a26a4900dde31b1943b2774e0449d7249", [] @@ -419542,7 +419807,7 @@ [] ], "line-clamp-auto-011-ref.html": [ - "5f7120ee39a2014f75f2f700ebedcc0b0e6e6275", + "27a2e7b2bc07ba80f6bfda6b6b10f2c417b27bbb", [] ], "line-clamp-auto-016-ref.html": [ @@ -419569,14 +419834,6 @@ "adb4b6dc6edf2a401cd4016f394c74b9bf9b89cb", [] ], - "line-clamp-auto-025-ref.html": [ - "a76468d6d546e1e58a15a604a2ae476cf8dfec27", - [] - ], - "line-clamp-auto-026-ref.html": [ - "44d503a05220fdf89caf4722961fc478ae943350", - [] - ], "line-clamp-auto-027-ref.html": [ "fa0ade7a61d0729dc216fe92fc9d1f49bcd31991", [] @@ -419593,18 +419850,14 @@ "2d3c9d0261b7eb369d99dbd842309f697e80bad8", [] ], - "line-clamp-auto-032-ref.html": [ - "4768c77ddabc93d3519e671c10d584b12e8a69ad", - [] - ], - "line-clamp-auto-034-ref.html": [ - "8fae3b278c124db00b8f79eb0cd0b91cb8752217", - [] - ], "line-clamp-auto-036-ref.html": [ "0ad96e88d14a735ce9416dba2b31f5f66936b19f", [] ], + "line-clamp-auto-037-ref.html": [ + "eeb9543554d99659ed855e40d4f04be393858932", + [] + ], "line-clamp-auto-with-ruby-001-ref.html": [ "03d12b9c722c8c160830cc01997baa3ee4cf88c3", [] @@ -423159,15 +423412,15 @@ }, "scroll-start-target": { "scroll-start-target-with-anchor-navigation-inner-frame.html": [ - "bea0525ecd418128f8fd0b5b20033cbe158fdd60", + "de02dcf00f68ee13ee00e31877d62199d22922f7", [] ], "scroll-start-target-with-hash-fragment-navigation-inner-frame.html": [ - "9bf77363d3e60d2d8f4a6d33c4d053aedcd59239", + "90629c4990f6753dd770e00ad7da7a6b21a984bf", [] ], "scroll-start-target-with-text-fragment-navigation-target.html": [ - "da53e7a566d1424a38a7a33ebc5e0be4a5271744", + "80cbb55fb2730d8dc5cc3edd880e8e890281ef05", [] ], "stash.py": [ @@ -433883,6 +434136,10 @@ "eee7f19529b82269d066e08582e322e30e6a308b", [] ], + "auto-name-ref.html": [ + "36ef5faac4171d57ac09274318d79541ed081732", + [] + ], "backdrop-filter-animated-ref.html": [ "d3f1dffacdcdd2a85348a56214117fe58e0d4d08", [] @@ -434186,6 +434443,10 @@ "59e3342daebb77a8e484add21626472c01b396ab", [] ], + "auto-name-from-id-ref.html": [ + "8f9954930bf096da0107b0ecb21c8136ca522850", + [] + ], "chromium-paint-holding-timeout-ref.html": [ "90267e3a84a34157078d1ad890710ea8059a75da", [] @@ -434239,6 +434500,10 @@ "bf5a73c73ee014ecf5777f77b9282d8f947f58af", [] ], + "auto-name-from-id.html": [ + "f1fd1e48a68e6d7d63184f092bb1b607b6d6967d", + [] + ], "chromium-paint-holding-timeout.html": [ "3964199c54cd7230d517b2d676e1a4dbea9067b4", [] @@ -441198,6 +441463,14 @@ [] ], "resources": { + "dummy.js": [ + "1bee3c776389c8fe49947128b41eff092bc11668", + [] + ], + "green.css": [ + "182d72fa7fddab14222e4085b2cc498d79865709", + [] + ], "moveBefore-iframe.html": [ "7d9c498e8da29f6d23df33d49a2aab5b85e9f1e2", [] @@ -441628,7 +441901,7 @@ }, "include": { "editor-test-utils.js": [ - "b180f3343fde2189ea6e122266cf329a2e2b6d98", + "b302d19a117503c3ed5bd0d71f4feee1d3d21f26", [] ], "implementation.js": [ @@ -443540,7 +443813,7 @@ ] }, "fedcm-helper.sub.js": [ - "767c044818eab85a07c8240611730a885122a858", + "4337adf9f87b045f93d6dbb33398d38f2fce72cf", [] ], "fedcm-helper.sub.js.headers": [ @@ -446206,7 +446479,7 @@ "fledge": { "tentative": { "TODO": [ - "09cda1beb54c1430941b5e3b9042d66ff5329784", + "e05fe65911d4154f3e8bee9214b21e0ec64ba3af", [] ], "resources": { @@ -446235,7 +446508,7 @@ [] ], "direct-from-seller-signals.py": [ - "14f5ce156e770d0fa069789fa4f37edeea8c5bb7", + "6787b7b4788e3bb9e7a796bc0f5393c9eb04fb06", [] ], "ed25519.py": [ @@ -446278,12 +446551,20 @@ "dea8427266f1245e297795a69538b3a4f0007af2", [] ], + "service-worker-helper.js": [ + "cc00181359740b51f83c3289cfc215252123b67e", + [] + ], + "service-worker-helper.js.headers": [ + "98dfc8c8674edc62c4f6498a0b2a97c25447de96", + [] + ], "set-cookie.asis": [ "96d9f07c578c34085dd789d2a11b37cd4a51c42c", [] ], "subordinate-frame.sub.html": [ - "ea1f0c44d6286a3188acab7a83d0c2411bc23f48", + "4aeccd00c6db2043c37e7a02fbfe71767a8642cf", [] ], "subordinate-frame.sub.html.headers": [ @@ -450787,32 +451068,32 @@ "9c85dfec907e2dd6b1158002e6f8b6ed151b8852", [] ], - "2d.filter.layers.componentTransfer.discrete-expected.html": [ - "7c1736dfe9a3e1f9e1357f71e03567e0c914e443", + "2d.filter.layers.componentTransfer.discrete.tentative-expected.html": [ + "bbf96c360830129d4ab64c83f9ee5412a4eb6cd1", [] ], - "2d.filter.layers.componentTransfer.gamma-expected.html": [ - "e7fae58eef092c8d4b14a3e10037d5eac3898207", + "2d.filter.layers.componentTransfer.gamma.tentative-expected.html": [ + "ef6b62ee4e4c2acb79b5a239910620f7c5e6fa39", [] ], - "2d.filter.layers.componentTransfer.identity-expected.html": [ - "699eaae699f63d8d4c6dd5b25cbcabaeb574a8dc", + "2d.filter.layers.componentTransfer.identity.tentative-expected.html": [ + "ec20a498a7b735e5e38836ccc57623c669dc880d", [] ], - "2d.filter.layers.componentTransfer.linear-expected.html": [ - "6845f9f15cb65d67f6d17f719028a58721dc239a", + "2d.filter.layers.componentTransfer.linear.tentative-expected.html": [ + "ec44da12bcd675359a2cde56e06e6d0cf4fe56b6", [] ], - "2d.filter.layers.componentTransfer.table-expected.html": [ - "bb4b056ef1ae870312ed82d2f61ff2530a975427", + "2d.filter.layers.componentTransfer.table.tentative-expected.html": [ + "e41356579573a0ccdac140bc2a0c5131e3903e20", [] ], - "2d.filter.layers.dropShadow-expected.html": [ - "78534c0d48fcf39bc5f9fc915836bc0e6ee1dfe2", + "2d.filter.layers.dropShadow.tentative-expected.html": [ + "a0cb127c40184b2db2f5346e4bfe62371ea45054", [] ], - "2d.filter.layers.gaussianBlur-expected.html": [ - "8039c77ecedf78b3d49dd6058bf45c0262c78b60", + "2d.filter.layers.gaussianBlur.tentative-expected.html": [ + "f02f08d5f83665159887729d86caa97da645fc5e", [] ] }, @@ -451189,7 +451470,7 @@ }, "imagebitmap": { "common.sub.js": [ - "1889035202287d8ee8e6e192647826c702b60be5", + "525d28553aa0a6725db234df1dce1536b917ffd8", [] ], "createImageBitmap-worker.js": [ @@ -451385,6 +451666,14 @@ "5c1b07362a9a7421c3a729cf3eadd5f598aea9a1", [] ], + "Display-P3-BB0000.mp4": [ + "b56bd621ac599fa7279c07576aafe3e827ce43ca", + [] + ], + "Display-P3-BB0000.webm": [ + "3e1f929e124e920a4ed50952d9cd50669c6cafe1", + [] + ], "Display-P3-BB0000CC.png": [ "2036aeae25ff79f0e9be1e1dfe3e249662f55ff6", [] @@ -451911,32 +452200,32 @@ "9c85dfec907e2dd6b1158002e6f8b6ed151b8852", [] ], - "2d.filter.layers.componentTransfer.discrete-expected.html": [ - "7c1736dfe9a3e1f9e1357f71e03567e0c914e443", + "2d.filter.layers.componentTransfer.discrete.tentative-expected.html": [ + "bbf96c360830129d4ab64c83f9ee5412a4eb6cd1", [] ], - "2d.filter.layers.componentTransfer.gamma-expected.html": [ - "e7fae58eef092c8d4b14a3e10037d5eac3898207", + "2d.filter.layers.componentTransfer.gamma.tentative-expected.html": [ + "ef6b62ee4e4c2acb79b5a239910620f7c5e6fa39", [] ], - "2d.filter.layers.componentTransfer.identity-expected.html": [ - "699eaae699f63d8d4c6dd5b25cbcabaeb574a8dc", + "2d.filter.layers.componentTransfer.identity.tentative-expected.html": [ + "ec20a498a7b735e5e38836ccc57623c669dc880d", [] ], - "2d.filter.layers.componentTransfer.linear-expected.html": [ - "6845f9f15cb65d67f6d17f719028a58721dc239a", + "2d.filter.layers.componentTransfer.linear.tentative-expected.html": [ + "ec44da12bcd675359a2cde56e06e6d0cf4fe56b6", [] ], - "2d.filter.layers.componentTransfer.table-expected.html": [ - "bb4b056ef1ae870312ed82d2f61ff2530a975427", + "2d.filter.layers.componentTransfer.table.tentative-expected.html": [ + "e41356579573a0ccdac140bc2a0c5131e3903e20", [] ], - "2d.filter.layers.dropShadow-expected.html": [ - "78534c0d48fcf39bc5f9fc915836bc0e6ee1dfe2", + "2d.filter.layers.dropShadow.tentative-expected.html": [ + "a0cb127c40184b2db2f5346e4bfe62371ea45054", [] ], - "2d.filter.layers.gaussianBlur-expected.html": [ - "8039c77ecedf78b3d49dd6058bf45c0262c78b60", + "2d.filter.layers.gaussianBlur.tentative-expected.html": [ + "f02f08d5f83665159887729d86caa97da645fc5e", [] ] }, @@ -452355,7 +452644,7 @@ [] ], "gentestutilsunion.py": [ - "ae323a128739ebadd7f5bc26bf454cab75e3f897", + "760368cf2220652aec7354cecf38ee047d3a0e9b", [] ], "name2dir-canvas.yaml": [ @@ -452472,11 +452761,11 @@ [] ], "filters.yaml": [ - "f83776e38886273851c735fc9762e226dc5a9dc4", + "be28001fa7300714ac60b3531256079713c6825f", [] ], "layers.yaml": [ - "eb9edd96c7e0b07b56318bea9aca742a35d21101", + "c96b9bbc7db3171192374876f876d643a620f641", [] ], "line-styles.yaml": [ @@ -452484,7 +452773,7 @@ [] ], "path-objects.yaml": [ - "874f7a25c3d8d386a006e3cded7874975ac6a60d", + "b861bb39f34ff76e129a06d8d5e5077c7cb5ffbe", [] ], "pixel-manipulation.yaml": [ @@ -452500,7 +452789,7 @@ [] ], "text.yaml": [ - "29a765be1111b420d67bcdea66f2c8f75eff22a6", + "4c2ae798596ee9d1a20fd8220b29992b5c72bd05", [] ], "the-canvas-state.yaml": [ @@ -465757,7 +466046,7 @@ [] ], "audio-session.idl": [ - "f542347c710143e6003e96907c989614a40c701a", + "7fd75024ee8fa5c505955a4dfc581eb8d774b97b", [] ], "autoplay-detection.idl": [ @@ -466265,7 +466554,7 @@ [] ], "mediacapture-viewport.idl": [ - "a9dcf74e17cdf38d3d3cea8c7323c510d07653a1", + "c4d1892b0b9932a034b15caa8f80d3f16f096f5f", [] ], "mediaqueries-5.idl": [ @@ -466273,7 +466562,7 @@ [] ], "mediasession.idl": [ - "00bfe6ad21649d719511537db4f4ee046f8086b1", + "5c6942be5a0786234d5f9fddaa302c98c8d92f97", [] ], "mediastream-recording.idl": [ @@ -466301,7 +466590,7 @@ [] ], "observable.idl": [ - "b0f0949a23a09700c08911f3ee4719d0752cdc2b", + "55bdbb21e417d6abd10963e82587c9416b689adb", [] ], "observable.tentative.idl": [ @@ -466493,7 +466782,7 @@ [] ], "selection-api.idl": [ - "a84536ab0f58bbb45a210870a6b9873c37df20e1", + "49d718d0777ae4aba36c39b0945d6fb0065e6bf7", [] ], "serial.idl": [ @@ -466505,7 +466794,7 @@ [] ], "service-workers.idl": [ - "87d48398f72b540b14544165ca7216a0090d79f6", + "d9ff2f651f8235968dd29bd6d7f86e9e8fdcb4cf", [] ], "shape-detection-api.idl": [ @@ -466513,7 +466802,7 @@ [] ], "shared-storage.idl": [ - "6f8e92708881f0bc496b093939c006a5ec712e12", + "85906bedbcff138cc1bf940a77a6485b695a6715", [] ], "speech-api.idl": [ @@ -466561,7 +466850,7 @@ [] ], "turtledove.idl": [ - "77360d0dd10d8a8bf584b6d6939479bce2c1b5c2", + "ff48d311914e49e9de8a96f7ac3a26da144da818", [] ], "ua-client-hints.idl": [ @@ -466705,7 +466994,7 @@ [] ], "webgpu.idl": [ - "74021895a8f740c71cbb048a8089186a2ca77d86", + "421685c7a8fe4516e5e0b803f617181650d1d62a", [] ], "webhid.idl": [ @@ -466721,7 +467010,7 @@ [] ], "webnn.idl": [ - "9a71f73954cd1dc99e157c7d60571632959dbf2f", + "8329e7d2b33eec5ffe030e9f1b826b5276d6088a", [] ], "webrtc-encoded-transform.idl": [ @@ -466749,7 +467038,7 @@ [] ], "webrtc.idl": [ - "32500f9a5600b03372ea438ad42e4a8f9fcb9cb6", + "174ead6261c6c28eac7bd9dd5a1feb374d521b4d", [] ], "websockets.idl": [ @@ -467210,7 +467499,7 @@ ] }, "lint.ignore": [ - "62ad931cb83b0fb0681f02f92b24ffd895973663", + "3e1d05be28de3836888b62d527ebc4a0781397b1", [] ], "loading": { @@ -471835,6 +472124,10 @@ "360e6686bfb65ed33d811d15e1ba7183a736d552", [] ], + "green.png": [ + "28a1faab37797ef39454aa1deac1b470712f7be4", + [] + ], "link-header-referrer-policy.html": [ "dd2144d5075c68c3ad6d6c7ea393b8f58c24e057", [] @@ -474317,14 +474610,6 @@ "c9980e1285b7e14a85cba19f2c870f480e303946", [] ], - "mock-pressure-service.js": [ - "610d02a9164ce5aba99e0cd20e37321c054af252", - [] - ], - "mock-pressure-service.js.headers": [ - "6805c323df5a975231648b830e33ce183c3cbbd3", - [] - ], "mock-subapps.js": [ "b81936713b17db941ef380d4019cecfbe563caf6", [] @@ -475233,7 +475518,7 @@ [] ], "scroll-to-text-fragment-target.html": [ - "3bf78f1600129f60cab68b433e58743766652bcf", + "ceb9a2ca3ff0e0b3503796d28cfe6bab9029668f", [] ], "stash.js": [ @@ -475422,7 +475707,7 @@ [] ], "open-in-iframe.html": [ - "a6fc581abad90d9557c227d9bb53277b99339e89", + "9bf8beb66aa1c2514b591db508014572d1ec6b7e", [] ], "serial-allowed-by-permissions-policy-worker.js": [ @@ -480988,6 +481273,10 @@ "cbfce51b88e8be12f4a29945444b819066d5f74d", [] ], + "text-path-transformed-ref.html": [ + "7d2f3a2d5c32e1122f79fc55aea5b7ca88b4076c", + [] + ], "text-shape-inside-001-ref.svg": [ "5a2c6c0b472669ce32509bd0bdbd09ba1a195ab2", [] @@ -492831,7 +493120,7 @@ [] ], "testdriver-extra.js": [ - "80abe67b0216cd88040ff41acea8f2bb9f9c7ca0", + "87ae9e1f33d02f82721ddd4db7d829df67b48fe4", [] ], "testdriver-vendor.js": [ @@ -496390,7 +496679,7 @@ }, "input": { "__init__.py": [ - "809379d56dc3c28a3283c92561476d36e499c721", + "76288c6be280359090319a9ce803bdd8ec4fecce", [] ], "conftest.py": [ @@ -496440,7 +496729,7 @@ }, "network": { "__init__.py": [ - "0a087bf8733131f1fb64b815da7c3dd145a8a7cf", + "0c3338362d309f859fb660b043ed2c081e0db4dc", [] ], "add_intercept": { @@ -498881,6 +499170,14 @@ "6d16cc84c4dd3b8777bd83d97888eaf8d351f6b5", [] ], + "basic-cue-rendering-expected.html": [ + "d220134a7387d5fb613b3bb0bce5e7b9e766856d", + [] + ], + "basic-cue-rendering.html": [ + "79b6189582e86082e70676e4a7ed9ebc36d5c8be", + [] + ], "basic-ref.html": [ "182bc69277be6e553873d115f3af1f4550090986", [] @@ -499980,6 +500277,10 @@ "c70ac13eaf732229394aa4851f622a3597fb32f3", [] ], + "basic-cue-rendering.webvtt": [ + "c2a57bb0606198e8b05d7beddd185f2ba8fed8b6", + [] + ], "bidi_ruby.vtt": [ "19e67450160d2e074b6399d8a2481e5f7c18f617", [] @@ -500156,6 +500457,10 @@ "b9b3fecf6d610d6e208b307a8f78ad926dd4c7ed", [] ], + "reference.css": [ + "e802547c6798d089feb406d96a7be523f0def6e7", + [] + ], "size_50.vtt": [ "b165af1533b0cf1688ce3835eeeaccfe348979df", [] @@ -500284,6 +500589,14 @@ "99f493770577300d86729f3963b8d11f8c99c459", [] ], + "webvtt-rendering-test.js": [ + "863b0d1bd34df3f42bf3de364bfdd920bae82103", + [] + ], + "white-space-pre-line.webvtt": [ + "f6febeda00ffce4d985df17fd52c9daa450cdb79", + [] + ], "white-spaces.vtt": [ "99b772ffd936e65187a527240977eff1a57dbf42", [] @@ -500304,6 +500617,14 @@ "too_many_cues_wrapped-ref.html": [ "24bc5271d801859f6dbf5570b24af19c3e28b7c7", [] + ], + "white-space-pre-line-expected.html": [ + "f838963ea93d8c6fd42f0e826dfa45cc3745350c", + [] + ], + "white-space-pre-line.html": [ + "af2c0d26938df7215366858634b2f0c36663b704", + [] ] } } @@ -502329,6 +502650,15 @@ } ] ], + "cross-partition-worker-creation.tentative.https.html": [ + "c8234cfb769b0523ed2853781dbd7f5df7384ca7", + [ + null, + { + "timeout": "long" + } + ] + ], "cross-partition.tentative.https.html": [ "5cdaad5f0af2d55f688b1ddce4e2e9c9205e4e2e", [ @@ -502520,7 +502850,7 @@ ] ], "Blob-slice.any.js": [ - "1f85d44d269191d9b9338a3a9fe48cbc5200045f", + "c48d4703d8673f7f53c752077323e4c6c28b5c58", [ "FileAPI/blob/Blob-slice.any.html", { @@ -508195,7 +508525,7 @@ ] ], "structured-clone.any.js": [ - "0997abf2547b1268ce35f50f07c7d986d5b8f130", + "4a99b61bdad0664fcb95d143eb96112a763d756f", [ "IndexedDB/structured-clone.any.html?1-20", { @@ -527081,7 +527411,7 @@ ] ], "clipboard-item.https.html": [ - "78acd1104a96bc78942fa93427bccdaf68f2ba9f", + "41f6ab95b81b7bcbcba1221d40d0357a9ca31c0d", [ null, {} @@ -529083,7 +529413,7 @@ }, "compute-pressure": { "compute_pressure_basic.https.window.js": [ - "ff50ef4e5613a7154d601699da7b3387a26256fe", + "a120f97a403621c9baa6c2769f5989f7bfadd43d", [ "compute-pressure/compute_pressure_basic.https.window.html?globalScope=dedicated_worker", { @@ -529165,248 +529495,327 @@ } ] ], - "compute_pressure_detached_iframe.https.html": [ - "6123521248cb7f6d6368bf916c1004f6a84dd5db", - [ - null, - {} - ] - ], - "compute_pressure_disconnect.https.any.js": [ - "f8bc3fb357811a35201b30f86361846452b15faf", + "compute_pressure_detached_iframe.https.window.js": [ + "a43d6b0fc2dc7ed0263dbf3bde7c242dc421cea4", [ - "compute-pressure/compute_pressure_disconnect.https.any.html", + "compute-pressure/compute_pressure_detached_iframe.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } - ], + ] + ], + "compute_pressure_disconnect.https.window.js": [ + "0a27b16a926b35b3d9d7f1878542f379bb7cb7f3", [ - "compute-pressure/compute_pressure_disconnect.https.any.sharedworker.html", + "compute-pressure/compute_pressure_disconnect.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_disconnect.https.any.worker.html", + "compute-pressure/compute_pressure_disconnect.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } ] ], - "compute_pressure_disconnect_idempotent.https.any.js": [ - "3c9a6688a42fb8e3e4decbee393e51a52554b6f5", + "compute_pressure_disconnect_idempotent.https.window.js": [ + "b7c440502d4f9e92df6c3a719f638f2b94682b8f", [ - "compute-pressure/compute_pressure_disconnect_idempotent.https.any.html", + "compute-pressure/compute_pressure_disconnect_idempotent.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver.js" ], [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/compute_pressure_disconnect_idempotent.https.any.sharedworker.html", - { - "script_metadata": [ + "script", + "/resources/testdriver-vendor.js" + ], [ "script", - "/resources/test-only-api.js" + "/common/utils.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/dispatcher/dispatcher.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_disconnect_idempotent.https.any.worker.html", + "compute-pressure/compute_pressure_disconnect_idempotent.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } ] ], - "compute_pressure_disconnect_immediately.https.any.js": [ - "86963e242aba383ff5c687549f23bbdf58d3a237", + "compute_pressure_disconnect_immediately.https.window.js": [ + "f411a1ea85c2d326f6bc2f7ee6984fc2576e48d6", [ - "compute-pressure/compute_pressure_disconnect_immediately.https.any.html", + "compute-pressure/compute_pressure_disconnect_immediately.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver.js" ], [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/compute_pressure_disconnect_immediately.https.any.sharedworker.html", - { - "script_metadata": [ + "script", + "/resources/testdriver-vendor.js" + ], [ "script", - "/resources/test-only-api.js" + "/common/utils.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/dispatcher/dispatcher.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_disconnect_immediately.https.any.worker.html", + "compute-pressure/compute_pressure_disconnect_immediately.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } ] ], - "compute_pressure_duplicate_updates.https.any.js": [ - "609fb5ad7083f3cce6e10d8c0b461ffb01e853be", + "compute_pressure_duplicate_updates.https.window.js": [ + "f11a59b4cbbad30b4b9b0700e243bd12f5ea68d5", [ - "compute-pressure/compute_pressure_duplicate_updates.https.any.html", + "compute-pressure/compute_pressure_duplicate_updates.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver.js" ], [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/compute_pressure_duplicate_updates.https.any.sharedworker.html", - { - "script_metadata": [ + "script", + "/resources/testdriver-vendor.js" + ], [ "script", - "/resources/test-only-api.js" + "/common/utils.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/dispatcher/dispatcher.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_duplicate_updates.https.any.worker.html", + "compute-pressure/compute_pressure_duplicate_updates.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } @@ -529448,121 +529857,147 @@ } ] ], - "compute_pressure_multiple.https.any.js": [ - "8c50cc4b3df27e99e7fcb445d59609aa41d54fc9", + "compute_pressure_multiple.https.window.js": [ + "a5d2f530a0944f470f7581c076edd1eef01d83f8", [ - "compute-pressure/compute_pressure_multiple.https.any.html", + "compute-pressure/compute_pressure_multiple.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver.js" ], [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/compute_pressure_multiple.https.any.sharedworker.html", - { - "script_metadata": [ + "script", + "/resources/testdriver-vendor.js" + ], [ "script", - "/resources/test-only-api.js" + "/common/utils.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/dispatcher/dispatcher.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_multiple.https.any.worker.html", + "compute-pressure/compute_pressure_multiple.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } ] ], - "compute_pressure_observe_idempotent.https.any.js": [ - "9fcbb49814b6c0aac163c31d35d76b473d87a274", + "compute_pressure_observe_idempotent.https.window.js": [ + "af719097db23dd95b780ae5ae89c47363fdf07e5", [ - "compute-pressure/compute_pressure_observe_idempotent.https.any.html", + "compute-pressure/compute_pressure_observe_idempotent.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver.js" ], [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/compute_pressure_observe_idempotent.https.any.sharedworker.html", - { - "script_metadata": [ + "script", + "/resources/testdriver-vendor.js" + ], [ "script", - "/resources/test-only-api.js" + "/common/utils.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/dispatcher/dispatcher.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_observe_idempotent.https.any.worker.html", + "compute-pressure/compute_pressure_observe_idempotent.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } @@ -529604,70 +530039,156 @@ } ] ], - "compute_pressure_options.https.any.js": [ - "ecf3c29dbf031d4014c8b7896bdf8f305596db27", + "compute_pressure_options.https.window.js": [ + "0cf0b8e11fd0b7f798b2873d8df3a6ade87abcd0", [ - "compute-pressure/compute_pressure_options.https.any.html", + "compute-pressure/compute_pressure_options.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_options.https.any.sharedworker.html", + "compute-pressure/compute_pressure_options.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" + ] + ] + } + ] + ], + "compute_pressure_take_records.https.window.js": [ + "0025dd61701b52f38e1f8428124ffba133dfc62a", + [ + "compute-pressure/compute_pressure_take_records.https.window.html?globalScope=dedicated_worker", + { + "script_metadata": [ + [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_options.https.any.worker.html", + "compute-pressure/compute_pressure_take_records.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } ] ], - "compute_pressure_rate_obfuscation_mitigation_not_triggered.https.window.js": [ - "f3e966de24183f729918ca5a96add3941df1a40e", + "compute_pressure_timestamp.https.window.js": [ + "0f35eef522a454bfde3db8fcf0d2fce49f3f2bb6", [ - "compute-pressure/compute_pressure_rate_obfuscation_mitigation_not_triggered.https.window.html", + "compute-pressure/compute_pressure_timestamp.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ @@ -529675,26 +530196,39 @@ "long" ], [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ], "timeout": "long" } - ] - ], - "compute_pressure_rate_obfuscation_mitigation_triggered.https.window.js": [ - "b481cf6c87d87d0853468ebd7b3e257cd66ae5e3", + ], [ - "compute-pressure/compute_pressure_rate_obfuscation_mitigation_triggered.https.window.html", + "compute-pressure/compute_pressure_timestamp.https.window.html?globalScope=window", { "script_metadata": [ [ @@ -529702,197 +530236,272 @@ "long" ], [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ], "timeout": "long" } ] ], - "compute_pressure_take_records.https.any.js": [ - "55660b228be22453c3d48a907d8501e3d9a55c00", + "compute_pressure_timestamp_continuously_increasing.https.window.js": [ + "bdf5dbae6f513ccd0603f97b4c29f6f6c65f1c12", [ - "compute-pressure/compute_pressure_take_records.https.any.html", + "compute-pressure/compute_pressure_timestamp_continuously_increasing.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" + "timeout", + "long" + ], + [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver.js" ], [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/compute_pressure_take_records.https.any.sharedworker.html", - { - "script_metadata": [ + "script", + "/resources/testdriver-vendor.js" + ], [ "script", - "/resources/test-only-api.js" + "/common/utils.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/dispatcher/dispatcher.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "./resources/common.js" ] - ] + ], + "timeout": "long" } ], [ - "compute-pressure/compute_pressure_take_records.https.any.worker.html", + "compute-pressure/compute_pressure_timestamp_continuously_increasing.https.window.html?globalScope=window", { "script_metadata": [ [ + "timeout", + "long" + ], + [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/utils.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] - ] + ], + "timeout": "long" } ] ], - "compute_pressure_timestamp.https.any.js": [ - "18db1dac461dd175bf7ee67ff96e6084a61964ad", + "compute_pressure_timestamp_faster_collector.https.window.js": [ + "40ffe3b5b006e3ed8e1d1aae7ad3db40be2a17a3", [ - "compute-pressure/compute_pressure_timestamp.https.any.html", + "compute-pressure/compute_pressure_timestamp_faster_collector.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" + "timeout", + "long" + ], + [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver.js" ], [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/compute_pressure_timestamp.https.any.sharedworker.html", - { - "script_metadata": [ + "script", + "/resources/testdriver-vendor.js" + ], [ "script", - "/resources/test-only-api.js" + "/common/utils.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/dispatcher/dispatcher.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "./resources/common.js" ] - ] + ], + "timeout": "long" } ], [ - "compute-pressure/compute_pressure_timestamp.https.any.worker.html", + "compute-pressure/compute_pressure_timestamp_faster_collector.https.window.html?globalScope=window", { "script_metadata": [ [ + "timeout", + "long" + ], + [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] - ] + ], + "timeout": "long" } ] ], - "compute_pressure_update_toJSON.https.any.js": [ - "7f726698d61dd30afe588f4b477de5dc6bdbe407", + "compute_pressure_update_toJSON.https.window.js": [ + "4ba8142c72edf96919f3ddf6fb9cd3eb7708f970", [ - "compute-pressure/compute_pressure_update_toJSON.https.any.html", + "compute-pressure/compute_pressure_update_toJSON.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver.js" ], [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/compute_pressure_update_toJSON.https.any.sharedworker.html", - { - "script_metadata": [ + "script", + "/resources/testdriver-vendor.js" + ], [ "script", - "/resources/test-only-api.js" + "/common/utils.js" ], [ "script", - "resources/pressure-helpers.js" + "/common/dispatcher/dispatcher.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "./resources/common.js" ] ] } ], [ - "compute-pressure/compute_pressure_update_toJSON.https.any.worker.html", + "compute-pressure/compute_pressure_update_toJSON.https.window.html?globalScope=window", { "script_metadata": [ [ + "variant", + "?globalScope=window" + ], + [ + "variant", + "?globalScope=dedicated_worker" + ], + [ "script", - "/resources/test-only-api.js" + "/resources/testdriver.js" ], [ "script", - "resources/pressure-helpers.js" + "/resources/testdriver-vendor.js" ], [ - "global", - "window,dedicatedworker,sharedworker" + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "./resources/common.js" ] ] } @@ -529958,61 +530567,34 @@ } ] ], - "observe_return_type.https.any.js": [ - "b24878ab394d236db4babb395e5703682b28c95d", + "observe_return_type.https.window.js": [ + "6653f9a89eed083974ce9d1a4c31f34c4aec4407", [ - "compute-pressure/observe_return_type.https.any.html", + "compute-pressure/observe_return_type.https.window.html?globalScope=dedicated_worker", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" - ], - [ - "script", - "resources/pressure-helpers.js" - ], - [ - "global", - "window,dedicatedworker,sharedworker" - ] - ] - } - ], - [ - "compute-pressure/observe_return_type.https.any.sharedworker.html", - { - "script_metadata": [ - [ - "script", - "/resources/test-only-api.js" - ], - [ - "script", - "resources/pressure-helpers.js" + "variant", + "?globalScope=window" ], [ - "global", - "window,dedicatedworker,sharedworker" + "variant", + "?globalScope=dedicated_worker" ] ] } ], [ - "compute-pressure/observe_return_type.https.any.worker.html", + "compute-pressure/observe_return_type.https.window.html?globalScope=window", { "script_metadata": [ [ - "script", - "/resources/test-only-api.js" - ], - [ - "script", - "resources/pressure-helpers.js" + "variant", + "?globalScope=window" ], [ - "global", - "window,dedicatedworker,sharedworker" + "variant", + "?globalScope=dedicated_worker" ] ] } @@ -538184,6 +538766,15 @@ } ] ], + "partitioned-cookies-same-site-subresource-to-cross-site-redirect.tentative.https.html": [ + "971f7ccfef5e839f20af6b68cc623b27926fe749", + [ + null, + { + "timeout": "long" + } + ] + ], "partitioned-cookies-top-level-redirect.tentative.https.html": [ "b3134295da893d58b387d2ff0674baed2342655c", [ @@ -541363,14 +541954,14 @@ ] ], "anchor-parse-invalid.html": [ - "f64a1fe2fede35894d132a620e54b4e9d9c6800e", + "04b19b25301cbbb84e48ec0ebc561baeb6963389", [ null, {} ] ], "anchor-parse-valid.html": [ - "a51d50b6bfcbb5d2f7d52ec966202056d32b7f7d", + "ec1c4971349cca93aa8ec473ba38e64b9adba1b0", [ null, {} @@ -545381,7 +545972,7 @@ ] ], "import-conditions.html": [ - "9c1e5c6e8768eecc881414c281fec2b971fb84d9", + "fba3632bef331f41bf3602ff0af1e26f6a8c6f4a", [ null, {} @@ -547346,7 +547937,7 @@ ], "content-visibility": { "animation-display-lock.html": [ - "279ffd002ed21a90b2525978e9c0b328375b69a1", + "f380a06621a95b97aff81a9d576a3260a9e3a96c", [ null, {} @@ -551999,6 +552590,26 @@ ] } }, + "css-gaps": { + "tentative": { + "parsing": { + "gap-decorations-color-invalid.html": [ + "a1e6769a95cd5af79e7512176b4afd0282481913", + [ + null, + {} + ] + ], + "gap-decorations-color-valid.html": [ + "e8fd4df36151f7713d9065978ed83b955a735906", + [ + null, + {} + ] + ] + } + } + }, "css-grid": { "abspos": { "absolute-positioning-definite-sizes-001.html": [ @@ -560653,28 +561264,28 @@ ] ], "highlight-currentcolor-computed-inheritance.html": [ - "d67ae828818aab04a61d7e55cbdfb23222277f93", + "90bfc526227d9fb5f74298940c585078ca931257", [ null, {} ] ], "highlight-currentcolor-computed-visited.html": [ - "207cb7b7dd1301672d550f63b2b91827bd57c6f1", + "21f3b38bef0b89495feb86cfe0402504b8d0861f", [ null, {} ] ], "highlight-currentcolor-computed.html": [ - "97c31809dfc76cd3fdbd051e66fd7ec162f3708e", + "c9c493bd721db8e2867b19eef19924426c908409", [ null, {} ] ], - "highlight-pseudos-computed-001.tentative.html": [ - "752af0b29f33652abd6e11601beccd8f25516725", + "highlight-pseudos-computed-search-text.tentative.html": [ + "87c3235ed00d5fb1e9cee6a31269d6522775d2aa", [ null, {} @@ -560688,14 +561299,14 @@ ] ], "highlight-pseudos-inheritance-computed-001.html": [ - "84c4045a54c76f88e8ab59e8be4a0e601a580f2f", + "4c89d0d0bb430ccc80c5e17af7c4cfa72b5e1e18", [ null, {} ] ], "highlight-pseudos-visited-computed-001.html": [ - "a2b18effccdcf78576da26003ea58985325f999b", + "074ef932b8e514b6786fb5b9c547ce0287865240", [ null, {} @@ -560777,8 +561388,8 @@ ] ], "parsing": { - "highlight-pseudos-001.tentative.html": [ - "312135ccf4da13cb7486d22cbb42a567286af53d", + "highlight-pseudos-search-text.tentative.html": [ + "c870125bbc83097342c13ea62e1f9cf7b5629e57", [ null, {} @@ -561084,6 +561695,60 @@ {} ] ], + "has-slotted-changing-001.tentative.html": [ + "5c6cce72bb7ccd9cd9b78a76bd83e4b61083adc5", + [ + null, + { + "testdriver": true + } + ] + ], + "has-slotted-changing-002.tentative.html": [ + "98c15f30c8f0968316331af9cad7521d3e02adb9", + [ + null, + { + "testdriver": true + } + ] + ], + "has-slotted-functional-changing-001.tentative.html": [ + "209a47298e3554f59a0b02ae6f2d53a3aab20498", + [ + null, + { + "testdriver": true + } + ] + ], + "has-slotted-functional-changing-002.tentative.html": [ + "36fafcb1dcc49b45d6380efdba33955ca294d34b", + [ + null, + { + "testdriver": true + } + ] + ], + "has-slotted-functional-changing-003.tentative.html": [ + "9914e452088066d860fd57edb80ec865fba3bcf8", + [ + null, + { + "testdriver": true + } + ] + ], + "has-slotted-functional-changing-004.tentative.html": [ + "669162050aab4ec3f32c778d78b3f9ab7dae7f2b", + [ + null, + { + "testdriver": true + } + ] + ], "host-context-parsing.html": [ "56055ece63733e8c58c6add661566572356d67aa", [ @@ -562641,21 +563306,21 @@ }, "scroll-start-target": { "scroll-start-target-aligns-with-snap-align.tentative.html": [ - "6b133dea7d722bb77dde669ef2ef6c666c35551e", + "3203e1e1a61593a84d8c1f6a6893768322387da4", [ null, {} ] ], "scroll-start-target-display-toggled.tentative.html": [ - "527d7502678bab30c64cd351a2f76d56c50dd1f5", + "a0224a568e5658abaef76e6dd0bb67f77fcd70c2", [ null, {} ] ], "scroll-start-target-nested-container.tentative.html": [ - "4574421c8cd9e4b58e41d85ee72b65b81859a8fe", + "e3a1df6e6a1b6a27dea2ffe4f768ea167c7962ce", [ null, { @@ -562664,14 +563329,21 @@ ] ], "scroll-start-target-root.tentative.html": [ - "f2af38bbabcc210f4a6faa18e66cd38d0132004a", + "860a592bb106a50482b18437b3d8a7186e33a03e", [ null, {} ] ], "scroll-start-target-rtl.tentative.html": [ - "5a2fa0a93cad6fd781915ada495302599e8d1007", + "e7766cc07a2c8632030b462c44f550c312137135", + [ + null, + {} + ] + ], + "scroll-start-target-span.tentative.html": [ + "0985dcc2ee91f00032f3b0561a98082da09f4b0d", [ null, {} @@ -562694,21 +563366,21 @@ ] ], "scroll-start-target-with-scroll-snap.tentative.html": [ - "9cb66c01fcefeb15e6657773dd46185cc50f0fe6", + "28bea40d7a04481d3426429dd89f697e061b08c3", [ null, {} ] ], "scroll-start-target-with-scroll-start-root.tentative.html": [ - "af99595f254138e6c8e5367441a3372f6a06c947", + "daf664aa7fbdf75b88cf16b544b76f5060c6a6a6", [ null, {} ] ], "scroll-start-target-with-scroll-start.tentative.html": [ - "a37c8312887125d18c90e47b6343b3d746953c60", + "a08daad76db6ddc9a3997fa7f612298ab7f47e91", [ null, {} @@ -562724,7 +563396,7 @@ ] ], "scroll-start-target-with-user-programmatic-scroll.tentative.html": [ - "2d487e9b85cde86898a5dc1893c11bf59f759400", + "6bcf103253d6c54060a6e07eb370961fea20ad64", [ null, { @@ -562733,7 +563405,7 @@ ] ], "scroll-start-target.tentative.html": [ - "2e679c37396646e71e15c5fdf0c1552911de235e", + "1fcb3cbbe40ae91298945a15274f1d4a143a5f43", [ null, {} @@ -563266,7 +563938,7 @@ ] ], "pseudo-classes-after-part.html": [ - "a2a2f35db4d7cecd90155bf4d48f428b3d766345", + "60292d27a71c26ef2c327a85458a957887275561", [ null, {} @@ -572959,6 +573631,13 @@ {} ] ], + "caret-animation-parsing.html": [ + "7f54dc8e830c32c60e5ece1deefe75b8c4b3c69f", + [ + null, + {} + ] + ], "caret-color-composition.html": [ "6c69578677896e2463331deba85731e13fd94a25", [ @@ -575525,14 +576204,14 @@ ] ], "view-transition-name-invalid.html": [ - "00cd411d6ad726690cca6a53caf0c9d2d70ca072", + "0151991436c824225d518ea23ce5f4860bfca8f0", [ null, {} ] ], "view-transition-name-valid.html": [ - "2fd384449f5656bfdefd673b8a62c8444a669e16", + "b1d08af0aaaa4b912ffebacd5b2bf46dfd4cdf64", [ null, {} @@ -575693,7 +576372,7 @@ ] ], "zoom-valid.html": [ - "3f36508b8be55d91ce08631779025e9b7e8e0507", + "5e4500a59ff8d30d9a19523bcaf7a639420c058c", [ null, {} @@ -579751,7 +580430,7 @@ ] ], "dir-pseudo-on-input-element.html": [ - "b1427bf42d6636b42314427a37db724597b24f4a", + "8e3ba51f5bb49a0b29492169db4e7ad68ddf2296", [ null, {} @@ -580831,6 +581510,20 @@ {} ] ], + "host-has-shadow-tree-element-at-nonsubject-position.html": [ + "54f8c7b02ef67513f2ba2a772b9d88546cccd354", + [ + null, + {} + ] + ], + "host-has-shadow-tree-element-at-subject-position.html": [ + "f7c694bc36274bec526caecae8fabfe43a8fb642", + [ + null, + {} + ] + ], "host-pseudo-class-in-has.html": [ "4d300befa763efb2f7c4bed847dbba3cbdb91fb8", [ @@ -582798,7 +583491,7 @@ }, "digital-credentials": { "allow-attribute.https.html": [ - "a42a3b68f0e888b8a745429bff1f14819d741e65", + "412236268086d805fb74346c2411db91dcfdc459", [ null, {} @@ -582928,6 +583621,24 @@ } ] ], + "copy-document-mode-quirks.https.html": [ + "fde59d972b30c8d7ef449e7971f36afc9658abac", + [ + null, + { + "testdriver": true + } + ] + ], + "copy-document-mode.https.html": [ + "82e62077037197bb8746f16ece18a87b89ecadf1", + [ + null, + { + "testdriver": true + } + ] + ], "display-mode.https.html": [ "1b20a3593fb8131b8737734ef698375e5df604bc", [ @@ -585889,6 +586600,13 @@ {} ] ], + "Node-childNodes-cache.html": [ + "da9e32c6a9cf579f3d7c6ce2e3208e04f90d7105", + [ + null, + {} + ] + ], "Node-childNodes.html": [ "0d38df37b2d044f4da2237fa7c1dc090fc817b27", [ @@ -586835,6 +587553,13 @@ } ] ], + "listed-form-element-reset.html": [ + "29f524dd9e7de2f9036dd3f69f8268523dfd6d2e", + [ + null, + {} + ] + ], "modal-dialog.html": [ "fa9eeae85eb13daf948c20406b1b907575c1c1f6", [ @@ -586879,6 +587604,31 @@ {} ] ], + "preserve-render-blocking-script.html": [ + "7b4f508b5c91b19949c8dd0d7334337529a30879", + [ + null, + { + "timeout": "long" + } + ] + ], + "preserve-render-blocking-style.html": [ + "aa715c8b1447690ecdca2d7bf2e3dba965b4115b", + [ + null, + { + "timeout": "long" + } + ] + ], + "relevant-mutations.html": [ + "95b770dbef8afe13d80e40e3bd5720fb31a1f8ca", + [ + null, + {} + ] + ], "selection-preserve.html": [ "04b81c9a0563894c68ad498b49352e7de9e01049", [ @@ -591570,6 +592320,139 @@ ] ] }, + "plaintext-only": { + "insertHTML.html": [ + "b0577c45a5c20c8fdd4a42c99d188e3ee999ad83", + [ + "editing/plaintext-only/insertHTML.html?white-space=normal", + { + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertHTML.html?white-space=pre", + { + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertHTML.html?white-space=pre-line", + { + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertHTML.html?white-space=pre-wrap", + { + "timeout": "long" + } + ] + ], + "insertLineBreak.html": [ + "564eb16605c2bd05f9ec103c11e640f9250217af", + [ + "editing/plaintext-only/insertLineBreak.html?white-space=normal", + { + "testdriver": true, + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertLineBreak.html?white-space=pre", + { + "testdriver": true, + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertLineBreak.html?white-space=pre-line", + { + "testdriver": true, + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertLineBreak.html?white-space=pre-wrap", + { + "testdriver": true, + "timeout": "long" + } + ] + ], + "insertParagraph.html": [ + "2841fdb4f31e8eae28d47394d06eb50c2247adac", + [ + "editing/plaintext-only/insertParagraph.html?white-space=normal", + { + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertParagraph.html?white-space=pre", + { + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertParagraph.html?white-space=pre-line", + { + "timeout": "long" + } + ], + [ + "editing/plaintext-only/insertParagraph.html?white-space=pre-wrap", + { + "timeout": "long" + } + ] + ], + "paste.https.html": [ + "611c39f8bf3c89237ff7ef24a4a5111619dfe6c6", + [ + "editing/plaintext-only/paste.https.html?white-space=normal", + { + "testdriver": true, + "timeout": "long" + } + ], + [ + "editing/plaintext-only/paste.https.html?white-space=pre", + { + "testdriver": true, + "timeout": "long" + } + ], + [ + "editing/plaintext-only/paste.https.html?white-space=pre-line", + { + "testdriver": true, + "timeout": "long" + } + ], + [ + "editing/plaintext-only/paste.https.html?white-space=pre-wrap", + { + "testdriver": true, + "timeout": "long" + } + ] + ], + "styling-commands.html": [ + "2afaf9212ac6439606617e99f4d1be681ff1e853", + [ + "editing/plaintext-only/styling-commands.html?styleWithCSS=false", + { + "timeout": "long" + } + ], + [ + "editing/plaintext-only/styling-commands.html?styleWithCSS=true", + { + "timeout": "long" + } + ] + ] + }, "run": { "backcolor.html": [ "5a4c35c34e59ab78e1145c848a9523fd7f34b1d2", @@ -604873,7 +605756,7 @@ ] ], "crossiframe.html": [ - "c307028c41392919fd7cfe32cbb6ca350c6480b8", + "74f88ac9a61ede8a3d7d23a3b432f7c22db41625", [ null, { @@ -607462,7 +608345,7 @@ ] ], "fedcm-storage-access-api-autogrant.tentative.https.sub.html": [ - "6cbd7851414f1a7fa5745b4cbc82b38a8926bd27", + "66486b01523b98354c5c42eac6846540783871b5", [ null, { @@ -608637,7 +609520,7 @@ ] ], "permission-api-denied-non-standard.https.html": [ - "ffc06781f6075ef95285af5f0d6bb91439eb9b95", + "94bc538f7fa941ffbfa6e84a19bd852aa4bb4445", [ null, { @@ -623941,7 +624824,7 @@ "fledge": { "tentative": { "abort.https.window.js": [ - "b99d60dd5282cd252b932f9d1ae1fe99230a5f8d", + "db6aae4604575fd0f096efeec45c86fe94e11e3d", [ "fledge/tentative/abort.https.window.html", { @@ -623952,6 +624835,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -623968,7 +624855,7 @@ ] ], "additional-bids.https.window.js": [ - "965f9a60c7e6630b00be480f20e95ecf21e610a5", + "3ba0b49cbc089e2c3789bbf0bf2d75f59c0145e1", [ "fledge/tentative/additional-bids.https.window.html?1-last", { @@ -623979,6 +624866,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624003,7 +624894,7 @@ ] ], "auction-config-passed-to-worklets.https.window.js": [ - "7780957739e435825f186500f56a6e102e9c2c32", + "dae7d7d806ab8659032070dbeab291d1ad1284aa", [ "fledge/tentative/auction-config-passed-to-worklets.https.window.html?1-5", { @@ -624014,6 +624905,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624046,7 +624941,15 @@ ], [ "variant", - "?21-last" + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?30-35" ] ], "timeout": "long" @@ -624062,6 +624965,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624094,7 +625001,15 @@ ], [ "variant", - "?21-last" + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?30-35" ] ], "timeout": "long" @@ -624110,6 +625025,130 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/fledge-util.sub.js" + ], + [ + "script", + "/common/subset-tests.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "?1-5" + ], + [ + "variant", + "?6-10" + ], + [ + "variant", + "?11-15" + ], + [ + "variant", + "?16-20" + ], + [ + "variant", + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?30-35" + ] + ], + "timeout": "long" + } + ], + [ + "fledge/tentative/auction-config-passed-to-worklets.https.window.html?21-25", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/fledge-util.sub.js" + ], + [ + "script", + "/common/subset-tests.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "?1-5" + ], + [ + "variant", + "?6-10" + ], + [ + "variant", + "?11-15" + ], + [ + "variant", + "?16-20" + ], + [ + "variant", + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?30-35" + ] + ], + "timeout": "long" + } + ], + [ + "fledge/tentative/auction-config-passed-to-worklets.https.window.html?26-30", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624142,14 +625181,22 @@ ], [ "variant", - "?21-last" + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?30-35" ] ], "timeout": "long" } ], [ - "fledge/tentative/auction-config-passed-to-worklets.https.window.html?21-last", + "fledge/tentative/auction-config-passed-to-worklets.https.window.html?30-35", { "script_metadata": [ [ @@ -624158,6 +625205,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624190,7 +625241,15 @@ ], [ "variant", - "?21-last" + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?30-35" ] ], "timeout": "long" @@ -624206,6 +625265,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624238,7 +625301,15 @@ ], [ "variant", - "?21-last" + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?30-35" ] ], "timeout": "long" @@ -624246,7 +625317,7 @@ ] ], "auction-config.https.window.js": [ - "4efef29344d90a8ab3a8a8bd13beaa86f438260c", + "fc1441a87430011f4326207eb692b55009f72a6c", [ "fledge/tentative/auction-config.https.window.html?1-5", { @@ -624257,6 +625328,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624321,7 +625396,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624337,6 +625420,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624401,7 +625488,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624417,6 +625512,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624481,7 +625580,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624497,6 +625604,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624561,7 +625672,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624577,6 +625696,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624641,7 +625764,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624657,6 +625788,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624721,7 +625856,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624737,6 +625880,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624801,7 +625948,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624817,6 +625972,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624881,7 +626040,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624897,6 +626064,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -624961,7 +626132,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -624977,6 +626156,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625041,7 +626224,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -625057,6 +626248,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625121,7 +626316,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -625137,6 +626340,194 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/fledge-util.sub.js" + ], + [ + "script", + "/common/subset-tests.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "?1-5" + ], + [ + "variant", + "?6-10" + ], + [ + "variant", + "?11-15" + ], + [ + "variant", + "?16-20" + ], + [ + "variant", + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?31-35" + ], + [ + "variant", + "?36-40" + ], + [ + "variant", + "?40-45" + ], + [ + "variant", + "?46-50" + ], + [ + "variant", + "?51-55" + ], + [ + "variant", + "?56-60" + ], + [ + "variant", + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" + ] + ], + "timeout": "long" + } + ], + [ + "fledge/tentative/auction-config.https.window.html?61-65", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/fledge-util.sub.js" + ], + [ + "script", + "/common/subset-tests.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "?1-5" + ], + [ + "variant", + "?6-10" + ], + [ + "variant", + "?11-15" + ], + [ + "variant", + "?16-20" + ], + [ + "variant", + "?21-25" + ], + [ + "variant", + "?26-30" + ], + [ + "variant", + "?31-35" + ], + [ + "variant", + "?36-40" + ], + [ + "variant", + "?40-45" + ], + [ + "variant", + "?46-50" + ], + [ + "variant", + "?51-55" + ], + [ + "variant", + "?56-60" + ], + [ + "variant", + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" + ] + ], + "timeout": "long" + } + ], + [ + "fledge/tentative/auction-config.https.window.html?66-70", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625201,14 +626592,22 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" } ], [ - "fledge/tentative/auction-config.https.window.html?61-last", + "fledge/tentative/auction-config.https.window.html?71-last", { "script_metadata": [ [ @@ -625217,6 +626616,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625281,7 +626684,15 @@ ], [ "variant", - "?61-last" + "?61-65" + ], + [ + "variant", + "?66-70" + ], + [ + "variant", + "?71-last" ] ], "timeout": "long" @@ -625289,7 +626700,7 @@ ] ], "clear-origin-joined-ad-interest-groups.https.window.js": [ - "7d6e715ac45d979b541cfb50f2044ef34178df26", + "097978a7858523c759a70ac9843baec8eee65dc4", [ "fledge/tentative/clear-origin-joined-ad-interest-groups.https.window.html?1-4", { @@ -625300,6 +626711,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625344,6 +626759,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625388,6 +626807,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625432,6 +626855,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625468,7 +626895,7 @@ ] ], "component-ads.https.window.js": [ - "8493025429ed83b49f5117f0b3f237e03ccf64a5", + "6fec80102bb94da42a4fffa6bb3f5d5d8ded7d33", [ "fledge/tentative/component-ads.https.window.html?1-5", { @@ -625479,6 +626906,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625523,6 +626954,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625567,6 +627002,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625611,6 +627050,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625647,7 +627090,7 @@ ] ], "component-auction.https.window.js": [ - "bf804e68579937f8192ba6bf377e0ed6fdedf501", + "054ad8c742ef92f1314211b4252704eca8b96860", [ "fledge/tentative/component-auction.https.window.html?1-5", { @@ -625658,6 +627101,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625702,6 +627149,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625746,6 +627197,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625790,6 +627245,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625826,7 +627285,7 @@ ] ], "cross-origin.https.window.js": [ - "eed74c522f2a8f25c1a695a16ee2e9a7ffa14da0", + "9669f2790bcfa492a5419c9f7f16d39b12da0f2c", [ "fledge/tentative/cross-origin.https.window.html?1-4", { @@ -625837,6 +627296,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625881,6 +627344,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625925,6 +627392,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -625969,6 +627440,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626005,7 +627480,7 @@ ] ], "currency.https.window.js": [ - "99943cecbf962db6b732297abc328bb4198fc932", + "f1b2bba87340340fdf04b5d4c065fe06707f53a1", [ "fledge/tentative/currency.https.window.html?1-4", { @@ -626016,6 +627491,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626080,6 +627559,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626144,6 +627627,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626208,6 +627695,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626272,6 +627763,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626336,6 +627831,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626400,6 +627899,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626464,6 +627967,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626528,6 +628035,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626584,7 +628095,7 @@ ] ], "deprecated-render-url-replacements.https.window.js": [ - "4f8bc1cc7f0f5cd12b78a8cb05f787841b63f120", + "75377ca7aa348486fad8ed589e7d947f2dcb3b64", [ "fledge/tentative/deprecated-render-url-replacements.https.window.html?1-5", { @@ -626595,6 +628106,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626639,6 +628154,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626683,6 +628202,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626727,6 +628250,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626763,7 +628290,7 @@ ] ], "direct-from-seller-signals.https.window.js": [ - "d0c0e550c4232bd4dad1661b0b418084111a48a6", + "7f9baa978c0750bf24078a24acfef3f18dff2bb1", [ "fledge/tentative/direct-from-seller-signals.https.window.html?1-4", { @@ -626774,6 +628301,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626818,7 +628349,11 @@ ], [ "variant", - "?29-last" + "?29-32" + ], + [ + "variant", + "?33-36" ] ], "timeout": "long" @@ -626834,6 +628369,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626878,7 +628417,11 @@ ], [ "variant", - "?29-last" + "?29-32" + ], + [ + "variant", + "?33-36" ] ], "timeout": "long" @@ -626894,6 +628437,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626938,7 +628485,11 @@ ], [ "variant", - "?29-last" + "?29-32" + ], + [ + "variant", + "?33-36" ] ], "timeout": "long" @@ -626954,6 +628505,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -626998,7 +628553,11 @@ ], [ "variant", - "?29-last" + "?29-32" + ], + [ + "variant", + "?33-36" ] ], "timeout": "long" @@ -627014,6 +628573,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627058,14 +628621,18 @@ ], [ "variant", - "?29-last" + "?29-32" + ], + [ + "variant", + "?33-36" ] ], "timeout": "long" } ], [ - "fledge/tentative/direct-from-seller-signals.https.window.html?29-last", + "fledge/tentative/direct-from-seller-signals.https.window.html?29-32", { "script_metadata": [ [ @@ -627074,6 +628641,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627118,7 +628689,79 @@ ], [ "variant", - "?29-last" + "?29-32" + ], + [ + "variant", + "?33-36" + ] + ], + "timeout": "long" + } + ], + [ + "fledge/tentative/direct-from-seller-signals.https.window.html?33-36", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/fledge-util.sub.js" + ], + [ + "script", + "/common/subset-tests.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "?1-4" + ], + [ + "variant", + "?5-8" + ], + [ + "variant", + "?9-12" + ], + [ + "variant", + "?13-16" + ], + [ + "variant", + "?17-20" + ], + [ + "variant", + "?21-24" + ], + [ + "variant", + "?25-28" + ], + [ + "variant", + "?29-32" + ], + [ + "variant", + "?33-36" ] ], "timeout": "long" @@ -627134,6 +628777,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627178,7 +628825,11 @@ ], [ "variant", - "?29-last" + "?29-32" + ], + [ + "variant", + "?33-36" ] ], "timeout": "long" @@ -627194,6 +628845,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627238,7 +628893,11 @@ ], [ "variant", - "?29-last" + "?29-32" + ], + [ + "variant", + "?33-36" ] ], "timeout": "long" @@ -627260,7 +628919,7 @@ ] ], "generate-bid-browser-signals.https.window.js": [ - "c7078ae08ad3331a326b2d195f56691247f4b872", + "75a8b8368d48859854cfbe9ccf75deec47e526cb", [ "fledge/tentative/generate-bid-browser-signals.https.window.html?1-4", { @@ -627271,6 +628930,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627331,6 +628994,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627391,6 +629058,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627451,6 +629122,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627511,6 +629186,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627571,6 +629250,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627631,6 +629314,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627691,6 +629378,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627743,7 +629434,7 @@ ] ], "get-interest-group-auction-data.https.window.js": [ - "ec7a873fd511547682bdbed9c97df53ae12e33d3", + "3788045c8c21556114f91c432a5d4d4f3e74fd0e", [ "fledge/tentative/get-interest-group-auction-data.https.window.html?1-4", { @@ -627754,6 +629445,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627806,6 +629501,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627858,6 +629557,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627910,6 +629613,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -627961,7 +629668,7 @@ ] ], "interest-group-passed-to-generate-bid.https.window.js": [ - "2fb346bbe3ba14f0f7577de0111aba270cc87955", + "172cbab466440b4f2d8ffe3a1f937e9b4520461d", [ "fledge/tentative/interest-group-passed-to-generate-bid.https.window.html?1-5", { @@ -627972,6 +629679,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628068,6 +629779,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628164,6 +629879,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628260,6 +629979,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628356,6 +630079,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628452,6 +630179,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628548,6 +630279,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628644,6 +630379,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628740,6 +630479,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628836,6 +630579,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -628932,6 +630679,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629028,6 +630779,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629124,6 +630879,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629220,6 +630979,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629316,6 +631079,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629412,6 +631179,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629508,6 +631279,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629596,7 +631371,7 @@ ] ], "interest-group-update.https.window.js": [ - "59b3736b096fc7b70ece2b417edf99fb77f1b1fc", + "ceac2c79a6e93635f5f4ebb9e7e26256cb695a7b", [ "fledge/tentative/interest-group-update.https.window.html?1-4", { @@ -629607,6 +631382,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629655,6 +631434,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629703,6 +631486,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629751,6 +631538,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629799,6 +631590,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629839,7 +631634,7 @@ ] ], "join-leave-ad-interest-group-in-fenced-frame.https.window.js": [ - "e6836ab2f45a873a3d5bd3de9f74c92424782bec", + "1e2824666cc7c2b8c1fd8c19e2414bdea07f9714", [ "fledge/tentative/join-leave-ad-interest-group-in-fenced-frame.https.window.html?1-4", { @@ -629850,6 +631645,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629890,6 +631689,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629930,6 +631733,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -629962,7 +631769,7 @@ ] ], "join-leave-ad-interest-group.https.window.js": [ - "02148ef36b76b80178ee99775c4ae1dea534c01b", + "68a4e9d09c941493b8dd8c85c5a535a5d962d761", [ "fledge/tentative/join-leave-ad-interest-group.https.window.html?1-10", { @@ -629973,6 +631780,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630037,6 +631848,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630101,6 +631916,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630165,6 +631984,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630229,6 +632052,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630293,6 +632120,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630357,6 +632188,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630421,6 +632256,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630485,6 +632324,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630541,7 +632384,7 @@ ] ], "kanon-status-below-threshold.https.window.js": [ - "787283d687ff55e5a2b448764370416bfa90285e", + "6f3c2f572a198469607a27b51328c9ff8364d7a0", [ "fledge/tentative/kanon-status-below-threshold.https.window.html", { @@ -630552,6 +632395,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630567,7 +632414,7 @@ ] ], "kanon-status-not-calculated.https.window.js": [ - "4a750cd3529df529c63f0fa1cf4d083abeacc542", + "87a66c106fbff5388e05905539840556ceb41e35", [ "fledge/tentative/kanon-status-not-calculated.https.window.html", { @@ -630578,6 +632425,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630788,7 +632639,7 @@ ] ], "no-winner.https.window.js": [ - "6e02139c810c4eec7b4e0e721ede858cde56b1c0", + "2632a95deeeb85eb9bc7be26194260af218c59ad", [ "fledge/tentative/no-winner.https.window.html?1-5", { @@ -630799,6 +632650,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630867,6 +632722,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -630935,6 +632794,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631003,6 +632866,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631071,6 +632938,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631139,6 +633010,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631207,6 +633082,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631275,6 +633154,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631343,6 +633226,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631411,6 +633298,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631471,7 +633362,7 @@ ] ], "register-ad-beacon.https.window.js": [ - "3643e4466277144a389b08d3f029f294aa0a4480", + "d74f0dab5e56601c808d7cd28dc6dea78aa5b628", [ "fledge/tentative/register-ad-beacon.https.window.html?1-5", { @@ -631482,6 +633373,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631522,6 +633417,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631562,6 +633461,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631594,7 +633497,7 @@ ] ], "reporting-arguments.https.window.js": [ - "db6ef2d35a5fff6b2ab405c78b5200427b9c8717", + "a3b546f596476d95d36e6d0a6c7dd858c2a62e27", [ "fledge/tentative/reporting-arguments.https.window.html?1-5", { @@ -631605,6 +633508,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631649,6 +633556,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631693,6 +633604,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631737,6 +633652,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631773,7 +633692,7 @@ ] ], "reporting-ids.https.window.js": [ - "bcc02b09785af213dcb14c62f00c376d7d957876", + "43c78987f1e8610c5aff66f72ec37d2e58330dca", [ "fledge/tentative/reporting-ids.https.window.html?1-5", { @@ -631784,6 +633703,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631820,6 +633743,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631848,7 +633775,7 @@ ] ], "round-a-value.https.window.js": [ - "90523e2256c3a5582ef188d41ab0adcc107ffd93", + "2195b45ea5f81893699a6732f102d492f3d12bec", [ "fledge/tentative/round-a-value.https.window.html", { @@ -631859,6 +633786,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631875,7 +633806,7 @@ ] ], "score-ad-browser-signals.https.window.js": [ - "f20412cfc7857279ff7aabfbfd68d825be5d8051", + "ac9d7e337c2466a2d4897e86563cee6d768e63c2", [ "fledge/tentative/score-ad-browser-signals.https.window.html", { @@ -631886,6 +633817,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631906,7 +633841,7 @@ ] ], "send-report-to.https.window.js": [ - "e3cf0a95f17c171444d79a2b0f16d0fe1f1acbd4", + "163443cb76d450e5a559fefcbd48ac26266e33dc", [ "fledge/tentative/send-report-to.https.window.html?1-5", { @@ -631917,6 +633852,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631953,6 +633892,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -631981,7 +633924,7 @@ ] ], "server-response.https.window.js": [ - "b0981ca0fe88c79cc1b5e831048da425c31e4ac8", + "adc079f015ac43748643f4e9016b12028a84336e", [ "fledge/tentative/server-response.https.window.html?1-4", { @@ -631992,6 +633935,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632080,6 +634027,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632168,6 +634119,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632256,6 +634211,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632344,6 +634303,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632432,6 +634395,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632520,6 +634487,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632608,6 +634579,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632696,6 +634671,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632784,6 +634763,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632872,6 +634855,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -632960,6 +634947,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633048,6 +635039,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633127,8 +635122,47 @@ } ] ], + "service-worker-request-visibility.https.window.js": [ + "8b8618420e56e30d2a9e4428f24f22cc7d9053b9", + [ + "fledge/tentative/service-worker-request-visibility.https.window.html?1-last", + { + "script_metadata": [ + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/fledge-util.sub.js" + ], + [ + "script", + "/common/subset-tests.js" + ], + [ + "timeout", + "long" + ], + [ + "variant", + "?1-last" + ] + ], + "timeout": "long" + } + ] + ], "tie.https.window.js": [ - "c87d10f2016fa94d6a1e722fa9dfe1d3bb5c4def", + "f528df8fb020382907a63d372452010217bf2b55", [ "fledge/tentative/tie.https.window.html", { @@ -633139,6 +635173,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633155,7 +635193,7 @@ ] ], "trusted-bidding-signals.https.window.js": [ - "205c6895a06b3235ef3d448d16fad85743d14e31", + "1775b3e77a365c5d6973c790465c783804950445", [ "fledge/tentative/trusted-bidding-signals.https.window.html?1-5", { @@ -633166,6 +635204,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633258,6 +635300,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633350,6 +635396,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633442,6 +635492,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633534,6 +635588,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633626,6 +635684,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633718,6 +635780,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633810,6 +635876,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633902,6 +635972,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -633994,6 +636068,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634086,6 +636164,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634178,6 +636260,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634270,6 +636356,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634362,6 +636452,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634454,6 +636548,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634546,6 +636644,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634630,7 +636732,7 @@ ] ], "trusted-scoring-signals.https.window.js": [ - "46570da3e41a26dac8d7fb3e2007d8a7df87b51c", + "d664b4f308e5471da4249153846ecd94015083b8", [ "fledge/tentative/trusted-scoring-signals.https.window.html?1-5", { @@ -634641,6 +636743,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634713,6 +636819,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634785,6 +636895,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634857,6 +636971,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -634929,6 +637047,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -635001,6 +637123,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -635073,6 +637199,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -635145,6 +637275,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -635217,6 +637351,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -635289,6 +637427,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -635361,6 +637503,10 @@ ], [ "script", + "/resources/testdriver-vendor.js" + ], + [ + "script", "/common/utils.js" ], [ @@ -651250,36 +653396,36 @@ {} ] ], - "2d.filter.layers.blur.exceptions.html": [ - "6ac5d225c8888a76e5cb8db57afe645603a7e2eb", + "2d.filter.layers.blur.exceptions.tentative.html": [ + "ac1fbe7229974fa8c476450e2a70df3314ecafec", [ null, {} ] ], - "2d.filter.layers.colorMatrix.html": [ - "103e0bf2032e54c64aa77cba0ebf1823fed63e8d", + "2d.filter.layers.colorMatrix.tentative.html": [ + "4080111454f28592752f7fd583f38ec08f8f0980", [ null, {} ] ], - "2d.filter.layers.convolveMatrix.exceptions.html": [ - "7d2e31b5f7c800aced92c20aeb688cf218233876", + "2d.filter.layers.convolveMatrix.exceptions.tentative.html": [ + "b32ca05be53e0dfeaaec9812b3065aec405dff7f", [ null, {} ] ], - "2d.filter.layers.dropShadow.exceptions.html": [ - "c1792a554f5acb734ba3b28fcddbec557eb07776", + "2d.filter.layers.dropShadow.exceptions.tentative.html": [ + "9bda089659deae21424b3196d18e394e1cccacf1", [ null, {} ] ], - "2d.filter.layers.turbulence.inputTypes.html": [ - "618528ce23bde57954d7feae9c4071bcd5961f55", + "2d.filter.layers.turbulence.inputTypes.tentative.html": [ + "620410de54440beb02446c65ea550a5763757598", [ null, {} @@ -651841,7 +653987,7 @@ ] ], "createImageBitmap-colorSpaceConversion.html": [ - "2ddf3648f5a34a8d1513d6d6b038d07bd5caae9c", + "24ee1d3a9e67aced64ea45537efd542d0b2e9636", [ null, {} @@ -651862,7 +654008,7 @@ ] ], "createImageBitmap-exif-orientation.html": [ - "8b2a33e85b1ff0b2b167483c04d10d9e9288317a", + "ee7023a398839d0427c3bfceaa23141fe583b645", [ null, {} @@ -652525,6 +654671,13 @@ {} ] ], + "2d.path.closed.arc.html": [ + "9e33d457461061ccd5311504f92808968eb9cdf8", + [ + null, + {} + ] + ], "2d.path.ellipse.basics.html": [ "03bd3a41f027cebb9eaef414508d493bbd5d7426", [ @@ -652798,6 +654951,13 @@ {} ] ], + "2d.path.open.arc.html": [ + "c0dc086ac3210eaf98f408d7ec57c78199047987", + [ + null, + {} + ] + ], "2d.path.quadraticCurveTo.basic.html": [ "895063da760efc5313ae1beb66ecc61339e92d0a", [ @@ -655040,7 +657200,7 @@ ] ], "2d.text.measure.caret-position.tentative.html": [ - "adba1b73b13018fbd211494bc9fe65613fa2ca6a", + "4b223c8a0a356833ef0d8ad51e8cb3a915a328eb", [ null, {} @@ -655137,6 +657297,20 @@ {} ] ], + "2d.text.measure.text-clusters-exceptions.tentative.html": [ + "1c5352bd5edcfc251b672dbd6990b7012810164a", + [ + null, + {} + ] + ], + "2d.text.measure.text-clusters-split.tentative.html": [ + "63c7cce72be7c1ede567c2f00001d7a57addadbc", + [ + null, + {} + ] + ], "2d.text.measure.width.basic.html": [ "be11d5b2898c70f165f9266abc6b6d99db73815a", [ @@ -661901,73 +664075,73 @@ {} ] ], - "2d.filter.layers.blur.exceptions.html": [ - "1c433f82470ff1c9315b937ec6542fbe57fe2cbb", + "2d.filter.layers.blur.exceptions.tentative.html": [ + "a2f913f160390a7193c6ede73ef41aeaa946f7d5", [ null, {} ] ], - "2d.filter.layers.blur.exceptions.worker.js": [ - "a053b8113c4ef8d1e510f41356ee014ed42a33ff", + "2d.filter.layers.blur.exceptions.tentative.worker.js": [ + "7f200ed9995b160ffd6e738fc4028ff125f78bcb", [ - "html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.worker.html", + "html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.worker.html", {} ] ], - "2d.filter.layers.colorMatrix.html": [ - "1db973fa8a2acbba9031d6e1d362bbf4ceeac722", + "2d.filter.layers.colorMatrix.tentative.html": [ + "e69587e55dd590b6fcfbc6f5bad044505a52d523", [ null, {} ] ], - "2d.filter.layers.colorMatrix.worker.js": [ - "12cdff3868881decae30b3e2d7249b237320ca4b", + "2d.filter.layers.colorMatrix.tentative.worker.js": [ + "beda91cbc57d74ae3a86cd1b6e294865ae693431", [ - "html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.worker.html", + "html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.html", {} ] ], - "2d.filter.layers.convolveMatrix.exceptions.html": [ - "aa5020c871273017217ddb4e7951b142423c5a3c", + "2d.filter.layers.convolveMatrix.exceptions.tentative.html": [ + "a9c55384ba5d0e7d9e856094ae513b75bda04e02", [ null, {} ] ], - "2d.filter.layers.convolveMatrix.exceptions.worker.js": [ - "fa3be89ba2f1a3ee9e665913f3297d38dbe95a82", + "2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js": [ + "dfbc68eb55b3fae6053ee6f0c7de89807078b11e", [ - "html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.worker.html", + "html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.html", {} ] ], - "2d.filter.layers.dropShadow.exceptions.html": [ - "e4982b7c052645ff4e7666300a4933aa5e8064e6", + "2d.filter.layers.dropShadow.exceptions.tentative.html": [ + "22f0c00ed3c43fbb839e9adc552a1090a21b936a", [ null, {} ] ], - "2d.filter.layers.dropShadow.exceptions.worker.js": [ - "65fc751215477a96b8324ca006192aa6ad8b699b", + "2d.filter.layers.dropShadow.exceptions.tentative.worker.js": [ + "95ea75f8d3fa73797c8f4efe55ebf67786f23b68", [ - "html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.worker.html", + "html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.html", {} ] ], - "2d.filter.layers.turbulence.inputTypes.html": [ - "897c22e853e0fe912db6cbf4f87d1da586053b18", + "2d.filter.layers.turbulence.inputTypes.tentative.html": [ + "2b47274f705ac926f6582d6a8f18579dd8e8ac19", [ null, {} ] ], - "2d.filter.layers.turbulence.inputTypes.worker.js": [ - "3728566c9972833ba5d9a6ecb7d13bbcdb735bf4", + "2d.filter.layers.turbulence.inputTypes.tentative.worker.js": [ + "8b68d25ef88eef2b247023c97d176be2ebe5887e", [ - "html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.worker.html", + "html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.html", {} ] ], @@ -663806,6 +665980,20 @@ {} ] ], + "2d.path.closed.arc.html": [ + "21f111e2aa29079d398c8e21566034701de5d6a6", + [ + null, + {} + ] + ], + "2d.path.closed.arc.worker.js": [ + "8bc039172253458283afd8254d0248ebe71ce965", + [ + "html/canvas/offscreen/path-objects/2d.path.closed.arc.worker.html", + {} + ] + ], "2d.path.ellipse.basics.html": [ "0158d5428f93ea5338a5b51bcba823c94ceebc86", [ @@ -664366,6 +666554,20 @@ {} ] ], + "2d.path.open.arc.html": [ + "416f06c2173c17b43307c7050b7787992cad72fe", + [ + null, + {} + ] + ], + "2d.path.open.arc.worker.js": [ + "25d762dfaee0e593f5020f783156ad9eb0d57458", + [ + "html/canvas/offscreen/path-objects/2d.path.open.arc.worker.html", + {} + ] + ], "2d.path.quadraticCurveTo.basic.html": [ "47ef63597dc6784a157c7d626c9389cba51b4948", [ @@ -668603,7 +670805,7 @@ ] ], "2d.text.measure.caret-position.tentative.html": [ - "aa52eede31697b4e419622cc1239826dff295ffa", + "3c1873aaf1f27b17da19860c693b0ce006cc6da2", [ null, {} @@ -668784,6 +670986,34 @@ {} ] ], + "2d.text.measure.text-clusters-exceptions.tentative.html": [ + "0df29ba458f3eb8228bec01180566ef254ab9289", + [ + null, + {} + ] + ], + "2d.text.measure.text-clusters-exceptions.tentative.worker.js": [ + "fd99cb0a0f3766dc3ac49373444b49bf244199ec", + [ + "html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.html", + {} + ] + ], + "2d.text.measure.text-clusters-split.tentative.html": [ + "6a5fd475795e140ff8b8533b8d070baf97f0ebfe", + [ + null, + {} + ] + ], + "2d.text.measure.text-clusters-split.tentative.worker.js": [ + "f98c323e0e2311a25dbb2b90a192ccf6f3c8968d", + [ + "html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.html", + {} + ] + ], "2d.text.measure.width.basic.html": [ "226fd4019573c5f06780ec3890785f750f944e4a", [ @@ -682085,14 +684315,14 @@ ] ], "embed-document-under-content-visibility-focus.html": [ - "26a77918e0c6653cd168cd09bc1945d2851a8562", + "c464ecf0b4b07e7b4539c880c8d7946a19fc098f", [ null, {} ] ], "embed-document-under-content-visibility-gbcr.html": [ - "074e63bf2bd3d9e24d9fe130738d7e6c903ca5fb", + "9fdb88a63907ef5e70f5163fc545f972dc8957bc", [ null, {} @@ -682113,7 +684343,7 @@ ] ], "embed-in-object-fallback-2.html": [ - "d904a7e1a1cae1b787f80e0ab8d70ef2f54a4a62", + "1fc082aa031d63fe283444b031d85f1c0d6b9076", [ null, {} @@ -682133,6 +684363,13 @@ {} ] ], + "embed-represent-nothing-04.html": [ + "e4bf481c75562db0c6cc80ad6c8fd0926292246e", + [ + null, + {} + ] + ], "embed-svg-navigation-resets-size.html": [ "237c9c3646bb0ed34b27bf2279dc57304ddaea4f", [ @@ -684216,14 +686453,14 @@ ] ], "object-in-display-none-load-event.html": [ - "c8369365af0bb241ff66db733bf75440781996b9", + "f2a93b3e5f056c00d60136ebf30ead9d9425db48", [ null, {} ] ], "object-in-object-fallback-2.html": [ - "47cf8016935d22a1ad92734bf0a2db21ace4a81c", + "a026e59e485a6e25a52bf12f51b9ac6c4a5bf514", [ null, {} @@ -686513,6 +688750,16 @@ {} ] ], + "select-type-to-search.tentative.html": [ + "2cb7ca491080ee84a5e1070cb622172231947b1c", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], "selectedoption.tentative.html": [ "b3381ac510a9905b0907e1528287197352bc4c86", [ @@ -688090,6 +690337,15 @@ {} ] ], + "granted-selector.html": [ + "3ce1ad728e0499365a7bdebec3cf95a702ff469c", + [ + null, + { + "testdriver": true + } + ] + ], "invalid-css-properties.tentative.html": [ "334280c83bdf9919626ddaf64adc522f2ca51f8d", [ @@ -700084,7 +702340,7 @@ ] ], "crossOrigin.sub.html": [ - "3f6f3a77f3a67a1c5f96b9117363582bda66f3cf", + "2b4c61296e1dc7710cf658dbeeac63540981d7cf", [ null, { @@ -700229,7 +702485,7 @@ ] ], "popup.html": [ - "62140d63814fe3f0c9a78415412e3e0393929f3c", + "d291fdc07b3220182d88b167239601247fad62a5", [ null, { @@ -700302,7 +702558,7 @@ ] ], "click_iframe_crossorigin.sub.html": [ - "df2b4477cacfe6ca766cd97faa441a651e9f1d8e", + "3e43439331dbe156eada170a83e1548a333518c1", [ null, { @@ -700320,7 +702576,7 @@ ] ], "click_nested_crossorigin.sub.html": [ - "af90951df17804fd4ec18b99edc7165af989401a", + "e825527dd4cc6eabbcdf257f853f5175004fa783", [ null, { @@ -705587,7 +707843,7 @@ ] ], "subsup-6.html": [ - "9666c80f9f60bd2cfd10437d9273777f11c3e2cb", + "50a36b89dc1ee2aa76b2aa52cfe62ca2c681b655", [ null, {} @@ -705964,14 +708220,28 @@ ] ], "width-height-001.html": [ - "2deedc3f0b84d4f822387f080bd13ef265f011cf", + "57cbc1b0ab2788958d4649b0e4ef1a59baa1a159", [ null, {} ] ], "width-height-004.html": [ - "10ece249ca0b51d4b63c865703ee43b7f95eda30", + "e26ebe9682328bfd69db8eb4d46c2f6e0ad71ecf", + [ + null, + {} + ] + ], + "width-height-005.html": [ + "a6ea8d82deb90418484d98dee891d14eb7ba7e45", + [ + null, + {} + ] + ], + "width-height-006.html": [ + "d5427051974a0d9bd47a69bbdd2807b98449e641", [ null, {} @@ -707824,6 +710094,15 @@ } ] ], + "MediaRecorder-blob-timecode.https.html": [ + "cdc633519522172930c6a5a45b3fdc721e6c9e35", + [ + null, + { + "testdriver": true + } + ] + ], "MediaRecorder-canvas-media-source.https.html": [ "c2758914ac1692f2b313cf0abcc38ce364b89f9d", [ @@ -720891,7 +723170,7 @@ ] ], "prefetch-headers.https.html": [ - "0a475c7d7735cb535f24b62339fdd42d4d5443cb", + "74f654a3636008f591a959454673e7885adee948", [ null, {} @@ -720914,7 +723193,7 @@ ] ], "prefetch-types.https.html": [ - "276439e5440b2157eb2bfaf6a2fbe8b4ec05b3ff", + "da034252562c3bc7483f81d556adf5592efc8436", [ null, {} @@ -738062,6 +740341,13 @@ {} ] ], + "duration.html": [ + "245670de2aedf8e6895d5ccb59e188f8b195fc49", + [ + null, + {} + ] + ], "effect-updateTiming.html": [ "0c7a546572149de772eb2ab7ce753106a0d1774f", [ @@ -738270,6 +740556,13 @@ {} ] ], + "duration.html": [ + "05d35801307d5c6a11a38aa7aef249a8e8223daa", + [ + null, + {} + ] + ], "fieldset-source.html": [ "d75f30e664e325f4e43277b4036da0cbb157a990", [ @@ -738635,15 +740928,6 @@ } ] ], - "scroll-to-text-fragment-open-link-in-new-tab-desktop.html": [ - "bd07b18be0075a1361ce9c96b1c9be345e61b802", - [ - null, - { - "testdriver": true - } - ] - ], "scroll-to-text-fragment-same-doc.html": [ "378e373575ea27d488dc168b685295267f4c6204", [ @@ -738673,7 +740957,7 @@ ] ], "scroll-to-text-fragment.html": [ - "2dbd575bcbb95f49f8110c1ad367def73c7033c6", + "7af9bdba4c1e3df2fb559adc27f9a87cc8052ac0", [ null, { @@ -739159,6 +741443,13 @@ {} ] ], + "modify-around-non-editable-span.html": [ + "9a15e16c9b15e2a06b17c07b950c8d14ea8e0ac0", + [ + null, + {} + ] + ], "modify.tentative.html": [ "a3afd52ea2ebe54cb2c296b953573813392f6bbe", [ @@ -739632,7 +741923,7 @@ ] ], "sandboxed_iframe.https.window.js": [ - "15bdc5a9ed124e417d5764011482f792c8738cfa", + "938c65035a06fbcb8185c5545c9bf51f440a4f88", [ "serial/requestPort/sandboxed_iframe.https.window.html", { @@ -742883,7 +745174,7 @@ "tentative": { "static-router": { "static-router-resource-timing.https.html": [ - "c85c5ea3b9adfd618cea8f38a71c5daec9791b0e", + "e32436da41b347865875c6fca0bc86080b306c20", [ null, {} @@ -745098,6 +747389,13 @@ {} ] ], + "create-worklet-in-detached-frame.tentative.https.sub.html": [ + "6751a5031bf11b4ef4af78b9089fb762212c6892", + [ + null, + {} + ] + ], "cross-origin-create-worklet-credentials-include.tentative.https.sub.html": [ "3b73f92d3117595bdd2846f55b5e87684522fb79", [ @@ -765149,35 +767447,35 @@ ] ], "request-video-frame-callback-before-xr-session.https.html": [ - "5277fbba92fbf63579ad4d4d5a2ca1dc2e356cd6", + "10c868482502a928cc9f71a28ef54b74839db8be", [ null, {} ] ], "request-video-frame-callback-dom.html": [ - "c1804b4edd0c986aa161dfc13179983c04ace404", + "a0ea1e370bd4f1b60ab3eb2dc3daab9a5ba053e0", [ null, {} ] ], "request-video-frame-callback-during-xr-session.https.html": [ - "7afbabcee0b7760d852f4e0139f4693b7f402190", + "d5f69ec285c8c8462a93418a9936c4e65cf609b8", [ null, {} ] ], "request-video-frame-callback-parallel.html": [ - "682fd0ac8f6a22006e015c2f9b621da84fe53e04", + "3f54d5bb173b2ac13949d2c225eebead1cef268e", [ null, {} ] ], "request-video-frame-callback-repeating.html": [ - "38e4abafd4afe963232ec7427afa5cbd57bc734d", + "6c3fb9f09f805694316c2bd3d978a9451d9cd0d8", [ null, {} @@ -765191,7 +767489,7 @@ ] ], "request-video-frame-callback.html": [ - "256216e8fc098482baf267d95fc5f2ceca430c53", + "ece2ea4a785f0f057aa0d63c8fb1e42a2be78b98", [ null, {} @@ -771001,6 +773299,13 @@ {} ] ], + "duration.tentative.html": [ + "8a307f986e9757a80ec6ad8dc238ab9e8e4e542f", + [ + null, + {} + ] + ], "style-change-events.html": [ "c1607e6fb92943c580802025e4a4cc617a747144", [ @@ -862382,7 +864687,7 @@ }, "dom_content_loaded": { "dom_content_loaded.py": [ - "00cdad1dbb6b1527bc506f71cd88d5299cce9f83", + "aa9efb7e3bf5858bf6f52eca384b101ef6e30bdf", [ null, {} @@ -862391,7 +864696,7 @@ }, "fragment_navigated": { "fragment_navigated.py": [ - "14fa226056188d33e65e2492a83de1824ee2413c", + "45a65cacdf03503325bc5357e6971e747a13d2fd", [ null, {} @@ -862460,7 +864765,7 @@ }, "load": { "load.py": [ - "4c2c6e74c53a4129162bf66bb10aef0e71f8cd8b", + "600e4cb315655bb0615a57c63cf8313a944fff5c", [ null, {} @@ -862587,7 +864892,7 @@ }, "navigation_started": { "navigation_started.py": [ - "24fcb48d29a1865b69f7cf668e3d4a81ac7efc79", + "effb359250b41c31267bd1942a3ca89542995608", [ null, {} @@ -862827,10 +865132,12 @@ "input": { "perform_actions": { "invalid.py": [ - "1c5983159c1cf878a6664432dea8cdce47722957", + "0ed9fa3b4bf1e202ae9ec8f16db6195ddb3419c9", [ null, - {} + { + "timeout": "long" + } ] ], "key.py": [ @@ -862921,6 +865228,13 @@ {} ] ], + "queue.py": [ + "102e7b1b28a622150242a4352b689303bd3b87e2", + [ + null, + {} + ] + ], "wheel.py": [ "0a1af029b1e92fa1ba94bdb60679edc8b93dd0ba", [ @@ -862951,6 +865265,13 @@ {} ] ], + "queue.py": [ + "d825a0468bfe194f2958196bc4bd54a45107657c", + [ + null, + {} + ] + ], "release.py": [ "2955314e3c6dda8253218b2713ba9278348cf349", [ @@ -863076,7 +865397,7 @@ ] ], "contexts.py": [ - "7606b2368b6af60b190fe73185a06c3aa8dd85a7", + "cc82fa75a7d138cda955f5d9020dceeedb66342a", [ null, {} @@ -863136,7 +865457,7 @@ ] ], "before_request_sent_cached.py": [ - "e2e166cd774961117ebdf356ee58a886b40969c7", + "4177d316c5157fa3b68e7a84dfb64619b18086ee", [ null, {} @@ -863372,7 +865693,7 @@ ] ], "response_completed_cached.py": [ - "59756ba0d6aebe53ecdc45f6942cb235384e6163", + "dac13abf61b9147cb4efa9dd95ac7ab8672e2c30", [ null, {} @@ -863388,7 +865709,7 @@ ] ], "response_started_cached.py": [ - "9af0fae88f323823ba22a7520929566da45d4989", + "ccb7a97300d90874be06b5a6bed7af989209d828", [ null, {} diff --git a/tests/wpt/meta/css/css-conditional/container-queries/flex-basis-with-container-type.html.ini b/tests/wpt/meta/css/css-conditional/container-queries/flex-basis-with-container-type.html.ini new file mode 100644 index 00000000000..fd2cb707c4b --- /dev/null +++ b/tests/wpt/meta/css/css-conditional/container-queries/flex-basis-with-container-type.html.ini @@ -0,0 +1,2 @@ +[flex-basis-with-container-type.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-flexbox/aspect-ratio-transferred-max-size.html.ini b/tests/wpt/meta/css/css-flexbox/aspect-ratio-transferred-max-size.html.ini new file mode 100644 index 00000000000..2a8c07e7cbf --- /dev/null +++ b/tests/wpt/meta/css/css-flexbox/aspect-ratio-transferred-max-size.html.ini @@ -0,0 +1,2 @@ +[aspect-ratio-transferred-max-size.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-flexbox/baseline-outside-flex-item.html.ini b/tests/wpt/meta/css/css-flexbox/baseline-outside-flex-item.html.ini new file mode 100644 index 00000000000..82b7d8a7fee --- /dev/null +++ b/tests/wpt/meta/css/css-flexbox/baseline-outside-flex-item.html.ini @@ -0,0 +1,2 @@ +[baseline-outside-flex-item.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini new file mode 100644 index 00000000000..c53c0174f86 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html.ini @@ -0,0 +1,45 @@ +[gap-decorations-color-valid.html] + [e.style['column-rule-color'\] = "repeat(4, blue)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(3, red green blue)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(1, red green blue yellow)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "red" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(4, cyan)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "green blue" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "red blue green yellow pink" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(3, blue) repeat(4, red)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "red repeat(3, blue) blue repeat(4, red green cyan)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(4, red green cyan) repeat(5, yellow) blue" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(auto, red)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(auto, red green blue)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(auto, red green) red" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "repeat(4, blue red green) repeat(auto, red)" should set the property value] + expected: FAIL + + [e.style['column-rule-color'\] = "blue repeat(auto, red green) repeat(4, blue red green)" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html.ini b/tests/wpt/meta/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html.ini new file mode 100644 index 00000000000..2143c01fbdf --- /dev/null +++ b/tests/wpt/meta/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html.ini @@ -0,0 +1,2 @@ +[clip-path-url-reference-empty-while-loading.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html.ini deleted file mode 100644 index 0ee497e3bcd..00000000000 --- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[line-clamp-auto-026.tentative.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html.ini deleted file mode 100644 index 00093f16b28..00000000000 --- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[line-clamp-auto-032.tentative.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html.ini b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html.ini index 99456944d45..01066b3680d 100644 --- a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html.ini +++ b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html.ini @@ -13,3 +13,6 @@ [getComputedStyle() for ::highlight(foo)] expected: FAIL + + [getComputedStyle() for ::search-text] + expected: FAIL diff --git a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html.ini b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html.ini index d29df11928e..9fb9c49a30b 100644 --- a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html.ini +++ b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html.ini @@ -28,3 +28,9 @@ [getComputedStyle() for ::highlight(foo) at #target2] expected: FAIL + + [getComputedStyle() for ::search-text at #target1] + expected: FAIL + + [getComputedStyle() for ::search-text at #target2] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-001.tentative.html.ini b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-search-text.tentative.html.ini index b963cc0fd2c..83fb225c6ac 100644 --- a/tests/wpt/meta-legacy-layout/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-001.tentative.html.ini +++ b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-search-text.tentative.html.ini @@ -1,4 +1,4 @@ -[highlight-pseudos-computed-001.tentative.html] +[highlight-pseudos-computed-search-text.tentative.html] [getComputedStyle() for ::search-text] expected: FAIL diff --git a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html.ini b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html.ini index a4e4bdc95a6..d656412b418 100644 --- a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html.ini +++ b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html.ini @@ -28,3 +28,9 @@ [getComputedStyle() for ::highlight(foo) at #child2] expected: FAIL + + [getComputedStyle() for ::search-text at #child1] + expected: FAIL + + [getComputedStyle() for ::search-text at #child2] + expected: FAIL diff --git a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html.ini b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html.ini index 267ebaa918b..5e40d3bc896 100644 --- a/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html.ini +++ b/tests/wpt/meta/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html.ini @@ -28,3 +28,9 @@ [getComputedStyle() for ::highlight(foo) at #target2] expected: FAIL + + [getComputedStyle() for ::search-text at #target1] + expected: FAIL + + [getComputedStyle() for ::search-text at #target2] + expected: FAIL diff --git a/tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos-001.tentative.html.ini b/tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos-search-text.tentative.html.ini index b416a0e6b82..baec5e636e4 100644 --- a/tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos-001.tentative.html.ini +++ b/tests/wpt/meta/css/css-pseudo/parsing/highlight-pseudos-search-text.tentative.html.ini @@ -1,4 +1,4 @@ -[highlight-pseudos-001.tentative.html] +[highlight-pseudos-search-text.tentative.html] ["::search-text" should be a valid selector] expected: FAIL diff --git a/tests/wpt/meta/css/css-ui/animation/caret-animation-parsing.html.ini b/tests/wpt/meta/css/css-ui/animation/caret-animation-parsing.html.ini new file mode 100644 index 00000000000..e2e52fff6fb --- /dev/null +++ b/tests/wpt/meta/css/css-ui/animation/caret-animation-parsing.html.ini @@ -0,0 +1,18 @@ +[caret-animation-parsing.html] + [e.style['caret-animation'\] = "initial" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "inherit" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "unset" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "revert" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "auto" should set the property value] + expected: FAIL + + [e.style['caret-animation'\] = "manual" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini b/tests/wpt/meta/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini index 314dca9c1f5..59a43250767 100644 --- a/tests/wpt/meta/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini +++ b/tests/wpt/meta/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini @@ -1,3 +1,6 @@ [MediaQueryList-addListener-removeListener.html] [listeners are called when <iframe> is resized] expected: FAIL + + [listener that was added twice is called only once] + expected: FAIL diff --git a/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini b/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini new file mode 100644 index 00000000000..443c26a161b --- /dev/null +++ b/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini @@ -0,0 +1,3 @@ +[MediaQueryList-extends-EventTarget-interop.html] + [capturing event listener fires before non-capturing listener at target] + expected: FAIL diff --git a/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini b/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini new file mode 100644 index 00000000000..23065cc9e36 --- /dev/null +++ b/tests/wpt/meta/css/cssom-view/MediaQueryList-extends-EventTarget.html.ini @@ -0,0 +1,3 @@ +[MediaQueryList-extends-EventTarget.html] + [onchange adds listener] + expected: FAIL diff --git a/tests/wpt/meta/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html.ini b/tests/wpt/meta/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html.ini new file mode 100644 index 00000000000..5447455d504 --- /dev/null +++ b/tests/wpt/meta/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html.ini @@ -0,0 +1,2 @@ +[host-has-shadow-tree-element-at-nonsubject-position.html] + expected: ERROR diff --git a/tests/wpt/meta/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html.ini b/tests/wpt/meta/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html.ini new file mode 100644 index 00000000000..d7a08061d8f --- /dev/null +++ b/tests/wpt/meta/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html.ini @@ -0,0 +1,2 @@ +[host-has-shadow-tree-element-at-subject-position.html] + expected: ERROR diff --git a/tests/wpt/meta/dom/nodes/moveBefore/tentative/listed-form-element-reset.html.ini b/tests/wpt/meta/dom/nodes/moveBefore/tentative/listed-form-element-reset.html.ini new file mode 100644 index 00000000000..e4667498992 --- /dev/null +++ b/tests/wpt/meta/dom/nodes/moveBefore/tentative/listed-form-element-reset.html.ini @@ -0,0 +1,3 @@ +[listed-form-element-reset.html] + [Listed form element form owner is reset when a new form is moved closer before the listed element] + expected: FAIL diff --git a/tests/wpt/meta/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html.ini b/tests/wpt/meta/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html.ini new file mode 100644 index 00000000000..0fb300926bd --- /dev/null +++ b/tests/wpt/meta/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html.ini @@ -0,0 +1,2 @@ +[preserve-render-blocking-script.html] + expected: ERROR diff --git a/tests/wpt/meta/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html.ini b/tests/wpt/meta/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html.ini new file mode 100644 index 00000000000..8bc8c59c036 --- /dev/null +++ b/tests/wpt/meta/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html.ini @@ -0,0 +1,2 @@ +[preserve-render-blocking-style.html] + expected: ERROR diff --git a/tests/wpt/meta/dom/nodes/moveBefore/tentative/relevant-mutations.html.ini b/tests/wpt/meta/dom/nodes/moveBefore/tentative/relevant-mutations.html.ini new file mode 100644 index 00000000000..d3be9248876 --- /dev/null +++ b/tests/wpt/meta/dom/nodes/moveBefore/tentative/relevant-mutations.html.ini @@ -0,0 +1,6 @@ +[relevant-mutations.html] + [Moving <source> out of <picture> triggers a relevant mutation on sibling <img>] + expected: FAIL + + [Moving <img> into a <picture> triggers a relevant mutation on the <img>, loading <source>] + expected: FAIL diff --git a/tests/wpt/meta/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/meta/fetch/metadata/generated/css-images.sub.tentative.html.ini index 4b5c3e26586..7b4cf2c5ae7 100644 --- a/tests/wpt/meta/fetch/metadata/generated/css-images.sub.tentative.html.ini +++ b/tests/wpt/meta/fetch/metadata/generated/css-images.sub.tentative.html.ini @@ -185,3 +185,6 @@ [border-image sec-fetch-site - HTTPS downgrade (header not sent)] expected: FAIL + + [background-image sec-fetch-site - HTTPS downgrade (header not sent)] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini b/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini new file mode 100644 index 00000000000..a03a8322165 --- /dev/null +++ b/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini @@ -0,0 +1,3 @@ +[traverse_the_history_3.html] + [Multiple history traversals, last would be aborted] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini new file mode 100644 index 00000000000..7a5fcb79165 --- /dev/null +++ b/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini @@ -0,0 +1,3 @@ +[traverse_the_history_5.html] + [Multiple history traversals, last would be aborted] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.colorMatrix.tentative.html.ini index 9b2b4119845..663b846985e 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.html.ini +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.colorMatrix.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.colorMatrix.html] +[2d.filter.layers.colorMatrix.tentative.html] [Test the functionality of ColorMatrix filters] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.html.ini deleted file mode 100644 index 28eee7745b4..00000000000 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.discrete.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini new file mode 100644 index 00000000000..13ba229fab2 --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.discrete.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.html.ini deleted file mode 100644 index 59b029b6229..00000000000 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.gamma.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini new file mode 100644 index 00000000000..162a33cac46 --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.gamma.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.html.ini deleted file mode 100644 index e09298d1220..00000000000 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.identity.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini new file mode 100644 index 00000000000..ddb1c12c339 --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.identity.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.html.ini deleted file mode 100644 index 5a9b35c68fa..00000000000 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.linear.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini new file mode 100644 index 00000000000..5afc47edd7e --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.linear.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.html.ini deleted file mode 100644 index 3ec9d635126..00000000000 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.table.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini new file mode 100644 index 00000000000..96ec16d1e6b --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.table.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html.ini index d868cd8c204..c7bf1cb5be1 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.convolveMatrix.exceptions.html] +[2d.filter.layers.convolveMatrix.exceptions.tentative.html] [Test exceptions on CanvasFilter() convolveMatrix] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.tentative.html.ini index 7d7a9154df7..f21bd3c3a70 100644 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.html.ini +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.dropShadow.exceptions.html] +[2d.filter.layers.dropShadow.exceptions.tentative.html] [Test exceptions on CanvasFilter() dropShadow object] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.html.ini deleted file mode 100644 index 7369fa6d232..00000000000 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.dropShadow.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative.html.ini new file mode 100644 index 00000000000..1ce7d57bea8 --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.dropShadow.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.gaussianBlur.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.gaussianBlur.html.ini deleted file mode 100644 index 98f326c567b..00000000000 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.gaussianBlur.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.gaussianBlur.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative.html.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative.html.ini new file mode 100644 index 00000000000..a52f916d74f --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.gaussianBlur.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.worker.js.ini b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.tentative.html.ini index 2655d8b0b11..746fe06a9f8 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.worker.js.ini +++ b/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.turbulence.inputTypes.worker.html] +[2d.filter.layers.turbulence.inputTypes.tentative.html] [Test exceptions on CanvasFilter() turbulence object] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini index b44bcf4550f..1cb6ce30242 100644 --- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini +++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini @@ -5,3 +5,6 @@ [createImageBitmap from a Blob, and drawImage on the created ImageBitmap with colorSpaceConversion: none] expected: FAIL + + [createImageBitmap from a Video, and drawImage on the created ImageBitmap with colorSpaceConversion: none] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini index 18fa4ea84ea..c94490ae5ee 100644 --- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini +++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini @@ -1,5 +1,5 @@ [createImageBitmap-drawImage.html] - expected: TIMEOUT + expected: ERROR [createImageBitmap from an OffscreenCanvas resized, and drawImage on the created ImageBitmap] expected: NOTRUN diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html.ini index 886e606f855..56d7b5fb58d 100644 --- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html.ini +++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html.ini @@ -17,3 +17,12 @@ [createImageBitmap with EXIF rotation, imageOrientation from-image, and cropping] expected: TIMEOUT + + [createImageBitmap with EXIF rotation, imageOrientation from-image, no cropping, and resize] + expected: TIMEOUT + + [createImageBitmap with EXIF rotation, imageOrientation flipY, cropping, and resize] + expected: TIMEOUT + + [createImageBitmap with EXIF rotation, imageOrientation flipY, cropping, and nonuniform resize] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini index a4620cd6816..f08e8a2918a 100644 --- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini +++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini @@ -1,5 +1,5 @@ [createImageBitmap-flipY.html] - expected: TIMEOUT + expected: ERROR [createImageBitmap from a vector SVGImageElement imageOrientation: "none", and drawImage on the created ImageBitmap] expected: NOTRUN diff --git a/tests/wpt/meta/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini b/tests/wpt/meta/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini new file mode 100644 index 00000000000..469ece4b78a --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-exceptions.tentative.html] + [Check that TextMetrics::getTextClusters() throws when using invalid indexes.] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html.ini b/tests/wpt/meta/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html.ini new file mode 100644 index 00000000000..fbb87063451 --- /dev/null +++ b/tests/wpt/meta/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-split.tentative.html] + [Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together.] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.html.ini index a07b1acad88..c4b4a9e2d27 100644 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.html.ini +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.blur.exceptions.html] +[2d.filter.layers.blur.exceptions.tentative.html] [Test exceptions on gaussianBlur filter] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.worker.js.ini index 182a2435639..b923382a765 100644 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.worker.js.ini +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.worker.js.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.blur.exceptions.worker.html] +[2d.filter.layers.blur.exceptions.tentative.worker.html] [Test exceptions on gaussianBlur filter] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.html.ini deleted file mode 100644 index 9b2b4119845..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.filter.layers.colorMatrix.html] - [Test the functionality of ColorMatrix filters] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.colorMatrix.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.html.ini index 9b2b4119845..663b846985e 100644 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.colorMatrix.html.ini +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.colorMatrix.html] +[2d.filter.layers.colorMatrix.tentative.html] [Test the functionality of ColorMatrix filters] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.js.ini new file mode 100644 index 00000000000..4df84f50dd6 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.filter.layers.colorMatrix.tentative.worker.html] + [Test the functionality of ColorMatrix filters] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.worker.js.ini deleted file mode 100644 index e2f8f0a630a..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.worker.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.filter.layers.colorMatrix.worker.html] - [Test the functionality of ColorMatrix filters] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.html.ini deleted file mode 100644 index 28eee7745b4..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.discrete.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini new file mode 100644 index 00000000000..13ba229fab2 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.discrete.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.w.html.ini new file mode 100644 index 00000000000..16e81be271d --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.discrete.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.w.html.ini deleted file mode 100644 index b01f46aed3d..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.discrete.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.html.ini deleted file mode 100644 index 59b029b6229..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.gamma.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini new file mode 100644 index 00000000000..162a33cac46 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.gamma.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.w.html.ini new file mode 100644 index 00000000000..92fb2a5b198 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.gamma.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.w.html.ini deleted file mode 100644 index 00e0f519dbd..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.gamma.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.html.ini deleted file mode 100644 index e09298d1220..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.identity.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini new file mode 100644 index 00000000000..ddb1c12c339 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.identity.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.w.html.ini new file mode 100644 index 00000000000..8ebdd1c0a3c --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.identity.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.w.html.ini deleted file mode 100644 index 93ebc7a0293..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.identity.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.html.ini deleted file mode 100644 index 5a9b35c68fa..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.linear.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini new file mode 100644 index 00000000000..5afc47edd7e --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.linear.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.w.html.ini new file mode 100644 index 00000000000..84050348f62 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.linear.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.w.html.ini deleted file mode 100644 index 38923d05ade..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.linear.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.html.ini deleted file mode 100644 index 3ec9d635126..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.table.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini new file mode 100644 index 00000000000..96ec16d1e6b --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.table.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.w.html.ini new file mode 100644 index 00000000000..57e743307d5 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.componentTransfer.table.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.w.html.ini deleted file mode 100644 index a5076d74370..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.componentTransfer.table.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini deleted file mode 100644 index d868cd8c204..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.filter.layers.convolveMatrix.exceptions.html] - [Test exceptions on CanvasFilter() convolveMatrix] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html.ini index d868cd8c204..c7bf1cb5be1 100644 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.html.ini +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.convolveMatrix.exceptions.html] +[2d.filter.layers.convolveMatrix.exceptions.tentative.html] [Test exceptions on CanvasFilter() convolveMatrix] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js.ini new file mode 100644 index 00000000000..bcb0c3cbb9e --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.filter.layers.convolveMatrix.exceptions.tentative.worker.html] + [Test exceptions on CanvasFilter() convolveMatrix] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.worker.js.ini deleted file mode 100644 index a1ae7043728..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.worker.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.filter.layers.convolveMatrix.exceptions.worker.html] - [Test exceptions on CanvasFilter() convolveMatrix] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.html.ini deleted file mode 100644 index 7d7a9154df7..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.filter.layers.dropShadow.exceptions.html] - [Test exceptions on CanvasFilter() dropShadow object] - expected: FAIL diff --git a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.html.ini index 7d7a9154df7..f21bd3c3a70 100644 --- a/tests/wpt/meta-legacy-layout/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.html.ini +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.dropShadow.exceptions.html] +[2d.filter.layers.dropShadow.exceptions.tentative.html] [Test exceptions on CanvasFilter() dropShadow object] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.js.ini new file mode 100644 index 00000000000..50b1944c836 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.filter.layers.dropShadow.exceptions.tentative.worker.html] + [Test exceptions on CanvasFilter() dropShadow object] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.worker.js.ini deleted file mode 100644 index 5e424dff115..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.worker.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.filter.layers.dropShadow.exceptions.worker.html] - [Test exceptions on CanvasFilter() dropShadow object] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.w.html.ini new file mode 100644 index 00000000000..03194c83ee7 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.dropShadow.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.w.html.ini deleted file mode 100644 index 4c282823717..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.dropShadow.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.html.ini deleted file mode 100644 index 98f326c567b..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.gaussianBlur.html] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.html.ini new file mode 100644 index 00000000000..a52f916d74f --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.gaussianBlur.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.w.html.ini new file mode 100644 index 00000000000..29156648497 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.w.html.ini @@ -0,0 +1,2 @@ +[2d.filter.layers.gaussianBlur.tentative.w.html] + expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.w.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.w.html.ini deleted file mode 100644 index a15fb4e1371..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.w.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[2d.filter.layers.gaussianBlur.w.html] - expected: TIMEOUT diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.html.ini deleted file mode 100644 index e16419cdde1..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.filter.layers.turbulence.inputTypes.html] - [Test exceptions on CanvasFilter() turbulence object] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.html.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.html.ini index e16419cdde1..746fe06a9f8 100644 --- a/tests/wpt/meta/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.html.ini +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.html.ini @@ -1,3 +1,3 @@ -[2d.filter.layers.turbulence.inputTypes.html] +[2d.filter.layers.turbulence.inputTypes.tentative.html] [Test exceptions on CanvasFilter() turbulence object] expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.js.ini new file mode 100644 index 00000000000..136dcf478d2 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.filter.layers.turbulence.inputTypes.tentative.worker.html] + [Test exceptions on CanvasFilter() turbulence object] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.worker.js.ini deleted file mode 100644 index 2655d8b0b11..00000000000 --- a/tests/wpt/meta/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.worker.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[2d.filter.layers.turbulence.inputTypes.worker.html] - [Test exceptions on CanvasFilter() turbulence object] - expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.closed.arc.html.ini b/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.closed.arc.html.ini new file mode 100644 index 00000000000..053017c8fae --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.closed.arc.html.ini @@ -0,0 +1,3 @@ +[2d.path.closed.arc.html] + [line caps should not be drawn on closed arcs] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.closed.arc.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.closed.arc.worker.js.ini new file mode 100644 index 00000000000..b0813a09832 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.closed.arc.worker.js.ini @@ -0,0 +1,3 @@ +[2d.path.closed.arc.worker.html] + [line caps should not be drawn on closed arcs] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.open.arc.html.ini b/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.open.arc.html.ini new file mode 100644 index 00000000000..0632738fba0 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.open.arc.html.ini @@ -0,0 +1,3 @@ +[2d.path.open.arc.html] + [line caps should be drawn on open arcs] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.open.arc.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.open.arc.worker.js.ini new file mode 100644 index 00000000000..89247033934 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/path-objects/2d.path.open.arc.worker.js.ini @@ -0,0 +1,3 @@ +[2d.path.open.arc.worker.html] + [line caps should be drawn on open arcs] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini b/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini new file mode 100644 index 00000000000..469ece4b78a --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-exceptions.tentative.html] + [Check that TextMetrics::getTextClusters() throws when using invalid indexes.] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js.ini new file mode 100644 index 00000000000..51c88622854 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-exceptions.tentative.worker.html] + [Check that TextMetrics::getTextClusters() throws when using invalid indexes.] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html.ini b/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html.ini new file mode 100644 index 00000000000..fbb87063451 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-split.tentative.html] + [Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together.] + expected: FAIL diff --git a/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js.ini b/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js.ini new file mode 100644 index 00000000000..f72d6ce36d3 --- /dev/null +++ b/tests/wpt/meta/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js.ini @@ -0,0 +1,3 @@ +[2d.text.measure.text-clusters-split.tentative.worker.html] + [Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together.] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html.ini new file mode 100644 index 00000000000..6be756afbd4 --- /dev/null +++ b/tests/wpt/meta/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html.ini @@ -0,0 +1,3 @@ +[embed-document-under-content-visibility-focus.html] + [ensure onload happens] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html.ini new file mode 100644 index 00000000000..acfb4e31c9d --- /dev/null +++ b/tests/wpt/meta/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html.ini @@ -0,0 +1,3 @@ +[embed-document-under-content-visibility-gbcr.html] + [ensure onload happens] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 7da2bc5ac80..a1b912abd4b 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,4 +1,4 @@ [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/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini index 4034793cc72..c6f1e5d7d84 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_nonescaping-2.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/meta/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini b/tests/wpt/meta/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini deleted file mode 100644 index f9a4f08cd70..00000000000 --- a/tests/wpt/meta/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[module-tla-delayed.html] - [document.write in an imported module] - expected: FAIL diff --git a/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini b/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini index 20d32f43049..484aa044de7 100644 --- a/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini +++ b/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini @@ -16,3 +16,15 @@ [Reload fetchStart > Original fetchStart] expected: FAIL + + [Reload domComplete > Original domComplete] + expected: FAIL + + [Reload domContentLoadedEventEnd > Original domContentLoadedEventEnd] + expected: FAIL + + [Reload loadEventEnd > Original loadEventEnd] + expected: FAIL + + [Reload loadEventStart > Original loadEventStart] + expected: FAIL diff --git a/tests/wpt/meta/selection/contenteditable/modify-around-non-editable-span.html.ini b/tests/wpt/meta/selection/contenteditable/modify-around-non-editable-span.html.ini new file mode 100644 index 00000000000..32817c673a9 --- /dev/null +++ b/tests/wpt/meta/selection/contenteditable/modify-around-non-editable-span.html.ini @@ -0,0 +1,48 @@ +[modify-around-non-editable-span.html] + [getSelection().modify("move", "forward", "character") when " [\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "forward", "character") when "editable[\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "right", "character") when " [\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "right", "character") when "editable[\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "backward", "character") when " <span contenteditable=false>...</span>[\]editable"] + expected: FAIL + + [getSelection().modify("move", "backward", "character") when "editable<span contenteditable=false>...</span>[\] "] + expected: FAIL + + [getSelection().modify("move", "left", "character") when " <span contenteditable=false>...</span>[\]editable"] + expected: FAIL + + [getSelection().modify("move", "left", "character") when "editable<span contenteditable=false>...</span>[\] "] + expected: FAIL + + [getSelection().modify("move", "forward", "character") after getSelection().selectAllChildren(editingHost) when " [\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "forward", "character") after getSelection().selectAllChildren(editingHost) when "editable[\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "right", "character") after getSelection().selectAllChildren(editingHost) when " [\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "right", "character") after getSelection().selectAllChildren(editingHost) when "editable[\]<span contenteditable=false>"] + expected: FAIL + + [getSelection().modify("move", "backward", "character") after getSelection().selectAllChildren(editingHost) when " <span contenteditable=false>...</span>[\]editable"] + expected: FAIL + + [getSelection().modify("move", "backward", "character") after getSelection().selectAllChildren(editingHost) when "editable<span contenteditable=false>...</span>[\] "] + expected: FAIL + + [getSelection().modify("move", "left", "character") after getSelection().selectAllChildren(editingHost) when " <span contenteditable=false>...</span>[\]editable"] + expected: FAIL + + [getSelection().modify("move", "left", "character") after getSelection().selectAllChildren(editingHost) when "editable<span contenteditable=false>...</span>[\] "] + expected: FAIL diff --git a/tests/wpt/meta/selection/idlharness.window.js.ini b/tests/wpt/meta/selection/idlharness.window.js.ini index adc033c4f6d..c8e15e841ca 100644 --- a/tests/wpt/meta/selection/idlharness.window.js.ini +++ b/tests/wpt/meta/selection/idlharness.window.js.ini @@ -31,3 +31,12 @@ [Selection interface: calling getComposedRanges(ShadowRoot...) on getSelection() with too few arguments must throw TypeError] expected: FAIL + + [Selection interface: operation getComposedRanges(optional GetComposedRangesOptions)] + expected: FAIL + + [Selection interface: getSelection() must inherit property "getComposedRanges(optional GetComposedRangesOptions)" with the proper type] + expected: FAIL + + [Selection interface: calling getComposedRanges(optional GetComposedRangesOptions) on getSelection() with too few arguments must throw TypeError] + expected: FAIL diff --git a/tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini deleted file mode 100644 index 80f9a4f15b8..00000000000 --- a/tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Worker-constructor.html] - expected: ERROR diff --git a/tests/wpt/tests/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html b/tests/wpt/tests/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html new file mode 100644 index 00000000000..c8234cfb769 --- /dev/null +++ b/tests/wpt/tests/FileAPI/BlobURL/cross-partition-worker-creation.tentative.https.html @@ -0,0 +1,150 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<!-- Pull in executor_path needed by newPopup / newIframe --> +<script src="/html/cross-origin-embedder-policy/credentialless/resources/common.js"></script> +<!-- Pull in importScript / newPopup / newIframe --> +<script src="/html/anonymous-iframe/resources/common.js"></script> +<body> +<script> + +const create_worker_unsuccessful = "Worker creation failed."; +const create_worker_successful = "Worker creation succeeded."; + +const add_iframe_js = (iframe_origin, response_queue_uuid) => ` + const importScript = ${importScript}; + await importScript("/html/cross-origin-embedder-policy/credentialless" + + "/resources/common.js"); + await importScript("/html/anonymous-iframe/resources/common.js"); + await importScript("/common/utils.js"); + + // dispatcher.js has already been loaded by the popup this is running in. + await send("${response_queue_uuid}", newIframe("${iframe_origin}")); +`; + +const same_site_origin = get_host_info().HTTPS_ORIGIN; +const cross_site_origin = get_host_info().HTTPS_NOTSAMESITE_ORIGIN; + +async function create_test_iframes(t, response_queue_uuid) { + assert_equals("https://" + window.location.host, same_site_origin, + "this test assumes that the page's window.location.host corresponds to " + + "get_host_info().HTTPS_ORIGIN"); + + // Create a same-origin iframe in a cross-site popup. + const not_same_site_popup_uuid = newPopup(t, cross_site_origin); + await send(not_same_site_popup_uuid, + add_iframe_js(same_site_origin, response_queue_uuid)); + const cross_site_iframe_uuid = await receive(response_queue_uuid); + + // Create a same-origin iframe in a same-site popup. + const same_origin_popup_uuid = newPopup(t, same_site_origin); + await send(same_origin_popup_uuid, + add_iframe_js(same_site_origin, response_queue_uuid)); + const same_site_iframe_uuid = await receive(response_queue_uuid); + + return [cross_site_iframe_uuid, same_site_iframe_uuid]; +} + +const can_create_blob_url_shared_worker_js = (blob_url, response_queue_name) => ` + const worker = new SharedWorker("${blob_url}"); + worker.onerror = (e) => { + send("${response_queue_name}", "${create_worker_unsuccessful}"); + }; + worker.port.onmessage = (e) => { + send("${response_queue_name}", "${create_worker_successful}"); + }; +`; + +// Tests cross-partition Shared Worker creation from blob URL. +promise_test(t => { + return new Promise(async (resolve, reject) => { + try { + const response_queue_uuid = token(); + + const [cross_site_iframe_uuid, same_site_iframe_uuid] = + await create_test_iframes(t, response_queue_uuid); + + const worker_js = ` + onconnect = function(e) { + e.ports[0].postMessage('ping'); + self.close(); + }; + `; + + const blob = new Blob([worker_js], {type : "text/javascript"}); + const blob_url = window.URL.createObjectURL(blob); + t.add_cleanup(() => window.URL.revokeObjectURL(blob_url)); + + // Create a shared worker in the cross-top-level-site iframe. + await send(cross_site_iframe_uuid, can_create_blob_url_shared_worker_js(blob_url, response_queue_uuid)); + const response_1 = await receive(response_queue_uuid); + if (response_1 !== create_worker_unsuccessful) { + reject(`Shared worker was created in not-same-top-level-site iframe`); + } + + // Create a shared worker in the same-top-level-site iframe. + await send(same_site_iframe_uuid, can_create_blob_url_shared_worker_js(blob_url, response_queue_uuid)); + const response_2 = await receive(response_queue_uuid); + if (response_2 !== create_worker_successful) { + reject(`Shared worker wasn't created in same-top-level-site iframe`); + } + + resolve(); + } catch (e) { + reject(e); + } + }); +}, "Cross-partition Shared worker shouldn't be created from blob URL."); + +const can_create_blob_url_dedicated_worker_js = (blob_url, response_queue_name) => ` + const worker = new Worker("${blob_url}"); + worker.onerror = (e) => { + send("${response_queue_name}", "${create_worker_unsuccessful}"); + }; + worker.onmessage = (e) => { + send("${response_queue_name}", "${create_worker_successful}"); + worker.terminate(); + }; +`; + +// Tests cross-partition Dedicated Worker creation from blob URL. +promise_test(t => { + return new Promise(async (resolve, reject) => { + try { + const response_queue_uuid = token(); + + const [cross_site_iframe_uuid, same_site_iframe_uuid] = + await create_test_iframes(t, response_queue_uuid); + + const blob = new Blob(["postMessage('ping');"], {type : "text/javascript"}); + const blob_url = window.URL.createObjectURL(blob); + t.add_cleanup(() => window.URL.revokeObjectURL(blob_url)); + + // Create a dedicated worker in the cross-top-level-site iframe. + await send(cross_site_iframe_uuid, can_create_blob_url_dedicated_worker_js(blob_url, response_queue_uuid)); + const response_1 = await receive(response_queue_uuid); + if (response_1 !== create_worker_unsuccessful) { + reject(`Dedicated worker was created in not-same-top-level-site iframe`); + } + + // Create a dedicated worker in the same-top-level-site iframe. + await send(same_site_iframe_uuid, can_create_blob_url_dedicated_worker_js(blob_url, response_queue_uuid)); + const response_2 = await receive(response_queue_uuid); + if (response_2 !== create_worker_successful) { + reject(`Dedicated worker wasn't created in same-top-level-site iframe`); + } + + resolve(); + } catch (e) { + reject(e); + } + }); +}, "Cross-partition Dedicated worker shouldn't be created from blob URL."); + +</script> +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/FileAPI/blob/Blob-slice.any.js b/tests/wpt/tests/FileAPI/blob/Blob-slice.any.js index 1f85d44d269..c48d4703d86 100644 --- a/tests/wpt/tests/FileAPI/blob/Blob-slice.any.js +++ b/tests/wpt/tests/FileAPI/blob/Blob-slice.any.js @@ -12,19 +12,18 @@ test_blob(function() { }); test(function() { - var blob1, blob2; + var blob1 = new Blob(["squiggle"]); + var blob2 = new Blob(["steak"], {type: "content/type"}); - test_blob(function() { - return blob1 = new Blob(["squiggle"]); - }, { + test_blob(() => blob1, + { expected: "squiggle", type: "", desc: "blob1." }); - test_blob(function() { - return blob2 = new Blob(["steak"], {type: "content/type"}); - }, { + test_blob(() => blob2, + { expected: "steak", type: "content/type", desc: "blob2." diff --git a/tests/wpt/tests/IndexedDB/structured-clone.any.js b/tests/wpt/tests/IndexedDB/structured-clone.any.js index 0997abf2547..4a99b61bdad 100644 --- a/tests/wpt/tests/IndexedDB/structured-clone.any.js +++ b/tests/wpt/tests/IndexedDB/structured-clone.any.js @@ -41,12 +41,14 @@ function cloneTest(value, verifyFunc) { } }); const tx = db.transaction('store', 'readwrite', {durability: 'relaxed'}); - const txWaiter = promiseForTransaction(t, tx); const store = tx.objectStore('store'); await promiseForRequest(t, store.put(value, 'key')); const result = await promiseForRequest(t, store.get('key')); + // Because the async verifyFunc may await async values that are independent + // of the transaction lifetime (ex: blob.text()), we must only await it + // after adding listeners to the transaction. + await promiseForTransaction(t, tx); await verifyFunc(value, result); - await txWaiter; }, describe(value)); } diff --git a/tests/wpt/tests/accessibility/crashtests/aom-in-destroyed-iframe.html b/tests/wpt/tests/accessibility/crashtests/aom-in-destroyed-iframe.html deleted file mode 100644 index c8f0aca12eb..00000000000 --- a/tests/wpt/tests/accessibility/crashtests/aom-in-destroyed-iframe.html +++ /dev/null @@ -1,35 +0,0 @@ -<html class="test-wait"> -<body></body> -<script> - -// Bypass this abandoned syntax in all but the engines that implement it. -if (typeof getComputedAccessibleNode !== 'undefined') { - - const frameElem = document.createElement('iframe'); - - frameElem.srcdoc = '<html><head><title>X</title></head><body><div>-</div></body></html>'; - frameElem.onload = function() { - const frameDoc = frameElem.contentWindow.document; - - const divElem = frameDoc.querySelector('div'); - - getComputedAccessibleNode(divElem).then(function(divAccessible) { - // Close window. - frameElem.remove(); - - requestAnimationFrame(() => { - // Window removed, but we try to access DOM of non-existent window. - const isChecked = divAccessible.checked; - // Test is complete. - document.documentElement.className = ''; - }); - }); - }; - document.body.appendChild(frameElem); - -} else { - // Pass in other engines that have not implemented the abandoned API - document.documentElement.className = ''; -} -</script> -</html> diff --git a/tests/wpt/tests/accessibility/crashtests/computed-accessible-child-of-pseudo-element.html b/tests/wpt/tests/accessibility/crashtests/computed-accessible-child-of-pseudo-element.html deleted file mode 100644 index b00ee7ba56f..00000000000 --- a/tests/wpt/tests/accessibility/crashtests/computed-accessible-child-of-pseudo-element.html +++ /dev/null @@ -1,32 +0,0 @@ -<html class="test-wait"> -<style> - h1::before { content: " [before] "; display: table; } -</style> - -<h1>Heading</h1> - -<script> - -// Bypass this abandoned syntax in all but the engines that implement it. -if (typeof getComputedAccessibleNode !== 'undefined') { - - async function trigger1() { - let heading = document.querySelector('h1'); - let computed_accessible_node = await self.getComputedAccessibleNode(heading); - let first_child = computed_accessible_node.firstChild; - // The first child of the heading is a pseudo element <table>. - await first_child.ensureUpToDate(); - // The next child down has an accessibility object but no node. - let grand_child = first_child.firstChild; - await grand_child.ensureUpToDate(); - document.documentElement.className = ''; - } - trigger1(); - -} else { - // Pass in other engines that have not implemented the abandoned API - document.documentElement.className = ''; -} - -</script> -</html> diff --git a/tests/wpt/tests/accessibility/crashtests/computed-accessible-text-node.html b/tests/wpt/tests/accessibility/crashtests/computed-accessible-text-node.html deleted file mode 100644 index 47183ce6ec6..00000000000 --- a/tests/wpt/tests/accessibility/crashtests/computed-accessible-text-node.html +++ /dev/null @@ -1,24 +0,0 @@ -<html class="test-wait"> -<img id="img1">text -<script> - -// Bypass this abandoned syntax in all but the engines that implement it. -if (typeof getComputedAccessibleNode !== 'undefined') { - - async function trigger1() { - let img = document.getElementById('img1'); - let computed_accessible_node = await self.getComputedAccessibleNode(img); - // The next sibling is a text node. - let next_sibling = computed_accessible_node.nextSibling; - await next_sibling.ensureUpToDate(); - document.documentElement.className = ''; - } - trigger1(); - -} else { - // Pass in other engines that have not implemented the abandoned API - document.documentElement.className = ''; -} - -</script> -</html> diff --git a/tests/wpt/tests/accessibility/crashtests/computed-node-checked.html b/tests/wpt/tests/accessibility/crashtests/computed-node-checked.html deleted file mode 100644 index 47e715b2338..00000000000 --- a/tests/wpt/tests/accessibility/crashtests/computed-node-checked.html +++ /dev/null @@ -1,49 +0,0 @@ -<!DOCTYPE html> -<html class="test-wait"> -<body> -</body> -<script src="/resources/testharness.js"></script> -<script> -if (window.chrome && chrome.gpuBenchmarking) { - chrome.gpuBenchmarking.pointerActionSequence( - [ - { - source: 'pen', - actions: [ - { name: 'pointerMove', x: 50, y: 50 } - ] - } - ] - ); -} -</script> -<script>step_timeout(gc, 50);</script> -<script> - -// Bypass this abandoned syntax in all but the engines that implement it. -if (typeof getComputedAccessibleNode !== 'undefined') { - - const frameElem = document.createElement('iframe'); - - frameElem.srcdoc = '<div></div>'; - frameElem.onload = function() { - const frameDoc = frameElem.contentWindow.document; - const divElem = frameDoc.querySelector('div'); - getComputedAccessibleNode(divElem).then(function(divAccessible) { - frameElem.remove(); - requestAnimationFrame(() => { - const isChecked = divAccessible.checked; - document.documentElement.className = ''; - }); - }); - }; - document.body.appendChild(frameElem); - -} else { - // Pass in other engines that have not implemented the abandoned API - document.documentElement.className = ''; -} - - -</script> -</html> diff --git a/tests/wpt/tests/accessibility/crashtests/computed-node.html b/tests/wpt/tests/accessibility/crashtests/computed-node.html deleted file mode 100644 index 159b217a086..00000000000 --- a/tests/wpt/tests/accessibility/crashtests/computed-node.html +++ /dev/null @@ -1,8 +0,0 @@ -<body> -<iframe></iframe> -</body> -<script> -const iframe = document.querySelector('iframe'); -const option = document.createElement("option"); -iframe.contentWindow.getComputedAccessibleNode(option); -</script> diff --git a/tests/wpt/tests/accessibility/crashtests/displaylocked-serialize.html b/tests/wpt/tests/accessibility/crashtests/displaylocked-serialize.html deleted file mode 100644 index 8dd8efaa6af..00000000000 --- a/tests/wpt/tests/accessibility/crashtests/displaylocked-serialize.html +++ /dev/null @@ -1,20 +0,0 @@ -<!DOCTYPE html> -<link rel=author href="mailto:jarhar@chromium.org"> -<link rel=help href="https://bugs.chromium.org/p/chromium/issues/detail?id=1291169"> - -<select></select> -<div></div> - -<style> - select, ::picker(select) { - appearance: base-select; - } -</style> - -<script> - (async () => { - const select = document.querySelector('select'); - await getComputedAccessibleNode(document.querySelector('div')); - select.style.setProperty('content-visibility', 'hidden'); - })(); -</script> diff --git a/tests/wpt/tests/accessibility/crashtests/serialize-with-no-document.html b/tests/wpt/tests/accessibility/crashtests/serialize-with-no-document.html deleted file mode 100644 index f7719cf2ff1..00000000000 --- a/tests/wpt/tests/accessibility/crashtests/serialize-with-no-document.html +++ /dev/null @@ -1,5 +0,0 @@ -><a>feColorMatrix><div id="container"><0<script>0000A00AAAAA00A<tspan></tspan>000<do>AA0AA0<fieldset></fieldset>A00AA<font><feComponentTransfer></feComponentTransfer><insertedLegend>AAA0A0A0A00A<img>0<link>0A00A0AAAAAA0AAA000A<feDiffuseLighting><mfrac></mfrac><anchor></anchor>00A0<tspan><tspan><tspan><dcol></dcol><missing_glyph></missing_glyph><col></col>0A0AAA0AA0AA0A000A0<mover></mover><form></form><dcol><dcol><dcol><dcol><dcol>⊵≜╤⧫Σ⨀⊾Ѕ⊭↑⧞⪡<math><dt></dt><feTile></feTile>AA0A<isindex></isindex><blockquote>0<mo></mo>AA0A00A00<cursor><desc></desc>AAAA0AA<tref></tref><tref></tref>0AA00AA0<noop></noop><tfoot><insertedLegend></insertedLegend><insertedLegend></insertedLegend><insertedLegend></insertedLegend><insertedLegend></insertedLegend><template></template>00AA00A00AAAAAA00AA<msubsup><legend>0A00AA0A<msub>AA000AAAA<td>0A0AA0A0AA0A000A0AAA<feFlood><ruby>0A000AA00AAAA0AAAA0A<br><feImage>AAA<font>A0000000AAA0AA00<button><video></video>00AA0</div> -</script><script> - var child = new AccessibleNode(); - container.accessibleNode.appendChild(child); -</script><a> diff --git a/tests/wpt/tests/clipboard-apis/clipboard-item.https.html b/tests/wpt/tests/clipboard-apis/clipboard-item.https.html index 78acd1104a9..41f6ab95b81 100644 --- a/tests/wpt/tests/clipboard-apis/clipboard-item.https.html +++ b/tests/wpt/tests/clipboard-apis/clipboard-item.https.html @@ -102,6 +102,7 @@ promise_test(async () => { ['text/html', true], ['image/png', true], // optional data types + ['text/uri-list', true], ['image/svg+xml', true], ['web foo/bar', true], ['web text/html', true], diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_basic.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_basic.https.window.js index ff50ef4e561..a120f97a403 100644 --- a/tests/wpt/tests/compute-pressure/compute_pressure_basic.https.window.js +++ b/tests/wpt/tests/compute-pressure/compute_pressure_basic.https.window.js @@ -27,11 +27,11 @@ pressure_test(async (t) => { await remove_virtual_pressure_source('cpu'); }); - const changes = await new Promise(async (resolve) => { + const changes = await new Promise((resolve, reject) => { const observer = new PressureObserver(resolve); t.add_cleanup(() => observer.disconnect()); - await update_virtual_pressure_source('cpu', 'critical'); - await observer.observe('cpu'); + observer.observe('cpu').catch(reject); + update_virtual_pressure_source('cpu', 'critical').catch(reject); }); assert_equals(1, changes.length); assert_equals(changes[0].state, 'critical'); @@ -84,32 +84,25 @@ pressure_test(async (t) => { await remove_virtual_pressure_source('cpu'); }); - const observer1_changes = []; - await new Promise(async (resolve) => { - const observer1 = new PressureObserver(changes => { - observer1_changes.push(changes); - resolve(); - }); - t.add_cleanup(() => observer1.disconnect()); - await update_virtual_pressure_source('cpu', 'critical'); - await observer1.observe('cpu'); + const observer1_promise = new Promise((resolve, reject) => { + const observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); }); + await update_virtual_pressure_source('cpu', 'critical'); + const observer1_changes = await observer1_promise; assert_equals(1, observer1_changes.length); - assert_equals(observer1_changes[0][0].source, 'cpu'); - assert_equals(observer1_changes[0][0].state, 'critical'); - - const observer2_changes = []; - await new Promise(resolve => { - const observer2 = new PressureObserver(changes => { - observer2_changes.push(changes); - resolve(); - }); - t.add_cleanup(() => observer2.disconnect()); - observer2.observe('cpu'); + assert_equals(observer1_changes[0].source, 'cpu'); + assert_equals(observer1_changes[0].state, 'critical'); + + const observer2_changes = await new Promise((resolve, reject) => { + const observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); }); assert_equals(1, observer2_changes.length); - assert_equals(observer2_changes[0][0].source, 'cpu'); - assert_equals(observer2_changes[0][0].state, 'critical'); + assert_equals(observer2_changes[0].source, 'cpu'); + assert_equals(observer2_changes[0].state, 'critical'); }, 'Starting a new observer after an observer has started works'); mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_detached_iframe.https.html b/tests/wpt/tests/compute-pressure/compute_pressure_detached_iframe.https.window.js index 6123521248c..a43d6b0fc2d 100644 --- a/tests/wpt/tests/compute-pressure/compute_pressure_detached_iframe.https.html +++ b/tests/wpt/tests/compute-pressure/compute_pressure_detached_iframe.https.window.js @@ -1,12 +1,10 @@ -<!doctype html> -<meta charset="utf-8"> -<title>PressureObserver on DOMWindow of detached iframe</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/test-only-api.js"></script> -<script src="resources/pressure-helpers.js"></script> -<body> -<script> +// META: variant=?globalScope=window +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + 'use strict'; test(() => { @@ -33,7 +31,12 @@ promise_test(async t => { observer.observe('cpu')); }, 'PressureObserver.observe() on detached frame rejects'); -promise_test(async t => { +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + const iframe = document.createElement('iframe'); document.body.appendChild(iframe); const frame_window = iframe.contentWindow; @@ -48,7 +51,11 @@ promise_test(async t => { observer.disconnect(); }, 'PressureObserver.disconnect() on detached frame returns'); -pressure_test(async (t, mockPressureService) => { +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); const iframe = document.createElement('iframe'); document.body.appendChild(iframe); const frame_window = iframe.contentWindow; @@ -68,13 +75,17 @@ pressure_test(async (t, mockPressureService) => { const observer = new PressureObserver(resolve); t.add_cleanup(() => observer.disconnect()); observer.observe('cpu').catch(reject); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); + update_virtual_pressure_source('cpu', 'critical').catch(reject); }); assert_equals(changes[0].state, 'critical'); }, 'Detaching frame while PressureObserver.observe() settles'); -pressure_test(async (t, mockPressureService) => { +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + const iframe = document.createElement('iframe'); document.body.appendChild(iframe); const frame_window = iframe.contentWindow; @@ -83,13 +94,11 @@ pressure_test(async (t, mockPressureService) => { }); await observer.observe('cpu'); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - + const updatePromise = update_virtual_pressure_source('cpu', 'critical'); iframe.remove(); + await updatePromise; return new Promise(resolve => t.step_timeout(resolve, 1000)); }, 'PressureObserver on detached frame returns with no callback'); -</script> -</body> +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect.https.any.js deleted file mode 100644 index f8bc3fb3578..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect.https.any.js +++ /dev/null @@ -1,44 +0,0 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -test(t => { - const observer = new PressureObserver(() => { - assert_unreached('The observer callback should not be called'); - }); - t.add_cleanup(() => observer.disconnect()); - observer.disconnect(); -}, 'Call disconnect() directly should not crash'); - -pressure_test(async (t, mockPressureService) => { - const observer1_changes = []; - const observer1 = new PressureObserver(change => { - observer1_changes.push(change); - }); - t.add_cleanup(() => observer1.disconnect()); - // Ensure that observer1's schema gets registered before observer2 starts. - await observer1.observe('cpu'); - observer1.disconnect(); - - const observer2_changes = []; - await new Promise((resolve, reject) => { - const observer2 = new PressureObserver(change => { - observer2_changes.push(change); - resolve(); - }); - t.add_cleanup(() => observer2.disconnect()); - observer2.observe('cpu').catch(reject); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - }); - - assert_equals( - observer1_changes.length, 0, - 'disconnected observers should not receive callbacks'); - - assert_equals(observer2_changes.length, 1); - assert_equals(observer2_changes[0].length, 1); - assert_equals(observer2_changes[0][0].state, 'critical'); -}, 'Stopped PressureObserver do not receive changes'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect.https.window.js new file mode 100644 index 00000000000..0a27b16a926 --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect.https.window.js @@ -0,0 +1,50 @@ +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async t => { + const observer = new PressureObserver(() => { + assert_unreached('The observer callback should not be called'); + }); + t.add_cleanup(() => observer.disconnect()); + observer.disconnect(); +}, 'Calling disconnect() immediately should not crash'); + +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const observer1_changes = []; + const observer1 = new PressureObserver(change => { + observer1_changes.push(change); + }); + t.add_cleanup(() => observer1.disconnect()); + // Ensure that observer1's schema gets registered before observer2 starts. + await observer1.observe('cpu'); + observer1.disconnect(); + + const observer2_promise = new Promise((resolve, reject) => { + const observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); + }); + await update_virtual_pressure_source('cpu', 'critical'); + const observer2_changes = await observer2_promise; + + assert_equals( + observer1_changes.length, 0, + 'disconnected observers should not receive callbacks'); + + assert_equals(observer2_changes.length, 1); + assert_equals(observer2_changes[0].state, 'critical'); +}, 'Stopped PressureObserver do not receive changes'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_idempotent.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_idempotent.https.any.js deleted file mode 100644 index 3c9a6688a42..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_idempotent.https.any.js +++ /dev/null @@ -1,37 +0,0 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -pressure_test(async (t, mockPressureService) => { - const observer1_changes = []; - const observer1 = new PressureObserver(changes => { - observer1_changes.push(changes); - }); - t.add_cleanup(() => observer1.disconnect()); - // Ensure that observer1's schema gets registered before observer2 starts. - const promise = observer1.observe('cpu'); - observer1.disconnect(); - observer1.disconnect(); - await promise_rejects_dom(t, 'AbortError', promise); - - const observer2_changes = []; - await new Promise((resolve, reject) => { - const observer2 = new PressureObserver(changes => { - observer2_changes.push(changes); - resolve(); - }); - t.add_cleanup(() => observer2.disconnect()); - observer2.observe('cpu').catch(reject); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - }); - - assert_equals( - observer1_changes.length, 0, - 'stopped observers should not receive callbacks'); - - assert_equals(observer2_changes.length, 1); - assert_equals(observer2_changes[0][0].state, 'critical'); -}, 'Stopped PressureObserver do not receive changes'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_idempotent.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_idempotent.https.window.js new file mode 100644 index 00000000000..b7c440502d4 --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_idempotent.https.window.js @@ -0,0 +1,44 @@ +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const observer1_changes = []; + const observer1 = new PressureObserver(changes => { + observer1_changes.push(changes); + }); + t.add_cleanup(() => observer1.disconnect()); + // Ensure that observer1's schema gets registered before observer2 starts. + const promise = observer1.observe('cpu'); + observer1.disconnect(); + observer1.disconnect(); + await promise_rejects_dom(t, 'AbortError', promise); + + const observer2_promise = new Promise((resolve, reject) => { + const observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); + }); + await update_virtual_pressure_source('cpu', 'critical'); + const observer2_changes = await observer2_promise; + + assert_equals( + observer1_changes.length, 0, + 'stopped observers should not receive callbacks'); + + assert_equals(observer2_changes.length, 1); + assert_equals(observer2_changes[0].state, 'critical'); +}, 'Stopped PressureObserver do not receive changes'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_immediately.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_immediately.https.any.js deleted file mode 100644 index 86963e242ab..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_immediately.https.any.js +++ /dev/null @@ -1,67 +0,0 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -pressure_test(async (t, mockPressureService) => { - const observer1_changes = []; - const observer1 = new PressureObserver(changes => { - observer1_changes.push(changes); - }); - t.add_cleanup(() => observer1.disconnect()); - // Ensure that observer1's schema gets registered before observer2 starts. - const promise = observer1.observe('cpu'); - observer1.disconnect(); - await promise_rejects_dom(t, 'AbortError', promise); - - const observer2_changes = []; - await new Promise((resolve, reject) => { - const observer2 = new PressureObserver(changes => { - observer2_changes.push(changes); - resolve(); - }); - t.add_cleanup(() => observer2.disconnect()); - observer2.observe('cpu').catch(reject); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - }); - - assert_equals( - observer1_changes.length, 0, - 'stopped observers should not receive callbacks'); - - assert_equals(observer2_changes.length, 1); - assert_equals(observer2_changes[0].length, 1); - assert_equals(observer2_changes[0][0].state, 'critical'); -}, 'Stopped PressureObserver do not receive changes'); - -pressure_test(async (t, mockPressureService) => { - const observer1_changes = []; - const observer1 = new PressureObserver(changes => { - observer1_changes.push(changes); - }); - t.add_cleanup(() => observer1.disconnect()); - - const observer2_changes = []; - await new Promise(async resolve => { - const observer2 = new PressureObserver(changes => { - observer2_changes.push(changes); - resolve(); - }); - t.add_cleanup(() => observer2.disconnect()); - const promise = observer1.observe('cpu'); - observer2.observe('cpu'); - observer1.disconnect(); - await promise_rejects_dom(t, 'AbortError', promise); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - }); - - assert_equals( - observer1_changes.length, 0, - 'stopped observers should not receive callbacks'); - - assert_equals(observer2_changes.length, 1); - assert_equals(observer2_changes[0][0].state, 'critical'); -}, 'Removing observer before observe() resolves does not affect other observers'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_immediately.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_immediately.https.window.js new file mode 100644 index 00000000000..f411a1ea85c --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_disconnect_immediately.https.window.js @@ -0,0 +1,77 @@ +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const observer1_changes = []; + const observer1 = new PressureObserver(changes => { + observer1_changes.push(changes); + }); + t.add_cleanup(() => observer1.disconnect()); + // Ensure that observer1's schema gets registered before observer2 starts. + const promise = observer1.observe('cpu'); + observer1.disconnect(); + await promise_rejects_dom(t, 'AbortError', promise); + + const observer2_promise = new Promise((resolve, reject) => { + const observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); + }); + await update_virtual_pressure_source('cpu', 'critical'); + const observer2_changes = await observer2_promise; + + assert_equals( + observer1_changes.length, 0, + 'stopped observers should not receive callbacks'); + + assert_equals(observer2_changes.length, 1); + assert_equals(observer2_changes[0].state, 'critical'); +}, 'Stopped PressureObservers do not receive changes'); + +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const observer1_changes = []; + const observer1 = new PressureObserver(changes => { + observer1_changes.push(changes); + }); + t.add_cleanup(() => observer1.disconnect()); + + let observer2; + const observer2_promise = new Promise(resolve => { + observer2 = new PressureObserver(resolve); + t.add_cleanup(() => observer2.disconnect()); + }); + + await update_virtual_pressure_source('cpu', 'critical'); + + const observer1_observe_promise = observer1.observe('cpu'); + observer2.observe('cpu'); + observer1.disconnect(); + await promise_rejects_dom(t, 'AbortError', observer1_observe_promise); + const observer2_changes = await observer2_promise; + + assert_equals( + observer1_changes.length, 0, + 'stopped observers should not receive callbacks'); + + assert_equals(observer2_changes.length, 1); + assert_equals(observer2_changes[0].state, 'critical'); +}, 'Removing observer before observe() resolves does not affect other observers'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_duplicate_updates.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_duplicate_updates.https.any.js deleted file mode 100644 index 609fb5ad708..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_duplicate_updates.https.any.js +++ /dev/null @@ -1,32 +0,0 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -pressure_test(async (t, mockPressureService) => { - const pressureChanges = await new Promise(async resolve => { - const observer_changes = []; - let n = 0; - const observer = new PressureObserver(changes => { - observer_changes.push(changes); - if (++n === 2) - resolve(observer_changes); - }); - observer.observe('cpu', {sampleInterval: 200}); - const updatesDelivered = mockPressureService.updatesDelivered(); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval*/ 200); - // Deliver 2 updates. - await t.step_wait( - () => mockPressureService.updatesDelivered() >= (updatesDelivered + 2), - 'Wait for more than one update to be delivered to the observer'); - mockPressureService.setPressureUpdate('cpu', 'nominal'); - // Deliver more updates, |resolve()| will be called when the new pressure - // state reaches PressureObserver and its callback is invoked - // for the second time. - }); - assert_equals(pressureChanges.length, 2); - assert_equals(pressureChanges[0][0].state, 'critical'); - assert_equals(pressureChanges[1][0].state, 'nominal'); -}, 'Changes that fail the "has change in data" test are discarded.'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_duplicate_updates.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_duplicate_updates.https.window.js new file mode 100644 index 00000000000..f11a59b4cbb --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_duplicate_updates.https.window.js @@ -0,0 +1,43 @@ +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async (t) => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + let pressureChanges = []; + const observer = new PressureObserver((changes) => { + pressureChanges = pressureChanges.concat(changes); + }); + t.add_cleanup(() => { + observer.disconnect(); + }); + await observer.observe('cpu', {sampleInterval: 100}); + const input = ['critical', 'critical', 'nominal']; + while (input.length != 0) { + await update_virtual_pressure_source('cpu', input.shift()); + const currentChangesLength = pressureChanges.length; + await Promise.race([ + new Promise((resolve) => { + t.step_timeout(() => resolve('TIMEOUT'), 1000); + }), + t.step_wait( + () => pressureChanges.length === currentChangesLength + 1, + 'Wait for new reading'), + ]); + } + assert_equals(pressureChanges.length, 2); + assert_equals(pressureChanges[0].state, 'critical'); + assert_equals(pressureChanges[1].state, 'nominal'); +}, 'Changes that fail the "has change in data" test are discarded.'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_multiple.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_multiple.https.window.js index 8c50cc4b3df..a5d2f530a09 100644 --- a/tests/wpt/tests/compute-pressure/compute_pressure_multiple.https.any.js +++ b/tests/wpt/tests/compute-pressure/compute_pressure_multiple.https.window.js @@ -1,10 +1,19 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js 'use strict'; -pressure_test(async (t, mockPressureService) => { +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + const changes1_promise = new Promise((resolve, reject) => { const observer = new PressureObserver(resolve); t.add_cleanup(() => observer.disconnect()); @@ -23,8 +32,7 @@ pressure_test(async (t, mockPressureService) => { observer.observe('cpu').catch(reject); }); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); + await update_virtual_pressure_source('cpu', 'critical'); const [changes1, changes2, changes3] = await Promise.all([changes1_promise, changes2_promise, changes3_promise]); @@ -33,3 +41,5 @@ pressure_test(async (t, mockPressureService) => { assert_equals(changes[0].state, 'critical'); } }, 'Three PressureObserver instances receive changes'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_observe_idempotent.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_observe_idempotent.https.any.js deleted file mode 100644 index 9fcbb49814b..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_observe_idempotent.https.any.js +++ /dev/null @@ -1,19 +0,0 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -pressure_test(async (t, mockPressureService) => { - const update = await new Promise((resolve, reject) => { - const observer = new PressureObserver(resolve); - t.add_cleanup(() => observer.disconnect()); - observer.observe('cpu').catch(reject); - observer.observe('cpu').catch(reject); - observer.observe('cpu').catch(reject); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - }); - - assert_equals(update[0].state, 'critical'); -}, 'PressureObserver.observe() is idempotent'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_observe_idempotent.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_observe_idempotent.https.window.js new file mode 100644 index 00000000000..af719097db2 --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_observe_idempotent.https.window.js @@ -0,0 +1,29 @@ +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const update = await new Promise((resolve, reject) => { + const observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); + observer.observe('cpu').catch(reject); + observer.observe('cpu').catch(reject); + update_virtual_pressure_source('cpu', 'critical').catch(reject); + }); + + assert_equals(update[0].state, 'critical'); +}, 'PressureObserver.observe() is idempotent'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_options.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_options.https.window.js index ecf3c29dbf0..0cf0b8e11fd 100644 --- a/tests/wpt/tests/compute-pressure/compute_pressure_options.https.any.js +++ b/tests/wpt/tests/compute-pressure/compute_pressure_options.https.window.js @@ -1,20 +1,28 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js 'use strict'; -pressure_test(async (t, mockPressureService) => { - await new Promise(resolve => { +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + await new Promise((resolve, reject) => { const observer = new PressureObserver(resolve); t.add_cleanup(() => observer.disconnect()); - observer.observe('cpu', {sampleInterval: 0}); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); + observer.observe('cpu', {sampleInterval: 0}).catch(reject); + update_virtual_pressure_source('cpu', 'critical').catch(reject); }); }, 'PressureObserver observe method doesnt throw error for sampleInterval value 0'); -promise_test(async t => { +pressure_test(async t => { const observer = new PressureObserver(t.unreached_func('oops should not end up here')); t.add_cleanup(() => observer.disconnect()); @@ -22,10 +30,12 @@ promise_test(async t => { t, TypeError, observer.observe('cpu', {sampleInterval: -2})); }, 'PressureObserver observe method requires a positive sampleInterval'); -promise_test(async t => { +pressure_test(async t => { const observer = new PressureObserver(t.unreached_func('oops should not end up here')); t.add_cleanup(() => observer.disconnect()); await promise_rejects_js( t, TypeError, observer.observe('cpu', {sampleInterval: 2 ** 32})); }, 'PressureObserver observe method requires a sampleInterval in unsigned long range'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_rate_obfuscation_mitigation_not_triggered.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_rate_obfuscation_mitigation_not_triggered.https.window.js deleted file mode 100644 index f3e966de241..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_rate_obfuscation_mitigation_not_triggered.https.window.js +++ /dev/null @@ -1,50 +0,0 @@ -// META: timeout=long -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -pressure_test(async (t, mockPressureService) => { - const sampleIntervalInMs = 100; - const readings = ['nominal', 'fair', 'serious', 'critical']; - // Normative values for rate obfuscation parameters. - // https://w3c.github.io/compute-pressure/#rate-obfuscation-normative-parameters. - const minPenaltyTimeInMs = 5000; - const minChangesThreshold = 50; - - const changes = await new Promise(async resolve => { - const observerChanges = []; - const observer = new PressureObserver(changes => { - observerChanges.push(changes); - }); - - observer.observe('cpu', {sampleInterval: sampleIntervalInMs}); - mockPressureService.startPlatformCollector(sampleIntervalInMs); - let i = 0; - // mockPressureService.updatesDelivered() does not necessarily match - // pressureChanges.length, as system load and browser optimizations can - // cause the actual timer used by mockPressureService to deliver readings - // to be a bit slower or faster than requested. - while (observerChanges.length < minChangesThreshold) { - mockPressureService.setPressureUpdate( - 'cpu', readings[i++ % readings.length]); - // Allow tasks to run (avoid a micro-task loop). - await new Promise((resolve) => t.step_timeout(resolve, 0)); - await t.step_wait( - () => mockPressureService.updatesDelivered() >= i, - `At least ${i} readings have been delivered`); - } - observer.disconnect(); - resolve(observerChanges); - }); - assert_equals(changes.length, minChangesThreshold); - - for (let i = 0; i < (changes.length - 1); i++) { - // Because no penalty should be triggered, the timestamp difference - // between samples should be less than the minimum penalty. - assert_less_than( - changes[i + 1][0].time - changes[i][0].time, minPenaltyTimeInMs, - 'Not in sample time boundaries'); - } -}, 'No rate obfuscation mitigation should happen, when number of changes is below minimum changes before penalty'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_rate_obfuscation_mitigation_triggered.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_rate_obfuscation_mitigation_triggered.https.window.js deleted file mode 100644 index b481cf6c87d..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_rate_obfuscation_mitigation_triggered.https.window.js +++ /dev/null @@ -1,56 +0,0 @@ -// META: timeout=long -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -pressure_test(async (t, mockPressureService) => { - const sampleIntervalInMs = 40; - const readings = ['nominal', 'fair', 'serious', 'critical']; - // Normative values for rate obfuscation parameters. - // https://w3c.github.io/compute-pressure/#rate-obfuscation-normative-parameters. - const minPenaltyTimeInMs = 5000; - const maxChangesThreshold = 100; - const minChangesThreshold = 50; - let gotPenalty = false; - await new Promise(async resolve => { - const observerChanges = []; - const observer = new PressureObserver(changes => { - if (observerChanges.length >= (minChangesThreshold - 1)) { - const lastSample = observerChanges.at(-1); - if ((changes[0].time - lastSample[0].time) >= minPenaltyTimeInMs) { - // The update delivery might still be working even if - // maxChangesThreshold have been reached and before disconnect() is - // processed. - // Therefore we are adding a flag to dismiss any updates after the - // penalty is detected, which is the condition for the test to pass. - gotPenalty = true; - observer.disconnect(); - resolve(); - } - } - observerChanges.push(changes); - }); - - observer.observe('cpu', {sampleInterval: sampleIntervalInMs}); - mockPressureService.startPlatformCollector(sampleIntervalInMs); - let i = 0; - // mockPressureService.updatesDelivered() does not necessarily match - // pressureChanges.length, as system load and browser optimizations can - // cause the actual timer used by mockPressureService to deliver readings - // to be a bit slower or faster than requested. - while (observerChanges.length <= maxChangesThreshold || !gotPenalty) { - mockPressureService.setPressureUpdate( - 'cpu', readings[i++ % readings.length]); - // Allow tasks to run (avoid a micro-task loop). - await new Promise((resolve) => t.step_timeout(resolve, 0)); - await t.step_wait( - () => mockPressureService.updatesDelivered() >= i, - `At least ${i} readings have been delivered`); - } - - assert_true(gotPenalty, 'Penalty not triggered'); - - }); -}, 'Rate obfuscation mitigation should have been triggered, when changes is higher than minimum changes before penalty'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_take_records.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_take_records.https.any.js deleted file mode 100644 index 55660b228be..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_take_records.https.any.js +++ /dev/null @@ -1,29 +0,0 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -test(t => { - const observer = new PressureObserver( - t.unreached_func('This callback should not have been called.')); - - const records = observer.takeRecords(); - assert_equals(records.length, 0, 'No record before observe'); -}, 'Calling takeRecords() before observe()'); - -pressure_test(async (t, mockPressureService) => { - let observer; - const changes = await new Promise(resolve => { - observer = new PressureObserver(resolve); - t.add_cleanup(() => observer.disconnect()); - - observer.observe('cpu'); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - }); - assert_equals(changes[0].state, 'critical'); - - const records = observer.takeRecords(); - assert_equals(records.length, 0, 'No record available'); -}, 'takeRecords() returns empty record after callback invoke'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_take_records.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_take_records.https.window.js new file mode 100644 index 00000000000..0025dd61701 --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_take_records.https.window.js @@ -0,0 +1,38 @@ +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async (t) => { + const observer = new PressureObserver( + t.unreached_func('This callback should not have been called.')); + + const records = observer.takeRecords(); + assert_equals(records.length, 0, 'No record before observe'); +}, 'Calling takeRecords() before observe()'); + +pressure_test(async (t) => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + let observer; + const changes = await new Promise((resolve, reject) => { + observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); + update_virtual_pressure_source('cpu', 'critical').catch(reject); + }); + assert_equals(changes[0].state, 'critical'); + + const records = observer.takeRecords(); + assert_equals(records.length, 0, 'No record available'); +}, 'takeRecords() returns empty record after callback invoke'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_timestamp.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_timestamp.https.any.js deleted file mode 100644 index 18db1dac461..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_timestamp.https.any.js +++ /dev/null @@ -1,117 +0,0 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -'use strict'; - -pressure_test(async (t, mockPressureService) => { - const [change, timeOrigin] = await new Promise(resolve => { - const observer = new PressureObserver(change => { - resolve([change, performance.timeOrigin]); - }); - t.add_cleanup(() => observer.disconnect()); - observer.observe('cpu'); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - }); - assert_greater_than(change[0].time, timeOrigin); -}, 'Timestamp from update should be greater than timeOrigin'); - -pressure_test(async (t, mockPressureService) => { - const readings = ['nominal', 'fair', 'serious', 'critical']; - - const sampleInterval = 250; - const pressureChanges = []; - const observer = new PressureObserver(changes => { - pressureChanges.push(changes); - }); - observer.observe('cpu', {sampleInterval}); - - mockPressureService.startPlatformCollector(sampleInterval / 2); - let i = 0; - // mockPressureService.updatesDelivered() does not necessarily match - // pressureChanges.length, as system load and browser optimizations can - // cause the actual timer used by mockPressureService to deliver readings - // to be a bit slower or faster than requested. - while (pressureChanges.length < 4) { - mockPressureService.setPressureUpdate( - 'cpu', readings[i++ % readings.length]); - await t.step_wait( - () => mockPressureService.updatesDelivered() >= i, - `At least ${i} readings have been delivered`); - } - observer.disconnect(); - - assert_equals(pressureChanges.length, 4); - assert_greater_than(pressureChanges[1][0].time, pressureChanges[0][0].time); - assert_greater_than(pressureChanges[2][0].time, pressureChanges[1][0].time); - assert_greater_than(pressureChanges[3][0].time, pressureChanges[2][0].time); -}, 'Timestamp difference between two changes should be continuously increasing'); - -pressure_test(async (t, mockPressureService) => { - const readings = ['nominal', 'fair', 'serious', 'critical']; - - const sampleInterval = 250; - const pressureChanges = []; - const observer = new PressureObserver(change => { - pressureChanges.push(change); - }); - observer.observe('cpu', {sampleInterval}); - - mockPressureService.startPlatformCollector(sampleInterval / 2); - let i = 0; - // mockPressureService.updatesDelivered() does not necessarily match - // pressureChanges.length, as system load and browser optimizations can - // cause the actual timer used by mockPressureService to deliver readings - // to be a bit slower or faster than requested. - while (pressureChanges.length < 4) { - mockPressureService.setPressureUpdate( - 'cpu', readings[i++ % readings.length]); - await t.step_wait( - () => mockPressureService.updatesDelivered() >= i, - `At least ${i} readings have been delivered`); - } - observer.disconnect(); - - assert_equals(pressureChanges.length, 4); - assert_greater_than_equal( - pressureChanges[1][0].time - pressureChanges[0][0].time, sampleInterval); - assert_greater_than_equal( - pressureChanges[2][0].time - pressureChanges[1][0].time, sampleInterval); - assert_greater_than_equal( - pressureChanges[3][0].time - pressureChanges[2][0].time, sampleInterval); -}, 'Faster collector: Timestamp difference between two changes should be higher or equal to the observer sample rate'); - -pressure_test(async (t, mockPressureService) => { - const pressureChanges = []; - const sampleInterval = 1000; - const observer = new PressureObserver(changes => { - pressureChanges.push(changes); - }); - - await new Promise(async resolve => { - observer.observe('cpu', {sampleInterval}); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(sampleInterval); - await t.step_wait(() => pressureChanges.length == 1); - observer.disconnect(); - resolve(); - }); - - await new Promise(async resolve => { - observer.observe('cpu'); - mockPressureService.setPressureUpdate('cpu', 'serious'); - mockPressureService.startPlatformCollector(sampleInterval / 4); - await t.step_wait(() => pressureChanges.length == 2); - observer.disconnect(); - resolve(); - }); - - assert_equals(pressureChanges.length, 2); - // When disconnect() is called, PressureRecord in [[LastRecordMap]] for cpu - // should be deleted. So the second PressureRecord is not discarded even - // though the time interval does not meet the requirement. - assert_less_than( - (pressureChanges[1][0].time - pressureChanges[0][0].time), - sampleInterval); -}, 'disconnect() should update [[LastRecordMap]]'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_timestamp.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_timestamp.https.window.js new file mode 100644 index 00000000000..0f35eef522a --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_timestamp.https.window.js @@ -0,0 +1,58 @@ +// META: timeout=long +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async (t) => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const changes = await new Promise((resolve, reject) => { + const observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); + update_virtual_pressure_source('cpu', 'critical').catch(reject); + }); + + assert_less_than(changes[0].time, performance.now()); +}, 'Timestamp from update should be tied to the global object\'s time origin'); + +pressure_test(async (t) => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + let pressureChanges = []; + const observer = new PressureObserver((changes) => { + pressureChanges = pressureChanges.concat(changes); + }); + t.add_cleanup(() => { + observer.disconnect(); + }); + + // When disconnect() is called, PressureRecord in [[LastRecordMap]] for cpu + // should be cleared. The effect we observe in this test is the "has change + // in data" algorithm passing with the same state twice. + const states = ['critical', 'critical']; + for (let i = 0; i < states.length; ++i) { + await observer.observe('cpu', {sampleInterval: 500}); + await update_virtual_pressure_source('cpu', states[i]); + await t.step_wait(() => pressureChanges.length == i + 1, 'foo'); + observer.disconnect(); + } + + assert_equals(pressureChanges.length, 2); + assert_equals(pressureChanges[0].state, 'critical'); + assert_equals(pressureChanges[1].state, 'critical'); +}, 'disconnect() should update [[LastRecordMap]]'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_timestamp_continuously_increasing.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_timestamp_continuously_increasing.https.window.js new file mode 100644 index 00000000000..bdf5dbae6f5 --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_timestamp_continuously_increasing.https.window.js @@ -0,0 +1,42 @@ +// META: timeout=long +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const readings = ['nominal', 'fair', 'serious', 'critical']; + + const pressureChanges = []; + const observer = new PressureObserver(changes => { + pressureChanges.push(changes); + }); + await observer.observe('cpu', {sampleInterval: 250}); + + let i = 0; + while (pressureChanges.length < 4) { + await update_virtual_pressure_source( + 'cpu', readings[i++ % readings.length]); + await t.step_wait( + () => pressureChanges.length >= i, + `At least ${i} readings have been delivered`); + } + observer.disconnect(); + + assert_equals(pressureChanges.length, 4); + assert_greater_than(pressureChanges[1][0].time, pressureChanges[0][0].time); + assert_greater_than(pressureChanges[2][0].time, pressureChanges[1][0].time); + assert_greater_than(pressureChanges[3][0].time, pressureChanges[2][0].time); +}, 'Timestamp difference between two changes should be continuously increasing'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_timestamp_faster_collector.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_timestamp_faster_collector.https.window.js new file mode 100644 index 00000000000..40ffe3b5b00 --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_timestamp_faster_collector.https.window.js @@ -0,0 +1,45 @@ +// META: timeout=long +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +'use strict'; + +pressure_test(async (t) => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const readings = ['nominal', 'fair', 'serious', 'critical']; + + const sampleInterval = 250; + let pressureChanges = []; + const observer = new PressureObserver((changes) => { + pressureChanges = pressureChanges.concat(changes); + }); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu', {sampleInterval}); + + for (let i = 0; i < 4;) { + await update_virtual_pressure_source( + 'cpu', readings[i++ % readings.length]); + await t.step_wait( + () => pressureChanges.length === i, + `At least ${i} readings have been delivered`); + } + + assert_equals(pressureChanges.length, 4); + assert_greater_than_equal( + pressureChanges[1].time - pressureChanges[0].time, sampleInterval); + assert_greater_than_equal( + pressureChanges[2].time - pressureChanges[1].time, sampleInterval); + assert_greater_than_equal( + pressureChanges[3].time - pressureChanges[2].time, sampleInterval); +}, 'Faster collector: Timestamp difference between two changes should be higher or equal to the observer sample rate'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_update_toJSON.https.any.js b/tests/wpt/tests/compute-pressure/compute_pressure_update_toJSON.https.any.js deleted file mode 100644 index 7f726698d61..00000000000 --- a/tests/wpt/tests/compute-pressure/compute_pressure_update_toJSON.https.any.js +++ /dev/null @@ -1,17 +0,0 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker - -pressure_test(async (t, mockPressureService) => { - const changes = await new Promise(resolve => { - const observer = new PressureObserver(resolve); - observer.observe('cpu'); - mockPressureService.setPressureUpdate('cpu', 'critical'); - mockPressureService.startPlatformCollector(/*sampleInterval=*/ 200); - }); - assert_true(changes.length === 1); - const json = changes[0].toJSON(); - assert_equals(json.state, 'critical'); - assert_equals(json.source, 'cpu'); - assert_equals(typeof json.time, 'number'); -}, 'Basic functionality test'); diff --git a/tests/wpt/tests/compute-pressure/compute_pressure_update_toJSON.https.window.js b/tests/wpt/tests/compute-pressure/compute_pressure_update_toJSON.https.window.js new file mode 100644 index 00000000000..4ba8142c72e --- /dev/null +++ b/tests/wpt/tests/compute-pressure/compute_pressure_update_toJSON.https.window.js @@ -0,0 +1,28 @@ +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +pressure_test(async t => { + await create_virtual_pressure_source('cpu'); + t.add_cleanup(async () => { + await remove_virtual_pressure_source('cpu'); + }); + + const changes = await new Promise((resolve, reject) => { + const observer = new PressureObserver(resolve); + t.add_cleanup(() => observer.disconnect()); + observer.observe('cpu').catch(reject); + update_virtual_pressure_source('cpu', 'critical').catch(reject); + }); + assert_equals(1, changes.length); + const json = changes[0].toJSON(); + assert_equals(json.state, 'critical'); + assert_equals(json.source, 'cpu'); + assert_equals(typeof json.time, 'number'); +}, 'Basic functionality test'); + +mark_as_done(); diff --git a/tests/wpt/tests/compute-pressure/observe_return_type.https.any.js b/tests/wpt/tests/compute-pressure/observe_return_type.https.window.js index b24878ab394..6653f9a89ee 100644 --- a/tests/wpt/tests/compute-pressure/observe_return_type.https.any.js +++ b/tests/wpt/tests/compute-pressure/observe_return_type.https.window.js @@ -1,12 +1,11 @@ -// META: script=/resources/test-only-api.js -// META: script=resources/pressure-helpers.js -// META: global=window,dedicatedworker,sharedworker +// META: variant=?globalScope=window +// META: variant=?globalScope=dedicated_worker 'use strict'; // Regression test for https://issues.chromium.org/issues/333957909 // Make sure that observe() always returns a Promise. -pressure_test(async (t, mockPressureService) => { +promise_test(async (t) => { const observer = new PressureObserver(() => {}); t.add_cleanup(() => observer.disconnect()); diff --git a/tests/wpt/tests/compute-pressure/resources/pressure-helpers.js b/tests/wpt/tests/compute-pressure/resources/pressure-helpers.js deleted file mode 100644 index 5234cf2d78c..00000000000 --- a/tests/wpt/tests/compute-pressure/resources/pressure-helpers.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -// These tests rely on the User Agent providing an implementation of -// platform compute pressure backends. -// -// In Chromium-based browsers this implementation is provided by a polyfill -// in order to reduce the amount of test-only code shipped to users. To enable -// these tests the browser must be run with these options: -// -// --enable-blink-features=MojoJS,MojoJSTest - -let mockPressureService = undefined; - -function pressure_test(func, name, properties) { - promise_test(async t => { - if (mockPressureService === undefined) { - if (isChromiumBased) { - const mocks = - await import('/resources/chromium/mock-pressure-service.js'); - mockPressureService = mocks.mockPressureService; - } - } - assert_implements( - mockPressureService, - 'missing mockPressureService after initialization'); - - mockPressureService.start(); - - t.add_cleanup(() => { - mockPressureService.reset(); - return mockPressureService.stop(); - }); - return func(t, mockPressureService); - }, name, properties); -} diff --git a/tests/wpt/tests/cookies/partitioned-cookies/partitioned-cookies-same-site-subresource-to-cross-site-redirect.tentative.https.html b/tests/wpt/tests/cookies/partitioned-cookies/partitioned-cookies-same-site-subresource-to-cross-site-redirect.tentative.https.html new file mode 100644 index 00000000000..971f7ccfef5 --- /dev/null +++ b/tests/wpt/tests/cookies/partitioned-cookies/partitioned-cookies-same-site-subresource-to-cross-site-redirect.tentative.https.html @@ -0,0 +1,60 @@ +<!DOCTYPE html> +<meta charset="utf-8"/> +<meta name="timeout" content="long"> +<meta name="help" href="https://github.com/WICG/CHIPS#chips-cookies-having-independent-partitioned-state"> +<title>Test partitioned cookies same-site sub-resource redirect to cross-site</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/cookies/resources/cookie-helper.sub.js"></script> +<script src="/cookies/partitioned-cookies/resources/test-helpers.js"></script> + +<body> +<script> +promise_test(async () => { + //Add partitioned cookie to top-level site. + assert_equals(document.cookie, ""); + const partitionedCookie = "ancestor=chain"; + const partitionedCookieAttributes = + "; Secure; Path=/; SameSite=None; Partitioned"; + const partitionedCookieLine = + partitionedCookie + partitionedCookieAttributes; + + document.cookie = partitionedCookieLine; + + assert_true(document.cookie.includes(partitionedCookie)); + + const resourceDir = "./resources/"; + const embedUrl = new URL(resourceDir + + "ancestor-chain-same-site-to-cross-site-embed.html", + get_host_info().HTTPS_NOTSAMESITE_ORIGIN + self.location.pathname); + const redirectUrl = new URL(resourceDir + + "redirect-and-echo-cookie-header.py?location=" + embedUrl, + get_host_info().HTTPS_NOTSAMESITE_ORIGIN + self.location.pathname); + + const iframe = document.createElement("iframe"); + iframe.src = new URL(resourceDir + "ancestor-chain-empty-embed.html", + get_host_info().ORIGIN + self.location.pathname); + document.body.appendChild(iframe); + await new Promise(r => iframe.onload = r); + + // Confirm that the iframe is same-site to the top-level site. + let iframeUrl = new URL(iframe.src); + let iframeHost = iframeUrl.hostname; + assert_equals(window.location.hostname, iframeHost); + + iframe.src = redirectUrl; + await new Promise(r => iframe.onload = r); + + await fetch_tests_from_window(iframe.contentWindow); + + // Confirm that the iframe is cross-site to the top-level site. + iframeUrl = new URL(iframe.src); + iframeHost = iframeUrl.hostname; + assert_not_equals(window.location.hostname, iframeHost); + +}, "Partitioned cookies are not sent in embedded same-site to cross-site redirects"); +</script> +</body> + + diff --git a/tests/wpt/tests/cookies/partitioned-cookies/resources/ancestor-chain-same-site-to-cross-site-embed.html b/tests/wpt/tests/cookies/partitioned-cookies/resources/ancestor-chain-same-site-to-cross-site-embed.html new file mode 100644 index 00000000000..d49d558fe8f --- /dev/null +++ b/tests/wpt/tests/cookies/partitioned-cookies/resources/ancestor-chain-same-site-to-cross-site-embed.html @@ -0,0 +1,20 @@ +<!doctype html> +<head> +<meta charset="utf-8"/> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/cookies/resources/testharness-helpers.js"></script> +<title>Test partitioned cookies ancestor chain: cross-site embed</title> +</head> +<body> +<script> + +promise_test(async t => { + await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); + const partitionedCookie = "ancestor=chain"; + assert_false(window.location.href.includes(partitionedCookie)); + assert_false(document.cookie.includes(partitionedCookie)); +}, "Cross-site embed partitioned cookie access"); + +</script> +</body> diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-parse-invalid.html b/tests/wpt/tests/css/css-anchor-position/anchor-parse-invalid.html index f64a1fe2fed..04b19b25301 100644 --- a/tests/wpt/tests/css/css-anchor-position/anchor-parse-invalid.html +++ b/tests/wpt/tests/css/css-anchor-position/anchor-parse-invalid.html @@ -18,6 +18,8 @@ test_invalid_value('top', 'anchor(--foo top,)'); test_invalid_value('top', 'anchor(--foo top bottom)'); test_invalid_value('top', 'anchor(--foo top, 10px 20%)'); test_invalid_value('top', 'anchor(--foo top, 10px, 20%)'); +test_invalid_value('top', 'anchor(2 * 20%)'); +test_invalid_value('top', 'anchor((2 * 20%))'); // Anchor name must be a dashed ident test_invalid_value('top', 'anchor(foo top)'); diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-parse-valid.html b/tests/wpt/tests/css/css-anchor-position/anchor-parse-valid.html index a51d50b6bfc..ec1c4971349 100644 --- a/tests/wpt/tests/css/css-anchor-position/anchor-parse-valid.html +++ b/tests/wpt/tests/css/css-anchor-position/anchor-parse-valid.html @@ -36,6 +36,8 @@ const anchorSides = [ 'self-end', 'center', '50%', + 'calc(50%)', + 'min(50%, 100%)', ]; const fallbacks = [ diff --git a/tests/wpt/tests/css/css-cascade/import-conditions.html b/tests/wpt/tests/css/css-cascade/import-conditions.html index 9c1e5c6e876..fba3632bef3 100644 --- a/tests/wpt/tests/css/css-cascade/import-conditions.html +++ b/tests/wpt/tests/css/css-cascade/import-conditions.html @@ -48,6 +48,18 @@ matches: false }, { + importCondition: "supports(supports(display:block))", + matches: false + }, + { + importCondition: "supports(())", + matches: false + }, + { + importCondition: "supports()", + matches: false + }, + { importCondition: "supports(display:block) (width >= 0px)", matches: true }, diff --git a/tests/wpt/tests/css/css-conditional/container-queries/flex-basis-with-container-type.html b/tests/wpt/tests/css/css-conditional/container-queries/flex-basis-with-container-type.html new file mode 100644 index 00000000000..ebe95e578f1 --- /dev/null +++ b/tests/wpt/tests/css/css-conditional/container-queries/flex-basis-with-container-type.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<link rel="help" href="https://crbug.com/370480725"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div style="display: flex; flex-direction: column; width: 100px;"> + <div style="aspect-ratio: 1; container-type: size;"> + <div style="width:100%; height:100cqh; background: green;"></div> + </div> +</div> diff --git a/tests/wpt/tests/css/css-contain/content-visibility/animation-display-lock.html b/tests/wpt/tests/css/css-contain/content-visibility/animation-display-lock.html index 279ffd002ed..f380a06621a 100644 --- a/tests/wpt/tests/css/css-contain/content-visibility/animation-display-lock.html +++ b/tests/wpt/tests/css/css-contain/content-visibility/animation-display-lock.html @@ -21,10 +21,10 @@ width: 100px; } .animate { - animation: fade 1s linear 2 alternate; + animation: fade 10s linear 2 alternate; } .transition { - transition: opacity 1s linear; + transition: opacity 10s linear; } </style> <body> @@ -67,7 +67,7 @@ promise_test(async t => { await animation.ready; await waitForAnimationFrames(1); container.style.contentVisibility = 'hidden'; - animation.currentTime = 1500; + animation.currentTime = 15000; assert_approx_equals( parseFloat(getComputedStyle(target).opacity), 0.5, 1e-6, 'Computed style is updated even when the animation is running in a ' + @@ -97,9 +97,9 @@ promise_test(async t => { await waitForAnimationFrames(1); container.style.contentVisibility = 'hidden'; // Advance to just shy of the effect end. - animation.currentTime = 1999; + animation.currentTime = 19999; assert_approx_equals( - parseFloat(getComputedStyle(target).opacity), 0.999, 1e-6, + parseFloat(getComputedStyle(target).opacity), 0.9999, 1e-6, 'Computed style is updated even when the animation is ' + 'running in a display locked subtree'); // Advancing frames should not resolve the finished promise. @@ -127,9 +127,9 @@ promise_test(async t => { await waitForAnimationFrames(1); container.style.contentVisibility = 'hidden'; // Advance to just shy of the effect end. - animation.currentTime = 999; + animation.currentTime = 9999; assert_approx_equals( - parseFloat(getComputedStyle(target).opacity), 0.001, 1e-6, + parseFloat(getComputedStyle(target).opacity), 0.0001, 1e-6, 'Computed style is updated even when the animation is ' + 'running in a display locked subtree'); // Advancing frames should not resolve the finished promise. @@ -173,7 +173,7 @@ promise_test(async t => { animation.play(); assert_equals(target.getAnimations().length, 1); - animation.currentTime = 1999; + animation.currentTime = 19999; await animation.ready; await waitForAnimationFrames(2); diff --git a/tests/wpt/tests/css/css-flexbox/aspect-ratio-transferred-max-size.html b/tests/wpt/tests/css/css-flexbox/aspect-ratio-transferred-max-size.html new file mode 100644 index 00000000000..3331e5fabef --- /dev/null +++ b/tests/wpt/tests/css/css-flexbox/aspect-ratio-transferred-max-size.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/10997"> +<link rel="match" href="../reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div style="display: flex; width: 100px;"> + <div style="aspect-ratio: 1/2; max-height: 100px; flex: 1; background: green;"></div> +</div> diff --git a/tests/wpt/tests/css/css-flexbox/baseline-outside-flex-item.html b/tests/wpt/tests/css/css-flexbox/baseline-outside-flex-item.html new file mode 100644 index 00000000000..feb1930df46 --- /dev/null +++ b/tests/wpt/tests/css/css-flexbox/baseline-outside-flex-item.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#alignment"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht" /> +<title>A baseline outside a single flex-item shouldn't affect the size of the flex-line.</title> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display: flex; width: 100px; align-items: baseline; background: red;"> + <div style="height: 100px; background: green; min-width: 100px;"> + <div style="margin-top: 200px; color: transparent;">baseline</div> + </div> +</div> diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-invalid.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-invalid.html new file mode 100644 index 00000000000..a1e6769a95c --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-invalid.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Gap Decorations: column-rule-color parsing</title> +<link rel="help" href="https://kbabbitt.github.io/css-gap-decorations/#column-row-rule-color"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<meta name="assert" content="column-rule-color supports only the grammar '[ <line-color-list> | <auto-line-color-list> ]'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +test_invalid_value("column-rule-color", "auto"); + +test_invalid_value("column-rule-color", "red, blue, green"); +test_invalid_value("column-rule-color", "repeat(auto, red, blue, green)"); +test_invalid_value("column-rule-color", "repeat(0, red, blue, green)"); +test_invalid_value("column-rule-color", "repeat(-1, red, blue, green)"); +test_invalid_value("column-rule-color", "repeat(auto, red) red repeat(auto, blue)"); +</script> +</body> +</html> diff --git a/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html new file mode 100644 index 00000000000..e8fd4df3615 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/tentative/parsing/gap-decorations-color-valid.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Gap Decorations: parsing column-rule-color with valid values</title> +<link rel="help" href="https://kbabbitt.github.io/css-gap-decorations/#column-row-rule-color"> +<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com"> +<meta name="assert" content="column-rule-color supports the full grammar '[ <line-color-list> | <auto-line-color-list> ]'."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +</head> +<body> +<script> +// <repeat-line-color> = repeat( [ <integer [1,∞]> ] , [ <color> ]+ ) +test_valid_value("column-rule-color", "repeat(4, blue)"); +test_valid_value("column-rule-color", "repeat(3, red green blue)"); +test_valid_value("column-rule-color", "repeat(1, red green blue yellow)"); + +// <line-color-or-repeat> = [ <color> | <repeat-line-color> ] +test_valid_value("column-rule-color", "red"); +test_valid_value("column-rule-color", "repeat(4, cyan)"); + +// <line-color-list> = [ <line-color-or-repeat> ]+ +test_valid_value("column-rule-color", "green blue"); +test_valid_value("column-rule-color", "red blue green yellow pink"); +test_valid_value("column-rule-color", "repeat(3, blue) repeat(4, red)"); +test_valid_value("column-rule-color", "red repeat(3, blue) blue repeat(4, red green cyan)"); +test_valid_value("column-rule-color", "repeat(4, red green cyan) repeat(5, yellow) blue"); + +// <auto-repeat-line-color> = repeat( auto , [ <color> ]+ ) +test_valid_value("column-rule-color", "repeat(auto, red)"); +test_valid_value("column-rule-color", "repeat(auto, red green blue)"); + +// <auto-line-color-list> = [ <line-color-or-repeat> ]* +// <auto-repeat-line-color> +// [ <line-color-or-repeat> ]* +test_valid_value("column-rule-color", "repeat(auto, red green) red"); +test_valid_value("column-rule-color", "repeat(4, blue red green) repeat(auto, red)"); +test_valid_value("column-rule-color", "blue repeat(auto, red green) repeat(4, blue red green)"); +</script> +</body> +</html> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/Initial-letter-breaking-vlr-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/Initial-letter-breaking-vlr-ref.html index d43b2e39bfa..2c047b0b4aa 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/Initial-letter-breaking-vlr-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/Initial-letter-breaking-vlr-ref.html @@ -35,7 +35,7 @@ background: lime; float: left; height: 80px; - margin-left: 8px; + margin-left: -4px; width: 80px; } </style> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/Initial-letter-breaking-vrl-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/Initial-letter-breaking-vrl-ref.html index 0fe5e74a082..ce2b41135ea 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/Initial-letter-breaking-vrl-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/Initial-letter-breaking-vrl-ref.html @@ -35,7 +35,7 @@ background: lime; float: left; height: 80px; - margin-right: 8px; + margin-right: -4px; width: 80px; } </style> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr-ref.html index 6bbc5c3b7a6..677e2a40db6 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-margins-vlr-ref.html @@ -21,7 +21,7 @@ float: left; height: 80px; margin-bottom: 30px; - margin-left: 23px; + margin-left: 11px; margin-right: 45px; margin-top: 10px; width: 80px; diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl-ref.html index d608d256c96..532f3a7d837 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-margins-vrl-ref.html @@ -22,7 +22,7 @@ height: 80px; margin-bottom: 30px; margin-left: 15px; - margin-right: 53px; + margin-right: 41px; margin-top: 10px; width: 80px; } diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-ref.html index 43222b43dac..23401fd646b 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-ref.html @@ -31,7 +31,7 @@ </head> <body> <div class="sample"> -<div class="fake-initial-letter"></div><br><br><br> +<div class="fake-initial-letter"></div><br><br> <div class="surrounding">bc <ruby>xyz<rt>XYZ</rt></ruby></div> def<br>ghi<br>jkl<br>mno<br> </div> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall-ref.html index f1086074c2a..9511f3e6f2d 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-over-ruby-tall-ref.html @@ -21,7 +21,7 @@ background: lime; float: left; height: 80px; - margin-top: 8px; + margin-top: 32px; width: 80px; } diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-ref.html index 9adde375569..87bc6d0ff41 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-ref.html @@ -32,7 +32,7 @@ </head> <body> <div class="sample"> -<div class="fake-initial-letter"></div><br><br><br> +<div class="fake-initial-letter"></div><br><br> <div class="surrounding">bc <ruby>xyz<rt>XYZ</rt></ruby></div> def<br>ghi<br>jkl<br>mno<br> </div> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall-ref.html index 7e334e55dbf..e818de68cd8 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-block-position-raise-under-ruby-tall-ref.html @@ -25,7 +25,7 @@ width: 80px; } - .surrounding { display:inline-block; margin-top: 72px; margin-bottom: -2px; } + .surrounding { display:inline-block; margin-top: 48px; margin-bottom: -2px; } </style> </head> <body> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-drop-initial-vlr-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-drop-initial-vlr-ref.html index f28d1eed830..5447e2f099a 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-drop-initial-vlr-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-drop-initial-vlr-ref.html @@ -20,7 +20,7 @@ background: lime; float: left; height: 80px; - margin-left: 8px; + margin-left: -4px; width: 80px; } </style> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-drop-initial-vrl-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-drop-initial-vrl-ref.html index 4ec34f4c0bb..e1e04ccffe2 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-drop-initial-vrl-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-drop-initial-vrl-ref.html @@ -20,7 +20,7 @@ background: lime; float: left; height: 80px; - margin-right: 8px; + margin-right: -4px; width: 80px; } </style> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-float-001-vlr-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-float-001-vlr-ref.html index 3982a3669cd..b4567d28812 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-float-001-vlr-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-float-001-vlr-ref.html @@ -28,7 +28,7 @@ background: lime; float: left; height: 80px; - margin-left: 8px; + margin-left: -4px; width: 80px; } </style> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html index f59625a4a9d..29594f45f95 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-ref.html @@ -1,11 +1,11 @@ <!DOCTYPE html> -<html> -<head> +<meta charset="utf-8"> <title>Tests initial letter raise initial</title> <link rel="author" title="Google LLC" href="https://www.google.com/"> <link rel="help" href="https://drafts.csswg.org/css-inline/#raise-initial"> <meta name="flags" content="ahem"> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" > +<script src="resources/initial-letter-variants.js"></script> <style> .sample { border: solid 1px green; @@ -18,16 +18,27 @@ .fake-initial-letter { background: lime; float: left; - height: 80px; + --cap: 0.8; + --size: calc((24px * 2 + 20px * var(--cap)) / var(--cap)); + height: var(--size); + width: var(--size); margin-top: 2px; - width: 80px; + } + + .no-ascent .fake-initial-letter { + height: calc(var(--size) * (1 - var(--cap))); + margin-top: calc(var(--size) * var(--cap) + 2px); + } + .no-descent .fake-initial-letter { + height: calc(var(--size) * var(--cap)); } </style> </head> <body> <div class="sample"> -<div class="fake-initial-letter"></div><br><br><br> +<div class="fake-initial-letter"></div><br><br> bc<br>def<br>ghi<br>jkl<br>mno<br> </div> -</body> -</html> +<script> +setupInitialLetterTestVariants(); +</script> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-rtl-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-rtl-ref.html index 9dce9e6e14c..e5dd8f96b5c 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-rtl-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-rtl-ref.html @@ -27,7 +27,7 @@ </head> <body> <div class="sample"> -<div class="fake-initial-letter"></div><br><br><br> +<div class="fake-initial-letter"></div><br><br> bc<br>def<br>ghi<br>jkl<br>mno<br> </div> </body> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-vlr-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-vlr-ref.html index 58e5c333e11..72d2dd05a3e 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-vlr-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-vlr-ref.html @@ -20,7 +20,7 @@ background: lime; display: inline-block; height: 80px; - margin-left: 8px; + margin-left: -4px; margin-right: 8px; width: 80px; } @@ -29,14 +29,19 @@ display: inline-block; vertical-align: top; margin-top: -20px; + margin-right: -12px; + } + + .remainder2 { + margin-left: 12px; } </style> </head> <body> <div class="sample"> <div class="fake-initial-letter"></div> -<div class="remainder">bc</div><br> -def<br>ghi<br>jkl<br>mno<br> +<div class="remainder">bc<br>def</div> +<div class="remainder2">ghi<br>jkl<br>mno</div> </div> </body> </html> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-vrl-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-vrl-ref.html index 5fa68450681..38be19283b2 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-vrl-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial-vrl-ref.html @@ -20,8 +20,8 @@ background: lime; display: inline-block; height: 80px; - margin-left: 8px; - margin-right: 8px; + margin-left: 20px; + margin-right: -4px; width: 80px; } @@ -35,8 +35,8 @@ <body> <div class="sample"> <div class="fake-initial-letter"></div> -<div class="remainder">bc</div><br> -def<br>ghi<br>jkl<br>mno<br> +<div class="remainder">bc<br>def</div><br> +ghi<br>jkl<br>mno<br> </div> </body> </html> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial.html index 4b8e81453b7..ec2ec6bdc07 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raise-initial.html @@ -1,12 +1,14 @@ <!DOCTYPE html> -<html> -<head> <title>Tests initial letter raise initial</title> <link rel="author" title="Google LLC" href="https://www.google.com/"> <link rel="help" href="https://drafts.csswg.org/css-inline/#raise-initial"> <meta name="flags" content="ahem"> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" > <link rel="match" href="initial-letter-raise-initial-ref.html"> +<script src="resources/initial-letter-variants.js"></script> +<meta name="variant" content="?class="> +<meta name="variant" content="?class=no-ascent"> +<meta name="variant" content="?class=no-descent"> <style> .sample { border: solid 1px green; @@ -28,5 +30,3 @@ <div class="sample initial-letter"> Abc<br>def<br>ghi<br>jkl<br>mno<br> </div> -</body> -</html> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-raise-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-raise-ref.html index 7285ed8a822..0a134fcfe9e 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-raise-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-raise-ref.html @@ -27,7 +27,7 @@ <body> <div>This line before initial letter.</div> <div class="sample"> -<div class="fake-initial-letter"></div><br><br><br> +<div class="fake-initial-letter"></div><br><br> bc<br>def<br>ghi<br>jkl<br>mno<br> </div> </body> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken-ref.html index a68a760ac62..41031ff8782 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-raised-sunken-caps-sunken-ref.html @@ -27,7 +27,7 @@ <body> <div>This line before initial letter.</div> <div class="sample"> -<div class="fake-initial-letter"></div><br><br> +<div class="fake-initial-letter"></div><br> bc<br>def<br>ghi<br>jkl<br>mno<br> </div> </body> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-ref.html index 9b036a2be38..0b569177a87 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-ref.html @@ -6,6 +6,7 @@ <link rel="help" href="https://drafts.csswg.org/css-inline/#sunk-initial"> <meta name="flags" content="ahem"> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" > +<script src="resources/initial-letter-variants.js"></script> <style> .sample { border: solid 1px green; @@ -18,15 +19,25 @@ .fake-initial-letter { background: lime; float: left; - height: 80px; + --cap: 0.8; + --size: calc((24px * 2 + 20px * var(--cap)) / var(--cap)); + height: var(--size); + width: var(--size); margin-top: 2px; - width: 80px; + } + + .no-ascent .fake-initial-letter { + height: calc(var(--size) * (1 - var(--cap))); + margin-top: calc(var(--size) * var(--cap) + 2px); + } + .no-descent .fake-initial-letter { + height: calc(var(--size) * var(--cap)); } </style> </head> <body> <div class="sample"> -<div class="fake-initial-letter"></div><br><br> +<div class="fake-initial-letter"></div><br> bc<br>def<br>ghi<br>jkl<br>mno<br> </div> </body> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-rtl-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-rtl-ref.html index 3318c7e8bdd..cb26ab05f1e 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-rtl-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-rtl-ref.html @@ -27,7 +27,7 @@ </head> <body> <div class="sample"> -<div class="fake-initial-letter"></div><br><br> +<div class="fake-initial-letter"></div><br> bc<br>def<br>ghi<br>jkl<br>mno<br> </div> </body> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-vlr-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-vlr-ref.html index c3ccef28140..ebdb5a15694 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-vlr-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-vlr-ref.html @@ -20,14 +20,14 @@ background: lime; display: inline-block; height: 80px; - margin-left: 8px; + margin-left: -4px; margin-right: 8px; width: 80px; } .remainder { display: inline-block; - margin-left: 48px; + margin-left: 24px; margin-top: -20px; vertical-align: bottom; } @@ -40,8 +40,8 @@ <body> <div class="sample"> <div class="fake-initial-letter"></div> -<div class="remainder">bc<br>def<br></div><br> -<div class="remainder2">ghi<br>jkl<br>mno<br></div> +<div class="remainder">bc<br>def<br>ghi<br></div><br> +<div class="remainder2">jkl<br>mno<br></div> </div> </body> </html> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl-ref.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl-ref.html index a7db8b9ea09..18735029d0c 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl-ref.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial-vrl-ref.html @@ -21,13 +21,13 @@ display: inline-block; height: 80px; margin-left: 8px; - margin-right: 8px; + margin-right: -4px; width: 80px; } .remainder { display: inline-block; - margin-right: 48px; + margin-right: 24px; margin-top: -20px; vertical-align: top; } @@ -40,8 +40,8 @@ <body> <div class="sample"> <div class="fake-initial-letter"></div> -<div class="remainder">bc<br>def</div><br> -<div class="remainder2">ghi<br>jkl<br>mno<br></div> +<div class="remainder">bc<br>def<br>ghi</div><br> +<div class="remainder2">jkl<br>mno<br></div> </div> </body> </html> diff --git a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial.html b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial.html index 701469ca90b..3c00662d73c 100644 --- a/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial.html +++ b/tests/wpt/tests/css/css-inline/initial-letter/initial-letter-sunk-initial.html @@ -1,12 +1,14 @@ <!DOCTYPE html> -<html> -<head> <title>Tests initial letter sunken initial</title> <link rel="author" title="Google LLC" href="https://www.google.com/"> <link rel="help" href="https://drafts.csswg.org/css-inline/#sunk-initial"> <meta name="flags" content="ahem"> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" > <link rel="match" href="initial-letter-sunk-initial-ref.html"> +<script src="resources/initial-letter-variants.js"></script> +<meta name="variant" content="?class="> +<meta name="variant" content="?class=no-ascent"> +<meta name="variant" content="?class=no-descent"> <style> .sample { border: solid 1px green; diff --git a/tests/wpt/tests/css/css-inline/initial-letter/resources/initial-letter-variants.js b/tests/wpt/tests/css/css-inline/initial-letter/resources/initial-letter-variants.js new file mode 100644 index 00000000000..a3eceae8a92 --- /dev/null +++ b/tests/wpt/tests/css/css-inline/initial-letter/resources/initial-letter-variants.js @@ -0,0 +1,75 @@ +window.addEventListener('load', setupInitialLetterTestVariants); + +function setupInitialLetterTestVariants() { + const search = window.location.search; + if (!search) { + return; + } + const params = new URLSearchParams(search); + const classes = params.getAll('class') + .flatMap(value => value.split(',')) + .filter(value => value); + let text = params.getAll('text').join(''); + if (!text) { + if (classes.indexOf('no-descent') >= 0) { + text = '\xC9\xC9M\xC9'; + } else if (classes.indexOf('no-ascent') >= 0) { + text = 'ppMp'; + } + } + + for (const element of document.getElementsByClassName('sample')) { + element.classList.add(...classes); + if (text) { + replaceTextStart(element, text); + } + } +} + +// Replace the start of the text content of the node. +// Returns the number of characters replaced. +// +// For example, +// `replaceTextStart(element, 'XY')` to the content: +// ``` +// <div>ABC</div> +// ``` +// produces: +// ``` +// <div>XYC</div> +// ``` +// +// It has a limited support for separated text nodes and collapsible spaces. +function replaceTextStart(node, text) { + if (node.nodeType == Node.TEXT_NODE) { + const content = node.nodeValue; + const trimmed_content = content.trimStart(); + if (!trimmed_content) { + return 0; + } + const leading_spaces_len = content.length - trimmed_content.length; + const len = Math.min(text.length, trimmed_content.length); + node.nodeValue = content.substring(0, leading_spaces_len) + + text.substring(0, len) + + trimmed_content.substring(len); + return len; + } + + if (node.nodeType == Node.ELEMENT_NODE && node.className.indexOf('fake') >= 0) { + // If this is a fake initial letter, pretend that one character is replaced. + return 1; + } + + let total_replaced = 0; + for (const child of node.childNodes) { + const replaced = replaceTextStart(child, text); + if (replaced) { + total_replaced += replaced; + text = text.substring(replaced); + if (!text) { + return total_replaced; + } + } + } + return total_replaced; +} diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html index 46c10c859ea..56af569fd66 100644 --- a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html +++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-001.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<title>text-box-trim applies to the last line after line-clamp</title> +<title>text-box-trim applies to the last line before line-clamp</title> <link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-trim"> <link rel="help" href="https://drafts.csswg.org/css-inline-3/#text-box-edge"> <link ref="help" href="https://www.w3.org/TR/css-overflow-4/#line-clamp"> diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-001-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-001-ref.html new file mode 100644 index 00000000000..508d262c541 --- /dev/null +++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-001-ref.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.spacer { + background: lightgray; + block-size: 100px; +} +.target { + font: 50px/2 Ahem; + height: 275px; +} +</style> +<div class="spacer"></div> +<div class="target"> + A<br> + B<br> + C…</div> +<div class="spacer"></div> diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-001.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-001.html new file mode 100644 index 00000000000..05987167ff6 --- /dev/null +++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-001.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>text-box-trim applies to the last line before clamp when clamping by a height</title> +<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge"> +<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim"> +<link rel="match" href="text-box-trim-line-clamp-auto-001-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.spacer { + background: lightgray; + block-size: 100px; +} +.target { + font: 50px/2 Ahem; + text-box-trim: trim-end; + text-box-edge: text; + + line-clamp: auto; + max-height: 285px; +} +</style> +<div class="spacer"></div> +<div class="target"> + A<br> + B<br> + C<br> + D</div> +<div class="spacer"></div> diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-002-ref.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-002-ref.html new file mode 100644 index 00000000000..046d17c02df --- /dev/null +++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-002-ref.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.spacer { + background: lightgray; + block-size: 100px; +} +.target { + font-family: Ahem; + font-size: 50px; + line-height: 2; + height: 375px; +} +</style> +<div class="spacer"></div> +<div class="target"> + A<br> + B<br> + C<br> + D…</div> +<div class="spacer"></div> diff --git a/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-002.html b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-002.html new file mode 100644 index 00000000000..ddb5df15666 --- /dev/null +++ b/tests/wpt/tests/css/css-inline/text-box-trim/text-box-trim-line-clamp-auto-002.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>text-box-trim applies to the last line before clamp when clamping by a height</title> +<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-edge"> +<link rel="help" href="https://drafts.csswg.org/css-inline-3/#propdef-text-box-trim"> +<link rel="match" href="text-box-trim-line-clamp-auto-002-ref.html"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +.spacer { + background: lightgray; + block-size: 100px; +} +.target { + font: 50px/2 Ahem; + text-box-trim: trim-end; + text-box-edge: text; + + /* 385px will fit 4 lines if the last line has its end trimmed + * (4*100 - 25 = 375px), but it will fit 5 lines if all have their end trimmed + * (5*(100 - 25) = 375px). This tests that only the last line gets trimmed. */ + line-clamp: auto; + max-height: 385px; +} +</style> +<div class="spacer"></div> +<div class="target"> + A<br> + B<br> + C<br> + D<br> + E<br> + F</div> +<div class="spacer"></div> diff --git a/tests/wpt/tests/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html b/tests/wpt/tests/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html new file mode 100644 index 00000000000..346db822af2 --- /dev/null +++ b/tests/wpt/tests/css/css-masking/clip-path/clip-path-url-reference-empty-while-loading.tentative.html @@ -0,0 +1,17 @@ +<!doctype html> +<html class="reftest-wait"> +<title>clip-path url()s are represented as empty paths while loading</title> +<script src="/common/reftest-wait.js"></script> +<script src="/common/rendering-utils.js"></script> +<link rel="help" href=""> +<link rel="match" href="reference/green-100x100.html"> +<div style="width: 100px; height: 100px; background-color: green"> + <div id="target" style="width: 100px; height: 100px; background-color: red"></div> +</div> +<script> + onload = () => { + const div = document.getElementById('target'); + div.style.clipPath = `url("support/resources.svg?pipe=trickle(d10)#circleClip")`; + waitForAtLeastOneFrame().then(takeScreenshot); + }; +</script> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-011.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-011.tentative.html index 00076a5336e..50513516cc9 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-011.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-011.tentative.html @@ -4,7 +4,7 @@ <link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp"> <link rel="match" href="reference/line-clamp-auto-011-ref.html"> -<meta name="assert" content="When line-clamp: auto is used with max-height: 0, it should not show any lines and its content box's intrinsic size should be zero"> +<meta name="assert" content="When line-clamp: auto is used with max-height: 0, it should still show the first line"> <style> .clamp { line-clamp: auto; diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html index ee394b2a76d..ab741d3df4d 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html @@ -1,15 +1,16 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Overflow: abspos exactly at the clamp point is visible</title> +<title>CSS Overflow: abspos exactly at the clamp point is hidden</title> <link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp"> -<link rel="match" href="reference/line-clamp-auto-025-ref.html"> -<meta name="assert" content="The chosen clamp point with line-clamp: auto is the last one where the box size doesn't overflow. Since non-inline abspos have a clamp point after them, and they don't take up any space in the container, an abspos right at the boundary should be visible."> +<link rel="match" href="reference/webkit-line-clamp-005-ref.html"> +<meta name="assert" content="The chosen clamp point with line-clamp: auto is at the last line where the box size doesn't overflow. An immediately following box, even if it's an abspos that takes up no block size, should still be hidden."> <style> .clamp { line-clamp: auto; max-height: 4lh; font: 16px / 32px serif; + padding: 0 4px; background-color: yellow; } .inner { diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html deleted file mode 100644 index f616cbed028..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-026.tentative.html +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Overflow: abspos exactly at the clamp point is visible</title> -<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com"> -<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp"> -<link rel="match" href="reference/line-clamp-auto-026-ref.html"> -<meta name="assert" content="The chosen clamp point with line-clamp: auto is the last one where the box size doesn't overflow. Since non-inline abspos have a clamp point after them, and they don't take up any space in the container, an abspos right at the boundary should be visible. If there's bottom padding in a container box, that counts as effectively shrinking the boundary."> -<style> -.clamp { - line-clamp: auto; - max-height: calc(4lh + 2 * 2px); - font: 16px / 32px serif; - background-color: yellow; -} -.padding { - padding: 2px; -} -.inner { - white-space: pre-wrap; -} -.abspos { - position: absolute; - width: 100px; - height: 100px; - background-color: skyblue; -} -</style> - -<div class="clamp"> -<div class="padding"> -<div class="inner">Line 1 -Line 2 -Line 3 -Line 4 -</div> -<div class="abspos"></div> -<div class="inner">Line 5 -Line 6</div> -</div> -</div> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html deleted file mode 100644 index 17c6981ae33..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-032.tentative.html +++ /dev/null @@ -1,50 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Overflow: `line-clamp: auto` margin collapsing accounts for self-collapsing boxes</title> -<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com"> -<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp"> -<link rel="match" href="reference/line-clamp-auto-032-ref.html"> -<meta name="assert" content="With `line-clamp: auto`, if a clamp point might fall inside a box, its margins are accounted for correctly. This is the case even for self-collapsing boxes before the clamp point."> -<style> -.clamp { - line-clamp: auto; - max-height: calc(4lh + 2 * 5px); - font: 16px / 32px serif; - background-color: orange; -} -.inner { - white-space: pre; - margin: 5px; - background-color: yellow; -} -.collapse-through { - margin: 5px; -} -.abspos { - position: absolute; - right: 0; - height: 100px; - width: 100px; - background-color: skyblue; -} -</style> - -<!-- - The bottom margins of both the first `.inner` and of `.collapse-through` end - at the clamp boundary, since the bottom margin of `.inner` collapses through - `.collapse-through`. This also puts the static position of `.abspos` at the - clamp boundary, which means it will be visible. ---> - -<div class="clamp"> -<div class="inner">Line 1 -Line 2 -Line 3 -Line 4</div> -<div class="collapse-through"></div> -<div class="abspos"></div> -<div class="inner">Line 5 -Line 6 -Line 7 -Line 8</div> -</div> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-034.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-034.tentative.html index ebb676dfd8e..96fe675d1b1 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-034.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-034.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Overflow: `line-clamp: auto` clamp between IFCs</title> +<title>CSS Overflow: `line-clamp: auto` clamp height after IFC</title> <link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp"> -<link rel="match" href="reference/line-clamp-auto-034-ref.html"> -<meta name="assert" content="With `line-clamp: auto`, there can be a clamp point between two IFCs. In that case, no line will have an ellipsis."> +<link rel="match" href="reference/webkit-line-clamp-005-ref.html"> +<meta name="assert" content="With `line-clamp: auto`, if the clamp height is after an IFC, the clamp point will be set after the last line before that."> <style> .clamp { line-clamp: auto; @@ -28,6 +28,5 @@ Line 2 Line 3 Line 4 -<div class="ifc">Line 5 -Line 6</div><div class="ifc red">Line 7 -Line 8</div>Line 9</div> +<div class="ifc red">Line 5 +Line 6</div>Line 7</div> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-037.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-037.tentative.html index 4a2fc3c8206..37b36666024 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-037.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-037.tentative.html @@ -3,7 +3,7 @@ <title>CSS Overflow: `line-clamp: auto` with non-zero max-height that doesn't fit any content</title> <link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp"> -<link rel="match" href="reference/line-clamp-auto-011-ref.html"> +<link rel="match" href="reference/line-clamp-auto-037-ref.html"> <meta name="assert" content="When line-clamp: auto is used with a max-height that isn't enough for any contained boxes or line boxes, then it should not show any content and its content box's intrinsic size should be zero"> <style> .clamp { diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-011-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-011-ref.html index 5f7120ee39a..27a2e7b2bc0 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-011-ref.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-011-ref.html @@ -3,10 +3,13 @@ <title>CSS Reference</title> <style> .clamp { + height: 0; + font: 16px / 32px serif; + white-space: pre; background-color: yellow; border: 1px solid black; padding: 4px; } </style> -<div class="clamp"></div> +<div class="clamp">Line 1…</div> <p>Following content.</p> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-025-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-025-ref.html deleted file mode 100644 index a76468d6d54..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-025-ref.html +++ /dev/null @@ -1,27 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Reference</title> -<style> -.clamp { - font: 16px / 32px serif; - background-color: yellow; -} -.inner { - white-space: pre-wrap; -} -.abspos { - position: absolute; - width: 100px; - height: 100px; - background-color: skyblue; -} -</style> - -<div class="clamp"> -<div class="inner">Line 1 -Line 2 -Line 3 -Line 4… -</div> -<div class="abspos"></div> -</div> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-026-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-026-ref.html deleted file mode 100644 index 44d503a0522..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-026-ref.html +++ /dev/null @@ -1,32 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Reference</title> -<style> -.clamp { - font: 16px / 32px serif; - background-color: yellow; -} -.padding { - padding: 2px; -} -.inner { - white-space: pre-wrap; -} -.abspos { - position: absolute; - width: 100px; - height: 100px; - background-color: skyblue; -} -</style> - -<div class="clamp"> -<div class="padding"> -<div class="inner">Line 1 -Line 2 -Line 3 -Line 4… -</div> -<div class="abspos"></div> -</div> -</div> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-032-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-032-ref.html deleted file mode 100644 index 4768c77ddab..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-032-ref.html +++ /dev/null @@ -1,34 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Reference</title> -<style> -.clamp { - display: flow-root; - font: 16px / 32px serif; - background-color: orange; -} -.inner { - white-space: pre; - margin: 5px; - background-color: yellow; -} -.collapse-through { - margin: 5px; -} -.abspos { - position: absolute; - right: 0; - height: 100px; - width: 100px; - background-color: skyblue; -} -</style> - -<div class="clamp"> -<div class="inner">Line 1 -Line 2 -Line 3 -Line 4</div> -<div class="collapse-through"></div> -<div class="abspos"></div> -</div> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-034-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-034-ref.html deleted file mode 100644 index 8fae3b278c1..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-034-ref.html +++ /dev/null @@ -1,23 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>CSS Reference</title> -<style> -.clamp { - display: flow-root; - font: 16px / 32px serif; - white-space: pre; - padding: 0 4px; - background-color: yellow; -} -.ifc { - display: flow-root; - background-color: orange; -} -</style> - -<div class="clamp">Line 1 -Line 2 -Line 3 -Line 4 -<div class="ifc">Line 5 -Line 6</div></div> diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-037-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-037-ref.html new file mode 100644 index 00000000000..eeb9543554d --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-auto-037-ref.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Reference</title> +<style> +.clamp { + height: 0.5lh; + font: 16px / 32px serif; + white-space: pre; + background-color: yellow; + border: 1px solid black; + padding: 4px; +} +</style> +<div class="clamp">Line 1…</div> +<p>Following content.</p> diff --git a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html index d67ae828818..90bfc526227 100644 --- a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html +++ b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-inheritance.html @@ -18,6 +18,14 @@ color: currentcolor; background-color: currentcolor; } + #target::search-text { + color: currentcolor; + background-color: currentcolor; + } + #target::search-text:current { + color: red; + background-color: red; + } #target::spelling-error { color: currentcolor; background-color: currentcolor; @@ -33,7 +41,7 @@ </style> <div id="target"><span id="child"></span></div> <script> - for (const pseudo of ["::selection", "::target-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { + for (const pseudo of ["::selection", "::target-text", "::search-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { test(() => { let style = getComputedStyle(child, pseudo); assert_equals(style.backgroundColor, "rgb(0, 255, 0)", "Background color is lime."); diff --git a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-visited.html b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-visited.html index 207cb7b7dd1..21f3b38bef0 100644 --- a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-visited.html +++ b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed-visited.html @@ -18,6 +18,12 @@ a:visited::target-text { color: currentcolor; } + a:visited::search-text { + color: currentcolor; + } + a:visited::search-text:current { + color: red; + } a:visited::spelling-error { color: currentcolor; } @@ -31,7 +37,7 @@ <a id="target1" class="target" href=""></a> <a id="target2" class="target" href="unvisited"></a> <script> - for (const pseudo of ["::selection", "::target-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { + for (const pseudo of ["::selection", "::target-text", "::search-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { for (const target of [target1, target2]) { test(() => { let style = getComputedStyle(target, pseudo); diff --git a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html index 97c31809dfc..c9c493bd721 100644 --- a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html +++ b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-currentcolor-computed.html @@ -38,6 +38,14 @@ color: currentcolor; background-color: currentcolor; } + .target::search-text { + color: currentcolor; + background-color: currentcolor; + } + .target::search-text:current { + color: red; + background-color: red; + } .target::spelling-error { color: currentcolor; background-color: currentcolor; @@ -56,7 +64,7 @@ <span id="target2" class="target"></span> </div> <script> - for (const pseudo of ["::selection", "::target-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { + for (const pseudo of ["::selection", "::target-text", "::search-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { for (const target of [target1, target2]) { test(() => { let style = getComputedStyle(target, pseudo); diff --git a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-001.tentative.html b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-search-text.tentative.html index 752af0b29f3..87c3235ed00 100644 --- a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-001.tentative.html +++ b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-computed-search-text.tentative.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Pseudo-Elements Test: highlight selectors getComputedStyle</title> +<title>CSS Pseudo-Elements Test: ::search-text getComputedStyle</title> <link rel="author" name="Delan Azabani" href="mailto:dazabani@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-pseudo/#highlight-selectors"> <script src="/resources/testharness.js"></script> diff --git a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html index 84c4045a54c..4c89d0d0bb4 100644 --- a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html +++ b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-inheritance-computed-001.html @@ -14,6 +14,14 @@ background-color: green; color: lime; } + .target::search-text { + background-color: green; + color: lime; + } + .target::search-text:current { + background-color: red; + color: red; + } .target::spelling-error { background-color: green; color: lime; @@ -30,7 +38,7 @@ <div class="target"><span id="child1"></span></div> <div class="target" style="display: contents;"><span id="child2"></span></div> <script> - for (const pseudo of ["::selection", "::target-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { + for (const pseudo of ["::selection", "::target-text", "::search-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { for (const child of [child1, child2]) { test(() => { let style = getComputedStyle(child, pseudo); diff --git a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html index a2b18effccd..074ef932b8e 100644 --- a/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html +++ b/tests/wpt/tests/css/css-pseudo/highlight-cascade/highlight-pseudos-visited-computed-001.html @@ -11,6 +11,12 @@ a::target-text { color: lime; } + a::search-text { + color: lime; + } + a::search-text:current { + color: red; + } a::spelling-error { color: lime; } @@ -26,6 +32,12 @@ a:visited::target-text { color: yellow; } + a:visited::search-text { + color: yellow; + } + a:visited::search-text:current { + color: red; + } a:visited::spelling-error { color: yellow; } @@ -39,7 +51,7 @@ <a id="target1" class="target" href=""></a> <a id="target2" class="target" href="unvisited"></a> <script> - for (const pseudo of ["::selection", "::target-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { + for (const pseudo of ["::selection", "::target-text", "::search-text", "::spelling-error", "::grammar-error", "::highlight(foo)"]) { for (const target of [target1, target2]) { test(() => { let style = getComputedStyle(target, pseudo); diff --git a/tests/wpt/tests/css/css-pseudo/parsing/highlight-pseudos-001.tentative.html b/tests/wpt/tests/css/css-pseudo/parsing/highlight-pseudos-search-text.tentative.html index 312135ccf4d..c870125bbc8 100644 --- a/tests/wpt/tests/css/css-pseudo/parsing/highlight-pseudos-001.tentative.html +++ b/tests/wpt/tests/css/css-pseudo/parsing/highlight-pseudos-search-text.tentative.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Pseudo-Elements Test: highlight selectors parsing</title> +<title>CSS Pseudo-Elements Test: ::search-text selector parsing</title> <link rel="help" href="https://drafts.csswg.org/css-pseudo/#highlight-selectors"> <link rel="author" name="Delan Azabani" href="mailto:dazabani@igalia.com"> <script src="/resources/testharness.js"></script> diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-001.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-001.tentative.html index 9a956328763..e750d97a180 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-001.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-001.tentative.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>:has-slotted(*)</title> +<title>:has-slotted</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> <p>Test passes if there is a filled green square.</p> @@ -13,11 +13,10 @@ height: 100px; background-color: red; } - :has-slotted(*) { + :has-slotted { background-color: green; } </style> <slot></slot> </template> - <div></div> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-002.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-002.tentative.html index 40b4edb3841..729f105719b 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-002.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-002.tentative.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>:has-slotted(...) negative test: no children or white space</title> +<title>:has-slotted negative test: no children or white space</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> <p>Test passes if there is a filled green square.</p> @@ -12,7 +12,6 @@ height: 100px; background-color: green; } - :has-slotted(*), :has-slotted { background-color: red; } diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-003.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-003.tentative.html index 9565b1594c3..7578413ff39 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-003.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-003.tentative.html @@ -1,22 +1,23 @@ <!doctype html> <meta charset="utf-8"> -<title>:has-slotted(...) negative test: no children, but whitespace present</title> +<title>:has-slotted</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> <p>Test passes if there is a filled green square.</p> <div id="host"> <template shadowrootmode="open"> - <style> + <style> slot { - display: block; - width: 100px; - height: 100px; - background-color: green; + display: block; + width: 100px; + height: 100px; + background-color: red; } - :has-slotted(*) { - background-color: red; + :has-slotted { + background-color: green; } - </style> - <slot></slot> + </style> + <slot></slot> </template> + <div></div> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-changing-001.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-changing-001.tentative.html new file mode 100644 index 00000000000..5c6cce72bb7 --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-changing-001.tentative.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML> +<html> + +<head> + <meta charset="utf-8"> + <title>Changing content targetting :has-slotted through a single shadow root</title> + <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="/resources/testdriver-actions.js"></script> +</head> + +<body> + + <div id="test"><template shadowrootmode="open"> + <slot></slot> + <p id="target">This text will be styled.</p> + <style> + p { + color: rgb(0 255 0); + } + slot:not(:has-slotted) + p { + color: rgb(0 0 255); + } + </style> + </template></div> + + <script> + const blue = 'rgb(0, 0, 255)'; + const green = 'rgb(0, 255, 0)'; + test(function (t) { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + t.add_cleanup(() => { test.innerHTML = '' }); + let styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + }, "empty node is blue"); + + test(function (t) { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + test.innerHTML = ' '; + t.add_cleanup(() => { test.innerHTML = '' }); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + test.innerHTML = ''; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + }, "setting innerHTML to whitespace invalidates and becomes green, then empty string becomes blue"); + + test(function (t) { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + test.replaceChildren(document.createElement('div')); + assert_equals(styles.getPropertyValue('color'), green); + test.replaceChildren(); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + }, "calling replaceChildren invalidates and becomes green, emptying with replaceChildren becomes blue"); + + test(function (t) { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + const div = document.createElement('div'); + test.innerHTML = ''; + test.append(div); + t.add_cleanup(() => { test.innerHTML = '' }); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + }, "calling append invalidates and becomes green"); + + test(function (t) { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + const node = document.createTextNode(' '); + test.replaceChildren(node); + t.add_cleanup(() => { test.innerHTML = '' }); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + test.replaceChildren(); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + }, "calling replaceChildren(textnode) invalidates and becomes green"); + </script> +</body> + +</html> diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-changing-002.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-changing-002.tentative.html new file mode 100644 index 00000000000..98c15f30c8f --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-changing-002.tentative.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML> +<html> + +<head> + <meta charset="utf-8"> + <title>Changing content targetting :has-slotted through multiple shadow roots</title> + <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="/resources/testdriver-actions.js"></script> +</head> + +<body> + + <my-element id="test">Test</my-element> + <template id="myTemplate"> + <slot></slot> + <p id="target">This text will be styled.</p> + <style> + p { + color: rgb(0 255 0); + } + slot:not(:has-slotted) + p { + color: rgb(0 0 255); + } + </style> + </template> + + <script> + customElements.define('my-element', class extends HTMLElement { + constructor() { + super(); + this.attachShadow({ + mode: 'open', + slotAssignment: 'manual', + }); + this.shadowRoot.append(myTemplate.content.cloneNode(true)); + } + + get slot() { + return this.shadowRoot.querySelector('slot'); + } + }); + + const blue = 'rgb(0, 0, 255)'; + const green = 'rgb(0, 255, 0)'; + test(function (t) { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + t.add_cleanup(() => { test.innerHTML = 'Test' }); + let styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + }, "empty node is blue"); + + test(function (t) { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + t.add_cleanup(() => { test.innerHTML = 'Test' }); + test.slot.assign(test.childNodes[0]) + styles = getComputedStyle(target); + assert_equals(test.slot.assignedNodes().length, 1); + assert_equals(styles.getPropertyValue('color'), green); + test.slot.assign() + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + }, "manually assigning a text node is green, emptying assignment is blue"); + + test(function (t) { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + t.add_cleanup(() => { test.innerHTML = 'Test' }); + + test.innerHTML = '<div></div>'; + assert_equals(styles.getPropertyValue('color'), blue); + + test.slot.assign(...test.children) + styles = getComputedStyle(target); + assert_equals(test.slot.assignedNodes().length, 1); + assert_equals(styles.getPropertyValue('color'), green); + test.slot.assign() + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + }, "manually assigning a Element is green, emptying assignment is blue"); + </script> +</body> + +</html> diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-001.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-flattened-001.tentative.html index f14bdbc776d..0235f99e21f 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-001.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-flattened-001.tentative.html @@ -1,28 +1,24 @@ <!doctype html> <meta charset="utf-8"> -<title>:has-slotted(*) flattened through multiple slots</title> +<title>:has-slotted flattened through multiple slots</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> <p>Test passes if there is a filled green square.</p> <div id="ancestor"> <template shadowrootmode="open"> - <div id="host"> - <template shadowrootmode="open"> - <style> - slot { - display: block; - width: 100px; - height: 100px; - background-color: red; - } - :has-slotted(*) { - background-color: green; - } - </style> - <slot></slot> - </template> + <div id="host"><template shadowrootmode="open"> + <style> + slot { + display: block; + width: 100px; + height: 100px; + background-color: red; + } + :has-slotted { + background-color: green; + } + </style> <slot></slot> - </div> + </template><slot></slot></div> </template> - <div></div> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-002.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-flattened-002.tentative.html index f72ff1de5aa..f37b6217789 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-002.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-flattened-002.tentative.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>:has-slotted(...) negative test: no children or white space</title> +<title>:has-slotted negative test: no children or white space</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> <p>Test passes if there is a filled green square.</p> @@ -13,11 +13,10 @@ height: 100px; background-color: green; } - :has-slotted(*), :has-slotted { background-color: red; } </style> <slot></slot> - </template><slot></slot></div> -</template></div>
\ No newline at end of file + </template></div> +</template></div> diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-003.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-flattened-003.tentative.html index bca81b971de..5f007fbd1b0 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-003.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-flattened-003.tentative.html @@ -1,27 +1,25 @@ <!doctype html> <meta charset="utf-8"> -<title>:has-slotted(...) flattened through multiple slots, negative test: no children, but whitespace present</title> +<title>:has-slotted flattened through multiple slots</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> <p>Test passes if there is a filled green square.</p> <div id="ancestor"> <template shadowrootmode="open"> - <div id="host"> - <template shadowrootmode="open"> - <style> - slot { - display: block; - width: 100px; - height: 100px; - background-color: green; - } - :has-slotted(*) { - background-color: red; - } - </style> - <slot></slot> - </template> - </div> - <slot></slot> + <div id="host"><template shadowrootmode="open"> + <style> + slot { + display: block; + width: 100px; + height: 100px; + background-color: red; + } + :has-slotted { + background-color: green; + } + </style> + <slot></slot> + </template><slot></slot></div> </template> + <div></div> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-007.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-flattened-007.tentative.html deleted file mode 100644 index 0235f99e21f..00000000000 --- a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-007.tentative.html +++ /dev/null @@ -1,24 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>:has-slotted flattened through multiple slots</title> -<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> -<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> -<p>Test passes if there is a filled green square.</p> -<div id="ancestor"> - <template shadowrootmode="open"> - <div id="host"><template shadowrootmode="open"> - <style> - slot { - display: block; - width: 100px; - height: 100px; - background-color: red; - } - :has-slotted { - background-color: green; - } - </style> - <slot></slot> - </template><slot></slot></div> - </template> -</div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-007.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-001.tentative.html index e750d97a180..9a956328763 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-007.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-001.tentative.html @@ -1,6 +1,6 @@ <!doctype html> <meta charset="utf-8"> -<title>:has-slotted</title> +<title>:has-slotted(*)</title> <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> <link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> <p>Test passes if there is a filled green square.</p> @@ -13,10 +13,11 @@ height: 100px; background-color: red; } - :has-slotted { + :has-slotted(*) { background-color: green; } </style> <slot></slot> </template> + <div></div> </div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-002.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-002.tentative.html new file mode 100644 index 00000000000..a67f788f785 --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-002.tentative.html @@ -0,0 +1,20 @@ +<!doctype html> +<meta charset="utf-8"> +<title>:has-slotted(...) negative test: no children or white space</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div id="host"><template shadowrootmode="open"> + <style> + slot { + display: block; + width: 100px; + height: 100px; + background-color: green; + } + :has-slotted(*) { + background-color: red; + } + </style> + <slot></slot> +</template></div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-003.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-003.tentative.html new file mode 100644 index 00000000000..9565b1594c3 --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-003.tentative.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<title>:has-slotted(...) negative test: no children, but whitespace present</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div id="host"> + <template shadowrootmode="open"> + <style> + slot { + display: block; + width: 100px; + height: 100px; + background-color: green; + } + :has-slotted(*) { + background-color: red; + } + </style> + <slot></slot> + </template> +</div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-004.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-004.tentative.html index 2d980e10051..2d980e10051 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-004.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-004.tentative.html diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-005.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-005.tentative.html index 3de7c16f287..3de7c16f287 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-005.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-005.tentative.html diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-006.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-006.tentative.html index aea5c6b2a14..aea5c6b2a14 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-006.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-006.tentative.html diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-007.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-007.tentative.html new file mode 100644 index 00000000000..d7e01505630 --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-007.tentative.html @@ -0,0 +1,25 @@ +<!doctype html> +<meta charset="utf-8"> +<title>:has-slotted(el + el)</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div id="host"> + <template shadowrootmode="open"> + <style> + [name] { + display: block; + width: 100px; + height: 100px; + background-color: red; + } + :has-slotted(div + div) { + background-color: green; + } + </style> + <slot></slot> + <slot name="after"></slot> + </template> + <div></div> + <div slot="after"></div> +</div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-001.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-001.tentative.html new file mode 100644 index 00000000000..209a47298e3 --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-001.tentative.html @@ -0,0 +1,63 @@ +<!DOCTYPE HTML> +<html> + +<head> + <meta charset="utf-8"> + <title>Changing content targetting :has-slotted(...) and :has-slotted through a single shadow root</title> + <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="/resources/testdriver-actions.js"></script> +</head> + +<body> + + <div id="test"><template shadowrootmode="open"> + <slot></slot> + <p id="target">This text will be styled.</p> + <style> + p { + color: rgb(0 255 0); + } + slot:not(:has-slotted) + p { + color: rgb(0 0 255); + } + slot:not(:has-slotted(div)) + p { + color: rgb(255 0 255); + } + </style> + </template></div> + + <script> + const blue = 'rgb(0, 0, 255)'; + const green = 'rgb(0, 255, 0)'; + const fuchsia = 'rgb(255, 0, 255)'; + test(function () { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + let styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + test.innerHTML = ' '; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + test.replaceChildren();; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + const div = document.createElement('div'); + test.append(div); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), fuchsia); + const node = document.createTextNode(' '); + test.replaceChildren(node); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + test.innerHTML = ''; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + }, name); + </script> +</body> + +</html> diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-002.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-002.tentative.html new file mode 100644 index 00000000000..36fafcb1dcc --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-002.tentative.html @@ -0,0 +1,65 @@ +<!DOCTYPE HTML> +<html> + +<head> + <meta charset="utf-8"> + <title>Changing content targetting :has-slotted(...) through a single shadow root</title> + <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="/resources/testdriver-actions.js"></script> +</head> + +<body> + + <div id="test"> + <template shadowrootmode="open"> + <slot></slot> + <p id="target">This text will be styled.</p> + <style> + p { + color: rgb(0 255 0); + } + slot:not(:has-slotted(span)) + p { + color: rgb(0 0 255); + } + slot:not(:has-slotted(div)) + p { + color: rgb(255 0 255); + } + </style> + </template> + </div> + + <script> + const blue = 'rgb(0, 0, 255)'; + const green = 'rgb(0, 255, 0)'; + const fuchsia = 'rgb(255, 0, 255)'; + test(function () { + const test = document.getElementById('test'); + const target = test.shadowRoot.getElementById('target'); + let styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + test.innerHTML = '<span></span>'; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + test.textContent = ''; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + const div = document.createElement('div'); + test.replaceChild(div, test.firstElementChild); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), fuchsia); + const span = document.createElement('span'); + test.replaceChildren(span); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + test.replaceChildren(); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + }, name); + </script> +</body> + +</html> diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-003.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-003.tentative.html new file mode 100644 index 00000000000..9914e452088 --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-003.tentative.html @@ -0,0 +1,64 @@ +<!DOCTYPE HTML> +<html> + +<head> + <meta charset="utf-8"> + <title>Changing content targetting :has-slotted(...) and :has-slotted through multiple shadow roots</title> + <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="/resources/testdriver-actions.js"></script> +</head> + +<body> + + <div id="test"><template shadowrootmode="open"><div id="inner"><template shadowrootmode="open"> + <slot></slot> + <p id="target">This text will be styled.</p> + <style> + p { + color: rgb(0 255 0); + } + slot:not(:has-slotted) + p { + color: rgb(0 0 255); + } + slot:not(:has-slotted(div)) + p { + color: rgb(255 0 255); + } + </style> + </template><slot></slot></div></template></div> + + + <script> + const blue = 'rgb(0, 0, 255)'; + const green = 'rgb(0, 255, 0)'; + const fuchsia = 'rgb(255, 0, 255)'; + test(function () { + const test = document.getElementById('test'); + const inner = test.shadowRoot.getElementById('inner'); + const target = inner.shadowRoot.getElementById('target'); + let styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + const node = document.createTextNode(' '); + test.replaceChildren(node); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + node.remove(); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + test.innerHTML = '<div></div>'; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), fuchsia); + test.appendChild(node); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + test.textContent = ''; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + }, name); + </script> +</body> + +</html> diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-004.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-004.tentative.html new file mode 100644 index 00000000000..669162050aa --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-changing-004.tentative.html @@ -0,0 +1,71 @@ +<!DOCTYPE HTML> +<html> + +<head> + <meta charset="utf-8"> + <title>Changing content targetting :has-slotted(...) through a single shadow root</title> + <link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="/resources/testdriver-actions.js"></script> +</head> + +<body> + + + <div id="test"> + <template shadowrootmode="open"> + <div id="inner"> + <template shadowrootmode="open"> + <slot></slot> + <p id="target">This text will be styled.</p> + <style> + p { + color: rgb(0 255 0); + } + slot:not(:has-slotted(span)) + p { + color: rgb(0 0 255); + } + slot:not(:has-slotted(div)) + p { + color: rgb(255 0 255); + } + </style> + </template> + </div> + </template> + </div> + + + <script> + const blue = 'rgb(0, 0, 255)'; + const green = 'rgb(0, 255, 0)'; + const fuchsia = 'rgb(255, 0, 255)'; + test(function () { + const test = document.getElementById('test'); + const inner = test.shadowRoot.getElementById('inner'); + const target = inner.shadowRoot.getElementById('target'); + let styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + const span = document.createElement('span'); + test.append(span); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + test.removeChild(span); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + test.innerHTML = '<div></div>'; + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), fuchsia); + test.replaceChildren(span); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), blue); + span.remove(); + styles = getComputedStyle(target); + assert_equals(styles.getPropertyValue('color'), green); + }, name); + </script> +</body> + +</html> diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-001.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-001.tentative.html new file mode 100644 index 00000000000..f14bdbc776d --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-001.tentative.html @@ -0,0 +1,28 @@ +<!doctype html> +<meta charset="utf-8"> +<title>:has-slotted(*) flattened through multiple slots</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div id="ancestor"> + <template shadowrootmode="open"> + <div id="host"> + <template shadowrootmode="open"> + <style> + slot { + display: block; + width: 100px; + height: 100px; + background-color: red; + } + :has-slotted(*) { + background-color: green; + } + </style> + <slot></slot> + </template> + <slot></slot> + </div> + </template> + <div></div> +</div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-002.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-002.tentative.html new file mode 100644 index 00000000000..ff13ac70963 --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-002.tentative.html @@ -0,0 +1,22 @@ +<!doctype html> +<meta charset="utf-8"> +<title>:has-slotted(...) negative test: no children or white space</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div id="ancestor"><template shadowrootmode="open"> + <div id="host"><template shadowrootmode="open"> + <style> + slot { + display: block; + width: 100px; + height: 100px; + background-color: green; + } + :has-slotted(*) { + background-color: red; + } + </style> + <slot></slot> + </template><slot></slot></div> +</template></div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-003.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-003.tentative.html new file mode 100644 index 00000000000..bca81b971de --- /dev/null +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-003.tentative.html @@ -0,0 +1,27 @@ +<!doctype html> +<meta charset="utf-8"> +<title>:has-slotted(...) flattened through multiple slots, negative test: no children, but whitespace present</title> +<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586"> +<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div id="ancestor"> + <template shadowrootmode="open"> + <div id="host"> + <template shadowrootmode="open"> + <style> + slot { + display: block; + width: 100px; + height: 100px; + background-color: green; + } + :has-slotted(*) { + background-color: red; + } + </style> + <slot></slot> + </template> + </div> + <slot></slot> + </template> +</div>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-004.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-004.tentative.html index 7b299d25baa..7b299d25baa 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-004.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-004.tentative.html diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-005.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-005.tentative.html index 7fccf604d8b..7fccf604d8b 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-005.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-005.tentative.html diff --git a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-006.tentative.html b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-006.tentative.html index cfe415c7948..fd3dda69bc8 100644 --- a/tests/wpt/tests/css/css-scoping/has-slotted-flattened-006.tentative.html +++ b/tests/wpt/tests/css/css-scoping/has-slotted-functional-flattened-006.tentative.html @@ -10,13 +10,13 @@ <template shadowrootmode="open"> <style> [name] { - display: block; - width: 100px; - height: 100px; - background-color: red; + display: block; + width: 100px; + height: 100px; + background-color: red; } :has-slotted(div) + :has-slotted(div) { - background-color: green; + background-color: green; } </style> <slot></slot> diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-aligns-with-snap-align.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-aligns-with-snap-align.tentative.html index 6b133dea7d7..3203e1e1a61 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-aligns-with-snap-align.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-aligns-with-snap-align.tentative.html @@ -26,7 +26,7 @@ width: 100px; height: 100px; background-color: pink; - scroll-start-target: auto auto; + scroll-start-target: auto; position: absolute; top: 400px; left: 400px; diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-display-toggled.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-display-toggled.tentative.html index 527d7502678..a0224a568e5 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-display-toggled.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-display-toggled.tentative.html @@ -33,7 +33,7 @@ width: 100px; height: 100px; background-color: pink; - scroll-start-target: auto auto; + scroll-start-target: auto; } </style> <div id="outer-container"> diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-nested-container.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-nested-container.tentative.html index 4574421c8cd..e3a1df6e6a1 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-nested-container.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-nested-container.tentative.html @@ -14,6 +14,16 @@ </head> <body> <style> + /** + large-space divs are added to simplify scrolling calculations + (i.e. expected offsets are just distances from scroller border top to + scrollee border top). + */ + .large-space { + position: absolute; + height: 500vh; + width: 500vw; + } #space-filler { width: 500px; height: 500px; @@ -23,13 +33,14 @@ width: 400px; height: 400px; overflow: scroll; + position: relative; background-color: yellow; } #inner-container { top: 20px; left: 20px; - width: 300px; - height: 300px; + width: 400px; + height: 400px; overflow: visible; position: relative; background-color: blue; @@ -38,12 +49,14 @@ width: 100px; height: 100px; background-color: pink; - scroll-start-target: auto auto; + scroll-start-target: auto; } </style> <div id="outer-container"> + <div class="large-space" id="large_space_outer"></div> <div id="space-filler"></div> <div id="inner-container"> + <div class="large-space" id="large_space_inner"></div> <div id="space-filler"></div> <div id="target"> </div> @@ -61,110 +74,108 @@ const inner_content_height = target_height + space_filler_height; const inner_container_height = inner_container.getBoundingClientRect().height; + let outer_to_target_scrolltop = + /*outer space-filler*/space_filler_height + + /* 20px top */ inner_scroller_top_offset + + /*inner space filler*/ space_filler_height; + + let outer_to_inner_scrolltop = + /* outer space-filler*/ space_filler_height + + /* 20px top */ inner_scroller_top_offset; + + let inner_to_target_scrolltop = + /*inner space filler*/ space_filler_height; + async function resetDisplay() { - return new Promise((resolve) => { - if (getComputedStyle(outer_container).display == "block" && - getComputedStyle(inner_container).display == "block" && - getComputedStyle(target).display == "block") { - resolve(); - } else { - outer_container.style.display = "block"; - inner_container.style.display = "block"; - target.style.display = "block"; - requestAnimationFrame(async () => { - await resetDisplay(); - resolve(); - }); - } - }); + outer_container.style.display = "block"; + inner_container.style.display = "block"; + target.style.display = "block"; + return waitForAnimationFrames(2); } - let initial_expected_scroll_top = space_filler_height + - inner_scroller_top_offset + inner_content_height - - outer_container.clientHeight; promise_test(async (t) => { await resetDisplay(); - assert_equals(outer_container.scrollTop, initial_expected_scroll_top, + assert_equals(outer_container.scrollTop, outer_to_target_scrolltop, "outer-container is scrolled to scroll-start-target"); + // Remove large_space_outer so we can observe outer-container adjust to + // its new content height. + large_space_outer.style.display = "none"; inner_container.style.display = "none"; await waitForAnimationFrames(2); assert_equals(outer_container.scrollTop, space_filler_height - outer_container.clientHeight, - "outer-container has no content to scroll"); + "outer-container has only the outer space filler to scroll"); + large_space_outer.style.display = "initial"; inner_container.style.display = "block"; await waitForAnimationFrames(2); - assert_equals(outer_container.scrollTop, initial_expected_scroll_top, + assert_equals(outer_container.scrollTop, outer_to_target_scrolltop, "outer-scroller is updated as scroll-start-target reappears"); }, "display:none scroll-start-target becomes display:block"); promise_test(async (t) => { await waitForCompositorCommit(); await resetDisplay(); - assert_equals(outer_container.scrollTop, initial_expected_scroll_top, + assert_equals(outer_container.scrollTop, outer_to_target_scrolltop, "outer-container is scrolled to scroll-start-target"); + // Remove large_space_outer so we can observe outer-container adjust to + // its new content height. + large_space_outer.style.display = "none"; inner_container.style.overflow = "scroll"; await waitForAnimationFrames(2); // inner-container has become a scroller and should be scrolled to // scroll-start-target. assert_equals(inner_container.scrollTop, - inner_content_height - inner_container.clientHeight, - "inner-container is fully scrolled to target"); + inner_to_target_scrolltop, + "inner-container is fully scrolled to target"); // outer-container should be adjusted to its new max scroll offset. - const scrollbar_width = outer_container.offsetHeight - - outer_container.clientHeight; assert_equals(outer_container.scrollTop, space_filler_height + inner_scroller_top_offset + inner_container_height - outer_container.clientHeight, "outer-container's overflowing content is only its direct " + "children"); + large_space_outer.style.display = "initial"; inner_container.style.overflow = "visible"; await waitForAnimationFrames(2); assert_equals(inner_container.scrollTop, 0, "inner-container is no longer a scroll container"); - assert_equals(outer_container.scrollTop, initial_expected_scroll_top, + assert_equals(outer_container.scrollTop, outer_to_target_scrolltop, "outer-scroller is the scroll container for target once again"); }, "intermediate overflow:visible container becomes overflow:scroll"); promise_test(async (t) => { // This test verifies that: // 1. when both the child and grandchild are scroll-start-targets, the - // grandchild wins/is scrolled to. + // first-in-tree-order (i.e. the child) wins/is scrolled to. // 2. if/when the grandchild stops being a scroll-start-target, the // child (inner container) is scrolled to. await waitForCompositorCommit(); await resetDisplay(); t.add_cleanup(async () => { - target.style.scrollStartTarget = "auto auto"; + inner_container.style.scrollStartTarget = "none"; await waitForAnimationFrames(2); }); - assert_equals(outer_container.scrollTop, initial_expected_scroll_top, - "outer-container is scrolled to scroll-start-target"); + assert_equals(outer_container.scrollTop, outer_to_target_scrolltop, + "outer-container is scrolled to scroll-start-target"); // Make the inner container a scroll-start-target. - inner_container.style.scrollStartTarget = "auto auto"; + inner_container.style.scrollStartTarget = "auto"; await waitForAnimationFrames(2); // The inner container has overflow: visible, so it's not the scroll // container of target. - assert_equals(outer_container.scrollTop, initial_expected_scroll_top, - "outer-container is still scrolled to inner scroll-start-target"); - - // Make target no longer a scroll-start-target. The outer container's - // scroll-start-target should now be the inner container. - target.style.scrollStartTarget = "none none"; - await waitForAnimationFrames(2); assert_equals(outer_container.scrollTop, - space_filler_height + inner_scroller_top_offset, - "outer-container is scrolled to inner-container"); - }, "inner scroll-start-target takes precedence over outer"); + outer_to_inner_scrolltop, + "outer-container is scrolled to inner-container (which is before the" + + "inner scroll-start-target in tree order)"); + }, "outer scroll-start-target takes precedence over inner"); promise_test(async (t) => { // This test verifies that a child which is a scroller, is a @@ -175,32 +186,33 @@ await resetDisplay(); t.add_cleanup(async () => { inner_container.style.overflow = "visible"; - inner_container.style.scrollStartTarget = "none none"; + inner_container.style.scrollStartTarget = "none"; await waitForAnimationFrames(2); }); - assert_equals(outer_container.scrollTop, initial_expected_scroll_top, - "outer-container is scrolled to scroll-start-target"); + assert_equals(outer_container.scrollTop, outer_to_target_scrolltop, + "outer-container is scrolled to scroll-start-target"); // Make the inner container a scroll-start-target. - inner_container.style.scrollStartTarget = "auto auto"; + inner_container.style.scrollStartTarget = "auto"; await waitForAnimationFrames(2); - assert_equals(outer_container.scrollTop, initial_expected_scroll_top, - "outer-container is still scrolled to inner scroll-start-target"); + assert_equals(outer_container.scrollTop, + outer_to_inner_scrolltop, + "outer-container is still scrolled to inner scroll-container" + + "as it is a scroll-start-target and comes before #target in " + + "tree-order"); // Make the inner container a scroller. inner_container.style.overflow = "scroll"; await waitForAnimationFrames(2); assert_equals(outer_container.scrollTop, - space_filler_height + inner_scroller_top_offset + - inner_container.offsetHeight - outer_container.clientHeight, - "outer-container is scrolled to the inner container"); + outer_to_inner_scrolltop, + "outer-container is scrolled to the inner container"); assert_equals(inner_container.scrollTop, - space_filler_height + target.offsetHeight - - inner_container.clientHeight, - "inner-container is scrolled to target"); + inner_to_target_scrolltop, + "inner-container is scrolled to target"); }, "scroll containers can also be scroll-start-targets"); </script> </body> diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-root.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-root.tentative.html index f2af38bbabc..860a592bb10 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-root.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-root.tentative.html @@ -32,7 +32,7 @@ top: 60vh; left: 60vw; background-color: purple; - scroll-start-target: auto auto; + scroll-start-target: auto; } .bottom_right { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-rtl.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-rtl.tentative.html index 5a2fa0a93ca..e7766cc07a2 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-rtl.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-rtl.tentative.html @@ -34,7 +34,7 @@ .center { top: 60%; background-color: purple; - scroll-start-target: auto auto; + scroll-start-target: auto; } .bottom_left { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-span.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-span.tentative.html new file mode 100644 index 00000000000..0985dcc2ee9 --- /dev/null +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-span.tentative.html @@ -0,0 +1,53 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title> CSS Scroll Snap 2 Test: scroll-start-target with a <span> element</title> + <link rel="help" href="https://drafts.csswg.org/css-scroll-snap-2/#scroll-start-target"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/css/css-animations/support/testcommon.js"></script> + </head> + <body> + <style> + * { + margin: 0px; + } + .space { + width: 150%; + height: 150%; + } + .box { + height: 50px; + width: 50px; + border: solid 1px black; + background-color: turquoise; + } + .target { + scroll-start-target: auto; + } + .scroller { + overflow: scroll; + height: 100px; + width: 100px; + } + </style> + <div id="scroller" class="scroller"> + <div class="space"></div> + <span id="target" class="target"> + <div class="box"></div> + </span> + <div class="space"></div> + </div> + <script> + promise_test(async (t) => { + await waitForAnimationFrames(2); + const scroller = document.getElementById("scroller"); + const target = document.getElementById("target"); + + assert_equals(scroller.scrollTop, target.offsetTop, + "scroller is initially scrolled to it <span> scroll-start-target"); + }, "<span> scroll-start-target is honored"); + </script> + </body> +</html> diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-anchor-navigation-inner-frame.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-anchor-navigation-inner-frame.html index bea0525ecd4..de02dcf00f6 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-anchor-navigation-inner-frame.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-anchor-navigation-inner-frame.html @@ -23,7 +23,7 @@ #middle_box { width: 100px; height: 60vh; - scroll-start-target: auto auto; + scroll-start-target: auto; background-color: purple; } #bottom_box { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-hash-fragment-navigation-inner-frame.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-hash-fragment-navigation-inner-frame.html index 9bf77363d3e..90629c4990f 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-hash-fragment-navigation-inner-frame.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-hash-fragment-navigation-inner-frame.html @@ -23,7 +23,7 @@ #middle_box { width: 100px; height: 60vh; - scroll-start-target: auto auto; + scroll-start-target: auto; background-color: purple; } #bottom_box { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-snap.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-snap.tentative.html index 9cb66c01fce..28bea40d7a0 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-snap.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-snap.tentative.html @@ -42,7 +42,7 @@ top: 200px; left: 200px; background-color: purple; - scroll-start-target: auto auto; + scroll-start-target: auto; } .bottom_right { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-start-root.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-start-root.tentative.html index af99595f254..daf664aa7fb 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-start-root.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-start-root.tentative.html @@ -36,7 +36,7 @@ top: 60vh; left: 60vw; background-color: purple; - scroll-start-target: auto auto; + scroll-start-target: auto; } .bottom_right { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-start.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-start.tentative.html index a37c8312887..a08daad76db 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-start.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-scroll-start.tentative.html @@ -43,7 +43,7 @@ top: 200px; left: 200px; background-color: purple; - scroll-start-target: auto auto; + scroll-start-target: auto; } .bottom_right { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-text-fragment-navigation-target.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-text-fragment-navigation-target.html index da53e7a566d..80cbb55fb27 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-text-fragment-navigation-target.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-text-fragment-navigation-target.html @@ -20,7 +20,7 @@ #middle_box { width: 100px; height: 60vh; - scroll-start-target: auto auto; + scroll-start-target: auto; background-color: purple; } #bottom_box { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-user-programmatic-scroll.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-user-programmatic-scroll.tentative.html index 2d487e9b85c..6bcf103253d 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-user-programmatic-scroll.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target-with-user-programmatic-scroll.tentative.html @@ -45,7 +45,7 @@ top: 200px; left: 200px; background-color: purple; - scroll-start-target: auto auto; + scroll-start-target: auto; } .bottom_right { diff --git a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target.tentative.html b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target.tentative.html index 2e679c37396..1fcb3cbbe40 100644 --- a/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target.tentative.html +++ b/tests/wpt/tests/css/css-scroll-snap-2/scroll-start-target/scroll-start-target.tentative.html @@ -37,12 +37,8 @@ background-color: red; } - .target_for_x_and_y { - scroll-start-target: auto auto; - } - - .target_for_x { - scroll-start-target: none auto; + .target { + scroll-start-target: auto; } .center { @@ -57,22 +53,16 @@ background-color: yellow; } </style> - <div class="scroller" id="scroller1"> + <div class="scroller" id="scroller"> <div class="spacer"></div> - <div class="top_left box" id="top_left_box1"></div> - <div class="center box target_for_x_and_y" id="centerbox"></div> - <div class="bottom_right box"></div> - </div> - <div class="scroller" id="scroller2"> - <div class="spacer"></div> - <div class="top_left box" id="top_left_box2"></div> - <div class="center box target_for_x" id="centerbox2"></div> + <div class="top_left box" id="top_left_box"></div> + <div class="center box target" id="centerbox"></div> <div class="bottom_right box"></div> </div> <script> test((t) => { - let scroller = document.getElementById("scroller1"); - let top_left_box = document.getElementById("top_left_box1"); + let scroller = document.getElementById("scroller"); + let top_left_box = document.getElementById("top_left_box"); const expected_scroll_top = top_left_box.getBoundingClientRect().height; const expected_scroll_left = top_left_box.getBoundingClientRect().width; @@ -82,17 +72,5 @@ assert_approx_equals(scroller.scrollLeft, expected_scroll_left, 1, "scroll-start-target sets initial horizontal scroll position"); }); - test((t) => { - let scroller = document.getElementById("scroller2"); - let top_left_box = document.getElementById("top_left_box2"); - - const expected_scroll_top = 0; - const expected_scroll_left = top_left_box.getBoundingClientRect().width; - - assert_approx_equals(scroller.scrollTop, expected_scroll_top, 1, - "scroll-start-target sets initial vertical scroll position"); - assert_approx_equals(scroller.scrollLeft, expected_scroll_left, 1, - "scroll-start-target sets initial horizontal scroll position"); - }); </script> </body>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-shadow-parts/pseudo-classes-after-part.html b/tests/wpt/tests/css/css-shadow-parts/pseudo-classes-after-part.html index a2a2f35db4d..60292d27a71 100644 --- a/tests/wpt/tests/css/css-shadow-parts/pseudo-classes-after-part.html +++ b/tests/wpt/tests/css/css-shadow-parts/pseudo-classes-after-part.html @@ -88,7 +88,7 @@ test_valid_selector("::part(mypart):not(:hover)") test_valid_selector("::part(mypart):is(:hover)") test_valid_selector("::part(mypart):where(:hover)") test_invalid_selector("::part(mypart):not(:first-child)") -test_valid_selector("::part(mypart):is(:first-child)") -test_valid_selector("::part(mypart):where(:first-child)") +test_valid_forgiving_selector("::part(mypart):is(:first-child)") +test_valid_forgiving_selector("::part(mypart):where(:first-child)") </script> diff --git a/tests/wpt/tests/css/css-ui/animation/caret-animation-parsing.html b/tests/wpt/tests/css/css-ui/animation/caret-animation-parsing.html new file mode 100644 index 00000000000..7f54dc8e830 --- /dev/null +++ b/tests/wpt/tests/css/css-ui/animation/caret-animation-parsing.html @@ -0,0 +1,19 @@ +<!doctype html> +<title>Parsing of caret-animation</title> +<link rel="help" href="https://drafts.csswg.org/css-ui/#caret-animation"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<div id="target"></div> +<script> + test_valid_value('caret-animation', 'initial'); + test_valid_value('caret-animation', 'inherit'); + test_valid_value('caret-animation', 'unset'); + test_valid_value('caret-animation', 'revert'); + test_valid_value('caret-animation', 'auto'); + test_valid_value('caret-animation', 'manual'); + test_invalid_value('caret-animation', 'none'); + test_invalid_value('caret-animation', 'manua'); + test_invalid_value('caret-animation', 'fade'); + test_invalid_value('caret-animation', 'blink'); +</script>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-view-transitions/auto-name-from-id-shadow.html b/tests/wpt/tests/css/css-view-transitions/auto-name-from-id-shadow.html new file mode 100644 index 00000000000..b5020d658ec --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/auto-name-from-id-shadow.html @@ -0,0 +1,80 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<title>View transitions: auto name should not expose shadow-scoped ID</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<link rel="match" href="auto-name-ref.html"> +<script src="/common/reftest-wait.js"></script> +<style> +div { + width: 100px; + height: 100px; +} + +main { + display: flex; + flex-direction: column; +} + +.item { + view-transition-name: auto; +} + +::part(p2) { + view-transition-name: auto; + background: yellow; + position: relative; + left: 100px; + width: 100px; + height: 100px; +} + +main.switch #item1 { + order: 2; +} + +#item1 { + background: green; +} + +html::view-transition { + background: rebeccapurple; +} + +:root { view-transition-name: none; } +html::view-transition-group(*) { + animation-timing-function: steps(2, start); + animation-play-state: paused; +} +html::view-transition-group(item2) { + outline: 10px solid red; +} + +html::view-transition-old(*), +html::view-transition-new(*) + { animation-play-state: paused; } +html::view-transition-old(*) { animation: unset; opacity: 0 } +html::view-transition-new(*) { animation: unset; opacity: 1 } + +</style> + +<main> + <div class="item" id="item1"></div> + <div> + <template shadowrootmode="open"> + <div class="item" id="item2" part="p2"></div> + </template> + </div> +</main> + +<script> +failIfNot(document.startViewTransition, "Missing document.startViewTransition"); + +function runTest() { + document.startViewTransition(() => { + document.querySelector("main").classList.toggle("switch"); + }).ready.then(takeScreenshot); +} +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> + +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-view-transitions/auto-name-from-id.html b/tests/wpt/tests/css/css-view-transitions/auto-name-from-id.html new file mode 100644 index 00000000000..9a04d431dfd --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/auto-name-from-id.html @@ -0,0 +1,70 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<title>View transitions: auto name generated from ID</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<link rel="match" href="auto-name-ref.html"> +<script src="/common/reftest-wait.js"></script> +<style> +div { + width: 100px; + height: 100px; +} + +main { + display: flex; + flex-direction: column; +} + +.item { + view-transition-name: auto; +} + +main.switch #item1 { + order: 2; +} + +#item1 { + background: green; +} + +#item2 { + background: yellow; + position: relative; + left: 100px; +} + +html::view-transition { + background: rebeccapurple; +} + +:root { view-transition-name: none; } +html::view-transition-group(item1), +html::view-transition-group(item2) { + animation-timing-function: steps(2, start); + animation-play-state: paused; +} +html::view-transition-old(*), +html::view-transition-new(*) + { animation-play-state: paused; } +html::view-transition-old(*) { animation: unset; opacity: 0 } +html::view-transition-new(*) { animation: unset; opacity: 1 } + +</style> + +<main> + <div class="item" id="item1"></div> + <div class="item" id="item2"></div> +</main> + +<script> +failIfNot(document.startViewTransition, "Missing document.startViewTransition"); + +function runTest() { + document.startViewTransition(() => { + document.querySelector("main").classList.toggle("switch"); + }).ready.then(takeScreenshot); +} +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> + +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-view-transitions/auto-name-ref.html b/tests/wpt/tests/css/css-view-transitions/auto-name-ref.html new file mode 100644 index 00000000000..36ef5faac41 --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/auto-name-ref.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<title>View transitions: using auto names</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<style> +body { + background: rebeccapurple; +} + +div { + width: 100px; + height: 100px; +} + +main { + display: flex; + flex-direction: row; + position: relative; + top: 50px; +} + +.item1 { + background: green; +} + +.item2 { + background: yellow; +} +</style> +<main> + <div class="item1"></div> + <div class="item2"></div> +</main> + +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-view-transitions/auto-name.html b/tests/wpt/tests/css/css-view-transitions/auto-name.html new file mode 100644 index 00000000000..205c8e559dc --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/auto-name.html @@ -0,0 +1,70 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<title>View transitions: using auto names</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<link rel="match" href="auto-name-ref.html"> +<script src="/common/reftest-wait.js"></script> +<style> +div { + width: 100px; + height: 100px; +} + +main { + display: flex; + flex-direction: column; +} + +.item { + view-transition-name: auto; + view-transition-class: item; +} + +main.switch .item1 { + order: 2; +} + +.item1 { + background: green; +} + +.item2 { + background: yellow; + position: relative; + left: 100px; +} + +html::view-transition { + background: rebeccapurple; +} + +:root { view-transition-name: none; } +html::view-transition-group(.item) { + animation-timing-function: steps(2, start); + animation-play-state: paused; +} +html::view-transition-old(*), +html::view-transition-new(*) + { animation-play-state: paused; } +html::view-transition-old(*) { animation: unset; opacity: 0 } +html::view-transition-new(*) { animation: unset; opacity: 1 } + +</style> + +<main> + <div class="item item1"></div> + <div class="item item2"></div> +</main> + +<script> +failIfNot(document.startViewTransition, "Missing document.startViewTransition"); + +function runTest() { + document.startViewTransition(() => { + document.querySelector("main").classList.toggle("switch"); + }).ready.then(takeScreenshot); +} +onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); +</script> + +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-view-transitions/navigation/auto-name-from-id-ref.html b/tests/wpt/tests/css/css-view-transitions/navigation/auto-name-from-id-ref.html new file mode 100644 index 00000000000..8f9954930bf --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/navigation/auto-name-from-id-ref.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> +<title>View transitions: cross-document navigation with auto name</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<style> +@view-transition { navigation: auto; } +body { + background: rebeccapurple; + margin: 0; +} +#green { + width: 100px; + height: 100px; + position: absolute; + left: 100px; + view-transition-name: auto; + background: green; + contain: layout; +} +</style> +<div id="green"></div> +</html> diff --git a/tests/wpt/tests/css/css-view-transitions/navigation/auto-name-from-id.html b/tests/wpt/tests/css/css-view-transitions/navigation/auto-name-from-id.html new file mode 100644 index 00000000000..c9167332242 --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/navigation/auto-name-from-id.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>View transitions: cross-document navigation with auto name</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<link rel="match" href="auto-name-from-id-ref.html"> +<script src="/common/reftest-wait.js"></script> +<style> +@view-transition { navigation: auto; } +body { + background: blue; + margin: 0; +} +#green { + width: 100px; + height: 100px; + view-transition-name: auto; + background: green; + contain: layout; +} +</style> +<div id="green"></div> +<script> +onload = async() => { + await new Promise(resolve => requestAnimationFrame(() => resolve())); + location.href = "resources/auto-name-from-id.html"; +}; +</script> +</html> diff --git a/tests/wpt/tests/css/css-view-transitions/navigation/resources/auto-name-from-id.html b/tests/wpt/tests/css/css-view-transitions/navigation/resources/auto-name-from-id.html new file mode 100644 index 00000000000..f1fd1e48a68 --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/navigation/resources/auto-name-from-id.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>View transitions: cross-document navigation with auto name (new page)</title> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<link rel="match" href="auto-name-from-id-ref.html"> +<script src="/common/reftest-wait.js"></script> +<style> +@view-transition { navigation: auto; } + +body { + margin: 0; + padding: 0; + background: grey; +} + +html::view-transition { + background: rebeccapurple; + position: absolute; + inset: 0; +} + +html::view-transition-group(root) { + display: none; +} + +html::view-transition-group(green) { + animation-play-state: paused; + animation-duration: 3s; + animation-timing-function: steps(2, start); +} + +#green { + background: green; + width: 100px; + height: 100px; + left: 200px; + position: absolute; + view-transition-name: auto; +} + +</style> +<body> + <div id="green"></div> +</body> +<script> + onpagereveal = event => { + event.viewTransition.ready.then(takeScreenshot); + } +</script> + +</html> diff --git a/tests/wpt/tests/css/css-view-transitions/nested/custom-ident-implies-contain.html b/tests/wpt/tests/css/css-view-transitions/nested/custom-ident-implies-contain.html new file mode 100644 index 00000000000..6524d2c2680 --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/nested/custom-ident-implies-contain.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<title>view-transition: custom-ident implies containment</title> +<meta name=fuzzy content="maxDifference=0-255; totalPixels=0-515"> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<link rel="match" href="nested-ref.html"> +<link rel=stylesheet href="resources/compute-common.css"></link> +<script src="/common/reftest-wait.js"></script> +<script src="resources/compute-test.js"></script> +<body> + <div class="green" style="view-transition-group: root"> + <div> + <div class="test"></div> + </div> + </div> +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nearest-implies-contain.html b/tests/wpt/tests/css/css-view-transitions/nested/nearest-implies-contain.html new file mode 100644 index 00000000000..94f8b8d1b7e --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/nested/nearest-implies-contain.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html class=reftest-wait> +<title>view-transition: nearest implies containment</title> +<meta name=fuzzy content="maxDifference=0-255; totalPixels=0-515"> +<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> +<link rel="match" href="nested-ref.html"> +<link rel=stylesheet href="resources/compute-common.css"></link> +<script src="/common/reftest-wait.js"></script> +<script src="resources/compute-test.js"></script> +<body> + <div class="green nearest-ref"> + <div> + <div class="test"></div> + </div> + </div> +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/css/css-view-transitions/parsing/view-transition-name-invalid.html b/tests/wpt/tests/css/css-view-transitions/parsing/view-transition-name-invalid.html index 00cd411d6ad..0151991436c 100644 --- a/tests/wpt/tests/css/css-view-transitions/parsing/view-transition-name-invalid.html +++ b/tests/wpt/tests/css/css-view-transitions/parsing/view-transition-name-invalid.html @@ -12,7 +12,6 @@ </head> <body> <script> -test_invalid_value("view-transition-name", "auto"); // `auto` is excluded. test_invalid_value("view-transition-name", "default"); // `default` isn't allowed by the `<custom-ident>` syntax. test_invalid_value("view-transition-name", "none none"); test_invalid_value("view-transition-name", `"none"`); diff --git a/tests/wpt/tests/css/css-view-transitions/parsing/view-transition-name-valid.html b/tests/wpt/tests/css/css-view-transitions/parsing/view-transition-name-valid.html index 2fd384449f5..b1d08af0aaa 100644 --- a/tests/wpt/tests/css/css-view-transitions/parsing/view-transition-name-valid.html +++ b/tests/wpt/tests/css/css-view-transitions/parsing/view-transition-name-valid.html @@ -16,6 +16,7 @@ test_valid_value("view-transition-name", "none"); test_valid_value("view-transition-name", "foo"); test_valid_value("view-transition-name", "bar"); test_valid_value("view-transition-name", "baz"); +test_valid_value("view-transition-name", "auto"); </script> </body> </html> diff --git a/tests/wpt/tests/css/css-viewport/zoom/parsing/zoom-valid.html b/tests/wpt/tests/css/css-viewport/zoom/parsing/zoom-valid.html index 3f36508b8be..5e4500a59ff 100644 --- a/tests/wpt/tests/css/css-viewport/zoom/parsing/zoom-valid.html +++ b/tests/wpt/tests/css/css-viewport/zoom/parsing/zoom-valid.html @@ -20,6 +20,8 @@ test_valid_value("zoom", "75%"); test_valid_value("zoom", "0.5"); test_invalid_value("zoom", "auto"); +test_invalid_value("zoom", "reset"); +test_invalid_value("zoom", "document"); test_invalid_value("zoom", "-100%"); test_invalid_value("zoom", "-200%"); test_invalid_value("zoom", "-1"); diff --git a/tests/wpt/tests/css/filter-effects/feimage-svg-image-with-nested-data-url-crash.html b/tests/wpt/tests/css/filter-effects/feimage-svg-image-with-nested-data-url-crash.html new file mode 100644 index 00000000000..54ae7f02a09 --- /dev/null +++ b/tests/wpt/tests/css/filter-effects/feimage-svg-image-with-nested-data-url-crash.html @@ -0,0 +1,30 @@ +<!doctype html> +<title>Nested data URL in SVG image in <feImage></title> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#feImageElement"> +<style> + #target { + width: 100px; + height: 100px; + background-color: red; + } +</style> +<div id="target"></div> +<script> + const svg3Content = + `<svg xmlns='http://www.w3.org/2000/svg'> + <rect width='100%' height='100%' fill='green'/> + </svg>`; + const svg2Content = + `<svg xmlns="http://www.w3.org/2000/svg"> + <image href="data:image/svg+xml;base64,${btoa(svg3Content)}" width="100%" height="100%"/> + </svg>`; + const svg1Content = + `<svg xmlns="http://www.w3.org/2000/svg"> + <filter id="f" x="0" y="0" width="1" height="1"> + <feImage href="data:image/svg+xml;base64,${btoa(svg2Content)}" preserveAspectRatio="none"/> + </filter> + </svg>`; + const filterDataUrl = `data:image/svg+xml;base64,${btoa(svg1Content)}#f`; + document.querySelector("#target").style.filter = `url(${filterDataUrl})`; +</script> diff --git a/tests/wpt/tests/css/printing/destination-backslash-crash-print.html b/tests/wpt/tests/css/printing/destination-backslash-crash-print.html new file mode 100644 index 00000000000..e3abfd6ee49 --- /dev/null +++ b/tests/wpt/tests/css/printing/destination-backslash-crash-print.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel=help href="https://bugzilla.mozilla.org/show_bug.cgi?id=1917742"> +<!-- Really a crashtest but since we can't really have print crashtests, we assert that we print something --> +<link rel="mismatch" href="/css/reference/blank.html"> +<style> + #b { + will-change: transition, -webkit-animation, opacity, z-index; + } + + #c { + offset: path('M -1 1 l -1 98') 51% auto 0deg; + } +</style> +<script> + document.addEventListener("DOMContentLoaded", () => { + a.style.setProperty("mix-blend-mode", "hue") + b.appendChild(a) + }) +</script> +<font>A</font> +<input> +<textarea id="a" name=" VM\">A</textarea> +<ol>A</ol> +<a>A</a> +<input> +<math> + <mn id="b">A</mn> + <ms>A</ms> + <ms>A</ms> + <msqrt id="c" href="x"> + <mn>A</mn> diff --git a/tests/wpt/tests/css/selectors/dir-pseudo-on-input-element.html b/tests/wpt/tests/css/selectors/dir-pseudo-on-input-element.html index b1427bf42d6..8e3ba51f5bb 100644 --- a/tests/wpt/tests/css/selectors/dir-pseudo-on-input-element.html +++ b/tests/wpt/tests/css/selectors/dir-pseudo-on-input-element.html @@ -204,4 +204,4 @@ for (const type of ['date', 'time', 'number', 'range', 'color', 'checkbox', 'rad } </script> -</html> +</body> diff --git a/tests/wpt/tests/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html b/tests/wpt/tests/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html new file mode 100644 index 00000000000..54f8c7b02ef --- /dev/null +++ b/tests/wpt/tests/css/selectors/invalidation/host-has-shadow-tree-element-at-nonsubject-position.html @@ -0,0 +1,147 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>:host:has(...) to check whether a shadow host has a shadow tree element (nonsubject position)</title> +<link rel="author" title="Byungwoo Lee" href="mailto:blee@igalia.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="help" href="https://drafts.csswg.org/selectors/#relational"> +<div class="ancestor host_context"> + <div id="host" class="ancestor"> + <template shadowrootmode="open"> + <style> + div { color: red; } + :host:has(.descendant) .subject { color: green; } + :host:has(> .child) .subject { color: blue; } + :host:has(~ .sibling) .subject { color: yellow; } + :host:has(:is(.ancestor .descendant)) .subject { color: purple; } + :host:has(.descendant):has(> .child) .subject { color: pink; } + :host-context(.host_context):has(> .child > .grand_child) .subject { color: ivory; } + :host(.host_context):has(> .child > .grand_child) .subject { color: skyblue; } + :host:has(> .child > .grand_child):host(.host_context):has(> .child > .descendant) .subject { color: lightgreen; } + </style> + <div id="subject" class="subject"></div> + <div id="shadow_child"> + <div id="shadow_descendant"></div> + </div> + </template> + <div class="child"> + <div class="descendant"></div> + </div> + </div> + <div class="sibling"></div> +</div> + +<script> +const red = 'rgb(255, 0, 0)'; +const green = 'rgb(0, 128, 0)'; +const blue = 'rgb(0, 0, 255)'; +const yellow = 'rgb(255, 255, 0)'; +const purple = 'rgb(128, 0, 128)'; +const pink = 'rgb(255, 192, 203)'; +const ivory = 'rgb(255, 255, 240)'; +const skyblue = 'rgb(135, 206, 235)'; +const lightgreen = 'rgb(144, 238, 144)'; + +var shadow_root = host.shadowRoot; + +function element(id) { + return document.getElementById(id); +} + +function shadow_element(id) { + return shadow_root.getElementById(id); +} + +var subject = shadow_element('subject'); + +function test_color(test_name, color) { + test(function() { + assert_equals(getComputedStyle(subject).color, color); + }, test_name); +} + +function create_div(id, class_name) { + let div = document.createElement('div'); + div.id = id; + div.classList.add(class_name); + return div +} + +test_color('Initial color', red); + +shadow_element('shadow_child').classList.add('descendant'); +test_color(`Add .descendant to #shadow_child`, green); + +shadow_element('shadow_child').classList.remove('descendant'); +test_color(`Remove .descendant from #shadow_child`, red); + +shadow_element('shadow_descendant').classList.add('descendant'); +test_color(`Add .descendant to #shadow_descendant`, green); + +shadow_element('shadow_child').classList.add('ancestor'); +test_color(`Add .ancestor to #shadow_child:has(.descendant)`, purple); + +shadow_element('shadow_child').classList.remove('ancestor'); +test_color(`Remove .ancestor from #shadow_child:has(.descendant)`, green); + +shadow_element('shadow_child').classList.add('child'); +test_color(`Add .child to #shadow_child:has(.descendant)`, pink); + +shadow_element('shadow_child').classList.remove('child'); +test_color(`Remove .child from #shadow_child:has(.descendant)`, green); + +shadow_element('shadow_descendant').classList.remove('descendant'); +test_color(`Remove .descendant from #shadow_descendant`, red); + +shadow_element('shadow_child').classList.add('child'); +test_color(`Add .child to #shadow_child`, blue); + +shadow_element('shadow_descendant').classList.add('grand_child'); +test_color(`Add .grand_child to #shadow_descendant`, ivory); + +element('host').classList.add('host_context'); +test_color(`Add .host_context to #host`, skyblue); + +shadow_element('shadow_descendant').classList.add('descendant'); +test_color(`Add .descendant to #shadow_descendant.grand_child`, lightgreen); + +shadow_element('shadow_descendant').classList.remove('descendant'); +test_color(`Remove .descendant from #shadow_descendant.grand_child`, skyblue); + +shadow_element('shadow_descendant').classList.remove('grand_child'); +test_color(`Remove .grand_child from #shadow_descendant`, blue); + +shadow_element('shadow_child').classList.remove('child'); +test_color(`Remove .child from #shadow_child`, red); + +shadow_element('shadow_descendant').classList.add('child'); +test_color(`Add .child to #shadow_descendant`, red); + +shadow_element('shadow_descendant').classList.remove('child'); +test_color(`Remove .child from #shadow_descendant`, red); + +div = shadow_root.insertBefore(create_div('first_child', 'descendant'), + shadow_root.firstChild); +test_color(`Insert #first_child.descendant to shadow root`, green); +div.remove(); +test_color(`Remove #first_child.descendant from shadow root`, red); + +div = shadow_root.insertBefore(create_div('last_child', 'descendant'), null); +test_color(`Insert #last_child.descendant to shadow root`, green); +div.remove(); +test_color(`Remove #last_child.descendant from shadow root`, red); + +div = shadow_root.insertBefore(create_div('child_in_middle','descendant'), + shadow_element('shadow_child')); +test_color(`Insert #child_in_middle.descendant before #shadow_child`, green); +div.remove(); +test_color(`Remove #child_in_middle.descendant from shadow root`, red); + +div = shadow_element('shadow_child') + .insertBefore(create_div('grand_child','descendant'), + shadow_element('shadow_descendant')); +test_color(`Insert #grand_child.descendant before #shadow_descendant`, green); +div.remove(); +test_color(`Remove #grand_child.descendant from shadow tree`, red); + +</script>
\ No newline at end of file diff --git a/tests/wpt/tests/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html b/tests/wpt/tests/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html new file mode 100644 index 00000000000..f7c694bc362 --- /dev/null +++ b/tests/wpt/tests/css/selectors/invalidation/host-has-shadow-tree-element-at-subject-position.html @@ -0,0 +1,143 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>:host:has(...) to check whether a shadow host has a shadow tree element (subject position)</title> +<link rel="author" title="Byungwoo Lee" href="mailto:blee@igalia.com"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="help" href="https://drafts.csswg.org/selectors/#relational"> +<div class="ancestor host_context"> + <div id="host" class="ancestor"> + <template shadowrootmode="open"> + <style> + :host:has(.descendant) { color: green; } + :host:has(> .child) { color: blue; } + :host:has(~ .sibling) { color: yellow; } + :host:has(:is(.ancestor .descendant)) { color: purple; } + :host:has(.descendant):has(> .child) { color: pink; } + :host-context(.host_context):has(> .child > .grand_child) { color: ivory; } + :host(.host_context):has(> .child > .grand_child) { color: skyblue; } + :host:has(> .child > .grand_child):host(.host_context):has(> .child > .descendant) { color: lightgreen; } + </style> + <div id="shadow_child"> + <div id="shadow_descendant"></div> + </div> + </template> + <div class="child"> + <div class="descendant"></div> + </div> + </div> + <div class="sibling"></div> +</div> + +<script> +const black = 'rgb(0, 0, 0)'; +const green = 'rgb(0, 128, 0)'; +const blue = 'rgb(0, 0, 255)'; +const yellow = 'rgb(255, 255, 0)'; +const purple = 'rgb(128, 0, 128)'; +const pink = 'rgb(255, 192, 203)'; +const ivory = 'rgb(255, 255, 240)'; +const skyblue = 'rgb(135, 206, 235)'; +const lightgreen = 'rgb(144, 238, 144)'; + +var shadow_root = host.shadowRoot; + +function element(id) { + return document.getElementById(id); +} + +function shadow_element(id) { + return shadow_root.getElementById(id); +} + +function test_color(test_name, color) { + test(function() { + assert_equals(getComputedStyle(host).color, color); + }, test_name); +} + +function create_div(id, class_name) { + let div = document.createElement('div'); + div.id = id; + div.classList.add(class_name); + return div +} + +test_color('Initial color', black); + +shadow_element('shadow_child').classList.add('descendant'); +test_color(`Add .descendant to #shadow_child`, green); + +shadow_element('shadow_child').classList.remove('descendant'); +test_color(`Remove .descendant from #shadow_child`, black); + +shadow_element('shadow_descendant').classList.add('descendant'); +test_color(`Add .descendant to #shadow_descendant`, green); + +shadow_element('shadow_child').classList.add('ancestor'); +test_color(`Add .ancestor to #shadow_child:has(.descendant)`, purple); + +shadow_element('shadow_child').classList.remove('ancestor'); +test_color(`Remove .ancestor from #shadow_child:has(.descendant)`, green); + +shadow_element('shadow_child').classList.add('child'); +test_color(`Add .child to #shadow_child:has(.descendant)`, pink); + +shadow_element('shadow_child').classList.remove('child'); +test_color(`Remove .child from #shadow_child:has(.descendant)`, green); + +shadow_element('shadow_descendant').classList.remove('descendant'); +test_color(`Remove .descendant from #shadow_descendant`, black); + +shadow_element('shadow_child').classList.add('child'); +test_color(`Add .child to #shadow_child`, blue); + +shadow_element('shadow_descendant').classList.add('grand_child'); +test_color(`Add .grand_child to #shadow_descendant`, ivory); + +element('host').classList.add('host_context'); +test_color(`Add .host_context to #host`, skyblue); + +shadow_element('shadow_descendant').classList.add('descendant'); +test_color(`Add .descendant to #shadow_descendant.grand_child`, lightgreen); + +shadow_element('shadow_descendant').classList.remove('descendant'); +test_color(`Remove .descendant from #shadow_descendant.grand_child`, skyblue); + +shadow_element('shadow_descendant').classList.remove('grand_child'); +test_color(`Remove .grand_child from #shadow_descendant`, blue); + +shadow_element('shadow_child').classList.remove('child'); +test_color(`Remove .child from #shadow_child`, black); + +shadow_element('shadow_descendant').classList.add('child'); +test_color(`Add .child to #shadow_descendant`, black); + +shadow_element('shadow_descendant').classList.remove('child'); +test_color(`Remove .child from #shadow_descendant`, black); + +div = shadow_root.insertBefore(create_div('first_child', 'descendant'), + shadow_root.firstChild); +test_color(`Insert #first_child.descendant to shadow root`, green); +div.remove(); +test_color(`Remove #first_child.descendant from shadow root`, black); + +div = shadow_root.insertBefore(create_div('last_child', 'descendant'), null); +test_color(`Insert #last_child.descendant to shadow root`, green); +div.remove(); +test_color(`Remove #last_child.descendant from shadow root`, black); + +div = shadow_root.insertBefore(create_div('child_in_middle','descendant'), + shadow_element('shadow_child')); +test_color(`Insert #child_in_middle.descendant before #shadow_child`, green); +div.remove(); +test_color(`Remove #child_in_middle.descendant from shadow root`, black); + +div = shadow_element('shadow_child') + .insertBefore(create_div('grand_child','descendant'), + shadow_element('shadow_descendant')); +test_color(`Insert #grand_child.descendant before #shadow_descendant`, green); +div.remove(); +test_color(`Remove #grand_child.descendant from shadow tree`, black); + +</script>
\ No newline at end of file diff --git a/tests/wpt/tests/digital-credentials/allow-attribute.https.html b/tests/wpt/tests/digital-credentials/allow-attribute.https.html index a42a3b68f0e..41223626808 100644 --- a/tests/wpt/tests/digital-credentials/allow-attribute.https.html +++ b/tests/wpt/tests/digital-credentials/allow-attribute.https.html @@ -116,11 +116,15 @@ ); }); const { name, message } = data; - assert_equals( - name, - expectIsAllowed ? "TypeError" : "NotAllowedError", - `${iframe.outerHTML} - ${message}` - ); + if (expectIsAllowed) { + assert_true(name == "TypeError" || + (name == "NotAllowedError" && message.includes("transient activation")), + `${iframe.outerHTML} - ${message}`); + } else { + assert_equals(name, "NotAllowedError", `${iframe.outerHTML} - ${message}`); + assert_false(message.includes("transient activation"), + `${iframe.outerHTML} - ${message}`); + } iframe.remove(); }, `Policy to use: ${details.policy}, is cross-origin: ${details.crossOrigin}, is allowed by policy: ${details.expectIsAllowed}`); } diff --git a/tests/wpt/tests/document-picture-in-picture/copy-document-mode-quirks.https.html b/tests/wpt/tests/document-picture-in-picture/copy-document-mode-quirks.https.html new file mode 100644 index 00000000000..fde59d972b3 --- /dev/null +++ b/tests/wpt/tests/document-picture-in-picture/copy-document-mode-quirks.https.html @@ -0,0 +1,15 @@ +<title>Test document picture-in-picture copies Document mode when it's quirks mode</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<body> +<script> +promise_test(async (t) => { + assert_equals(document.compatMode, "BackCompat", "The opener document should be on quirks mode"); + await test_driver.bless('request PiP window'); + const pipWindow = await documentPictureInPicture.requestWindow(); + assert_equals(pipWindow.document.compatMode, "BackCompat", "The picture-in-picture document should be on quirks mode"); +}); +</script> +</body> diff --git a/tests/wpt/tests/document-picture-in-picture/copy-document-mode.https.html b/tests/wpt/tests/document-picture-in-picture/copy-document-mode.https.html new file mode 100644 index 00000000000..82e62077037 --- /dev/null +++ b/tests/wpt/tests/document-picture-in-picture/copy-document-mode.https.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<title>Test document picture-in-picture copies Document mode</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<body> +<script> +promise_test(async (t) => { + assert_equals(document.compatMode, "CSS1Compat", "The opener document should not be on quirks mode"); + await test_driver.bless('request PiP window'); + const pipWindow = await documentPictureInPicture.requestWindow(); + assert_equals(pipWindow.document.compatMode, "CSS1Compat", "The picture-in-picture document should not be on quirks mode"); +}); +</script> +</body> diff --git a/tests/wpt/tests/dom/nodes/Node-childNodes-cache.html b/tests/wpt/tests/dom/nodes/Node-childNodes-cache.html new file mode 100644 index 00000000000..da9e32c6a9c --- /dev/null +++ b/tests/wpt/tests/dom/nodes/Node-childNodes-cache.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Node.childNodes caching bug</title> +<link rel=help href="https://bugzilla.mozilla.org/show_bug.cgi?id=1919031"> +<link rel=author title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel=author title="Mozilla" href="https://mozilla.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="target"><div id="first"></div><div id="second"></div><div id="third"></div><div id="last"></div></div> +<script> +test(function() { + let target = document.getElementById("target"); + let second = target.childNodes[1]; + assert_equals(second.id, "second"); + second.remove(); + assert_equals(target.childNodes[4], undefined, "Out of bounds elements are undefined"); + assert_equals(target.childNodes[3], undefined, "Out of bounds elements are undefined"); + assert_equals(target.childNodes.length, 3); + assert_equals(target.childNodes[0].id, "first"); + assert_equals(target.childNodes[1].id, "third"); + assert_equals(target.childNodes[2].id, "last"); +}); +</script> diff --git a/tests/wpt/tests/dom/nodes/moveBefore/tentative/listed-form-element-reset.html b/tests/wpt/tests/dom/nodes/moveBefore/tentative/listed-form-element-reset.html new file mode 100644 index 00000000000..29f524dd9e7 --- /dev/null +++ b/tests/wpt/tests/dom/nodes/moveBefore/tentative/listed-form-element-reset.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<title>Form owner is reset when new form is moved before a listed form element</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> + +<form id=form1></form> +<button form=form1></button> + +<script> +test(t => { + const form = document.querySelector('form'); + const button = document.querySelector('button'); + + assert_equals(button.form, form, "button.form is correctly associated"); + const form2 = document.createElement('form'); + form2.id = 'form1'; + document.body.append(form2); + assert_equals(button.form, form, + "button.form is still associated with the original form, after form2 " + + "(with a competing ID) is inserted into the DOM"); + + // Atomically moving `form2` closer before `button` must reset `button`'s + // `form` IDL attribute's return value, to the new "moved" `form2`. + document.body.moveBefore(form2, form); + assert_equals(button.form, form2, "button.form is correctly reset to form2"); +}, "Listed form element form owner is reset when a new form is moved closer " + + "before the listed element"); +</script> diff --git a/tests/wpt/tests/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html b/tests/wpt/tests/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html new file mode 100644 index 00000000000..7b4f508b5c9 --- /dev/null +++ b/tests/wpt/tests/dom/nodes/moveBefore/tentative/preserve-render-blocking-script.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<head> +<title>Script with "blocking=render" should remain render-blocking when moved</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + window.operations = []; +</script> +<script> + requestAnimationFrame(() => window.operations.push("render")); +</script> +<script id="target" src="resources/dummy.js?pipe=trickle(d1)" blocking="render" async></script> +</head> +<body> +<div>Some text</div> +<script> + document.head.moveBefore(document.getElementById("target"), null); +</script> +<script> + promise_test(async () => { + await new Promise(resolve => requestAnimationFrame(() => resolve())); + await new Promise(resolve => requestAnimationFrame(() => resolve())); + assert_array_equals(operations, ["script", "render"]); + }, "A moved script should keep its render-blocking state"); +</script> +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html b/tests/wpt/tests/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html new file mode 100644 index 00000000000..aa715c8b144 --- /dev/null +++ b/tests/wpt/tests/dom/nodes/moveBefore/tentative/preserve-render-blocking-style.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<head> +<title>Stylesheet with "blocking=render" should remain render-blocking when moved</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = "resources/green.css?pipe=trickle(d1)"; + link.setAttribute("blocking", "render"); + document.head.append(link); + requestAnimationFrame(() => { + window.backgroundColorAtFirstRender = getComputedStyle(document.body).backgroundColor; + }); +</script> +</head> +<body> + +<div>Some text</div> +<script> + document.head.moveBefore(link, null); +</script> +<script> + promise_test(async () => { + await new Promise(resolve => requestAnimationFrame(() => resolve())); + assert_equals(backgroundColorAtFirstRender, "rgb(0, 128, 0)"); + }, "A moved script should keep its render-blocking state"); +</script> +</body>
\ No newline at end of file diff --git a/tests/wpt/tests/dom/nodes/moveBefore/tentative/relevant-mutations.html b/tests/wpt/tests/dom/nodes/moveBefore/tentative/relevant-mutations.html new file mode 100644 index 00000000000..95b770dbef8 --- /dev/null +++ b/tests/wpt/tests/dom/nodes/moveBefore/tentative/relevant-mutations.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<title>Moving triggers relevant mutations</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> + +<div></div> + +<script> +promise_test(async t => { + const div = document.querySelector('div'); + div.innerHTML = ` + <picture> + <source srcset="/images/green.png" media="(min-width: 10px)"> + <img src="/images/red.png"> + </picture>`; + + const picture = document.querySelector('picture'); + const source = document.querySelector('source'); + const img = document.querySelector('img'); + + t.add_cleanup(() => { + picture.remove(); + source.remove(); + img.remove(); + }); + + await new Promise(resolve => img.addEventListener('load', e => resolve(), {once: true})); + + // Moving <source> out of <picture> triggers a relevant mutation on <img>. + document.body.moveBefore(source, null); + + await new Promise(resolve => img.addEventListener('load', e => resolve(), {once: true})); +}, "Moving <source> out of <picture> triggers a relevant mutation on sibling <img>"); + +promise_test(async t => { + const div = document.querySelector('div'); + div.innerHTML = ` + <picture> + <source srcset="/images/green.png" media="(min-width: 10px)"> + </picture>`; + + const picture = document.querySelector('picture'); + const source = document.querySelector('source'); + const img = document.createElement('img'); + img.src = '/images/red.png'; + + t.add_cleanup(() => { + picture.remove(); + source.remove(); + img.remove(); + }); + + // The <img> will first load outside of the picture. + await new Promise(resolve => img.addEventListener('load', e => resolve(), {once: true})); + + // Moving the <img> element to the <picture> (as the last child), triggers a + // relevant mutation and loads the <source> picture — which still fires a + // load event at the <img>. + picture.moveBefore(img, null); + + await new Promise(resolve => img.addEventListener('load', e => resolve(), {once: true})); +}, "Moving <img> into a <picture> triggers a relevant mutation on the <img>, " + + "loading <source>"); +</script> diff --git a/tests/wpt/tests/dom/nodes/moveBefore/tentative/resources/dummy.js b/tests/wpt/tests/dom/nodes/moveBefore/tentative/resources/dummy.js new file mode 100644 index 00000000000..1bee3c77638 --- /dev/null +++ b/tests/wpt/tests/dom/nodes/moveBefore/tentative/resources/dummy.js @@ -0,0 +1 @@ +window.operations.push("script");
\ No newline at end of file diff --git a/tests/wpt/tests/dom/nodes/moveBefore/tentative/resources/green.css b/tests/wpt/tests/dom/nodes/moveBefore/tentative/resources/green.css new file mode 100644 index 00000000000..182d72fa7fd --- /dev/null +++ b/tests/wpt/tests/dom/nodes/moveBefore/tentative/resources/green.css @@ -0,0 +1,3 @@ +body { + background-color: green; +}
\ No newline at end of file diff --git a/tests/wpt/tests/editing/include/editor-test-utils.js b/tests/wpt/tests/editing/include/editor-test-utils.js index b180f3343fd..b302d19a117 100644 --- a/tests/wpt/tests/editing/include/editor-test-utils.js +++ b/tests/wpt/tests/editing/include/editor-test-utils.js @@ -100,6 +100,24 @@ class EditorTestUtils { ); } + sendCopyShortcutKey() { + return this.sendKey( + "c", + this.window.navigator.platform.includes("Mac") + ? this.kMeta + : this.kControl + ); + } + + sendPasteShortcutKey() { + return this.sendKey( + "v", + this.window.navigator.platform.includes("Mac") + ? this.kMeta + : this.kControl + ); + } + // Similar to `setupDiv` in editing/include/tests.js, this method sets // innerHTML value of this.editingHost, and sets multiple selection ranges // specified with the markers. diff --git a/tests/wpt/tests/editing/plaintext-only/insertHTML.html b/tests/wpt/tests/editing/plaintext-only/insertHTML.html new file mode 100644 index 00000000000..b0577c45a5c --- /dev/null +++ b/tests/wpt/tests/editing/plaintext-only/insertHTML.html @@ -0,0 +1,163 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<meta name="timeout" content="long"> +<meta name="variant" content="?white-space=normal"> +<meta name="variant" content="?white-space=pre"> +<meta name="variant" content="?white-space=pre-line"> +<meta name="variant" content="?white-space=pre-wrap"> +<title>Pasting rich text into contenteditable=plaintext-only</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../include/editor-test-utils.js"></script> +<script> +"use strict"; + +const searchParams = new URLSearchParams(document.location.search); +const whiteSpace = searchParams.get("white-space"); +const useBR = whiteSpace == "normal"; +const collapseWhiteSpaces = whiteSpace == "normal" || whiteSpace == "pre-line"; + +addEventListener("load", () => { + const editingHost = document.createElement("div"); + editingHost.style.whiteSpace = whiteSpace; + editingHost.contentEditable = "plaintext-only"; + document.body.appendChild(editingHost); + editingHost.focus(); + editingHost.getBoundingClientRect(); + const utils = new EditorTestUtils(editingHost); + + for (const data of [ + { + insertHTML: "plaintext", + expected: "plaintext", + }, + { + // line breaks should not be preformatted + insertHTML: "1st line\n2nd line", + expected: "1st line 2nd line", + }, + { + // preformatted line breaks should appear as-is + insertHTML: "<pre>1st line\n2nd line</pre>", + expected: useBR + ? "1st line<br>2nd line" + : ["1st line<br>2nd line", "1st line\n2nd line"], + }, + { + // text should be inserted into the <b> + initialInnerHTML: "<b>{}</b>", + insertHTML: "plaintext", + expected: "<b>plaintext</b>", + }, + { + // text should be inserted into the <b> + initialInnerHTML: "<b>{}<br></b>", + insertHTML: "plaintext", + expected: ["<b>plaintext</b>", "<b>plaintext<br></b>"], + }, + { + // text should be inserted into the <b> + initialInnerHTML: "<b>A[]B</b>", + insertHTML: "plaintext", + expected: "<b>AplaintextB</b>", + }, + { + // text should be inserted into the <span> even if it's meaningless + initialInnerHTML: "<span>A[]B</span>", + insertHTML: "plaintext", + expected: "<span>AplaintextB</span>", + }, + { + // inserting one paragraph should cause inserting only its contents. + // (but it's okay other serialized text.) + insertHTML: "<div>abc</div>", + expected: "abc", + }, + { + // inserting one paragraph should cause inserting only its contents. + // (but it's okay other serialized text.) + insertHTML: "<div>abc<br>def</div>", + expected: useBR ? "abc<br>def" : ["abc<br>def", "abc\ndef"], + }, + { + // inserting 2 or more paragraphs should be handled as multiple lines + insertHTML: "<div>abc</div><div>def</div>", + expected: useBR ? "abc<br>def" : ["abc<br>def", "abc\ndef"], + }, + { + // inserting 2 or more paragraphs should be handled as multiple lines + insertHTML: "<div>abc<br>def</div><div>ghi<br>jkl</div>", + expected: useBR + ? "abc<br>def<br>ghi<br>jkl" + : ["abc<br>def<br>ghi<br>jkl", + "abc\ndef\nghi\njkl"], + }, + { + // <noscript> content should not be inserted + insertHTML: "<noscript>no script</noscript>", + expected: "", + }, + { + // <noframes> content should not be inserted + insertHTML: "<noframes>no frames</noframes>", + expected: "", + }, + { + // <script> content should not be inserted + insertHTML: `<script>script</${"script"}>`, + expected: "", + }, + { + // <style> content should not be inserted + insertHTML: "<style>style</style>", + expected: "", + }, + { + // <head> content should not be inserted + insertHTML: "<html><head><title>title</title></head><body>body</body></html>", + expected: "body", + }, + { + // white-spaces should be collapsed + insertHTML: "plain text", + expected: "plain text", + }, + { + // white-spaces should be collapsed + insertHTML: "<span>plain text</span>", + expected: "plain text", + }, + { + // preformatted white-spaces should not be collapsed + insertHTML: "<pre>plain text</pre>", + expected: !collapseWhiteSpaces + ? "plain text" + : ["plain text", "plain text", "plain text", + "plain \u00A0text", "plain\u00A0 text", "plain\u00A0\u00A0text"], + }, + { + // even if inserting HTML is empty, selected text should be deleted + initialInnerHTML: "A[B]C", + insertHTML: "", + expected: "AC", + }, + ]) { + test(() => { + utils.setupEditingHost(data.initialInnerHTML ? data.initialInnerHTML : ""); + document.execCommand("insertHTML", false, data.insertHTML); + if (Array.isArray(data.expected)) { + assert_in_array(editingHost.innerHTML, data.expected); + } else { + assert_equals(editingHost.innerHTML, data.expected); + } + }, `execCommand("insertHTML", false, "${data.insertHTML}") when "${ + data.initialInnerHTML ? data.initialInnerHTML : "" + }"`); + } +}, {once: true}); +</script> +</head> +<body></body> +</html> diff --git a/tests/wpt/tests/editing/plaintext-only/insertLineBreak.html b/tests/wpt/tests/editing/plaintext-only/insertLineBreak.html new file mode 100644 index 00000000000..564eb16605c --- /dev/null +++ b/tests/wpt/tests/editing/plaintext-only/insertLineBreak.html @@ -0,0 +1,204 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<meta name="timeout" content="long"> +<meta name="variant" content="?white-space=normal"> +<meta name="variant" content="?white-space=pre"> +<meta name="variant" content="?white-space=pre-line"> +<meta name="variant" content="?white-space=pre-wrap"> +<title>Inserting a line break in plaintext-only</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="../include/editor-test-utils.js"></script> +<script> +"use strict"; + +const searchParams = new URLSearchParams(document.location.search); +const whiteSpace = searchParams.get("white-space"); +const useBR = whiteSpace == "normal"; +const collapseWhiteSpaces = whiteSpace == "normal" || whiteSpace == "pre-line"; +const isSafari = navigator.platform.includes("Mac") && + navigator.userAgent.includes("Safari") && + !navigator.userAgent.includes("Chrome"); + +addEventListener("load", () => { + const editingHost = document.createElement("div"); + editingHost.style.whiteSpace = whiteSpace; + editingHost.contentEditable = "plaintext-only"; + document.body.appendChild(editingHost); + editingHost.focus(); + editingHost.getBoundingClientRect(); + const utils = new EditorTestUtils(editingHost); + + let lastBeforeInputEvent; + editingHost.addEventListener("beforeinput", event => lastBeforeInputEvent = event); + + for (const data of [ + { + initialInnerHTML: "A[]B", + expected: useBR ? "A<br>B" : ["A<br>B", "A\nB"], + }, + { + initialInnerHTML: "<p>{}<br></p>", + expected: useBR ? "<p><br><br></p>" : ["<p><br><br></p>", "<p>\n\n</p>", "<p>\n<br></p>"], + }, + { + initialInnerHTML: `<p style="white-space:normal">A[]B</p>`, + expected: `<p style="white-space:normal">A<br>B</p>`, + }, + { + initialInnerHTML: `<p style="white-space:pre">A[]B</p>`, + expected: [`<p style="white-space:pre">A<br>B</p>`, `<p style="white-space:pre">A\nB</p>`], + }, + { + initialInnerHTML: `<p style="white-space:pre-line">A[]B</p>`, + expected: [`<p style="white-space:pre-line">A<br>B</p>`, `<p style="white-space:pre-line">A\nB</p>`], + }, + { + initialInnerHTML: `<p style="white-space:pre-wrap">A[]B</p>`, + expected: [`<p style="white-space:pre-wrap">A<br>B</p>`, `<p style="white-space:pre-wrap">A\nB</p>`], + }, + { + initialInnerHTML: "<ul><li>[]AB</li></ul>", + expected: useBR ? "<ul><li><br>AB</li></ul>" : ["<ul><li><br>AB</li></ul>", "<ul><li>\nAB</li></ul>"], + }, + { + initialInnerHTML: "<ul><li>A[]B</li></ul>", + expected: useBR ? "<ul><li>A<br>B</li></ul>" : ["<ul><li>A<br>B</li></ul>", "<ul><li>A\nB</li></ul>"], + }, + { + initialInnerHTML: "<ul><li>AB[]</li></ul>", + expected: useBR + ? "<ul><li>AB<br><br></li></ul>" + : ["<ul><li>AB<br><br></li></ul>", "<ul><li>AB\n\n</li></ul>", "<ul><li>AB\n<br></li></ul>"], + }, + { + initialInnerHTML: "<dl><dt>[]AB</dt></dl>", + expected: useBR ? "<dl><dt><br>AB</dt></dl>" : ["<dl><dt><br>AB</dt></dl>", "<dl><dt>\nAB</dt></dl>"], + }, + { + initialInnerHTML: "<dl><dt>A[]B</dt></dl>", + expected: useBR ? "<dl><dt>A<br>B</dt></dl>" : ["<dl><dt>A<br>B</dt></dl>", "<dl><dt>A\nB</dt></dl>"], + }, + { + initialInnerHTML: "<dl><dt>AB[]</dt></dl>", + expected: useBR + ? "<dl><dt>AB<br><br></dt></dl>" + : ["<dl><dt>AB<br><br></dt></dl>", "<dl><dt>AB\n\n</dt></dl>", "<dl><dt>AB\n<br></dt></dl>"], + }, + { + initialInnerHTML: "<dl><dd>[]AB</dd></dl>", + expected: useBR ? "<dl><dd><br>AB</dd></dl>" : ["<dl><dd><br>AB</dd></dl>", "<dl><dd>\nAB</dd></dl>"], + }, + { + initialInnerHTML: "<dl><dd>A[]B</dd></dl>", + expected: useBR ? "<dl><dd>A<br>B</dd></dl>" : ["<dl><dd>A<br>B</dd></dl>", "<dl><dd>A\nB</dd></dl>"], + }, + { + initialInnerHTML: "<dl><dd>AB[]</dd></dl>", + expected: useBR + ? "<dl><dd>AB<br><br></dd></dl>" + : ["<dl><dd>AB<br><br></dd></dl>", "<dl><dd>AB\n\n</dd></dl>", "<dl><dd>AB\n<br></dd></dl>"], + }, + { + initialInnerHTML: "<table><tbody><tr><td>[]AB</td></tr></tbody></table>", + expected: useBR + ? "<table><tbody><tr><td><br>AB</td></tr></tbody></table>" + : [ + "<table><tbody><tr><td><br>AB<br></td></tr></tbody></table>", + "<table><tbody><tr><td>\nAB</td></tr></tbody></table>", + ], + }, + { + initialInnerHTML: "<table><tbody><tr><td>A[]B</td></tr></tbody></table>", + expected: useBR + ? "<table><tbody><tr><td>A<br>B</td></tr></tbody></table>" + : [ + "<table><tbody><tr><td>A<br>B<br></td></tr></tbody></table>", + "<table><tbody><tr><td>A\nB</td></tr></tbody></table>", + ], + }, + { + initialInnerHTML: "<table><tbody><tr><td>AB[]</td></tr></tbody></table>", + expected: useBR + ? "<table><tbody><tr><td>AB<br><br></td></tr></tbody></table>" + : [ + "<table><tbody><tr><td>AB<br><br></td></tr></tbody></table>", + "<table><tbody><tr><td>AB\n\n</td></tr></tbody></table>", + "<table><tbody><tr><td>AB\n<br></td></tr></tbody></table>", + ], + }, + { + initialInnerHTML: "<h1>[]AB</h1>", + expected: useBR ? "<h1><br>AB</h1>" : ["<h1><br>AB</h1>", "<h1>\nAB</h1>"], + }, + { + initialInnerHTML: "<h1>A[]B</h1>", + expected: useBR ? "<h1>A<br>B</h1>" : ["<h1>A<br>B</h1>", "<h1>A\nB</h1>"], + }, + { + initialInnerHTML: "<h1>AB[]</h1>", + expected: useBR ? "<h1>AB<br><br></h1>" : ["<h1>AB<br><br></h1>", "<h1>AB\n\n</h1>", "<h1>AB\n<br></h1>"], + }, + ]) { + test(() => { + utils.setupEditingHost(data.initialInnerHTML); + document.execCommand("insertLineBreak"); + if (Array.isArray(data.expected)) { + assert_in_array(editingHost.innerHTML, data.expected); + } else { + assert_equals(editingHost.innerHTML, data.expected); + } + }, `execCommand("insertLineBreak") when ${data.initialInnerHTML}`); + promise_test(async t => { + utils.setupEditingHost(data.initialInnerHTML); + lastBeforeInputEvent = undefined; + await utils.sendEnterKey(); + test(() => { + assert_equals( + lastBeforeInputEvent?.inputType, + "insertLineBreak", + `inputType should be "insertLineBreak"` + ); + }, `${t.name}: beforeinput`); + test(() => { + if (Array.isArray(data.expected)) { + assert_in_array(editingHost.innerHTML, data.expected); + } else { + assert_equals(editingHost.innerHTML, data.expected); + } + }, `${t.name}: editingHost.innerHTML`); + }, `Pressing Enter when ${ + data.initialInnerHTML + } should cause "insertLineBreak" and shouldn't insert new paragraph`); + promise_test(async t => { + utils.setupEditingHost(data.initialInnerHTML); + lastBeforeInputEvent = undefined; + await utils.sendEnterKey(isSafari ? utils.kControl : utils.kShift); + test(() => { + assert_equals( + lastBeforeInputEvent?.inputType, + "insertLineBreak", + `inputType should be "insertLineBreak"` + ); + }, `${t.name}: beforeinput`); + test(() => { + if (Array.isArray(data.expected)) { + assert_in_array(editingHost.innerHTML, data.expected); + } else { + assert_equals(editingHost.innerHTML, data.expected); + } + }, `${t.name}: editingHost.innerHTML`); + }, `Pressing ${isSafari ? "Ctrl" : "Shift"}+Enter when ${ + data.initialInnerHTML + } should cause "insertLineBreak" and shouldn't insert new paragraph`); + } +}, {once: true}); +</script> +</head> +<body></body> +</html> diff --git a/tests/wpt/tests/editing/plaintext-only/insertParagraph.html b/tests/wpt/tests/editing/plaintext-only/insertParagraph.html new file mode 100644 index 00000000000..2841fdb4f31 --- /dev/null +++ b/tests/wpt/tests/editing/plaintext-only/insertParagraph.html @@ -0,0 +1,105 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<meta name="timeout" content="long"> +<meta name="variant" content="?white-space=normal"> +<meta name="variant" content="?white-space=pre"> +<meta name="variant" content="?white-space=pre-line"> +<meta name="variant" content="?white-space=pre-wrap"> +<title>excCommand("insertParagraph") in plaintext-only</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../include/editor-test-utils.js"></script> +<script> +"use strict"; + +const searchParams = new URLSearchParams(document.location.search); +const whiteSpace = searchParams.get("white-space"); +const useBR = whiteSpace == "normal"; + +addEventListener("load", () => { + const editingHost = document.createElement("div"); + editingHost.style.whiteSpace = whiteSpace; + editingHost.contentEditable = "plaintext-only"; + document.body.appendChild(editingHost); + editingHost.focus(); + editingHost.getBoundingClientRect(); + const utils = new EditorTestUtils(editingHost); + + /** + * insertParagraph command in plaintext-only is available only with document.execCommand. + * It should work as same as contenteditable=true, therefore, this test checks only + * basic behavior. Various edge cases should be tested in run/insertparagraph.html. + */ + + for (const data of [ + { + initialInnerHTML: "<p>[]AB</p>", + expected: useBR ? "<p><br></p><p>AB</p>" : ["<p><br></p><p>AB</p>", "<p>\n</p><p>AB</p>"], + }, + { + initialInnerHTML: "<p>A[]B</p>", + expected: "<p>A</p><p>B</p>", + }, + { + initialInnerHTML: "<p>AB[]</p>", + expected: useBR ? "<p>AB</p><p><br></p>" : ["<p>AB</p><p><br></p>", "<p>AB</p><p>\n</p>"], + }, + { + initialInnerHTML: `<p style="white-space:normal">[]AB</p>`, + expected: `<p style="white-space:normal"><br></p><p style="white-space:normal">AB</p>`, + }, + { + initialInnerHTML: `<p style="white-space:pre">[]AB</p>`, + expected: useBR + ? `<p style="white-space:pre"><br></p><p style="white-space:pre">AB</p>` + : [`<p style="white-space:pre"><br></p><p style="white-space:pre">AB</p>`, + `<p style="white-space:pre">\n</p><p style="white-space:pre">AB</p>`], + }, + { + initialInnerHTML: `<p style="white-space:pre-line">[]AB</p>`, + expected: useBR + ? `<p style="white-space:pre-line"><br></p><p style="white-space:pre-line">AB</p>` + : [`<p style="white-space:pre-line"><br></p><p style="white-space:pre-line">AB</p>`, + `<p style="white-space:pre-line">\n</p><p style="white-space:pre-line">AB</p>`], + }, + { + initialInnerHTML: `<p style="white-space:pre-wrap">[]AB</p>`, + expected: useBR + ? `<p style="white-space:pre-wrap"><br></p><p style="white-space:pre-wrap">AB</p>` + : [`<p style="white-space:pre-wrap"><br></p><p style="white-space:pre-wrap">AB</p>`, + `<p style="white-space:pre-wrap">\n</p><p style="white-space:pre-wrap">AB</p>`], + }, + { + initialInnerHTML: "<ul><li>[]AB</li></ul>", + expected: useBR + ? "<ul><li><br></li><li>AB</li></ul>" + : ["<ul><li><br></li><li>AB</li></ul>", "<ul><li>\n</li><li>AB</li></ul>"], + }, + { + initialInnerHTML: "<ul><li>A[]B</li></ul>", + expected: "<ul><li>A</li><li>B</li></ul>", + }, + { + initialInnerHTML: "<ul><li>AB[]</li></ul>", + expected: useBR + ? "<ul><li>AB</li><li><br></li></ul>" + : ["<ul><li>AB</li><li><br></li></ul>", "<ul><li>AB</li><li>\n</li></ul>"], + }, + ]) { + test(() => { + utils.setupEditingHost(data.initialInnerHTML); + document.execCommand("insertParagraph"); + if (Array.isArray(data.expected)) { + assert_in_array(editingHost.innerHTML, data.expected); + } else { + assert_equals(editingHost.innerHTML, data.expected); + } + }, `execCommand("insertParagraph") when ${data.initialInnerHTML}`); + } +}, {once: true}); +</script> +</head> +<body></body> +</html> diff --git a/tests/wpt/tests/editing/plaintext-only/paste.https.html b/tests/wpt/tests/editing/plaintext-only/paste.https.html new file mode 100644 index 00000000000..611c39f8bf3 --- /dev/null +++ b/tests/wpt/tests/editing/plaintext-only/paste.https.html @@ -0,0 +1,264 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<meta name="timeout" content="long"> +<meta name="variant" content="?white-space=normal"> +<meta name="variant" content="?white-space=pre"> +<meta name="variant" content="?white-space=pre-line"> +<meta name="variant" content="?white-space=pre-wrap"> +<title>Pasting rich text into contenteditable=plaintext-only</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="../include/editor-test-utils.js"></script> +<script> +"use strict"; + +const searchParams = new URLSearchParams(document.location.search); +const whiteSpace = searchParams.get("white-space"); +const useBR = whiteSpace == "normal"; + +addEventListener("load", () => { + const placeholderForCopy = document.createElement("div"); + document.body.appendChild(placeholderForCopy); + const editingHost = document.createElement("div"); + editingHost.style.whiteSpace = whiteSpace; + editingHost.contentEditable = "plaintext-only"; + document.body.appendChild(editingHost); + editingHost.focus(); + editingHost.getBoundingClientRect(); + const utils = new EditorTestUtils(editingHost); + let lastBeforeInput; + editingHost.addEventListener("beforeinput", event => lastBeforeInput = event); + + /** + * Pasting HTML into contenteditable=plaintext-only should work as pasting + * text which is serialized by the browser or OS. Then, `beforeinput` event + * should have only dataTransfer and it should have "text/html" format to + * make it possible that web apps can serialize the data by themselves to + * avoid the browser/OS dependency. Finally, if white-space style is normal, + * line breaks should appear as <br>. Otherwise, either <br> or \n is fine + * because both breaks the lines. + */ + + promise_test(async t => { + placeholderForCopy.innerHTML = "<b>abc</b>"; + document.activeElement?.blur(); + await test_driver.click(placeholderForCopy); + getSelection().selectAllChildren(placeholderForCopy); + await utils.sendCopyShortcutKey(); + utils.setupEditingHost("A[]B"); + lastBeforeInput = undefined; + await utils.sendPasteShortcutKey(); + test(() => { + assert_equals(lastBeforeInput?.inputType, "insertFromPaste", `inputType should be "insertFromPaste"`); + assert_equals(lastBeforeInput?.data, null, `data should be null`); + assert_true( + String(lastBeforeInput?.dataTransfer?.getData("text/html")).includes(placeholderForCopy.innerHTML), + `dataTransfer should have the copied HTML source` + ); + }, `${t.name}: beforeinput`); + test(() => { + assert_equals(editingHost.innerHTML, "AabcB", "<b> should not be pasted"); + }, `${t.name}: pasted result`); + }, "Pasting text in <b>"); + + promise_test(async t => { + placeholderForCopy.innerHTML = "<span>abc</span>"; + document.activeElement?.blur(); + await test_driver.click(placeholderForCopy); + getSelection().selectAllChildren(placeholderForCopy); + await utils.sendCopyShortcutKey(); + utils.setupEditingHost("A[]B"); + lastBeforeInput = undefined; + await utils.sendPasteShortcutKey(); + test(() => { + assert_equals(lastBeforeInput?.inputType, "insertFromPaste", `inputType should be "insertFromPaste"`); + assert_equals(lastBeforeInput?.data, null, `data should be null`); + assert_true( + String(lastBeforeInput?.dataTransfer?.getData("text/html")).includes(placeholderForCopy.innerHTML), + `dataTransfer should have the copied HTML source` + ); + }, `${t.name}: beforeinput`); + test(() => { + assert_equals(editingHost.innerHTML, "AabcB", "<span> should not be pasted"); + }, `${t.name}: pasted result`); + }, "Pasting text in <span>"); + + promise_test(async t => { + placeholderForCopy.innerHTML = "abc"; + document.activeElement?.blur(); + await test_driver.click(placeholderForCopy); + getSelection().selectAllChildren(placeholderForCopy); + await utils.sendCopyShortcutKey(); + utils.setupEditingHost("<b>A[]B</b>"); + lastBeforeInput = undefined; + await utils.sendPasteShortcutKey(); + test(() => { + assert_equals(lastBeforeInput?.inputType, "insertFromPaste", `inputType should be "insertFromPaste"`); + assert_equals(lastBeforeInput?.data, null, `data should be null`); + assert_true( + String(lastBeforeInput?.dataTransfer?.getData("text/html")).includes(placeholderForCopy.innerHTML), + `dataTransfer should have the copied HTML source` + ); + }, `${t.name}: beforeinput`); + test(() => { + assert_equals(editingHost.innerHTML, "<b>AabcB</b>", "text should be inserted into the editable <b>"); + }, `${t.name}: pasted result`); + }, "Pasting text into editable <b>"); + + promise_test(async t => { + placeholderForCopy.innerHTML = "<i>abc</i>"; + document.activeElement?.blur(); + await test_driver.click(placeholderForCopy); + getSelection().selectAllChildren(placeholderForCopy); + await utils.sendCopyShortcutKey(); + utils.setupEditingHost("<b>A[]B</b>"); + lastBeforeInput = undefined; + await utils.sendPasteShortcutKey(); + test(() => { + assert_equals(lastBeforeInput?.inputType, "insertFromPaste", `inputType should be "insertFromPaste"`); + assert_equals(lastBeforeInput?.data, null, `data should be null`); + assert_true( + String(lastBeforeInput?.dataTransfer?.getData("text/html")).includes(placeholderForCopy.innerHTML), + `dataTransfer should have the copied HTML source` + ); + }, `${t.name}: beforeinput`); + test(() => { + assert_equals(editingHost.innerHTML, "<b>AabcB</b>", "text should be inserted into the editable <b> without copied <i>"); + }, `${t.name}: pasted result`); + }, "Pasting text in <i> into editable <b>"); + + promise_test(async t => { + placeholderForCopy.innerHTML = "<div>abc</div><div>def</div>"; + document.activeElement?.blur(); + await test_driver.click(placeholderForCopy); + getSelection().selectAllChildren(placeholderForCopy); + await utils.sendCopyShortcutKey(); + utils.setupEditingHost("A[]B"); + lastBeforeInput = undefined; + await utils.sendPasteShortcutKey(); + test(() => { + assert_equals(lastBeforeInput?.inputType, "insertFromPaste", `inputType should be "insertFromPaste"`); + assert_equals(lastBeforeInput?.data, null, `data should be null`); + assert_true( + String(lastBeforeInput?.dataTransfer?.getData("text/html")).includes(placeholderForCopy.innerHTML), + `dataTransfer should have the copied HTML source` + ); + }, `${t.name}: beforeinput`); + test(() => { + if (useBR) { + assert_in_array( + editingHost.innerHTML, + [ + "Aabc<br>defB", + "A<br>abc<br>def<br>B", + ], + "Each paragraph should be pasted as a line" + ); + } else { + assert_in_array( + editingHost.innerHTML, + [ + "Aabc<br>defB", + "Aabc\ndefB", + "A<br>abc<br>def<br>B", + "A\nabc\ndef\nB", + ], + "Each paragraph should be pasted as a line" + ); + } + }, `${t.name}: pasted result`); + }, "Pasting 2 paragraphs"); + + promise_test(async t => { + placeholderForCopy.innerHTML = "<div>abc</div><div>def</div>"; + document.activeElement?.blur(); + await test_driver.click(placeholderForCopy); + getSelection().selectAllChildren(placeholderForCopy); + await utils.sendCopyShortcutKey(); + utils.setupEditingHost("<b>A[]B</b>"); + lastBeforeInput = undefined; + await utils.sendPasteShortcutKey(); + test(() => { + assert_equals(lastBeforeInput?.inputType, "insertFromPaste", `inputType should be "insertFromPaste"`); + assert_equals(lastBeforeInput?.data, null, `data should be null`); + assert_true( + String(lastBeforeInput?.dataTransfer?.getData("text/html")).includes(placeholderForCopy.innerHTML), + `dataTransfer should have the copied HTML source` + ); + }, `${t.name}: beforeinput`); + test(() => { + if (useBR) { + assert_in_array( + editingHost.innerHTML, + [ + "<b>Aabc<br>defB</b>", + "<b>A<br>abc<br>def<br>B</b>", + ], + "Each paragraph should be pasted as a line" + ); + } else { + assert_in_array( + editingHost.innerHTML, + [ + "<b>Aabc<br>defB</b>", + "<b>Aabc\ndefB</b>", + "<b>A<br>abc<br>def<br>B</b>", + "<b>A\nabc\ndef\nB</b>", + ], + "Each paragraph should be pasted as a line" + ); + } + }, `${t.name}: pasted result`); + }, "Pasting 2 paragraphs into <b>"); + + promise_test(async t => { + placeholderForCopy.innerHTML = "<div><b>abc</b></div><div><b>def</b></div>"; + document.activeElement?.blur(); + await test_driver.click(placeholderForCopy); + getSelection().selectAllChildren(placeholderForCopy); + await utils.sendCopyShortcutKey(); + utils.setupEditingHost("A[]B"); + lastBeforeInput = undefined; + await utils.sendPasteShortcutKey(); + test(() => { + assert_equals(lastBeforeInput?.inputType, "insertFromPaste", `inputType should be "insertFromPaste"`); + assert_equals(lastBeforeInput?.data, null, `data should be null`); + assert_true( + String(lastBeforeInput?.dataTransfer?.getData("text/html")).includes(placeholderForCopy.innerHTML), + `dataTransfer should have the copied HTML source` + ); + }, `${t.name}: beforeinput`); + test(() => { + if (useBR) { + assert_in_array( + editingHost.innerHTML, + [ + "Aabc<br>defB", + "A<br>abc<br>def<br>B", + ], + "Each paragraph should be pasted as a line" + ); + } else { + assert_in_array( + editingHost.innerHTML, + [ + "Aabc<br>defB", + "Aabc\ndefB", + "A<br>abc<br>def<br>B", + "A\nabc\ndef\nB", + ], + "Each paragraph should be pasted as a line" + ); + } + }, `${t.name}: pasted result`); + }, "Pasting 2 paragraphs whose text is bold"); +}, {once: true}); +</script> +</head> +<body></body> +</html> diff --git a/tests/wpt/tests/editing/plaintext-only/styling-commands.html b/tests/wpt/tests/editing/plaintext-only/styling-commands.html new file mode 100644 index 00000000000..2afaf9212ac --- /dev/null +++ b/tests/wpt/tests/editing/plaintext-only/styling-commands.html @@ -0,0 +1,90 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<meta name="timeout" content="long"> +<meta name="variant" content="?styleWithCSS=true"> +<meta name="variant" content="?styleWithCSS=false"> +<title>Styling with document.execCommand() should not work in plaintext-only editing host</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../include/editor-test-utils.js"></script> +<script> +"use strict"; + +const searchParams = new URLSearchParams(document.location.search); +const defaultStyleWithCSS = searchParams.get("styleWithCSS"); +const oppositeStyleWithCSS = defaultStyleWithCSS == "true" ? "false" : "true"; + +addEventListener("load", () => { + document.querySelector("div[contenteditable=true]").focus(); + document.execCommand("styleWithCSS", false, defaultStyleWithCSS); + + const editingHost = document.querySelector("div[contenteditable=plaintext-only]"); + const utils = new EditorTestUtils(editingHost); + for (const testing of [ + { command: "backColor", param: "red", innerHTML: "a[b]c" }, + { command: "bold", param: undefined, innerHTML: "a[b]c" }, + { command: "createLink", param: "http://example.com", innerHTML: "a[b]c" }, + { command: "decreaseFontSize", param: undefined, innerHTML: "a[b]c" }, + { command: "fontName", param: "Arial", innerHTML: "a[b]c" }, + { command: "fontSize", param: "7", innerHTML: "a[b]c" }, + { command: "formatBlock", param: "blockquote", innerHTML: "a[b]c" }, + { command: "formatBlock", param: "div", innerHTML: "a[b]c" }, + { command: "formatBlock", param: "p", innerHTML: "a[b]c" }, + { command: "formatBlock", param: "pre", innerHTML: "a[b]c" }, + { command: "heading", param: "h1", innerHTML: "a[b]c" }, + { command: "hiliteColor", param: "red", innerHTML: "a[b]c" }, + { command: "increaseFontSize", param: undefined, innerHTML: "a[b]c" }, + { command: "indent", param: undefined, innerHTML: "<ul><li>[abc]</li></ul>" }, + { command: "indent", param: undefined, innerHTML: "<blockquote>[abc]</blockquote>" }, + { command: "insertOrderedList", param: undefined, innerHTML: "a[b]c" }, + { command: "insertUnorderedList", param: undefined, innerHTML: "a[b]c" }, + { command: "italic", param: undefined, innerHTML: "a[b]c" }, + { command: "justifyCenter", param: undefined, innerHTML: "<div>[abc]</div>" }, + { command: "justifyFull", param: undefined, innerHTML: "<div>[abc]</div>" }, + { command: "justifyLeft", param: undefined, innerHTML: "<div>[abc]</div>" }, + { command: "justifyRight", param: undefined, innerHTML: "<div>[abc]</div>" }, + { command: "outdent", param: undefined, innerHTML: "<ul><li>[abc]</li></ul>" }, + { command: "outdent", param: undefined, innerHTML: "<blockquote>[abc]</blockquote>" }, + { command: "removeFormat", param: undefined, innerHTML: "a<b>[b]</b>c" }, + { command: "strikeThrough", param: undefined, innerHTML: "a[b]c" }, + { command: "subscript", param: undefined, innerHTML: "a[b]c" }, + { command: "superscript", param: undefined, innerHTML: "a[b]c" }, + { command: "underline", param: undefined, innerHTML: "a[b]c" }, + { command: "unlink", param: undefined, innerHTML: "a<a href=\"http://example.com\">[b]</a>c" }, + ]) { + test(t => { + utils.setupEditingHost(testing.innerHTML); + const editingHostBefore = editingHost.outerHTML; + let inputEvent; + function onInput(event) { + inputEvent = `input={inputType="${event.inputType}"}`; + } + let ret; + try { + editingHost.addEventListener("input", onInput); + ret = document.execCommand(testing.command, false, testing.param); + } finally { + editingHost.removeEventListener("input", onInput); + } + test(() => { + assert_false(ret); + }, `${t.name} should return false`); + test(() => { + assert_equals(editingHostBefore, editingHost.outerHTML); + }, `${t.name} should not update the DOM`); + test(() => { + assert_equals(inputEvent, undefined); + }, `${t.name} should not cause input event`); + }, `execCommand("${testing.command}", false, ${ + testing.param === undefined ? "undefined" : `"${testing.param}"` + }) when ${testing.innerHTML}`); + } +}, {once: true}); +</script> +</head> +<body> +<div contenteditable="true"></div> +<div contenteditable="plaintext-only"></div> +</html> diff --git a/tests/wpt/tests/event-timing/crossiframe.html b/tests/wpt/tests/event-timing/crossiframe.html index c307028c413..74f88ac9a61 100644 --- a/tests/wpt/tests/event-timing/crossiframe.html +++ b/tests/wpt/tests/event-timing/crossiframe.html @@ -76,13 +76,10 @@ const childFrameEntriesPromise = new Promise(resolve => { window.addEventListener("message", (event) => { - // testdriver-complete is a webdriver internal event - if (event.data.type != "testdriver-complete") { - t.step(() => { - validateChildFrameEntries(event.data); - }); - resolve(); - } + t.step(() => { + validateChildFrameEntries(event.data); + }); + resolve(); }, false); }); diff --git a/tests/wpt/tests/fedcm/fedcm-storage-access-api-autogrant.tentative.https.sub.html b/tests/wpt/tests/fedcm/fedcm-storage-access-api-autogrant.tentative.https.sub.html index 6cbd7851414..66486b01523 100644 --- a/tests/wpt/tests/fedcm/fedcm-storage-access-api-autogrant.tentative.https.sub.html +++ b/tests/wpt/tests/fedcm/fedcm-storage-access-api-autogrant.tentative.https.sub.html @@ -9,7 +9,7 @@ <script src="/storage-access-api/helpers.js"></script> <script type="module"> -import {request_options_with_mediation_optional, +import {request_options_with_mediation_required, fedcm_test, select_manifest, fedcm_get_and_select_first_account} from './support/fedcm-helper.sub.js'; @@ -19,7 +19,7 @@ const responder_html_load_ack = "/storage-access-api/resources/script-with-cooki fedcm_test(async t => { await MaybeSetStorageAccess("*", "*", "blocked"); - let test_options = request_options_with_mediation_optional("manifest_with_auto_selected_flag.json"); + let test_options = request_options_with_mediation_required(); await select_manifest(t, test_options); await fedcm_get_and_select_first_account(t, test_options); @@ -44,7 +44,7 @@ fedcm_test(async t => { fedcm_test(async t => { await MaybeSetStorageAccess("*", "*", "blocked"); - let test_options = request_options_with_mediation_optional("manifest_with_auto_selected_flag.json"); + let test_options = request_options_with_mediation_required(); await select_manifest(t, test_options); await fedcm_get_and_select_first_account(t, test_options); @@ -68,7 +68,7 @@ fedcm_test(async t => { fedcm_test(async t => { await MaybeSetStorageAccess("*", "*", "blocked"); - let test_options = request_options_with_mediation_optional("manifest_with_auto_selected_flag.json"); + let test_options = request_options_with_mediation_required(); await select_manifest(t, test_options); await fedcm_get_and_select_first_account(t, test_options); diff --git a/tests/wpt/tests/fedcm/support/fedcm-helper.sub.js b/tests/wpt/tests/fedcm/support/fedcm-helper.sub.js index 767c044818e..4337adf9f87 100644 --- a/tests/wpt/tests/fedcm/support/fedcm-helper.sub.js +++ b/tests/wpt/tests/fedcm/support/fedcm-helper.sub.js @@ -124,8 +124,6 @@ export function request_options_with_two_idps(mediation = 'required') { // Test wrapper which does FedCM-specific setup. export function fedcm_test(test_func, test_name) { promise_test(async t => { - // Ensure we start from a clean slate. - await test_driver.delete_all_cookies(); // Turn off delays that are not useful in tests. try { await test_driver.set_fedcm_delay_enabled(false); diff --git a/tests/wpt/tests/fenced-frame/permission-api-denied-non-standard.https.html b/tests/wpt/tests/fenced-frame/permission-api-denied-non-standard.https.html index ffc06781f60..94bc538f7fa 100644 --- a/tests/wpt/tests/fenced-frame/permission-api-denied-non-standard.https.html +++ b/tests/wpt/tests/fenced-frame/permission-api-denied-non-standard.https.html @@ -11,8 +11,7 @@ <script> // See https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/permissions/permission_descriptor.idl for valid permission names. non_standard_permission_list = - ['accessibility-events', - 'clipboard-read', + ['clipboard-read', 'clipboard-write', 'payment-handler', 'idle-detection', diff --git a/tests/wpt/tests/fledge/tentative/TODO b/tests/wpt/tests/fledge/tentative/TODO index 09cda1beb54..e05fe65911d 100644 --- a/tests/wpt/tests/fledge/tentative/TODO +++ b/tests/wpt/tests/fledge/tentative/TODO @@ -100,3 +100,6 @@ If possible: * Test input with invalid https origin in web platform tests for both trusted bidding and scoring signals coordinators. * Test selectable buyer and seller reporting ids with k-anonymity enforcement. +* Test that service workers cannot see update urls. + * This was attempted in [here](https://chromium-review.googlesource.com/c/chromium/src/+/5512083), + but needed to be reverted because it kept timing out, [see here](https://g-issues.chromium.org/issues/339048485) diff --git a/tests/wpt/tests/fledge/tentative/abort.https.window.js b/tests/wpt/tests/fledge/tentative/abort.https.window.js index b99d60dd528..db6aae46045 100644 --- a/tests/wpt/tests/fledge/tentative/abort.https.window.js +++ b/tests/wpt/tests/fledge/tentative/abort.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: timeout=long diff --git a/tests/wpt/tests/fledge/tentative/additional-bids.https.window.js b/tests/wpt/tests/fledge/tentative/additional-bids.https.window.js index 965f9a60c7e..3ba0b49cbc0 100644 --- a/tests/wpt/tests/fledge/tentative/additional-bids.https.window.js +++ b/tests/wpt/tests/fledge/tentative/additional-bids.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/auction-config-passed-to-worklets.https.window.js b/tests/wpt/tests/fledge/tentative/auction-config-passed-to-worklets.https.window.js index 7780957739e..dae7d7d806a 100644 --- a/tests/wpt/tests/fledge/tentative/auction-config-passed-to-worklets.https.window.js +++ b/tests/wpt/tests/fledge/tentative/auction-config-passed-to-worklets.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js @@ -7,7 +8,9 @@ // META: variant=?6-10 // META: variant=?11-15 // META: variant=?16-20 -// META: variant=?21-last +// META: variant=?21-25 +// META: variant=?26-30 +// META: variant=?30-35 "use strict;" @@ -238,4 +241,44 @@ makeTest({ fieldName: 'reportingTimeout', fieldValue: 50, auctionConfigOverrides: {fieldValue: undefined} -});
\ No newline at end of file +}); + +makeTest({ + name: 'AuctionConfig.sellerSignals is null', + fieldName: 'sellerSignals', + fieldValue: undefined, + auctionConfigOverrides: {sellerSignals: null} +}); + +makeTest({ + name: 'AuctionConfig.sellerSignals is explicit undefined', + fieldName: 'sellerSignals', + fieldValue: undefined, + auctionConfigOverrides: {sellerSignals: Promise.resolve(undefined)} +}); + +makeTest({ + name: 'AuctionConfig.sellerSignals is "null"', + fieldName: 'sellerSignals', + fieldValue: 'null', +}); + +makeTest({ + name: 'AuctionConfig.auctionSignals is null', + fieldName: 'auctionSignals', + fieldValue: undefined, + auctionConfigOverrides: {sellerSignals: null} +}); + +makeTest({ + name: 'AuctionConfig.auctionSignals is explicit undefined', + fieldName: 'auctionSignals', + fieldValue: undefined, + auctionConfigOverrides: {auctionSignals: Promise.resolve(undefined)} +}); + +makeTest({ + name: 'AuctionConfig.auctionSignals is "null"', + fieldName: 'auctionSignals', + fieldValue: 'null', +}); diff --git a/tests/wpt/tests/fledge/tentative/auction-config.https.window.js b/tests/wpt/tests/fledge/tentative/auction-config.https.window.js index 4efef29344d..fc1441a8743 100644 --- a/tests/wpt/tests/fledge/tentative/auction-config.https.window.js +++ b/tests/wpt/tests/fledge/tentative/auction-config.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js @@ -15,7 +16,9 @@ // META: variant=?46-50 // META: variant=?51-55 // META: variant=?56-60 -// META: variant=?61-last +// META: variant=?61-65 +// META: variant=?66-70 +// META: variant=?71-last "use strict;" @@ -472,7 +475,10 @@ makeTest({ makeTest({ name: 'perBuyerCurrencies not convertible to dictionary', expect: EXPECT_PROMISE_ERROR, - expectPromiseError: EXPECT_EXCEPTION(TypeError), + // Because this is not convertible by IDL to the proper dictionary type, this + // will immediately be converted to a rejected promise inside of the + // runBasicFledgeAuction() invocation, and that await will handle the + // rejection. Therefore, no expectPromiseError. auctionConfigOverrides: {perBuyerCurrencies: 123} }); @@ -637,3 +643,65 @@ subsetTest(promise_test, async test => { uuid, [bidderReportURL2, sellerReportURL2, bidderReportURL1, sellerReportURL1]); }, `forDebuggingOnly lockout and cooldowns updating in one auction, read in another's.`); + +makeTest({ + name: 'deprecatedRenderURLReplacements nullability', + expect: EXPECT_WINNER, + auctionConfigOverrides: {deprecatedRenderURLReplacements: null} +}); + +makeTest({ + name: 'deprecatedRenderURLReplacements nullability 2', + expect: EXPECT_WINNER, + auctionConfigOverrides: + {deprecatedRenderURLReplacements: Promise.resolve(undefined)} +}); + +makeTest({ + name: 'perBuyerSignals nullability', + expect: EXPECT_WINNER, + auctionConfigOverrides: {perBuyerSignals: null}, +}); + +makeTest({ + name: 'perBuyerSignals nullability 2', + expect: EXPECT_WINNER, + auctionConfigOverrides: {perBuyerSignals: Promise.resolve(undefined)}, +}); + +makeTest({ + name: 'perBuyerTimeouts nullability', + expect: EXPECT_WINNER, + auctionConfigOverrides: {perBuyerTimeouts: null}, +}); + +makeTest({ + name: 'perBuyerTimeouts nullability 2', + expect: EXPECT_WINNER, + auctionConfigOverrides: {perBuyerTimeouts: Promise.resolve(undefined)}, +}); + +makeTest({ + name: 'perBuyerCumulativeTimeouts nullability', + expect: EXPECT_WINNER, + auctionConfigOverrides: {perBuyerCumulativeTimeouts: null}, +}); + +makeTest({ + name: 'perBuyerCumulativeTimeouts nullability 2', + expect: EXPECT_WINNER, + auctionConfigOverrides: + {perBuyerCumulativeTimeouts: Promise.resolve(undefined)}, +}); + +makeTest({ + name: 'perBuyerCurrencies nullability', + expect: EXPECT_WINNER, + auctionConfigOverrides: {perBuyerCurrencies: null}, +}); + +makeTest({ + name: 'perBuyerCurrencies nullability 2', + expect: EXPECT_WINNER, + auctionConfigOverrides: {perBuyerCurrencies: Promise.resolve(undefined)}, +}); diff --git a/tests/wpt/tests/fledge/tentative/clear-origin-joined-ad-interest-groups.https.window.js b/tests/wpt/tests/fledge/tentative/clear-origin-joined-ad-interest-groups.https.window.js index 7d6e715ac45..097978a7858 100644 --- a/tests/wpt/tests/fledge/tentative/clear-origin-joined-ad-interest-groups.https.window.js +++ b/tests/wpt/tests/fledge/tentative/clear-origin-joined-ad-interest-groups.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/component-ads.https.window.js b/tests/wpt/tests/fledge/tentative/component-ads.https.window.js index 8493025429e..6fec80102bb 100644 --- a/tests/wpt/tests/fledge/tentative/component-ads.https.window.js +++ b/tests/wpt/tests/fledge/tentative/component-ads.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=/common/subset-tests.js // META: script=resources/fledge-util.sub.js diff --git a/tests/wpt/tests/fledge/tentative/component-auction.https.window.js b/tests/wpt/tests/fledge/tentative/component-auction.https.window.js index bf804e68579..054ad8c742e 100644 --- a/tests/wpt/tests/fledge/tentative/component-auction.https.window.js +++ b/tests/wpt/tests/fledge/tentative/component-auction.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=/common/subset-tests.js // META: script=resources/fledge-util.sub.js diff --git a/tests/wpt/tests/fledge/tentative/cross-origin.https.window.js b/tests/wpt/tests/fledge/tentative/cross-origin.https.window.js index eed74c522f2..9669f2790bc 100644 --- a/tests/wpt/tests/fledge/tentative/cross-origin.https.window.js +++ b/tests/wpt/tests/fledge/tentative/cross-origin.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=/common/subset-tests.js // META: script=resources/fledge-util.sub.js diff --git a/tests/wpt/tests/fledge/tentative/currency.https.window.js b/tests/wpt/tests/fledge/tentative/currency.https.window.js index 99943cecbf9..f1b2bba8734 100644 --- a/tests/wpt/tests/fledge/tentative/currency.https.window.js +++ b/tests/wpt/tests/fledge/tentative/currency.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/deprecated-render-url-replacements.https.window.js b/tests/wpt/tests/fledge/tentative/deprecated-render-url-replacements.https.window.js index 4f8bc1cc7f0..75377ca7aa3 100644 --- a/tests/wpt/tests/fledge/tentative/deprecated-render-url-replacements.https.window.js +++ b/tests/wpt/tests/fledge/tentative/deprecated-render-url-replacements.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/direct-from-seller-signals.https.window.js b/tests/wpt/tests/fledge/tentative/direct-from-seller-signals.https.window.js index d0c0e550c42..7f9baa978c0 100644 --- a/tests/wpt/tests/fledge/tentative/direct-from-seller-signals.https.window.js +++ b/tests/wpt/tests/fledge/tentative/direct-from-seller-signals.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js @@ -10,7 +11,8 @@ // META: variant=?17-20 // META: variant=?21-24 // META: variant=?25-28 -// META: variant=?29-last +// META: variant=?29-32 +// META: variant=?33-36 "use strict;" @@ -614,3 +616,35 @@ subsetTest(promise_test, async test => { { directFromSellerSignalsHeaderAdSlot: 'adSlot/1' } ); }, 'Test invalid directFromSellerSignals with duplicate values in response.'); + +subsetTest(promise_test, async test => { + const uuid = generateUuid(test); + await fetchDirectFromSellerSignals({'Buyer-Origin': window.location.origin}); + await runReportTest( + test, uuid, + directFromSellerSignalsValidatorCode( + uuid, 'sellerSignals/null', + /*expectedAuctionSignals=*/ null, /*expectedPerBuyerSignals=*/ null), + // expectedReportURLs + [createSellerReportURL(uuid), createBidderReportURL(uuid)], + // renderURLOverride + null, + // auctionConfigOverrides + {directFromSellerSignalsHeaderAdSlot: 'null'}); +}, 'directFromSellerSignals slot named "null"'); + +subsetTest(promise_test, async test => { + const uuid = generateUuid(test); + await fetchDirectFromSellerSignals({'Buyer-Origin': window.location.origin}); + await runReportTest( + test, uuid, + directFromSellerSignalsValidatorCode( + uuid, /*expectedSellerSignals=*/ null, + /*expectedAuctionSignals=*/ null, /*expectedPerBuyerSignals=*/ null), + // expectedReportURLs + [createSellerReportURL(uuid), createBidderReportURL(uuid)], + // renderURLOverride + null, + // auctionConfigOverrides + {directFromSellerSignalsHeaderAdSlot: null}); +}, 'null directFromSellerSignals slot'); diff --git a/tests/wpt/tests/fledge/tentative/generate-bid-browser-signals.https.window.js b/tests/wpt/tests/fledge/tentative/generate-bid-browser-signals.https.window.js index c7078ae08ad..75a8b8368d4 100644 --- a/tests/wpt/tests/fledge/tentative/generate-bid-browser-signals.https.window.js +++ b/tests/wpt/tests/fledge/tentative/generate-bid-browser-signals.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/get-interest-group-auction-data.https.window.js b/tests/wpt/tests/fledge/tentative/get-interest-group-auction-data.https.window.js index ec7a873fd51..3788045c8c2 100644 --- a/tests/wpt/tests/fledge/tentative/get-interest-group-auction-data.https.window.js +++ b/tests/wpt/tests/fledge/tentative/get-interest-group-auction-data.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/ba-fledge-util.sub.js // META: script=resources/fledge-util.sub.js diff --git a/tests/wpt/tests/fledge/tentative/interest-group-passed-to-generate-bid.https.window.js b/tests/wpt/tests/fledge/tentative/interest-group-passed-to-generate-bid.https.window.js index 2fb346bbe3b..172cbab4664 100644 --- a/tests/wpt/tests/fledge/tentative/interest-group-passed-to-generate-bid.https.window.js +++ b/tests/wpt/tests/fledge/tentative/interest-group-passed-to-generate-bid.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/interest-group-update.https.window.js b/tests/wpt/tests/fledge/tentative/interest-group-update.https.window.js index 59b3736b096..ceac2c79a6e 100644 --- a/tests/wpt/tests/fledge/tentative/interest-group-update.https.window.js +++ b/tests/wpt/tests/fledge/tentative/interest-group-update.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/join-leave-ad-interest-group-in-fenced-frame.https.window.js b/tests/wpt/tests/fledge/tentative/join-leave-ad-interest-group-in-fenced-frame.https.window.js index e6836ab2f45..1e2824666cc 100644 --- a/tests/wpt/tests/fledge/tentative/join-leave-ad-interest-group-in-fenced-frame.https.window.js +++ b/tests/wpt/tests/fledge/tentative/join-leave-ad-interest-group-in-fenced-frame.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/join-leave-ad-interest-group.https.window.js b/tests/wpt/tests/fledge/tentative/join-leave-ad-interest-group.https.window.js index 02148ef36b7..68a4e9d09c9 100644 --- a/tests/wpt/tests/fledge/tentative/join-leave-ad-interest-group.https.window.js +++ b/tests/wpt/tests/fledge/tentative/join-leave-ad-interest-group.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/kanon-status-below-threshold.https.window.js b/tests/wpt/tests/fledge/tentative/kanon-status-below-threshold.https.window.js index 787283d687f..6f3c2f572a1 100644 --- a/tests/wpt/tests/fledge/tentative/kanon-status-below-threshold.https.window.js +++ b/tests/wpt/tests/fledge/tentative/kanon-status-below-threshold.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/kanon-status-not-calculated.https.window.js b/tests/wpt/tests/fledge/tentative/kanon-status-not-calculated.https.window.js index 4a750cd3529..87a66c106fb 100644 --- a/tests/wpt/tests/fledge/tentative/kanon-status-not-calculated.https.window.js +++ b/tests/wpt/tests/fledge/tentative/kanon-status-not-calculated.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/no-winner.https.window.js b/tests/wpt/tests/fledge/tentative/no-winner.https.window.js index 6e02139c810..2632a95deee 100644 --- a/tests/wpt/tests/fledge/tentative/no-winner.https.window.js +++ b/tests/wpt/tests/fledge/tentative/no-winner.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/register-ad-beacon.https.window.js b/tests/wpt/tests/fledge/tentative/register-ad-beacon.https.window.js index 3643e446627..d74f0dab5e5 100644 --- a/tests/wpt/tests/fledge/tentative/register-ad-beacon.https.window.js +++ b/tests/wpt/tests/fledge/tentative/register-ad-beacon.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/reporting-arguments.https.window.js b/tests/wpt/tests/fledge/tentative/reporting-arguments.https.window.js index db6ef2d35a5..a3b546f5964 100644 --- a/tests/wpt/tests/fledge/tentative/reporting-arguments.https.window.js +++ b/tests/wpt/tests/fledge/tentative/reporting-arguments.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/reporting-ids.https.window.js b/tests/wpt/tests/fledge/tentative/reporting-ids.https.window.js index bcc02b09785..43c78987f1e 100644 --- a/tests/wpt/tests/fledge/tentative/reporting-ids.https.window.js +++ b/tests/wpt/tests/fledge/tentative/reporting-ids.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js @@ -306,4 +307,4 @@ makeTest({ reportResultComparison: `browserSignals.selectedBuyerAndSellerReportingId === undefined && browserSignals.buyerAndSellerReportingId === undefined && browserSignals.buyerReportingId === undefined`, -});
\ No newline at end of file +}); diff --git a/tests/wpt/tests/fledge/tentative/resources/direct-from-seller-signals.py b/tests/wpt/tests/fledge/tentative/resources/direct-from-seller-signals.py index 14f5ce156e7..6787b7b4788 100644 --- a/tests/wpt/tests/fledge/tentative/resources/direct-from-seller-signals.py +++ b/tests/wpt/tests/fledge/tentative/resources/direct-from-seller-signals.py @@ -115,6 +115,10 @@ def main(request, response): "adSlot": "adSlot/0", }, { + "adSlot": "null", + "sellerSignals": "sellerSignals/null", + }, + { "adSlot": "adSlot/1", "sellerSignals": "sellerSignals/1", }, diff --git a/tests/wpt/tests/fledge/tentative/resources/service-worker-helper.js b/tests/wpt/tests/fledge/tentative/resources/service-worker-helper.js new file mode 100644 index 00000000000..cc001813597 --- /dev/null +++ b/tests/wpt/tests/fledge/tentative/resources/service-worker-helper.js @@ -0,0 +1,21 @@ +"use strict;" + +// Service workers, once activated, will use 'clients.claim()' +// so that clients loaded in the same scope do not need to be reloaded +// before their fetches will go through this service worker. +// (https://developer.mozilla.org/en-US/docs/Web/API/Clients/claim) +self.addEventListener("activate", (event) => { + event.waitUntil(clients.claim()); +}); + +// The service worker intercepts fetch calls and posts a message with the url to the +// 'requests-test' broadcast channel, which the test should be listening for. +self.addEventListener('fetch', (event) => { + const requestChannel = new BroadcastChannel('requests-test'); + var url = event.request.url; + + requestChannel.postMessage({ + url: url, + message: "Service worker saw this URL: " + url + }); +});
\ No newline at end of file diff --git a/tests/wpt/tests/fledge/tentative/resources/service-worker-helper.js.headers b/tests/wpt/tests/fledge/tentative/resources/service-worker-helper.js.headers new file mode 100644 index 00000000000..98dfc8c8674 --- /dev/null +++ b/tests/wpt/tests/fledge/tentative/resources/service-worker-helper.js.headers @@ -0,0 +1 @@ +Service-Worker-Allowed: /fledge/tentative/
\ No newline at end of file diff --git a/tests/wpt/tests/fledge/tentative/resources/subordinate-frame.sub.html b/tests/wpt/tests/fledge/tentative/resources/subordinate-frame.sub.html index ea1f0c44d62..4aeccd00c6d 100644 --- a/tests/wpt/tests/fledge/tentative/resources/subordinate-frame.sub.html +++ b/tests/wpt/tests/fledge/tentative/resources/subordinate-frame.sub.html @@ -21,6 +21,26 @@ if (!message_dest) message_dest = window.parent; + // In order to use some WPT test fixture features in another frame + // (particularly, testdriver), we need to set the test context for the test + // driver. This is main window driving the test. + // + // To find that window, follow both parent and opener links to very end; + // keeping in mind that top-level windows' parent fields loop back to + // themselves. + let main_test_window = window; + while (true) { + if (main_test_window.opener) { + main_test_window = main_test_window.opener; + } else if (main_test_window.parent !== main_test_window) { + main_test_window = main_test_window.parent; + } else { + break; + } + } + + test_driver.set_test_context(main_test_window); + // Fake Test class that only supports adding cleanup callbacks, // primarily to leave interest groups once the test is complete. function Test() { diff --git a/tests/wpt/tests/fledge/tentative/round-a-value.https.window.js b/tests/wpt/tests/fledge/tentative/round-a-value.https.window.js index 90523e2256c..2195b45ea5f 100644 --- a/tests/wpt/tests/fledge/tentative/round-a-value.https.window.js +++ b/tests/wpt/tests/fledge/tentative/round-a-value.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: timeout=long diff --git a/tests/wpt/tests/fledge/tentative/score-ad-browser-signals.https.window.js b/tests/wpt/tests/fledge/tentative/score-ad-browser-signals.https.window.js index f20412cfc78..ac9d7e337c2 100644 --- a/tests/wpt/tests/fledge/tentative/score-ad-browser-signals.https.window.js +++ b/tests/wpt/tests/fledge/tentative/score-ad-browser-signals.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/send-report-to.https.window.js b/tests/wpt/tests/fledge/tentative/send-report-to.https.window.js index e3cf0a95f17..163443cb76d 100644 --- a/tests/wpt/tests/fledge/tentative/send-report-to.https.window.js +++ b/tests/wpt/tests/fledge/tentative/send-report-to.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/fledge/tentative/server-response.https.window.js b/tests/wpt/tests/fledge/tentative/server-response.https.window.js index b0981ca0fe8..adc079f015a 100644 --- a/tests/wpt/tests/fledge/tentative/server-response.https.window.js +++ b/tests/wpt/tests/fledge/tentative/server-response.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/ba-fledge-util.sub.js // META: script=resources/fledge-util.sub.js diff --git a/tests/wpt/tests/fledge/tentative/service-worker-request-visibility.https.window.js b/tests/wpt/tests/fledge/tentative/service-worker-request-visibility.https.window.js new file mode 100644 index 00000000000..8b8618420e5 --- /dev/null +++ b/tests/wpt/tests/fledge/tentative/service-worker-request-visibility.https.window.js @@ -0,0 +1,162 @@ +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=/common/utils.js +// META: script=resources/fledge-util.sub.js +// META: script=/common/subset-tests.js +// META: timeout=long +// META: variant=?1-last + +"use strict;" + +const SERVICE_WORKER_SCRIPT = "resources/service-worker-helper.js"; + +// List of URL fragments that uniquely identify private requests. +// These are used to detect if a service worker has inadvertently +// accessed any of these private requests, which should not be visible to it. +const PRIVATE_REQUEST_FILE_NAMES = [ + 'trusted-bidding-signals.py', + 'update-url.py', // This requires another test, since it takes a while, + // see TODO file for more info. + 'wasm-helper.py', + 'bidding-logic.py', + 'decision-logic.py', + 'trusted-scoring-signals.py', + 'trusted-bidding-signals.py', + 'bidder_report', + 'seller_report' +]; + +// List of URL fragments that uniquely identify public requests. +// These are used to verify that a service worker can correctly +// access and intercept these public requests as expected. +const PUBLIC_REQUEST_FILE_NAMES = [ + 'direct-from-seller-signals.py', +]; + +const COMPLETE_TEST_URL = 'complete-test' + +const CURRENT_SCOPE = "/fledge/tentative/" + +async function registerAndActivateServiceWorker(test) { + // Unregister existing service worker (if any) + const existingRegistration = await navigator.serviceWorker.getRegistration(CURRENT_SCOPE); + if (existingRegistration) { + await existingRegistration.unregister(); + } + + // Register new service worker + var newRegistration = await navigator.serviceWorker.register(`./${SERVICE_WORKER_SCRIPT}`, { scope: CURRENT_SCOPE }); + + test.add_cleanup(async () => { + await newRegistration.unregister(); + }); + + await navigator.serviceWorker.ready; + + // Wait for the page to be controlled by the service worker. + // This is needed as navigator.serviceWorker.ready does not + // guarantee that the page is being controlled. + // See https://github.com/slightlyoff/ServiceWorker/issues/799. + await new Promise(resolve => { + if (navigator.serviceWorker.controller) { + resolve(); + } else { + navigator.serviceWorker.addEventListener('controllerchange', resolve); + } + }); + + // Validate the service worker + if (!navigator.serviceWorker.controller.scriptURL.includes(SERVICE_WORKER_SCRIPT)) { + throw new Error('Failed to register service worker'); + } +} + +async function setUpServiceWorkerAndGetBroadcastChannel(test) { + await registerAndActivateServiceWorker(test); + return new BroadcastChannel("requests-test"); +} + +// Waits for a service worker to observe specific URL filenames via a BroadcastChannel. +// Resolves when all expected URL filenames are seen. +function awaitServiceWorkerURLPromise(broadcastChannel, expectedURLFileNames, + unexpectedURLFileNames) { + const seenURLs = new Set(); + return new Promise((resolve, reject) => { + broadcastChannel.addEventListener('message', (event) => { + var url = event.data.url; + var fileName = url.substring(url.lastIndexOf('/') + 1); + if (expectedURLFileNames.includes(fileName)) { + seenURLs.add(fileName); + } + if (unexpectedURLFileNames.includes(fileName)) { + reject(`unexpected result: ${fileName}`); + } + // Resolve when all `expectedURLs` have been seen. + if (seenURLs.size === expectedURLFileNames.length) { + resolve(); + } + }); + }); +} + +// Tests that public requests are seen by the service worker. +// Specifically anything that contains: +// - 'direct-from-seller-signals.py' + +// This test works by having the service worker send a message over +// the broadcastChannel, if it sees a request that contains any of +// the following strings above, it will send a 'passed' result and +// also change the variable 'finish_test', to true, so that guarantees +// that the request was seen before we complete the test. +subsetTest(promise_test, async test => { + const broadcastChannel = await setUpServiceWorkerAndGetBroadcastChannel(test); + let finishTest = awaitServiceWorkerURLPromise( + broadcastChannel, + PUBLIC_REQUEST_FILE_NAMES, + PRIVATE_REQUEST_FILE_NAMES); + + await fetchDirectFromSellerSignals({ 'Buyer-Origin': window.location.origin }); + await finishTest; +}, "Make sure service workers do see public requests."); + +// Tests that private requests are not seen by the service worker. +// Specifically anything that contains: +// - 'resources/trusted-bidding-signals.py' +// - 'resources/trusted-scoring-signals.py' +// - 'wasm-helper.py' +// - 'bidding-logic.py' +// - 'decision-logic.py' +// - 'seller_report' +// - 'bidder_report' + +// This test works by having the service worker send a message +// over the broadcastChannel, if it sees a request that contains +// any of the following strings above, it will send a 'failed' +// result which will cause assert_false case to fail. +subsetTest(promise_test, async test => { + const uuid = generateUuid(test); + const broadcastChannel = await setUpServiceWorkerAndGetBroadcastChannel(test); + + let finishTest = awaitServiceWorkerURLPromise( + broadcastChannel, + /*expectedURLFileNames=*/[COMPLETE_TEST_URL], + PRIVATE_REQUEST_FILE_NAMES) + + let interestGroupOverrides = { + biddingWasmHelperURL: `${RESOURCE_PATH}wasm-helper.py`, + trustedBiddingSignalsURL: TRUSTED_BIDDING_SIGNALS_URL, + trustedScoringSignalsURL: TRUSTED_SCORING_SIGNALS_URL, + }; + + await joinInterestGroup(test, uuid, interestGroupOverrides); + await runBasicFledgeAuctionAndNavigate(test, uuid); + // By verifying that these requests are observed we can assume + // none of the other requests were seen by the service-worker. + await waitForObservedRequests( + uuid, + [createBidderReportURL(uuid), createSellerReportURL(uuid)]); + + // We use this fetch to complete the test. + await fetch(COMPLETE_TEST_URL); + await finishTest; +}, "Make sure service workers do not see private requests"); diff --git a/tests/wpt/tests/fledge/tentative/tie.https.window.js b/tests/wpt/tests/fledge/tentative/tie.https.window.js index c87d10f2016..f528df8fb02 100644 --- a/tests/wpt/tests/fledge/tentative/tie.https.window.js +++ b/tests/wpt/tests/fledge/tentative/tie.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: timeout=long diff --git a/tests/wpt/tests/fledge/tentative/trusted-bidding-signals.https.window.js b/tests/wpt/tests/fledge/tentative/trusted-bidding-signals.https.window.js index 205c6895a06..1775b3e77a3 100644 --- a/tests/wpt/tests/fledge/tentative/trusted-bidding-signals.https.window.js +++ b/tests/wpt/tests/fledge/tentative/trusted-bidding-signals.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=/common/subset-tests.js // META: script=resources/fledge-util.sub.js diff --git a/tests/wpt/tests/fledge/tentative/trusted-scoring-signals.https.window.js b/tests/wpt/tests/fledge/tentative/trusted-scoring-signals.https.window.js index 46570da3e41..d664b4f308e 100644 --- a/tests/wpt/tests/fledge/tentative/trusted-scoring-signals.https.window.js +++ b/tests/wpt/tests/fledge/tentative/trusted-scoring-signals.https.window.js @@ -1,4 +1,5 @@ // META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.blur.exceptions.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.blur.exceptions.tentative.html index 6ac5d225c88..ac1fbe72299 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.blur.exceptions.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.blur.exceptions.tentative.html @@ -1,14 +1,14 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.blur.exceptions</title> +<title>Canvas test: 2d.filter.layers.blur.exceptions.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> <link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> <body class="show_output"> -<h1>2d.filter.layers.blur.exceptions</h1> +<h1>2d.filter.layers.blur.exceptions.tentative</h1> <p class="desc">Test exceptions on gaussianBlur filter</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.colorMatrix.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.colorMatrix.tentative.html index 103e0bf2032..4080111454f 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.colorMatrix.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.colorMatrix.tentative.html @@ -1,14 +1,14 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.colorMatrix</title> +<title>Canvas test: 2d.filter.layers.colorMatrix.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> <link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> <body class="show_output"> -<h1>2d.filter.layers.colorMatrix</h1> +<h1>2d.filter.layers.colorMatrix.tentative</h1> <p class="desc">Test the functionality of ColorMatrix filters</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete-expected.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative-expected.html index 7c1736dfe9a..bbf96c36083 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete-expected.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.discrete</title> -<h1>2d.filter.layers.componentTransfer.discrete</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.discrete.tentative</title> +<h1>2d.filter.layers.componentTransfer.discrete.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with discrete type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative.html index 249f7915cc0..4a307d75a8f 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.discrete-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.discrete.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.discrete</title> -<h1>2d.filter.layers.componentTransfer.discrete</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.discrete.tentative</title> +<h1>2d.filter.layers.componentTransfer.discrete.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with discrete type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma-expected.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative-expected.html index e7fae58eef0..ef6b62ee4e4 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma-expected.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.gamma</title> -<h1>2d.filter.layers.componentTransfer.gamma</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.gamma.tentative</title> +<h1>2d.filter.layers.componentTransfer.gamma.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with gamma type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative.html index 53722ee02b8..43390dbdd0b 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.gamma-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.gamma.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.gamma</title> -<h1>2d.filter.layers.componentTransfer.gamma</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.gamma.tentative</title> +<h1>2d.filter.layers.componentTransfer.gamma.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with gamma type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity-expected.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative-expected.html index 699eaae699f..ec20a498a7b 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity-expected.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.identity</title> -<h1>2d.filter.layers.componentTransfer.identity</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.identity.tentative</title> +<h1>2d.filter.layers.componentTransfer.identity.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with identity type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative.html index 62739dc1a0a..10a9853213e 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.identity.tentative.html @@ -1,9 +1,9 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.identity-expected.html"> -<title>Canvas test: 2d.filter.layers.componentTransfer.identity</title> -<h1>2d.filter.layers.componentTransfer.identity</h1> +<link rel="match" href="2d.filter.layers.componentTransfer.identity.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.componentTransfer.identity.tentative</title> +<h1>2d.filter.layers.componentTransfer.identity.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with identity type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear-expected.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative-expected.html index 6845f9f15cb..ec44da12bcd 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear-expected.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.linear</title> -<h1>2d.filter.layers.componentTransfer.linear</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.linear.tentative</title> +<h1>2d.filter.layers.componentTransfer.linear.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with linear type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative.html index ebf7cf0b48a..5e2404b204d 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.linear-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.linear.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.linear</title> -<h1>2d.filter.layers.componentTransfer.linear</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.linear.tentative</title> +<h1>2d.filter.layers.componentTransfer.linear.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with linear type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table-expected.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative-expected.html index bb4b056ef1a..e4135657957 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table-expected.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.table</title> -<h1>2d.filter.layers.componentTransfer.table</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.table.tentative</title> +<h1>2d.filter.layers.componentTransfer.table.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with table type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative.html index b7c4050b40c..43af2bc7d9e 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.table.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.table-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.table.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.table</title> -<h1>2d.filter.layers.componentTransfer.table</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.table.tentative</title> +<h1>2d.filter.layers.componentTransfer.table.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with table type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html index 7d2e31b5f7c..b32ca05be53 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html @@ -1,14 +1,14 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.convolveMatrix.exceptions</title> +<title>Canvas test: 2d.filter.layers.convolveMatrix.exceptions.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> <link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> <body class="show_output"> -<h1>2d.filter.layers.convolveMatrix.exceptions</h1> +<h1>2d.filter.layers.convolveMatrix.exceptions.tentative</h1> <p class="desc">Test exceptions on CanvasFilter() convolveMatrix</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.tentative.html index c1792a554f5..9bda089659d 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.exceptions.tentative.html @@ -1,14 +1,14 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.dropShadow.exceptions</title> +<title>Canvas test: 2d.filter.layers.dropShadow.exceptions.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> <link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> <body class="show_output"> -<h1>2d.filter.layers.dropShadow.exceptions</h1> +<h1>2d.filter.layers.dropShadow.exceptions.tentative</h1> <p class="desc">Test exceptions on CanvasFilter() dropShadow object</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow-expected.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative-expected.html index 78534c0d48f..a0cb127c401 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow-expected.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.dropShadow</title> -<h1>2d.filter.layers.dropShadow</h1> +<title>Canvas test: 2d.filter.layers.dropShadow.tentative</title> +<h1>2d.filter.layers.dropShadow.tentative</h1> <p class="desc">Test CanvasFilter() dropShadow object.</p> <svg xmlns="http://www.w3.org/2000/svg" diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative.html index 0e3af8d12fe..6f31ef221e6 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.dropShadow.tentative.html @@ -1,9 +1,9 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.dropShadow-expected.html"> -<title>Canvas test: 2d.filter.layers.dropShadow</title> -<h1>2d.filter.layers.dropShadow</h1> +<link rel="match" href="2d.filter.layers.dropShadow.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.dropShadow.tentative</title> +<h1>2d.filter.layers.dropShadow.tentative</h1> <p class="desc">Test CanvasFilter() dropShadow object.</p> <canvas id="canvas" width="520" height="420"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur-expected.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative-expected.html index 8039c77eced..f02f08d5f83 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur-expected.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.gaussianBlur</title> -<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur</h1> +<title>Canvas test: 2d.filter.layers.gaussianBlur.tentative</title> +<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur.tentative</h1> <p class="desc">Test CanvasFilter() with gaussianBlur.</p> <div style="display: grid; grid-gap: 4px; diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.gaussianBlur.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative.html index 72908aa1796..0bfd704ca1d 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.gaussianBlur.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.gaussianBlur.tentative.html @@ -1,9 +1,9 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.gaussianBlur-expected.html"> -<title>Canvas test: 2d.filter.layers.gaussianBlur</title> -<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur</h1> +<link rel="match" href="2d.filter.layers.gaussianBlur.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.gaussianBlur.tentative</title> +<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur.tentative</h1> <p class="desc">Test CanvasFilter() with gaussianBlur.</p> <div style="display: grid; grid-gap: 4px; diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.html b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.tentative.html index 618528ce23b..620410de544 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.html +++ b/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.turbulence.inputTypes.tentative.html @@ -1,14 +1,14 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.turbulence.inputTypes</title> +<title>Canvas test: 2d.filter.layers.turbulence.inputTypes.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> <link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> <body class="show_output"> -<h1>2d.filter.layers.turbulence.inputTypes</h1> +<h1>2d.filter.layers.turbulence.inputTypes.tentative</h1> <p class="desc">Test exceptions on CanvasFilter() turbulence object</p> diff --git a/tests/wpt/tests/html/canvas/element/manual/imagebitmap/common.sub.js b/tests/wpt/tests/html/canvas/element/manual/imagebitmap/common.sub.js index 18890352022..525d28553aa 100644 --- a/tests/wpt/tests/html/canvas/element/manual/imagebitmap/common.sub.js +++ b/tests/wpt/tests/html/canvas/element/manual/imagebitmap/common.sub.js @@ -32,25 +32,29 @@ function makeOffscreenCanvas() { }); } -var imageBitmapVideoPromise = new Promise(function(resolve, reject) { - var video = document.createElement("video"); - video.oncanplaythrough = function() { - resolve(video); - }; - video.onerror = reject; - - // preload=auto is required to ensure a frame is available once - // canplaythrough is fired. The default of preload=metadata does not - // gaurantee this. - video.preload = "auto"; - video.src = getVideoURI("/images/pattern"); - - // Prevent WebKit from garbage collecting event handlers. - window._video = video; -}); +function makeMakeVideo(src) { + return function () { + return new Promise(function(resolve, reject) { + var video = document.createElement("video"); + video.oncanplaythrough = function() { + resolve(video); + }; + video.onerror = reject; + + // preload=auto is required to ensure a frame is available once + // canplaythrough is fired. The default of preload=metadata does not + // gaurantee this. + video.preload = "auto"; + video.src = getVideoURI(src); + + // Prevent WebKit from garbage collecting event handlers. + window._video = video; + }); + } +} function makeVideo() { - return imageBitmapVideoPromise; + return makeMakeVideo("/images/pattern")(); } var imageBitmapDataUrlVideoPromise = fetch(getVideoURI("/images/pattern")) diff --git a/tests/wpt/tests/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html b/tests/wpt/tests/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html index 2ddf3648f5a..24ee1d3a9e6 100644 --- a/tests/wpt/tests/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html +++ b/tests/wpt/tests/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html @@ -9,19 +9,20 @@ <link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> <body> <script> -function testCanvasDisplayingPattern(canvas, width, height) +function testCanvasDisplayingPattern(canvas, width, height, expected) { var tolerance = 10; // high tolerance for differing color management results - const check = (x, y, r, g, b, a) => - _assertPixelApprox(canvas, x,y, r,g,b,a, tolerance); + const check = (x, y, rgba) => + _assertPixelApprox(canvas, x,y, rgba[0], rgba[1], rgba[2], rgba[3], tolerance); - check(1 * width / 4, 1 * height / 4, 124,0,27,255); - check(3 * width / 4, 1 * height / 4, 0,124,46,255); - check(1 * width / 4, 3 * height / 4, 60,0,123,255); - check(3 * width / 4, 3 * height / 4, 0,0,0,255); + check(1 * width / 4, 1 * height / 4, expected[0]); + check(3 * width / 4, 1 * height / 4, expected[1]); + check(1 * width / 4, 3 * height / 4, expected[2]); + check(3 * width / 4, 3 * height / 4, expected[3]); } -function testDrawImageBitmap(source, options) + +function testDrawImageBitmap(source, options, expected) { var canvas = document.createElement("canvas"); canvas.width = 20; @@ -29,19 +30,29 @@ function testDrawImageBitmap(source, options) var ctx = canvas.getContext("2d"); return createImageBitmap(source, options).then(imageBitmap => { ctx.drawImage(imageBitmap, 0, 0); - testCanvasDisplayingPattern(canvas, 20, 20); + testCanvasDisplayingPattern(canvas, 20, 20, expected); }); } +const wide_gamut_pattern_expected = [[124,0,27,255],[0,124,46,255],[60,0,123,255],[0,0,0,255]]; +const video_bb0000_expected = [[187,0,0,255],[187,0,0,255],[187,0,0,255],[187,0,0,255]]; + var wideGamutImageSourceTypes = [ - {name: 'a bitmap HTMLImageElement', factory: makeMakeHTMLImage("/images/wide-gamut-pattern.png")}, - {name: 'a Blob', factory: makeBlob("/images/wide-gamut-pattern.png")}, + {name: 'a bitmap HTMLImageElement', + factory: makeMakeHTMLImage("/images/wide-gamut-pattern.png"), + expected: wide_gamut_pattern_expected}, + {name: 'a Blob', + factory: makeBlob("/images/wide-gamut-pattern.png"), + expected: wide_gamut_pattern_expected}, + {name: 'a Video', + factory: makeMakeVideo("/html/canvas/element/manual/wide-gamut-canvas/resources/Display-P3-BB0000"), + expected: video_bb0000_expected} ]; -for (let { name, factory } of wideGamutImageSourceTypes) { +for (let { name, factory, expected } of wideGamutImageSourceTypes) { promise_test(function() { return factory().then(function(img) { - return testDrawImageBitmap(img, {colorSpaceConversion: "none"}); + return testDrawImageBitmap(img, {colorSpaceConversion: "none"}, expected); }); }, `createImageBitmap from ${name}, and drawImage on the created ImageBitmap with colorSpaceConversion: none`); } diff --git a/tests/wpt/tests/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html b/tests/wpt/tests/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html index 8b2a33e85b1..ee7023a3988 100644 --- a/tests/wpt/tests/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html +++ b/tests/wpt/tests/html/canvas/element/manual/imagebitmap/createImageBitmap-exif-orientation.html @@ -13,11 +13,11 @@ function loadImage(src) { }); } -function checkColors(ctx, w, h, expectedColors) { +function checkColors(ctx, w, h, tileW, tileH, expectedColors) { let data = ctx.getImageData(0, 0, w, h).data; for (let [row, col, r, g, b, a] of expectedColors) { - let x = col * 80 + 40; - let y = row * 80 + 40; + let x = col * tileW + tileW / 2; + let y = row * tileH + tileH / 2; let i = (x + y * w) * 4; let expected = [r, g, b, a]; @@ -38,7 +38,7 @@ async_test(function(t) { .then((image) => createImageBitmap(image)) .then(t.step_func_done(function(imageBitmap) { ctx.drawImage(imageBitmap, 0, 0); - checkColors(ctx, canvas.width, canvas.height, [ + checkColors(ctx, canvas.width, canvas.height, 80, 80, [ // row, col, r, g, b, a [0, 0, 255, 0, 0, 255], [0, 1, 0, 255, 0, 255], @@ -63,7 +63,7 @@ async_test(function(t) { .then((image) => createImageBitmap(image, { imageOrientation: "flipY" })) .then(t.step_func_done(function(imageBitmap) { ctx.drawImage(imageBitmap, 0, 0); - checkColors(ctx, canvas.width, canvas.height, [ + checkColors(ctx, canvas.width, canvas.height, 80, 80, [ // row, col, r, g, b, a [0, 0, 255, 128, 128, 255], [0, 1, 128, 255, 128, 255], @@ -88,7 +88,7 @@ async_test(function(t) { .then(image => createImageBitmap(image, 80, 0, 160, 160)) .then(t.step_func_done(function(imageBitmap) { ctx.drawImage(imageBitmap, 0, 0); - checkColors(ctx, canvas.width, canvas.height, [ + checkColors(ctx, canvas.width, canvas.height, 80, 80, [ // row, col, r, g, b, a [0, 0, 0, 255, 0, 255], [0, 1, 0, 0, 255, 255], @@ -109,7 +109,7 @@ async_test(function(t) { .then(image => createImageBitmap(image, 80, 0, 160, 160, { imageOrientation: "flipY" })) .then(t.step_func_done(function(imageBitmap) { ctx.drawImage(imageBitmap, 0, 0); - checkColors(ctx, canvas.width, canvas.height, [ + checkColors(ctx, canvas.width, canvas.height, 80, 80, [ // row, col, r, g, b, a [0, 0, 128, 255, 128, 255], [0, 1, 128, 128, 255, 255], @@ -118,4 +118,72 @@ async_test(function(t) { ]); })); }, "createImageBitmap with EXIF rotation, imageOrientation flipY, and cropping"); + +async_test(function(t) { + const canvas = document.createElement("canvas"); + canvas.width = 160; + canvas.height = 80; + document.body.append(canvas); + + const ctx = canvas.getContext("2d"); + loadImage("resources/squares_6.jpg") + .then((image) => createImageBitmap(image, { resizeWidth:160, resizeHeight:80} )) + .then(t.step_func_done(function(imageBitmap) { + ctx.drawImage(imageBitmap, 0, 0); + checkColors(ctx, canvas.width, canvas.height, 40, 40, [ + // row, col, r, g, b, a + [0, 0, 255, 0, 0, 255], + [0, 1, 0, 255, 0, 255], + [0, 2, 0, 0, 255, 255], + [0, 3, 0, 0, 0, 255], + [1, 0, 255, 128, 128, 255], + [1, 1, 128, 255, 128, 255], + [1, 2, 128, 128, 255, 255], + [1, 3, 128, 128, 128, 255], + ]); + })); +}, "createImageBitmap with EXIF rotation, imageOrientation from-image, no cropping, and resize"); + +async_test(function(t) { + const canvas = document.createElement("canvas"); + canvas.width = 80; + canvas.height = 80; + document.body.append(canvas); + + const ctx = canvas.getContext("2d"); + loadImage("resources/squares_6.jpg") + .then(image => createImageBitmap(image, 80, 0, 160, 160, { imageOrientation: "flipY", resizeWidth:80, resizeHeight:80 })) + .then(t.step_func_done(function(imageBitmap) { + ctx.drawImage(imageBitmap, 0, 0); + checkColors(ctx, canvas.width, canvas.height, 40, 40, [ + // row, col, r, g, b, a + [0, 0, 128, 255, 128, 255], + [0, 1, 128, 128, 255, 255], + [1, 0, 0, 255, 0, 255], + [1, 1, 0, 0, 255, 255], + ]); + })); +}, "createImageBitmap with EXIF rotation, imageOrientation flipY, cropping, and resize"); + +async_test(function(t) { + const canvas = document.createElement("canvas"); + canvas.width = 80; + canvas.height = 40; + document.body.append(canvas); + + const ctx = canvas.getContext("2d"); + loadImage("resources/squares_6.jpg") + .then(image => createImageBitmap(image, 80, 0, 160, 160, { imageOrientation: "flipY", resizeWidth:80, resizeHeight:40 })) + .then(t.step_func_done(function(imageBitmap) { + ctx.drawImage(imageBitmap, 0, 0); + checkColors(ctx, canvas.width, canvas.height, 40, 20, [ + // row, col, r, g, b, a + [0, 0, 128, 255, 128, 255], + [0, 1, 128, 128, 255, 255], + [1, 0, 0, 255, 0, 255], + [1, 1, 0, 0, 255, 255], + ]); + })); +}, "createImageBitmap with EXIF rotation, imageOrientation flipY, cropping, and nonuniform resize"); + </script> diff --git a/tests/wpt/tests/html/canvas/element/manual/wide-gamut-canvas/resources/Display-P3-BB0000.mp4 b/tests/wpt/tests/html/canvas/element/manual/wide-gamut-canvas/resources/Display-P3-BB0000.mp4 Binary files differnew file mode 100644 index 00000000000..b56bd621ac5 --- /dev/null +++ b/tests/wpt/tests/html/canvas/element/manual/wide-gamut-canvas/resources/Display-P3-BB0000.mp4 diff --git a/tests/wpt/tests/html/canvas/element/manual/wide-gamut-canvas/resources/Display-P3-BB0000.webm b/tests/wpt/tests/html/canvas/element/manual/wide-gamut-canvas/resources/Display-P3-BB0000.webm Binary files differnew file mode 100644 index 00000000000..3e1f929e124 --- /dev/null +++ b/tests/wpt/tests/html/canvas/element/manual/wide-gamut-canvas/resources/Display-P3-BB0000.webm diff --git a/tests/wpt/tests/html/canvas/element/path-objects/2d.path.closed.arc.html b/tests/wpt/tests/html/canvas/element/path-objects/2d.path.closed.arc.html new file mode 100644 index 00000000000..9e33d457461 --- /dev/null +++ b/tests/wpt/tests/html/canvas/element/path-objects/2d.path.closed.arc.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<meta charset="UTF-8"> +<title>Canvas test: 2d.path.closed.arc</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.path.closed.arc</h1> +<p class="desc">line caps should not be drawn on closed arcs</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="300" height="300"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("line caps should not be drawn on closed arcs"); +_addTest(function(canvas, ctx) { + + ctx.beginPath(); + ctx.strokeStyle = 'red'; + ctx.lineWidth = 20; + ctx.lineCap = 'square'; + ctx.arc(150, 150, 50, 0, 2 * Math.PI); + ctx.closePath(); + ctx.stroke(); + // The pixel (209, 148) is part of the line cap, but not part of the circle. + // Linecap is not drawn if the circle is closed, so the pixel is not red. + assert_not_equals(ctx.getImageData(209, 148, 1, 1).data, [255, 0, 0, 255]) + +}); +</script> + diff --git a/tests/wpt/tests/html/canvas/element/path-objects/2d.path.open.arc.html b/tests/wpt/tests/html/canvas/element/path-objects/2d.path.open.arc.html new file mode 100644 index 00000000000..c0dc086ac32 --- /dev/null +++ b/tests/wpt/tests/html/canvas/element/path-objects/2d.path.open.arc.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<meta charset="UTF-8"> +<title>Canvas test: 2d.path.open.arc</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.path.open.arc</h1> +<p class="desc">line caps should be drawn on open arcs</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="300" height="300"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("line caps should be drawn on open arcs"); +_addTest(function(canvas, ctx) { + + ctx.beginPath(); + ctx.strokeStyle = 'red'; + ctx.lineWidth = 20; + ctx.lineCap = 'square'; + ctx.arc(150, 150, 50, 0, 2 * Math.PI); + ctx.stroke(); + // The pixel (209, 148) is part of the line cap, but not part of the circle. + // Linecap is drawn with 360 degree arc, so the pixel is red. + _assertPixelApprox(canvas, 209,148, 255,0,0,255, 1); + +}); +</script> + diff --git a/tests/wpt/tests/html/canvas/element/text/2d.text.measure.caret-position.tentative.html b/tests/wpt/tests/html/canvas/element/text/2d.text.measure.caret-position.tentative.html index adba1b73b13..4b223c8a0a3 100644 --- a/tests/wpt/tests/html/canvas/element/text/2d.text.measure.caret-position.tentative.html +++ b/tests/wpt/tests/html/canvas/element/text/2d.text.measure.caret-position.tentative.html @@ -70,6 +70,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -89,7 +91,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -166,6 +176,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -185,7 +197,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -262,6 +282,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -281,7 +303,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -358,6 +388,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -377,7 +409,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -454,6 +494,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -473,7 +515,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -550,6 +600,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -569,7 +621,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -646,6 +706,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -665,7 +727,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -742,6 +812,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -761,7 +833,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -838,6 +918,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -857,7 +939,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -934,6 +1024,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -953,7 +1045,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1030,6 +1130,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1049,7 +1151,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1126,6 +1236,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1145,7 +1257,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1222,6 +1342,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1241,7 +1363,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1318,6 +1448,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1337,7 +1469,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1414,6 +1554,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1433,7 +1575,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1510,6 +1660,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1529,7 +1681,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1606,6 +1766,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1625,7 +1787,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1702,6 +1872,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1721,7 +1893,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1798,6 +1978,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1817,7 +1999,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1894,6 +2084,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1913,7 +2105,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2000,6 +2200,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2020,7 +2222,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2107,6 +2317,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2127,7 +2339,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2214,6 +2434,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2234,7 +2456,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2321,6 +2551,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2341,7 +2573,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2428,6 +2668,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2448,7 +2690,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2535,6 +2785,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2555,7 +2807,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2642,6 +2902,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2662,7 +2924,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2749,6 +3019,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2769,7 +3041,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2856,6 +3136,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2876,7 +3158,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2963,6 +3253,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2983,7 +3275,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3070,6 +3370,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3090,7 +3392,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3177,6 +3487,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3197,7 +3509,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3284,6 +3604,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3304,7 +3626,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3391,6 +3721,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3411,7 +3743,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3498,6 +3838,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3518,7 +3860,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3605,6 +3955,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3625,7 +3977,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3712,6 +4072,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3732,7 +4094,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3819,6 +4189,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3839,7 +4211,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3926,6 +4306,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3946,7 +4328,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -4033,6 +4423,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -4053,7 +4445,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); diff --git a/tests/wpt/tests/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html b/tests/wpt/tests/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html new file mode 100644 index 00000000000..1c5352bd5ed --- /dev/null +++ b/tests/wpt/tests/html/canvas/element/text/2d.text.measure.text-clusters-exceptions.tentative.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<meta charset="UTF-8"> +<title>Canvas test: 2d.text.measure.text-clusters-exceptions.tentative</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.text.measure.text-clusters-exceptions.tentative</h1> +<p class="desc">Check that TextMetrics::getTextClusters() throws when using invalid indexes.</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Check that TextMetrics::getTextClusters() throws when using invalid indexes."); +_addTest(function(canvas, ctx) { + + const kTexts = [ + 'UNAVAILABLE', + '🏁🎶🏁', + ')(あ)(', + '-abcd_' + ] + + for (const text of kTexts) { + const tm = ctx.measureText(text); + // Handled by the IDL binding. + assert_throws_js(TypeError, () => tm.getTextClusters(-1, 0) ); + assert_throws_js(TypeError, () => tm.getTextClusters(0, -1) ); + assert_throws_js(TypeError, () => tm.getTextClusters(-1, -1) ); + // Thrown in TextMetrics. + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(text.length, 0) ); + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(0, text.length + 1) ); + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(text.length, text.length + 1) ); + } + +}); +</script> + diff --git a/tests/wpt/tests/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html b/tests/wpt/tests/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html new file mode 100644 index 00000000000..63c7cce72be --- /dev/null +++ b/tests/wpt/tests/html/canvas/element/text/2d.text.measure.text-clusters-split.tentative.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<meta charset="UTF-8"> +<title>Canvas test: 2d.text.measure.text-clusters-split.tentative</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> +<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css"> +<body class="show_output"> + +<h1>2d.text.measure.text-clusters-split.tentative</h1> +<p class="desc">Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together.</p> + + +<p class="output">Actual output:</p> +<canvas id="c" class="output" width="400" height="200"><p class="fallback">FAIL (fallback content)</p></canvas> + +<ul id="d"></ul> +<script> +var t = async_test("Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together."); +_addTest(function(canvas, ctx) { + + ctx.font = '50px serif'; + const text = 'ABC ☺️❤️'; + ctx.fillText(text, 20, 100); + const tm = ctx.measureText(text); + const clusters = tm.getTextClusters(); + // Should return 6 clusters(A|B|C| |☺️|❤️). + _assertSame(clusters.length, 6, "clusters.length", "6"); + // A from position 0 to 1. + _assertSame(clusters[0].begin, 0, "clusters[\""+(0)+"\"].begin", "0"); + _assertSame(clusters[0].end, 1, "clusters[\""+(0)+"\"].end", "1"); + // B from position 1 to 2. + _assertSame(clusters[1].begin, 1, "clusters[\""+(1)+"\"].begin", "1"); + _assertSame(clusters[1].end, 2, "clusters[\""+(1)+"\"].end", "2"); + // C from position 2 to 3. + _assertSame(clusters[2].begin, 2, "clusters[\""+(2)+"\"].begin", "2"); + _assertSame(clusters[2].end, 3, "clusters[\""+(2)+"\"].end", "3"); + // space from position 3 to 4. + _assertSame(clusters[3].begin, 3, "clusters[\""+(3)+"\"].begin", "3"); + _assertSame(clusters[3].end, 4, "clusters[\""+(3)+"\"].end", "4"); + // ☺️ from position 4 to 6. + _assertSame(clusters[4].begin, 4, "clusters[\""+(4)+"\"].begin", "4"); + _assertSame(clusters[4].end, 6, "clusters[\""+(4)+"\"].end", "6"); + // ❤️ from position 6 to 8. + _assertSame(clusters[5].begin, 6, "clusters[\""+(5)+"\"].begin", "6"); + _assertSame(clusters[5].end, 8, "clusters[\""+(5)+"\"].end", "8"); + +}); +</script> + diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.html index 1c433f82470..a2f913f1603 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.html @@ -1,12 +1,12 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>OffscreenCanvas test: 2d.filter.layers.blur.exceptions</title> +<title>OffscreenCanvas test: 2d.filter.layers.blur.exceptions.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> -<h1>2d.filter.layers.blur.exceptions</h1> +<h1>2d.filter.layers.blur.exceptions.tentative</h1> <p class="desc">Test exceptions on gaussianBlur filter</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.worker.js b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.worker.js index a053b8113c4..7f200ed9995 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.worker.js +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.blur.exceptions.tentative.worker.js @@ -1,5 +1,5 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -// OffscreenCanvas test in a worker:2d.filter.layers.blur.exceptions +// OffscreenCanvas test in a worker:2d.filter.layers.blur.exceptions.tentative // Description:Test exceptions on gaussianBlur filter // Note: diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.html index 1db973fa8a2..e69587e55dd 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.html @@ -1,12 +1,12 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>OffscreenCanvas test: 2d.filter.layers.colorMatrix</title> +<title>OffscreenCanvas test: 2d.filter.layers.colorMatrix.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> -<h1>2d.filter.layers.colorMatrix</h1> +<h1>2d.filter.layers.colorMatrix.tentative</h1> <p class="desc">Test the functionality of ColorMatrix filters</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.worker.js b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.js index 12cdff38688..beda91cbc57 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.worker.js +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.colorMatrix.tentative.worker.js @@ -1,5 +1,5 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -// OffscreenCanvas test in a worker:2d.filter.layers.colorMatrix +// OffscreenCanvas test in a worker:2d.filter.layers.colorMatrix.tentative // Description:Test the functionality of ColorMatrix filters // Note: diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete-expected.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative-expected.html index 7c1736dfe9a..bbf96c36083 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.discrete-expected.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.discrete</title> -<h1>2d.filter.layers.componentTransfer.discrete</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.discrete.tentative</title> +<h1>2d.filter.layers.componentTransfer.discrete.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with discrete type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.html index db2479f55ca..b72a42b7c29 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.discrete-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.discrete.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.discrete</title> -<h1>2d.filter.layers.componentTransfer.discrete</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.discrete.tentative</title> +<h1>2d.filter.layers.componentTransfer.discrete.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with discrete type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.w.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.w.html index c098017cb05..4ad1b74ed9c 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.w.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.discrete.tentative.w.html @@ -2,10 +2,10 @@ <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> <html class="reftest-wait"> -<link rel="match" href="2d.filter.layers.componentTransfer.discrete-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.discrete.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.discrete</title> -<h1>2d.filter.layers.componentTransfer.discrete</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.discrete.tentative</title> +<h1>2d.filter.layers.componentTransfer.discrete.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with discrete type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma-expected.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative-expected.html index e7fae58eef0..ef6b62ee4e4 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.gamma-expected.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.gamma</title> -<h1>2d.filter.layers.componentTransfer.gamma</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.gamma.tentative</title> +<h1>2d.filter.layers.componentTransfer.gamma.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with gamma type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.html index 58f45c42168..cba3615168b 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.gamma-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.gamma.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.gamma</title> -<h1>2d.filter.layers.componentTransfer.gamma</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.gamma.tentative</title> +<h1>2d.filter.layers.componentTransfer.gamma.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with gamma type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.w.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.w.html index a59bc255061..8e946c27940 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.w.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.gamma.tentative.w.html @@ -2,10 +2,10 @@ <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> <html class="reftest-wait"> -<link rel="match" href="2d.filter.layers.componentTransfer.gamma-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.gamma.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.gamma</title> -<h1>2d.filter.layers.componentTransfer.gamma</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.gamma.tentative</title> +<h1>2d.filter.layers.componentTransfer.gamma.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with gamma type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity-expected.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative-expected.html index 699eaae699f..ec20a498a7b 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity-expected.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.identity</title> -<h1>2d.filter.layers.componentTransfer.identity</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.identity.tentative</title> +<h1>2d.filter.layers.componentTransfer.identity.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with identity type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.html index e4582647902..57fbe556486 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.html @@ -1,9 +1,9 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.identity-expected.html"> -<title>Canvas test: 2d.filter.layers.componentTransfer.identity</title> -<h1>2d.filter.layers.componentTransfer.identity</h1> +<link rel="match" href="2d.filter.layers.componentTransfer.identity.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.componentTransfer.identity.tentative</title> +<h1>2d.filter.layers.componentTransfer.identity.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with identity type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.w.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.w.html index b60110f56fb..a12b7cb302d 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.w.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.identity.tentative.w.html @@ -2,9 +2,9 @@ <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> <html class="reftest-wait"> -<link rel="match" href="2d.filter.layers.componentTransfer.identity-expected.html"> -<title>Canvas test: 2d.filter.layers.componentTransfer.identity</title> -<h1>2d.filter.layers.componentTransfer.identity</h1> +<link rel="match" href="2d.filter.layers.componentTransfer.identity.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.componentTransfer.identity.tentative</title> +<h1>2d.filter.layers.componentTransfer.identity.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with identity type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear-expected.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative-expected.html index 6845f9f15cb..ec44da12bcd 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.linear-expected.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.linear</title> -<h1>2d.filter.layers.componentTransfer.linear</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.linear.tentative</title> +<h1>2d.filter.layers.componentTransfer.linear.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with linear type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.html index aaf8acaaeb0..2893fa48ccc 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.linear-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.linear.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.linear</title> -<h1>2d.filter.layers.componentTransfer.linear</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.linear.tentative</title> +<h1>2d.filter.layers.componentTransfer.linear.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with linear type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.w.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.w.html index f0b3dc7b6de..c824c1bd07b 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.w.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.linear.tentative.w.html @@ -2,10 +2,10 @@ <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> <html class="reftest-wait"> -<link rel="match" href="2d.filter.layers.componentTransfer.linear-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.linear.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.linear</title> -<h1>2d.filter.layers.componentTransfer.linear</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.linear.tentative</title> +<h1>2d.filter.layers.componentTransfer.linear.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with linear type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.table-expected.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative-expected.html index bb4b056ef1a..e4135657957 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.componentTransfer.table-expected.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.componentTransfer.table</title> -<h1>2d.filter.layers.componentTransfer.table</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.table.tentative</title> +<h1>2d.filter.layers.componentTransfer.table.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with table type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.html index 91e96a48850..b80daa4baca 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.componentTransfer.table-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.table.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.table</title> -<h1>2d.filter.layers.componentTransfer.table</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.table.tentative</title> +<h1>2d.filter.layers.componentTransfer.table.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with table type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.w.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.w.html index a7df25ac57a..8ea58b3014e 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.w.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.componentTransfer.table.tentative.w.html @@ -2,10 +2,10 @@ <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> <html class="reftest-wait"> -<link rel="match" href="2d.filter.layers.componentTransfer.table-expected.html"> +<link rel="match" href="2d.filter.layers.componentTransfer.table.tentative-expected.html"> <meta name=fuzzy content="maxDifference=0-2; totalPixels=0-500"> -<title>Canvas test: 2d.filter.layers.componentTransfer.table</title> -<h1>2d.filter.layers.componentTransfer.table</h1> +<title>Canvas test: 2d.filter.layers.componentTransfer.table.tentative</title> +<h1>2d.filter.layers.componentTransfer.table.tentative</h1> <p class="desc">Test pixels on CanvasFilter() componentTransfer with table type</p> <canvas id="canvas" width="100" height="100"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html index aa5020c8712..a9c55384ba5 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.html @@ -1,12 +1,12 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>OffscreenCanvas test: 2d.filter.layers.convolveMatrix.exceptions</title> +<title>OffscreenCanvas test: 2d.filter.layers.convolveMatrix.exceptions.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> -<h1>2d.filter.layers.convolveMatrix.exceptions</h1> +<h1>2d.filter.layers.convolveMatrix.exceptions.tentative</h1> <p class="desc">Test exceptions on CanvasFilter() convolveMatrix</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.worker.js b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js index fa3be89ba2f..dfbc68eb55b 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.worker.js +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.convolveMatrix.exceptions.tentative.worker.js @@ -1,5 +1,5 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -// OffscreenCanvas test in a worker:2d.filter.layers.convolveMatrix.exceptions +// OffscreenCanvas test in a worker:2d.filter.layers.convolveMatrix.exceptions.tentative // Description:Test exceptions on CanvasFilter() convolveMatrix // Note: diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.html index e4982b7c052..22f0c00ed3c 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.html @@ -1,12 +1,12 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>OffscreenCanvas test: 2d.filter.layers.dropShadow.exceptions</title> +<title>OffscreenCanvas test: 2d.filter.layers.dropShadow.exceptions.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> -<h1>2d.filter.layers.dropShadow.exceptions</h1> +<h1>2d.filter.layers.dropShadow.exceptions.tentative</h1> <p class="desc">Test exceptions on CanvasFilter() dropShadow object</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.worker.js b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.js index 65fc7512154..95ea75f8d3f 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.worker.js +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.exceptions.tentative.worker.js @@ -1,5 +1,5 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -// OffscreenCanvas test in a worker:2d.filter.layers.dropShadow.exceptions +// OffscreenCanvas test in a worker:2d.filter.layers.dropShadow.exceptions.tentative // Description:Test exceptions on CanvasFilter() dropShadow object // Note: diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow-expected.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative-expected.html index 78534c0d48f..a0cb127c401 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow-expected.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.dropShadow</title> -<h1>2d.filter.layers.dropShadow</h1> +<title>Canvas test: 2d.filter.layers.dropShadow.tentative</title> +<h1>2d.filter.layers.dropShadow.tentative</h1> <p class="desc">Test CanvasFilter() dropShadow object.</p> <svg xmlns="http://www.w3.org/2000/svg" diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.html index 273118a0a11..5a7edafe942 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.html @@ -1,9 +1,9 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.dropShadow-expected.html"> -<title>Canvas test: 2d.filter.layers.dropShadow</title> -<h1>2d.filter.layers.dropShadow</h1> +<link rel="match" href="2d.filter.layers.dropShadow.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.dropShadow.tentative</title> +<h1>2d.filter.layers.dropShadow.tentative</h1> <p class="desc">Test CanvasFilter() dropShadow object.</p> <canvas id="canvas" width="520" height="420"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.w.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.w.html index cf29fc880d6..5df5262c892 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.w.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.dropShadow.tentative.w.html @@ -2,9 +2,9 @@ <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> <html class="reftest-wait"> -<link rel="match" href="2d.filter.layers.dropShadow-expected.html"> -<title>Canvas test: 2d.filter.layers.dropShadow</title> -<h1>2d.filter.layers.dropShadow</h1> +<link rel="match" href="2d.filter.layers.dropShadow.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.dropShadow.tentative</title> +<h1>2d.filter.layers.dropShadow.tentative</h1> <p class="desc">Test CanvasFilter() dropShadow object.</p> <canvas id="canvas" width="520" height="420"> <p class="fallback">FAIL (fallback content)</p> diff --git a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.gaussianBlur-expected.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative-expected.html index 8039c77eced..f02f08d5f83 100644 --- a/tests/wpt/tests/html/canvas/element/filters/2d.filter.layers.gaussianBlur-expected.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative-expected.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>Canvas test: 2d.filter.layers.gaussianBlur</title> -<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur</h1> +<title>Canvas test: 2d.filter.layers.gaussianBlur.tentative</title> +<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur.tentative</h1> <p class="desc">Test CanvasFilter() with gaussianBlur.</p> <div style="display: grid; grid-gap: 4px; diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.html index 212f4f1dd02..f4bbfd8bf2c 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.html @@ -1,9 +1,9 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<link rel="match" href="2d.filter.layers.gaussianBlur-expected.html"> -<title>Canvas test: 2d.filter.layers.gaussianBlur</title> -<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur</h1> +<link rel="match" href="2d.filter.layers.gaussianBlur.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.gaussianBlur.tentative</title> +<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur.tentative</h1> <p class="desc">Test CanvasFilter() with gaussianBlur.</p> <div style="display: grid; grid-gap: 4px; diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.w.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.w.html index 39bf90207c5..ffbed3f53b7 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.w.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.gaussianBlur.tentative.w.html @@ -2,9 +2,9 @@ <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> <html class="reftest-wait"> -<link rel="match" href="2d.filter.layers.gaussianBlur-expected.html"> -<title>Canvas test: 2d.filter.layers.gaussianBlur</title> -<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur</h1> +<link rel="match" href="2d.filter.layers.gaussianBlur.tentative-expected.html"> +<title>Canvas test: 2d.filter.layers.gaussianBlur.tentative</title> +<h1 style="font-size: 20px;">2d.filter.layers.gaussianBlur.tentative</h1> <p class="desc">Test CanvasFilter() with gaussianBlur.</p> <script>pending_tests = 5;</script> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.html b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.html index 897c22e853e..2b47274f705 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.html +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.html @@ -1,12 +1,12 @@ <!DOCTYPE html> <!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> <meta charset="UTF-8"> -<title>OffscreenCanvas test: 2d.filter.layers.turbulence.inputTypes</title> +<title>OffscreenCanvas test: 2d.filter.layers.turbulence.inputTypes.tentative</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/html/canvas/resources/canvas-tests.js"></script> -<h1>2d.filter.layers.turbulence.inputTypes</h1> +<h1>2d.filter.layers.turbulence.inputTypes.tentative</h1> <p class="desc">Test exceptions on CanvasFilter() turbulence object</p> diff --git a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.worker.js b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.js index 3728566c997..8b68d25ef88 100644 --- a/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.worker.js +++ b/tests/wpt/tests/html/canvas/offscreen/filters/2d.filter.layers.turbulence.inputTypes.tentative.worker.js @@ -1,5 +1,5 @@ // DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -// OffscreenCanvas test in a worker:2d.filter.layers.turbulence.inputTypes +// OffscreenCanvas test in a worker:2d.filter.layers.turbulence.inputTypes.tentative // Description:Test exceptions on CanvasFilter() turbulence object // Note: diff --git a/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.closed.arc.html b/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.closed.arc.html new file mode 100644 index 00000000000..21f111e2aa2 --- /dev/null +++ b/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.closed.arc.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<meta charset="UTF-8"> +<title>OffscreenCanvas test: 2d.path.closed.arc</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.path.closed.arc</h1> +<p class="desc">line caps should not be drawn on closed arcs</p> + + +<script> +var t = async_test("line caps should not be drawn on closed arcs"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(300, 300); + var ctx = canvas.getContext('2d'); + + ctx.beginPath(); + ctx.strokeStyle = 'red'; + ctx.lineWidth = 20; + ctx.lineCap = 'square'; + ctx.arc(150, 150, 50, 0, 2 * Math.PI); + ctx.closePath(); + ctx.stroke(); + // The pixel (209, 148) is part of the line cap, but not part of the circle. + // Linecap is not drawn if the circle is closed, so the pixel is not red. + assert_not_equals(ctx.getImageData(209, 148, 1, 1).data, [255, 0, 0, 255]) + t.done(); + +}); +</script> diff --git a/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.closed.arc.worker.js b/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.closed.arc.worker.js new file mode 100644 index 00000000000..8bc03917225 --- /dev/null +++ b/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.closed.arc.worker.js @@ -0,0 +1,31 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.path.closed.arc +// Description:line caps should not be drawn on closed arcs +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("line caps should not be drawn on closed arcs"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(300, 300); + var ctx = canvas.getContext('2d'); + + ctx.beginPath(); + ctx.strokeStyle = 'red'; + ctx.lineWidth = 20; + ctx.lineCap = 'square'; + ctx.arc(150, 150, 50, 0, 2 * Math.PI); + ctx.closePath(); + ctx.stroke(); + // The pixel (209, 148) is part of the line cap, but not part of the circle. + // Linecap is not drawn if the circle is closed, so the pixel is not red. + assert_not_equals(ctx.getImageData(209, 148, 1, 1).data, [255, 0, 0, 255]) + t.done(); +}); +done(); diff --git a/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.open.arc.html b/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.open.arc.html new file mode 100644 index 00000000000..416f06c2173 --- /dev/null +++ b/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.open.arc.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<meta charset="UTF-8"> +<title>OffscreenCanvas test: 2d.path.open.arc</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.path.open.arc</h1> +<p class="desc">line caps should be drawn on open arcs</p> + + +<script> +var t = async_test("line caps should be drawn on open arcs"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(300, 300); + var ctx = canvas.getContext('2d'); + + ctx.beginPath(); + ctx.strokeStyle = 'red'; + ctx.lineWidth = 20; + ctx.lineCap = 'square'; + ctx.arc(150, 150, 50, 0, 2 * Math.PI); + ctx.stroke(); + // The pixel (209, 148) is part of the line cap, but not part of the circle. + // Linecap is drawn with 360 degree arc, so the pixel is red. + _assertPixelApprox(canvas, 209,148, 255,0,0,255, 1); + t.done(); + +}); +</script> diff --git a/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.open.arc.worker.js b/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.open.arc.worker.js new file mode 100644 index 00000000000..25d762dfaee --- /dev/null +++ b/tests/wpt/tests/html/canvas/offscreen/path-objects/2d.path.open.arc.worker.js @@ -0,0 +1,30 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.path.open.arc +// Description:line caps should be drawn on open arcs +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("line caps should be drawn on open arcs"); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(300, 300); + var ctx = canvas.getContext('2d'); + + ctx.beginPath(); + ctx.strokeStyle = 'red'; + ctx.lineWidth = 20; + ctx.lineCap = 'square'; + ctx.arc(150, 150, 50, 0, 2 * Math.PI); + ctx.stroke(); + // The pixel (209, 148) is part of the line cap, but not part of the circle. + // Linecap is drawn with 360 degree arc, so the pixel is red. + _assertPixelApprox(canvas, 209,148, 255,0,0,255, 1); + t.done(); +}); +done(); diff --git a/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.caret-position.tentative.html b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.caret-position.tentative.html index aa52eede316..3c1873aaf1f 100644 --- a/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.caret-position.tentative.html +++ b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.caret-position.tentative.html @@ -69,6 +69,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -88,7 +90,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -165,6 +175,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -184,7 +196,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -261,6 +281,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -280,7 +302,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -357,6 +387,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -376,7 +408,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -453,6 +493,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -472,7 +514,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -549,6 +599,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -568,7 +620,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -645,6 +705,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -664,7 +726,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -741,6 +811,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -760,7 +832,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -837,6 +917,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -856,7 +938,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -933,6 +1023,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -952,7 +1044,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1029,6 +1129,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1048,7 +1150,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1125,6 +1235,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1144,7 +1256,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1221,6 +1341,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1240,7 +1362,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1317,6 +1447,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1336,7 +1468,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1413,6 +1553,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1432,7 +1574,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1509,6 +1659,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1528,7 +1680,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1605,6 +1765,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1624,7 +1786,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1701,6 +1871,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1720,7 +1892,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1797,6 +1977,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1816,7 +1998,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1893,6 +2083,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1912,7 +2104,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1999,6 +2199,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2019,7 +2221,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2106,6 +2316,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2126,7 +2338,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2213,6 +2433,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2233,7 +2455,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2320,6 +2550,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2340,7 +2572,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2427,6 +2667,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2447,7 +2689,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2534,6 +2784,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2554,7 +2806,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2641,6 +2901,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2661,7 +2923,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2748,6 +3018,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2768,7 +3040,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2855,6 +3135,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2875,7 +3157,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -2962,6 +3252,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -2982,7 +3274,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3069,6 +3369,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3089,7 +3391,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3176,6 +3486,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3196,7 +3508,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3283,6 +3603,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3303,7 +3625,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3390,6 +3720,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3410,7 +3742,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3497,6 +3837,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3517,7 +3859,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3604,6 +3954,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3624,7 +3976,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3711,6 +4071,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3731,7 +4093,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3818,6 +4188,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3838,7 +4210,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -3925,6 +4305,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -3945,7 +4327,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -4032,6 +4422,8 @@ test(t => { 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -4052,7 +4444,15 @@ test(t => { doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); diff --git a/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html new file mode 100644 index 00000000000..0df29ba458f --- /dev/null +++ b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<meta charset="UTF-8"> +<title>OffscreenCanvas test: 2d.text.measure.text-clusters-exceptions.tentative</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.text.measure.text-clusters-exceptions.tentative</h1> +<p class="desc">Check that TextMetrics::getTextClusters() throws when using invalid indexes.</p> + + +<script> +var t = async_test("Check that TextMetrics::getTextClusters() throws when using invalid indexes."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + const kTexts = [ + 'UNAVAILABLE', + '🏁🎶🏁', + ')(あ)(', + '-abcd_' + ] + + for (const text of kTexts) { + const tm = ctx.measureText(text); + // Handled by the IDL binding. + assert_throws_js(TypeError, () => tm.getTextClusters(-1, 0) ); + assert_throws_js(TypeError, () => tm.getTextClusters(0, -1) ); + assert_throws_js(TypeError, () => tm.getTextClusters(-1, -1) ); + // Thrown in TextMetrics. + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(text.length, 0) ); + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(0, text.length + 1) ); + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(text.length, text.length + 1) ); + } + t.done(); + +}); +</script> diff --git a/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js new file mode 100644 index 00000000000..fd99cb0a0f3 --- /dev/null +++ b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-exceptions.tentative.worker.js @@ -0,0 +1,42 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.text.measure.text-clusters-exceptions.tentative +// Description:Check that TextMetrics::getTextClusters() throws when using invalid indexes. +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Check that TextMetrics::getTextClusters() throws when using invalid indexes."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(100, 50); + var ctx = canvas.getContext('2d'); + + const kTexts = [ + 'UNAVAILABLE', + '🏁🎶🏁', + ')(あ)(', + '-abcd_' + ] + + for (const text of kTexts) { + const tm = ctx.measureText(text); + // Handled by the IDL binding. + assert_throws_js(TypeError, () => tm.getTextClusters(-1, 0) ); + assert_throws_js(TypeError, () => tm.getTextClusters(0, -1) ); + assert_throws_js(TypeError, () => tm.getTextClusters(-1, -1) ); + // Thrown in TextMetrics. + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(text.length, 0) ); + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(0, text.length + 1) ); + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(text.length, text.length + 1) ); + } + t.done(); +}); +done(); diff --git a/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html new file mode 100644 index 00000000000..6a5fd475795 --- /dev/null +++ b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. --> +<meta charset="UTF-8"> +<title>OffscreenCanvas test: 2d.text.measure.text-clusters-split.tentative</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/html/canvas/resources/canvas-tests.js"></script> + +<h1>2d.text.measure.text-clusters-split.tentative</h1> +<p class="desc">Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together.</p> + + +<script> +var t = async_test("Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(400, 200); + var ctx = canvas.getContext('2d'); + + ctx.font = '50px serif'; + const text = 'ABC ☺️❤️'; + ctx.fillText(text, 20, 100); + const tm = ctx.measureText(text); + const clusters = tm.getTextClusters(); + // Should return 6 clusters(A|B|C| |☺️|❤️). + _assertSame(clusters.length, 6, "clusters.length", "6"); + // A from position 0 to 1. + _assertSame(clusters[0].begin, 0, "clusters[\""+(0)+"\"].begin", "0"); + _assertSame(clusters[0].end, 1, "clusters[\""+(0)+"\"].end", "1"); + // B from position 1 to 2. + _assertSame(clusters[1].begin, 1, "clusters[\""+(1)+"\"].begin", "1"); + _assertSame(clusters[1].end, 2, "clusters[\""+(1)+"\"].end", "2"); + // C from position 2 to 3. + _assertSame(clusters[2].begin, 2, "clusters[\""+(2)+"\"].begin", "2"); + _assertSame(clusters[2].end, 3, "clusters[\""+(2)+"\"].end", "3"); + // space from position 3 to 4. + _assertSame(clusters[3].begin, 3, "clusters[\""+(3)+"\"].begin", "3"); + _assertSame(clusters[3].end, 4, "clusters[\""+(3)+"\"].end", "4"); + // ☺️ from position 4 to 6. + _assertSame(clusters[4].begin, 4, "clusters[\""+(4)+"\"].begin", "4"); + _assertSame(clusters[4].end, 6, "clusters[\""+(4)+"\"].end", "6"); + // ❤️ from position 6 to 8. + _assertSame(clusters[5].begin, 6, "clusters[\""+(5)+"\"].begin", "6"); + _assertSame(clusters[5].end, 8, "clusters[\""+(5)+"\"].end", "8"); + t.done(); + +}); +</script> diff --git a/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js new file mode 100644 index 00000000000..f98c323e0e2 --- /dev/null +++ b/tests/wpt/tests/html/canvas/offscreen/text/2d.text.measure.text-clusters-split.tentative.worker.js @@ -0,0 +1,46 @@ +// DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. +// OffscreenCanvas test in a worker:2d.text.measure.text-clusters-split.tentative +// Description:Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together. +// Note: + +importScripts("/resources/testharness.js"); +importScripts("/html/canvas/resources/canvas-tests.js"); + +var t = async_test("Test that getTextClusters() splits the input correctly into the minimal clusters, keeping emojis together."); +var t_pass = t.done.bind(t); +var t_fail = t.step_func(function(reason) { + throw reason; +}); +t.step(function() { + + var canvas = new OffscreenCanvas(400, 200); + var ctx = canvas.getContext('2d'); + + ctx.font = '50px serif'; + const text = 'ABC ☺️❤️'; + ctx.fillText(text, 20, 100); + const tm = ctx.measureText(text); + const clusters = tm.getTextClusters(); + // Should return 6 clusters(A|B|C| |☺️|❤️). + _assertSame(clusters.length, 6, "clusters.length", "6"); + // A from position 0 to 1. + _assertSame(clusters[0].begin, 0, "clusters[\""+(0)+"\"].begin", "0"); + _assertSame(clusters[0].end, 1, "clusters[\""+(0)+"\"].end", "1"); + // B from position 1 to 2. + _assertSame(clusters[1].begin, 1, "clusters[\""+(1)+"\"].begin", "1"); + _assertSame(clusters[1].end, 2, "clusters[\""+(1)+"\"].end", "2"); + // C from position 2 to 3. + _assertSame(clusters[2].begin, 2, "clusters[\""+(2)+"\"].begin", "2"); + _assertSame(clusters[2].end, 3, "clusters[\""+(2)+"\"].end", "3"); + // space from position 3 to 4. + _assertSame(clusters[3].begin, 3, "clusters[\""+(3)+"\"].begin", "3"); + _assertSame(clusters[3].end, 4, "clusters[\""+(3)+"\"].end", "4"); + // ☺️ from position 4 to 6. + _assertSame(clusters[4].begin, 4, "clusters[\""+(4)+"\"].begin", "4"); + _assertSame(clusters[4].end, 6, "clusters[\""+(4)+"\"].end", "6"); + // ❤️ from position 6 to 8. + _assertSame(clusters[5].begin, 6, "clusters[\""+(5)+"\"].begin", "6"); + _assertSame(clusters[5].end, 8, "clusters[\""+(5)+"\"].end", "8"); + t.done(); +}); +done(); diff --git a/tests/wpt/tests/html/canvas/tools/gentestutilsunion.py b/tests/wpt/tests/html/canvas/tools/gentestutilsunion.py index ae323a12873..760368cf222 100644 --- a/tests/wpt/tests/html/canvas/tools/gentestutilsunion.py +++ b/tests/wpt/tests/html/canvas/tools/gentestutilsunion.py @@ -281,7 +281,7 @@ def _validate_test(test: _TestParams): r'@assert pixel .* 0,0,0,0;', test['code']): print(f'Probable incorrect pixel test in {test["name"]}') - if 'size' in test and (not isinstance(test['size'], list) + if 'size' in test and (not isinstance(test['size'], tuple) or len(test['size']) != 2): raise InvalidTestDefinitionError( f'Invalid canvas size "{test["size"]}" in test {test["name"]}. ' @@ -363,7 +363,7 @@ class _Variant(): Default values are added for certain parameters, if missing.""" params = { 'desc': '', - 'size': [100, 50], + 'size': (100, 50), # Test name, which ultimately is used as filename. File variant # dimension names are appended to this to produce unique filenames. 'name': '', @@ -459,6 +459,9 @@ class _Variant(): self._params['canvas_types'] = self._get_canvas_types() self._params['template_type'] = self._get_template_type() + if isinstance(self._params['size'], list): + self._params['size'] = tuple(self._params['size']) + if 'reference' in self._params: self._params['reference'] = _preprocess_code( jinja_env, self._params['reference'], self._params) diff --git a/tests/wpt/tests/html/canvas/tools/yaml-new/filters.yaml b/tests/wpt/tests/html/canvas/tools/yaml-new/filters.yaml index f83776e3888..be28001fa73 100644 --- a/tests/wpt/tests/html/canvas/tools/yaml-new/filters.yaml +++ b/tests/wpt/tests/html/canvas/tools/yaml-new/filters.yaml @@ -88,7 +88,7 @@ ctx.filter = 'this string is not a filter and should do nothing'; @assert ctx.filter.toString() == '[object CanvasFilter]'; -- name: 2d.filter.{{ variant_name }}.blur.exceptions{{ tentative }} +- name: 2d.filter.{{ variant_name }}.blur.exceptions.tentative desc: Test exceptions on gaussianBlur filter code: | @assert throws TypeError {{ filter_declaration | replace("param", @@ -113,9 +113,8 @@ filter_declaration: |- ctx.filter = new CanvasFilter( param) - tentative: .tentative -- name: 2d.filter.{{ variant_name }}.colorMatrix{{ tentative }} +- name: 2d.filter.{{ variant_name }}.colorMatrix.tentative desc: Test the functionality of ColorMatrix filters code: | @assert throws TypeError {{ filter_declaration | replace("param", @@ -208,9 +207,8 @@ filter_declaration: |- ctx.filter = new CanvasFilter( param) - tentative: .tentative -- name: 2d.filter.{{ variant_name }}.convolveMatrix.exceptions{{ tentative }} +- name: 2d.filter.{{ variant_name }}.convolveMatrix.exceptions.tentative desc: Test exceptions on CanvasFilter() convolveMatrix code: | @assert throws TypeError {{ filter_declaration | replace("param", @@ -260,10 +258,9 @@ filter_declaration: |- ctx.filter = new CanvasFilter( param) - tentative: .tentative - name: >- - 2d.filter.{{ variant_name }}.componentTransfer.linear{{ tentative }} + 2d.filter.{{ variant_name }}.componentTransfer.linear.tentative desc: Test pixels on CanvasFilter() componentTransfer with linear type size: [100, 100] fuzzy: maxDifference=0-2; totalPixels=0-500 @@ -331,10 +328,9 @@ canvasFilterObject: filter_declaration: |- ctx.filter = new CanvasFilter(param) - tentative: .tentative - name: >- - 2d.filter.{{ variant_name }}.componentTransfer.identity{{ tentative }} + 2d.filter.{{ variant_name }}.componentTransfer.identity.tentative desc: Test pixels on CanvasFilter() componentTransfer with identity type size: [100, 100] code: | @@ -382,10 +378,9 @@ canvasFilterObject: filter_declaration: |- ctx.filter = new CanvasFilter(param) - tentative: .tentative - name: >- - 2d.filter.{{ variant_name }}.componentTransfer.gamma{{ tentative }} + 2d.filter.{{ variant_name }}.componentTransfer.gamma.tentative desc: Test pixels on CanvasFilter() componentTransfer with gamma type size: [100, 100] fuzzy: maxDifference=0-2; totalPixels=0-500 @@ -457,10 +452,9 @@ canvasFilterObject: filter_declaration: |- ctx.filter = new CanvasFilter(param) - tentative: .tentative - name: >- - 2d.filter.{{ variant_name }}.componentTransfer.table{{ tentative }} + 2d.filter.{{ variant_name }}.componentTransfer.table.tentative desc: Test pixels on CanvasFilter() componentTransfer with table type size: [100, 100] fuzzy: maxDifference=0-2; totalPixels=0-500 @@ -536,10 +530,9 @@ canvasFilterObject: filter_declaration: |- ctx.filter = new CanvasFilter(param) - tentative: .tentative - name: >- - 2d.filter.{{ variant_name }}.componentTransfer.discrete{{ tentative }} + 2d.filter.{{ variant_name }}.componentTransfer.discrete.tentative desc: Test pixels on CanvasFilter() componentTransfer with discrete type size: [100, 100] fuzzy: maxDifference=0-2; totalPixels=0-500 @@ -614,10 +607,9 @@ canvasFilterObject: filter_declaration: |- ctx.filter = new CanvasFilter(param) - tentative: .tentative - name: >- - 2d.filter.{{ variant_names[0] }}.gaussianBlur{{ tentative }} + 2d.filter.{{ variant_names[0] }}.gaussianBlur.tentative desc: Test CanvasFilter() with gaussianBlur. size: [100, 100] code: | @@ -648,7 +640,6 @@ canvasFilterObject: filter_declaration: |- ctx.filter = new CanvasFilter(param); - tentative: .tentative - x-only: blur_x: 4 blur_y: 0 @@ -665,7 +656,7 @@ blur_x: 0 blur_y: 4 -- name: 2d.filter.{{ variant_name }}.dropShadow{{ tentative }} +- name: 2d.filter.{{ variant_name }}.dropShadow.tentative desc: Test CanvasFilter() dropShadow object. size: [520, 420] code: | @@ -825,9 +816,8 @@ canvasFilterObject: filter_declaration: |- ctx.filter = new CanvasFilter(param); - tentative: .tentative -- name: 2d.filter.{{ variant_name }}.dropShadow.exceptions{{ tentative }} +- name: 2d.filter.{{ variant_name }}.dropShadow.exceptions.tentative desc: Test exceptions on CanvasFilter() dropShadow object code: | // Should not throw an error. @@ -872,9 +862,8 @@ filter_declaration: |- ctx.filter = new CanvasFilter( param) - tentative: .tentative -- name: 2d.filter.{{ variant_name }}.turbulence.inputTypes{{ tentative }} +- name: 2d.filter.{{ variant_name }}.turbulence.inputTypes.tentative desc: Test exceptions on CanvasFilter() turbulence object code: | const errorTestCases = [ @@ -992,4 +981,3 @@ canvasFilterObject: filter_declaration: |- ctx.filter = new CanvasFilter(param) - tentative: .tentative diff --git a/tests/wpt/tests/html/canvas/tools/yaml-new/layers.yaml b/tests/wpt/tests/html/canvas/tools/yaml-new/layers.yaml index eb9edd96c7e..c96b9bbc7db 100644 --- a/tests/wpt/tests/html/canvas/tools/yaml-new/layers.yaml +++ b/tests/wpt/tests/html/canvas/tools/yaml-new/layers.yaml @@ -481,6 +481,74 @@ ctx.drawImage(canvas2, 0, 0); +- name: 2d.layer.clip-inside + desc: Check clipping set inside the layer + size: [100, 100] + code: | + ctx.beginLayer({filter: {name: "gaussianBlur", stdDeviation: 12}}); + + ctx.beginPath(); + ctx.rect(15, 15, 70, 70); + ctx.clip(); + + ctx.fillStyle = 'blue'; + ctx.fillRect(10, 10, 80, 80); + ctx.endLayer(); + reference: | + const canvas2 = new OffscreenCanvas(200, 200); + const ctx2 = canvas2.getContext('2d'); + + ctx2.beginPath(); + ctx2.rect(15, 15, 70, 70); + ctx2.clip(); + + ctx2.fillStyle = 'blue'; + ctx2.fillRect(10, 10, 80, 80); + + ctx.beginLayer({filter: {name: "gaussianBlur", stdDeviation: 12}}); + ctx.drawImage(canvas2, 0, 0); + ctx.endLayer(); + +- name: 2d.layer.clip-inside-and-outside + desc: Check clipping set inside and outside the layer + size: [100, 100] + code: | + ctx.beginPath(); + ctx.rect(15, 15, 70, 70); + ctx.clip(); + + ctx.beginLayer({filter: {name: "gaussianBlur", stdDeviation: 12}}); + + ctx.beginPath(); + ctx.rect(15, 15, 70, 70); + ctx.clip(); + + ctx.fillStyle = 'blue'; + ctx.fillRect(10, 10, 80, 80); + ctx.endLayer(); + reference: | + const canvas2 = new OffscreenCanvas(200, 200); + const ctx2 = canvas2.getContext('2d'); + + ctx2.beginPath(); + ctx2.rect(15, 15, 70, 70); + ctx2.clip(); + + ctx2.fillStyle = 'blue'; + ctx2.fillRect(10, 10, 80, 80); + + const canvas3 = new OffscreenCanvas(200, 200); + const ctx3 = canvas3.getContext('2d'); + + ctx3.beginLayer({filter: {name: "gaussianBlur", stdDeviation: 12}}); + ctx3.drawImage(canvas2, 0, 0); + ctx3.endLayer(); + + ctx.beginPath(); + ctx.rect(15, 15, 70, 70); + ctx.clip(); + ctx.drawImage(canvas3, 0, 0); + - name: 2d.layer.ctm.filter desc: Checks that parent transforms affect layer filters. size: [200, 200] @@ -664,74 +732,6 @@ ctx.fillStyle = 'green'; ctx.fillRect(0, 0, 20, 20); -- name: 2d.layer.clip-inside - desc: Check clipping set inside the layer - size: [100, 100] - code: | - ctx.beginLayer({filter: {name: "gaussianBlur", stdDeviation: 12}}); - - ctx.beginPath(); - ctx.rect(15, 15, 70, 70); - ctx.clip(); - - ctx.fillStyle = 'blue'; - ctx.fillRect(10, 10, 80, 80); - ctx.endLayer(); - reference: | - const canvas2 = new OffscreenCanvas(200, 200); - const ctx2 = canvas2.getContext('2d'); - - ctx2.beginPath(); - ctx2.rect(15, 15, 70, 70); - ctx2.clip(); - - ctx2.fillStyle = 'blue'; - ctx2.fillRect(10, 10, 80, 80); - - ctx.beginLayer({filter: {name: "gaussianBlur", stdDeviation: 12}}); - ctx.drawImage(canvas2, 0, 0); - ctx.endLayer(); - -- name: 2d.layer.clip-inside-and-outside - desc: Check clipping set inside and outside the layer - size: [100, 100] - code: | - ctx.beginPath(); - ctx.rect(15, 15, 70, 70); - ctx.clip(); - - ctx.beginLayer({filter: {name: "gaussianBlur", stdDeviation: 12}}); - - ctx.beginPath(); - ctx.rect(15, 15, 70, 70); - ctx.clip(); - - ctx.fillStyle = 'blue'; - ctx.fillRect(10, 10, 80, 80); - ctx.endLayer(); - reference: | - const canvas2 = new OffscreenCanvas(200, 200); - const ctx2 = canvas2.getContext('2d'); - - ctx2.beginPath(); - ctx2.rect(15, 15, 70, 70); - ctx2.clip(); - - ctx2.fillStyle = 'blue'; - ctx2.fillRect(10, 10, 80, 80); - - const canvas3 = new OffscreenCanvas(200, 200); - const ctx3 = canvas3.getContext('2d'); - - ctx3.beginLayer({filter: {name: "gaussianBlur", stdDeviation: 12}}); - ctx3.drawImage(canvas2, 0, 0); - ctx3.endLayer(); - - ctx.beginPath(); - ctx.rect(15, 15, 70, 70); - ctx.clip(); - ctx.drawImage(canvas3, 0, 0); - - name: 2d.layer.flush-on-frame-presentation desc: Check that layers state stack is flushed and rebuilt on frame renders. size: [200, 200] diff --git a/tests/wpt/tests/html/canvas/tools/yaml-new/path-objects.yaml b/tests/wpt/tests/html/canvas/tools/yaml-new/path-objects.yaml index 874f7a25c3d..b861bb39f34 100644 --- a/tests/wpt/tests/html/canvas/tools/yaml-new/path-objects.yaml +++ b/tests/wpt/tests/html/canvas/tools/yaml-new/path-objects.yaml @@ -1210,6 +1210,34 @@ @assert pixel 90,45 == 0,255,0,255; expected: green +- name: 2d.path.closed.arc + desc: line caps should not be drawn on closed arcs + size: [300, 300] + code: | + ctx.beginPath(); + ctx.strokeStyle = 'red'; + ctx.lineWidth = 20; + ctx.lineCap = 'square'; + ctx.arc(150, 150, 50, 0, 2 * Math.PI); + ctx.closePath(); + ctx.stroke(); + // The pixel (209, 148) is part of the line cap, but not part of the circle. + // Linecap is not drawn if the circle is closed, so the pixel is not red. + assert_not_equals(ctx.getImageData(209, 148, 1, 1).data, [255, 0, 0, 255]) + +- name: 2d.path.open.arc + desc: line caps should be drawn on open arcs + size: [300, 300] + code: | + ctx.beginPath(); + ctx.strokeStyle = 'red'; + ctx.lineWidth = 20; + ctx.lineCap = 'square'; + ctx.arc(150, 150, 50, 0, 2 * Math.PI); + ctx.stroke(); + // The pixel (209, 148) is part of the line cap, but not part of the circle. + // Linecap is drawn with 360 degree arc, so the pixel is red. + @assert pixel 209,148 ==~ 255,0,0,255 +/- 1; - name: 2d.path.rect.basic code: | diff --git a/tests/wpt/tests/html/canvas/tools/yaml-new/text.yaml b/tests/wpt/tests/html/canvas/tools/yaml-new/text.yaml index 29a765be111..4c2ae798596 100644 --- a/tests/wpt/tests/html/canvas/tools/yaml-new/text.yaml +++ b/tests/wpt/tests/html/canvas/tools/yaml-new/text.yaml @@ -1766,6 +1766,8 @@ 'UNAVAILABLE', '🏁🎶🏁', ')(あ)(', + ')(ああ)(', + 'ああ)(ああ', '--abcd__' ] @@ -1788,7 +1790,15 @@ doc_position, "for " + text + " offset " + offset); - offset = text_width / 2; + offset = text_width / 2 - 10; + adjusted_offset = alignOffset(offset, text_width); + tm_position = tm.caretPositionFromPoint(adjusted_offset); + doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); + assert_equals(tm_position, + doc_position, + "for " + text + " offset " + offset); + + offset = text_width / 2 + 10; adjusted_offset = alignOffset(offset, text_width); tm_position = tm.caretPositionFromPoint(adjusted_offset); doc_position = placeAndMeasureTextInDOM(text, text_width, adjusted_offset); @@ -1951,6 +1961,65 @@ variants: - *load-font-variant-definition +- name: 2d.text.measure.text-clusters-split.tentative + desc: >- + Test that getTextClusters() splits the input correctly into the + minimal clusters, keeping emojis together. + size: [400, 200] + code: | + ctx.font = '50px serif'; + const text = 'ABC ☺️❤️'; + ctx.fillText(text, 20, 100); + const tm = ctx.measureText(text); + const clusters = tm.getTextClusters(); + // Should return 6 clusters(A|B|C| |☺️|❤️). + @assert clusters.length === 6; + // A from position 0 to 1. + @assert clusters[0].begin === 0; + @assert clusters[0].end === 1; + // B from position 1 to 2. + @assert clusters[1].begin === 1; + @assert clusters[1].end === 2; + // C from position 2 to 3. + @assert clusters[2].begin === 2; + @assert clusters[2].end === 3; + // space from position 3 to 4. + @assert clusters[3].begin === 3; + @assert clusters[3].end === 4; + // ☺️ from position 4 to 6. + @assert clusters[4].begin === 4; + @assert clusters[4].end === 6; + // ❤️ from position 6 to 8. + @assert clusters[5].begin === 6; + @assert clusters[5].end === 8; + +- name: 2d.text.measure.text-clusters-exceptions.tentative + desc: >- + Check that TextMetrics::getTextClusters() throws when using invalid + indexes. + code: | + const kTexts = [ + 'UNAVAILABLE', + '🏁🎶🏁', + ')(あ)(', + '-abcd_' + ] + + for (const text of kTexts) { + const tm = ctx.measureText(text); + // Handled by the IDL binding. + assert_throws_js(TypeError, () => tm.getTextClusters(-1, 0) ); + assert_throws_js(TypeError, () => tm.getTextClusters(0, -1) ); + assert_throws_js(TypeError, () => tm.getTextClusters(-1, -1) ); + // Thrown in TextMetrics. + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(text.length, 0) ); + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(0, text.length + 1) ); + assert_throws_dom("IndexSizeError", + () => tm.getTextClusters(text.length, text.length + 1) ); + } + - name: 2d.text.drawing.style.absolute.spacing desc: Testing letter spacing and word spacing with absolute length code: | diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html b/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html index 26a77918e0c..c464ecf0b4b 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html +++ b/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus.html @@ -11,7 +11,9 @@ <body> <script> async_test(t => { - window.onload = () => t.done(); + addEventListener('load', t.step_func_done(() => { + assert_true(window.childLoaded); + })); }, "ensure onload happens"); </script> <div class=hidden> diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html b/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html index 074e63bf2bd..9fdb88a6390 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html +++ b/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr.html @@ -11,7 +11,9 @@ <body> <script> async_test(t => { - window.onload = () => t.done(); + addEventListener('load', t.step_func_done(() => { + assert_true(window.childLoaded); + })); }, "ensure onload happens"); </script> <div class=hidden> diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback-2.html b/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback-2.html index d904a7e1a1c..1fc082aa031 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback-2.html +++ b/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback-2.html @@ -12,9 +12,6 @@ assert_equals(loadedCount, 12, "Should have loaded all should-load elements"); }); </script> - <style> - object, embed { display: none } - </style> </head> <body> <object data="../resources/should-load.html" style="width: 100px; height: 100px"> diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-04.html b/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-04.html new file mode 100644 index 00000000000..e4bf481c755 --- /dev/null +++ b/tests/wpt/tests/html/semantics/embedded-content/the-embed-element/embed-represent-nothing-04.html @@ -0,0 +1,25 @@ +<!doctype html> +<meta charset="utf-8"> +<title>HTML Test: The embed element represents nothing when it is never being rendered</title> +<link rel="author" title="Peng Zhou" href="mailto:zhoupeng.1996@bytedance.com"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-embed-element"> +<meta name="assert" content="Check if the embed element represents nothing when it is never being rendered"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + #target { + display: none; + } +</style> +<body> + <script> + async_test(t => { + window.childLoaded = false; + addEventListener('load', t.step_func_done(() => { + assert_true(!!document.querySelector('embed')); + assert_false(window.childLoaded); + })); + }, 'ensure the element represents nothing'); + </script> + <embed id="target" src="embed-iframe.html"></embed> +</body> diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-object-element/object-in-display-none-load-event.html b/tests/wpt/tests/html/semantics/embedded-content/the-object-element/object-in-display-none-load-event.html index c8369365af0..f2a93b3e5f0 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/the-object-element/object-in-display-none-load-event.html +++ b/tests/wpt/tests/html/semantics/embedded-content/the-object-element/object-in-display-none-load-event.html @@ -1,14 +1,22 @@ <!doctype html> -<html style="display:none"> +<html> <meta charset=utf-8> <title>Test that an object in a display:none subtree does not block the load event</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script> + let objLoaded = false; + function objOnload() { + objLoaded = true; + } async_test(t => { - window.onload = t.step_func_done(); - document.documentElement.offsetTop; - }, "Load event triggered on window"); + addEventListener('load', t.step_func_done(() => { + assert_true(!!document.querySelector('object')); + assert_false(objLoaded); + })); + }, 'Load event triggered on window without the object element load'); </script> -<object data="data:text/html,"></object> +<div style="display: none;"> + <object data="data:text/html," onload="objOnload()"></object> +</div> </html> diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-object-element/object-in-object-fallback-2.html b/tests/wpt/tests/html/semantics/embedded-content/the-object-element/object-in-object-fallback-2.html index 47cf8016935..a026e59e485 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/the-object-element/object-in-object-fallback-2.html +++ b/tests/wpt/tests/html/semantics/embedded-content/the-object-element/object-in-object-fallback-2.html @@ -12,9 +12,6 @@ assert_equals(loadedCount, 12, "Should have loaded all should-load elements"); }); </script> - <style> - object { display: none } - </style> </head> <body> <object data="../resources/should-load.html" style="width: 100px; height: 100px"> diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-type-to-search.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-type-to-search.tentative.html new file mode 100644 index 00000000000..2cb7ca49108 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-type-to-search.tentative.html @@ -0,0 +1,74 @@ +<!DOCTYPE html> + +<meta name="timeout" content="long"> + +<link rel="help" href="http://crbug.com/362922565"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<style> + select, select::picker(select) { + appearance: base-select; + } +</style> + +<select id="target"> + <option></option> + <option>alpha</option> + <option id="bravo">bravo</option> + <option>charlie</option> +</select> + +<script> + const Enter = '\uE007'; + const Space = ' '; + + promise_test(async (t) => { + assert_false( + target.matches(':open'), + 'The select should initially be closed.' + ); + + assert_equals( + target.value, + '', + 'Initial select value should be empty.' + ); + + target.focus(); + assert_equals( + document.activeElement, + target, + 'The select should be focused.' + ); + + await test_driver.send_keys(document.activeElement, Space); + assert_true( + target.matches(':open'), + 'The select should be open after pressing space.' + ); + + await test_driver.send_keys(document.activeElement, 'b'); + assert_equals( + document.activeElement, + bravo, + 'The `bravo` option should be focused after pressing `b`.' + ); + assert_equals( + target.value, + '', + 'The select value should still be empty since the option was not explicitly selected.' + ); + + await test_driver.send_keys(document.activeElement, Enter); + assert_equals( + target.value, + 'bravo', + 'The select value should be `bravo` after explicit selection.' + ); + }, 'Type to search should focus but not select an option until selection is confirmed.'); +</script> diff --git a/tests/wpt/tests/html/semantics/permission-element/granted-selector.html b/tests/wpt/tests/html/semantics/permission-element/granted-selector.html new file mode 100644 index 00000000000..3ce1ad728e0 --- /dev/null +++ b/tests/wpt/tests/html/semantics/permission-element/granted-selector.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<link rel="help" href="https://github.com/WICG/PEPC/blob/main/explainer.md#locking-the-pepc-style"> +<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> +<body> + +<permission id="permission_element" type="camera"> + +<script> + promise_test(async() => { + + // Set the initial camera state to denied. + await test_driver.set_permission({name: "camera"}, "denied"); + await navigator.permissions.query({name: "camera"}); + + assert_false(permission_element.matches(":granted")); + + // Set the camera state to allowed. + await test_driver.set_permission({name: "camera"}, "granted"); + await navigator.permissions.query({name: "camera"}); + + // The granted selector should now be applied. + assert_true(permission_element.matches(":granted")); + + // Set the camera state to denied. + await test_driver.set_permission({name: "camera"}, "denied"); + await navigator.permissions.query({name: "camera"}); + + // The granted selector should now be removed. + assert_false(permission_element.matches(":granted")); + + }, "Permission element should not have the granted selector when the \ + permission is not granted.") +</script> diff --git a/tests/wpt/tests/infrastructure/testdriver/actions/crossOrigin.sub.html b/tests/wpt/tests/infrastructure/testdriver/actions/crossOrigin.sub.html index 3f6f3a77f3a..2b4c61296e1 100644 --- a/tests/wpt/tests/infrastructure/testdriver/actions/crossOrigin.sub.html +++ b/tests/wpt/tests/infrastructure/testdriver/actions/crossOrigin.sub.html @@ -15,7 +15,9 @@ addEventListener("message", (msg) => { if (msg.data === "PASS") { done(); } else if (msg.data === "FAIL") { - assert_unreached("actions failed") + assert_unreached("actions failed"); + } else { + assert_unreached("testdriver.js-internal messages should not be exposed to tests"); } }); </script> diff --git a/tests/wpt/tests/infrastructure/testdriver/actions/popup.html b/tests/wpt/tests/infrastructure/testdriver/actions/popup.html index 62140d63814..d291fdc07b3 100644 --- a/tests/wpt/tests/infrastructure/testdriver/actions/popup.html +++ b/tests/wpt/tests/infrastructure/testdriver/actions/popup.html @@ -13,6 +13,8 @@ resolve(); } else if (msg.data === "FAIL") { reject("actions failed"); + } else { + reject("testdriver.js-internal messages should not be exposed to tests"); } }); addEventListener("click", (event) => { diff --git a/tests/wpt/tests/infrastructure/testdriver/click_iframe_crossorigin.sub.html b/tests/wpt/tests/infrastructure/testdriver/click_iframe_crossorigin.sub.html index df2b4477cac..3e43439331d 100644 --- a/tests/wpt/tests/infrastructure/testdriver/click_iframe_crossorigin.sub.html +++ b/tests/wpt/tests/infrastructure/testdriver/click_iframe_crossorigin.sub.html @@ -12,7 +12,9 @@ addEventListener("message", (msg) => { if (msg.data === "PASS") { done(); } else if (msg.data === "FAIL") { - assert_unreached("click failed") + assert_unreached("click failed"); + } else { + assert_unreached("testdriver.js-internal messages should not be exposed to tests"); } }); </script> diff --git a/tests/wpt/tests/infrastructure/testdriver/click_nested_crossorigin.sub.html b/tests/wpt/tests/infrastructure/testdriver/click_nested_crossorigin.sub.html index af90951df17..e825527dd4c 100644 --- a/tests/wpt/tests/infrastructure/testdriver/click_nested_crossorigin.sub.html +++ b/tests/wpt/tests/infrastructure/testdriver/click_nested_crossorigin.sub.html @@ -19,7 +19,9 @@ addEventListener("message", (msg) => { if (msg.data === "PASS") { done(); } else if (msg.data === "FAIL") { - assert_unreached("click failed") + assert_unreached("click failed"); + } else { + assert_unreached("testdriver.js-internal messages should not be exposed to tests"); } }); </script> diff --git a/tests/wpt/tests/interfaces/audio-session.idl b/tests/wpt/tests/interfaces/audio-session.idl index f542347c710..7fd75024ee8 100644 --- a/tests/wpt/tests/interfaces/audio-session.idl +++ b/tests/wpt/tests/interfaces/audio-session.idl @@ -3,10 +3,12 @@ // (https://github.com/w3c/webref) // Source: Audio Session (https://w3c.github.io/audio-session/) -enum AudioSessionState { - "inactive", - "active", - "interrupted" +[Exposed=Window] +interface AudioSession : EventTarget { + attribute AudioSessionType type; + + readonly attribute AudioSessionState state; + attribute EventHandler onstatechange; }; enum AudioSessionType { @@ -18,16 +20,14 @@ enum AudioSessionType { "play-and-record" }; +enum AudioSessionState { + "inactive", + "active", + "interrupted" +}; + [Exposed=Window] partial interface Navigator { // The default audio session that the user agent will use when media elements start/stop playing. readonly attribute AudioSession audioSession; }; - -[Exposed=Window] -interface AudioSession : EventTarget { - attribute AudioSessionType type; - - readonly attribute AudioSessionState state; - attribute EventHandler onstatechange; -}; diff --git a/tests/wpt/tests/interfaces/mediacapture-viewport.idl b/tests/wpt/tests/interfaces/mediacapture-viewport.idl index a9dcf74e17c..c4d1892b0b9 100644 --- a/tests/wpt/tests/interfaces/mediacapture-viewport.idl +++ b/tests/wpt/tests/interfaces/mediacapture-viewport.idl @@ -5,10 +5,5 @@ partial interface MediaDevices { Promise<MediaStream> getViewportMedia( - optional ViewportMediaStreamConstraints constraints = {}); -}; - -dictionary ViewportMediaStreamConstraints { - (boolean or MediaTrackConstraints) video = true; - (boolean or MediaTrackConstraints) audio = false; + optional DisplayMediaStreamOptions options = {}); }; diff --git a/tests/wpt/tests/interfaces/mediasession.idl b/tests/wpt/tests/interfaces/mediasession.idl index 00bfe6ad216..5c6942be5a0 100644 --- a/tests/wpt/tests/interfaces/mediasession.idl +++ b/tests/wpt/tests/interfaces/mediasession.idl @@ -98,17 +98,8 @@ dictionary MediaPositionState { dictionary MediaSessionActionDetails { required MediaSessionAction action; -}; - -dictionary MediaSessionSeekActionDetails : MediaSessionActionDetails { double seekOffset; -}; - -dictionary MediaSessionSeekToActionDetails : MediaSessionActionDetails { - required double seekTime; + double seekTime; boolean fastSeek; -}; - -dictionary MediaSessionCaptureActionDetails : MediaSessionActionDetails { boolean isActivating; }; diff --git a/tests/wpt/tests/interfaces/observable.idl b/tests/wpt/tests/interfaces/observable.idl index b0f0949a23a..55bdbb21e41 100644 --- a/tests/wpt/tests/interfaces/observable.idl +++ b/tests/wpt/tests/interfaces/observable.idl @@ -81,7 +81,7 @@ interface Observable { Observable drop(unsigned long long amount); Observable flatMap(Mapper mapper); Observable switchMap(Mapper mapper); - Observable inspect(optional ObservableInspectorUnion inspect_observer = {}); + Observable inspect(optional ObservableInspectorUnion inspectorUnion = {}); Observable catch(CatchCallback callback); Observable finally(VoidFunction callback); diff --git a/tests/wpt/tests/interfaces/selection-api.idl b/tests/wpt/tests/interfaces/selection-api.idl index a84536ab0f5..49d718d0777 100644 --- a/tests/wpt/tests/interfaces/selection-api.idl +++ b/tests/wpt/tests/interfaces/selection-api.idl @@ -18,7 +18,7 @@ interface Selection { undefined removeRange(Range range); undefined removeAllRanges(); undefined empty(); - sequence<StaticRange> getComposedRanges(ShadowRoot... shadowRoots); + sequence<StaticRange> getComposedRanges(optional GetComposedRangesOptions options = {}); undefined collapse(Node? node, optional unsigned long offset = 0); undefined setPosition(Node? node, optional unsigned long offset = 0); undefined collapseToStart(); @@ -32,6 +32,10 @@ interface Selection { stringifier; }; +dictionary GetComposedRangesOptions { + sequence<ShadowRoot> shadowRoots = []; +}; + partial interface Document { Selection? getSelection(); }; diff --git a/tests/wpt/tests/interfaces/service-workers.idl b/tests/wpt/tests/interfaces/service-workers.idl index 87d48398f72..d9ff2f651f8 100644 --- a/tests/wpt/tests/interfaces/service-workers.idl +++ b/tests/wpt/tests/interfaces/service-workers.idl @@ -167,6 +167,7 @@ dictionary ExtendableEventInit : EventInit { [Exposed=ServiceWorker] interface InstallEvent : ExtendableEvent { + constructor(DOMString type, optional ExtendableEventInit eventInitDict = {}); Promise<undefined> addRoutes((RouterRule or sequence<RouterRule>) rules); }; diff --git a/tests/wpt/tests/interfaces/shared-storage.idl b/tests/wpt/tests/interfaces/shared-storage.idl index 6f8e9270888..85906bedbcf 100644 --- a/tests/wpt/tests/interfaces/shared-storage.idl +++ b/tests/wpt/tests/interfaces/shared-storage.idl @@ -89,6 +89,7 @@ dictionary SharedStorageRunOperationMethodOptions { boolean resolveToConfig = false; boolean keepAlive = false; SharedStoragePrivateAggregationConfig privateAggregationConfig; + DOMString savedQuery; }; dictionary SharedStorageWorkletOptions : WorkletOptions { diff --git a/tests/wpt/tests/interfaces/turtledove.idl b/tests/wpt/tests/interfaces/turtledove.idl index 77360d0dd10..ff48d311914 100644 --- a/tests/wpt/tests/interfaces/turtledove.idl +++ b/tests/wpt/tests/interfaces/turtledove.idl @@ -128,14 +128,20 @@ partial interface Navigator { Promise<AdAuctionData> getInterestGroupAdAuctionData(AdAuctionDataConfig config); }; +dictionary AdAuctionData { + required Uint8Array request; + required USVString requestId; +}; + dictionary AdAuctionDataConfig { required USVString seller; required USVString coordinatorOrigin; + unsigned long requestSize; + record<USVString, AdAuctionDataBuyerConfig> perBuyerConfig; }; -dictionary AdAuctionData { - required Uint8Array request; - required USVString requestId; +dictionary AdAuctionDataBuyerConfig { + unsigned long targetSize; }; [SecureContext] diff --git a/tests/wpt/tests/interfaces/webgpu.idl b/tests/wpt/tests/interfaces/webgpu.idl index 74021895a8f..421685c7a8f 100644 --- a/tests/wpt/tests/interfaces/webgpu.idl +++ b/tests/wpt/tests/interfaces/webgpu.idl @@ -78,7 +78,7 @@ interface GPU { }; dictionary GPURequestAdapterOptions { - any featureLevel; + DOMString featureLevel; GPUPowerPreference powerPreference; boolean forceFallbackAdapter = false; }; @@ -1183,6 +1183,7 @@ interface GPUCanvasContext { undefined configure(GPUCanvasConfiguration configuration); undefined unconfigure(); + GPUCanvasConfiguration? getConfiguration(); GPUTexture getCurrentTexture(); }; diff --git a/tests/wpt/tests/interfaces/webnn.idl b/tests/wpt/tests/interfaces/webnn.idl index 9a71f73954c..8329e7d2b33 100644 --- a/tests/wpt/tests/interfaces/webnn.idl +++ b/tests/wpt/tests/interfaces/webnn.idl @@ -90,7 +90,7 @@ enum MLOperandDataType { dictionary MLOperandDescriptor { required MLOperandDataType dataType; - sequence<[EnforceRange] unsigned long> shape = []; + required sequence<[EnforceRange] unsigned long> shape; }; [SecureContext, Exposed=(Window, DedicatedWorker)] diff --git a/tests/wpt/tests/interfaces/webrtc.idl b/tests/wpt/tests/interfaces/webrtc.idl index 32500f9a560..174ead6261c 100644 --- a/tests/wpt/tests/interfaces/webrtc.idl +++ b/tests/wpt/tests/interfaces/webrtc.idl @@ -503,7 +503,7 @@ enum RTCSctpTransportState { "closed" }; -[Exposed=Window] +[Exposed=(Window,DedicatedWorker), Transferable] interface RTCDataChannel : EventTarget { readonly attribute USVString label; readonly attribute boolean ordered; diff --git a/tests/wpt/tests/lint.ignore b/tests/wpt/tests/lint.ignore index 62ad931cb83..3e1d05be28d 100644 --- a/tests/wpt/tests/lint.ignore +++ b/tests/wpt/tests/lint.ignore @@ -624,7 +624,6 @@ MISSING DEPENDENCY: resources/chromium/mock-facedetection.js MISSING DEPENDENCY: resources/chromium/mock-idle-detection.js MISSING DEPENDENCY: resources/chromium/mock-imagecapture.js MISSING DEPENDENCY: resources/chromium/mock-managed-config.js -MISSING DEPENDENCY: resources/chromium/mock-pressure-service.js MISSING DEPENDENCY: resources/chromium/mock-subapps.js MISSING DEPENDENCY: resources/chromium/mock-textdetection.js MISSING DEPENDENCY: resources/chromium/nfc-mock.js diff --git a/tests/wpt/tests/mathml/presentation-markup/scripts/subsup-6.html b/tests/wpt/tests/mathml/presentation-markup/scripts/subsup-6.html index 9666c80f9f6..50a36b89dc1 100644 --- a/tests/wpt/tests/mathml/presentation-markup/scripts/subsup-6.html +++ b/tests/wpt/tests/mathml/presentation-markup/scripts/subsup-6.html @@ -25,13 +25,13 @@ function runTests() { Array.from(document.getElementsByTagName("mprescripts")). forEach(prescript => { - let prescript_box = prescript.getBoundingClientRect(); let mmultiscripts = prescript.parentNode; let name = mmultiscripts.getAttribute("data-name"); test(function() { assert_true(MathMLFeatureDetection.has_mspace()); var e = 1; let base_box = mmultiscripts.firstElementChild.getBoundingClientRect(); + let prescript_box = prescript.getBoundingClientRect(); assert_approx_equals(prescript_box.left, base_box.left, e, `${name}, left`); assert_approx_equals((prescript_box.top + prescript_box.bottom) / 2, (base_box.top + base_box.bottom) / 2, e, `${name}, top`); diff --git a/tests/wpt/tests/mathml/relations/css-styling/width-height-001.html b/tests/wpt/tests/mathml/relations/css-styling/width-height-001.html index 2deedc3f0b8..57cbc1b0ab2 100644 --- a/tests/wpt/tests/mathml/relations/css-styling/width-height-001.html +++ b/tests/wpt/tests/mathml/relations/css-styling/width-height-001.html @@ -4,7 +4,7 @@ <meta charset="utf-8"> <title>width, height, inline-size and block-size</title> <link rel="help" href="https://w3c.github.io/mathml-core/#layout-algorithms"> -<meta name="assert" content="Verify that width, height, inline-size and block-size properties are ignored."> +<meta name="assert" content="Verify that width, height, inline-size and block-size properties set the size of the content box."> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/mathml/support/feature-detection.js"></script> @@ -30,6 +30,7 @@ document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;"><math><mrow>${MathMLFragments[tag]}</mrow></math></div>`); let div = document.body.lastElementChild; let element = FragmentHelper.element(div.firstElementChild); + FragmentHelper.forceNonEmptyDescendants(element); test(function() { assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); @@ -49,6 +50,35 @@ assert_approx_equals(box.height, 700, epsilon, "height"); }, `inline-size and block-size properties on ${tag}`); + // Test that if we specify a size smaller than the content, then + // it is used too. Note that we skip mtable, which follows CSS + // tables rules and behave differently in that case. + if (tag != "mtable") { + test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); + var style = `width: 2px; height: 1px;`; + element.setAttribute("style", style); + let box = element.getBoundingClientRect(); + assert_approx_equals(box.width, 2, epsilon, "width"); + assert_approx_equals(box.height, 1, epsilon, "height"); + }, `width and height properties on ${tag} (content overflowing)`); + } + + div.style = "display: none;"; // Hide the div after measurement. + + document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;"><div style="display: inline-block"><math><mrow>${MathMLFragments[tag]}</mrow></math></div></div>`); + let shrinkWrapDiv = document.body.lastElementChild.firstElementChild; + element = FragmentHelper.element(shrinkWrapDiv.firstElementChild); + FragmentHelper.forceNonEmptyDescendants(element); + + test(function() { + assert_true(MathMLFeatureDetection[`has_${tag}`](), `${tag} is supported`); + var style = `width: 300px;`; + element.setAttribute("style", style); + let box = shrinkWrapDiv.getBoundingClientRect(); + assert_approx_equals(box.width, 300, epsilon); + }, `width property on ${tag} (preferred width)`); + div.style = "display: none;"; // Hide the div after measurement. } diff --git a/tests/wpt/tests/mathml/relations/css-styling/width-height-004.html b/tests/wpt/tests/mathml/relations/css-styling/width-height-004.html index 10ece249ca0..e26ebe96823 100644 --- a/tests/wpt/tests/mathml/relations/css-styling/width-height-004.html +++ b/tests/wpt/tests/mathml/relations/css-styling/width-height-004.html @@ -20,7 +20,6 @@ } [data-name] { width: 7em; - height: 3em; border: 1px solid blue; } </style> @@ -64,6 +63,18 @@ <mtext>X</mtext> </mfrac> </math> + <math> + <mfrac data-name="mfrac (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </mfrac> + </math> + <math dir="rtl"> + <mfrac data-name="RTL mfrac (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </mfrac> + </math> </div> <div class="test"> @@ -79,6 +90,18 @@ <mtext>X</mtext> </mfrac> </math> + <math> + <mfrac linethickness="0" data-name="mfrac without bar (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </mfrac> + </math> + <math dir="rtl"> + <mfrac linethickness="0" data-name="RTL mfrac without bar (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </mfrac> + </math> </div> <div class="test"> @@ -94,6 +117,18 @@ <mtext>X</mtext> </munder> </math> + <math> + <munder data-name="munder (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </munder> + </math> + <math dir="rtl"> + <munder data-name="RTL munder (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </munder> + </math> </div> <div class="test"> @@ -109,6 +144,18 @@ <mtext>X</mtext> </mover> </math> + <math> + <mover data-name="mover (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </mover> + </math> + <math dir="rtl"> + <mover data-name="RTL mover (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </mover> + </math> </div> <div class="test"> @@ -126,6 +173,20 @@ <mtext>X</mtext> </munderover> </math> + <math> + <munderover data-name="munderover (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </munderover> + </math> + <math dir="rtl"> + <munderover data-name="RTL munderover (horizontal overflow)"> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + <mtext>XXXXXXXXXXXX</mtext> + </munderover> + </math> </div> </body> diff --git a/tests/wpt/tests/mathml/relations/css-styling/width-height-005.html b/tests/wpt/tests/mathml/relations/css-styling/width-height-005.html new file mode 100644 index 00000000000..a6ea8d82deb --- /dev/null +++ b/tests/wpt/tests/mathml/relations/css-styling/width-height-005.html @@ -0,0 +1,541 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>content position with width/height</title> +<link rel="help" href="https://w3c.github.io/mathml-core/#layout-algorithms"> +<meta name="assert" content="Verify the inline-start of the children of the misc layout algorithms."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<script src="/mathml/support/fonts.js"></script> +<style> + mn, .text { + font: 25px/1 Ahem; + color: black; + } + .test { + margin: .5em; + } + .reference, [data-name] { + border: 1px solid blue; + margin: 1em; + } +</style> +<script> + setup({ explicit_done: true }); + window.addEventListener("load", () => { loadAllFonts().then(runTests); }); + + function runTests() { + Array.from(document.getElementsByClassName("test")).forEach(div => { + const reference = div.getElementsByClassName("reference")[0]; + Array.from(div.querySelectorAll("[data-name]")).forEach(element => { + test(() => { + const rtl = getComputedStyle(element).direction == 'ltr'; + const referenceBox = reference.getBoundingClientRect(); + const elementBox = element.getBoundingClientRect(); + const epsilon = 1; + assert_greater_than(Math.abs(elementBox.width - referenceBox.width), epsilon, `width is modified`); + assert_approx_equals(elementBox.height, referenceBox.height, epsilon, `height is preserved`); + for (let i = 0; i < element.children.length; i++) { + const referenceChildBox = reference.children[i].getBoundingClientRect(); + const childBox = element.children[i].getBoundingClientRect(); + const description = `horizontal position of child ${i}`; + if (rtl) { + assert_approx_equals(childBox.left - elementBox.left, referenceChildBox.left - referenceBox.left, epsilon, description); + } else { + assert_approx_equals(childBox.right - elementBox.right, referenceChildBox.right - referenceBox.right, epsilon, description); + } + } + }, element.dataset.name); + }); + }); + done(); + } +</script> +</head> +<body> + <div id="log"></div> + + <div class="test"> + <math> + <mrow class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + <math> + <mrow data-name="mrow" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + <math> + <mrow data-name="mrow (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <mrow class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + <math dir="rtl"> + <mrow data-name="RTL mrow" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + <math dir="rtl"> + <mrow data-name="RTL mrow (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + </div> + + <div class="test"> + <math> + <mpadded lspace=".5em" voffset="-1em" class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + <math> + <mpadded lspace=".5em" voffset="-1em" data-name="mpadded" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + <math> + <mpadded lspace=".5em" voffset="-1em" data-name="mpadded (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <mpadded lspace=".5em" voffset="-1em" class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + <math dir="rtl"> + <mpadded lspace=".5em" voffset="-1em" data-name="RTL mpadded" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + <math dir="rtl"> + <mpadded lspace=".5em" voffset="-1em" data-name="RTL mpadded (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + </div> + + <div class="test"> + <math> + <msqrt class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + <math> + <msqrt data-name="msqrt" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + <math> + <msqrt data-name="msqrt (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <msqrt class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + <math dir="rtl"> + <msqrt data-name="RTL msqrt" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + <math dir="rtl"> + <msqrt data-name="RTL msqrt (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + </div> + + <div class="test"> + <math> + <mroot class="reference"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + <math> + <mroot data-name="mroot" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + <math> + <mroot data-name="mroot (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <mroot class="reference"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + <math dir="rtl"> + <mroot data-name="RTL mroot" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + <math dir="rtl"> + <mroot data-name="RTL mroot (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + </div> + + <div class="test"> + <math> + <msub class="reference"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + <math> + <msub data-name="msub" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + <math> + <msub data-name="msub (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <msub class="reference"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + <math dir="rtl"> + <msub data-name="RTL msub" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + <math dir="rtl"> + <msub data-name="RTL msub (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + </div> + + <div class="test"> + <math> + <msup class="reference"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + <math> + <msup data-name="msup" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + <math> + <msup data-name="msup (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <msup class="reference"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + <math dir="rtl"> + <msup data-name="RTL msup" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + <math dir="rtl"> + <msup data-name="RTL msup (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + </div> + + <div class="test"> + <math> + <msubsup class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + <math> + <msubsup data-name="msubsup" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + <math> + <msubsup data-name="msubsup (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <msubsup class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + <math dir="rtl"> + <msubsup data-name="RTL msubsup" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + <math dir="rtl"> + <msubsup data-name="RTL msubsup (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + </div> + + <div class="test"> + <math> + <mmultiscripts class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + <math> + <mmultiscripts data-name="mmultiscripts" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + <math> + <mmultiscripts data-name="mmultiscripts (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <mmultiscripts class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + <math dir="rtl"> + <mmultiscripts data-name="RTL mmultiscripts" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + <math dir="rtl"> + <mmultiscripts data-name="RTL mmultiscripts (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + </div> + + <div class="test"> + <math> + <mtext class="reference"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + <math> + <mtext data-name="mtext" style="width: 10em"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + <math> + <mtext data-name="mtext (horizontal overflow)" style="width: 1em"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <mtext class="reference"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + <math dir="rtl"> + <mtext data-name="RTL mtext" style="width: 10em"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + <math dir="rtl"> + <mtext data-name="RTL mtext (horizontal overflow)" style="width: 1em"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + </div> + + <div class="test"> + <math> + <menclose class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + <math> + <menclose data-name="legacy menclose" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + <math> + <menclose data-name="legacy menclose (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + </div> + + <div class="test" dir="rtl"> + <math dir="rtl"> + <menclose class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + <math dir="rtl"> + <menclose data-name="RTL legacy menclose" style="width: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + <math dir="rtl"> + <menclose data-name="RTL legacy menclose (horizontal overflow)" style="width: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + </div> + +</body> +</html> diff --git a/tests/wpt/tests/mathml/relations/css-styling/width-height-006.html b/tests/wpt/tests/mathml/relations/css-styling/width-height-006.html new file mode 100644 index 00000000000..d5427051974 --- /dev/null +++ b/tests/wpt/tests/mathml/relations/css-styling/width-height-006.html @@ -0,0 +1,406 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>content position with width/height</title> +<link rel="help" href="https://w3c.github.io/mathml-core/#layout-algorithms"> +<meta name="assert" content="Verify the block-start of the children for misc layout algorithms."/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<script src="/mathml/support/fonts.js"></script> +<style> + mn, .text { + font: 25px/1 Ahem; + color: black; + } + .test { + margin: .5em; + } + .reference, [data-name] { + border: 1px solid blue; + margin: 1em; + } +</style> +<script> + setup({ explicit_done: true }); + window.addEventListener("load", () => { loadAllFonts().then(runTests); }); + + function getBaseLine(element) { + return element.parentNode.getElementsByClassName("baseline")[0].getBoundingClientRect().bottom; + } + + function runTests() { + Array.from(document.getElementsByClassName("test")).forEach(div => { + const reference = div.getElementsByClassName("reference")[0]; + Array.from(div.querySelectorAll("[data-name]")).forEach(element => { + test(() => { + const referenceBox = reference.getBoundingClientRect(); + const elementBox = element.getBoundingClientRect(); + const epsilon = 1; + assert_approx_equals(elementBox.width, referenceBox.width, epsilon, `width is preserved`); + assert_greater_than(Math.abs(elementBox.height - referenceBox.height), epsilon, `height is modified`); + assert_approx_equals(getBaseLine(element) - elementBox.top, getBaseLine(reference) - referenceBox.top, epsilon, `baseline is preserved`); + for (let i = 0; i < element.children.length; i++) { + const referenceChildBox = reference.children[i].getBoundingClientRect(); + const childBox = element.children[i].getBoundingClientRect(); + assert_approx_equals(childBox.top - elementBox.top, referenceChildBox.top - referenceBox.top, epsilon, `vertical position of child ${i}`); + } + }, element.dataset.name); + }); + }); + + done(); + } +</script> +</head> +<body> + <div id="log"></div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mrow class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mrow data-name="mrow" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mrow data-name="mrow (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mrow> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mpadded lspace=".5em" voffset="-1em" class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mpadded lspace=".5em" voffset="-1em" data-name="mpadded" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mpadded lspace=".5em" voffset="-1em" data-name="mpadded (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </mpadded> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msqrt class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msqrt data-name="msqrt" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msqrt data-name="msqrt (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msqrt> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mroot class="reference"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mroot data-name="mroot" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mroot data-name="mroot (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + </mroot> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <munder class="reference"> + <mn>X</mn> + <mn>X</mn> + </munder> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <munder data-name="munder" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + </munder> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <munder data-name="munder (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + </munder> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mover class="reference"> + <mn>X</mn> + <mn>X</mn> + </mover> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mover data-name="mover" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + </mover> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mover data-name="mover (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + </mover> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <munderover class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </munderover> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <munderover data-name="munderover" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </munderover> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <munderover data-name="munderover (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </munderover> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msub class="reference"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msub data-name="msub" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msub data-name="msub (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + </msub> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msup class="reference"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msup data-name="msup" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msup data-name="msup (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + </msup> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msubsup class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msubsup data-name="msubsup" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <msubsup data-name="msubsup (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </msubsup> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mmultiscripts class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mmultiscripts data-name="mmultiscripts" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mmultiscripts data-name="mmultiscripts (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + <mprescripts/> + <mn>X</mn> + <mn>X</mn> + </mmultiscripts> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mtext class="reference"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mtext data-name="mtext" style="height: 10em"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <mtext data-name="mtext (vertical overflow)" style="height: 1em"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + <span class="text">X</span class="text"> + </mtext> + </math> + </div> + + <div class="test"> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <menclose class="reference"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <menclose data-name="legacy menclose" style="height: 10em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + <math> + <mspace class="baseline" width="1em" height="1px" style="background: black"/> + <menclose data-name="legacy menclose (vertical overflow)" style="height: 1em"> + <mn>X</mn> + <mn>X</mn> + <mn>X</mn> + </menclose> + </math> + </div> + +</body> +</html> diff --git a/tests/wpt/tests/mediacapture-record/MediaRecorder-blob-timecode.https.html b/tests/wpt/tests/mediacapture-record/MediaRecorder-blob-timecode.https.html new file mode 100644 index 00000000000..cdc63351952 --- /dev/null +++ b/tests/wpt/tests/mediacapture-record/MediaRecorder-blob-timecode.https.html @@ -0,0 +1,40 @@ +<!doctype html> +<html> +<head> + <title>MediaRecorder Blob event timecode</title> + <link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#dom-mediarecorder-start"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="../mediacapture-streams/permission-helper.js"></script> +</head> +<body> + +<script> + promise_test(async t => { + await setMediaPermission(); + const stream = await navigator.mediaDevices.getUserMedia({video:true, audio:true}); + t.add_cleanup(() => stream.getTracks().forEach(tr => tr.stop())); + const recorder = new MediaRecorder(stream); + + // Sets 0 timeslice will call the first chunk to be triggered immediately. + recorder.start(0); + let combinedSize = 0; + let previous_timecode = 0; + while (combinedSize < 2000) { + const {data, timecode} = await new Promise(r => recorder.ondataavailable = r); + if (combinedSize === 0) { + assert_equals(timecode, 0, "first chunk timecode must be 0"); + } else { + assert_greater_than(timecode, previous_timecode, "timecode must increase monotonically"); + } + previous_timecode = timecode; + combinedSize += data.size; + } + recorder.stop(); + }, "MediaRecorder Blob timecode for first chunk must be 0 and monotonically increasing"); + +</script> +</body> +</html> diff --git a/tests/wpt/tests/preload/prefetch-headers.https.html b/tests/wpt/tests/preload/prefetch-headers.https.html index 0a475c7d773..74f654a3636 100644 --- a/tests/wpt/tests/preload/prefetch-headers.https.html +++ b/tests/wpt/tests/preload/prefetch-headers.https.html @@ -8,7 +8,7 @@ <script> promise_test(async t => { - const {href} = await prefetch({"type": "image/png", file: "../../images/green.png"}, t); + const {href} = await prefetch({"type": "image/png", file: "green.png"}, t); const [info] = await get_prefetch_info(href); const {headers} = info; assert_equals(headers["sec-fetch-dest"], "empty"); @@ -17,7 +17,7 @@ promise_test(async t => { }, "Prefetch should include Sec-Purpose=prefetch and Sec-Fetch-Dest=empty headers"); promise_test(async t => { - const {href} = await prefetch({"type": "image/png", file: "../../images/green.png"}, t); + const {href} = await prefetch({"type": "image/png", file: "green.png"}, t); const [info] = await get_prefetch_info(href); const {headers} = info; assert_false("purpose" in headers); @@ -25,11 +25,11 @@ promise_test(async t => { }, "Prefetch should not include proprietary headers (X-moz/Purpose)"); promise_test(async t => { - const {href} = await prefetch({"type": "image/png", file: "../../images/green.png", crossOrigin: "anonymous"}, t); + const {href} = await prefetch({"type": "image/png", file: "green.png", crossOrigin: "anonymous"}, t); const [info] = await get_prefetch_info(href); const {headers} = info; assert_equals(headers["origin"], document.origin); }, "Prefetch should respect CORS mode"); </script> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/preload/prefetch-types.https.html b/tests/wpt/tests/preload/prefetch-types.https.html index 276439e5440..da034252562 100644 --- a/tests/wpt/tests/preload/prefetch-types.https.html +++ b/tests/wpt/tests/preload/prefetch-types.https.html @@ -15,7 +15,7 @@ const loaders = { load: fetch }, image: { - file: '../../images/green.png', + file: 'green.png', type: 'image/png', load: href => { const image = document.createElement('img'); @@ -70,4 +70,4 @@ for (const as in loaders) { } </script> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/tests/preload/resources/green.png b/tests/wpt/tests/preload/resources/green.png Binary files differnew file mode 100644 index 00000000000..28a1faab377 --- /dev/null +++ b/tests/wpt/tests/preload/resources/green.png diff --git a/tests/wpt/tests/resources/chromium/mock-pressure-service.js b/tests/wpt/tests/resources/chromium/mock-pressure-service.js deleted file mode 100644 index 610d02a9164..00000000000 --- a/tests/wpt/tests/resources/chromium/mock-pressure-service.js +++ /dev/null @@ -1,131 +0,0 @@ -import {PressureClientRemote, PressureManagerAddClientError} from "/gen/services/device/public/mojom/pressure_manager.mojom.m.js"; -import {PressureSource, PressureState} from '/gen/services/device/public/mojom/pressure_update.mojom.m.js' -import {WebPressureManager, WebPressureManagerReceiver} from '/gen/third_party/blink/public/mojom/compute_pressure/web_pressure_manager.mojom.m.js' - -class MockWebPressureService { - constructor() { - this.receiver_ = new WebPressureManagerReceiver(this); - this.interceptor_ = - new MojoInterfaceInterceptor(WebPressureManager.$interfaceName); - this.interceptor_.oninterfacerequest = e => { - this.receiver_.$.bindHandle(e.handle); - }; - this.reset(); - this.mojomSourceType_ = new Map([['cpu', PressureSource.kCpu]]); - this.mojomStateType_ = new Map([ - ['nominal', PressureState.kNominal], ['fair', PressureState.kFair], - ['serious', PressureState.kSerious], ['critical', PressureState.kCritical] - ]); - this.pressureServiceReadingTimerId_ = null; - } - - start() { - this.interceptor_.start(); - } - - stop() { - this.stopPlatformCollector(); - this.receiver_.$.close(); - this.interceptor_.stop(); - - // Wait for an event loop iteration to let any pending mojo commands in - // the pressure service finish. - return new Promise(resolve => setTimeout(resolve, 0)); - } - - reset() { - this.observers_ = []; - this.pressureUpdate_ = null; - this.pressureServiceReadingTimerId_ = null; - this.addClientError_ = null; - this.updatesDelivered_ = 0; - } - - async addClient(source) { - // TODO(crbug.com/1342184): Consider other sources. - // For now, "cpu" is the only source. - if (source !== PressureSource.kCpu) - throw new Error('Call addClient() with a wrong PressureSource'); - - if (this.addClientError_ !== null) { - return {result: {error: this.addClientError_}}; - } - - const pressureClientRemote = new PressureClientRemote(); - pressureClientRemote.onConnectionError.addListener(() => { - // Remove this observer from observer array. - this.observers_.splice(this.observers_.indexOf(pressureClientRemote), 1); - }); - const pendingReceiver = pressureClientRemote.$.bindNewPipeAndPassReceiver(); - this.observers_.push(pressureClientRemote); - - return {result: {pressureClient: pendingReceiver}}; - } - - startPlatformCollector(sampleInterval) { - if (sampleInterval === 0) - return; - - if (this.pressureServiceReadingTimerId_ != null) - this.stopPlatformCollector(); - - this.pressureServiceReadingTimerId_ = self.setInterval(() => { - if (this.pressureUpdate_ === null || this.observers_.length === 0) - return; - - // Because we cannot retrieve directly the timeOrigin internal in - // TimeTicks from Chromium, we need to create a timestamp that - // would help to test basic functionality. - // by multiplying performance.timeOrigin by 10 we make sure that the - // origin is higher than the internal time origin in TimeTicks. - // performance.now() allows us to have an increase matching the TimeTicks - // that would be read from the platform collector. - this.pressureUpdate_.timestamp = { - internalValue: - Math.round((performance.timeOrigin * 10) + performance.now()) * 1000 - }; - for (let observer of this.observers_) - observer.onPressureUpdated(this.pressureUpdate_); - this.updatesDelivered_++; - }, sampleInterval); - } - - stopPlatformCollector() { - if (this.pressureServiceReadingTimerId_ != null) { - self.clearInterval(this.pressureServiceReadingTimerId_); - this.pressureServiceReadingTimerId_ = null; - } - this.updatesDelivered_ = 0; - } - - updatesDelivered() { - return this.updatesDelivered_; - } - - setPressureUpdate(source, state) { - if (!this.mojomSourceType_.has(source)) - throw new Error(`PressureSource '${source}' is invalid`); - - if (!this.mojomStateType_.has(state)) - throw new Error(`PressureState '${state}' is invalid`); - - this.pressureUpdate_ = { - source: this.mojomSourceType_.get(source), - state: this.mojomStateType_.get(state), - }; - } - - setExpectedFailure(expectedException) { - assert_true( - expectedException instanceof DOMException, - 'setExpectedFailure() expects a DOMException instance'); - if (expectedException.name === 'NotSupportedError') { - this.addClientError_ = PressureManagerAddClientError.kNotSupported; - } else { - throw new TypeError( - `Unexpected DOMException '${expectedException.name}'`); - } - } -} - -export const mockPressureService = new MockWebPressureService(); diff --git a/tests/wpt/tests/resources/chromium/mock-pressure-service.js.headers b/tests/wpt/tests/resources/chromium/mock-pressure-service.js.headers deleted file mode 100644 index 6805c323df5..00000000000 --- a/tests/wpt/tests/resources/chromium/mock-pressure-service.js.headers +++ /dev/null @@ -1 +0,0 @@ -Content-Type: text/javascript; charset=utf-8 diff --git a/tests/wpt/tests/scroll-animations/scroll-timelines/duration.html b/tests/wpt/tests/scroll-animations/scroll-timelines/duration.html new file mode 100644 index 00000000000..245670de2ae --- /dev/null +++ b/tests/wpt/tests/scroll-animations/scroll-timelines/duration.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>ScrollTimeline.duration</title> +<link rel="help" href="https://drafts.csswg.org/web-animations-2/#dom-animationtimeline-duration"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<script> +'use strict'; + +test(t => { + const timeline = new ScrollTimeline(); + assert_equals(timeline.duration.toString(), '100%'); +}, 'The duration of a scroll timeline is 100%'); + +</script> diff --git a/tests/wpt/tests/scroll-animations/view-timelines/duration.html b/tests/wpt/tests/scroll-animations/view-timelines/duration.html new file mode 100644 index 00000000000..05d35801307 --- /dev/null +++ b/tests/wpt/tests/scroll-animations/view-timelines/duration.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>ViewTimeline.duration</title> +<link rel="help" href="https://drafts.csswg.org/web-animations-2/#dom-animationtimeline-duration"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<script> +'use strict'; + +test(t => { + const timeline = new ViewTimeline(); + assert_equals(timeline.duration.toString(), '100%'); +}, 'The duration of a view timeline is 100%'); + +</script> diff --git a/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment-open-link-in-new-tab-desktop.html b/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment-open-link-in-new-tab-desktop.html deleted file mode 100644 index bd07b18be00..00000000000 --- a/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment-open-link-in-new-tab-desktop.html +++ /dev/null @@ -1,28 +0,0 @@ -<!doctype html> -<title>Navigating to a text fragment directive in a new tab</title> -<meta charset=utf-8> -<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/"> -<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="/common/utils.js"></script> -<script src="stash.js"></script> -<body></body> -<script> -promise_test(async t => new Promise((resolve, reject) =>{ - let key = token(); - document.body.innerHTML = `<a href="scroll-to-text-fragment-target.html?key=${key}#:~:text=test">Click me</a>`; - const link = document.querySelector("a"); - test_driver.bless('Open a URL with a text directive in a new tab', () => { - test_driver.send_keys(document.body, '\uE004'); // TAB to focus the link - test_driver.send_keys(link, '\uE009\uE007'); // CTRL + ENTER - }); - fetchResults(key, resolve, reject); -}).then(data => { - assert_true(data.scrollPosition != 'top', 'Expected ctrl+click on a link to be user activated.'); -}), `Test that the text fragment directive requires a user activation when invoked by clicking a link in the same or a new tab`); - - -</script> diff --git a/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html b/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html index 3bf78f16001..ceb9a2ca3ff 100644 --- a/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html +++ b/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html @@ -43,6 +43,8 @@ function checkScroll() { let results = { scrollPosition: position, href: window.location.href, + performanceNavigationEntries: performance.getEntriesByType("navigation").map(e => e.name), + performanceResourcesEntries: performance.getEntriesByType("resource").map(e => e.name), target: target ? target.id : 'undefined' }; diff --git a/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment.html b/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment.html index 2dbd575bcbb..7af9bdba4c1 100644 --- a/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment.html +++ b/tests/wpt/tests/scroll-to-text-fragment/scroll-to-text-fragment.html @@ -255,6 +255,8 @@ for (const test_case of test_cases) { // If the position is not 'top', the :target element should be the positioned element. assert_true(data.scrollPosition == 'top' || data.target == data.scrollPosition); assert_equals(data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.'); + assert_true(data.performanceNavigationEntries.every(entry => entry.indexOf(':~:') === -1), 'Expected fragment directive to be stripped from the URL in navigation performance metrics.') + assert_true(data.performanceResourcesEntries.every(entry => entry.indexOf(':~:') === -1), 'Expected fragment directive to be stripped from the URL in resource performance metrics.') assert_equals(data.scrollPosition, test_case.expect_position, `Expected ${test_case.fragment} (${test_case.description}) to scroll to ${test_case.expect_position}.`); }), `Test navigation with fragment: ${test_case.description}.`); diff --git a/tests/wpt/tests/selection/contenteditable/modify-around-non-editable-span.html b/tests/wpt/tests/selection/contenteditable/modify-around-non-editable-span.html new file mode 100644 index 00000000000..9a15e16c9b1 --- /dev/null +++ b/tests/wpt/tests/selection/contenteditable/modify-around-non-editable-span.html @@ -0,0 +1,116 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<title>Selection.modify() shouldn't move caret into non-editable nodes</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../editing/include/editor-test-utils.js"></script> +<script> +"use strict"; + +addEventListener("load", () => { + const editingHost = document.querySelector("div[contenteditable]"); + editingHost.focus(); + const precedingWhiteSpaces = editingHost.firstChild; + const middleText = editingHost.querySelector("span").nextSibling; + const trailingWhiteSpaces = editingHost.lastChild; + for (const callSelectAllChildren of [false, true]) { + for (const direction of ["forward", "right"]) { + test(() => { + if (callSelectAllChildren) { + getSelection().selectAllChildren(editingHost); + } + getSelection().collapse(precedingWhiteSpaces, precedingWhiteSpaces.length); + getSelection().modify("move", direction, "character"); + assert_in_array( + EditorTestUtils.getRangeDescription(getSelection().getRangeAt(0)), + [ + // start of editable region at middle of the line + EditorTestUtils.getRangeDescription( + { startContainer: editingHost, startOffset: 2, endContainer: editingHost, endOffset: 2 }), + EditorTestUtils.getRangeDescription( + { startContainer: middleText, startOffset: 0, endContainer: middleText, endOffset: 0 }), + ] + ); + }, `getSelection().modify("move", "${direction}", "character") ${ + callSelectAllChildren ? "after getSelection().selectAllChildren(editingHost) " : "" + }when " []<span contenteditable=false>"`); + test(() => { + if (callSelectAllChildren) { + getSelection().selectAllChildren(editingHost); + } + getSelection().collapse(middleText, middleText.length); + getSelection().modify("move", direction, "character"); + assert_in_array( + EditorTestUtils.getRangeDescription(getSelection().getRangeAt(0)), + [ + // At start of trailing invisible white spaces + EditorTestUtils.getRangeDescription( + { startContainer: editingHost, startOffset: 4, endContainer: editingHost, endOffset: 4 }), + EditorTestUtils.getRangeDescription( + { startContainer: trailingWhiteSpaces, startOffset: 0, endContainer: trailingWhiteSpaces, endOffset: 0 }), + // or at end of trailing invisible white spaces + EditorTestUtils.getRangeDescription( + { startContainer: editingHost, startOffset: 5, endContainer: editingHost, endOffset: 5 }), + EditorTestUtils.getRangeDescription( + { startContainer: trailingWhiteSpaces, startOffset: trailingWhiteSpaces.length, endContainer: trailingWhiteSpaces, endOffset: trailingWhiteSpaces.length }), + ] + ); + }, `getSelection().modify("move", "${direction}", "character") ${ + callSelectAllChildren ? "after getSelection().selectAllChildren(editingHost) " : "" + }when "editable[]<span contenteditable=false>"`); + } + for (const direction of ["backward", "left"]) { + test(() => { + if (callSelectAllChildren) { + getSelection().selectAllChildren(editingHost); + } + getSelection().collapse(middleText, 0); + getSelection().modify("move", direction, "character"); + assert_in_array( + EditorTestUtils.getRangeDescription(getSelection().getRangeAt(0)), + [ + // At end of preceding invisible white spaces + EditorTestUtils.getRangeDescription( + { startContainer: editingHost, startOffset: 1, endContainer: editingHost, endOffset: 1 }), + EditorTestUtils.getRangeDescription( + { startContainer: precedingWhiteSpaces, startOffset: 1, endContainer: precedingWhiteSpaces, endOffset: 1 }), + // or start of preceding invisible whites spaces + EditorTestUtils.getRangeDescription( + { startContainer: editingHost, startOffset: 0, endContainer: editingHost, endOffset: 0 }), + EditorTestUtils.getRangeDescription( + { startContainer: precedingWhiteSpaces, startOffset: 0, endContainer: precedingWhiteSpaces, endOffset: 0 }), + ] + ); + }, `getSelection().modify("move", "${direction}", "character") ${ + callSelectAllChildren ? "after getSelection().selectAllChildren(editingHost) " : "" + }when " <span contenteditable=false>...</span>[]editable"`); + test(() => { + if (callSelectAllChildren) { + getSelection().selectAllChildren(editingHost); + } + getSelection().collapse(trailingWhiteSpaces, 0); + getSelection().modify("move", direction, "character"); + assert_in_array( + EditorTestUtils.getRangeDescription(getSelection().getRangeAt(0)), + [ + // end of editable region at middle of the line + EditorTestUtils.getRangeDescription( + { startContainer: editingHost, startOffset: 3, endContainer: editingHost, endOffset: 3 }), + EditorTestUtils.getRangeDescription( + { startContainer: middleText, startOffset: middleText.length, endContainer: middleText, endOffset: middleText.length }), + ] + ); + }, `getSelection().modify("move", "${direction}", "character") ${ + callSelectAllChildren ? "after getSelection().selectAllChildren(editingHost) " : "" + }when "editable<span contenteditable=false>...</span>[] "`); + } + } +}, {once: true}); +</script> +</head> +<body> +<div contenteditable> <span contenteditable="false">non-editable</span>editable<span contenteditable="false">non-editable</span> </div> +</body> +</html> diff --git a/tests/wpt/tests/serial/requestPort/sandboxed_iframe.https.window.js b/tests/wpt/tests/serial/requestPort/sandboxed_iframe.https.window.js index 15bdc5a9ed1..938c65035a0 100644 --- a/tests/wpt/tests/serial/requestPort/sandboxed_iframe.https.window.js +++ b/tests/wpt/tests/serial/requestPort/sandboxed_iframe.https.window.js @@ -15,10 +15,6 @@ promise_test(async (t) => { await new Promise(resolve => { window.addEventListener('message', t.step_func(messageEvent => { - // Ignore internal testdriver.js messages (web-platform-tests/wpt#48326) - if ((messageEvent.data.type || '').startsWith('testdriver-')) { - return; - } // The failure message of no device chosen is expected. The point here is // to validate not failing because of a sandboxed iframe. assert_true(messageEvent.data.includes('NotFoundError')); diff --git a/tests/wpt/tests/serial/resources/open-in-iframe.html b/tests/wpt/tests/serial/resources/open-in-iframe.html index a6fc581abad..9bf8beb66aa 100644 --- a/tests/wpt/tests/serial/resources/open-in-iframe.html +++ b/tests/wpt/tests/serial/resources/open-in-iframe.html @@ -13,10 +13,6 @@ test_driver.set_test_context(parent); window.onmessage = messageEvent => { - // Ignore internal testdriver.js messages (web-platform-tests/wpt#48326) - if ((messageEvent.data.type || '').startsWith('testdriver-')) { - return; - } switch (messageEvent.data.type) { case 'GetPorts': navigator.serial.getPorts() diff --git a/tests/wpt/tests/service-workers/service-worker/tentative/static-router/static-router-resource-timing.https.html b/tests/wpt/tests/service-workers/service-worker/tentative/static-router/static-router-resource-timing.https.html index c85c5ea3b9a..e32436da41b 100644 --- a/tests/wpt/tests/service-workers/service-worker/tentative/static-router/static-router-resource-timing.https.html +++ b/tests/wpt/tests/service-workers/service-worker/tentative/static-router/static-router-resource-timing.https.html @@ -47,8 +47,8 @@ function test_resource_timing(options) { assert_equals(entryList.length, 1, description); const entry = entryList[0]; - assert_equals(entry.matchedSourceType, options.matched_source_type, description); - assert_equals(entry.finalSourceType, options.final_source_type, description); + assert_equals(entry.workerMatchedSourceType, options.matched_source_type, description); + assert_equals(entry.workerFinalSourceType, options.final_source_type, description); assert_greater_than(entry.workerRouterEvaluationStart, 0, description); switch (entry.matchedSouceType) { @@ -60,16 +60,17 @@ function test_resource_timing(options) { case 'cache': assert_equals(entry.workerStart, 0, description); assert_greater_than_equal(entry.workerCacheLookupStart, entry.workerRouterEvaluationStart, description); - if (entry.finalSourceType === 'cache') { - assert_equals(entry.fetchStart, 0, description); + if (entry.workerFinalSourceType === 'cache') { + assert_equals(entry.fetchStart, entry.responseStart, description); assert_less_than_equal(entry.workerCacheLookupStart, entry.responseStart, description); + assert_equals(entry.deliveryType, 'cache-storage', description); } else { assert_less_than_equal(entry.workerCacheLookupStart, entry.fetchStart, description); } break; case 'race-network-and-fetch': assert_equals(entry.workerCacheLookupStart, 0, description); - if (entry.finalSourceType === 'network') { + if (entry.workerFinalSourceType === 'network') { assert_equals(entry.workerStart, 0, description); assert_less_than_equal(entry.workerRouterEvaluationStart, entry.fetchStart, description); } else { diff --git a/tests/wpt/tests/shared-storage/create-worklet-in-detached-frame.tentative.https.sub.html b/tests/wpt/tests/shared-storage/create-worklet-in-detached-frame.tentative.https.sub.html new file mode 100644 index 00000000000..6751a5031bf --- /dev/null +++ b/tests/wpt/tests/shared-storage/create-worklet-in-detached-frame.tentative.https.sub.html @@ -0,0 +1,22 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<body> + <iframe></iframe> + <script> + promise_test(async t => { + const iframe = document.querySelector('iframe'); + const childSharedStorage = iframe.contentWindow.sharedStorage; + iframe.remove(); + + try { + await childSharedStorage.createWorklet("resources/simple-module.js"); + } catch (e) { + assert_equals(e.name, 'InvalidAccessError'); + return; + } + assert_unreached("did not reject"); + }, 'createWorklet() when frame is detached'); + </script> +</body> diff --git a/tests/wpt/tests/svg/text/reftests/text-path-transformed-ref.html b/tests/wpt/tests/svg/text/reftests/text-path-transformed-ref.html new file mode 100644 index 00000000000..7d2f3a2d5c3 --- /dev/null +++ b/tests/wpt/tests/svg/text/reftests/text-path-transformed-ref.html @@ -0,0 +1,7 @@ +<!doctype html> +<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <path id="guide" d="M 0 100 H 200" stroke="black" stroke-width="2" /> + <text x="0" y="0"> + <textPath xlink:href="#guide" font-size="40">XXXX</textPath> + </text> +</svg> diff --git a/tests/wpt/tests/svg/text/reftests/text-path-transformed.html b/tests/wpt/tests/svg/text/reftests/text-path-transformed.html new file mode 100644 index 00000000000..0c1b5a5d0e6 --- /dev/null +++ b/tests/wpt/tests/svg/text/reftests/text-path-transformed.html @@ -0,0 +1,12 @@ +<!doctype html> +<meta charset="utf-8"> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1921662"> +<link rel="match" href="text-path-transformed-ref.html"> +<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <path id="guide" d="M 0 50 H 200" stroke="black" transform="scale(2)" /> + <text x="0" y="0"> + <textPath xlink:href="#guide" font-size="40">XXXX</textPath> + </text> +</svg> diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js b/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js index 80abe67b021..87ae9e1f33d 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js @@ -43,10 +43,19 @@ } else if (data.type === "testdriver-event") { const event_data = JSON.parse(data.message); const event_name = event_data.method; - const event = new Event(event_name); - event.payload = event_data.params; - event_target.dispatchEvent(event); + const testdriver_event = new Event(event_name); + testdriver_event.payload = event_data.params; + event_target.dispatchEvent(testdriver_event); + } else { + return; } + + // Don't expose testdriver.js-internal messages to tests. Because + // `testdriver.js` precedes test scripts in the markup, this "message" + // listener should be registered and run first [0]. + // + // [0]: https://html.spec.whatwg.org/multipage/webappapis.html#event-handler-attributes + event.stopImmediatePropagation(); }); function is_test_context() { diff --git a/tests/wpt/tests/video-rvfc/request-video-frame-callback-before-xr-session.https.html b/tests/wpt/tests/video-rvfc/request-video-frame-callback-before-xr-session.https.html index 5277fbba92f..10c86848250 100644 --- a/tests/wpt/tests/video-rvfc/request-video-frame-callback-before-xr-session.https.html +++ b/tests/wpt/tests/video-rvfc/request-video-frame-callback-before-xr-session.https.html @@ -12,6 +12,7 @@ // Start the video.rVFC callbacks before starting the XR Session. let video = document.createElement('video'); +video.muted = true; video.src = getVideoURI('/media/movie_5'); var numberVFCs = 0; diff --git a/tests/wpt/tests/video-rvfc/request-video-frame-callback-dom.html b/tests/wpt/tests/video-rvfc/request-video-frame-callback-dom.html index c1804b4edd0..a0ea1e370bd 100644 --- a/tests/wpt/tests/video-rvfc/request-video-frame-callback-dom.html +++ b/tests/wpt/tests/video-rvfc/request-video-frame-callback-dom.html @@ -18,6 +18,7 @@ promise_test(async function(t) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; video.requestVideoFrameCallback(done); video.src = testVideo.url; @@ -32,6 +33,7 @@ function rvfcStyleTest(applyStyle, description) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); applyStyle(video); diff --git a/tests/wpt/tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html b/tests/wpt/tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html index 7afbabcee0b..d5f69ec285c 100644 --- a/tests/wpt/tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html +++ b/tests/wpt/tests/video-rvfc/request-video-frame-callback-during-xr-session.https.html @@ -18,6 +18,7 @@ let testFunction = async function(session, fakeDeviceController, t) { // Start the video.rVFC callbacks while we are in the the XR Session. let video = document.createElement('video'); + video.muted = true; video.src = getVideoURI('/media/movie_5'); var numberVFCs = 0; diff --git a/tests/wpt/tests/video-rvfc/request-video-frame-callback-parallel.html b/tests/wpt/tests/video-rvfc/request-video-frame-callback-parallel.html index 682fd0ac8f6..3f54d5bb173 100644 --- a/tests/wpt/tests/video-rvfc/request-video-frame-callback-parallel.html +++ b/tests/wpt/tests/video-rvfc/request-video-frame-callback-parallel.html @@ -12,6 +12,7 @@ promise_test(async function(t) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); let firstTime; @@ -39,6 +40,7 @@ promise_test(async function(t) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); let secondCallbackId; diff --git a/tests/wpt/tests/video-rvfc/request-video-frame-callback-repeating.html b/tests/wpt/tests/video-rvfc/request-video-frame-callback-repeating.html index 38e4abafd4a..6c3fb9f09f8 100644 --- a/tests/wpt/tests/video-rvfc/request-video-frame-callback-repeating.html +++ b/tests/wpt/tests/video-rvfc/request-video-frame-callback-repeating.html @@ -12,6 +12,7 @@ promise_test(async function(t) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); let firstTime; @@ -45,6 +46,7 @@ promise_test(async function(t) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); let maxNumberOfCalls = 10; diff --git a/tests/wpt/tests/video-rvfc/request-video-frame-callback.html b/tests/wpt/tests/video-rvfc/request-video-frame-callback.html index 256216e8fc0..ece2ea4a785 100644 --- a/tests/wpt/tests/video-rvfc/request-video-frame-callback.html +++ b/tests/wpt/tests/video-rvfc/request-video-frame-callback.html @@ -23,6 +23,7 @@ promise_test(async function(t) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); let id = video.requestVideoFrameCallback( @@ -47,6 +48,7 @@ promise_test(async function(t) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); video.requestVideoFrameCallback( @@ -72,6 +74,7 @@ promise_test(async function(t) { const promise = new Promise(resolve => done = resolve); let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); let id = video.requestVideoFrameCallback( @@ -99,6 +102,7 @@ promise_test(async function(t) { test(function(t) { let video = document.createElement('video'); + video.muted = true; document.body.appendChild(video); // requestVideoFrameCallback() expects 1 function as a parameter. @@ -120,6 +124,7 @@ test(function(t) { promise_test(async function(t) { let video = document.createElement('video'); + video.muted = true; video.autoplay = true; document.body.appendChild(video); diff --git a/tests/wpt/tests/web-animations/interfaces/DocumentTimeline/duration.tentative.html b/tests/wpt/tests/web-animations/interfaces/DocumentTimeline/duration.tentative.html new file mode 100644 index 00000000000..8a307f986e9 --- /dev/null +++ b/tests/wpt/tests/web-animations/interfaces/DocumentTimeline/duration.tentative.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>DocumentTimeline.duration</title> +<link rel="help" href="https://drafts.csswg.org/web-animations-2/#dom-animationtimeline-duration"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../../testcommon.js"></script> +<script src="../../resources/timing-override.js"></script> +<body> +<div id="log"></div> +<script> +'use strict'; + +test(t => { + const timeline = new DocumentTimeline(); + assert_equals(timeline.duration, null); +}, 'A document timeline does not have a duration'); + +</script> +</body> diff --git a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/dom_content_loaded/dom_content_loaded.py b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/dom_content_loaded/dom_content_loaded.py index 00cdad1dbb6..aa9efb7e3bf 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/dom_content_loaded/dom_content_loaded.py +++ b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/dom_content_loaded/dom_content_loaded.py @@ -155,8 +155,9 @@ async def test_new_context(bidi_session, subscribe_events, wait_for_event, wait_ assert event["navigation"] is not None +@pytest.mark.parametrize("sandbox", [None, "sandbox_1"]) async def test_document_write( - bidi_session, subscribe_events, inline, top_context, wait_for_event, wait_for_future_safe + bidi_session, subscribe_events, new_tab, wait_for_event, wait_for_future_safe, sandbox ): await subscribe_events(events=[DOM_CONTENT_LOADED_EVENT]) @@ -164,7 +165,7 @@ async def test_document_write( await bidi_session.script.evaluate( expression="""document.open(); document.write("<h1>Replaced</h1>"); document.close();""", - target=ContextTarget(top_context["context"]), + target=ContextTarget(new_tab["context"], sandbox), await_promise=False, ) @@ -172,7 +173,7 @@ async def test_document_write( assert_navigation_info( event, - {"context": top_context["context"]}, + {"context": new_tab["context"]}, ) assert event["navigation"] is not None diff --git a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/fragment_navigated/fragment_navigated.py b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/fragment_navigated/fragment_navigated.py index 14fa2260561..45a65cacdf0 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/fragment_navigated/fragment_navigated.py +++ b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/fragment_navigated/fragment_navigated.py @@ -260,7 +260,8 @@ async def test_new_context(bidi_session, subscribe_events, type_hint): remove_listener() -async def test_document_write(bidi_session, subscribe_events, top_context): +@pytest.mark.parametrize("sandbox", [None, "sandbox_1"]) +async def test_document_write(bidi_session, subscribe_events, new_tab, sandbox): await subscribe_events(events=[FRAGMENT_NAVIGATED_EVENT]) events = [] @@ -272,7 +273,7 @@ async def test_document_write(bidi_session, subscribe_events, top_context): await bidi_session.script.evaluate( expression="""document.open(); document.write("<h1>Replaced</h1>"); document.close();""", - target=ContextTarget(top_context["context"]), + target=ContextTarget(new_tab["context"], sandbox), await_promise=False ) diff --git a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/load/load.py b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/load/load.py index 4c2c6e74c53..600e4cb3156 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/load/load.py +++ b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/load/load.py @@ -135,8 +135,9 @@ async def test_new_context(bidi_session, subscribe_events, wait_for_event, wait_ assert event["navigation"] is not None +@pytest.mark.parametrize("sandbox", [None, "sandbox_1"]) async def test_document_write( - bidi_session, subscribe_events, top_context, wait_for_event, wait_for_future_safe + bidi_session, subscribe_events, new_tab, wait_for_event, wait_for_future_safe, sandbox ): await subscribe_events(events=[CONTEXT_LOAD_EVENT]) @@ -144,7 +145,7 @@ async def test_document_write( await bidi_session.script.evaluate( expression="""document.open(); document.write("<h1>Replaced</h1>"); document.close();""", - target=ContextTarget(top_context["context"]), + target=ContextTarget(new_tab["context"], sandbox), await_promise=False, ) @@ -152,7 +153,7 @@ async def test_document_write( assert_navigation_info( event, - {"context": top_context["context"]}, + {"context": new_tab["context"]}, ) assert event["navigation"] is not None diff --git a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_started/navigation_started.py b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_started/navigation_started.py index 24fcb48d29a..effb359250b 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_started/navigation_started.py +++ b/tests/wpt/tests/webdriver/tests/bidi/browsing_context/navigation_started/navigation_started.py @@ -237,7 +237,8 @@ async def test_same_document_navigation(bidi_session, new_tab, url, subscribe_ev remove_listener() -async def test_document_write(bidi_session, subscribe_events, top_context): +@pytest.mark.parametrize("sandbox", [None, "sandbox_1"]) +async def test_document_write(bidi_session, subscribe_events, new_tab, sandbox): await subscribe_events(events=[NAVIGATION_STARTED_EVENT]) # Track all received browsingContext.navigationStarted events in the events array @@ -252,7 +253,7 @@ async def test_document_write(bidi_session, subscribe_events, top_context): await bidi_session.script.evaluate( expression="""document.open(); document.write("<h1>Replaced</h1>"); document.close();""", - target=ContextTarget(top_context["context"]), + target=ContextTarget(new_tab["context"], sandbox), await_promise=False, ) diff --git a/tests/wpt/tests/webdriver/tests/bidi/input/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/input/__init__.py index 809379d56dc..76288c6be28 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/input/__init__.py +++ b/tests/wpt/tests/webdriver/tests/bidi/input/__init__.py @@ -2,6 +2,39 @@ import json from webdriver.bidi.modules.script import ContextTarget + +async def add_mouse_listeners(bidi_session, context, include_mousemove=True): + result = await bidi_session.script.call_function( + function_declaration="""(include_mousemove) => { + window.allEvents = { events: []}; + + const events = ["auxclick", "click", "mousedown", "mouseup"]; + if (include_mousemove) { + events.push("mousemove"); + } + + function handleEvent(event) { + window.allEvents.events.push({ + type: event.type, + detail: event.detail, + clientX: event.clientX, + clientY: event.clientY, + isTrusted: event.isTrusted, + button: event.button, + buttons: event.buttons, + }); + }; + + for (const event of events) { + document.addEventListener(event, handleEvent); + } + }""", + arguments=[{"type": "boolean", "value": include_mousemove}], + await_promise=False, + target=ContextTarget(context["context"]), + ) + + async def get_object_from_context(bidi_session, context, object_path): """Return a plain JS object from a given context, accessible at the given object_path""" events_str = await bidi_session.script.evaluate( @@ -29,6 +62,7 @@ async def get_events(bidi_session, context): # tests expect ''. if "code" in e and e["code"] == "Unidentified": e["code"] = "" + return events diff --git a/tests/wpt/tests/webdriver/tests/bidi/input/perform_actions/invalid.py b/tests/wpt/tests/webdriver/tests/bidi/input/perform_actions/invalid.py index 1c5983159c1..0ed9fa3b4bf 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/input/perform_actions/invalid.py +++ b/tests/wpt/tests/webdriver/tests/bidi/input/perform_actions/invalid.py @@ -1,3 +1,4 @@ +# META: timeout=long import pytest import pytest_asyncio diff --git a/tests/wpt/tests/webdriver/tests/bidi/input/perform_actions/queue.py b/tests/wpt/tests/webdriver/tests/bidi/input/perform_actions/queue.py new file mode 100644 index 00000000000..102e7b1b28a --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/input/perform_actions/queue.py @@ -0,0 +1,123 @@ +import asyncio +import pytest + +from webdriver.bidi.modules.input import Actions + +from tests.support.helpers import filter_supported_key_events +from tests.support.keys import Keys + +from .. import add_mouse_listeners, get_events, get_keys_value +from ... import recursive_compare + +pytestmark = pytest.mark.asyncio + + +async def test_parallel_key(bidi_session, top_context, setup_key_test): + actions_1 = Actions() + actions_1.add_key().send_keys("a").key_down(Keys.SHIFT) + + actions_2 = Actions() + actions_2.add_key().send_keys("B").key_up(Keys.SHIFT) + + # Run both actions in parallel to check that they are queued for + # sequential execution. + actions_performed = [ + bidi_session.input.perform_actions( + actions=actions_1, context=top_context["context"] + ), + bidi_session.input.perform_actions( + actions=actions_2, context=top_context["context"] + ), + ] + await asyncio.gather(*actions_performed) + + expected = [ + {"code": "KeyA", "key": "a", "type": "keydown"}, + {"code": "KeyA", "key": "a", "type": "keypress"}, + {"code": "KeyA", "key": "a", "type": "keyup"}, + {"code": "ShiftLeft", "key": "Shift", "type": "keydown"}, + {"code": "KeyB", "key": "B", "type": "keydown"}, + {"code": "KeyB", "key": "B", "type": "keypress"}, + {"code": "KeyB", "key": "B", "type": "keyup"}, + {"code": "ShiftLeft", "key": "Shift", "type": "keyup"}, + ] + + all_events = await get_events(bidi_session, top_context["context"]) + (key_events, expected) = filter_supported_key_events(all_events, expected) + + recursive_compare(expected, key_events) + + keys_value = await get_keys_value(bidi_session, top_context["context"]) + assert keys_value == "aB" + + +async def test_parallel_pointer(bidi_session, get_test_page, top_context): + url = get_test_page() + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=url, + wait="complete") + + await add_mouse_listeners(bidi_session, top_context) + + point_1 = {"x": 5, "y": 10} + point_2 = {"x": 10, "y": 20} + + actions_1 = Actions() + ( + actions_1.add_pointer() + .pointer_move(x=point_1["x"], y=point_1["y"]) + .pointer_down(button=0) + .pointer_up(button=0) + ) + + actions_2 = Actions() + ( + actions_2.add_pointer() + .pointer_move(x=point_2["x"], y=point_2["y"]) + .pointer_down(button=0) + .pointer_up(button=0) + ) + + # Run both actions in parallel to check that they are queued for + # sequential execution. + actions_performed = [ + bidi_session.input.perform_actions( + actions=actions_1, context=top_context["context"] + ), + bidi_session.input.perform_actions( + actions=actions_2, context=top_context["context"] + ), + ] + await asyncio.gather(*actions_performed) + + common_attributes = { + "button": 0, + "buttons": 0, + "detail": 1, + "isTrusted": True, + "clientX": point_1["x"], + "clientY": point_1["y"], + } + + mouse_events = [ + {"type": "mousemove"}, + {"type": "mousedown", "buttons": 1}, + {"type": "mouseup"}, + {"type": "click"}, + ] + + # Expected events for the first action. + expected_events_1 = [{**common_attributes, **event} + for event in mouse_events] + + # Expected events for the second action. + common_attributes.update( + {"clientX": point_2["x"], "clientY": point_2["y"]}) + expected_events_2 = [{**common_attributes, **event} + for event in mouse_events] + + events = await get_events(bidi_session, top_context["context"]) + + assert events[:4] == expected_events_1 + assert events[4:] == expected_events_2 diff --git a/tests/wpt/tests/webdriver/tests/bidi/input/release_actions/queue.py b/tests/wpt/tests/webdriver/tests/bidi/input/release_actions/queue.py new file mode 100644 index 00000000000..d825a0468bf --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/input/release_actions/queue.py @@ -0,0 +1,126 @@ +import asyncio +import pytest + +from webdriver.bidi.modules.input import Actions + +from tests.support.helpers import filter_supported_key_events +from tests.support.keys import Keys + +from .. import add_mouse_listeners, get_events, get_keys_value +from ... import recursive_compare + + +pytestmark = pytest.mark.asyncio + + +async def test_parallel_key(bidi_session, top_context, setup_key_test): + actions_1 = Actions() + actions_1.add_key().key_down("a").key_down(Keys.SHIFT) + + actions_2 = Actions() + actions_2.add_key().key_down("b") + + # Run the first release actions in-between to check that it is queued for + # sequential execution, and the state is reset before the 2nd action. + actions_performed = [ + bidi_session.input.perform_actions( + actions=actions_1, context=top_context["context"] + ), + bidi_session.input.release_actions(context=top_context["context"]), + bidi_session.input.perform_actions( + actions=actions_2, context=top_context["context"] + ), + bidi_session.input.release_actions(context=top_context["context"]), + ] + await asyncio.gather(*actions_performed) + + expected = [ + {"code": "KeyA", "key": "a", "type": "keydown"}, + {"code": "KeyA", "key": "a", "type": "keypress"}, + {"code": "ShiftLeft", "key": "Shift", "type": "keydown"}, + {"code": "ShiftLeft", "key": "Shift", "type": "keyup"}, + {"code": "KeyA", "key": "a", "type": "keyup"}, + {"code": "KeyB", "key": "b", "type": "keydown"}, + {"code": "KeyB", "key": "b", "type": "keypress"}, + {"code": "KeyB", "key": "b", "type": "keyup"}, + ] + + all_events = await get_events(bidi_session, top_context["context"]) + (key_events, expected) = filter_supported_key_events(all_events, expected) + + recursive_compare(expected, key_events) + + keys_value = await get_keys_value(bidi_session, top_context["context"]) + assert keys_value == "ab" + + +async def test_parallel_pointer(bidi_session, get_test_page, top_context): + url = get_test_page() + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=url, + wait="complete") + + await add_mouse_listeners(bidi_session, top_context) + + point_1 = {"x": 5, "y": 10} + point_2 = {"x": 10, "y": 20} + + actions_1 = Actions() + ( + actions_1.add_pointer() + .pointer_move(x=point_1["x"], y=point_1["y"]) + .pointer_down(button=0) + ) + + actions_2 = Actions() + ( + actions_2.add_pointer() + .pointer_move(x=point_2["x"], y=point_2["y"]) + .pointer_down(button=0) + ) + + # Run the first release actions in-between to check that it is queued for + # sequential execution, and the state is reset before the 2nd action. + actions_performed = [ + bidi_session.input.perform_actions( + actions=actions_1, context=top_context["context"] + ), + bidi_session.input.release_actions(context=top_context["context"]), + bidi_session.input.perform_actions( + actions=actions_2, context=top_context["context"] + ), + bidi_session.input.release_actions(context=top_context["context"]), + ] + await asyncio.gather(*actions_performed) + + common_attributes = { + "button": 0, + "buttons": 0, + "detail": 1, + "isTrusted": True, + "clientX": point_1["x"], + "clientY": point_1["y"], + } + + mouse_events = [ + {"type": "mousemove"}, + {"type": "mousedown", "buttons": 1}, + {"type": "mouseup"}, + {"type": "click"}, + ] + + # Expected events for the first action. + expected_events_1 = [{**common_attributes, **event} + for event in mouse_events] + + # Expected events for the second action. + common_attributes.update( + {"clientX": point_2["x"], "clientY": point_2["y"]}) + expected_events_2 = [{**common_attributes, **event} + for event in mouse_events] + + events = await get_events(bidi_session, top_context["context"]) + + assert events[:4] == expected_events_1 + assert events[4:] == expected_events_2 diff --git a/tests/wpt/tests/webdriver/tests/bidi/network/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/network/__init__.py index 0a087bf8733..0c3338362d3 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/network/__init__.py +++ b/tests/wpt/tests/webdriver/tests/bidi/network/__init__.py @@ -388,6 +388,9 @@ PAGE_REDIRECT_HTTP_EQUIV = ( PAGE_REDIRECTED_HTML = "/webdriver/tests/bidi/network/support/redirected.html" PAGE_SERVICEWORKER_HTML = "/webdriver/tests/bidi/network/support/serviceworker.html" +SCRIPT_CONSOLE_LOG = urllib.parse.quote_plus("console.log('test')") +SCRIPT_CONSOLE_LOG_IN_MODULE = urllib.parse.quote_plus("export default function foo() { console.log('from module') }") + STYLESHEET_GREY_BACKGROUND = urllib.parse.quote_plus("html, body { background-color: #ccc; }") STYLESHEET_RED_COLOR = urllib.parse.quote_plus("html, body { color: red; }") diff --git a/tests/wpt/tests/webdriver/tests/bidi/network/add_intercept/contexts.py b/tests/wpt/tests/webdriver/tests/bidi/network/add_intercept/contexts.py index 7606b2368b6..cc82fa75a7d 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/network/add_intercept/contexts.py +++ b/tests/wpt/tests/webdriver/tests/bidi/network/add_intercept/contexts.py @@ -22,7 +22,7 @@ async def test_frame_context( bidi_session, url, inline, - top_context, + new_tab, add_intercept, fetch, setup_network_test, @@ -37,17 +37,17 @@ async def test_frame_context( RESPONSE_STARTED_EVENT, RESPONSE_COMPLETED_EVENT, ], - contexts=[top_context["context"]], + contexts=[new_tab["context"]], ) frame_url = inline("<div>foo</div>") test_url = inline(f"<iframe src='{frame_url}'></iframe>", domain=domain) await bidi_session.browsing_context.navigate( - url=test_url, context=top_context["context"], wait="complete" + url=test_url, context=new_tab["context"], wait="complete" ) # Retrieve the context for the iframe. - contexts = await bidi_session.browsing_context.get_tree(root=top_context["context"]) + contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"]) assert len(contexts[0]["children"]) == 1 frame = contexts[0]["children"][0] @@ -56,7 +56,7 @@ async def test_frame_context( await add_intercept( phases=[phase], url_patterns=[{"type": "string", "pattern": text_url}], - contexts=[top_context["context"]], + contexts=[new_tab["context"]], ) # Request in the iframe context should be blocked. @@ -72,7 +72,7 @@ async def test_frame_context( async def test_other_context( bidi_session, url, - top_context, + new_tab, add_intercept, fetch, setup_network_test, @@ -80,14 +80,14 @@ async def test_other_context( wait_for_future_safe, phase ): - # Subscribe to network events only in top_context + # Subscribe to network events only in new_tab await setup_network_test( events=[ BEFORE_REQUEST_SENT_EVENT, RESPONSE_STARTED_EVENT, RESPONSE_COMPLETED_EVENT, ], - contexts=[top_context["context"]], + contexts=[new_tab["context"]], ) # Create another tab, where network events are not monitored. @@ -104,10 +104,10 @@ async def test_other_context( ) - # Request to top_context should be blocked. + # Request to new_tab should be blocked. [event_name, assert_network_event] = PHASE_TO_EVENT_MAP[phase] on_network_event = wait_for_event(event_name) - asyncio.ensure_future(fetch(text_url, context=top_context)) + asyncio.ensure_future(fetch(text_url, context=new_tab)) event = await wait_for_future_safe(on_network_event) assert_network_event(event, is_blocked=True) @@ -120,7 +120,7 @@ async def test_other_context( async def test_other_context_with_event_subscription( bidi_session, url, - top_context, + new_tab, add_intercept, fetch, setup_network_test, @@ -140,20 +140,20 @@ async def test_other_context_with_event_subscription( RESPONSE_STARTED_EVENT, RESPONSE_COMPLETED_EVENT, ], - contexts=[top_context["context"], other_context["context"]], + contexts=[new_tab["context"], other_context["context"]], ) - # Add an intercept to top_context only. + # Add an intercept to new_tab only. text_url = url(PAGE_EMPTY_TEXT) await add_intercept( phases=["beforeRequestSent"], url_patterns=[{"type": "string", "pattern": text_url}], - contexts=[top_context["context"]] + contexts=[new_tab["context"]] ) - # Request to the top_context should be blocked. + # Request to the new_tab should be blocked. on_network_event = wait_for_event(BEFORE_REQUEST_SENT_EVENT) - asyncio.ensure_future(fetch(text_url, context=top_context)) + asyncio.ensure_future(fetch(text_url, context=new_tab)) event = await wait_for_future_safe(on_network_event) assert_before_request_sent_event( event, is_blocked=True @@ -172,7 +172,7 @@ async def test_other_context_with_event_subscription( async def test_two_contexts_same_intercept( bidi_session, url, - top_context, + new_tab, add_intercept, fetch, setup_network_test, @@ -189,7 +189,7 @@ async def test_two_contexts_same_intercept( events=[ BEFORE_REQUEST_SENT_EVENT, ], - contexts=[top_context["context"], other_context["context"]], + contexts=[new_tab["context"], other_context["context"]], ) # Add an intercept to both contexts @@ -197,12 +197,12 @@ async def test_two_contexts_same_intercept( intercept = await add_intercept( phases=["beforeRequestSent"], url_patterns=[{"type": "string", "pattern": text_url}], - contexts=[top_context["context"], other_context["context"]], + contexts=[new_tab["context"], other_context["context"]], ) - # Request on the top_context should be blocked. + # Request on the new_tab should be blocked. on_network_event = wait_for_event(BEFORE_REQUEST_SENT_EVENT) - asyncio.ensure_future(fetch(text_url, context=top_context)) + asyncio.ensure_future(fetch(text_url, context=new_tab)) event = await wait_for_future_safe(on_network_event) assert_before_request_sent_event( event, is_blocked=True, intercepts=[intercept] @@ -221,7 +221,7 @@ async def test_two_contexts_same_intercept( async def test_two_contexts_global_intercept( bidi_session, url, - top_context, + new_tab, add_intercept, fetch, setup_network_test, @@ -238,24 +238,24 @@ async def test_two_contexts_global_intercept( events=[ BEFORE_REQUEST_SENT_EVENT, ], - contexts=[top_context["context"], other_context["context"]], + contexts=[new_tab["context"], other_context["context"]], ) - # Add an intercept for top_context and a global intercept. + # Add an intercept for new_tab and a global intercept. text_url = url(PAGE_EMPTY_TEXT) context_intercept = await add_intercept( phases=["beforeRequestSent"], url_patterns=[{"type": "string", "pattern": text_url}], - contexts=[top_context["context"]], + contexts=[new_tab["context"]], ) global_intercept = await add_intercept( phases=["beforeRequestSent"], url_patterns=[{"type": "string", "pattern": text_url}], ) - # Request on the top_context should be blocked and list both intercepts. + # Request on the new_tab should be blocked and list both intercepts. on_network_event = wait_for_event(BEFORE_REQUEST_SENT_EVENT) - asyncio.ensure_future(fetch(text_url, context=top_context)) + asyncio.ensure_future(fetch(text_url, context=new_tab)) event = await wait_for_future_safe(on_network_event) assert_before_request_sent_event( event, is_blocked=True, intercepts=[context_intercept, global_intercept] diff --git a/tests/wpt/tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent_cached.py b/tests/wpt/tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent_cached.py index e2e166cd774..4177d316c51 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent_cached.py +++ b/tests/wpt/tests/webdriver/tests/bidi/network/before_request_sent/before_request_sent_cached.py @@ -6,8 +6,9 @@ from tests.support.sync import AsyncPoll from .. import ( assert_before_request_sent_event, get_cached_url, - PAGE_EMPTY_TEXT, BEFORE_REQUEST_SENT_EVENT, + SCRIPT_CONSOLE_LOG, + SCRIPT_CONSOLE_LOG_IN_MODULE, STYLESHEET_GREY_BACKGROUND, STYLESHEET_RED_COLOR, ) @@ -290,3 +291,208 @@ async def test_page_with_cached_duplicated_stylesheets( cached_import_css_event, expected_request={"method": "GET", "url": cached_import_css_url}, ) + + +@pytest.mark.asyncio +async def test_page_with_cached_script_javascript( + bidi_session, + url, + inline, + setup_network_test, + top_context, +): + network_events = await setup_network_test( + events=[ + BEFORE_REQUEST_SENT_EVENT, + ] + ) + events = network_events[BEFORE_REQUEST_SENT_EVENT] + + cached_script_js_url = url(get_cached_url("text/javascript", SCRIPT_CONSOLE_LOG)) + page_with_cached_js = inline( + f""" + <head><script src="{cached_script_js_url}"></script></head> + <body>test page with cached js script file</body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_cached_js, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript file. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 2) + assert len(events) == 2 + + assert_before_request_sent_event( + events[0], + expected_request={"method": "GET", "url": page_with_cached_js}, + ) + assert_before_request_sent_event( + events[1], + expected_request={"method": "GET", "url": cached_script_js_url}, + ) + + # Reload the page. + await bidi_session.browsing_context.reload(context=top_context["context"]) + + # Expect two events, one for the document and one for the javascript file. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 4) + assert len(events) == 4 + + assert_before_request_sent_event( + events[2], + expected_request={"method": "GET", "url": page_with_cached_js}, + ) + assert_before_request_sent_event( + events[3], + expected_request={"method": "GET", "url": cached_script_js_url}, + ) + + page_with_2_cached_js = inline( + f""" + <head> + <script src="{cached_script_js_url}"></script> + <script src="{cached_script_js_url}"></script> + </head> + <body>test page with 2 cached javascript files</body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_2_cached_js, + wait="complete", + ) + + # Expect three events, one for the document and two for script javascript files. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 7) + assert len(events) == 7 + + # Assert only cached events after reload. + cached_events = events[4:] + + assert_before_request_sent_event( + cached_events[0], + expected_request={"method": "GET", "url": page_with_2_cached_js}, + ) + assert_before_request_sent_event( + cached_events[1], + expected_request={"method": "GET", "url": cached_script_js_url}, + ) + assert_before_request_sent_event( + cached_events[2], + expected_request={"method": "GET", "url": cached_script_js_url}, + ) + + +@pytest.mark.asyncio +async def tst_page_with_cached_javascript_module( + bidi_session, + url, + inline, + setup_network_test, + top_context, +): + network_events = await setup_network_test( + events=[ + BEFORE_REQUEST_SENT_EVENT, + ] + ) + events = network_events[BEFORE_REQUEST_SENT_EVENT] + + cached_js_module_url = url( + get_cached_url("text/javascript", SCRIPT_CONSOLE_LOG_IN_MODULE) + ) + page_with_cached_js_module = inline( + f""" + <body> + test page with cached js module + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + </body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_cached_js_module, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 2) + assert len(events) == 2 + + assert_before_request_sent_event( + events[0], + expected_request={"method": "GET", "url": page_with_cached_js_module}, + ) + assert_before_request_sent_event( + events[1], + expected_request={"method": "GET", "url": cached_js_module_url}, + ) + + # Reload the page. + await bidi_session.browsing_context.reload(context=top_context["context"]) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 4) + assert len(events) == 4 + + assert_before_request_sent_event( + events[2], + expected_request={"method": "GET", "url": page_with_cached_js_module}, + ) + assert_before_request_sent_event( + events[3], + expected_request={"method": "GET", "url": cached_js_module_url}, + ) + + page_with_2_cached_js_modules = inline( + f""" + <body> + test page with 2 cached javascript modules + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + </body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_2_cached_js_modules, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 6) + assert len(events) == 6 + + # Assert only cached events after reload. + cached_events = events[4:] + + assert_before_request_sent_event( + cached_events[0], + expected_request={"method": "GET", "url": page_with_2_cached_js_modules}, + ) + assert_before_request_sent_event( + cached_events[1], + expected_request={"method": "GET", "url": cached_js_module_url}, + ) diff --git a/tests/wpt/tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py b/tests/wpt/tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py index 59756ba0d6a..dac13abf61b 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py +++ b/tests/wpt/tests/webdriver/tests/bidi/network/response_completed/response_completed_cached.py @@ -8,6 +8,8 @@ from .. import ( get_cached_url, PAGE_EMPTY_TEXT, RESPONSE_COMPLETED_EVENT, + SCRIPT_CONSOLE_LOG, + SCRIPT_CONSOLE_LOG_IN_MODULE, STYLESHEET_GREY_BACKGROUND, STYLESHEET_RED_COLOR, ) @@ -445,3 +447,221 @@ async def test_page_with_cached_duplicated_stylesheets( expected_request={"method": "GET", "url": cached_import_css_url}, expected_response={"url": cached_import_css_url, "fromCache": True}, ) + + +@pytest.mark.asyncio +async def test_page_with_cached_script_javascript( + bidi_session, + url, + inline, + setup_network_test, + top_context, +): + network_events = await setup_network_test( + events=[ + RESPONSE_COMPLETED_EVENT, + ] + ) + events = network_events[RESPONSE_COMPLETED_EVENT] + + cached_script_js_url = url(get_cached_url("text/javascript", SCRIPT_CONSOLE_LOG)) + page_with_cached_js = inline( + f""" + <head><script src="{cached_script_js_url}"></script></head> + <body>test page with cached js script file</body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_cached_js, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript file. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 2) + assert len(events) == 2 + + assert_response_event( + events[0], + expected_request={"method": "GET", "url": page_with_cached_js}, + expected_response={"url": page_with_cached_js, "fromCache": False}, + ) + assert_response_event( + events[1], + expected_request={"method": "GET", "url": cached_script_js_url}, + expected_response={"url": cached_script_js_url, "fromCache": False}, + ) + + # Reload the page. + await bidi_session.browsing_context.reload(context=top_context["context"]) + + # Expect two events, one for the document and one for the javascript file. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 4) + assert len(events) == 4 + + assert_response_event( + events[2], + expected_request={"method": "GET", "url": page_with_cached_js}, + expected_response={"url": page_with_cached_js, "fromCache": False}, + ) + assert_response_event( + events[3], + expected_request={"method": "GET", "url": cached_script_js_url}, + expected_response={"url": cached_script_js_url, "fromCache": True}, + ) + + page_with_2_cached_js = inline( + f""" + <head> + <script src="{cached_script_js_url}"></script> + <script src="{cached_script_js_url}"></script> + </head> + <body>test page with cached 2 javascript files</body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_2_cached_js, + wait="complete", + ) + + # Expect three events, one for the document and two for script javascript files. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 7) + assert len(events) == 7 + + # Assert only cached events after reload. + cached_events = events[4:] + + assert_response_event( + cached_events[0], + expected_request={"method": "GET", "url": page_with_2_cached_js}, + expected_response={"url": page_with_2_cached_js, "fromCache": False}, + ) + assert_response_event( + cached_events[1], + expected_request={"method": "GET", "url": cached_script_js_url}, + expected_response={"url": cached_script_js_url, "fromCache": True}, + ) + assert_response_event( + cached_events[2], + expected_request={"method": "GET", "url": cached_script_js_url}, + expected_response={"url": cached_script_js_url, "fromCache": True}, + ) + + +@pytest.mark.asyncio +async def test_page_with_cached_javascript_module( + bidi_session, + url, + inline, + setup_network_test, + top_context, +): + network_events = await setup_network_test( + events=[ + RESPONSE_COMPLETED_EVENT, + ] + ) + events = network_events[RESPONSE_COMPLETED_EVENT] + + cached_js_module_url = url( + get_cached_url("text/javascript", SCRIPT_CONSOLE_LOG_IN_MODULE) + ) + page_with_cached_js_module = inline( + f""" + <body> + test page with cached js module + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + </body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_cached_js_module, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 2) + assert len(events) == 2 + + assert_response_event( + events[0], + expected_request={"method": "GET", "url": page_with_cached_js_module}, + expected_response={"url": page_with_cached_js_module, "fromCache": False}, + ) + assert_response_event( + events[1], + expected_request={"method": "GET", "url": cached_js_module_url}, + expected_response={"url": cached_js_module_url, "fromCache": False}, + ) + + # Reload the page. + await bidi_session.browsing_context.reload(context=top_context["context"]) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 4) + assert len(events) == 4 + + assert_response_event( + events[2], + expected_request={"method": "GET", "url": page_with_cached_js_module}, + expected_response={"url": page_with_cached_js_module, "fromCache": False}, + ) + assert_response_event( + events[3], + expected_request={"method": "GET", "url": cached_js_module_url}, + expected_response={"url": cached_js_module_url, "fromCache": True}, + ) + + page_with_2_cached_js_modules = inline( + f""" + <body> + test page with 2 cached javascript modules + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + </body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_2_cached_js_modules, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 6) + assert len(events) == 6 + + # Assert only cached events after reload. + cached_events = events[4:] + + assert_response_event( + cached_events[0], + expected_request={"method": "GET", "url": page_with_2_cached_js_modules}, + expected_response={"url": page_with_2_cached_js_modules, "fromCache": False}, + ) + assert_response_event( + cached_events[1], + expected_request={"method": "GET", "url": cached_js_module_url}, + expected_response={"url": cached_js_module_url, "fromCache": True}, + ) diff --git a/tests/wpt/tests/webdriver/tests/bidi/network/response_started/response_started_cached.py b/tests/wpt/tests/webdriver/tests/bidi/network/response_started/response_started_cached.py index 9af0fae88f3..ccb7a97300d 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/network/response_started/response_started_cached.py +++ b/tests/wpt/tests/webdriver/tests/bidi/network/response_started/response_started_cached.py @@ -8,6 +8,8 @@ from .. import ( get_cached_url, PAGE_EMPTY_TEXT, RESPONSE_STARTED_EVENT, + SCRIPT_CONSOLE_LOG, + SCRIPT_CONSOLE_LOG_IN_MODULE, STYLESHEET_GREY_BACKGROUND, STYLESHEET_RED_COLOR, ) @@ -457,3 +459,221 @@ async def test_page_with_cached_duplicated_stylesheets( expected_request={"method": "GET", "url": cached_import_css_url}, expected_response={"url": cached_import_css_url, "fromCache": True}, ) + + +@pytest.mark.asyncio +async def test_page_with_cached_script_javascript( + bidi_session, + url, + inline, + setup_network_test, + top_context, +): + network_events = await setup_network_test( + events=[ + RESPONSE_STARTED_EVENT, + ] + ) + events = network_events[RESPONSE_STARTED_EVENT] + + cached_script_js_url = url(get_cached_url("text/javascript", SCRIPT_CONSOLE_LOG)) + page_with_cached_js = inline( + f""" + <head><script src="{cached_script_js_url}"></script></head> + <body>test page with cached js script file</body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_cached_js, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript file. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 2) + assert len(events) == 2 + + assert_response_event( + events[0], + expected_request={"method": "GET", "url": page_with_cached_js}, + expected_response={"url": page_with_cached_js, "fromCache": False}, + ) + assert_response_event( + events[1], + expected_request={"method": "GET", "url": cached_script_js_url}, + expected_response={"url": cached_script_js_url, "fromCache": False}, + ) + + # Reload the page. + await bidi_session.browsing_context.reload(context=top_context["context"]) + + # Expect two events, one for the document and one for the javascript file. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 4) + assert len(events) == 4 + + assert_response_event( + events[2], + expected_request={"method": "GET", "url": page_with_cached_js}, + expected_response={"url": page_with_cached_js, "fromCache": False}, + ) + assert_response_event( + events[3], + expected_request={"method": "GET", "url": cached_script_js_url}, + expected_response={"url": cached_script_js_url, "fromCache": True}, + ) + + page_with_2_cached_js = inline( + f""" + <head> + <script src="{cached_script_js_url}"></script> + <script src="{cached_script_js_url}"></script> + </head> + <body>test page with cached 2 javascript files</body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_2_cached_js, + wait="complete", + ) + + # Expect three events, one for the document and two for script javascript files. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 7) + assert len(events) == 7 + + # Assert only cached events after reload. + cached_events = events[4:] + + assert_response_event( + cached_events[0], + expected_request={"method": "GET", "url": page_with_2_cached_js}, + expected_response={"url": page_with_2_cached_js, "fromCache": False}, + ) + assert_response_event( + cached_events[1], + expected_request={"method": "GET", "url": cached_script_js_url}, + expected_response={"url": cached_script_js_url, "fromCache": True}, + ) + assert_response_event( + cached_events[2], + expected_request={"method": "GET", "url": cached_script_js_url}, + expected_response={"url": cached_script_js_url, "fromCache": True}, + ) + + +@pytest.mark.asyncio +async def test_page_with_cached_javascript_module( + bidi_session, + url, + inline, + setup_network_test, + top_context, +): + network_events = await setup_network_test( + events=[ + RESPONSE_STARTED_EVENT, + ] + ) + events = network_events[RESPONSE_STARTED_EVENT] + + cached_js_module_url = url( + get_cached_url("text/javascript", SCRIPT_CONSOLE_LOG_IN_MODULE) + ) + page_with_cached_js_module = inline( + f""" + <body> + test page with cached js module + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + </body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_cached_js_module, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 2) + assert len(events) == 2 + + assert_response_event( + events[0], + expected_request={"method": "GET", "url": page_with_cached_js_module}, + expected_response={"url": page_with_cached_js_module, "fromCache": False}, + ) + assert_response_event( + events[1], + expected_request={"method": "GET", "url": cached_js_module_url}, + expected_response={"url": cached_js_module_url, "fromCache": False}, + ) + + # Reload the page. + await bidi_session.browsing_context.reload(context=top_context["context"]) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 4) + assert len(events) == 4 + + assert_response_event( + events[2], + expected_request={"method": "GET", "url": page_with_cached_js_module}, + expected_response={"url": page_with_cached_js_module, "fromCache": False}, + ) + assert_response_event( + events[3], + expected_request={"method": "GET", "url": cached_js_module_url}, + expected_response={"url": cached_js_module_url, "fromCache": True}, + ) + + page_with_2_cached_js_modules = inline( + f""" + <body> + test page with 2 cached javascript modules + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + <script type="module"> + import foo from "{cached_js_module_url}"; + foo(); + </script> + </body> + """, + ) + + await bidi_session.browsing_context.navigate( + context=top_context["context"], + url=page_with_2_cached_js_modules, + wait="complete", + ) + + # Expect two events, one for the document and one for the javascript module. + wait = AsyncPoll(bidi_session, timeout=2) + await wait.until(lambda _: len(events) >= 6) + assert len(events) == 6 + + # Assert only cached events after reload. + cached_events = events[4:] + + assert_response_event( + cached_events[0], + expected_request={"method": "GET", "url": page_with_2_cached_js_modules}, + expected_response={"url": page_with_2_cached_js_modules, "fromCache": False}, + ) + assert_response_event( + cached_events[1], + expected_request={"method": "GET", "url": cached_js_module_url}, + expected_response={"url": cached_js_module_url, "fromCache": True}, + ) diff --git a/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/basic-cue-rendering-expected.html b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/basic-cue-rendering-expected.html new file mode 100644 index 00000000000..d220134a738 --- /dev/null +++ b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/basic-cue-rendering-expected.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>webvtt-white-space-pre-line-expected</title> + <link rel="stylesheet" type="text/css" href="support/reference.css"> + <body> + <div>Test rendering a basic <code>VTTCue</code>.</div> + <div class="test-diff"> + <video-reference expected> + <cue style="width: 100%; left: 0; bottom: 0px;"> + <cue-background style="margin: auto">Test Text</cue-background> + </cue> + </video-reference> + <video-reference> + <cue style="width: 100%; left: 0; bottom: 0px;"> + <cue-background style="margin: auto">Test Text</cue-background> + </cue> + </video-reference> + </div> + </body> +</html> diff --git a/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/basic-cue-rendering.html b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/basic-cue-rendering.html new file mode 100644 index 00000000000..79b6189582e --- /dev/null +++ b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/basic-cue-rendering.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>webvtt-white-space-pre-line</title> + <link rel="stylesheet" type="text/css" href="support/reference.css"> + <script src="/common/reftest-wait.js"></script> + <script src="support/webvtt-rendering-test.js"></script> + <body> + <div>Test rendering a basic <code>VTTCue</code>.</div> + <div class="test-diff"> + <video-reference expected> + <cue style="width: 100%; left: 0; bottom: 0px;"> + <cue-background style="margin: auto">Test Text</cue-background> + </cue> + </video-reference> + <video muted playsinline> + <source src="/media/sound_5.mp3#t=0.05" type="audio/mp3"> + <source src="/media/sound_5.oga#t=0.05" type="audio/ogg"> + <track src="support/basic-cue-rendering.webvtt" kind="captions" default> + </video> + </div> + </body> +</html> diff --git a/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/basic-cue-rendering.webvtt b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/basic-cue-rendering.webvtt new file mode 100644 index 00000000000..c2a57bb0606 --- /dev/null +++ b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/basic-cue-rendering.webvtt @@ -0,0 +1,4 @@ +WEBVTT + +00:00:00.000 --> 00:00:00.100 +Test Text diff --git a/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/reference.css b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/reference.css new file mode 100644 index 00000000000..e802547c679 --- /dev/null +++ b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/reference.css @@ -0,0 +1,47 @@ +@font-face { + font-family: 'ahem'; + src: url('/fonts/Ahem.ttf'); +} + +.test-diff { + container-type: inline-size; + width: 200px; + height: 200px; + display: inline-block; + isolation: isolate; + position: relative; + border: 1px solid black; +} + +video-reference, cue { display: inline-block; } +cue-background { display: inline; } + +video, video-reference { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + mix-blend-mode: difference; +} + +::cue, cue { + font: 5cqmin/1 Ahem; +} + +::cue, cue-background { + color: rgb(128, 0, 0); + background-color: rgb(255, 0, 0); +} + +cue { + position: absolute; + display: inline-block; + text-align: center; + white-space: pre-line; +} + +video-reference[expected] > cue > cue-background { + color: rgb(128, 128, 0); + background-color: rgb(255, 255, 0); +} diff --git a/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/webvtt-rendering-test.js b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/webvtt-rendering-test.js new file mode 100644 index 00000000000..863b0d1bd34 --- /dev/null +++ b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/webvtt-rendering-test.js @@ -0,0 +1,21 @@ +window.addEventListener('load', async event => { + if (!document.documentElement.classList.contains('reftest-wait')) + return; + + let waitFor = (object, type) => { + return new Promise(resolve => { + object.addEventListener(type, resolve); + }, { once: true }); + }; + + let trackElement = document.querySelector('video > track[default]'); + if (!trackElement) + return; + + if (trackElement.track.mode !== 'showing') + trackElement.track.mode = 'showing'; + if (!trackElement.track.activeCues) + await waitFor(trackElement.track, 'cuechange'); + + document.documentElement.classList.remove('reftest-wait'); +});
\ No newline at end of file diff --git a/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/white-space-pre-line.webvtt b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/white-space-pre-line.webvtt new file mode 100644 index 00000000000..f6febeda00f --- /dev/null +++ b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/support/white-space-pre-line.webvtt @@ -0,0 +1,4 @@ +WEBVTT + +00:00:00.000 --> 00:00:00.100 size:40% +Test Text diff --git a/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/white-space-pre-line-expected.html b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/white-space-pre-line-expected.html new file mode 100644 index 00000000000..f838963ea93 --- /dev/null +++ b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/white-space-pre-line-expected.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>webvtt-white-space-pre-line</title> + <link rel="stylesheet" type="text/css" href="support/reference.css"> + <body> + <div>Test rendering of wrapped text when <code>white-space: pre-line</code> is set.</div> + <div class="test-diff"> + <video-reference expected> + <cue style="width: 40%; left: 30%; bottom: 0px;"> + <cue-background style="margin: auto">Test Text</cue-background> + </cue> + </video-reference> + <video-reference> + <cue style="width: 40%; left: 30%; bottom: 0px;"> + <cue-background style="margin: auto">Test Text</cue-background> + </cue> + </video-reference> + </div> + </body> +</html> diff --git a/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/white-space-pre-line.html b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/white-space-pre-line.html new file mode 100644 index 00000000000..af2c0d26938 --- /dev/null +++ b/tests/wpt/tests/webvtt/rendering/cues-with-video/processing-model/white-space-pre-line.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>webvtt-white-space-pre-line</title> + <link rel="stylesheet" type="text/css" href="support/reference.css"> + <script src="support/webvtt-rendering-test.js"></script> + <body> + <div>Test rendering of wrapped text when <code>white-space: pre-line</code> is set.</div> + <div class="test-diff"> + <video-reference expected> + <cue style="width: 40%; left: 30%; bottom: 0px;"> + <cue-background style="margin: auto">Test Text</cue-background> + </cue> + </video-reference> + <video muted playsinline> + <source src="/media/sound_5.mp3#t=0.05" type="audio/mp3"> + <source src="/media/sound_5.oga#t=0.05" type="audio/ogg"> + <track src="support/white-space-pre-line.webvtt" kind="captions" default> + </video> + </div> + </body> +</html> |