diff options
84 files changed, 1223 insertions, 272 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-charset.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-charset.window.js.ini deleted file mode 100644 index 08ab7bd35cd..00000000000 --- a/tests/wpt/metadata/FileAPI/url/url-charset.window.js.ini +++ /dev/null @@ -1,4 +0,0 @@ -[url-charset.window.html] - expected: TIMEOUT - [Blob charset should override any auto-detected charset.] - expected: TIMEOUT diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 6ca91ece0fc..b0304a0937e 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -140010,6 +140010,19 @@ {} ] ], + "single-line-column-flex-fragmentation-059.html": [ + "ff91f373ec756ac8c101629a7199d75a600d8a96", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "single-line-row-flex-fragmentation-001.html": [ "379327a4aff584192f076d3f9d8f3ead232c0f5c", [ @@ -176569,7 +176582,7 @@ ] ], "font-synthesis-style-first-letter.html": [ - "32f037bdb721dc3315787d37dce5c66b7cf1e37c", + "1296baf05f9c430cda6c52e5a63e813c79862b9a", [ null, [ @@ -176621,7 +176634,7 @@ ] ], "font-synthesis-weight-first-letter.html": [ - "52865540a791189e0adf89fb17f8b43fb830334b", + "3d60b2a22847e1b99f1ee53d27c231a41bbc60da", [ null, [ @@ -206862,6 +206875,19 @@ {} ] ], + "nest-containing-forgiving.html": [ + "d399142f7efb998db7ff8dffae0770c5bcea0cc2", + [ + null, + [ + [ + "/css/css-nesting/nest-containing-forgiving-ref.html", + "==" + ] + ], + {} + ] + ], "nesting-basic.html": [ "6bc727a73195122f6f2abca1a07a289c99376f5c", [ @@ -371061,7 +371087,7 @@ [] ], "font-synthesis-style-first-letter-ref.html": [ - "f1abcb7bb3f4681ecfc2b135dc5ca6dd6b6b9896", + "c4f9b175de79052ad0f29df3be07a33c1072f245", [] ], "font-synthesis-style-first-line-ref.html": [ @@ -371077,7 +371103,7 @@ [] ], "font-synthesis-weight-first-letter-ref.html": [ - "7ec42f07b7c2bfbd329534bc8401acb5ee33d5f2", + "fd29f4134d67d22b6e344dcc7ec8315a32dac2e5", [] ], "font-synthesis-weight-first-line-ref.html": [ @@ -383166,6 +383192,10 @@ "006216b60e71d2d1af9c3d6c9fc81ea4c53f1d1d", [] ], + "nest-containing-forgiving-ref.html": [ + "36b07c92b6fdcbb9bca66a4292bd871af7e7d696", + [] + ], "nesting-basic-ref.html": [ "c2f7c669497d363e868cb96d2c2bb1ee315fff49", [] @@ -395425,7 +395455,7 @@ [] ], "content-visibility-auto-shared-element-ref.html": [ - "5c3fb1616d6e01276eced88d3a97b784ba1deb59", + "f4a34967ec066c67b5f8b486b7079411a9adb884", [] ], "content-with-clip-max-texture-size-ref.html": [ @@ -402031,7 +402061,7 @@ [] ], "delete.js": [ - "c1f48a74b2010bd44ff71a33f9f9f4b4cbb5caac", + "94611e65767647353f4864f65c7ee0ece93f375d", [] ], "fontname.js": [ @@ -402051,7 +402081,7 @@ [] ], "forwarddelete.js": [ - "832ba608a04587feeb85308f23f6b530b3e65b79", + "524d43274e51f0ec2b870c4bf9b4bc64334ec104", [] ], "hilitecolor.js": [ @@ -402123,7 +402153,7 @@ [] ], "multitest.js": [ - "89f5eebdb666c896e0c549bf0683894d0b64e8f8", + "118ae4b3a41f753433b76fabaa17e22a28ae6059", [] ], "outdent.js": [ @@ -410306,11 +410336,11 @@ [] ], "gentestutils.py": [ - "2517568a5a83c9e8539a7c93e69aaf8a085504f4", + "59fa9e73e51bc19c5c1bcc827684e078ee132058", [] ], "gentestutilsunion.py": [ - "4c65d688c25f27d6d29f4732f1f250323385a945", + "3afb54de477e6fbfff4bf5790376153128b79741", [] ], "name2dir-canvas.yaml": [ @@ -424162,11 +424192,11 @@ [] ], "early-hints-helpers.sub.js": [ - "3991e8fe9da479dd0f5b4cea537542ba948a8540", + "faf6119cf1edd5454aaabd643ffe40d33c589463", [] ], "early-hints-test-loader.h2.py": [ - "aa9188c6dbc3920055095421bc880ec5595b0bbb", + "bb987209c50f41f260cc7e5d43901c8777ee8779", [] ], "empty-corp-absent.js": [ @@ -424185,6 +424215,14 @@ "1738466bcb3225df2ec2dc7f58459784ce426a84", [] ], + "empty.json": [ + "0967ef424bce6791893e9a57bb952f80fd536e93", + [] + ], + "empty.json.headers": [ + "1738466bcb3225df2ec2dc7f58459784ce426a84", + [] + ], "example.pdf": [ "7bad251ba7e08efc9c383d88518367a6f204cdd6", [] @@ -424245,6 +424283,10 @@ "daea33160ae4e7b7bd074fb1849f1ba40ce8e715", [] ], + "preload-fetch.html": [ + "2e90f76af143fce7f05eb77bb71f00e0d880ff88", + [] + ], "preload-finished-before-final-response.h2.py": [ "d0b12408d9cff01352380cec5727145dbed6dded", [] @@ -444734,7 +444776,7 @@ [] ], "webtransport_h3_server.py": [ - "d3031b4c0c2f531f97720249a0596f04c8c63d75", + "4b49c90d816adf577147c7263e90c2cc05170160", [] ] }, @@ -445868,7 +445910,11 @@ "tentative": { "resources": { "requestStorageAccessForOrigin-iframe.html": [ - "3e2f6d5b6288993714f3ee56ae89631e03d563b9", + "43d16705c8515b48685420c8d14925af90afb62a", + [] + ], + "requestStorageAccessForOrigin-iframe.https.html": [ + "db03b25e14d7883a89cac79746c11b280ec24dae", [] ] } @@ -490959,7 +491005,7 @@ ] ], "color-computed-color-function.html": [ - "e610754c644a4e9f32a7adceffd49690c23157e7", + "530a605bc9292f061dca5a053eb61f77349534ee", [ null, {} @@ -491036,7 +491082,7 @@ ] ], "color-invalid-color-function.html": [ - "75d9ff7c21764bb1e011e0f93bfbf46d4b08e5c5", + "51f393747c19a257045b2d9f7537ef6c8ff85b11", [ null, {} @@ -491113,7 +491159,7 @@ ] ], "color-valid-color-function.html": [ - "79e0bde059013de349faf36852f15f7177c67a29", + "1eb7c744b2aceea1234801706babdba155e35c9f", [ null, {} @@ -503216,6 +503262,13 @@ {} ] ], + "custom-property-animation-list-type-mismatch.html": [ + "95757445ae79121893e02d3f37153e197ac4fbd3", + [ + null, + {} + ] + ], "custom-property-animation-non-inherited-used-by-standard-property.html": [ "11d3f6740d950b8f86536515242869e468e1a1c3", [ @@ -529303,6 +529356,23 @@ } ] ], + "typing-around-link-element-after-joining-paragraphs.html": [ + "4934530c9b842dfe9e1259c0d7541427279eb2f2", + [ + "editing/other/typing-around-link-element-after-joining-paragraphs.html?action=Backspace", + { + "testdriver": true, + "timeout": "long" + } + ], + [ + "editing/other/typing-around-link-element-after-joining-paragraphs.html?action=Delete", + { + "testdriver": true, + "timeout": "long" + } + ] + ], "typing-around-link-element-at-collapsed-selection.tentative.html": [ "2b2e304aba47e4b1ffb4679209afb32debcf94cc", [ @@ -616364,6 +616434,20 @@ } ] ], + "preload-fetch.h2.window.js": [ + "121913ed3175d552acf83ba3cb4b19e54b51d75a", + [ + "loading/early-hints/preload-fetch.h2.window.html", + { + "script_metadata": [ + [ + "script", + "resources/early-hints-helpers.sub.js" + ] + ] + } + ] + ], "preload-finished-before-final-response.h2.window.js": [ "c63239be1f59426b35760c26ef47453c9248c59b", [ @@ -622704,6 +622788,20 @@ {} ] ], + "same-url-replace-cross-document.html": [ + "0a976cd51fdcb3205d2a71cc9dc1a9853e417eee", + [ + null, + {} + ] + ], + "same-url-replace-same-document.html": [ + "839c687934238d594013ec6ca009532df440d269", + [ + null, + {} + ] + ], "signal-abort-detach-in-onnavigate.html": [ "467ea88899323bbf47e9a12fd3a03ee577963a43", [ @@ -647141,6 +647239,13 @@ {} ] ], + "scroll-timeline-with-percent-delay.tentative.html": [ + "4f2e1761de29d80c8377926f734e0cfbfe831a8c", + [ + null, + {} + ] + ], "timeline-range-name-offset-in-keyframes.tentative.html": [ "993046c5f2b8d3eb62dcda1adb33ad7a82137524", [ @@ -647252,6 +647357,13 @@ null, {} ] + ], + "view-timeline-with-delay-and-range.tentative.html": [ + "40548bf5cd4548c105872d1066a05e5848c4bfce", + [ + null, + {} + ] ] }, "scroll-timelines": { @@ -664572,10 +664684,32 @@ }, "top-level-storage-access-api": { "tentative": { - "requestStorageAccessForOrigin.sub.window.js": [ + "requestStorageAccessForOrigin-insecure.sub.window.js": [ + "b4bcb2cd34074a6d6d182fef470df88590bb7ca6", + [ + "top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.html", + { + "script_metadata": [ + [ + "script", + "/storage-access-api/helpers.js" + ], + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "/resources/testdriver-vendor.js" + ] + ] + } + ] + ], + "requestStorageAccessForOrigin.sub.https.window.js": [ "f7dd478a7078673643d91fece6f64bf0148c7ec6", [ - "top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.html", + "top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.html", { "script_metadata": [ [ diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini index 13bd6abf376..665ec4646cb 100644 --- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini +++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini @@ -1,3 +1,3 @@ -[hit-test-floats-004.html] +[hit-test-floats-003.html] [Miss float below something else] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini index ee34bc91078..51432362d66 100644 --- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini +++ b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini @@ -1,6 +1,3 @@ [block-in-inline-hittest-002.html] [elementsFromPoint] expected: FAIL - - [elementFromPoint] - expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini deleted file mode 100644 index 3e5096beef3..00000000000 --- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[block-in-inline-hittest-float-002.html] - [block-in-inline-hittest-float-002] - expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-relpos-zindex.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-relpos-zindex.html.ini index cdd8b55f192..f9e216a8cfc 100644 --- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-relpos-zindex.html.ini +++ b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-relpos-zindex.html.ini @@ -1,3 +1,6 @@ [block-in-inline-hittest-relpos-zindex.html] [position: relative; z-index: -1;] expected: FAIL + + [block-in-inline-hittest-relpos-zindex] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-001.html.ini b/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-001.html.ini new file mode 100644 index 00000000000..304b1579ca4 --- /dev/null +++ b/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-001.html.ini @@ -0,0 +1,2 @@ +[opacity-animation-ending-correctly-001.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini index b95c45ebe80..1507cf615a4 100644 --- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini +++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini @@ -194,9 +194,6 @@ [Matching font-style: 'oblique -21deg' should prefer 'oblique -10deg' over 'italic'] expected: FAIL - [Matching font-style: 'oblique -21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg'] - expected: FAIL - [Matching font-style: 'oblique 21deg' should prefer 'oblique -50deg -20deg' over 'oblique -40deg -30deg'] expected: FAIL @@ -206,9 +203,6 @@ [Matching font-style: 'oblique -21deg' should prefer 'italic' over 'oblique 0deg'] expected: FAIL - [Matching font-style: 'oblique 10deg' should prefer 'oblique 40deg 50deg' over 'italic'] - expected: FAIL - [Matching font-style: 'italic' should prefer 'italic' over 'oblique 20deg'] expected: FAIL @@ -272,9 +266,6 @@ [Matching font-weight: '500' should prefer '500' over '450 460'] expected: FAIL - [Matching font-style: 'oblique 20deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg'] - expected: FAIL - [Matching font-style: 'oblique 0deg' should prefer 'oblique 0deg' over 'oblique 5deg'] expected: FAIL @@ -311,17 +302,20 @@ [Matching font-stretch: '90%' should prefer '60% 70%' over '110% 140%'] expected: FAIL - [Matching font-style: 'oblique -21deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg'] - expected: FAIL - [Matching font-style: 'oblique 21deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg'] expected: FAIL [Matching font-style: 'oblique 21deg' should prefer 'oblique 40deg 50deg' over 'oblique 20deg'] expected: FAIL - [Matching font-style: 'oblique 10deg' should prefer 'oblique 15deg 20deg' over 'oblique 30deg 60deg'] + [Matching font-style: 'oblique -21deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg'] expected: FAIL - [Matching font-style: 'oblique -21deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg'] + [Matching font-style: 'normal' should prefer 'oblique 20deg 30deg' over 'oblique -50deg -20deg'] + expected: FAIL + + [Matching font-style: 'oblique -10deg' should prefer 'oblique -60deg -30deg' over 'oblique -50deg -40deg'] + expected: FAIL + + [Matching font-style: 'oblique -20deg' should prefer 'oblique 0deg' over 'oblique 30deg 60deg'] expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-005.html.ini deleted file mode 100644 index b9463b3ee1e..00000000000 --- a/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-005.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[trailing-other-space-separators-break-spaces-005.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-007.html.ini b/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-007.html.ini deleted file mode 100644 index 98f844212dd..00000000000 --- a/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-007.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[trailing-other-space-separators-break-spaces-007.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini index 102a1161a2d..027bd2fcf75 100644 --- a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini +++ b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini @@ -53,158 +53,152 @@ [background-position length(px) / events] expected: FAIL - [padding-bottom length(ex) / values] - expected: FAIL - - [padding-bottom length(mm) / values] - expected: FAIL - - [padding-bottom length(cm) / values] + [color color(rgba) / values] expected: FAIL - [padding-bottom length(in) / values] + [text-shadow shadow(shadow) / values] expected: FAIL - [padding-left length(pt) / values] + [font-size length(pt) / values] expected: FAIL - [padding-left length(pc) / values] + [font-size length(pc) / values] expected: FAIL - [padding-left length(px) / values] + [font-size length(px) / values] expected: FAIL - [padding-left length(em) / values] + [font-size length(em) / values] expected: FAIL - [padding-left length(ex) / values] + [font-size length(ex) / values] expected: FAIL - [padding-left length(mm) / values] + [font-size length(mm) / values] expected: FAIL - [padding-left length(cm) / values] + [font-size length(cm) / values] expected: FAIL - [padding-left length(in) / values] + [font-size length(in) / values] expected: FAIL - [padding-right length(pt) / values] + [font-size percentage(%) / values] expected: FAIL - [padding-right length(pc) / values] + [font-weight font-weight(keyword) / values] expected: FAIL - [padding-right length(px) / values] + [font-weight font-weight(numeric) / values] expected: FAIL - [padding-right length(em) / values] + [line-height number(integer) / values] expected: FAIL - [padding-right length(ex) / values] + [line-height number(decimal) / values] expected: FAIL - [padding-right length(mm) / values] + [line-height length(pt) / values] expected: FAIL - [padding-right length(cm) / values] + [line-height length(pc) / values] expected: FAIL - [padding-right length(in) / values] + [line-height length(px) / values] expected: FAIL - [padding-top length(pt) / values] + [line-height length(em) / values] expected: FAIL - [padding-top length(pc) / values] + [line-height length(ex) / values] expected: FAIL - [padding-top length(px) / values] + [line-height length(mm) / values] expected: FAIL - [padding-top length(em) / values] + [line-height length(cm) / values] expected: FAIL - [padding-top length(ex) / values] + [line-height length(in) / values] expected: FAIL - [padding-top length(mm) / values] + [line-height percentage(%) / values] expected: FAIL - [padding-top length(cm) / values] + [letter-spacing length(pt) / values] expected: FAIL - [padding-top length(in) / values] + [letter-spacing length(pc) / values] expected: FAIL - [margin-bottom length(pt) / values] + [letter-spacing length(px) / values] expected: FAIL - [margin-bottom length(pc) / values] + [letter-spacing length(em) / values] expected: FAIL - [margin-bottom length(px) / values] + [letter-spacing length(ex) / values] expected: FAIL - [margin-bottom length(em) / values] + [letter-spacing length(mm) / values] expected: FAIL - [margin-bottom length(ex) / values] + [letter-spacing length(cm) / values] expected: FAIL - [margin-bottom length(mm) / values] + [letter-spacing length(in) / values] expected: FAIL - [margin-bottom length(cm) / values] + [word-spacing length(pt) / values] expected: FAIL - [margin-bottom length(in) / values] + [word-spacing length(pc) / values] expected: FAIL - [margin-left length(pt) / values] + [word-spacing length(px) / values] expected: FAIL - [margin-left length(pc) / values] + [word-spacing length(em) / values] expected: FAIL - [margin-left length(px) / values] + [word-spacing length(ex) / values] expected: FAIL - [margin-left length(em) / values] + [word-spacing length(mm) / values] expected: FAIL - [margin-left length(ex) / values] + [word-spacing length(cm) / values] expected: FAIL - [margin-left length(mm) / values] + [word-spacing length(in) / values] expected: FAIL - [margin-left length(cm) / values] + [word-spacing percentage(%) / values] expected: FAIL - [margin-left length(in) / values] + [text-indent length(pt) / values] expected: FAIL - [margin-right length(pt) / values] + [text-indent length(pc) / values] expected: FAIL - [margin-right length(pc) / values] + [text-indent length(px) / values] expected: FAIL - [margin-right length(px) / values] + [text-indent length(em) / values] expected: FAIL - [margin-right length(em) / values] + [text-indent length(ex) / values] expected: FAIL - [margin-right length(ex) / values] + [text-indent length(mm) / values] expected: FAIL - [margin-right length(mm) / values] + [text-indent length(cm) / values] expected: FAIL - [color color(rgba) / values] + [text-indent length(in) / values] expected: FAIL - [text-shadow shadow(shadow) / values] + [text-indent percentage(%) / values] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini index 22199e399b4..8484f4b2b02 100644 --- a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini +++ b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini @@ -356,125 +356,152 @@ [margin-right length(mm) / events] expected: FAIL - [background-color color(rgba) / events] + [color color(rgba) / events] expected: FAIL - [border-top-width length(pt) / events] + [font-size length(pt) / events] expected: FAIL - [border-top-width length(pc) / events] + [font-size length(pc) / events] expected: FAIL - [border-top-width length(px) / events] + [font-size length(px) / events] expected: FAIL - [border-top-width length(em) / events] + [font-size length(em) / events] expected: FAIL - [border-top-width length(ex) / events] + [font-size length(ex) / events] expected: FAIL - [border-top-width length(mm) / events] + [font-size length(mm) / events] expected: FAIL - [border-top-width length(cm) / events] + [font-size length(cm) / events] expected: FAIL - [border-top-width length(in) / events] + [font-size length(in) / events] expected: FAIL - [border-right-width length(pt) / events] + [font-size percentage(%) / events] expected: FAIL - [border-right-width length(pc) / events] + [font-weight font-weight(keyword) / events] expected: FAIL - [border-right-width length(px) / events] + [font-weight font-weight(numeric) / events] expected: FAIL - [border-right-width length(em) / events] + [line-height number(integer) / events] expected: FAIL - [border-right-width length(ex) / events] + [line-height number(decimal) / events] expected: FAIL - [border-right-width length(mm) / events] + [line-height length(pt) / events] expected: FAIL - [border-right-width length(cm) / events] + [line-height length(pc) / events] expected: FAIL - [border-right-width length(in) / events] + [line-height length(px) / events] expected: FAIL - [border-bottom-width length(pt) / events] + [line-height length(em) / events] expected: FAIL - [border-bottom-width length(pc) / events] + [line-height length(ex) / events] expected: FAIL - [border-bottom-width length(px) / events] + [line-height length(mm) / events] expected: FAIL - [border-bottom-width length(em) / events] + [line-height length(cm) / events] expected: FAIL - [border-bottom-width length(ex) / events] + [line-height length(in) / events] expected: FAIL - [border-bottom-width length(mm) / events] + [line-height percentage(%) / events] expected: FAIL - [border-bottom-width length(cm) / events] + [letter-spacing length(pt) / events] expected: FAIL - [border-bottom-width length(in) / events] + [letter-spacing length(pc) / events] expected: FAIL - [border-left-width length(pt) / events] + [letter-spacing length(px) / events] expected: FAIL - [border-left-width length(pc) / events] + [letter-spacing length(em) / events] expected: FAIL - [border-left-width length(px) / events] + [letter-spacing length(ex) / events] expected: FAIL - [border-left-width length(em) / events] + [letter-spacing length(mm) / events] expected: FAIL - [border-left-width length(ex) / events] + [letter-spacing length(cm) / events] expected: FAIL - [border-left-width length(mm) / events] + [letter-spacing length(in) / events] expected: FAIL - [border-left-width length(cm) / events] + [word-spacing length(pt) / events] expected: FAIL - [border-left-width length(in) / events] + [word-spacing length(pc) / events] expected: FAIL - [border-top-color color(rgba) / events] + [word-spacing length(px) / events] expected: FAIL - [border-right-color color(rgba) / events] + [word-spacing length(em) / events] expected: FAIL - [border-bottom-color color(rgba) / events] + [word-spacing length(ex) / events] expected: FAIL - [border-left-color color(rgba) / events] + [word-spacing length(mm) / events] expected: FAIL - [padding-bottom length(pt) / events] + [word-spacing length(cm) / events] expected: FAIL - [padding-bottom length(pc) / events] + [word-spacing length(in) / events] expected: FAIL - [padding-bottom length(px) / events] + [word-spacing percentage(%) / events] expected: FAIL - [padding-bottom length(em) / events] + [text-indent length(pt) / events] + expected: FAIL + + [text-indent length(pc) / events] + expected: FAIL + + [text-indent length(px) / events] + expected: FAIL + + [text-indent length(em) / events] + expected: FAIL + + [text-indent length(ex) / events] + expected: FAIL + + [text-indent length(mm) / events] + expected: FAIL + + [text-indent length(cm) / events] + expected: FAIL + + [text-indent length(in) / events] + expected: FAIL + + [text-indent percentage(%) / events] + expected: FAIL + + [text-shadow shadow(shadow) / events] expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini deleted file mode 100644 index f18b8d2fcf9..00000000000 --- a/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[CaretPosition-001.html] - [Element at (400, 100)] - expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryListEvent.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryListEvent.html.ini new file mode 100644 index 00000000000..18789696fd2 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/MediaQueryListEvent.html.ini @@ -0,0 +1,3 @@ +[MediaQueryListEvent.html] + [argument of onchange] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini new file mode 100644 index 00000000000..72b09371038 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini @@ -0,0 +1,3 @@ +[elementFromPoint-001.html] + [CSSOM View - 5 - extensions to the Document interface] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini new file mode 100644 index 00000000000..cf67b5d03dd --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-dynamic-anon-box.html.ini @@ -0,0 +1,3 @@ +[elementFromPoint-dynamic-anon-box.html] + [Link should be clickable after hiding a scrollbox with an anonymous table inside] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini new file mode 100644 index 00000000000..b905fe70fcb --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini @@ -0,0 +1,3 @@ +[elementFromPoint-ellipsis-in-inline-box.html] + [elementFromPoint-ellipsis-in-inline-box] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-table.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-table.html.ini new file mode 100644 index 00000000000..db065588308 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-table.html.ini @@ -0,0 +1,3 @@ +[elementFromPoint-float-in-table.html] + [float-in-div] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini index df64baf81ee..cb46964f2de 100644 --- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini @@ -16,3 +16,6 @@ [<li>Image Inside 2</li>] expected: FAIL + + [<li>Image Inside 1</li>] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini deleted file mode 100644 index a6bca7ac372..00000000000 --- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[elementFromPoint-visibility-hidden-resizer.html] - [elementFromPoint on resizer area of an element with visibility:hidden] - expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini index 898f39c4330..ceb43099040 100644 --- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini @@ -17,6 +17,3 @@ [test some point of the element: bottom right corner] expected: FAIL - - [test the top of layer] - expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini b/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini index fc21a631bdd..e8237fbb8f9 100644 --- a/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini +++ b/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini @@ -77,5 +77,5 @@ [Input: "Content-Length: ". Expected: 42.] expected: FAIL - [Input: "Content-Length: 30". Expected: 30.] + [Input: "Content-Length: 42,42". Expected: 42.] expected: FAIL diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index c8ad97ec3cc..ba47e36f3af 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -8,11 +8,5 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff] - expected: FAIL - [X-Content-Type-Options%3A%20%2Cnosniff] expected: FAIL - - [X-Content-Type-Options%3A%20%22nosniFF%22] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index 856bb1c9901..dc1144214ef 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -1,10 +1,9 @@ [iframe-src-aboutblank-navigate-immediately.html] - expected: TIMEOUT [Navigating to a different document with window.open] expected: FAIL [Navigating to a different document with form submission] - expected: TIMEOUT + expected: FAIL [Navigating to a different document with link click] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-load-as-html.xhtml.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-load-as-html.xhtml.ini deleted file mode 100644 index 3956f08d5bb..00000000000 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-load-as-html.xhtml.ini +++ /dev/null @@ -1,4 +0,0 @@ -[javascript-url-load-as-html.xhtml] - expected: TIMEOUT - [javascript: URL navigation to a string must create a HTML document using the correct properties] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini index 8ae58f9f1e2..4b89cb499f8 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini @@ -13,9 +13,3 @@ [0080 00FF 0100 set in href="" targeting a frame and clicked] expected: FAIL - - [D83D DE0D set in href="" targeting a frame and clicked] - expected: FAIL - - [DE0D 0041 set in href="" targeting a frame and clicked] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini index 27889a98fb5..24d2f8ac554 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini @@ -1,6 +1,3 @@ [navigate-to-unparseable-url.html] [location.href setter throws a SyntaxError DOMException for unparseable URLs] expected: FAIL - - [<a> tag navigate fails for unparseable URLs] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini new file mode 100644 index 00000000000..60a4fa51f8a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini @@ -0,0 +1,3 @@ +[a-click.html] + [aElement.click() before the load event must NOT replace] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html.ini index 6c777ea167c..e84cccbbd1f 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit-button-click.html.ini @@ -1,4 +1,3 @@ [form-submit-button-click.html] - expected: TIMEOUT [Replace before load, triggered by submitButton.click()] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini deleted file mode 100644 index ba0aed26689..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[traverse_the_history_1.html] - [Multiple history traversals from the same task] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini new file mode 100644 index 00000000000..7a5fcb79165 --- /dev/null +++ b/tests/wpt/metadata/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/metadata/html/browsers/the-window-object/navigate-to-about-blank-while-initial-load-pending.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/navigate-to-about-blank-while-initial-load-pending.html.ini deleted file mode 100644 index de713daa8a0..00000000000 --- a/tests/wpt/metadata/html/browsers/the-window-object/navigate-to-about-blank-while-initial-load-pending.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[navigate-to-about-blank-while-initial-load-pending.html] - [Navigating to about:blank while window.open initial load pending.] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini b/tests/wpt/metadata/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini deleted file mode 100644 index 64c79a60c4a..00000000000 --- a/tests/wpt/metadata/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[opener-setter.html] - expected: TIMEOUT - [Auxiliary browsing context created via `window.open` and setting `window.opener` to `test` should report `test`] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini b/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini index 5cdcce07c65..2a54f2f8814 100644 --- a/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini +++ b/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini @@ -1,2 +1,2 @@ [canvas.2d.disconnected.html] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini index 830aeb8ae48..fdc27d37788 100644 --- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini @@ -1,7 +1,6 @@ [autofocus-dialog.html] - expected: TIMEOUT [<dialog> can contain autofocus, without stopping page autofocus content from working] expected: FAIL [<dialog>-contained autofocus element gets focused when the dialog is shown] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini index 8acae84e1e4..d169bd2e9fa 100644 --- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini @@ -1,5 +1,4 @@ [supported-elements.html] - expected: TIMEOUT [Contenteditable element should support autofocus] expected: FAIL @@ -10,7 +9,7 @@ expected: FAIL [Area element should support autofocus] - expected: TIMEOUT + expected: FAIL [Host element with delegatesFocus should support autofocus] expected: FAIL diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html.ini index 9b27c5c1957..add66c12f92 100644 --- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html.ini @@ -1,7 +1,6 @@ [update-the-rendering.html] - expected: TIMEOUT ["Flush autofocus candidates" should be happen after the first animation frame callbacks, and before a resize event in the next iteration of window event loop.] expected: TIMEOUT ["Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index 7f5e282e3e2..2d3fbf0f308 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,5 +1,5 @@ [iframe_sandbox_popups_escaping-1.html] type: testharness - expected: CRASH + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 6fcdfb95246..fe55ddae3f1 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,5 +1,4 @@ [iframe_sandbox_popups_escaping-3.html] type: testharness - expected: CRASH [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/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini index ff6467094b8..d5fd800f09d 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_nonescaping-3.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini index d8c5caa4863..4eaef655d86 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini @@ -175,3 +175,6 @@ [multipart/form-data: 0x00 in value (normal form)] expected: FAIL + + [multipart/form-data: Basic test (formdata event)] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini index df084f97f3f..f523b37700a 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini @@ -5,9 +5,6 @@ [text/plain: Basic File test (normal form)] expected: FAIL - [text/plain: Basic File test (formdata event)] - expected: FAIL - [text/plain: 0x00 in name (normal form)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini b/tests/wpt/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini index 071b4378add..cc18f512574 100644 --- a/tests/wpt/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini +++ b/tests/wpt/metadata/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html.ini @@ -11,3 +11,6 @@ [Check that rel=noopener with target=_parent does a normal load] expected: FAIL + + [Check that rel=noopener with target=_self does a normal load] + expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini index 31bfd644df0..8bcf3a07de4 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini @@ -1,9 +1,10 @@ [promise-job-entry.html] + expected: TIMEOUT [Fulfillment handler on fulfilled promise] expected: FAIL [Rejection handler on pending-then-rejected promise] - expected: FAIL + expected: TIMEOUT [Sanity check: this all works as expected with no promises involved] expected: FAIL @@ -15,4 +16,4 @@ expected: FAIL [Fulfillment handler on pending-then-fulfilled promise] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini index 1d71471b73c..4a48dd15a9d 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini @@ -1,7 +1,6 @@ [promise-rejection-events.html] - expected: TIMEOUT [delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire] - expected: TIMEOUT + expected: FAIL [unhandledrejection: from createImageBitmap which is UA triggered] expected: FAIL diff --git a/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini b/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini index 6f3a829d16a..f7bc47e5724 100644 --- a/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini +++ b/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini @@ -40,10 +40,10 @@ expected: FAIL [content-type 13 : text/plain,*/*;charset=gbk] - expected: FAIL + expected: TIMEOUT [content-type 14 : text/html,*/*;charset=gbk] - expected: TIMEOUT + expected: NOTRUN [content-type 15 : text/html;x=",text/plain] expected: NOTRUN diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini index b7537329068..eed03df37f3 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini @@ -1,5 +1,4 @@ [audiocontext-not-fully-active.html] - expected: TIMEOUT [frame in navigated remote-site frame] expected: FAIL diff --git a/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini b/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini index 39d039a0132..04c2032c723 100644 --- a/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini +++ b/tests/wpt/metadata/webmessaging/broadcastchannel/cross-partition.https.tentative.html.ini @@ -1,5 +1,5 @@ [cross-partition.https.tentative.html] - expected: CRASH + expected: TIMEOUT [BroadcastChannel messages aren't received from a cross-partition iframe] expected: FAIL diff --git a/tests/wpt/metadata/webmessaging/with-ports/017.html.ini b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini new file mode 100644 index 00000000000..c7946fc91b4 --- /dev/null +++ b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini @@ -0,0 +1,4 @@ +[017.html] + expected: TIMEOUT + [origin of the script that invoked the method, about:blank] + expected: TIMEOUT diff --git a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini index b7b36c1d3a4..b7b36c1d3a4 100644 --- a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini +++ b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini diff --git a/tests/wpt/metadata/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html.ini b/tests/wpt/metadata/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html.ini deleted file mode 100644 index aa6c9e5b826..00000000000 --- a/tests/wpt/metadata/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html] - expected: TIMEOUT - [StorageKey: test 3P about:blank window opened from a 3P iframe] - expected: TIMEOUT diff --git a/tests/wpt/web-platform-tests/css/css-break/flexbox/single-line-column-flex-fragmentation-059.html b/tests/wpt/web-platform-tests/css/css-break/flexbox/single-line-column-flex-fragmentation-059.html new file mode 100644 index 00000000000..ff91f373ec7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/flexbox/single-line-column-flex-fragmentation-059.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1410949"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:2; column-fill:auto; gap:0; width:100px; height:100px; background:red;"> + <div> + <div style="display:flex; flex-flow:column; height:100%;"> + <div style="overflow:clip; background:green;"> + <div style="height:10px;"></div> + <div style="break-inside:avoid; height:100px;"></div> + </div> + </div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/color-computed-color-function.html b/tests/wpt/web-platform-tests/css/css-color/parsing/color-computed-color-function.html index e610754c644..530a605bc92 100644 --- a/tests/wpt/web-platform-tests/css/css-color/parsing/color-computed-color-function.html +++ b/tests/wpt/web-platform-tests/css/css-color/parsing/color-computed-color-function.html @@ -31,12 +31,6 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`); - test_computed_value("color", `color(${colorSpace} 50% -200)`, `color(${colorSpace} 0.5 -200 0)`); - test_computed_value("color", `color(${colorSpace} 50%)`, `color(${colorSpace} 0.5 0 0)`); - test_computed_value("color", `color(${colorSpace})`, `color(${colorSpace} 0 0 0)`); - test_computed_value("color", `color(${colorSpace} 50% -200 / 0.5)`, `color(${colorSpace} 0.5 -200 0 / 0.5)`); - test_computed_value("color", `color(${colorSpace} 50% / 0.5)`, `color(${colorSpace} 0.5 0 0 / 0.5)`); - test_computed_value("color", `color(${colorSpace} / 0.5)`, `color(${colorSpace} 0 0 0 / 0.5)`); test_computed_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`); test_computed_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`); test_computed_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`); @@ -71,12 +65,6 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { test_computed_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`); test_computed_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`); - test_computed_value("color", `color(${colorSpace} 1 1)`, `color(${resultColorSpace} 1 1 0)`); - test_computed_value("color", `color(${colorSpace} 1)`, `color(${resultColorSpace} 1 0 0)`); - test_computed_value("color", `color(${colorSpace})`, `color(${resultColorSpace} 0 0 0)`); - test_computed_value("color", `color(${colorSpace} 1 1 / .5)`, `color(${resultColorSpace} 1 1 0 / 0.5)`); - test_computed_value("color", `color(${colorSpace} 1 / 0.5)`, `color(${resultColorSpace} 1 0 0 / 0.5)`); - test_computed_value("color", `color(${colorSpace} / 50%)`, `color(${resultColorSpace} 0 0 0 / 0.5)`); test_computed_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`); test_computed_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`); @@ -276,9 +264,6 @@ test_computed_value("color", "color(srgb 1 1 1 / 0.5)", "color(srgb 1 1 1 / 0.5) test_computed_value("color", "color(srgb 1 1 1 / 0)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0 alpha]"); test_computed_value("color", "color(srgb 1 1 1 / 50%)", "color(srgb 1 1 1 / 0.5)", "[sRGB white with 50% alpha]"); test_computed_value("color", "color(srgb 1 1 1 / 0%)", "color(srgb 1 1 1 / 0)", "[sRGB white with 0% alpha]"); -test_computed_value("color", "color(srgb 1 1)", "color(srgb 1 1 0)", "[One missing component is 0]"); -test_computed_value("color", "color(srgb 1)", "color(srgb 1 0 0)", "[Two missing components are 0]"); -test_computed_value("color", "color(srgb)", "color(srgb 0 0 0)", "[All components missing]"); test_computed_value("color", "color(display-p3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Display P3 color]"); test_computed_value("color", "color(dIspLaY-P3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)", "[Different case for Display P3]"); diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/color-invalid-color-function.html b/tests/wpt/web-platform-tests/css/css-color/parsing/color-invalid-color-function.html index 75d9ff7c217..51f393747c1 100644 --- a/tests/wpt/web-platform-tests/css/css-color/parsing/color-invalid-color-function.html +++ b/tests/wpt/web-platform-tests/css/css-color/parsing/color-invalid-color-function.html @@ -20,6 +20,13 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`); test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`); test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`); + // Missing parameters should not parse + test_invalid_value("color", `color(${colorSpace} 50% -200)`); + test_invalid_value("color", `color(${colorSpace} 50%)`); + test_invalid_value("color", `color(${colorSpace})`); + test_invalid_value("color", `color(${colorSpace} 50% -200 / 0.5)`); + test_invalid_value("color", `color(${colorSpace} 50% / 0.5)`); + test_invalid_value("color", `color(${colorSpace} / 0.5)`); } for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { @@ -30,6 +37,13 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { test_invalid_value("color", `color(${colorSpace} 0% 0 0deg)`); test_invalid_value("color", `color(${colorSpace} 0% 0% 0deg)`); test_invalid_value("color", `color(${colorSpace} 40% 0 0deg)`); + // Missing parameters should not parse + test_invalid_value("color", `color(${colorSpace} 1 1)`); + test_invalid_value("color", `color(${colorSpace} 1)`); + test_invalid_value("color", `color(${colorSpace})`); + test_invalid_value("color", `color(${colorSpace} 1 1 / .5)`); + test_invalid_value("color", `color(${colorSpace} 1 / 0.5)`); + test_invalid_value("color", `color(${colorSpace} / 50%)`); } test_invalid_value("color", "color()"); // Empty diff --git a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-color-function.html b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-color-function.html index 79e0bde0590..1eb7c744b2a 100644 --- a/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-color-function.html +++ b/tests/wpt/web-platform-tests/css/css-color/parsing/color-valid-color-function.html @@ -26,12 +26,6 @@ for (const colorSpace of [ "srgb", "srgb-linear", "a98-rgb", "rec2020", "prophot test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${colorSpace} 0 0 0 / 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${colorSpace} 0 0 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${colorSpace} 0 0 0)`); - test_valid_value("color", `color(${colorSpace} 50% -200)`, `color(${colorSpace} 0.5 -200 0)`); - test_valid_value("color", `color(${colorSpace} 50%)`, `color(${colorSpace} 0.5 0 0)`); - test_valid_value("color", `color(${colorSpace})`, `color(${colorSpace} 0 0 0)`); - test_valid_value("color", `color(${colorSpace} 50% -200 / 0.5)`, `color(${colorSpace} 0.5 -200 0 / 0.5)`); - test_valid_value("color", `color(${colorSpace} 50% / 0.5)`, `color(${colorSpace} 0.5 0 0 / 0.5)`); - test_valid_value("color", `color(${colorSpace} / 0.5)`, `color(${colorSpace} 0 0 0 / 0.5)`); test_valid_value("color", `color(${colorSpace} 200 200 200)`, `color(${colorSpace} 200 200 200)`); test_valid_value("color", `color(${colorSpace} 200 200 200 / 200)`, `color(${colorSpace} 200 200 200)`); test_valid_value("color", `color(${colorSpace} -200 -200 -200)`, `color(${colorSpace} -200 -200 -200)`); @@ -66,12 +60,6 @@ for (const colorSpace of [ "xyz", "xyz-d50", "xyz-d65" ]) { test_valid_value("color", `color(${colorSpace} 0 0 0 / -10%)`, `color(${resultColorSpace} 0 0 0 / 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / 110%)`, `color(${resultColorSpace} 0 0 0)`); test_valid_value("color", `color(${colorSpace} 0 0 0 / 300%)`, `color(${resultColorSpace} 0 0 0)`); - test_valid_value("color", `color(${colorSpace} 1 1)`, `color(${resultColorSpace} 1 1 0)`); - test_valid_value("color", `color(${colorSpace} 1)`, `color(${resultColorSpace} 1 0 0)`); - test_valid_value("color", `color(${colorSpace})`, `color(${resultColorSpace} 0 0 0)`); - test_valid_value("color", `color(${colorSpace} 1 1 / .5)`, `color(${resultColorSpace} 1 1 0 / 0.5)`); - test_valid_value("color", `color(${colorSpace} 1 / 0.5)`, `color(${resultColorSpace} 1 0 0 / 0.5)`); - test_valid_value("color", `color(${colorSpace} / 50%)`, `color(${resultColorSpace} 0 0 0 / 0.5)`); test_valid_value("color", `color(${colorSpace} calc(0.5 + 1) calc(0.5 - 1) calc(0.5) / calc(-0.5 + 1))`, `color(${resultColorSpace} 1.5 -0.5 0.5 / 0.5)`); test_valid_value("color", `color(${colorSpace} none none none / none)`, `color(${resultColorSpace} none none none / none)`); diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-style-first-letter-ref.html b/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-style-first-letter-ref.html index f1abcb7bb3f..c4f9b175de7 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-style-first-letter-ref.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-style-first-letter-ref.html @@ -10,6 +10,7 @@ .test { font-family: "Lato-Medium"; font-size: 3em; + font-kerning: none; } </style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-style-first-letter.html b/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-style-first-letter.html index 32f037bdb72..1296baf05f9 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-style-first-letter.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-style-first-letter.html @@ -16,6 +16,7 @@ .test { font-family: "Lato-Medium"; font-size: 3em; + font-kerning: none; } p.nosynth::first-letter { font-style: italic; diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-weight-first-letter-ref.html b/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-weight-first-letter-ref.html index 7ec42f07b7c..fd29f4134d6 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-weight-first-letter-ref.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-weight-first-letter-ref.html @@ -10,6 +10,7 @@ .test { font-family: "Lato-Medium"; font-size: 3em; + font-kerning: none; } </style> diff --git a/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-weight-first-letter.html b/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-weight-first-letter.html index 52865540a79..3d60b2a2284 100644 --- a/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-weight-first-letter.html +++ b/tests/wpt/web-platform-tests/css/css-fonts/font-synthesis-weight-first-letter.html @@ -16,6 +16,7 @@ .test { font-family: "Lato-Medium"; font-size: 3em; + font-kerning: none; } p.nosynth::first-letter { font-weight: bold; diff --git a/tests/wpt/web-platform-tests/css/css-nesting/nest-containing-forgiving-ref.html b/tests/wpt/web-platform-tests/css/css-nesting/nest-containing-forgiving-ref.html new file mode 100644 index 00000000000..36b07c92b6f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-nesting/nest-containing-forgiving-ref.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<title>Nest-containing in forgiving parsing</title> +<style> + .test { + background-color: green; + width: 100px; + height: 100px; + display: grid; + } + + body * + * { + margin-top: 8px; + } +</style> +<body> + <p>Tests pass if <strong>block is green</strong></p> + <div class="test"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-nesting/nest-containing-forgiving.html b/tests/wpt/web-platform-tests/css/css-nesting/nest-containing-forgiving.html new file mode 100644 index 00000000000..d399142f7ef --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-nesting/nest-containing-forgiving.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<title>Nest-containing in forgiving parsing</title> +<link rel="author" title="Steinar H. Gunderson" href="mailto:sesse@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-nesting-1/"> +<link rel="match" href="nest-containing-forgiving-ref.html"> +<style> + .test { + background-color: red; + width: 100px; + height: 100px; + display: grid; + } + + .does-not-exist { + :is(.test-1, !&) { + background-color: green; + } + } + + body * + * { + margin-top: 8px; + } +</style> +<body> + <p>Tests pass if <strong>block is green</strong></p> + <div class="test test-1"></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/animation/custom-property-animation-list-type-mismatch.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/animation/custom-property-animation-list-type-mismatch.html new file mode 100644 index 00000000000..95757445ae7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/animation/custom-property-animation-list-type-mismatch.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../resources/utils.js"></script> +<div id="target"></div> +<script> + +animation_test({ + syntax: "<number>+ | <transform-list>", + inherits: false, + initialValue: "translateX(100px)" +}, { + keyframes: ["200"], + expected: "200" +}, 'Animating a custom property allowing multiple list types with two mismatching types'); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/content-visibility-auto-shared-element-ref.html b/tests/wpt/web-platform-tests/css/css-view-transitions/content-visibility-auto-shared-element-ref.html index 5c3fb1616d6..f4a34967ec0 100644 --- a/tests/wpt/web-platform-tests/css/css-view-transitions/content-visibility-auto-shared-element-ref.html +++ b/tests/wpt/web-platform-tests/css/css-view-transitions/content-visibility-auto-shared-element-ref.html @@ -19,13 +19,16 @@ body { background: pink } border: 1px solid black; box-sizing: border-box; } -.hidden { +.vis-hidden { visibility: hidden; } +.cv-hidden { + content-visibility: hidden; +} </style> <div class=flex> - <div class="box hidden">ancestor c-v</div> - <div class=box>self c-v</div> - <div class=box>descendant c-v</div> + <div class="box vis-hidden">ancestor c-v</div> + <div class="box cv-hidden">self c-v</div> + <div class="box cv-hidden">descendant c-v</div> </div> diff --git a/tests/wpt/web-platform-tests/editing/data/delete.js b/tests/wpt/web-platform-tests/editing/data/delete.js index c1f48a74b20..94611e65767 100644 --- a/tests/wpt/web-platform-tests/editing/data/delete.js +++ b/tests/wpt/web-platform-tests/editing/data/delete.js @@ -2868,4 +2868,47 @@ var browserTests = [ "<p><font face=\"monospace\">foo[]</font><font face=\"sans-serif\">bar</font></p>", [true,true,true], {"fontName":[false,false,"sans-serif",false,false,"monospace"]}], + +// After joining blocks, caret should be end of the deepest left block end for +// making the following input will be styled with the style there. +["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>", + [["styleWithCSS","false"],["delete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>", + [["styleWithCSS","false"],["delete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>", + [["styleWithCSS","false"],["delete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}], +["<span style=\"color:rgb(0, 0, 255)\">foo</span><br><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""]], + "<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [true,true], + {"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}], +["<span style=\"color:rgb(0, 0, 255)\">foo<br></span><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""]], + "<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [true,true], + {"foreColor":[false,false,"rgb(255, 0, 0)",false,false,"rgb(0, 0, 255)"]}], ] diff --git a/tests/wpt/web-platform-tests/editing/data/forwarddelete.js b/tests/wpt/web-platform-tests/editing/data/forwarddelete.js index 832ba608a04..524d43274e5 100644 --- a/tests/wpt/web-platform-tests/editing/data/forwarddelete.js +++ b/tests/wpt/web-platform-tests/editing/data/forwarddelete.js @@ -2748,4 +2748,47 @@ var browserTests = [ "<p><font face=\"monospace\">foo[]</font><font face=\"sans-serif\">bar</font></p>", [true,true,true], {"fontName":[false,false,"monospace",false,false,"monospace"]}], + +// After joining blocks, caret should be end of the deepest left block end for +// making the following input will be styled with the style there. +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [["styleWithCSS","false"],["forwarddelete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [["styleWithCSS","false"],["forwarddelete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [["styleWithCSS","false"],["forwarddelete",""]], + "<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true], + {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}], +["<span style=\"color:rgb(0, 0, 255)\">foo[]</span><br><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""]], + "<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [true,true], + {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}], +["<span style=\"color:rgb(0, 0, 255)\">foo[]<br></span><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""]], + "<span style=\"color:rgb(0, 0, 255)\">foo[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [true,true], + {"foreColor":[false,false,"rgb(0, 0, 255)",false,false,"rgb(0, 0, 255)"]}], ] diff --git a/tests/wpt/web-platform-tests/editing/data/multitest.js b/tests/wpt/web-platform-tests/editing/data/multitest.js index 89f5eebdb66..118ae4b3a41 100644 --- a/tests/wpt/web-platform-tests/editing/data/multitest.js +++ b/tests/wpt/web-platform-tests/editing/data/multitest.js @@ -2934,4 +2934,87 @@ var browserTests = [ "abc<font style=\"background-color:rgb(0, 221, 221)\" size=\"7\" face=\"monospace\" color=\"#ff0000\">[d]</font>ef"], [true,true,true,true,true,true], {}], + +// Typed text after joining paragraphs should be inserted into the previous text node. +["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo</span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>", + [["styleWithCSS","false"],["delete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo</span><br></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>", + [["styleWithCSS","false"],["delete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo<br></span></p><span style=\"color:rgb(255, 0, 0)\">[]bar</span>", + [["styleWithCSS","false"],["delete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<span style=\"color:rgb(0, 0, 255)\">foo</span><br><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""],["insertText","A"]], + "<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [true,true,true], + {}], +["<span style=\"color:rgb(0, 0, 255)\">foo<br></span><p><span style=\"color:rgb(255, 0, 0)\">[]bar</span></p>", + [["styleWithCSS","false"],["delete",""],["insertText","A"]], + "<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [true,true,true], + {}], + +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]</span><br></p><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<p><span style=\"color:rgb(0, 0, 255)\">foo[]<br></span></p><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]], + "<p><span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [true,true,true], + {}], +["<span style=\"color:rgb(0, 0, 255)\">foo[]</span><br><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]], + "<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [true,true,true], + {}], +["<span style=\"color:rgb(0, 0, 255)\">foo[]<br></span><p><span style=\"color:rgb(255, 0, 0)\">bar</span></p>", + [["styleWithCSS","false"],["forwarddelete",""],["insertText","A"]], + "<span style=\"color:rgb(0, 0, 255)\">fooA[]</span><span style=\"color:rgb(255, 0, 0)\">bar</span>", + [true,true,true], + {}], ] diff --git a/tests/wpt/web-platform-tests/editing/other/typing-around-link-element-after-joining-paragraphs.html b/tests/wpt/web-platform-tests/editing/other/typing-around-link-element-after-joining-paragraphs.html new file mode 100644 index 00000000000..4934530c9b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/editing/other/typing-around-link-element-after-joining-paragraphs.html @@ -0,0 +1,194 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"> +<meta name="timeout" content="long"> +<meta name="variant" content="?action=Backspace"> +<meta name="variant" content="?action=Delete"> +<title>Typing after joining paragraph shouldn't be inserted into the link</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> +</head> +<body> +<div contenteditable></div> +<script> +"use strict"; + +const params = new URLSearchParams(location.search.substring(1)); +const backspace = params.get("action") == "Backspace"; +const bracketsForBackspace = backspace ? "[]" : ""; +const bracketsForDelete = backspace ? "" : "[]"; + +const editingHost = document.querySelector("div[contenteditable]"); +const utils = new EditorTestUtils(editingHost); + +function addPromiseTest(aTest) { + promise_test(async () => { + editingHost.focus(); + utils.setupEditingHost(aTest.innerHTML); + await (backspace ? utils.sendBackspaceKey() : utils.sendDeleteKey()); + await utils.sendKey("X", utils.kShiftKey); + await utils.sendKey("Y", utils.kShiftKey); + utils.normalizeStyleAttributeValues(); + if (Array.isArray(aTest.expectedResult)) { + assert_in_array(editingHost.innerHTML, aTest.expectedResult); + } else { + assert_equals(editingHost.innerHTML, aTest.expectedResult); + } + }, `${backspace ? "Backspace" : "Delete"} in "${aTest.innerHTML}"`); +} + +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>` +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>` +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }<br></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>` +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>` +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>` +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }<br></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span></p>` +}); +addPromiseTest({ + innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span>`, +}); +addPromiseTest({ + innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }<br></a><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY<span style="color:rgb(255, 0, 0)">bar</span>`, +}); + +// Should clear only the link style. +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${ + bracketsForDelete + }</b></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${ + bracketsForDelete + }</b></a><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${ + bracketsForDelete + }</b><br></a></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${ + bracketsForDelete + }</b></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${ + bracketsForDelete + }</b></a><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${ + bracketsForDelete + }</b><br></a></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${ + bracketsForDelete + }</b></a><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`, +}); +addPromiseTest({ + innerHTML: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo${ + bracketsForDelete + }</b><br></a><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<a href="about:blank" style="color:rgb(0, 0, 255)"><b>foo</b></a><b>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`, +}); + +addPromiseTest({ + innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a></b></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a></b><br></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }<br></a></b></p><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a></b></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a></b><br></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }<br></a></b></p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span>`, + expectedResult: `<p><b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span></p>`, +}); +addPromiseTest({ + innerHTML: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }</a></b><br><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`, +}); +addPromiseTest({ + innerHTML: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo${ + bracketsForDelete + }<br></a></b><p><span style="color:rgb(255, 0, 0)">${bracketsForBackspace}bar</span></p>`, + expectedResult: `<b><a href="about:blank" style="color:rgb(0, 0, 255)">foo</a>XY</b><span style="color:rgb(255, 0, 0)">bar</span>`, +}); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py index 2517568a5a8..59fa9e73e51 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py +++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py @@ -31,9 +31,9 @@ from typing import List, Mapping import re -import codecs import importlib import os +import pathlib import sys try: @@ -287,16 +287,16 @@ def _generate_test(test: Mapping[str, str], templates: Mapping[str, str], test_path += '-manual' if is_offscreen_canvas: - f = codecs.open(f'{test_path}.html', 'w', 'utf-8') - f.write(templates['w3coffscreencanvas'] % template_params) + pathlib.Path(f'{test_path}.html').write_text( + templates['w3coffscreencanvas'] % template_params, 'utf-8') timeout = ('// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else '') template_params['timeout'] = timeout - f = codecs.open(f'{test_path}.worker.js', 'w', 'utf-8') - f.write(templates['w3cworker'] % template_params) + pathlib.Path(f'{test_path}.worker.js').write_text( + templates['w3cworker'] % template_params, 'utf-8') else: - f = codecs.open(f'{test_path}.html', 'w', 'utf-8') - f.write(templates['w3ccanvas'] % template_params) + pathlib.Path(f'{test_path}.html').write_text( + templates['w3ccanvas'] % template_params, 'utf-8') def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str, @@ -307,8 +307,8 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str, doctest.testmod() sys.exit() - templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read()) - name_to_sub_dir = yaml.safe_load(open(NAME2DIRFILE, 'r').read()) + templates = yaml.safe_load(pathlib.Path(TEMPLATEFILE).read_text()) + name_to_sub_dir = yaml.safe_load(pathlib.Path(NAME2DIRFILE).read_text()) tests = [] test_yaml_directory = 'yaml/element' @@ -318,8 +318,8 @@ def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str, os.path.join(test_yaml_directory, f) for f in os.listdir(test_yaml_directory) if f.endswith('.yaml') ] - for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES], - []): + for t in sum( + [yaml.safe_load(pathlib.Path(f).read_text()) for f in TESTSFILES], []): if 'DISABLED' in t: continue if 'meta' in t: diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py index 4c65d688c25..3afb54de477 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py +++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py @@ -31,12 +31,12 @@ from typing import List, Mapping import re -import codecs import collections import dataclasses import enum import importlib import os +import pathlib import sys try: @@ -317,26 +317,28 @@ def _generate_test(test: Mapping[str, str], templates: Mapping[str, str], # Create test cases for canvas and offscreencanvas. if html_canvas_cfg.enabled: - f = codecs.open(f'{canvas_path}.html', 'w', 'utf-8') - f.write(templates['w3ccanvas'] % template_params) + pathlib.Path(f'{canvas_path}.html').write_text( + templates['w3ccanvas'] % template_params, 'utf-8') if offscreen_canvas_cfg.enabled: - f_html = codecs.open(f'{offscreen_path}.html', 'w', 'utf-8') - f_worker = codecs.open(f'{offscreen_path}.worker.js', 'w', 'utf-8') if ('then(t_pass, t_fail);' in code_canvas): temp_offscreen = templates['w3coffscreencanvas'].replace( 't.done();\n', '') temp_worker = templates['w3cworker'].replace('t.done();\n', '') - f_html.write(temp_offscreen % template_params) + pathlib.Path(f'{offscreen_path}.html').write_text( + temp_offscreen % template_params, 'utf-8') timeout = ('// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else '') template_params['timeout'] = timeout - f_worker.write(temp_worker % template_params) + pathlib.Path(f'{offscreen_path}.worker.js').write_text( + temp_worker % template_params, 'utf-8') else: - f_html.write(templates['w3coffscreencanvas'] % template_params) + pathlib.Path(f'{offscreen_path}.html').write_text( + templates['w3coffscreencanvas'] % template_params, 'utf-8') timeout = ('// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else '') template_params['timeout'] = timeout - f_worker.write(templates['w3cworker'] % template_params) + pathlib.Path(f'{offscreen_path}.worker.js').write_text( + templates['w3cworker'] % template_params, 'utf-8') def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None: @@ -351,8 +353,8 @@ def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None: doctest.testmod() sys.exit() - templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read()) - name_to_sub_dir = yaml.safe_load(open(NAME2DIRFILE, 'r').read()) + templates = yaml.safe_load(pathlib.Path(TEMPLATEFILE).read_text()) + name_to_sub_dir = yaml.safe_load(pathlib.Path(NAME2DIRFILE).read_text()) tests = [] test_yaml_directory = 'yaml-new' @@ -360,8 +362,8 @@ def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None: os.path.join(test_yaml_directory, f) for f in os.listdir(test_yaml_directory) if f.endswith('.yaml') ] - for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES], - []): + for t in sum( + [yaml.safe_load(pathlib.Path(f).read_text()) for f in TESTSFILES], []): if 'DISABLED' in t: continue if 'meta' in t: diff --git a/tests/wpt/web-platform-tests/loading/early-hints/preload-fetch.h2.window.js b/tests/wpt/web-platform-tests/loading/early-hints/preload-fetch.h2.window.js new file mode 100644 index 00000000000..121913ed317 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/early-hints/preload-fetch.h2.window.js @@ -0,0 +1,10 @@ +// META: script=resources/early-hints-helpers.sub.js + +test(() => { + const preloads = [{ + "url": "empty.json?" + Date.now(), + "as_attr": "fetch", + "crossorigin_attr": "", + }]; + navigateToTestWithEarlyHints("resources/preload-fetch.html", preloads); +}); diff --git a/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-helpers.sub.js b/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-helpers.sub.js index 3991e8fe9da..faf6119cf1e 100644 --- a/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-helpers.sub.js +++ b/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-helpers.sub.js @@ -14,6 +14,8 @@ const CROSS_ORIGIN_RESOURCES_URL = CROSS_ORIGIN + RESOURCES_PATH; * @property {string} url - A URL to preload. Note: This is relative to the * `test_url` parameter of `navigateToTestWithEarlyHints()`. * @property {string} as_attr - `as` attribute of this preload. + * @property {string} [crossorigin_attr] - `crossorigin` attribute of this + * preload. * * @param {string} test_url - URL of a test after the Early Hints response. * @param {Array<Preload>} preloads - Preloads included in the Early Hints response. diff --git a/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-test-loader.h2.py b/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-test-loader.h2.py index aa9188c6dbc..bb987209c50 100644 --- a/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-test-loader.h2.py +++ b/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-test-loader.h2.py @@ -18,6 +18,12 @@ def handle_headers(frame, request, response): for encoded_preload in request.GET.get_list(b"preloads"): preload = json.loads(encoded_preload.decode("utf-8")) header = "<{}>; rel=preload; as={}".format(preload["url"], preload["as_attr"]) + if "crossorigin_attr" in preload: + crossorigin = preload["crossorigin_attr"] + if crossorigin: + header += "; crossorigin={}".format(crossorigin) + else: + header += "; crossorigin" preload_headers.append(header.encode()) # Send a 103 response. diff --git a/tests/wpt/web-platform-tests/loading/early-hints/resources/empty.json b/tests/wpt/web-platform-tests/loading/early-hints/resources/empty.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/early-hints/resources/empty.json @@ -0,0 +1 @@ +{} diff --git a/tests/wpt/web-platform-tests/loading/early-hints/resources/empty.json.headers b/tests/wpt/web-platform-tests/loading/early-hints/resources/empty.json.headers new file mode 100644 index 00000000000..1738466bcb3 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/early-hints/resources/empty.json.headers @@ -0,0 +1,4 @@ +cache-control: max-age=600 +access-control-allow-origin: * +timing-allow-origin: * +cross-origin-resource-policy: cross-origin diff --git a/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-fetch.html b/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-fetch.html new file mode 100644 index 00000000000..2e90f76af14 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/early-hints/resources/preload-fetch.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="early-hints-helpers.sub.js"></script> +<body> +<script> +promise_test(async (t) => { + const preloads = getPreloadsFromSearchParams(); + assert_equals(preloads.length, 1); + const preload = preloads[0]; + + await fetch(preload.url).then((response) => response.json()); + const name = new URL(preload.url, window.location); + assert_true(isPreloadedByEarlyHints(name)); +}, "Ensure early hints preload works for fetch()"); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/navigation-api/navigate-event/same-url-replace-cross-document.html b/tests/wpt/web-platform-tests/navigation-api/navigate-event/same-url-replace-cross-document.html new file mode 100644 index 00000000000..0a976cd51fd --- /dev/null +++ b/tests/wpt/web-platform-tests/navigation-api/navigate-event/same-url-replace-cross-document.html @@ -0,0 +1,23 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/helpers.js"></script> + +<script> +promise_test(async t => { + // Wait for after the load event so that we are definitely testing the + // same URL as the cause of the rejections. + await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); + assert_equals(navigation.entries().length, 1); + + navigation.onnavigate = t.step_func(e => { + e.intercept(); + assert_equals(e.navigationType, "replace"); + }); + navigation.onnavigateerror = t.unreached_func("onnavigateerror should not be called"); + + await navigation.navigate(location.href).finished; + assert_equals(navigation.entries().length, 1); + assert_equals(navigation.currentEntry.index, 0); +}, "navigate() to the current URL cross document should replace"); +</script> diff --git a/tests/wpt/web-platform-tests/navigation-api/navigate-event/same-url-replace-same-document.html b/tests/wpt/web-platform-tests/navigation-api/navigate-event/same-url-replace-same-document.html new file mode 100644 index 00000000000..839c6879342 --- /dev/null +++ b/tests/wpt/web-platform-tests/navigation-api/navigate-event/same-url-replace-same-document.html @@ -0,0 +1,23 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/helpers.js"></script> + +<script> +promise_test(async t => { + // Wait for after the load event so that we are definitely testing the + // same URL as the cause of the rejections. + await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); + assert_equals(navigation.entries().length, 1); + await navigation.navigate("#").finished; + assert_equals(navigation.entries().length, 2); + assert_equals(navigation.currentEntry.index, 1); + + navigation.onnavigate = t.step_func(e => { + assert_equals(e.navigationType, "replace"); + }); + await navigation.navigate(location.href).finished; + assert_equals(navigation.entries().length, 2); + assert_equals(navigation.currentEntry.index, 1); +}, "navigate() to the current URL same document should replace"); +</script> diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-with-percent-delay.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-with-percent-delay.tentative.html new file mode 100644 index 00000000000..4f2e1761de2 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-with-percent-delay.tentative.html @@ -0,0 +1,91 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<link rel="help" src="https://drafts.csswg.org/scroll-animations-1/#named-timeline-range"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="support/testcommon.js"></script> +<title>Animation range and delay</title> +</head> +<style type="text/css"> + @keyframes anim { + from { opacity: 0 } + to { opacity: 1 } + } + #scroller { + border: 10px solid lightgray; + overflow-y: scroll; + width: 300px; + height: 200px; + } + #target { + margin: 800px 0px; + width: 100px; + height: 100px; + z-index: -1; + background-color: green; + animation: anim auto linear; + animation-timeline: scroll(); + /* Sentinel value when in before or after phase of the animation. */ + opacity: 0.96875; + } +</style> +<body> + <div id=scroller> + <div id=target></div> + </div> +</body> +<script type="text/javascript"> + async function runTest() { + + function assert_opacity_equals(expected, errorMessage) { + assert_approx_equals( + parseFloat(getComputedStyle(target).opacity), expected, 1e-6, + errorMessage); + } + + promise_test(async t => { + await waitForNextFrame(); + const anim = document.getAnimations()[0]; + await anim.ready; + + await waitForNextFrame(); + scroller.scrollTop = + (scroller.scrollHeight - scroller.clientHeight) / 2; + await waitForNextFrame(); + + const baseOpacity = 0.96875; + // Delays are percentages. + const testData = [ + { delay: 0, endDelay: 0, opacity: 0.5 }, + { delay: 20, endDelay: 0, opacity: 0.375 }, + { delay: 0, endDelay: 20, opacity: 0.625 }, + { delay: 20, endDelay: 20, opacity: 0.5 }, + // // Negative delays. + { delay: -25, endDelay: 0, opacity: 0.6 }, + { delay: 0, endDelay: -25, opacity: 0.4 }, + { delay: -25, endDelay: -25, opacity: 0.5 }, + // Stress tests with >= 100% total delay. Verify effect is inactive. + { delay: 100, endDelay: 0, opacity: baseOpacity }, + { delay: 0, endDelay: 100, opacity: baseOpacity }, + { delay: 100, endDelay: 100, opacity: baseOpacity } + ]; + + testData.forEach(test => { + anim.effect.updateTiming({ + delay: CSS.percent(test.delay), + endDelay: CSS.percent(test.endDelay) + }); + assert_opacity_equals( + test.opacity, + `Opacity when delay=${test.delay} and endDelay=${test.endDelay}`); + }); + }, 'ScrollTimeline with animation delays as percentages'); + } + + window.onload = runTest; + +</script> +</html> diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-with-delay-and-range.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-with-delay-and-range.tentative.html new file mode 100644 index 00000000000..40548bf5cd4 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-with-delay-and-range.tentative.html @@ -0,0 +1,93 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<link rel="help" src="https://drafts.csswg.org/scroll-animations-1/#named-timeline-range"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="support/testcommon.js"></script> +<title>Animation range and delay</title> +</head> +<style type="text/css"> + @keyframes anim { + from { opacity: 0 } + to { opacity: 1 } + } + #scroller { + border: 10px solid lightgray; + overflow-y: scroll; + width: 300px; + height: 200px; + } + #target { + margin: 800px 0px; + width: 100px; + height: 100px; + z-index: -1; + background-color: green; + animation: anim auto linear; + animation-timeline: t1; + view-timeline: t1 block; + animation-range-start: enter 0%; + animation-range-end: enter 100%; + /* Sentinel value when in before or after phase of the animation. */ + opacity: 0.96875; + } +</style> +<body> + <div id=scroller> + <div id=target></div> + </div> +</body> +<script type="text/javascript"> + async function runTest() { + + function assert_opacity_equals(expected, errorMessage) { + assert_approx_equals( + parseFloat(getComputedStyle(target).opacity), expected, 1e-6, + errorMessage); + } + + promise_test(async t => { + await waitForNextFrame(); + const anim = document.getAnimations()[0]; + await anim.ready; + + await waitForNextFrame(); + scroller.scrollTop = 650; + await waitForNextFrame(); + + const baseOpacity = 0.96875; + // Delays are percentages. + const testData = [ + { delay: 0, endDelay: 0, opacity: 0.5 }, + { delay: 20, endDelay: 0, opacity: 0.375 }, + { delay: 0, endDelay: 20, opacity: 0.625 }, + { delay: 20, endDelay: 20, opacity: 0.5 }, + // Negative delays. + { delay: -25, endDelay: 0, opacity: 0.6 }, + { delay: 0, endDelay: -25, opacity: 0.4 }, + { delay: -25, endDelay: -25, opacity: 0.5 }, + // Stress tests with >= 100% total delay. Verify effect is inactive. + { delay: 100, endDelay: 0, opacity: baseOpacity }, + { delay: 0, endDelay: 100, opacity: baseOpacity }, + { delay: 100, endDelay: 100, opacity: baseOpacity } + ]; + + testData.forEach(test => { + anim.effect.updateTiming({ + delay: CSS.percent(test.delay), + endDelay: CSS.percent(test.endDelay) + }); + assert_opacity_equals( + test.opacity, + `Opacity when delay=${test.delay} and endDelay=${test.endDelay}`); + }); + }, 'ViewTimeline with animation delays and range'); + } + + window.onload = runTest; + +</script> +</html> diff --git a/tests/wpt/web-platform-tests/tools/webtransport/h3/webtransport_h3_server.py b/tests/wpt/web-platform-tests/tools/webtransport/h3/webtransport_h3_server.py index d3031b4c0c2..4b49c90d816 100644 --- a/tests/wpt/web-platform-tests/tools/webtransport/h3/webtransport_h3_server.py +++ b/tests/wpt/web-platform-tests/tools/webtransport/h3/webtransport_h3_server.py @@ -186,8 +186,8 @@ class WebTransportH3Protocol(QuicConnectionProtocol): def _send_error_response(self, stream_id: int, status_code: int) -> None: assert self._http is not None - headers = [(b"server", SERVER_NAME.encode()), - (b":status", str(status_code).encode())] + headers = [(b":status", str(status_code).encode()), + (b"server", SERVER_NAME.encode())] self._http.send_headers(stream_id=stream_id, headers=headers, end_stream=True) @@ -221,9 +221,11 @@ class WebTransportH3Protocol(QuicConnectionProtocol): for name, value in response_headers: if name == b":status": status_code = value + response_headers.remove((b":status", status_code)) + response_headers.insert(0, (b":status", status_code)) break if not status_code: - response_headers.append((b":status", b"200")) + response_headers.insert(0, (b":status", b"200")) self._http.send_headers(stream_id=event.stream_id, headers=response_headers) diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.js b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.js new file mode 100644 index 00000000000..b4bcb2cd340 --- /dev/null +++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin-insecure.sub.window.js @@ -0,0 +1,109 @@ +// META: script=/storage-access-api/helpers.js +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +'use strict'; + +// Note that this file follows the pattern in: +// storage-access-api/requestStorageAccess.sub.window.js +// +// Some tests are run at the top-level, and an iframe is added to validate API +// behavior in that context. + +// Prefix each test case with an indicator so we know what context they are run +// in if they are used in multiple iframes. +let testPrefix = 'insecure-context'; + +// Keep track of if we run these tests in a nested context, we don't want to +// recurse forever. +let topLevelDocument = true; + +// The query string allows derivation of test conditions, like whether the tests +// are running in a top-level context. +const queryParams = window.location.search.substring(1).split('&'); +queryParams.forEach((param) => { + if (param.toLowerCase() == 'rootdocument=false') { + topLevelDocument = false; + } else if (param.split('=')[0].toLowerCase() == 'testcase') { + testPrefix = param.split('=')[1]; + } +}); + +// TODO(crbug.com/1410556): when/if requestStorageAccessForOrigin is standardized, +// we should consider upstreaming these helpers. +function RunRequestStorageAccessForOriginInDetachedFrame(site) { + const nestedFrame = document.createElement('iframe'); + document.body.append(nestedFrame); + const inner_doc = nestedFrame.contentDocument; + nestedFrame.remove(); + return inner_doc.requestStorageAccessForOrigin(site); +} + +function RunRequestStorageAccessForOriginViaDomParser(site) { + const parser = new DOMParser(); + const doc = parser.parseFromString('<html></html>', 'text/html'); + return doc.requestStorageAccessForOrigin(site); +} + +// Common tests to run in all frames. +test( + () => { + assert_not_equals(document.requestStorageAccessForOrigin, undefined); + }, + '[' + testPrefix + + '] document.requestStorageAccessForOrigin() should be supported on the document interface'); + +if (topLevelDocument) { + promise_test( + t => { + return promise_rejects_dom(t, 'NotAllowedError', + document.requestStorageAccessForOrigin('https://test.com'), + 'document.requestStorageAccessForOrigin() call without user gesture'); + }, + '[' + testPrefix + + '] document.requestStorageAccessForOrigin() should be rejected by default with no user gesture'); + + promise_test(async t => { + const description = + 'document.requestStorageAccessForOrigin() call in a detached frame'; + // Can't use promise_rejects_dom here because the exception is from the wrong global. + return RunRequestStorageAccessForOriginInDetachedFrame('https://foo.com') + .then(t.unreached_func('Should have rejected: ' + description)) + .catch((e) => { + assert_equals(e.name, 'InvalidStateError', description); + }); + }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached frame'); + + promise_test(async t => { + const description = + 'document.requestStorageAccessForOrigin() in a detached DOMParser result'; + return RunRequestStorageAccessForOriginViaDomParser('https://foo.com') + .then(t.unreached_func('Should have rejected: ' + description)) + .catch((e) => { + assert_equals(e.name, 'InvalidStateError', description); + }); + }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached DOMParser document'); + + // Create a test with a single-child same-origin iframe. + // This will validate that calls to requestStorageAccessForOrigin are rejected + // in non-top-level contexts. + RunTestsInIFrame( + './resources/requestStorageAccessForOrigin-iframe.https.html?testCase=secure-frame-on-insecure-page&rootdocument=false'); + + promise_test( + async t => { + await RunCallbackWithGesture( + () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin), 'document.requestStorageAccessForOrigin() call in insecure context')); + }, + '[' + testPrefix + + '] document.requestStorageAccessForOrigin() should be rejected when called in an insecure context'); + +} else { + promise_test( + async t => { + await RunCallbackWithGesture( + () => promise_rejects_dom(t, 'NotAllowedError', document.requestStorageAccessForOrigin(document.location.origin), + 'document.requestStorageAccessForOrigin() call in a non-top-level context')); + }, + '[' + testPrefix + + '] document.requestStorageAccessForOrigin() should be rejected when called in an iframe'); +} diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.js b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js index f7dd478a707..f7dd478a707 100644 --- a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.window.js +++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html index 3e2f6d5b628..43d16705c85 100644 --- a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html +++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.html @@ -6,4 +6,4 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <div id=log></div> -<script src="../requestStorageAccessForOrigin.sub.window.js"></script> +<script src="../requestStorageAccessForOrigin-insecure.sub.window.js"></script> diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.https.html b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.https.html new file mode 100644 index 00000000000..db03b25e14d --- /dev/null +++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccessForOrigin-iframe.https.html @@ -0,0 +1,9 @@ +<!doctype html> +<meta charset=utf-8> + +<script src="/storage-access-api/helpers.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<div id=log></div> +<script src="../requestStorageAccessForOrigin.sub.https.window.js"></script> |