diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
index 282ab0b2525..cdeaf7f7080 100644
--- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini
@@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
- expected: FAIL
+ expected: TIMEOUT
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index a7f4cc2c288..7ba9ea9a8b9 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -21397,21 +21397,21 @@
]
],
"change-shipping-option-manual.https.html": [
- "2511fc5ea05152392d9257cacc07d1bc081f3fb6",
+ "6e97f2878afe60ac1004f8a0e85989c54461c8d2",
[
null,
{}
]
],
"payment-request-event-manual.https.html": [
- "e595dd2160ff2bd4cb0701cb0786cf81385f4e75",
+ "9cd20354631b2277c17e543a4b30f81b90f0dbdb",
[
null,
{}
]
],
"supports-shipping-contact-delegation-manual.https.html": [
- "939e5429262b039eef36029ada3033652b35daf5",
+ "e3074b4e5e58a6e5e3ac7b97e0ea40480c1b9bf3",
[
null,
{}
@@ -135898,7 +135898,7 @@
"css-box": {
"margin-trim": {
"block-container-block-001.html": [
- "516a90cf652c39b55c9b31cb1c9c73f6c6e31e33",
+ "e31abec3678e39dd37339364a4c2977ed2adae30",
[
null,
[
@@ -135911,7 +135911,7 @@
]
],
"block-container-block-002.html": [
- "1f86d555bf777781932aceb43f623d2d9ac6961c",
+ "399141b17e4dcabf718ad5f8133b71caaa8b36d9",
[
null,
[
@@ -135924,7 +135924,7 @@
]
],
"block-container-block-end-001.html": [
- "e36a207fb6970e0bc4550e8410dfdad382cb41db",
+ "fcee65692ce94ac94dd3e8fbf6f5db4d18bdd6c9",
[
null,
[
@@ -135937,7 +135937,7 @@
]
],
"block-container-block-end-002.html": [
- "2859e104685af45f51eadf1e84b91583a773c183",
+ "42d559fbe927761b98ca8a47167ca15e5afb78bc",
[
null,
[
@@ -135950,7 +135950,7 @@
]
],
"block-container-block-start-001.html": [
- "2fecf07e644544516cc15e6d4f6c13e8c6f0f03f",
+ "c33c7f0abe5aa80c396f0050a47e4ea3c854e9dc",
[
null,
[
@@ -135963,7 +135963,7 @@
]
],
"block-container-block-start-002.html": [
- "6edbb54e942dbb265aa20b2bd6454c2366ab5677",
+ "339c990d10edbae71ba9d60707157b9d748aea5a",
[
null,
[
@@ -135975,8 +135975,21 @@
{}
]
],
+ "block-container-non-adjoining-item.html": [
+ "215175418b834c74f99f66237aebdcd1b859776f",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/block-container-non-adjoining-item-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"block-container-replaced-block-end.html": [
- "6011d10de532c3f90e2644e36c43b3682dd867a1",
+ "0225460b7b71f163cb22eea1b7c9b275b258b89f",
[
null,
[
@@ -135989,7 +136002,7 @@
]
],
"block-container-replaced-block-start.html": [
- "c943fb16bbd8a0886de9f4f72ba7d9142279c742",
+ "10080c974f3b5a013f1a9cb87c55a85121058098",
[
null,
[
@@ -136002,7 +136015,319 @@
]
],
"block-container-replaced-block.html": [
- "54d701176ce6a8f36f1cb20f5e3be33acda26204",
+ "036066f6910e9e6043cc8ccb9267c56a861bef6e",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-block-end-trimmed-only.html": [
+ "0a99b3f308bb7f232a8295aa79ce40995ffd94c5",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-block-end-trimmed-only-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-block-start-trimmed-only.html": [
+ "5e867ea43d1ce873ac7984ce1a7271680540cf4c",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-block-start-trimmed-only-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-block-trimmed-only.html": [
+ "e73048282515e62bec6d9fc663df83b2ff8431c0",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-block-trimmed-only-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-column-block-multiline.html": [
+ "6536d7f00dfcbc7e6e80ad18731c0b69825176ce",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-column-grow.html": [
+ "62c55b2bfff07c019ea7e5292b0d81f407ca96be",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-column-inline-multiline.html": [
+ "25003aab08e8f383ac2fdd33963d5e5d5af9afd3",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-column-inline-multiline-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-column-orthogonal-item.html": [
+ "9f13e2ce71ca8255e1a16558633c45ecbd45cd73",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-column-shrink.html": [
+ "06395ff6d5e35cbe125f58bed7de482759a1ea70",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-inline-end-trimmed-only.html": [
+ "33451daf30a9d0035529c53d40a8f2316109de3f",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-inline-end-trimmed-only-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-inline-start-trimmed-only.html": [
+ "05cf112e66adc4b1364b789b5697e89c8d0eb594",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-inline-start-trimmed-only-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-inline-trimmed-only.html": [
+ "637dc485afed7d29238ccb1e4b24e3d6bbff08a1",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-inline-trimmed-only-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-row-block-multiline.html": [
+ "c8fc788ca266e655c725d82c5f23160fbc7b5282",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-row-block-multiline-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-row-grow.html": [
+ "64395461cfd714e37a8dec5ff339f8fc343d3b59",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-row-inline-multiline.html": [
+ "d563373d50a1cad7542d60f5ec3880a13c5c7347",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-row-orthogonal-item.html": [
+ "3facc7450caa965d47fb05cfad558136931b51fb",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-row-shrink.html": [
+ "172c946cb4a004aa0f6146f674d5f53ee48b9db4",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "flex-trim-all-margins.html": [
+ "1c2eda8aa095978938005704200bf107a7716fb1",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/flex-trim-all-margins-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "grid-block-end.html": [
+ "ffbc374756c22872c05e6c19d2a296a3cc8f0a1a",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/grid-block-end-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "grid-block-start.html": [
+ "21d5447253581111503f95bb304107d0b70871d8",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/grid-block-start-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "grid-block.html": [
+ "6a4c3bbc9466db04dc06e0d880e7d505d3f5ae82",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "grid-inline-end.html": [
+ "3754a9b50aa189c52f32def4ca2f739b089e4003",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/grid-inline-end-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "grid-inline-start.html": [
+ "e0f4c6d45467eed5ab4ba8d084c58632b231dd8e",
+ [
+ null,
+ [
+ [
+ "/css/css-box/margin-trim/grid-inline-start-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "grid-inline.html": [
+ "1ac228296afaa9e8ef8437af4f62719796db6329",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "grid-trim-ignores-collapsed-tracks.html": [
+ "15768ea7aa91425b12d9dee0dacd0eb83bf0cc91",
[
null,
[
@@ -174079,7 +174404,7 @@
]
],
"font-colorization.html": [
- "076910a791c0b25a06352218c241fc1818be90ac",
+ "252d15fc5610ef6df5f73625b9dca56892565d83",
[
null,
[
@@ -271630,6 +271955,19 @@
{}
]
],
+ "ch-unit-018.html": [
+ "d79fec7f498309a699981cd6dbaf533af533459e",
+ [
+ null,
+ [
+ [
+ "/css/css-values/reference/ch-unit-016-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"ex-calc-expression-001.html": [
"4eab829697f87606a64d60f360a04639e61ccabb",
[
@@ -271683,7 +272021,7 @@
]
],
"ex-unit-004.html": [
- "46f9384e9f77b02344825bc1107700d097846c29",
+ "1edf97d4ead3f418c82400d56aa09f21622901af",
[
null,
[
@@ -271838,6 +272176,19 @@
{}
]
],
+ "ic-unit-015.html": [
+ "3be22ecc20557b5084559d51ce18ea5268703680",
+ [
+ null,
+ [
+ [
+ "/css/css-values/reference/ch-unit-016-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"lh-unit-001.html": [
"f7a6fc9551b4524a41bdb97cb9293ff973cf3e52",
[
@@ -276115,6 +276466,19 @@
{}
]
],
+ "view-transition-name-is-grouping.html": [
+ "95739351f0fa508ba3449f104317812acbba89b6",
+ [
+ null,
+ [
+ [
+ "/css/css-view-transitions/view-transition-name-is-grouping-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"web-animations-api.html": [
"b9d62fabc6b3d485e73cdd4708923b4f9821949e",
[
@@ -313158,6 +313522,32 @@
{}
]
],
+ "fallback-001.svg": [
+ "e2788e5f93e4f13352a53a57e229f90d1b1011d4",
+ [
+ null,
+ [
+ [
+ "/svg/pservers/reftests/reference/green-100x100.svg",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "fallback-002.svg": [
+ "6180cb2a96fb0a80c0b08e3a9000935b9360a73a",
+ [
+ null,
+ [
+ [
+ "/svg/pservers/reftests/reference/green-100x100.svg",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"marker-path-001.svg": [
"7fb4adf4277321eb69e50fecb9018c1950aef4ca",
[
@@ -318851,7 +319241,7 @@
[]
],
"aes_gcm_vectors.js": [
- "72566ded62f1f9dac9ba5945fd8edeb6bb56fba4",
+ "bc406f8f0ef78e0759f1dd5b4a48892ce43fcde4",
[]
],
"rsa.js": [
@@ -318925,7 +319315,7 @@
},
"util": {
"helpers.js": [
- "8874f731f8bbcf453c63d14d88fc3248d0291429",
+ "ee9d09d1251237dfd1bf8a3d4ade55d8b683bee5",
[]
],
"worker-report-crypto-subtle-presence.js": [
@@ -343025,7 +343415,7 @@
[]
],
"cookie-helper.sub.js": [
- "1420779e0d5a13d8da9a242324143e2e6b043afa",
+ "ff33ecb6bd2c025c58ec07924b8ac99d8529a461",
[]
],
"cookie-test.js": [
@@ -363963,7 +364353,65 @@
"META.yml": [
"dde409360faf79a301c3ae3ea34a995d154d7bb4",
[]
- ]
+ ],
+ "margin-trim": {
+ "block-container-non-adjoining-item-ref.html": [
+ "4affb87f11b2174047836baecc556734fd2e77b7",
+ []
+ ],
+ "flex-block-end-trimmed-only-ref.html": [
+ "514518243665d2225fda093931188c6d10b73219",
+ []
+ ],
+ "flex-block-start-trimmed-only-ref.html": [
+ "58a7e5ba31fb0d6cb39e552f29c5dba77eafe522",
+ []
+ ],
+ "flex-block-trimmed-only-ref.html": [
+ "f4cf4fec863f0d3ca86f18a231d6b1aabd48b211",
+ []
+ ],
+ "flex-column-inline-multiline-ref.html": [
+ "c4b36a91b7bfb0a4872a036626a50e0333317bfc",
+ []
+ ],
+ "flex-inline-end-trimmed-only-ref.html": [
+ "9fb945d00c99c0c16be88b9f5db31d0ac2e7490c",
+ []
+ ],
+ "flex-inline-start-trimmed-only-ref.html": [
+ "f7dc9ec5c5e63c271311ab5afc5ccbae3867d3a6",
+ []
+ ],
+ "flex-inline-trimmed-only-ref.html": [
+ "e262b903df597cc36c8ea93577c52080641ef671",
+ []
+ ],
+ "flex-row-block-multiline-ref.html": [
+ "8eb29f580618891f14f2c1ab33ce320c4f49b275",
+ []
+ ],
+ "flex-trim-all-margins-ref.html": [
+ "aebc1045d16f2777d2a32d09ca7e1e6f38065d75",
+ []
+ ],
+ "grid-block-end-ref.html": [
+ "0ada6451471ca1ec61f88b403bab0f40c393ef8e",
+ []
+ ],
+ "grid-block-start-ref.html": [
+ "486b64c74aa5b65e96416aeac0a7c88e3b4a7c2c",
+ []
+ ],
+ "grid-inline-end-ref.html": [
+ "e51a97faf8f91b41cf8596e053cbc66acaa2a158",
+ []
+ ],
+ "grid-inline-start-ref.html": [
+ "c35b1f5fe64eda18b695ae759be5d74c1202672b",
+ []
+ ]
+ }
},
"css-break": {
"META.yml": [
@@ -369723,7 +370171,7 @@
[]
],
"font-colorization-ref.html": [
- "55d3d341cb43f5c094fa1509ef7a0f1fba332cbc",
+ "b2c69198cc3643fa9997591e3333c91f6dc393fc",
[]
],
"font-default-01-ref.html": [
@@ -394758,6 +395206,10 @@
[]
]
},
+ "view-transition-name-is-grouping-ref.html": [
+ "add20600f818ee118422c770c0a3f0cd367740b6",
+ []
+ ],
"web-animations-api-ref.html": [
"b97396c491f515885b0cfd1e778ea88cc9c8ea10",
[]
@@ -399335,7 +399787,7 @@
[]
],
"interpolation-testcommon.js": [
- "002841cfead0f5c764bc34c47b9209522e35b017",
+ "aa8239ae928654b903dff5ae5a7e3e8c57826846",
[]
],
"numeric-testcommon.js": [
@@ -400514,7 +400966,7 @@
},
"scrolling": {
"scroll_support.js": [
- "169393e4c3e4194548d8989bb3855d32e023ce24",
+ "847a9891d6a87ce3ac5ccfeb382e619f59992999",
[]
]
}
@@ -401091,15 +401543,15 @@
[]
],
"fontname.js": [
- "f4193a9bce7298473feb79b7c823d881f233267d",
+ "b42be89c66e1794ca301958af420b8b94338cebf",
[]
],
"fontsize.js": [
- "eb741b4f331dccdb831be9a20c31d6f4e29bab4f",
+ "bbaa6d8447844b33cd6b9e13da6bf20576d47c31",
[]
],
"forecolor.js": [
- "57deb5b434ae3a5610282f5182cf5ee2c3e98610",
+ "fde8364be234e224460f986636c76a42ed87a6fa",
[]
],
"formatblock.js": [
@@ -401179,7 +401631,7 @@
[]
],
"multitest.js": [
- "9948c338b4071eeef68b41d3788693c6864b1e04",
+ "89f5eebdb666c896e0c549bf0683894d0b64e8f8",
[]
],
"outdent.js": [
@@ -404296,38 +404748,6 @@
"54961ae54bcb25ce95a461d7ccecfdd1414a6475",
[]
],
- "message-target-dedicated-worker.js": [
- "26ff23ef8ac65009c3c5efd4bdeda3970ae93910",
- []
- ],
- "message-target-service-worker.js": [
- "4a6174ae3b5539300954f6f36782a96a066b4889",
- []
- ],
- "message-target-shared-worker.js": [
- "6829c61d4cf9f32f4834ae09ffba1d614b0430a0",
- []
- ],
- "message-target.html": [
- "32c7f0c56c61d4d2f6e432dd3c38f8afe91f9762",
- []
- ],
- "message-target.js": [
- "191b4748ab5fc5c0e0416d1e96c476262c6cfe0d",
- []
- ],
- "messaging-blob-helpers.js": [
- "852f2e2d3213075ce738fbc2bb5ac4a1f4008ad6",
- []
- ],
- "messaging-helpers.js": [
- "55fc04ab817aeac2ccf13e716030264666b79d97",
- []
- ],
- "messaging-serialize-helpers.js": [
- "ada68f43db50683ec3350e243ebe8da6966e8196",
- []
- ],
"opaque-origin-sandbox.html": [
"f489f889b3cfbe7887c6c6dad04de79cd52cc76e",
[]
@@ -423237,6 +423657,10 @@
"93865b930da39216831b33d17bd1bdf0ecb72eed",
[]
],
+ "early-hints-delay.h2.py": [
+ "ba8796bc11a136fa9652fbf6b07612c929c1c9b0",
+ []
+ ],
"early-hints-helpers.sub.js": [
"3991e8fe9da479dd0f5b4cea537542ba948a8540",
[]
@@ -425978,7 +426402,7 @@
[]
],
"app-can-make-payment.js": [
- "cd27bce02e0920167cf19fce4c150eeadcad949c",
+ "6b060dffb7848ea40529bd7cf8782f1b49c64c66",
[]
],
"app-change-payment-method.js": [
@@ -425994,7 +426418,7 @@
[]
],
"app-simple.js": [
- "833a01f47e0c09ea306ebde565e72d2d2ed715e4",
+ "9e70c08246b5b534ea032b9275b0d82676b3c701",
[]
],
"app-supports-shipping-contact-delegation.js": [
@@ -426005,14 +426429,22 @@
"5b334d9c3aca0a974c9c32063c5b56d2214a89e2",
[]
],
+ "can-make-payment-event-manifest.json": [
+ "b31ea5ce08b59d8b227f8ad03555244e1f616b52",
+ []
+ ],
"change-payment-method-manual-manifest.json": [
- "8f33def77ba18987d0edbe941ce0da90c39b7cec",
+ "7a4f5d6f7e20d8abf03a4add842d1dad603c87a3",
[]
],
"change-shipping-address-manual-manifest.json": [
"08b034e825ca66488d61da8dc4f49e3f18323006",
[]
],
+ "change-shipping-option-manual-manifest.json": [
+ "2c023902b2a79b01fcaaf22315ecd284ff3896e8",
+ []
+ ],
"manifest.json": [
"875d74b66306ad17d29e3f75ad7d250ba74da20e",
[]
@@ -426027,10 +426459,18 @@
"1aea7000c1428e84f8e1d4ce1ccae63e97741122",
[]
],
+ "payment-request-event-manual-manifest.json": [
+ "f97229762ce388ff0695d56684099b9286326a29",
+ []
+ ],
"register-and-activate-service-worker.js": [
"fb54c5c06488f319b0b4152837cc6a1b530cab7a",
[]
],
+ "supports-shipping-contact-delegation-manual-manifest.json": [
+ "fd6bc89ef6d38e0cee82bfadcc697e36a2952070",
+ []
+ ],
"untrusted-event.js": [
"e067952cc3b7dd0eb74909001e49615e20a8f8b9",
[]
@@ -427101,7 +427541,7 @@
[]
],
"prefetch-helper.js": [
- "cf0e0d583cd937664cee79d7c9fe0566f56f0288",
+ "367d4824c4174b65a77999bae70c26a779edb51e",
[]
],
"prefetch-info.py": [
@@ -429000,7 +429440,7 @@
}
},
"resource-timing-level1.js": [
- "95b5cdfb1ed0ca2bbfd6b692ad565512218dd7a4",
+ "6167777fe68fa3d08534857b8a6e3d585bf8947a",
[]
],
"resources": {
@@ -429184,6 +429624,14 @@
"7debc9ce3f6cb061be8ca37b73fcf9f2a5396389",
[]
],
+ "header-delay.h2.py": [
+ "be29e52b0e836ca0228b9e51cd22c31a0bb4c899",
+ []
+ ],
+ "header-delay.py": [
+ "a47a63e9814a78bd06e2f55922de27fe073da45f",
+ []
+ ],
"iframe-TAO-crossorigin-port.sub.html": [
"97d77fcc58a3bbd347a98e2cbd9fa6243a83838a",
[]
@@ -429497,7 +429945,7 @@
[]
],
"mock-subapps.js": [
- "467d932465bb63b031e831b2f42f98ad2935d04f",
+ "ddbf27649e19954fd602b80aac17e1b5c19576be",
[]
],
"mock-textdetection.js": [
@@ -433990,10 +434438,14 @@
[]
],
"helpers.js": [
- "de9fba2d1c48fbb6cdbfcba9e7a9aaf99f68e04a",
+ "99ba79234135f6dc8f2d92692ac23e8ea89b637a",
[]
],
"resources": {
+ "embedded_responder.js": [
+ "0d563e6b30ccaf55229de06e5e1c0a846f5f4e4b",
+ []
+ ],
"hasStorageAccess-iframe.html": [
"d57c3961e54f6d599ffe13af4498470a2e49e636",
[]
@@ -434010,6 +434462,10 @@
"4880464a257c65e16d7a70471a31a571f8de4878",
[]
],
+ "script-with-cookie-header.py": [
+ "83129a55595e54225afd7e9161931d8e5f60f0c0",
+ []
+ ],
"set-cookie.py": [
"019697a4a8608943e0258664138ce9a7b6ae6876",
[]
@@ -435904,7 +436360,7 @@
[]
],
"requirements_mypy.txt": [
- "7948c2035886a7c8223ac2c785d16526f19df650",
+ "7ee915ddb125b6e213425c965dd6482caa00f386",
[]
],
"requirements_pytest.txt": [
@@ -454260,6 +454716,36 @@
}
]
],
+ "back-forward-cache-open-transaction.window.js": [
+ "41d70d597c7f95d858a6aa9372b278d7f5a3a5e5",
+ [
+ "IndexedDB/back-forward-cache-open-transaction.window.html",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "BFCache support test for page with open IndexedDB transaction"
+ ],
+ [
+ "script",
+ "/common/dispatcher/dispatcher.js"
+ ],
+ [
+ "script",
+ "/common/utils.js"
+ ],
+ [
+ "script",
+ "/html/browsers/browsing-the-web/back-forward-cache/resources/rc-helper.js"
+ ],
+ [
+ "script",
+ "/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"
+ ]
+ ]
+ }
+ ]
+ ],
"bigint_value.htm": [
"acdeebb76f50ae4cbee33a4654af25c270004bcc",
[
@@ -487761,21 +488247,21 @@
]
],
"animation-delay-end-computed.html": [
- "bfb89d0267f5ad9a5ef7cb01e8ad6dc4b536a2fc",
+ "77f96706383df2fb9a25478b5b35807b67bedf2d",
[
null,
{}
]
],
"animation-delay-end-invalid.html": [
- "bff31f3789a4fd9e8ff8be99e1af61882d46af62",
+ "7cabd4e8e54d96d7c3b36fc9473022cf530f664d",
[
null,
{}
]
],
"animation-delay-end-valid.html": [
- "22ab9fe3b736c0a1f9c4415a223f12e254bbdc19",
+ "162c781bb010066bfb17e87f64932180abb472c8",
[
null,
{}
@@ -487796,7 +488282,7 @@
]
],
"animation-delay-shorthand.html": [
- "f09f0a948ca94a183c818d27c6dda6b65a16e6fa",
+ "5c74a4d8e432ca41d02e5ec44330518f5162f457",
[
null,
{}
@@ -487817,7 +488303,7 @@
]
],
"animation-delay-start-valid.html": [
- "22ab9fe3b736c0a1f9c4415a223f12e254bbdc19",
+ "f52286444edb71cdeb24bc57f8de8d566113730a",
[
null,
{}
@@ -487963,6 +488449,55 @@
{}
]
],
+ "animation-range-end-computed.html": [
+ "ff30fbfc3fb9cca723b2615ad908f149ee3375b8",
+ [
+ null,
+ {}
+ ]
+ ],
+ "animation-range-end-invalid.html": [
+ "c1f2800feeeed6222758bb262edd2cd425b34fb5",
+ [
+ null,
+ {}
+ ]
+ ],
+ "animation-range-end-valid.html": [
+ "b2aee359adc5eaf9a5c684a1109218950b79f70c",
+ [
+ null,
+ {}
+ ]
+ ],
+ "animation-range-shorthand.html": [
+ "dcccc2fc4dbae73342c4a5f357398a05132748a4",
+ [
+ null,
+ {}
+ ]
+ ],
+ "animation-range-start-computed.html": [
+ "e2d9498f41c9bc0ed8e967a52263a5bf87b99898",
+ [
+ null,
+ {}
+ ]
+ ],
+ "animation-range-start-invalid.html": [
+ "b2eaecc293a492694ba9e8aa644c2d3f7708a650",
+ [
+ null,
+ {}
+ ]
+ ],
+ "animation-range-start-valid.html": [
+ "1aea7e15729e071c5e12794209a78b4ebe39ea4d",
+ [
+ null,
+ {}
+ ]
+ ],
"animation-shorthand.html": [
"b981ad3ad6893c3305183c965be973eb369331c5",
[
@@ -491079,7 +491614,7 @@
]
],
"content-visibility-035.html": [
- "bc84c28d4a362cc37755ec8886573d2a1f70f8ee",
+ "c2f62ca438b19bf6004ad46cd31a48ace05fd1a7",
[
null,
{}
@@ -494080,7 +494615,7 @@
]
],
"font-variation-settings-composition.html": [
- "58f037415e23801fb2c540e5ae3b032cdd4ff0c8",
+ "e1ebfc283682c6d7cfcbab69c871324799c4ad04",
[
null,
{}
@@ -494201,6 +494736,13 @@
{}
]
],
+ "font-shorthand-subproperties-reset.html": [
+ "4ed91e8fd3d7a142c252b183e6d22291525b3464",
+ [
+ null,
+ {}
+ ]
+ ],
"font-size-relative-across-calc-ff-bug-001.html": [
"167de8888725ca55090ac80cda43cddb299b7c7d",
[
@@ -498716,7 +499258,7 @@
]
],
"image-set-parsing.html": [
- "b9b335a287b8a3ed9194ac6a4d80ef6c94ab7ef3",
+ "868861b8add32ea7e7822383f04a4bb219dd747f",
[
null,
{}
@@ -514820,14 +515362,14 @@
},
"css-view-transitions": {
"duplicate-tag-rejects-capture.html": [
- "da340deccb3c52d173af94dcdec5883a3548c2e2",
+ "951294babc2731eb1f86c32bc90c0beab95d70e4",
[
null,
{}
]
],
"duplicate-tag-rejects-start.html": [
- "f34c337e0c98e81859b4fba43dc2b4e06e41feb5",
+ "6c99d6426c04f553dea129f0c0f978aba1c33c24",
[
null,
{}
@@ -514864,21 +515406,21 @@
]
],
"no-containment-on-new-element-mid-transition.html": [
- "551d2c41f789220984169771f3ccf8a0de029016",
+ "dc5ede4d8d34dd69a767d2f49871649b36b4ab75",
[
null,
{}
]
],
"no-containment-on-new-element.html": [
- "46f576dbd564ec2f31e812f7e201bc0d6f8ef90f",
+ "57f148309b4a93bd007e43cb16ba280104fe02e0",
[
null,
{}
]
],
"no-containment-on-old-element.html": [
- "8b21916019e1880212a9803d4205556ba402d169",
+ "b0af95bf6ceb5635e8dbaf1eb8caab4cec0d361e",
[
null,
{}
@@ -514975,7 +515517,7 @@
]
],
"pseudo-computed-style-stays-in-sync-with-new-element.html": [
- "103dc31930ca9db862415952139b555d715cf5ab",
+ "576b7525cc67de0b6687e1d20cddc857bb45eb02",
[
null,
{}
@@ -514989,7 +515531,7 @@
]
],
"ready_resolves_after_dom_before_raf.html": [
- "3bc1822314cb06e57e7fac789a2372884b62539c",
+ "40a2ad47670223d5f40ac5b8689e152bff8eba54",
[
null,
{}
@@ -515003,7 +515545,7 @@
]
],
"synchronous-callback-skipped-before-run.html": [
- "d1ada87e9d6a92cef204a1198891170c62bb80ca",
+ "d6023a7fd202c2df7e377a7baeefcabc2e41c286",
[
null,
{}
@@ -515017,14 +515559,14 @@
]
],
"transition-skipped-from-invalid-callback.html": [
- "0dd098cbdfaa598f820b72b808d25ff1eba10c8a",
+ "cf3853cd5705bb291a3f9fc2eb8c9fc6d1d1d3d6",
[
null,
{}
]
],
"unset-and-initial-view-transition-name.html": [
- "4ff5c05316bd8d2c433bff359e3be220dce55da9",
+ "2715a5bb3346febd5eab526acb05bff6a8254cdc",
[
null,
{}
@@ -520497,7 +521039,7 @@
],
"reactions": {
"Animation.html": [
- "47eff97497c65e1324947d26825c1539677cb7d9",
+ "f8d3bb86ed78ac3d0a804d7bd56f0b97bd95d481",
[
null,
{}
@@ -522760,6 +523302,15 @@
}
]
],
+ "scrollend-event-fired-for-mandatory-snap-point-after-load.html": [
+ "a51069bc088fa4c8e3d1645e59a00545e95e64ec",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"scrollend-event-fired-for-programmatic-scroll.html": [
"c6569e0bebbd9f8bc0fe91415acdbbae482b82dd",
[
@@ -522817,7 +523368,7 @@
]
],
"scrollend-event-for-user-scroll.html": [
- "5146c5f719a1e4728a2c9aa0bdd54516ac1fe5c1",
+ "e9be7c98483b86b9a8a7ce29202ba96e837df371",
[
null,
{
@@ -546096,7 +546647,7 @@
]
],
"authentication-redirection.any.js": [
- "b6376368116e76270d489493350e4226293bb8da",
+ "a0175e6d2a72da37501cde7e2350655b036df602",
[
"fetch/api/credentials/authentication-redirection.any.html",
{
@@ -556764,14 +557315,14 @@
]
],
"FileSystemSyncAccessHandle-read-write.https.tentative.worker.js": [
- "cdefc78b6cb2115114accbd449e34766fbf0849b",
+ "8fa3799a67a4f1bb0fdc2c623638bb60d6ae2c3c",
[
"fs/FileSystemSyncAccessHandle-read-write.https.tentative.worker.html",
{}
]
],
"FileSystemSyncAccessHandle-truncate.https.tentative.worker.js": [
- "921e0066c9023ee30810be46f3d1c4652c473c03",
+ "f2cd51ef1a1d9711343461888018a61600243885",
[
"fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.html",
{}
@@ -614930,6 +615481,15 @@
}
]
],
+ "early-hints-response-time.h2.html": [
+ "ac70b3d332e6540881d0e683f91e3493df7ef6f1",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"embed-object.h2.window.js": [
"82365fafddbb8df1ea80cecdf2d24db65e3ef379",
[
@@ -624821,7 +625381,7 @@
]
],
"can-make-payment-event.https.html": [
- "941c206e3b36fc91175e414bf773dd54e5d7d982",
+ "776c68be43ad727b6f8108bb6dbbebd7ebec3196",
[
null,
{
@@ -629377,6 +629937,50 @@
{}
]
],
+ "prefetch-cache.html": [
+ "844b4d7be59b8f74a536267701ad54bb3e0e4caf",
+ [
+ null,
+ {}
+ ]
+ ],
+ "prefetch-document.html": [
+ "bdb12bd58a036a1f7429e362acb078f0d2f75d4b",
+ [
+ null,
+ {}
+ ]
+ ],
+ "prefetch-events.html": [
+ "7857b14f51466b88b78b12793268e48d021a8b6c",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "prefetch-headers.html": [
+ "0a475c7d7735cb535f24b62339fdd42d4d5443cb",
+ [
+ null,
+ {}
+ ]
+ ],
+ "prefetch-load-event.html": [
+ "c1cb75d52ea6db7b48d2c606619b69b3c03fbb3c",
+ [
+ null,
+ {}
+ ]
+ ],
+ "prefetch-types.html": [
+ "276439e5440b2157eb2bfaf6a2fbe8b4ec05b3ff",
+ [
+ null,
+ {}
+ ]
+ ],
"preload-connect-to-doc.html": [
"ba45f6f3f848068ee9120b89c41307af22d570d3",
[
@@ -642428,7 +643032,7 @@
]
],
"notify.html": [
- "7f0e448540465fa56d7074aa2ad3f353aef8ceb9",
+ "dc2e268b8a11c331a866310dde3a48a91b3ba1c0",
[
null,
{}
@@ -643065,6 +643669,20 @@
{}
]
],
+ "interim-response-times.h2.html": [
+ "850ee7cb5f539b76ddfd9c1489915fa9ddaf7215",
+ [
+ null,
+ {}
+ ]
+ ],
+ "interim-response-times.html": [
+ "b922590d5d32c2b3899d82e4ea9297d54b6c7cc2",
+ [
+ null,
+ {}
+ ]
+ ],
"link-sequence-of-events.html": [
"be9db32cd92968a210f54a26ae14b6e93a8e836c",
[
@@ -645528,7 +646146,7 @@
]
],
"animation-timeline-multiple.html": [
- "8ae37bf751982355ef89c3db2c491e4e68b27ba0",
+ "7eccdf89b6c20f26c219d6cc62f32c990ba38e17",
[
null,
{}
@@ -645612,7 +646230,7 @@
]
],
"scroll-timeline-axis-writing-mode.html": [
- "90912bfc2270558d4810cd3a183d666c2118c32f",
+ "37b4dfdf549e52943c5e8a35683cc6a998442db4",
[
null,
{}
@@ -645667,8 +646285,8 @@
{}
]
],
- "scroll-timeline-name-tree-scoped.html": [
- "622a582cce9d2704139f5e7c7a363e00d7581e91",
+ "scroll-timeline-name-shadow.html": [
+ "3d6a55883e023abcd220ed162edc7bd330ad5024",
[
null,
{}
@@ -645710,7 +646328,7 @@
]
],
"scroll-timeline-shorthand.tentative.html": [
- "b340ff34ffe4e2ba0d93014ce114656ec3fb5373",
+ "c76ee9e22bb6cd945c61ca6591cf68ef5093af7f",
[
null,
{}
@@ -645800,8 +646418,15 @@
{}
]
],
- "view-timeline-name-tree-scoped.html": [
- "c216c345ed97a30b7f6892c802c14c8c3ffc4554",
+ "view-timeline-name-shadow.html": [
+ "bf93d8c160d2f8f0490d6f83fb859a84ac6c1d09",
+ [
+ null,
+ {}
+ ]
+ ],
+ "view-timeline-range-animation.html": [
+ "32febb2f2b6666cf5530b6fe6f20527c494ba667",
[
null,
{}
@@ -655471,6 +656096,32 @@
}
]
],
+ "requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js": [
+ "5081bb4a9cb7ded381bfcc52716b013c508210a1",
+ [
+ "storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "helpers.js"
+ ],
+ [
+ "script",
+ "/cookies/resources/cookie-helper.sub.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver-vendor.js"
+ ]
+ ]
+ }
+ ]
+ ],
"requestStorageAccess-cross-origin-iframe.sub.https.window.js": [
"38e3fd6d9abb47ccb6ba4b91609d903caf3ce364",
[
@@ -655493,6 +656144,32 @@
}
]
],
+ "requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js": [
+ "75ea90744ff11691b1a4c134c42bb755572c5381",
+ [
+ "storage-access-api/requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.html",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "helpers.js"
+ ],
+ [
+ "script",
+ "/cookies/resources/cookie-helper.sub.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver.js"
+ ],
+ [
+ "script",
+ "/resources/testdriver-vendor.js"
+ ]
+ ]
+ }
+ ]
+ ],
"requestStorageAccess-insecure.sub.window.js": [
"f845f0647ca001e7a5fe304816a055e2d70c28df",
[
@@ -659716,7 +660393,7 @@
},
"subapps": {
"add-error.tentative.https.html": [
- "c9db29b62de6599425f7157c3d50d956f1e69f48",
+ "3dafdcd5aca11819808c393a22bb15fcb14b4e1f",
[
null,
{
@@ -659725,7 +660402,7 @@
]
],
"add-success.tentative.https.html": [
- "b2751adcb8fa0b68817d46687a5196fbd75f37b2",
+ "fee7c6605c626c68bc591ce885cadff7cd294ee8",
[
null,
{
@@ -659766,14 +660443,14 @@
]
],
"list-success.tentative.https.html": [
- "0ee02230e805b1085a901a64e102182e48e5738f",
+ "d214b8ac14a7588c27c313f2ee6df1e138ccdb0c",
[
null,
{}
]
],
"remove-error.tentative.https.html": [
- "05305c4fafc5db90d13db4f7ac65a6c10154e710",
+ "e447ccede5c53199789ef8c8defb80e18303311a",
[
null,
{}
@@ -674691,7 +675368,7 @@
]
],
"audiocontext-sinkid-setsinkid.https.html": [
- "c4fbe41e921c5403077e23e1074194f3caaf4e26",
+ "61d2586bfb7d43a406fc661d31806c85c96904b0",
[
null,
{}
@@ -679508,7 +680185,7 @@
]
],
"videoFrame-serialization.crossAgentCluster.https.html": [
- "5822cb8415e2202f39347793482216d1afe231b8",
+ "e07f61072dd41cdfa6280daaaf18239df43052d2",
[
null,
{}
@@ -705924,29 +706601,14 @@
]
],
"xhr-authorization-redirect.any.js": [
- "e9a4db44f7238117cab3027d5d88859f83fc63fc",
+ "beed7c31d70616cd66634b48b64ca8ae8eeeeee4",
[
"xhr/xhr-authorization-redirect.any.html",
{
"script_metadata": [
[
"global",
- "window,worker"
- ],
- [
- "script",
- "/common/get-host-info.sub.js"
- ]
- ]
- }
- ],
- [
- "xhr/xhr-authorization-redirect.any.serviceworker.html",
- {
- "script_metadata": [
- [
- "global",
- "window,worker"
+ "window,sharedworker,dedicatedworker"
],
[
"script",
@@ -705961,7 +706623,7 @@
"script_metadata": [
[
"global",
- "window,worker"
+ "window,sharedworker,dedicatedworker"
],
[
"script",
@@ -705976,7 +706638,7 @@
"script_metadata": [
[
"global",
- "window,worker"
+ "window,sharedworker,dedicatedworker"
],
[
"script",
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini
new file mode 100644
index 00000000000..0842d0b5727
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini
@@ -0,0 +1,3 @@
+[hit-test-floats-001.html]
+ [hit-test-floats-001]
+ 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
new file mode 100644
index 00000000000..3e5096beef3
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini
@@ -0,0 +1,3 @@
+[block-in-inline-hittest-float-002.html]
+ [block-in-inline-hittest-float-002]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.html.ini
index 8e44295440a..6c025f1c5e7 100644
--- a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.html.ini
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-computed.html.ini
@@ -40,3 +40,15 @@
[Property animation-delay-start value 'exit 1%, cover 2%, contain 100%']
expected: FAIL
+
+ [Property animation-delay-end value 'initial']
+ expected: FAIL
+
+ [Property animation-delay-end value '-500ms']
+ expected: FAIL
+
+ [Property animation-delay-end value 'calc(2 * 3s)']
+ expected: FAIL
+
+ [Property animation-delay-end value '20s, 10s']
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.html.ini
index 7d2dc54a87b..b4afe67f574 100644
--- a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.html.ini
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-end-valid.html.ini
@@ -37,3 +37,15 @@
[e.style['animation-delay-start'\] = "enter 42%" should set the property value]
expected: FAIL
+
+ [e.style['animation-delay-end'\] = "-5ms" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-delay-end'\] = "0s" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-delay-end'\] = "10s" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-delay-end'\] = "20s, 10s" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-range-end-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-range-end-computed.html.ini
new file mode 100644
index 00000000000..07a502f1be5
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-range-end-computed.html.ini
@@ -0,0 +1,36 @@
+[animation-range-end-computed.html]
+ [Property animation-range-end value 'initial']
+ expected: FAIL
+
+ [Property animation-range-end value 'auto']
+ expected: FAIL
+
+ [Property animation-range-end value 'cover 0%']
+ expected: FAIL
+
+ [Property animation-range-end value 'COVER 0%']
+ expected: FAIL
+
+ [Property animation-range-end value 'cover 100%']
+ expected: FAIL
+
+ [Property animation-range-end value 'cover 120%']
+ expected: FAIL
+
+ [Property animation-range-end value 'cover 42%']
+ expected: FAIL
+
+ [Property animation-range-end value 'cover -42%']
+ expected: FAIL
+
+ [Property animation-range-end value 'contain 42%']
+ expected: FAIL
+
+ [Property animation-range-end value 'exit 42%']
+ expected: FAIL
+
+ [Property animation-range-end value 'exit calc(41% + 1%)']
+ expected: FAIL
+
+ [Property animation-range-end value 'exit 1%, cover 2%, contain 100%']
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-range-end-valid.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-range-end-valid.html.ini
new file mode 100644
index 00000000000..92e90bdaed7
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-range-end-valid.html.ini
@@ -0,0 +1,30 @@
+[animation-range-end-valid.html]
+ [e.style['animation-range-end'\] = "auto" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "cover 0%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "cover 100%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "cover 120%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "cover 42%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "cover -42%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "contain 42%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "exit 42%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "exit 1%, cover 2%, contain 100%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-end'\] = "enter 42%" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-range-shorthand.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-range-shorthand.html.ini
new file mode 100644
index 00000000000..d27e95b749e
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-range-shorthand.html.ini
@@ -0,0 +1,90 @@
+[animation-range-shorthand.html]
+ [e.style['animation-range'\] = "cover" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "contain" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "exit" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter, exit" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 0% enter 100%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "exit 0% exit 100%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "cover 0% cover 100%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "contain 0% contain 100%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "cover 50%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "contain 50%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 50%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "exit 50%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 50% exit 50%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "cover 50% enter 50%, contain 50% exit 50%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "cover" should set animation-range-end]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "cover" should set animation-range-start]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "cover" should not set unrelated longhands]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "contain" should set animation-range-end]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "contain" should set animation-range-start]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "contain" should not set unrelated longhands]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 10% exit 20%" should set animation-range-end]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 10% exit 20%" should set animation-range-start]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 10% exit 20%" should not set unrelated longhands]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter, exit" should set animation-range-end]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter, exit" should set animation-range-start]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter, exit" should not set unrelated longhands]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 0%, exit" should set animation-range-end]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 0%, exit" should set animation-range-start]
+ expected: FAIL
+
+ [e.style['animation-range'\] = "enter 0%, exit" should not set unrelated longhands]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-range-start-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-range-start-computed.html.ini
new file mode 100644
index 00000000000..8a79e77b727
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-range-start-computed.html.ini
@@ -0,0 +1,36 @@
+[animation-range-start-computed.html]
+ [Property animation-range-start value 'initial']
+ expected: FAIL
+
+ [Property animation-range-start value 'auto']
+ expected: FAIL
+
+ [Property animation-range-start value 'cover 0%']
+ expected: FAIL
+
+ [Property animation-range-start value 'COVER 0%']
+ expected: FAIL
+
+ [Property animation-range-start value 'cover 100%']
+ expected: FAIL
+
+ [Property animation-range-start value 'cover 120%']
+ expected: FAIL
+
+ [Property animation-range-start value 'cover 42%']
+ expected: FAIL
+
+ [Property animation-range-start value 'cover -42%']
+ expected: FAIL
+
+ [Property animation-range-start value 'contain 42%']
+ expected: FAIL
+
+ [Property animation-range-start value 'exit 42%']
+ expected: FAIL
+
+ [Property animation-range-start value 'exit calc(41% + 1%)']
+ expected: FAIL
+
+ [Property animation-range-start value 'exit 1%, cover 2%, contain 100%']
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-range-start-valid.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-range-start-valid.html.ini
new file mode 100644
index 00000000000..5494d27d6af
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/parsing/animation-range-start-valid.html.ini
@@ -0,0 +1,30 @@
+[animation-range-start-valid.html]
+ [e.style['animation-range-start'\] = "auto" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "cover 0%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "cover 100%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "cover 120%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "cover 42%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "cover -42%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "contain 42%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "exit 42%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "exit 1%, cover 2%, contain 100%" should set the property value]
+ expected: FAIL
+
+ [e.style['animation-range-start'\] = "enter 42%" should set the property value]
+ 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-flexbox/hittest-before-pseudo.html.ini b/tests/wpt/metadata/css/css-flexbox/hittest-before-pseudo.html.ini
deleted file mode 100644
index 5b685485f3c..00000000000
--- a/tests/wpt/metadata/css/css-flexbox/hittest-before-pseudo.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[hittest-before-pseudo.html]
- [Hit-testing text within a pseudo-element flex-item should return the flexbox as the hittest result.]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/font-shorthand-subproperties-reset.html.ini b/tests/wpt/metadata/css/css-fonts/font-shorthand-subproperties-reset.html.ini
new file mode 100644
index 00000000000..94c6da92bc6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-fonts/font-shorthand-subproperties-reset.html.ini
@@ -0,0 +1,2 @@
+[font-shorthand-subproperties-reset.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 c8f6e89d8d7..14609d786d6 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
@@ -149,9 +149,6 @@
[Matching font-style: 'normal' should prefer 'normal' over 'oblique 0deg']
expected: FAIL
- [Matching font-style: 'oblique 0deg' should prefer 'oblique 0deg' over 'oblique 5deg']
- expected: FAIL
-
[Matching font-style: 'oblique -20deg' should prefer 'oblique -20deg' over 'oblique -60deg -40deg']
expected: FAIL
@@ -206,9 +203,6 @@
[Matching font-style: 'oblique 10deg' should prefer 'oblique 5deg' over 'oblique 15deg 20deg']
expected: FAIL
- [Matching font-weight: '500' should prefer '500' over '450 460']
- expected: FAIL
-
[Matching font-weight: '399' should prefer '400' over '450 460']
expected: FAIL
@@ -239,15 +233,9 @@
[Matching font-style: 'oblique -21deg' should prefer 'italic' over 'oblique 0deg']
expected: FAIL
- [Matching font-style: 'oblique 20deg' should prefer 'oblique 0deg' over 'oblique -50deg -20deg']
- expected: FAIL
-
[Matching font-style: 'oblique 10deg' should prefer 'oblique 40deg 50deg' over 'italic']
expected: FAIL
- [Matching font-style: 'oblique -20deg' should prefer 'italic' over 'oblique 0deg']
- expected: FAIL
-
[Matching font-style: 'normal' should prefer 'oblique 20deg 30deg' over 'oblique -50deg -20deg']
expected: FAIL
@@ -275,9 +263,6 @@
[Matching font-weight: '400' should prefer '351 398' over '501 550']
expected: FAIL
- [Matching font-weight: '430' should prefer '450 460' over '500']
- expected: FAIL
-
[Matching font-weight: '430' should prefer '400 425' over '350 399']
expected: FAIL
@@ -302,8 +287,26 @@
[Matching font-style: 'oblique 21deg' should prefer 'italic' over 'oblique 0deg']
expected: FAIL
- [Matching font-style: 'oblique -10deg' should prefer 'oblique -50deg -40deg' over 'italic']
+ [Matching font-stretch: '110%' should prefer '105%' over '100%']
expected: FAIL
- [Matching font-style: 'oblique -20deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg']
+ [Matching font-stretch: '90%' should prefer '90% 100%' over '50% 80%']
+ expected: FAIL
+
+ [Matching font-style: 'italic' should prefer 'oblique 40deg 50deg' over 'oblique 5deg 10deg']
+ expected: FAIL
+
+ [Matching font-style: 'italic' should prefer 'oblique 0deg' over 'oblique -60deg -30deg']
+ expected: FAIL
+
+ [Matching font-style: 'oblique 20deg' should prefer 'oblique 30deg 60deg' over 'oblique 40deg 50deg']
+ expected: FAIL
+
+ [Matching font-style: 'oblique 20deg' should prefer 'oblique 40deg 50deg' over 'oblique 10deg']
+ expected: FAIL
+
+ [Matching font-style: 'oblique 10deg' should prefer 'oblique 10deg' over 'oblique 5deg']
+ expected: FAIL
+
+ [Matching font-style: 'oblique 10deg' should prefer 'oblique 15deg 20deg' over 'oblique 30deg 60deg']
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-root-bg-002.html.ini b/tests/wpt/metadata/css/css-transforms/transform-root-bg-002.html.ini
deleted file mode 100644
index 440732f996d..00000000000
--- a/tests/wpt/metadata/css/css-transforms/transform-root-bg-002.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[transform-root-bg-002.html]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
index 3f9c5003739..4a1232b3c22 100644
--- a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
@@ -1,3 +1,6 @@
[transform-scale-hittest.html]
[Hit test intersecting scaled box]
expected: FAIL
+
+ [Hit test within unscaled box]
+ 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 daa399d64cd..dba439bf82a 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
@@ -325,3 +325,153 @@
[padding-bottom length(em) / values]
expected: FAIL
+
+ [color color(rgba) / values]
+ expected: FAIL
+
+ [font-size length(pt) / values]
+ expected: FAIL
+
+ [font-size length(pc) / values]
+ expected: FAIL
+
+ [font-size length(px) / values]
+ expected: FAIL
+
+ [font-size length(em) / values]
+ expected: FAIL
+
+ [font-size length(ex) / values]
+ expected: FAIL
+
+ [font-size length(mm) / values]
+ expected: FAIL
+
+ [font-size length(cm) / values]
+ expected: FAIL
+
+ [font-size length(in) / values]
+ expected: FAIL
+
+ [font-size percentage(%) / values]
+ expected: FAIL
+
+ [font-weight font-weight(keyword) / values]
+ expected: FAIL
+
+ [font-weight font-weight(numeric) / values]
+ expected: FAIL
+
+ [line-height number(integer) / values]
+ expected: FAIL
+
+ [line-height number(decimal) / values]
+ expected: FAIL
+
+ [line-height length(pt) / values]
+ expected: FAIL
+
+ [line-height length(pc) / values]
+ expected: FAIL
+
+ [line-height length(px) / values]
+ expected: FAIL
+
+ [line-height length(em) / values]
+ expected: FAIL
+
+ [line-height length(ex) / values]
+ expected: FAIL
+
+ [line-height length(mm) / values]
+ expected: FAIL
+
+ [line-height length(cm) / values]
+ expected: FAIL
+
+ [line-height length(in) / values]
+ expected: FAIL
+
+ [line-height percentage(%) / values]
+ expected: FAIL
+
+ [letter-spacing length(pt) / values]
+ expected: FAIL
+
+ [letter-spacing length(pc) / values]
+ expected: FAIL
+
+ [letter-spacing length(px) / values]
+ expected: FAIL
+
+ [letter-spacing length(em) / values]
+ expected: FAIL
+
+ [letter-spacing length(ex) / values]
+ expected: FAIL
+
+ [letter-spacing length(mm) / values]
+ expected: FAIL
+
+ [letter-spacing length(cm) / values]
+ expected: FAIL
+
+ [letter-spacing length(in) / values]
+ expected: FAIL
+
+ [word-spacing length(pt) / values]
+ expected: FAIL
+
+ [word-spacing length(pc) / values]
+ expected: FAIL
+
+ [word-spacing length(px) / values]
+ expected: FAIL
+
+ [word-spacing length(em) / values]
+ expected: FAIL
+
+ [word-spacing length(ex) / values]
+ expected: FAIL
+
+ [word-spacing length(mm) / values]
+ expected: FAIL
+
+ [word-spacing length(cm) / values]
+ expected: FAIL
+
+ [word-spacing length(in) / values]
+ expected: FAIL
+
+ [word-spacing percentage(%) / values]
+ expected: FAIL
+
+ [text-indent length(pt) / values]
+ expected: FAIL
+
+ [text-indent length(pc) / values]
+ expected: FAIL
+
+ [text-indent length(px) / values]
+ expected: FAIL
+
+ [text-indent length(em) / values]
+ expected: FAIL
+
+ [text-indent length(ex) / values]
+ expected: FAIL
+
+ [text-indent length(mm) / values]
+ expected: FAIL
+
+ [text-indent length(cm) / values]
+ expected: FAIL
+
+ [text-indent length(in) / values]
+ expected: FAIL
+
+ [text-indent percentage(%) / values]
+ expected: FAIL
+
+ [text-shadow shadow(shadow) / 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 b0fdc6ab5f2..31367206c0d 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
@@ -56,129 +56,6 @@
[background-position length(px) / events]
expected: FAIL
- [background-color color(rgba) / events]
- expected: FAIL
-
- [border-top-width length(pt) / events]
- expected: FAIL
-
- [border-top-width length(pc) / events]
- expected: FAIL
-
- [border-top-width length(px) / events]
- expected: FAIL
-
- [border-top-width length(em) / events]
- expected: FAIL
-
- [border-top-width length(ex) / events]
- expected: FAIL
-
- [border-top-width length(mm) / events]
- expected: FAIL
-
- [border-top-width length(cm) / events]
- expected: FAIL
-
- [border-top-width length(in) / events]
- expected: FAIL
-
- [border-right-width length(pt) / events]
- expected: FAIL
-
- [border-right-width length(pc) / events]
- expected: FAIL
-
- [border-right-width length(px) / events]
- expected: FAIL
-
- [border-right-width length(em) / events]
- expected: FAIL
-
- [border-right-width length(ex) / events]
- expected: FAIL
-
- [border-right-width length(mm) / events]
- expected: FAIL
-
- [border-right-width length(cm) / events]
- expected: FAIL
-
- [border-right-width length(in) / events]
- expected: FAIL
-
- [border-bottom-width length(pt) / events]
- expected: FAIL
-
- [border-bottom-width length(pc) / events]
- expected: FAIL
-
- [border-bottom-width length(px) / events]
- expected: FAIL
-
- [border-bottom-width length(em) / events]
- expected: FAIL
-
- [border-bottom-width length(ex) / events]
- expected: FAIL
-
- [border-bottom-width length(mm) / events]
- expected: FAIL
-
- [border-bottom-width length(cm) / events]
- expected: FAIL
-
- [border-bottom-width length(in) / events]
- expected: FAIL
-
- [border-left-width length(pt) / events]
- expected: FAIL
-
- [border-left-width length(pc) / events]
- expected: FAIL
-
- [border-left-width length(px) / events]
- expected: FAIL
-
- [border-left-width length(em) / events]
- expected: FAIL
-
- [border-left-width length(ex) / events]
- expected: FAIL
-
- [border-left-width length(mm) / events]
- expected: FAIL
-
- [border-left-width length(cm) / events]
- expected: FAIL
-
- [border-left-width length(in) / events]
- expected: FAIL
-
- [border-top-color color(rgba) / events]
- expected: FAIL
-
- [border-right-color color(rgba) / events]
- expected: FAIL
-
- [border-bottom-color color(rgba) / events]
- expected: FAIL
-
- [border-left-color color(rgba) / events]
- expected: FAIL
-
- [padding-bottom length(pt) / events]
- expected: FAIL
-
- [padding-bottom length(pc) / events]
- expected: FAIL
-
- [padding-bottom length(px) / events]
- expected: FAIL
-
- [padding-bottom length(em) / events]
- expected: FAIL
-
[padding-bottom length(ex) / events]
expected: FAIL
@@ -329,156 +206,6 @@
[margin-right length(mm) / events]
expected: FAIL
- [margin-right length(cm) / events]
- expected: FAIL
-
- [margin-right length(in) / events]
- expected: FAIL
-
- [margin-top length(pt) / events]
- expected: FAIL
-
- [margin-top length(pc) / events]
- expected: FAIL
-
- [margin-top length(px) / events]
- expected: FAIL
-
- [margin-top length(em) / events]
- expected: FAIL
-
- [margin-top length(ex) / events]
- expected: FAIL
-
- [margin-top length(mm) / events]
- expected: FAIL
-
- [margin-top length(cm) / events]
- expected: FAIL
-
- [margin-top length(in) / events]
- expected: FAIL
-
- [height length(pt) / events]
- expected: FAIL
-
- [height length(pc) / events]
- expected: FAIL
-
- [height length(px) / events]
- expected: FAIL
-
- [height length(em) / events]
- expected: FAIL
-
- [height length(ex) / events]
- expected: FAIL
-
- [height length(mm) / events]
- expected: FAIL
-
- [height length(cm) / events]
- expected: FAIL
-
- [height length(in) / events]
- expected: FAIL
-
- [height percentage(%) / events]
- expected: FAIL
-
- [width length(pt) / events]
- expected: FAIL
-
- [width length(pc) / events]
- expected: FAIL
-
- [width length(px) / events]
- expected: FAIL
-
- [width length(em) / events]
- expected: FAIL
-
- [width length(ex) / events]
- expected: FAIL
-
- [width length(mm) / events]
- expected: FAIL
-
- [width length(cm) / events]
- expected: FAIL
-
- [width length(in) / events]
- expected: FAIL
-
- [width percentage(%) / events]
- expected: FAIL
-
- [min-height length(pt) / events]
- expected: FAIL
-
- [min-height length(pc) / events]
- expected: FAIL
-
- [min-height length(px) / events]
- expected: FAIL
-
- [min-height length(em) / events]
- expected: FAIL
-
- [min-height length(ex) / events]
- expected: FAIL
-
- [min-height length(mm) / events]
- expected: FAIL
-
- [min-height length(cm) / events]
- expected: FAIL
-
- [min-height length(in) / events]
- expected: FAIL
-
- [min-height percentage(%) / events]
- expected: FAIL
-
- [min-width length(pt) / events]
- expected: FAIL
-
- [min-width length(pc) / events]
- expected: FAIL
-
- [min-width length(px) / events]
- expected: FAIL
-
- [min-width length(em) / events]
- expected: FAIL
-
- [min-width length(ex) / events]
- expected: FAIL
-
- [min-width length(mm) / events]
- expected: FAIL
-
- [min-width length(cm) / events]
- expected: FAIL
-
- [min-width length(in) / events]
- expected: FAIL
-
- [min-width percentage(%) / events]
- expected: FAIL
-
- [max-height length(pt) / events]
- expected: FAIL
-
- [max-height length(pc) / events]
- expected: FAIL
-
- [max-height length(px) / events]
- expected: FAIL
-
- [max-height length(em) / events]
- expected: FAIL
-
[color color(rgba) / events]
expected: FAIL
@@ -628,153 +355,3 @@
[text-shadow shadow(shadow) / events]
expected: FAIL
-
- [max-height length(ex) / events]
- expected: FAIL
-
- [max-height length(mm) / events]
- expected: FAIL
-
- [max-height length(cm) / events]
- expected: FAIL
-
- [max-height length(in) / events]
- expected: FAIL
-
- [max-height percentage(%) / events]
- expected: FAIL
-
- [max-width length(pt) / events]
- expected: FAIL
-
- [max-width length(pc) / events]
- expected: FAIL
-
- [max-width length(px) / events]
- expected: FAIL
-
- [max-width length(em) / events]
- expected: FAIL
-
- [max-width length(ex) / events]
- expected: FAIL
-
- [max-width length(mm) / events]
- expected: FAIL
-
- [max-width length(cm) / events]
- expected: FAIL
-
- [max-width length(in) / events]
- expected: FAIL
-
- [max-width percentage(%) / events]
- expected: FAIL
-
- [top length(pt) / events]
- expected: FAIL
-
- [top length(pc) / events]
- expected: FAIL
-
- [top length(px) / events]
- expected: FAIL
-
- [top length(em) / events]
- expected: FAIL
-
- [top length(ex) / events]
- expected: FAIL
-
- [top length(mm) / events]
- expected: FAIL
-
- [top length(cm) / events]
- expected: FAIL
-
- [top length(in) / events]
- expected: FAIL
-
- [top percentage(%) / events]
- expected: FAIL
-
- [right length(pt) / events]
- expected: FAIL
-
- [right length(pc) / events]
- expected: FAIL
-
- [right length(px) / events]
- expected: FAIL
-
- [right length(em) / events]
- expected: FAIL
-
- [right length(ex) / events]
- expected: FAIL
-
- [right length(mm) / events]
- expected: FAIL
-
- [right length(cm) / events]
- expected: FAIL
-
- [right length(in) / events]
- expected: FAIL
-
- [right percentage(%) / events]
- expected: FAIL
-
- [bottom length(pt) / events]
- expected: FAIL
-
- [bottom length(pc) / events]
- expected: FAIL
-
- [bottom length(px) / events]
- expected: FAIL
-
- [bottom length(em) / events]
- expected: FAIL
-
- [bottom length(ex) / events]
- expected: FAIL
-
- [bottom length(mm) / events]
- expected: FAIL
-
- [bottom length(cm) / events]
- expected: FAIL
-
- [bottom length(in) / events]
- expected: FAIL
-
- [bottom percentage(%) / events]
- expected: FAIL
-
- [left length(pt) / events]
- expected: FAIL
-
- [left length(pc) / events]
- expected: FAIL
-
- [left length(px) / events]
- expected: FAIL
-
- [left length(em) / events]
- expected: FAIL
-
- [left length(ex) / events]
- expected: FAIL
-
- [left length(mm) / events]
- expected: FAIL
-
- [left length(cm) / events]
- expected: FAIL
-
- [left length(in) / events]
- expected: FAIL
-
- [left percentage(%) / events]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
index d316d0d03ec..242ba44bbca 100644
--- a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
@@ -52,126 +52,3 @@
[background-position length(px) / events]
expected: FAIL
-
- [background-color color(rgba) / values]
- expected: FAIL
-
- [border-top-width length(pt) / values]
- expected: FAIL
-
- [border-top-width length(pc) / values]
- expected: FAIL
-
- [border-top-width length(px) / values]
- expected: FAIL
-
- [border-top-width length(em) / values]
- expected: FAIL
-
- [border-top-width length(ex) / values]
- expected: FAIL
-
- [border-top-width length(mm) / values]
- expected: FAIL
-
- [border-top-width length(cm) / values]
- expected: FAIL
-
- [border-top-width length(in) / values]
- expected: FAIL
-
- [border-right-width length(pt) / values]
- expected: FAIL
-
- [border-right-width length(pc) / values]
- expected: FAIL
-
- [border-right-width length(px) / values]
- expected: FAIL
-
- [border-right-width length(em) / values]
- expected: FAIL
-
- [border-right-width length(ex) / values]
- expected: FAIL
-
- [border-right-width length(mm) / values]
- expected: FAIL
-
- [border-right-width length(cm) / values]
- expected: FAIL
-
- [border-right-width length(in) / values]
- expected: FAIL
-
- [border-bottom-width length(pt) / values]
- expected: FAIL
-
- [border-bottom-width length(pc) / values]
- expected: FAIL
-
- [border-bottom-width length(px) / values]
- expected: FAIL
-
- [border-bottom-width length(em) / values]
- expected: FAIL
-
- [border-bottom-width length(ex) / values]
- expected: FAIL
-
- [border-bottom-width length(mm) / values]
- expected: FAIL
-
- [border-bottom-width length(cm) / values]
- expected: FAIL
-
- [border-bottom-width length(in) / values]
- expected: FAIL
-
- [border-left-width length(pt) / values]
- expected: FAIL
-
- [border-left-width length(pc) / values]
- expected: FAIL
-
- [border-left-width length(px) / values]
- expected: FAIL
-
- [border-left-width length(em) / values]
- expected: FAIL
-
- [border-left-width length(ex) / values]
- expected: FAIL
-
- [border-left-width length(mm) / values]
- expected: FAIL
-
- [border-left-width length(cm) / values]
- expected: FAIL
-
- [border-left-width length(in) / values]
- expected: FAIL
-
- [border-top-color color(rgba) / values]
- expected: FAIL
-
- [border-right-color color(rgba) / values]
- expected: FAIL
-
- [border-bottom-color color(rgba) / values]
- expected: FAIL
-
- [border-left-color color(rgba) / values]
- expected: FAIL
-
- [padding-bottom length(pt) / values]
- expected: FAIL
-
- [padding-bottom length(pc) / values]
- expected: FAIL
-
- [padding-bottom length(px) / values]
- expected: FAIL
-
- [padding-bottom length(em) / values]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-values/ch-unit-018.html.ini b/tests/wpt/metadata/css/css-values/ch-unit-018.html.ini
new file mode 100644
index 00000000000..7de18ccaf61
--- /dev/null
+++ b/tests/wpt/metadata/css/css-values/ch-unit-018.html.ini
@@ -0,0 +1,2 @@
+[ch-unit-018.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-values/ic-unit-015.html.ini b/tests/wpt/metadata/css/css-values/ic-unit-015.html.ini
new file mode 100644
index 00000000000..7f4ecb1646a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-values/ic-unit-015.html.ini
@@ -0,0 +1,2 @@
+[ic-unit-015.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini
deleted file mode 100644
index 7e9331b6bc2..00000000000
--- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-float-in-relative.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[elementFromPoint-float-in-relative.html]
- [elementFromPoint-float-in-relative]
- 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 8ae9bae3500..d113fc3fbba 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
@@ -13,3 +13,12 @@
[
Outside 3]
expected: FAIL
+
+ [Inside 3]
+ expected: FAIL
+
+ [Image Inside 1]
+ expected: FAIL
+
+ [Image Inside 2]
+ 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
new file mode 100644
index 00000000000..a6bca7ac372
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini
@@ -0,0 +1,3 @@
+[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 ceb43099040..57cbb5a4948 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
@@ -17,3 +17,6 @@
[test some point of the element: bottom right corner]
expected: FAIL
+
+ [test some point of the element: top left corner]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
new file mode 100644
index 00000000000..a3496a40d07
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
@@ -0,0 +1,3 @@
+[elementsFromPoint-invalid-cases.html]
+ [The root element is the last element returned for otherwise empty queries within the viewport]
+ 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 dbe03dd880c..3285a4f15ac 100644
--- a/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini
@@ -76,9 +76,3 @@
[Input: "Content-Length: ". Expected: 42.]
expected: FAIL
-
- [Input: "Content-Length: 42,42". Expected: 42.]
- expected: FAIL
-
- [Input: "Content-Length: 42\\r\\nContent-Length: 42,42". Expected: 42.]
- expected: FAIL
diff --git a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
index 36a410bfecb..f9de5391ad6 100644
--- a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
+++ b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini
@@ -146,6 +146,3 @@
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
expected: FAIL
-
- [border-image sec-fetch-site - HTTPS downgrade (header not sent)]
- expected: FAIL
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index ba47e36f3af..736ff6130a5 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -7,6 +7,3 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
-
- [X-Content-Type-Options%3A%20%2Cnosniff]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/failure-check-sequence.https.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/failure-check-sequence.https.html.ini
index 1d68034a37d..ab9ac6e835e 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/failure-check-sequence.https.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/failure-check-sequence.https.html.ini
@@ -1,12 +1,13 @@
[failure-check-sequence.https.html]
+ expected: TIMEOUT
[CSP check precedes COEP check - CSP header first]
- expected: FAIL
+ expected: NOTRUN
[COEP check precedes X-Frame-Options check]
- expected: FAIL
+ expected: NOTRUN
[CSP check precedes COEP check - COEP header first]
- expected: FAIL
+ expected: NOTRUN
[CSP check precedes X-Frame-Options check]
- expected: FAIL
+ expected: TIMEOUT
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..9eb22957864 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,7 @@
[navigate-to-unparseable-url.html]
+ expected: TIMEOUT
[location.href setter throws a SyntaxError DOMException for unparseable URLs]
- expected: FAIL
+ expected: TIMEOUT
[ tag navigate fails for unparseable URLs]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
deleted file mode 100644
index 7dc346632a4..00000000000
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[navigation-unload-same-origin.window.html]
- [Same-origin navigation started from unload handler must be ignored]
- 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
deleted file mode 100644
index 60a4fa51f8a..00000000000
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[a-click.html]
- [aElement.click() before the load event must NOT replace]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
new file mode 100644
index 00000000000..d6188c03424
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
@@ -0,0 +1,3 @@
+[traverse_the_history_4.html]
+ [Multiple history traversals, last would be aborted]
+ 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/open-close/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini
deleted file mode 100644
index 4b4820d1729..00000000000
--- a/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[creating_browsing_context_test_01.html]
- [first argument: absolute url]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/manual/image-smoothing/imagesmoothing.html.ini b/tests/wpt/metadata/html/canvas/element/manual/image-smoothing/imagesmoothing.html.ini
new file mode 100644
index 00000000000..6298c4a8174
--- /dev/null
+++ b/tests/wpt/metadata/html/canvas/element/manual/image-smoothing/imagesmoothing.html.ini
@@ -0,0 +1,6 @@
+[imagesmoothing.html]
+ [Test that imageSmoothingEnabled = false (nearest-neighbor interpolation) works with fillRect and createPattern().]
+ expected: FAIL
+
+ [Test that imageSmoothingEnabled = false (nearest-neighbor interpolation) works with stroke() and createPattern().]
+ 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 25d9964f057..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,4 +1,5 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 6f7461b9472..f9138fb999a 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,4 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-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 d5fd800f09d..ff6467094b8 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,4 +1,3 @@
[iframe_sandbox_popups_nonescaping-3.html]
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini
index 579350c53fe..fcb728e0f9b 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/urlencoded2.window.js.ini
@@ -175,3 +175,6 @@
[application/x-www-form-urlencoded: backslash in value (normal form)]
expected: FAIL
+
+ [application/x-www-form-urlencoded: single quote in name (normal form)]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/textfieldselection/select-event.html.ini b/tests/wpt/metadata/html/semantics/forms/textfieldselection/select-event.html.ini
new file mode 100644
index 00000000000..451846f45f4
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/forms/textfieldselection/select-event.html.ini
@@ -0,0 +1,3 @@
+[select-event.html]
+ [input type password: setRangeText() event queue]
+ 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 73807cb3cc1..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
@@ -1,6 +1,5 @@
[htmlanchorelement_noopener.html]
type: testharness
- expected: TIMEOUT
[Check that targeting of rel=noopener with a given name ignores an existing window with that name]
expected: NOTRUN
@@ -14,4 +13,4 @@
expected: FAIL
[Check that rel=noopener with target=_self does a normal load]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
index 8845054116d..e55f8f2ce3c 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
@@ -3,3 +3,6 @@
expected: TIMEOUT
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT
+
+ [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
index dbe1def99e3..7237f5792de 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini
@@ -1,9 +1,10 @@
[promise-job-entry-different-function-realm.html]
+ expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
- expected: FAIL
+ expected: TIMEOUT
[Thenable resolution]
expected: FAIL
@@ -12,4 +13,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/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 8bcf3a07de4..31bfd644df0 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,10 +1,9 @@
[promise-job-entry.html]
- expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
- expected: TIMEOUT
+ expected: FAIL
[Sanity check: this all works as expected with no promises involved]
expected: FAIL
@@ -16,4 +15,4 @@
expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.dedicatedworker.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.dedicatedworker.html.ini
index 0c232fa74a6..9d6cc1c43db 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.dedicatedworker.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.dedicatedworker.html.ini
@@ -1,6 +1,5 @@
[promise-rejection-events.dedicatedworker.html]
type: testharness
- expected: TIMEOUT
[microtask nesting: attaching a handler inside a combination of mutationObserverMicrotask + promise microtasks, all inside a postMessageTask]
expected: FAIL
@@ -17,7 +16,7 @@
expected: FAIL
[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/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 e3d3c3916cf..d8855aa5584 100644
--- a/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini
+++ b/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini
@@ -10,16 +10,16 @@
expected: FAIL
[content-type 3 : text/plain;charset=gbk,text/html]
- expected: TIMEOUT
+ expected: FAIL
[content-type 4 : text/plain;charset=gbk,text/html;charset=windows-1254]
- expected: NOTRUN
+ expected: FAIL
[content-type 5 : text/plain;charset=gbk,text/plain]
- expected: NOTRUN
+ expected: FAIL
[content-type 6 : text/plain;charset=gbk,text/plain;charset=windows-1252]
- expected: NOTRUN
+ expected: TIMEOUT
[content-type 7 : text/html;charset=gbk,text/html;x=",text/plain]
expected: NOTRUN
diff --git a/tests/wpt/metadata/resource-timing/interim-response-times.h2.html.ini b/tests/wpt/metadata/resource-timing/interim-response-times.h2.html.ini
new file mode 100644
index 00000000000..249721963bd
--- /dev/null
+++ b/tests/wpt/metadata/resource-timing/interim-response-times.h2.html.ini
@@ -0,0 +1,15 @@
+[interim-response-times.h2.html]
+ [Fetch from same-origin with early hints, without Timing-Allow-Origin should expose interim response times]
+ expected: FAIL
+
+ [Fetch from cross-origin with early hints, with Timing-Allow-Origin should expose interim response times]
+ expected: FAIL
+
+ [Fetch from cross-origin with early hints, without Timing-Allow-Origin should not expose interim response times]
+ expected: FAIL
+
+ [Fetch from same-origin without early hints, without Timing-Allow-Origin should not expose interim response times]
+ expected: FAIL
+
+ [Fetch from cross-origin without early hints, with Timing-Allow-Origin should not expose interim response times]
+ expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/interim-response-times.html.ini b/tests/wpt/metadata/resource-timing/interim-response-times.html.ini
new file mode 100644
index 00000000000..efec5faa42f
--- /dev/null
+++ b/tests/wpt/metadata/resource-timing/interim-response-times.html.ini
@@ -0,0 +1,15 @@
+[interim-response-times.html]
+ [Fetch from same-origin with early hints, without Timing-Allow-Origin should expose interim response times]
+ expected: FAIL
+
+ [Fetch from cross-origin with early hints, with Timing-Allow-Origin should expose interim response times]
+ expected: FAIL
+
+ [Fetch from cross-origin with early hints, without Timing-Allow-Origin should not expose interim response times]
+ expected: FAIL
+
+ [Fetch from same-origin without early hints, without Timing-Allow-Origin should not expose interim response times]
+ expected: FAIL
+
+ [Fetch from cross-origin without early hints, with Timing-Allow-Origin should not expose interim response times]
+ expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-sinkid-setsinkid.https.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-sinkid-setsinkid.https.html.ini
index ce022303d4f..f3aa918dcbe 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-sinkid-setsinkid.https.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-sinkid-setsinkid.https.html.ini
@@ -20,3 +20,6 @@
[setSinkId() should fail with InvalidStateError when calling from adetached document]
expected: NOTRUN
+
+ [pending setSinkId() should be rejected with InvalidStateError whenAudioContext is closed]
+ expected: NOTRUN
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
new file mode 100644
index 00000000000..aa6c9e5b826
--- /dev/null
+++ b/tests/wpt/metadata/webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.tentative.html.ini
@@ -0,0 +1,4 @@
+[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/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
index 9b715377e1a..bbfb36bc188 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
@@ -1,3 +1,4 @@
[sharedworker-in-worker.html]
+ expected: ERROR
[Base URL in workers: new SharedWorker()]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini b/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini
new file mode 100644
index 00000000000..77ca6b0688d
--- /dev/null
+++ b/tests/wpt/mozilla/meta/css/stylesheet_media_queries.html.ini
@@ -0,0 +1,3 @@
+[stylesheet_media_queries.html]
+ [Media queries within stylesheets]
+ expected: FAIL
diff --git a/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini b/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini
deleted file mode 100644
index f78f699f620..00000000000
--- a/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[scrollBy.html]
- [Ensure that the window.scrollBy function affects scroll position as expected]
- expected: FAIL
diff --git a/tests/wpt/web-platform-tests/IndexedDB/back-forward-cache-open-transaction.window.js b/tests/wpt/web-platform-tests/IndexedDB/back-forward-cache-open-transaction.window.js
new file mode 100644
index 00000000000..41d70d597c7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/IndexedDB/back-forward-cache-open-transaction.window.js
@@ -0,0 +1,36 @@
+// META: title=BFCache support test for page with open IndexedDB transaction
+// META: script=/common/dispatcher/dispatcher.js
+// META: script=/common/utils.js
+// META: script=/html/browsers/browsing-the-web/back-forward-cache/resources/rc-helper.js
+// META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js
+
+'use strict';
+
+promise_test(async t => {
+ const rcHelper = new RemoteContextHelper();
+
+ // Open a window with noopener so that BFCache will work.
+ const rc1 = await rcHelper.addWindow(
+ /*config=*/ null, /*options=*/ {features: 'noopener'});
+
+ await rc1.executeScript(() => {
+ // Create an IndexedDB database and the object store named `store` as the
+ // test scope for the transaction later on.
+ const db = indexedDB.open(/*name=*/ 'test_idb', /*version=*/ 1);
+ db.onupgradeneeded = () => {
+ db.result.createObjectStore('store');
+ };
+ addEventListener('pagehide', () => {
+ let transaction = db.result.transaction(['store'], 'readwrite');
+ let store = transaction.objectStore('store');
+ store.put("key", "value");
+
+ // Queue a request to close the connection, while keeping the transaction
+ // open, so that the BFCache eligibility will be determined solely by the
+ // pending transaction.
+ db.result.close();
+ });
+ });
+
+ await assertBFCache(rc1, /*shouldRestoreFromBFCache=*/ true);
+});
diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/encrypt_decrypt/aes_gcm_vectors.js b/tests/wpt/web-platform-tests/WebCryptoAPI/encrypt_decrypt/aes_gcm_vectors.js
index 72566ded62f..bc406f8f0ef 100644
--- a/tests/wpt/web-platform-tests/WebCryptoAPI/encrypt_decrypt/aes_gcm_vectors.js
+++ b/tests/wpt/web-platform-tests/WebCryptoAPI/encrypt_decrypt/aes_gcm_vectors.js
@@ -246,7 +246,7 @@ function getTestVectors() {
var failing = [];
keyLengths.forEach(function(keyLength) {
// First, make some tests for bad tag lengths
- [24, 48, 72, 95, 129, 256].forEach(function(badTagLength) {
+ [24, 48, 72, 95, 129].forEach(function(badTagLength) {
failing.push({
name: "AES-GCM " + keyLength.toString() + "-bit key, illegal tag length " + badTagLength.toString() + "-bits",
keyBuffer: keyBytes[keyLength],
diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/util/helpers.js b/tests/wpt/web-platform-tests/WebCryptoAPI/util/helpers.js
index 8874f731f8b..ee9d09d1251 100644
--- a/tests/wpt/web-platform-tests/WebCryptoAPI/util/helpers.js
+++ b/tests/wpt/web-platform-tests/WebCryptoAPI/util/helpers.js
@@ -160,6 +160,7 @@ function assert_goodCryptoKey(key, algorithm, extractable, usages, kind) {
assert_in_array(usage, correctUsages, "Has " + usage + " usage");
});
assert_equals(key.usages.length, usageCount, "usages property is correct");
+ assert_equals(key[Symbol.toStringTag], 'CryptoKey', "has the expected Symbol.toStringTag");
}
diff --git a/tests/wpt/web-platform-tests/cookies/resources/cookie-helper.sub.js b/tests/wpt/web-platform-tests/cookies/resources/cookie-helper.sub.js
index 1420779e0d5..ff33ecb6bd2 100644
--- a/tests/wpt/web-platform-tests/cookies/resources/cookie-helper.sub.js
+++ b/tests/wpt/web-platform-tests/cookies/resources/cookie-helper.sub.js
@@ -41,11 +41,16 @@ function navigateTo(origin, url) {
return origin + "/cookies/resources/navigate.html?location=" + encodeURIComponent(url);
}
+// Returns whether a cookie with name `name` with value `value` is in the cookie
+// string (presumably obtained via document.cookie).
+function cookieStringHasCookie(name, value, cookieString) {
+ return new RegExp(`(?:^|; )${name}=${value}(?:$|;)`).test(cookieString);
+}
+
// Asserts that `document.cookie` contains or does not contain (according to
// the value of |present|) a cookie named |name| with a value of |value|.
function assert_dom_cookie(name, value, present) {
- var re = new RegExp("(?:^|; )" + name + "=" + value + "(?:$|;)");
- assert_equals(re.test(document.cookie), present, "`" + name + "=" + value + "` in `document.cookie`");
+ assert_equals(cookieStringHasCookie(name, value, document.cookie), present, "`" + name + "=" + value + "` in `document.cookie`");
}
function assert_cookie(origin, obj, name, value, present) {
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-computed.html
index bfb89d0267f..77f96706383 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-computed.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-computed.html
@@ -1,12 +1,12 @@
-
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-invalid.html
index bff31f3789a..7cabd4e8e54 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-invalid.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-invalid.html
@@ -1,29 +1,29 @@
-
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-valid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-valid.html
index 22ab9fe3b73..162c781bb01 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-end-valid.html
@@ -1,26 +1,11 @@
-
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-shorthand.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-shorthand.html
index f09f0a948ca..5c74a4d8e43 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-shorthand.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-shorthand.html
@@ -5,10 +5,7 @@
-
-
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-valid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-valid.html
index 22ab9fe3b73..f52286444ed 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-valid.html
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-delay-start-valid.html
@@ -8,19 +8,4 @@ test_valid_value("animation-delay-start", "-5ms");
test_valid_value("animation-delay-start", "0s");
test_valid_value("animation-delay-start", "10s");
test_valid_value("animation-delay-start", "20s, 10s");
-
-// https://drafts.csswg.org/scroll-animations-1/#view-timelines-ranges
-test_valid_value("animation-delay-start", "cover 0%");
-test_valid_value("animation-delay-start", "cover 100%");
-test_valid_value("animation-delay-start", "cover 120%");
-test_valid_value("animation-delay-start", "cover 42%");
-test_valid_value("animation-delay-start", "cover -42%");
-test_valid_value("animation-delay-start", "contain 42%");
-test_valid_value("animation-delay-start", "exit 42%");
-test_valid_value("animation-delay-start", "exit 1%, cover 2%, contain 100%");
-
-// There's an open issue in the spec about "enter" vs "entry".
-//
-// https://drafts.csswg.org/scroll-animations-1/#valdef-animation-timeline-range-entry
-test_valid_value("animation-delay-start", "enter 42%");
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-computed.html
new file mode 100644
index 00000000000..ff30fbfc3fb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-computed.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-invalid.html
new file mode 100644
index 00000000000..c1f2800feee
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-invalid.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-valid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-valid.html
new file mode 100644
index 00000000000..b2aee359adc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-end-valid.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-shorthand.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-shorthand.html
new file mode 100644
index 00000000000..dcccc2fc4db
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-shorthand.html
@@ -0,0 +1,74 @@
+
+animation-range shorthand
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-computed.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-computed.html
new file mode 100644
index 00000000000..e2d9498f41c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-computed.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-invalid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-invalid.html
new file mode 100644
index 00000000000..b2eaecc293a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-invalid.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-valid.html b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-valid.html
new file mode 100644
index 00000000000..1aea7e15729
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/parsing/animation-range-start-valid.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-001.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-001.html
index 516a90cf652..e31abec3678 100644
--- a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-001.html
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-001.html
@@ -1,7 +1,7 @@
-CSS margin-trim: block trim 001
+margin-trim: block-container-block-001
@@ -9,7 +9,7 @@
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-002.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-002.html
index 1f86d555bf7..399141b17e4 100644
--- a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-002.html
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-002.html
@@ -1,7 +1,7 @@
-CSS margin-trim: block trim 002
+margin-trim: block-container-block-002
@@ -9,7 +9,7 @@
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-end-002.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-end-002.html
index 2859e104685..42d559fbe92 100644
--- a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-end-002.html
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-end-002.html
@@ -1,14 +1,14 @@
-CSS margin-trim: block end trim 002
+margin-trim: block-container-block-end-002
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-start-001.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-start-001.html
index 2fecf07e644..c33c7f0abe5 100644
--- a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-start-001.html
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-block-start-001.html
@@ -1,7 +1,7 @@
-CSS margin-trim: block start trim 001
+margin-trim: block-container-block-start-001
@@ -9,7 +9,7 @@
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-non-adjoining-item-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-non-adjoining-item-ref.html
new file mode 100644
index 00000000000..4affb87f11b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-non-adjoining-item-ref.html
@@ -0,0 +1,28 @@
+
+
+
+margin-trim: block-container-non-adjoining-item
+
+
+
+
+
+
+
+This text should be 100px below the green square.
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-non-adjoining-item.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-non-adjoining-item.html
new file mode 100644
index 00000000000..215175418b8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-non-adjoining-item.html
@@ -0,0 +1,32 @@
+
+
+
+margin-trim: block-container-non-adjoining-item
+
+
+
+
+
+
+
+
+This text should be 100px below the green square.
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-replaced-block-end.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-replaced-block-end.html
index 6011d10de53..0225460b7b7 100644
--- a/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-replaced-block-end.html
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/block-container-replaced-block-end.html
@@ -1,14 +1,14 @@
-CSS margin-trim: block container replaced block-end trim
+margin-trim: block-container-replaced-block-end
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-end-trimmed-only.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-end-trimmed-only.html
new file mode 100644
index 00000000000..0a99b3f308b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-end-trimmed-only.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-block-end-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-start-trimmed-only-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-start-trimmed-only-ref.html
new file mode 100644
index 00000000000..58a7e5ba31f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-start-trimmed-only-ref.html
@@ -0,0 +1,31 @@
+
+
+
+margin-trim: flex-block-start-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-start-trimmed-only.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-start-trimmed-only.html
new file mode 100644
index 00000000000..5e867ea43d1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-start-trimmed-only.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-block-start-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-trimmed-only-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-trimmed-only-ref.html
new file mode 100644
index 00000000000..f4cf4fec863
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-trimmed-only-ref.html
@@ -0,0 +1,30 @@
+
+
+
+margin-trim: flex-block-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-trimmed-only.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-trimmed-only.html
new file mode 100644
index 00000000000..e7304828251
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-block-trimmed-only.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-block-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-block-multiline.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-block-multiline.html
new file mode 100644
index 00000000000..6536d7f00df
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-block-multiline.html
@@ -0,0 +1,41 @@
+
+
+
+margin-trim: flex-column-block-multiline
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-grow.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-grow.html
new file mode 100644
index 00000000000..62c55b2bfff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-grow.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-column-grow
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-inline-multiline-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-inline-multiline-ref.html
new file mode 100644
index 00000000000..c4b36a91b7b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-inline-multiline-ref.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-column-inline-multiline
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-inline-multiline.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-inline-multiline.html
new file mode 100644
index 00000000000..25003aab08e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-inline-multiline.html
@@ -0,0 +1,36 @@
+
+
+
+margin-trim: flex-column-inline-multiline
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-orthogonal-item.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-orthogonal-item.html
new file mode 100644
index 00000000000..9f13e2ce71c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-orthogonal-item.html
@@ -0,0 +1,39 @@
+
+
+
+margin-trim: flex-column-orthogonal-item
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-shrink.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-shrink.html
new file mode 100644
index 00000000000..06395ff6d5e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-column-shrink.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-column-shrink
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-end-trimmed-only-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-end-trimmed-only-ref.html
new file mode 100644
index 00000000000..9fb945d00c9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-end-trimmed-only-ref.html
@@ -0,0 +1,34 @@
+
+
+
+margin-trim: flex-inline-end-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-end-trimmed-only.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-end-trimmed-only.html
new file mode 100644
index 00000000000..33451daf30a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-end-trimmed-only.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-inline-end-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-start-trimmed-only-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-start-trimmed-only-ref.html
new file mode 100644
index 00000000000..f7dc9ec5c5e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-start-trimmed-only-ref.html
@@ -0,0 +1,34 @@
+
+
+
+margin-trim: flex-inline-start-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-start-trimmed-only.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-start-trimmed-only.html
new file mode 100644
index 00000000000..05cf112e66a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-start-trimmed-only.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-inline-start-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-trimmed-only-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-trimmed-only-ref.html
new file mode 100644
index 00000000000..e262b903df5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-trimmed-only-ref.html
@@ -0,0 +1,31 @@
+
+
+
+margin-trim: flex-inline-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-trimmed-only.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-trimmed-only.html
new file mode 100644
index 00000000000..637dc485afe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-inline-trimmed-only.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: flex-inline-trimmed-only
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-block-multiline-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-block-multiline-ref.html
new file mode 100644
index 00000000000..8eb29f58061
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-block-multiline-ref.html
@@ -0,0 +1,32 @@
+
+
+
+margin-trim: flex-row-block-multiline
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-block-multiline.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-block-multiline.html
new file mode 100644
index 00000000000..c8fc788ca26
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-block-multiline.html
@@ -0,0 +1,34 @@
+
+
+
+margin-trim: flex-row-block-multiline
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-grow.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-grow.html
new file mode 100644
index 00000000000..64395461cfd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-grow.html
@@ -0,0 +1,31 @@
+
+
+
+margin-trim: flex-row-grow
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-inline-multiline.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-inline-multiline.html
new file mode 100644
index 00000000000..d563373d50a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-inline-multiline.html
@@ -0,0 +1,39 @@
+
+
+
+margin-trim: flex-row-inline-multiline
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-orthogonal-item.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-orthogonal-item.html
new file mode 100644
index 00000000000..3facc7450ca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-orthogonal-item.html
@@ -0,0 +1,39 @@
+
+
+
+margin-trim: flex-row-orthogonal-item
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-shrink.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-shrink.html
new file mode 100644
index 00000000000..172c946cb4a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-row-shrink.html
@@ -0,0 +1,31 @@
+
+
+
+margin-trim: flex-row-shrink
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-trim-all-margins-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-trim-all-margins-ref.html
new file mode 100644
index 00000000000..aebc1045d16
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-trim-all-margins-ref.html
@@ -0,0 +1,29 @@
+
+
+
+margin-trim: flex-trim-all-margins
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-trim-all-margins.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-trim-all-margins.html
new file mode 100644
index 00000000000..1c2eda8aa09
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/flex-trim-all-margins.html
@@ -0,0 +1,32 @@
+
+
+
+margin-trim: flex-trim-all-margins
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-end-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-end-ref.html
new file mode 100644
index 00000000000..0ada6451471
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-end-ref.html
@@ -0,0 +1,29 @@
+
+
+
+margin-trim: grid-block-end
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-end.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-end.html
new file mode 100644
index 00000000000..ffbc374756c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-end.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: grid-block-end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-start-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-start-ref.html
new file mode 100644
index 00000000000..486b64c74aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-start-ref.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: grid-block-start
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-start.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-start.html
new file mode 100644
index 00000000000..21d54472535
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block-start.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: grid-block-start
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block.html
new file mode 100644
index 00000000000..6a4c3bbc946
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-block.html
@@ -0,0 +1,38 @@
+
+
+
+margin-trim: grid-block
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-end-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-end-ref.html
new file mode 100644
index 00000000000..e51a97faf8f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-end-ref.html
@@ -0,0 +1,31 @@
+
+
+
+margin-trim: grid-inline-end
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-end.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-end.html
new file mode 100644
index 00000000000..3754a9b50aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-end.html
@@ -0,0 +1,33 @@
+
+
+
+margin-trim: grid-inline-end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-start-ref.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-start-ref.html
new file mode 100644
index 00000000000..c35b1f5fe64
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-start-ref.html
@@ -0,0 +1,35 @@
+
+
+
+margin-trim: grid-inline-start
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-start.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-start.html
new file mode 100644
index 00000000000..e0f4c6d4546
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline-start.html
@@ -0,0 +1,34 @@
+
+
+
+margin-trim: grid-inline-start
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline.html
new file mode 100644
index 00000000000..1ac228296af
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-inline.html
@@ -0,0 +1,38 @@
+
+
+
+margin-trim: grid-inline
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html
new file mode 100644
index 00000000000..15768ea7aa9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-box/margin-trim/grid-trim-ignores-collapsed-tracks.html
@@ -0,0 +1,34 @@
+
+
+
+margin-trim: grid-trim-ignores-collapsed-tracks
+
+
+
+
+
+
+
+Test passes if there is a filled green square.
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-035.html b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-035.html
index bc84c28d4a3..c2f62ca438b 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-035.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/content-visibility/content-visibility-035.html
@@ -10,7 +10,7 @@
-
+
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/animations/font-variation-settings-composition.html b/tests/wpt/web-platform-tests/css/css-fonts/animations/font-variation-settings-composition.html
index 58f037415e2..e1ebfc28368 100644
--- a/tests/wpt/web-platform-tests/css/css-fonts/animations/font-variation-settings-composition.html
+++ b/tests/wpt/web-platform-tests/css/css-fonts/animations/font-variation-settings-composition.html
@@ -11,6 +11,14 @@
+
+
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html b/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html
index b9b335a287b..868861b8add 100644
--- a/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html
+++ b/tests/wpt/web-platform-tests/css/css-images/image-set/image-set-parsing.html
@@ -11,6 +11,13 @@
function test_valid_value_variants(property, value, serializedValue) {
if (!serializedValue) serializedValue = value;
test_valid_value(property, value, serializedValue);
+
+ // The '-webkit-' prefixed 'image-set' is expected to serialize to the same
+ // value as standard 'image-set'.
+ // https://drafts.csswg.org/css-images-4/#deprecated
+ // "Implementations must accept -webkit-image-set() as a parse-time alias of
+ // image-set(). (It’s a valid value, with identical arguments to image-set(),
+ // and is turned into image-set() during parsing.)"
test_valid_value(property, "-webkit-" + value, serializedValue);
}
diff --git a/tests/wpt/web-platform-tests/css/css-values/ch-unit-018.html b/tests/wpt/web-platform-tests/css/css-values/ch-unit-018.html
new file mode 100644
index 00000000000..d79fec7f498
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-values/ch-unit-018.html
@@ -0,0 +1,35 @@
+
+
+CSS Values and Units Test: support for the ch unit
+
+
+
+
+
+The test passes if there are two blue rectangles of equal length.
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-values/ex-unit-004.html b/tests/wpt/web-platform-tests/css/css-values/ex-unit-004.html
index 46f9384e9f7..1edf97d4ead 100644
--- a/tests/wpt/web-platform-tests/css/css-values/ex-unit-004.html
+++ b/tests/wpt/web-platform-tests/css/css-values/ex-unit-004.html
@@ -10,6 +10,7 @@
@font-face {
font-family: ExTestNoSpace;
src: url(resources/ExTest-NoSpace.woff);
+ unicode-range: U+0021-00FF;
}
div {
height: 10px;
@@ -27,8 +28,8 @@ div {
The test passes if there are two blue rectangles of equal length.
diff --git a/tests/wpt/web-platform-tests/css/css-values/ic-unit-015.html b/tests/wpt/web-platform-tests/css/css-values/ic-unit-015.html
new file mode 100644
index 00000000000..3be22ecc205
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-values/ic-unit-015.html
@@ -0,0 +1,35 @@
+
+
+CSS Values and Units Test: support for the ic unit
+
+
+
+
+
+The test passes if there are two blue rectangles of equal length.
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/duplicate-tag-rejects-capture.html b/tests/wpt/web-platform-tests/css/css-view-transitions/duplicate-tag-rejects-capture.html
index da340deccb3..951294babc2 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/duplicate-tag-rejects-capture.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/duplicate-tag-rejects-capture.html
@@ -32,15 +32,15 @@ promise_test(async t => {
transition.ready.then(reject, () => {readyRejected = true;});
// The domUpdate promise resolves (since there is no callback).
- let domUpdatedResolved = false;
- transition.domUpdated.then(() => {
- assert_true(readyRejected, "ready not rejected before domUpdated");
- domUpdatedResolved = true;
+ let updateCallbackDoneResolved = false;
+ transition.updateCallbackDone.then(() => {
+ assert_true(readyRejected, "ready not rejected before updateCallbackDone");
+ updateCallbackDoneResolved = true;
}, reject);
// Finally finish resolves.
transition.finished.then(() => {
- assert_true(domUpdatedResolved, "domUpdated not resolved before finish");
+ assert_true(updateCallbackDoneResolved, "updateCallbackDone not resolved before finish");
resolve();
}, reject);
});
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/duplicate-tag-rejects-start.html b/tests/wpt/web-platform-tests/css/css-view-transitions/duplicate-tag-rejects-start.html
index f34c337e0c9..6c99d6426c0 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/duplicate-tag-rejects-start.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/duplicate-tag-rejects-start.html
@@ -29,14 +29,14 @@ promise_test(async t => {
second.style = "view-transition-name: target";
});
- // First domUpdated resolves since the callback runs successfully.
- let domUpdatedResolved = false;
- transition.domUpdated.then(() => { domUpdatedResolved = true; }, reject);
+ // First updateCallbackDone resolves since the callback runs successfully.
+ let updateCallbackDoneResolved = false;
+ transition.updateCallbackDone.then(() => { updateCallbackDoneResolved = true; }, reject);
- // Then finished resolves since domUpdated was already resolved.
+ // Then finished resolves since updateCallbackDone was already resolved.
let finishResolved = false;
- transition.domUpdated.then(() => {
- assert_true(domUpdatedResolved, "domUpdated not resolved before finish");
+ transition.updateCallbackDone.then(() => {
+ assert_true(updateCallbackDoneResolved, "updateCallbackDone not resolved before finish");
finishResolved = true;
}, reject);
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-new-element-mid-transition.html b/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-new-element-mid-transition.html
index 551d2c41f78..dc5ede4d8d3 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-new-element-mid-transition.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-new-element-mid-transition.html
@@ -28,7 +28,7 @@ promise_test(async t => {
assert_implements(document.startViewTransition, "Missing document.startViewTransition");
return new Promise(async (resolve, reject) => {
let transition = document.startViewTransition();
- await transition.domUpdated;
+ await transition.updateCallbackDone;
await transition.ready;
transition.finished.then(resolve, reject);
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-new-element.html b/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-new-element.html
index 46f576dbd56..57f148309b4 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-new-element.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-new-element.html
@@ -30,11 +30,11 @@ promise_test(async t => {
let readyRejected = false;
transition.ready.then(reject, () => { readyRejected = true; });
- let domUpdated = false;
- transition.domUpdated.then(() => { domUpdated = true; }, reject);
+ let updateCallbackDone = false;
+ transition.updateCallbackDone.then(() => { updateCallbackDone = true; }, reject);
transition.finished.then(() => {
assert_true(readyRejected, "ready not rejected");
- assert_true(domUpdated, "dom not updated");
+ assert_true(updateCallbackDone, "dom not updated");
if (window.getComputedStyle(first).contain == "none")
resolve();
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-old-element.html b/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-old-element.html
index 8b21916019e..b0af95bf6ce 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-old-element.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/no-containment-on-old-element.html
@@ -29,11 +29,11 @@ promise_test(async t => {
let readyRejected = false;
transition.ready.then(reject, () => { readyRejected = true; });
- let domUpdated = false;
- transition.domUpdated.then(() => { domUpdated = true; }, reject);
+ let updateCallbackDone = false;
+ transition.updateCallbackDone.then(() => { updateCallbackDone = true; }, reject);
transition.finished.then(() => {
assert_true(readyRejected, "ready not rejected");
- assert_true(domUpdated, "dom not updated");
+ assert_true(updateCallbackDone, "dom not updated");
if (window.getComputedStyle(first).contain == "paint")
resolve();
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/pseudo-computed-style-stays-in-sync-with-new-element.html b/tests/wpt/web-platform-tests/css/css-view-transitions/pseudo-computed-style-stays-in-sync-with-new-element.html
index 103dc31930c..576b7525cc6 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/pseudo-computed-style-stays-in-sync-with-new-element.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/pseudo-computed-style-stays-in-sync-with-new-element.html
@@ -24,7 +24,7 @@ promise_test(async t => {
assert_implements(document.startViewTransition, "Missing document.startViewTransition");
return new Promise(async (resolve, reject) => {
let transition = document.startViewTransition();
- await transition.domUpdated;
+ await transition.updateCallbackDone;
await transition.ready;
let viewbox = window.getComputedStyle(
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/ready_resolves_after_dom_before_raf.html b/tests/wpt/web-platform-tests/css/css-view-transitions/ready_resolves_after_dom_before_raf.html
index 3bc1822314c..40a2ad47670 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/ready_resolves_after_dom_before_raf.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/ready_resolves_after_dom_before_raf.html
@@ -33,7 +33,7 @@ promise_test(async t => {
});
let dom_updated_resolved = false;
- transition.domUpdated.then(() => {
+ transition.updateCallbackDone.then(() => {
if (!dom_change_ran)
reject();
// If there's a rAF before ready resolves, we fail.
@@ -47,5 +47,5 @@ promise_test(async t => {
resolve();
});
});
-}, "domUpdated resolves, then ready resolves with no rAF in between");
+}, "updateCallbackDone resolves, then ready resolves with no rAF in between");
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/synchronous-callback-skipped-before-run.html b/tests/wpt/web-platform-tests/css/css-view-transitions/synchronous-callback-skipped-before-run.html
index d1ada87e9d6..d6023a7fd20 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/synchronous-callback-skipped-before-run.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/synchronous-callback-skipped-before-run.html
@@ -33,5 +33,5 @@ promise_test(async t => {
else
reject();
});
-}, "finished promise should be resolved if skipTransition() is invoked before a synchronous domUpdated callback is dispatched");
+}, "finished promise should be resolved if skipTransition() is invoked before a synchronous updateCallbackDone callback is dispatched");
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/transition-skipped-from-invalid-callback.html b/tests/wpt/web-platform-tests/css/css-view-transitions/transition-skipped-from-invalid-callback.html
index 0dd098cbdfa..cf3853cd570 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/transition-skipped-from-invalid-callback.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/transition-skipped-from-invalid-callback.html
@@ -35,7 +35,7 @@ promise_test(async t => {
transition.ready.then(reject, () => { readyRejected = true; });
let domUpdateRejected = false;
- transition.domUpdated.then(reject, () => { domUpdateRejected = true; });
+ transition.updateCallbackDone.then(reject, () => { domUpdateRejected = true; });
transition.finished.then(reject, () => {
assert_true(readyRejected, "ready not rejected");
assert_true(domUpdateRejected, "dom update not rejected");
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/unset-and-initial-view-transition-name.html b/tests/wpt/web-platform-tests/css/css-view-transitions/unset-and-initial-view-transition-name.html
index 4ff5c05316b..2715a5bb334 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/unset-and-initial-view-transition-name.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/unset-and-initial-view-transition-name.html
@@ -38,7 +38,7 @@ promise_test(async t => {
assert_implements(document.startViewTransition, "Missing document.startViewTransition");
return new Promise(async (resolve, reject) => {
let transition = document.startViewTransition();
- await transition.domUpdated;
+ await transition.updateCallbackDone;
// Elements with view-transition-name: initial and unset don't have
// containment. Because they are ignored they don't cause the transition to
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/view-transition-name-is-grouping-ref.html b/tests/wpt/web-platform-tests/css/css-view-transitions/view-transition-name-is-grouping-ref.html
new file mode 100644
index 00000000000..add20600f81
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/view-transition-name-is-grouping-ref.html
@@ -0,0 +1,22 @@
+
+
+View transitions: view-transition-name non-none value is a grouping value (ref)
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/view-transition-name-is-grouping.html b/tests/wpt/web-platform-tests/css/css-view-transitions/view-transition-name-is-grouping.html
new file mode 100644
index 00000000000..95739351f0f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/view-transition-name-is-grouping.html
@@ -0,0 +1,35 @@
+
+
+View transitions: view-transition-name non-none value is a grouping value
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/support/interpolation-testcommon.js b/tests/wpt/web-platform-tests/css/support/interpolation-testcommon.js
index 002841cfead..aa8239ae928 100644
--- a/tests/wpt/web-platform-tests/css/support/interpolation-testcommon.js
+++ b/tests/wpt/web-platform-tests/css/support/interpolation-testcommon.js
@@ -461,4 +461,5 @@
window.test_composition = test_composition;
window.neutralKeyframe = neutralKeyframe;
window.roundNumbers = roundNumbers;
+ window.normalizeValue = normalizeValue;
})();
diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/Animation.html b/tests/wpt/web-platform-tests/custom-elements/reactions/Animation.html
index 47eff97497c..f8d3bb86ed7 100644
--- a/tests/wpt/web-platform-tests/custom-elements/reactions/Animation.html
+++ b/tests/wpt/web-platform-tests/custom-elements/reactions/Animation.html
@@ -21,7 +21,7 @@ test(function () {
document.body.appendChild(instance);
assert_array_equals(element.takeLog().types(), ['constructed', 'connected']);
- const animation = instance.animate([{'borderColor': 'rgb(0, 0, 255)'}]);
+ const animation = instance.animate([{'borderColor': 'rgb(0, 0, 255)'}], 1);
animation.commitStyles();
const logEntries = element.takeLog();
@@ -35,7 +35,7 @@ test(function () {
const instance = document.createElement(element.name);
document.body.appendChild(instance);
- let animation = instance.animate([{'borderColor': 'rgb(0, 0, 255)'}]);
+ let animation = instance.animate([{'borderColor': 'rgb(0, 0, 255)'}], 1);
animation.commitStyles();
assert_array_equals(element.takeLog().types(), ['constructed', 'connected', 'attributeChanged']);
@@ -55,7 +55,7 @@ test(function () {
document.body.appendChild(instance);
assert_array_equals(element.takeLog().types(), ['constructed', 'connected']);
- const animation = instance.animate([{'borderColor': 'rgb(0, 0, 255)'}]);
+ const animation = instance.animate([{'borderColor': 'rgb(0, 0, 255)'}], 1);
animation.commitStyles();
assert_array_equals(element.takeLog().types(), []);
diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js b/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
index 169393e4c3e..847a9891d6a 100644
--- a/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
+++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scroll_support.js
@@ -10,6 +10,20 @@ async function waitForScrollendEvent(test, target, timeoutMs = 500) {
});
}
+async function verifyScrollStopped(test, target_div) {
+ const unscaled_pause_time_in_ms = 100;
+ const x = target_div.scrollLeft;
+ const y = target_div.scrollTop;
+ return new Promise(resolve => {
+ test.step_timeout(() => {
+ assert_equals(x, target_div.scrollLeft);
+ assert_equals(y, target_div.scrollTop);
+ resolve();
+ }, unscaled_pause_time_in_ms);
+ });
+}
+
+
const MAX_FRAME = 700;
const MAX_UNCHANGED_FRAMES = 20;
@@ -44,6 +58,19 @@ function waitForCompositorCommit() {
});
});
}
+function waitForNextFrame() {
+ const startTime = performance.now();
+ return new Promise(resolve => {
+ window.requestAnimationFrame((frameTime) => {
+ if (frameTime < startTime) {
+ window.requestAnimationFrame(resolve);
+ } else {
+ resolve();
+ }
+ });
+ });
+}
+
// TODO(crbug.com/1400399): Deprecate as frame rates may vary greatly in
// different test environments.
diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-mandatory-snap-point-after-load.html b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-mandatory-snap-point-after-load.html
new file mode 100644
index 00000000000..a51069bc088
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-fired-for-mandatory-snap-point-after-load.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+ scrollend + mandatory scroll snap test
+
+
+
+
+
+
+
scrollend + mandatory scroll snap test
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-for-user-scroll.html b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-for-user-scroll.html
index 5146c5f719a..e9be7c98483 100644
--- a/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-for-user-scroll.html
+++ b/tests/wpt/web-platform-tests/dom/events/scrolling/scrollend-event-for-user-scroll.html
@@ -39,19 +39,6 @@ async function resetTargetScrollState(test) {
}
}
-async function verifyScrollStopped(test) {
- const unscaled_pause_time_in_ms = 100;
- const x = target_div.scrollLeft;
- const y = target_div.scrollTop;
- return new Promise(resolve => {
- test.step_timeout(() => {
- assert_equals(x, target_div.scrollLeft);
- assert_equals(y, target_div.scrollTop);
- resolve();
- }, unscaled_pause_time_in_ms);
- });
-}
-
async function verifyNoScrollendOnDocument(test) {
const callback =
test.unreached_func("window got unexpected scrollend event.");
@@ -94,7 +81,7 @@ function runTest() {
await targetScrollendPromise;
assert_true(target_div.scrollTop > 0);
- await verifyScrollStopped(t);
+ await verifyScrollStopped(t, target_div);
}, 'Tests that the target_div gets scrollend event when touch dragging.');
promise_test(async (t) => {
@@ -123,7 +110,7 @@ function runTest() {
await targetScrollendPromise;
assert_true(target_div.scrollTop > 0);
- await verifyScrollStopped(t);
+ await verifyScrollStopped(t, target_div);
}, 'Tests that the target_div gets scrollend event when clicking ' +
'scrollbar.');
@@ -154,7 +141,7 @@ function runTest() {
await targetScrollendPromise;
assert_true(target_div.scrollTop > 0);
- await verifyScrollStopped(t);
+ await verifyScrollStopped(t, target_div);
}, 'Tests that the target_div gets scrollend event when dragging the ' +
'scrollbar thumb.');
@@ -174,7 +161,7 @@ function runTest() {
await targetScrollendPromise;
assert_true(target_div.scrollTop > 0);
- await verifyScrollStopped(t);
+ await verifyScrollStopped(t, target_div);
}, 'Tests that the target_div gets scrollend event when mouse wheel ' +
'scrolling.');
@@ -190,7 +177,7 @@ function runTest() {
await targetScrollendPromise;
assert_true(target_div.scrollTop > 0);
- await verifyScrollStopped(t);
+ await verifyScrollStopped(t, target_div);
}, 'Tests that the target_div gets scrollend event when sending DOWN key ' +
'to the target.');
}
diff --git a/tests/wpt/web-platform-tests/editing/data/fontname.js b/tests/wpt/web-platform-tests/editing/data/fontname.js
index f4193a9bce7..b42be89c66e 100644
--- a/tests/wpt/web-platform-tests/editing/data/fontname.js
+++ b/tests/wpt/web-platform-tests/editing/data/fontname.js
@@ -704,5 +704,50 @@ var browserTests = [
[["stylewithcss","false"],["fontname","sans-serif"]],
"fo[ob]ar",
[true,true],
- {"stylewithcss":[false,true,"",false,false,""],"fontname":[false,false,"monospace",false,false,"sans-serif"]}]
+ {"stylewithcss":[false,true,"",false,false,""],"fontname":[false,false,"monospace",false,false,"sans-serif"]}],
+
+// If contents of are entirely selected, it should be reused.
+["[abc]",
+ [["styleWithCSS","false"],["fontName","monospace"]],
+ ["[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+["[abc]",
+ [["styleWithCSS","false"],["fontName","monospace"]],
+ ["[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+["[abc]",
+ [["styleWithCSS","false"],["fontName","monospace"]],
+ ["[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+// but don't split existing if partially selected.
+["[a]bc",
+ [["styleWithCSS","false"],["fontName","monospace"]],
+ "[a]bc",
+ [true,true],
+ {}],
+["ab[c]",
+ [["styleWithCSS","false"],["fontName","monospace"]],
+ "ab[c]",
+ [true,true],
+ {}],
+["[a]bc",
+ [["styleWithCSS","false"],["fontName","monospace"]],
+ "[a]bc",
+ [true,true],
+ {}],
+["ab[c]",
+ [["styleWithCSS","false"],["fontName","monospace"]],
+ "ab[c]",
+ [true,true],
+ {}],
]
diff --git a/tests/wpt/web-platform-tests/editing/data/fontsize.js b/tests/wpt/web-platform-tests/editing/data/fontsize.js
index eb741b4f331..bbaa6d84478 100644
--- a/tests/wpt/web-platform-tests/editing/data/fontsize.js
+++ b/tests/wpt/web-platform-tests/editing/data/fontsize.js
@@ -779,5 +779,50 @@ var browserTests = [
[["stylewithcss","false"],["fontsize","4"]],
"fo[ob]ar",
[true,true],
- {"stylewithcss":[false,true,"",false,false,""],"fontsize":[false,false,"6",false,false,"4"]}]
+ {"stylewithcss":[false,true,"",false,false,""],"fontsize":[false,false,"6",false,false,"4"]}],
+
+// If contents of are entirely selected, it should be reused.
+["[abc]",
+ [["styleWithCSS","false"],["fontSize","7"]],
+ ["[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+["[abc]",
+ [["styleWithCSS","false"],["fontSize","7"]],
+ ["[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+["[abc]",
+ [["styleWithCSS","false"],["fontSize","7"]],
+ ["[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+// but don't split existing if partially selected.
+["[a]bc",
+ [["styleWithCSS","false"],["fontSize","7"]],
+ "[a]bc",
+ [true,true],
+ {}],
+["ab[c]",
+ [["styleWithCSS","false"],["fontSize","7"]],
+ "ab[c]",
+ [true,true],
+ {}],
+["[a]bc",
+ [["styleWithCSS","false"],["fontSize","7"]],
+ "[a]bc",
+ [true,true],
+ {}],
+["ab[c]",
+ [["styleWithCSS","false"],["fontSize","7"]],
+ "ab[c]",
+ [true,true],
+ {}],
]
diff --git a/tests/wpt/web-platform-tests/editing/data/forecolor.js b/tests/wpt/web-platform-tests/editing/data/forecolor.js
index 57deb5b434a..fde8364be23 100644
--- a/tests/wpt/web-platform-tests/editing/data/forecolor.js
+++ b/tests/wpt/web-platform-tests/editing/data/forecolor.js
@@ -734,5 +734,50 @@ var browserTests = [
[["stylewithcss","false"],["forecolor","#0000FF"]],
"fo[ob]ar",
[true,true],
- {"stylewithcss":[false,true,"",false,false,""],"forecolor":[true,false,"rgb(165, 42, 42)",false,false,"rgb(0, 0, 255)"]}]
+ {"stylewithcss":[false,true,"",false,false,""],"forecolor":[true,false,"rgb(165, 42, 42)",false,false,"rgb(0, 0, 255)"]}],
+
+// If contents of are entirely selected, it should be reused.
+["[abc]",
+ [["styleWithCSS","false"],["foreColor","#ff0000"]],
+ ["[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+["[abc]",
+ [["styleWithCSS","false"],["foreColor","#ff0000"]],
+ ["[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+["[abc]",
+ [["styleWithCSS","false"],["foreColor","#ff0000"]],
+ ["[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]",
+ "[abc]"],
+ [true,true],
+ {}],
+// but don't split existing if partially selected.
+["[a]bc",
+ [["styleWithCSS","false"],["foreColor","#ff0000"]],
+ "[a]bc",
+ [true,true],
+ {}],
+["ab[c]",
+ [["styleWithCSS","false"],["foreColor","#ff0000"]],
+ "ab[c]",
+ [true,true],
+ {}],
+["[a]bc",
+ [["styleWithCSS","false"],["foreColor","#ff0000"]],
+ "[a]bc",
+ [true,true],
+ {}],
+["ab[c]",
+ [["styleWithCSS","false"],["foreColor","#ff0000"]],
+ "ab[c]",
+ [true,true],
+ {}],
]
diff --git a/tests/wpt/web-platform-tests/editing/data/multitest.js b/tests/wpt/web-platform-tests/editing/data/multitest.js
index 9948c338b40..89f5eebdb66 100644
--- a/tests/wpt/web-platform-tests/editing/data/multitest.js
+++ b/tests/wpt/web-platform-tests/editing/data/multitest.js
@@ -2062,12 +2062,12 @@ var browserTests = [
{"fontsize":[false,false,"3",false,false,"2"],"subscript":[false,false,"",false,true,""],"inserttext":[false,false,"",false,false,""]}],
["foo[]bar",
[["subscript",""],["fontsize","3"],["inserttext","a"]],
- "fooa[]bar",
+ "fooa[]bar", // should be outer-most element
[true,true,true],
{"subscript":[false,false,"",false,true,""],"fontsize":[false,false,"3",false,false,"3"],"inserttext":[false,false,"",false,false,""]}],
["foo[]bar",
[["fontsize","3"],["subscript",""],["inserttext","a"]],
- "fooa[]bar",
+ "fooa[]bar", // should be outer-most element
[true,true,true],
{"fontsize":[false,false,"3",false,false,"3"],"subscript":[false,false,"",false,true,""],"inserttext":[false,false,"",false,false,""]}],
["foo[]bar",
@@ -2177,12 +2177,12 @@ var browserTests = [
{"delete":[false,false,"",false,false,""],"inserttext":[false,false,"",false,false,""]}],
["foo[bar]baz",
[["delete",""],["inserttext","a"]],
- "fooa[]baz",
+ "fooa[]baz", // should be outer-most element
[true,true],
{"delete":[false,false,"",false,false,""],"inserttext":[false,false,"",false,false,""]}],
["foo[bar]baz",
[["delete",""],["inserttext","a"]],
- "fooa[]baz",
+ "fooa[]baz", // should be outer-most element
[true,true],
{"delete":[false,false,"",false,false,""],"inserttext":[false,false,"",false,false,""]}],
["foo[bar]baz",
@@ -2397,12 +2397,12 @@ var browserTests = [
{"delete":[false,false,"",false,false,""],"inserttext":[false,false,"",false,false,""]}],
["foo[barbaz]",
[["delete",""],["inserttext","a"]],
- "fooa[]",
+ "fooa[]", // should be outer-most element
[true,true],
{"delete":[false,false,"",false,false,""],"inserttext":[false,false,"",false,false,""]}],
["foo[barbaz]",
[["delete",""],["inserttext","a"]],
- "fooa[]",
+ "fooa[]", // should be outer-most element
[true,true],
{"delete":[false,false,"",false,false,""],"inserttext":[false,false,"",false,false,""]}],
["foo[barbaz]",
@@ -2866,4 +2866,72 @@ var browserTests = [
"a[]"],
[true,true,true],
{}],
+
+// element may be taller than parent inline elements. Therefore, for
+// applying background color to new text, element should be put inner-
+// most.
+["abc[]ef",
+ [["stylewithcss","false"],["fontSize","4"],["backColor","#00dddd"],["insertText","d"]],
+ ["abcdef",
+ "abcdef",
+ "abcdef"],
+ [true,true,true,true],
+ {}],
+["abc[]ef",
+ [["stylewithcss","false"],["foreColor","#ff0000"],["backColor","#00dddd"],["insertText","d"]],
+ ["abcdef",
+ "abcdef",
+ "abcdef"],
+ [true,true,true,true],
+ {}],
+["abc[]ef",
+ [["stylewithcss","false"],["fontName","monospace"],["backColor","#00dddd"],["insertText","d"]],
+ ["abcdef",
+ "abcdef",
+ "abcdef"],
+ [true,true,true,true],
+ {}],
+["abc[]ef",
+ [["stylewithcss","false"],["backColor","#00dddd"],["fontSize","4"],["insertText","d"]],
+ ["abcdef",
+ "abcdef",
+ "abcdef"],
+ [true,true,true,true],
+ {}],
+["abc[]ef",
+ [["stylewithcss","false"],["backColor","#00dddd"],["foreColor","#ff0000"],["insertText","d"]],
+ ["abcdef",
+ "abcdef",
+ "abcdef"],
+ [true,true,true,true],
+ {}],
+["abc[]ef",
+ [["stylewithcss","false"],["backColor","#00dddd"],["fontName","monospace"],["insertText","d"]],
+ ["abcdef",
+ "abcdef",
+ "abcdef"],
+ [true,true,true,true],
+ {}],
+["abc[]ef",
+ [["stylewithcss","false"],["fontName","monospace"],["foreColor","#ff0000"],["fontSize","7"],["backColor","#00dddd"],["insertText","d"]],
+ ["abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef",
+ "abc[d]ef"],
+ [true,true,true,true,true,true],
+ {}],
]
diff --git a/tests/wpt/web-platform-tests/fetch/api/credentials/authentication-redirection.any.js b/tests/wpt/web-platform-tests/fetch/api/credentials/authentication-redirection.any.js
index b6376368116..a0175e6d2a7 100644
--- a/tests/wpt/web-platform-tests/fetch/api/credentials/authentication-redirection.any.js
+++ b/tests/wpt/web-platform-tests/fetch/api/credentials/authentication-redirection.any.js
@@ -21,6 +21,6 @@ promise_test(async test => {
}, "getAuthorizationHeaderValue - same origin redirection");
promise_test(async (test) => {
- const result = await getAuthorizationHeaderValue(get_host_info().HTTP_REMOTE_ORIGIN + "/fetch/api/resources/redirect.py?allow_headers=Authorization&location=" + encodeURIComponent(get_host_info().HTTP_ORIGIN + "/fetch/api/resources/dump-authorization-header.py"));
+ const result = await getAuthorizationHeaderValue(get_host_info().HTTPS_REMOTE_ORIGIN + "/fetch/api/resources/redirect.py?allow_headers=Authorization&location=" + encodeURIComponent(get_host_info().HTTPS_ORIGIN + "/fetch/api/resources/dump-authorization-header.py"));
assert_equals(result, "none");
}, "getAuthorizationHeaderValue - cross origin redirection");
diff --git a/tests/wpt/web-platform-tests/file-system-access/resources/message-target-dedicated-worker.js b/tests/wpt/web-platform-tests/file-system-access/resources/message-target-dedicated-worker.js
deleted file mode 100644
index 26ff23ef8ac..00000000000
--- a/tests/wpt/web-platform-tests/file-system-access/resources/message-target-dedicated-worker.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-importScripts(
- 'test-helpers.js',
- 'messaging-serialize-helpers.js',
- 'message-target.js'
-);
-
-add_message_event_handlers(/*receiver=*/self, /*target=*/self);
diff --git a/tests/wpt/web-platform-tests/file-system-access/resources/message-target-service-worker.js b/tests/wpt/web-platform-tests/file-system-access/resources/message-target-service-worker.js
deleted file mode 100644
index 4a6174ae3b5..00000000000
--- a/tests/wpt/web-platform-tests/file-system-access/resources/message-target-service-worker.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-importScripts(
- 'test-helpers.js',
- 'messaging-serialize-helpers.js',
- 'message-target.js'
-);
-
-add_message_event_handlers(/*receiver=*/self);
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/file-system-access/resources/message-target-shared-worker.js b/tests/wpt/web-platform-tests/file-system-access/resources/message-target-shared-worker.js
deleted file mode 100644
index 6829c61d4cf..00000000000
--- a/tests/wpt/web-platform-tests/file-system-access/resources/message-target-shared-worker.js
+++ /dev/null
@@ -1,14 +0,0 @@
-'use strict';
-
-importScripts(
- 'test-helpers.js',
- 'messaging-serialize-helpers.js',
- 'message-target.js'
-);
-
-self.addEventListener('connect', connect_event => {
- const message_port = connect_event.ports[0];
- add_message_event_handlers(
- /*receiver=*/message_port, /*target=*/message_port);
- message_port.start();
-});
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/file-system-access/resources/message-target.html b/tests/wpt/web-platform-tests/file-system-access/resources/message-target.html
deleted file mode 100644
index 32c7f0c56c6..00000000000
--- a/tests/wpt/web-platform-tests/file-system-access/resources/message-target.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/file-system-access/resources/message-target.js b/tests/wpt/web-platform-tests/file-system-access/resources/message-target.js
deleted file mode 100644
index 191b4748ab5..00000000000
--- a/tests/wpt/web-platform-tests/file-system-access/resources/message-target.js
+++ /dev/null
@@ -1,157 +0,0 @@
-'use strict';
-
-// This script depends on the following scripts:
-// /file-system-access/resources/messaging-helpers.js
-// /file-system-access/resources/test-helpers.js
-
-// add_message_event_handlers() is the helper function used to setup all
-// message targets, including iframes and workers.
-//
-// Adds a message event handler and a message error handler to |receiver|.
-// The 'data' property from received MessageEvents must include a 'type'
-// property. The 'type' selects the test logic to run. Most message type
-// handlers use postMessage() to respond to the sender with test results.
-// The sender then validates the test results after receiving the response.
-//
-// Both |target| and |target_origin| are optional. |target| is used
-// to send message responses back to the sender. When omitted, the
-// 'source' from received MessageEvents is used instead.
-//
-// For window messaging, |target_origin| specifies the origin to receive
-// responses. Most window tests use '*' for the |target_origin|. Worker
-// and message port tests must use undefined for |target_origin| to avoid
-// exceptions.
-function add_message_event_handlers(receiver, target, target_origin) {
- receiver.addEventListener('message', async function (message_event) {
- const message_data = message_event.data;
-
- // Reply to the sender using the 'source' from the received MessageEvent.
- let message_source = message_event.source;
- if (message_source === null) {
- // However, some message senders, like DedicatedWorkers, don't include
- // a source. Fallback to the target when the source is null.
- message_source = target;
- }
-
- try {
- switch (message_data.type) {
- case 'receive-message-port':
- // Receive a MessagePort to use as a message target for testing.
- add_message_event_handlers(
- /*receiver=*/message_data.message_port,
- /*target=*/message_data.message_port);
- message_data.message_port.start();
- break;
-
- case 'create-broadcast-channel':
- // Create a BroadcastChannel to use as a message target for testing.
- const broadcast_channel =
- new BroadcastChannel(message_data.broadcast_channel_name);
- add_message_event_handlers(
- /*receiver=*/broadcast_channel,
- /*target=*/broadcast_channel);
- message_source.postMessage(
- { type: 'broadcast-channel-created' },
- { targetOrigin: target_origin });
- break;
-
- case 'receive-file-system-handles':
- // Receive a list of cloned FileSystemFileHandles. Access the
- // properties of each FileSystemFileHandle by serializing the
- // handle to a JavaScript object. Then respond with the serialized
- // results, enabling the sender to verify that the cloned handle
- // produced the expected property values from this execution context.
- const serialized_handles = [];
- const cloned_handles = message_data.cloned_handles;
- for (let i = 0; i < cloned_handles.length; ++i) {
- const serialized = await serialize_handle(cloned_handles[i]);
- serialized_handles.push(serialized);
- }
- message_source.postMessage({
- type: 'receive-serialized-file-system-handles',
- serialized_handles,
- // Respond with the cloned handles to create new clones for
- // the sender to verify.
- cloned_handles,
- }, { targetOrigin: target_origin });
- break;
-
- case 'receive-serialized-file-system-handles':
- // Do nothing. This message is meant for test runner validation.
- // Other message targets may receive this message while testing
- // broadcast channels.
- break;
-
- case 'create-file':
- // Create a new file and then respond to the sender with it.
- const directory = await navigator.storage.getDirectory();
- const file_handle =
- await directory.getFileHandle('temp-file', { create: true });
- message_source.postMessage(
- { type: 'receive-file', file_handle },
- { targetOrigin: target_origin });
- break;
-
- case 'create-directory':
- // Create a new directory and then respond to the sender with it.
- const parent_directory = await navigator.storage.getDirectory();
- const directory_handle =
- await parent_directory.getDirectoryHandle('temp-directory',
- { create: true });
- message_source.postMessage(
- { type: 'receive-directory', directory_handle },
- { targetOrigin: target_origin });
- break;
-
- case 'create-sync-access-handle':
- // Receive a file and create a sync access handle out of it. Report
- // success to the sender.
- let success = true;
- try {
- const access_handle = await message_data.file_handle.createSyncAccessHandle();
- access_handle.close();
- } catch (error) {
- success = false;
- }
-
- message_source.postMessage(
- { type: 'receive-sync-access-handle-result', success },
- { targetOrigin: target_origin });
- break;
-
- default:
- throw `Unknown message type: '${message_data.type}'`;
- }
- } catch (error) {
- // Respond with an error to trigger a failure in the sender's
- // test runner.
- message_source.postMessage(`ERROR: ${error}`,
- { targetOrigin: target_origin });
- }
- });
-
- receiver.addEventListener('messageerror', async function (message_event) {
- // Select the target for message responses (see comment in 'message' event
- // listener above).
- let message_source = message_event.source;
- if (message_source === null) {
- message_source = target;
- }
-
- try {
- // Respond with the MessageEvent's property values, enabling the sender
- // to verify results.
- const serialized_message_error_event =
- serialize_message_error_event(message_event);
- message_source.postMessage({
- type: 'serialized-message-error',
- serialized_message_error_event
- }, { targetOrigin: target_origin });
- } catch (error) {
- // Respond with an error to trigger a failure in the sender's
- // test runner.
- message_source.postMessage(`ERROR: ${error}`,
- { targetOrigin: target_origin });
- }
- });
-}
diff --git a/tests/wpt/web-platform-tests/file-system-access/resources/messaging-blob-helpers.js b/tests/wpt/web-platform-tests/file-system-access/resources/messaging-blob-helpers.js
deleted file mode 100644
index 852f2e2d321..00000000000
--- a/tests/wpt/web-platform-tests/file-system-access/resources/messaging-blob-helpers.js
+++ /dev/null
@@ -1,51 +0,0 @@
-'use strict';
-
-// Creates a blob URL with the contents of 'message-target.html'. Use the
-// blob as an iframe src or a window.open() URL, which creates a same origin
-// message target.
-async function create_message_target_blob_url(test) {
- const html = await create_message_target_html_without_subresources(test);
- const blob = new Blob([html], { type: 'text/html' });
- return URL.createObjectURL(blob);
-}
-
-// Creates a data URI with the contents of 'message-target.html'. Use the
-// data URI as an iframe src, which creates a cross origin message target.
-async function create_message_target_data_uri(test) {
- const iframe_html =
- await create_message_target_html_without_subresources(test);
- return `data:text/html,${encodeURIComponent(iframe_html)}`;
-}
-
-// Constructs a version of 'message-target.html' without any subresources.
-// Enables the creation of blob URLs, data URIs and iframe srcdocs re-using
-// the contents of 'message-target.html'.
-async function create_message_target_html_without_subresources(test) {
- const test_helpers_script = await fetch_text('resources/test-helpers.js');
-
- const messaging_helpers_script =
- await fetch_text('resources/messaging-helpers.js');
-
- const messaging_serialize_helpers_script =
- await fetch_text('resources/messaging-serialize-helpers.js');
-
- const message_target_script =
- await fetch_text('resources/message-target.js');
-
- // Get the inline script code from 'message-target.html'.
- const iframe = await add_iframe(test, { src: 'resources/message-target.html' });
- const iframe_script =
- iframe.contentWindow.document.getElementById('inline_script').outerHTML;
- iframe.remove();
-
- return '' +
- `` +
- `` +
- `` +
- `${iframe_script}`;
-}
-
-async function fetch_text(url) {
- const response = await fetch(url);
- return await response.text();
-}
diff --git a/tests/wpt/web-platform-tests/file-system-access/resources/messaging-helpers.js b/tests/wpt/web-platform-tests/file-system-access/resources/messaging-helpers.js
deleted file mode 100644
index 55fc04ab817..00000000000
--- a/tests/wpt/web-platform-tests/file-system-access/resources/messaging-helpers.js
+++ /dev/null
@@ -1,187 +0,0 @@
-'use strict';
-
-// This script depends on the following script:
-// /file-system-access/resources/test-helpers.js
-// /service-workers/service-worker/resources/test-helpers.sub.js
-
-// Define the URL constants used for each type of message target, including
-// iframes and workers.
-const kDocumentMessageTarget = 'resources/message-target.html';
-const kSharedWorkerMessageTarget = 'resources/message-target-shared-worker.js';
-const kServiceWorkerMessageTarget =
- 'resources/message-target-service-worker.js';
-const kDedicatedWorkerMessageTarget =
- 'resources/message-target-dedicated-worker.js';
-
-function create_dedicated_worker(test, url) {
- const dedicated_worker = new Worker(url);
- test.add_cleanup(() => {
- dedicated_worker.terminate();
- });
- return dedicated_worker;
-}
-
-async function create_service_worker(test, script_url, scope) {
- const registration = await service_worker_unregister_and_register(
- test, script_url, scope);
- test.add_cleanup(() => {
- return registration.unregister();
- });
- return registration;
-}
-
-// Creates an iframe and waits to receive a message from the iframe.
-// Valid |options| include src, srcdoc and sandbox, which mirror the
-// corresponding iframe element properties.
-async function add_iframe(test, options) {
- const iframe = document.createElement('iframe');
-
- if (options.sandbox !== undefined) {
- iframe.sandbox = options.sandbox;
- }
-
- if (options.src !== undefined) {
- iframe.src = options.src;
- }
-
- if (options.srcdoc !== undefined) {
- iframe.srcdoc = options.srcdoc;
- }
-
- document.body.appendChild(iframe);
- test.add_cleanup(() => {
- iframe.remove();
- });
-
- await wait_for_loaded_message(self);
- return iframe;
-}
-
-// Creates a child window using window.open() and waits to receive a message
-// from the child window.
-async function open_window(test, url) {
- const child_window = window.open(url);
- test.add_cleanup(() => {
- child_window.close();
- });
- await wait_for_loaded_message(self);
- return child_window;
-}
-
-// Wait until |receiver| gets a message event with the data set to 'LOADED'.
-// The postMessage() tests use messaging instead of the loaded event because
-// cross-origin child windows from window.open() do not dispatch the loaded
-// event to the parent window.
-async function wait_for_loaded_message(receiver) {
- const message_promise = new Promise((resolve, reject) => {
- receiver.addEventListener('message', message_event => {
- if (message_event.data === 'LOADED') {
- resolve();
- } else {
- reject('The message target must receive a "LOADED" message response.');
- }
- });
- });
- await message_promise;
-}
-
-// Sets up a new message channel. Sends one port to |target| and then returns
-// the other port.
-function create_message_channel(target, target_origin) {
- const message_channel = new MessageChannel();
-
- const message_data =
- { type: 'receive-message-port', message_port: message_channel.port2 };
- target.postMessage(
- message_data,
- {
- transfer: [message_channel.port2],
- targetOrigin: target_origin
- });
- message_channel.port1.start();
- return message_channel.port1;
-}
-
-// Creates a variety of different FileSystemFileHandles for testing.
-async function create_file_system_handles(test, root) {
- // Create some files to use with postMessage().
- const empty_file = await createEmptyFile(test, 'empty-file', root);
- const first_file = await createFileWithContents(
- test, 'first-file-with-contents', 'first-text-content', root);
- const second_file = await createFileWithContents(
- test, 'second-file-with-contents', 'second-text-content', root);
-
- // Create an empty directory to use with postMessage().
- const empty_directory = await createDirectory(test, 'empty-directory', root);
-
- // Create a directory containing both files and subdirectories to use
- // with postMessage().
- const directory_with_files =
- await createDirectory(test, 'directory-with-files', root);
- await createFileWithContents(test, 'first-file-in-directory',
- 'first-directory-text-content', directory_with_files);
- await createFileWithContents(test, 'second-file-in-directory',
- 'second-directory-text-content', directory_with_files);
- const subdirectory =
- await createDirectory(test, 'subdirectory', directory_with_files);
- await createFileWithContents(test, 'first-file-in-subdirectory',
- 'first-subdirectory-text-content', subdirectory);
-
- return [
- empty_file,
- first_file,
- second_file,
- // Include the same FileSystemFileHandle twice.
- second_file,
- empty_directory,
- // Include the Same FileSystemDirectoryHandle object twice.
- empty_directory,
- directory_with_files
- ];
-}
-
-// Tests sending an array of FileSystemHandles to |target| with postMessage().
-// The array includes both FileSystemFileHandles and FileSystemDirectoryHandles.
-// After receiving the message, |target| accesses all cloned handles by
-// serializing the properties of each handle to a JavaScript object.
-//
-// |target| then responds with the resulting array of serialized handles. The
-// response also includes the array of cloned handles, which creates more
-// clones. After receiving the response, this test runner verifies that both
-// the serialized handles and the cloned handles contain the expected properties.
-async function do_post_message_test(
- test, root_dir, receiver, target, target_origin) {
- // Create and send the handles to |target|.
- const handles =
- await create_file_system_handles(test, root_dir, target, target_origin);
- target.postMessage(
- { type: 'receive-file-system-handles', cloned_handles: handles },
- { targetOrigin: target_origin });
-
- // Wait for |target| to respond with results.
- const event_watcher = new EventWatcher(test, receiver, 'message');
- const message_event = await event_watcher.wait_for('message');
- const response = message_event.data;
-
- assert_equals(response.type, 'receive-serialized-file-system-handles',
- 'The test runner must receive a "serialized-file-system-handles" ' +
- `message response. Actual response: ${response}`);
-
- // Verify the results.
- const expected_serialized_handles = await serialize_handles(handles);
-
- assert_equals_serialized_handles(
- response.serialized_handles, expected_serialized_handles);
-
- await assert_equals_cloned_handles(response.cloned_handles, handles);
-}
-
-// Runs the same test as do_post_message_test(), but uses a MessagePort.
-// This test starts by establishing a message channel between the test runner
-// and |target|. Afterwards, the test sends FileSystemHandles through the
-// message port channel.
-async function do_message_port_test(test, root_dir, target, target_origin) {
- const message_port = create_message_channel(target, target_origin);
- await do_post_message_test(
- test, root_dir, /*receiver=*/ message_port, /*target=*/ message_port);
-}
diff --git a/tests/wpt/web-platform-tests/file-system-access/resources/messaging-serialize-helpers.js b/tests/wpt/web-platform-tests/file-system-access/resources/messaging-serialize-helpers.js
deleted file mode 100644
index ada68f43db5..00000000000
--- a/tests/wpt/web-platform-tests/file-system-access/resources/messaging-serialize-helpers.js
+++ /dev/null
@@ -1,230 +0,0 @@
-'use strict';
-
-// This script depends on the following script:
-// /file-system-access/resources/test-helpers.js
-
-// Serializes an array of FileSystemHandles where each element can be either a
-// FileSystemFileHandle or FileSystemDirectoryHandle.
-async function serialize_handles(handle_array) {
- const serialized_handle_array = [];
- for (let i = 0; i < handle_array.length; ++i) {
- serialized_handle_array.push(await serialize_handle(handle_array[i]));
- }
- return serialized_handle_array;
-}
-
-// Serializes either a FileSystemFileHandle or FileSystemDirectoryHandle.
-async function serialize_handle(handle) {
- switch (handle.kind) {
- case 'directory':
- return await serialize_file_system_directory_handle(handle);
- case 'file':
- return await serialize_file_system_file_handle(handle);
- default:
- throw 'Object is not a FileSystemFileHandle or ' +
- `FileSystemDirectoryHandle ${handle}`;
- }
-}
-
-// Creates a dictionary for a FileSystemHandle base, which contains
-// serialized properties shared by both FileSystemFileHandle and
-// FileSystemDirectoryHandle.
-async function serialize_file_system_handle(handle) {
- const read_permission =
- await handle.queryPermission({ mode: 'read' });
-
- const write_permission =
- await handle.queryPermission({ mode: 'readwrite' })
-
- return {
- kind: handle.kind,
- name: handle.name,
- read_permission,
- write_permission
- };
-}
-
-// Create a dictionary with each property value in FileSystemFileHandle.
-// Also, reads the contents of the file to include with the returned
-// dictionary. Example output:
-// {
-// kind: "file",
-// name: "example-file-name"
-// read_permission: "granted",
-// write_permission: "granted",
-// contents: "example-file-contents"
-// }
-async function serialize_file_system_file_handle(file_handle) {
- const contents = await getFileContents(file_handle);
-
- const serialized_file_system_handle =
- await serialize_file_system_handle(file_handle);
-
- return Object.assign(serialized_file_system_handle, { contents });
-}
-
-// Create a dictionary with each property value in FileSystemDirectoryHandle.
-// Example output:
-// {
-// kind: "directory",
-// name: "example-directory-name"
-// read_permission: "granted",
-// write_permission: "granted",
-// files: [, ...]
-// directories: [, ...]
-// }
-async function serialize_file_system_directory_handle(directory_handle) {
- // Serialize the contents of the directory.
- const serialized_files = [];
- const serialized_directories = [];
- for await (const child_handle of directory_handle.values()) {
- const serialized_child_handle = await serialize_handle(child_handle);
- if (child_handle.kind === "directory") {
- serialized_directories.push(serialized_child_handle);
- } else {
- serialized_files.push(serialized_child_handle);
- }
- }
-
- // Order the serialized contents of the directory by name.
- serialized_files.sort((left, right) => {
- return left.name.localeCompare(right.name);
- });
- serialized_directories.sort((left, right) => {
- return left.name.localeCompare(right.name);
- });
-
- // Serialize the directory's common properties shared by all
- // FileSystemHandles.
- const serialized_file_system_handle =
- await serialize_file_system_handle(directory_handle);
-
- return Object.assign(
- serialized_file_system_handle,
- { files: serialized_files, directories: serialized_directories });
-}
-
-// Verifies |left_array| is a clone of |right_array| where each element
-// is a cloned FileSystemHandle with the same properties and contents.
-async function assert_equals_cloned_handles(left_array, right_array) {
- assert_equals(left_array.length, right_array.length,
- 'Each array of FileSystemHandles must have the same length');
-
- for (let i = 0; i < left_array.length; ++i) {
- assert_not_equals(left_array[i], right_array[i],
- 'Clones must create new FileSystemHandle instances.');
-
- const left_serialized = await serialize_handle(left_array[i]);
- const right_serialized = await serialize_handle(right_array[i]);
- assert_equals_serialized_handle(left_serialized, right_serialized);
- }
-}
-
-// Verifies |left_array| is the same as |right_array| where each element
-// is a serialized FileSystemHandle with the same properties.
-function assert_equals_serialized_handles(left_array, right_array) {
- assert_equals(left_array.length, right_array.length,
- 'Each array of serialized handles must have the same length');
-
- for (let i = 0; i < left_array.length; ++i) {
- assert_equals_serialized_handle(left_array[i], right_array[i]);
- }
-}
-
-// Verifies each property of a serialized FileSystemFileHandle or
-// FileSystemDirectoryHandle.
-function assert_equals_serialized_handle(left, right) {
- switch (left.kind) {
- case 'directory':
- assert_equals_serialized_file_system_directory_handle(left, right);
- break;
- case 'file':
- assert_equals_serialized_file_system_file_handle(left, right);
- break;
- default:
- throw 'Object is not a FileSystemFileHandle or ' +
- `FileSystemDirectoryHandle ${left}`;
- }
-}
-
-// Compares the output of serialize_file_system_handle() for
-// two FileSystemHandles.
-function assert_equals_serialized_file_system_handle(left, right) {
- assert_equals(left.kind, right.kind,
- 'Each FileSystemHandle instance must use the expected "kind".');
-
- assert_equals(left.name, right.name,
- 'Each FileSystemHandle instance must use the expected "name" ' +
- ' property.');
-
- assert_equals(left.read_permission, right.read_permission,
- 'Each FileSystemHandle instance must have the expected read ' +
- ' permission.');
-
- assert_equals(left.write_permission, right.write_permission,
- 'Each FileSystemHandle instance must have the expected write ' +
- ' permission.');
-}
-
-// Compares the output of serialize_file_system_file_handle()
-// for two FileSystemFileHandle.
-function assert_equals_serialized_file_system_file_handle(left, right) {
- assert_equals_serialized_file_system_handle(left, right);
- assert_equals(left.contents, right.contents,
- 'Each FileSystemFileHandle instance must have the same contents.');
-}
-
-// Compares the output of serialize_file_system_directory_handle()
-// for two FileSystemDirectoryHandles.
-function assert_equals_serialized_file_system_directory_handle(left, right) {
- assert_equals_serialized_file_system_handle(left, right);
-
- assert_equals(left.files.length, right.files.length,
- 'Each FileSystemDirectoryHandle must contain the same number of ' +
- 'file children');
-
- for (let i = 0; i < left.files.length; ++i) {
- assert_equals_serialized_file_system_file_handle(
- left.files[i], right.files[i]);
- }
-
- assert_equals(left.directories.length, right.directories.length,
- 'Each FileSystemDirectoryHandle must contain the same number of ' +
- 'directory children');
-
- for (let i = 0; i < left.directories.length; ++i) {
- assert_equals_serialized_file_system_directory_handle(
- left.directories[i], right.directories[i]);
- }
-}
-
-// Creates a dictionary with interesting property values from MessageEvent.
-function serialize_message_error_event(message_error_event) {
- return {
- data: message_error_event.data,
- origin: message_error_event.origin,
- last_event_id: message_error_event.lastEventId,
- has_source: (message_error_event.source !== null),
- ports_length: message_error_event.ports.length
- };
-}
-
-// Compares the output of serialize_message_error_event() with an
-// expected result.
-function assert_equals_serialized_message_error_event(
- serialized_event, expected_origin, expected_has_source) {
- assert_equals(serialized_event.data, null,
- 'The message error event must set the "data" property to null.');
-
- assert_equals(serialized_event.origin, expected_origin,
- 'The message error event must have the expected "origin" property.');
-
- assert_equals(serialized_event.last_event_id, "",
- 'The message error event must set the "lastEventId" property to the empty string.');
-
- assert_equals(serialized_event.has_source, expected_has_source,
- 'The message error event must have the expected "source" property.');
-
- assert_equals(serialized_event.ports_length, 0,
- 'The message error event must not contain any message ports.');
-}
diff --git a/tests/wpt/web-platform-tests/fs/FileSystemSyncAccessHandle-read-write.https.tentative.worker.js b/tests/wpt/web-platform-tests/fs/FileSystemSyncAccessHandle-read-write.https.tentative.worker.js
index cdefc78b6cb..8fa3799a67a 100644
--- a/tests/wpt/web-platform-tests/fs/FileSystemSyncAccessHandle-read-write.https.tentative.worker.js
+++ b/tests/wpt/web-platform-tests/fs/FileSystemSyncAccessHandle-read-write.https.tentative.worker.js
@@ -195,8 +195,7 @@ sync_access_handle_test((t, handle) => {
const bufferLength = expected.length;
const readBuffer = new Uint8Array(expected.length);
- // No options parameter provided, should read at offset 0.
- const readBytes = handle.read(readBuffer);
+ const readBytes = handle.read(readBuffer, {at: 0});
assert_equals(expected.length, readBytes, 'Check that all bytes were read');
const actual = new TextDecoder().decode(readBuffer);
assert_equals(
@@ -242,4 +241,59 @@ sync_access_handle_test((t, handle) => {
assert_equals(0, readBytes, 'Check that no bytes were written');
}, 'Test writing at a negative offset fails.');
+sync_access_handle_test((t, handle) => {
+ const text = 'foobar';
+ const writeBuffer = new TextEncoder().encode(text);
+ let writtenBytes = handle.write(writeBuffer);
+ assert_equals(
+ writeBuffer.byteLength, writtenBytes,
+ 'Check that all bytes were written.');
+
+ // This should double the file size, not overwrite the existing bytes.
+ writtenBytes = handle.write(writeBuffer);
+ assert_equals(
+ writeBuffer.byteLength, writtenBytes,
+ 'Check that all bytes were written.');
+
+ // Reading at the cursor will read zero bytes at the end of the file.
+ const expectedFileSize = text.length * 2;
+ const readBuffer = new Uint8Array(expectedFileSize);
+ let readBytes = handle.read(readBuffer);
+ assert_equals(0, readBytes, 'Check that no bytes were read');
+
+ // Reading from the start of the file.
+ readBytes = handle.read(readBuffer, {at: 0});
+ assert_equals(expectedFileSize, readBytes, 'Check that all bytes were read');
+}, 'Test that writing moves the file position cursor');
+
+sync_access_handle_test((t, handle) => {
+ const decoder = new TextDecoder();
+
+ const text = 'foobar';
+ const writeBuffer = new TextEncoder().encode(text);
+ let writtenBytes = handle.write(writeBuffer);
+ assert_equals(
+ writeBuffer.byteLength, writtenBytes,
+ 'Check that all bytes were written.');
+
+ // Read the first half of the file.
+ let expected = 'foo';
+ const readBuffer = new Uint8Array(3);
+ let readBytes = handle.read(readBuffer, {at: 0});
+ assert_equals(3, readBytes, 'Check that all bytes were read');
+ let actual = decoder.decode(readBuffer);
+ assert_equals(
+ expected, actual,
+ `Expected to read ${expected} but the actual value was ${actual}.`);
+
+ // Read the second half of the file, without specifying an offset.
+ expected = 'bar';
+ readBytes = handle.read(readBuffer);
+ assert_equals(3, readBytes, 'Check that all bytes were read');
+ actual = decoder.decode(readBuffer);
+ assert_equals(
+ expected, actual,
+ `Expected to read ${expected} but the actual value was ${actual}.`);
+}, 'Test that reading moves the file position cursor');
+
done();
diff --git a/tests/wpt/web-platform-tests/fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.js b/tests/wpt/web-platform-tests/fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.js
index 921e0066c90..f2cd51ef1a1 100644
--- a/tests/wpt/web-platform-tests/fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.js
+++ b/tests/wpt/web-platform-tests/fs/FileSystemSyncAccessHandle-truncate.https.tentative.worker.js
@@ -37,4 +37,23 @@ sync_access_handle_test((t, handle) => {
assert_array_equals(expected, readBuffer);
}, 'test SyncAccessHandle.truncate after SyncAccessHandle.write');
+sync_access_handle_test((t, handle) => {
+ // The cursor will be at the end of the file after this write.
+ const writeBuffer = new Uint8Array(4);
+ writeBuffer.set([0, 1, 2, 3]);
+ handle.write(writeBuffer);
+
+ // Extending the file should not move the cursor.
+ handle.truncate(6);
+ let readBuffer = new Uint8Array(2);
+ let expected = new Uint8Array(2);
+ expected.set([0, 0]);
+ assert_equals(2, handle.read(readBuffer));
+ assert_array_equals(expected, readBuffer);
+
+ // Shortening the file should move the cursor to the new end.
+ handle.truncate(2);
+ assert_equals(0, handle.read(readBuffer));
+}, 'test SyncAccessHandle.truncate resets the file position cursor');
+
done();
diff --git a/tests/wpt/web-platform-tests/loading/early-hints/early-hints-response-time.h2.html b/tests/wpt/web-platform-tests/loading/early-hints/early-hints-response-time.h2.html
new file mode 100644
index 00000000000..ac70b3d332e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/loading/early-hints/early-hints-response-time.h2.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-delay.h2.py b/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-delay.h2.py
new file mode 100644
index 00000000000..ba8796bc11a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/loading/early-hints/resources/early-hints-delay.h2.py
@@ -0,0 +1,20 @@
+import time
+
+def handle_headers(frame, request, response):
+ early_hints = [
+ (b":status", b"103"),
+ (b"link", b"; rel=preload; as=script"),
+ ]
+
+ time.sleep(int(request.GET.first(b"delay1")) / 1000)
+ response.writer.write_raw_header_frame(headers=early_hints,
+ end_headers=True)
+
+ time.sleep(int(request.GET.first(b"delay2")) / 1000)
+ response.status = 200
+ response.headers[b"content-type"] = "text/html"
+ response.write_status_headers()
+
+
+def main(request, response):
+ response.writer.write_data(item="Hello", last=True)
diff --git a/tests/wpt/web-platform-tests/payment-handler/app-can-make-payment.js b/tests/wpt/web-platform-tests/payment-handler/app-can-make-payment.js
index cd27bce02e0..6b060dffb78 100644
--- a/tests/wpt/web-platform-tests/payment-handler/app-can-make-payment.js
+++ b/tests/wpt/web-platform-tests/payment-handler/app-can-make-payment.js
@@ -1,7 +1,4 @@
let responseType = 'canMakePayment-true';
-self.addEventListener('message', event => {
- responseType = event.data.responseType;
-});
self.addEventListener('canmakepayment', event => {
if (event.methodData) {
@@ -51,8 +48,10 @@ self.addEventListener('canmakepayment', event => {
}
});
-// Respond 'true' to the 'abortpayment' event to allow tests to use abort() to
-// close an ongoing PaymentRequest.
-self.addEventListener('abortpayment', event => {
- event.respondWith(true);
+self.addEventListener('paymentrequest', event => {
+ responseType = event.methodData[0].data.responseType;
+ event.respondWith({
+ methodName: event.methodData[0].supportedMethods,
+ details: {status: 'success'},
+ });
});
diff --git a/tests/wpt/web-platform-tests/payment-handler/app-simple.js b/tests/wpt/web-platform-tests/payment-handler/app-simple.js
index 833a01f47e0..9e70c08246b 100644
--- a/tests/wpt/web-platform-tests/payment-handler/app-simple.js
+++ b/tests/wpt/web-platform-tests/payment-handler/app-simple.js
@@ -1,3 +1,7 @@
+self.addEventListener('canmakepayment', event => {
+ event.respondWith(true);
+});
+
self.addEventListener('paymentrequest', event => {
const expectedId = 'test-payment-request-identifier';
if (event.paymentRequestId !== expectedId) {
@@ -17,11 +21,16 @@ self.addEventListener('paymentrequest', event => {
}
const methodData = event.methodData[0];
- const expectedMethodName = window.location.origin + '/payment-handler/payment-app/';
- if (methodData.supportedMethods !== expectedMethodName) {
- const msg = `Expected payment method name "${expectedMethodName}", but got "${
- methodData.supportedMethods
- }"`;
+ const expectedMethodNamePrefix = 'http';
+ if (!methodData.supportedMethods.startsWith(expectedMethodNamePrefix)) {
+ const msg = `Expected payment method name "${methodData.supportedMethods}" to start with ${expectedMethodNamePrefix}"`;
+ event.respondWith(Promise.reject(new Error(msg)));
+ return;
+ }
+
+ const expectedMethodNameSuffix = '/payment-handler/payment-request-event-manual-manifest.json';
+ if (!methodData.supportedMethods.endsWith(expectedMethodNameSuffix)) {
+ const msg = `Expected payment method name "${methodData.supportedMethods}" to end with ${expectedMethodNameSuffix}"`;
event.respondWith(Promise.reject(new Error(msg)));
return;
}
@@ -69,6 +78,7 @@ self.addEventListener('paymentrequest', event => {
}
event.respondWith({
- methodName: expectedMethodName,
+ methodName: methodData.supportedMethods,
+ details: {status: 'success'},
});
});
diff --git a/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event-manifest.json b/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event-manifest.json
new file mode 100644
index 00000000000..b31ea5ce08b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event-manifest.json
@@ -0,0 +1,15 @@
+{
+ "default_applications": ["can-make-payment-event-manifest.json"],
+ "name": "Test Payment Handler",
+ "icons": [
+ {
+ "src": "/images/rgrg-256x256.png",
+ "sizes": "256x256",
+ "type": "image/png"
+ }
+ ],
+ "serviceworker": {
+ "src": "app-can-make-payment.js",
+ "scope": "can-make-payment-event-payment-app/"
+ }
+}
diff --git a/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html b/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html
index 941c206e3b3..776c68be43a 100644
--- a/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html
+++ b/tests/wpt/web-platform-tests/payment-handler/can-make-payment-event.https.html
@@ -2,34 +2,25 @@
Tests for CanMakePaymentEvent
-
diff --git a/tests/wpt/web-platform-tests/payment-handler/change-payment-method-manual-manifest.json b/tests/wpt/web-platform-tests/payment-handler/change-payment-method-manual-manifest.json
index 8f33def77ba..7a4f5d6f7e2 100644
--- a/tests/wpt/web-platform-tests/payment-handler/change-payment-method-manual-manifest.json
+++ b/tests/wpt/web-platform-tests/payment-handler/change-payment-method-manual-manifest.json
@@ -10,6 +10,6 @@
],
"serviceworker": {
"src": "app-change-payment-method.js",
- "scope": "payment-app/"
+ "scope": "change-payment-method-manual-payment-app/"
}
}
diff --git a/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual-manifest.json b/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual-manifest.json
new file mode 100644
index 00000000000..2c023902b2a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual-manifest.json
@@ -0,0 +1,20 @@
+{
+ "default_applications": ["change-shipping-option-manual-manifest.json"],
+ "name": "Test Payment Handler",
+ "icons": [
+ {
+ "src": "/images/rgrg-256x256.png",
+ "sizes": "256x256",
+ "type": "image/png"
+ }
+ ],
+ "serviceworker": {
+ "src": "app-change-shipping-option.js",
+ "scope": "change-shipping-option-manual-payment-app/"
+ },
+ "payment": {
+ "supported_delegations": [
+ "shippingAddress"
+ ]
+ }
+}
diff --git a/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html b/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html
index 2511fc5ea05..6e97f2878af 100644
--- a/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html
+++ b/tests/wpt/web-platform-tests/payment-handler/change-shipping-option-manual.https.html
@@ -1,160 +1,144 @@
Tests for PaymentRequestEvent.changeShippingOption()
+
-
-
If the payment sheet is shown, please authorize the mock payment.
diff --git a/tests/wpt/web-platform-tests/payment-handler/payment-request-event-manual-manifest.json b/tests/wpt/web-platform-tests/payment-handler/payment-request-event-manual-manifest.json
new file mode 100644
index 00000000000..f97229762ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/payment-request-event-manual-manifest.json
@@ -0,0 +1,15 @@
+{
+ "default_applications": ["payment-request-event-manual-manifest.json"],
+ "name": "Test Payment Handler",
+ "icons": [
+ {
+ "src": "/images/rgrg-256x256.png",
+ "sizes": "256x256",
+ "type": "image/png"
+ }
+ ],
+ "serviceworker": {
+ "src": "app-simple.js",
+ "scope": "payment-request-event-manual-payment-app/"
+ }
+}
diff --git a/tests/wpt/web-platform-tests/payment-handler/payment-request-event-manual.https.html b/tests/wpt/web-platform-tests/payment-handler/payment-request-event-manual.https.html
index e595dd2160f..9cd20354631 100644
--- a/tests/wpt/web-platform-tests/payment-handler/payment-request-event-manual.https.html
+++ b/tests/wpt/web-platform-tests/payment-handler/payment-request-event-manual.https.html
@@ -2,87 +2,68 @@
Tests for PaymentRequestEvent
-
-
+
+
When the payment sheet is shown, please authorize the mock payment.
diff --git a/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual-manifest.json b/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual-manifest.json
new file mode 100644
index 00000000000..fd6bc89ef6d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual-manifest.json
@@ -0,0 +1,23 @@
+{
+ "default_applications": ["supports-shipping-contact-delegation-manual-manifest.json"],
+ "name": "Test Payment Handler",
+ "icons": [
+ {
+ "src": "/images/rgrg-256x256.png",
+ "sizes": "256x256",
+ "type": "image/png"
+ }
+ ],
+ "serviceworker": {
+ "src": "app-supports-shipping-contact-delegation.js",
+ "scope": "supports-shipping-contact-delegation-manual-payment-app/"
+ },
+ "payment": {
+ "supported_delegations": [
+ "shippingAddress",
+ "payerName",
+ "payerPhone",
+ "payerEmail"
+ ]
+ }
+}
diff --git a/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual.https.html b/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual.https.html
index 939e5429262..e3074b4e5e5 100644
--- a/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual.https.html
+++ b/tests/wpt/web-platform-tests/payment-handler/supports-shipping-contact-delegation-manual.https.html
@@ -1,88 +1,70 @@
Tests for Delegation of shipping and contact collection to PH
-
-
If the payment sheet is shown, please authorize the mock payment.
diff --git a/tests/wpt/web-platform-tests/preload/prefetch-cache.html b/tests/wpt/web-platform-tests/preload/prefetch-cache.html
new file mode 100644
index 00000000000..844b4d7be59
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/prefetch-cache.html
@@ -0,0 +1,37 @@
+
+Ensures that prefetch respects HTTP cache semantics
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/preload/prefetch-document.html b/tests/wpt/web-platform-tests/preload/prefetch-document.html
new file mode 100644
index 00000000000..bdb12bd58a0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/prefetch-document.html
@@ -0,0 +1,103 @@
+
+Ensures that prefetch works with documents
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/preload/prefetch-events.html b/tests/wpt/web-platform-tests/preload/prefetch-events.html
new file mode 100644
index 00000000000..7857b14f514
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/prefetch-events.html
@@ -0,0 +1,97 @@
+
+Ensures that prefetch respects HTTP cache semantics
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/preload/prefetch-headers.html b/tests/wpt/web-platform-tests/preload/prefetch-headers.html
new file mode 100644
index 00000000000..0a475c7d773
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/prefetch-headers.html
@@ -0,0 +1,35 @@
+
+Ensures that prefetch sends headers as per-spec
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/preload/prefetch-load-event.html b/tests/wpt/web-platform-tests/preload/prefetch-load-event.html
new file mode 100644
index 00000000000..c1cb75d52ea
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/prefetch-load-event.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/preload/prefetch-types.html b/tests/wpt/web-platform-tests/preload/prefetch-types.html
new file mode 100644
index 00000000000..276439e5440
--- /dev/null
+++ b/tests/wpt/web-platform-tests/preload/prefetch-types.html
@@ -0,0 +1,73 @@
+
+Ensures that prefetch is not specific to resource types
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/preload/resources/prefetch-helper.js b/tests/wpt/web-platform-tests/preload/resources/prefetch-helper.js
index cf0e0d583cd..367d4824c41 100644
--- a/tests/wpt/web-platform-tests/preload/resources/prefetch-helper.js
+++ b/tests/wpt/web-platform-tests/preload/resources/prefetch-helper.js
@@ -6,6 +6,7 @@ async function get_prefetch_info(href) {
async function prefetch(p = {}, t) {
const link = document.createElement("link");
link.rel = "prefetch";
+ link.as = p.as;
if (p.crossOrigin)
link.setAttribute("crossorigin", p.crossOrigin);
const uid = token();
diff --git a/tests/wpt/web-platform-tests/resize-observer/notify.html b/tests/wpt/web-platform-tests/resize-observer/notify.html
index 7f0e4485404..dc2e268b8a1 100644
--- a/tests/wpt/web-platform-tests/resize-observer/notify.html
+++ b/tests/wpt/web-platform-tests/resize-observer/notify.html
@@ -340,6 +340,50 @@ function test10() {
return helper.start();
}
+function test11() {
+ let t = createAndAppendElement("div");
+ t.style.display = "none";
+
+ let helper = new ResizeTestHelper(
+ "test11: display:none element should be notified",
+ [
+ {
+ setup: observer => {
+ observer.observe(t);
+ },
+ notify: entries => {
+ assert_equals(entries.length, 1, "1 pending notification");
+ assert_equals(entries[0].target, t, "target is t");
+ assert_equals(entries[0].contentRect.width, 0, "target width");
+ assert_equals(entries[0].contentRect.height, 0, "target height");
+ }
+ }
+ ]);
+ return helper.start(() => t.remove());
+}
+
+function test12() {
+ let t = createAndAppendElement("div");
+ t.style.width = "0px";
+
+ let helper = new ResizeTestHelper(
+ "test12: element sized 0x0 should be notified",
+ [
+ {
+ setup: observer => {
+ observer.observe(t);
+ },
+ notify: entries => {
+ assert_equals(entries.length, 1, "1 pending notification");
+ assert_equals(entries[0].target, t, "target is t");
+ assert_equals(entries[0].contentRect.width, 0, "target width");
+ assert_equals(entries[0].contentRect.height, 0, "target height");
+ }
+ }
+ ]);
+ return helper.start(() => t.remove());
+}
+
let guard;
test(_ => {
assert_own_property(window, "ResizeObserver");
@@ -357,6 +401,8 @@ test0()
.then(() => { return test8(); })
.then(() => { return test9(); })
.then(() => { return test10(); })
+ .then(() => { return test11(); })
+ .then(() => { return test12(); })
.then(() => { guard.done(); });
diff --git a/tests/wpt/web-platform-tests/resource-timing/interim-response-times.h2.html b/tests/wpt/web-platform-tests/resource-timing/interim-response-times.h2.html
new file mode 100644
index 00000000000..850ee7cb5f5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resource-timing/interim-response-times.h2.html
@@ -0,0 +1,64 @@
+
+
+
+
+Resource Timing: PerformanceResourceTiming interim resource times
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/resource-timing/interim-response-times.html b/tests/wpt/web-platform-tests/resource-timing/interim-response-times.html
new file mode 100644
index 00000000000..b922590d5d3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resource-timing/interim-response-times.html
@@ -0,0 +1,62 @@
+
+
+
+
+Resource Timing: PerformanceResourceTiming interim resource times
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/resource-timing/resource-timing-level1.js b/tests/wpt/web-platform-tests/resource-timing/resource-timing-level1.js
index 95b5cdfb1ed..6167777fe68 100644
--- a/tests/wpt/web-platform-tests/resource-timing/resource-timing-level1.js
+++ b/tests/wpt/web-platform-tests/resource-timing/resource-timing-level1.js
@@ -235,47 +235,6 @@ window.onload =
});
});
- // Test that responseStart uses the timing of 1XX responses by
- // synthesizing a delay between a 100 and 200 status, and verifying that
- // this delay is included before responseEnd. If the delay is not
- // included, this implies that the 200 status line was (incorrectly) used
- // for responseStart timing, despite the 100 response arriving earlier.
- //
- // Source: "In the case where more than one response is available for a
- // request, due to an Informational 1xx response, the reported
- // responseStart value is that of the first response to the last
- // request."
- [
- { initiator: "iframe", response: "(done)", mime: mimeHtml },
- { initiator: "xmlhttprequest", response: "(done)", mime: mimeText },
- { initiator: "script", response: '"";', mime: mimeScript },
- { initiator: "link", response: ".unused{}", mime: mimeCss },
- ]
- .forEach(function (template) {
- testCases.push({
- description: "'" + template.initiator + " responseStart uses 1XX (first) response timings'",
- test: function (test) {
- initiateFetch(
- test,
- template.initiator,
- getSyntheticUrl("status:100"
- + "&flush"
- + "&" + serverStepDelay + "ms"
- + "&status:200"
- + "&mime:" + template.mime
- + "&send:" + encodeURIComponent(template.response)),
- function (initiator, entry) {
- assert_greater_than_equal(
- entry.responseEnd,
- entry.responseStart + serverStepDelay,
- "HTTP/1.1 1XX (first) response should determine 'responseStart' timing.");
-
- test.done();
- });
- }
- });
- });
-
// Function to run the next case in the queue.
var currentTestIndex = -1;
function runNextCase() {
diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.h2.py b/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.h2.py
new file mode 100644
index 00000000000..be29e52b0e8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.h2.py
@@ -0,0 +1,23 @@
+from time import sleep
+
+def handle_headers(frame, request, response):
+ delay = int(request.GET.first(b"delay")) / 1000
+ sleep(delay)
+ response.writer.write_raw_header_frame(headers=[(b":status", b"100")], end_headers=True)
+ sleep(delay)
+
+ if b"with103" in request.GET:
+ response.writer.write_raw_header_frame(headers=[(b":status", b"103")], end_headers=True)
+ sleep(delay)
+
+ response.status = 200
+
+ if b"tao" in request.GET:
+ response.headers[b"timing-allow-origin"] = "*"
+
+ response.headers[b"content-type"] = "text/plain"
+ response.headers[b"access-control-allow-origin"] = "*"
+ response.write_status_headers()
+
+def main(request, response):
+ response.writer.write_data(item="Hello World", last=True)
diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.py b/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.py
new file mode 100644
index 00000000000..a47a63e9814
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resource-timing/resources/header-delay.py
@@ -0,0 +1,27 @@
+from time import sleep
+
+def main(request, response):
+ delay = int(request.GET.first(b"delay")) / 1000
+
+ # TODO: make this exported from ResponseWriter
+ handler = response.writer._handler
+ sleep(delay)
+ handler.send_response(100)
+ handler.end_headers()
+ sleep(delay)
+
+ if b"with103" in request.GET:
+ handler.send_response(103)
+ handler.send_header("Link", ";rel=preload;as=script")
+ handler.end_headers()
+ sleep(delay)
+
+ handler.send_response(200)
+
+ if b"tao" in request.GET:
+ handler.send_header("timing-allow-origin", "*")
+
+ handler.send_header("content-type", "text/plain")
+ handler.send_header("access-control-allow-origin", "*")
+ handler.end_headers()
+ handler.wfile.write(bytes("Hello World", "utf8"))
diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-subapps.js b/tests/wpt/web-platform-tests/resources/chromium/mock-subapps.js
index 467d932465b..ddbf27649e1 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/mock-subapps.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/mock-subapps.js
@@ -30,7 +30,7 @@ self.SubAppsServiceTest = (() => {
return Promise.resolve({
result: {
code: testInternal.serviceResultCode,
- subApps: testInternal.listCallReturnValue,
+ subAppsList: testInternal.listCallReturnValue,
}
});
}
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-multiple.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-multiple.html
index 8ae37bf7519..7eccdf89b6c 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-multiple.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-multiple.html
@@ -33,16 +33,16 @@
}
#top_scroller {
- scroll-timeline: block top_timeline;
+ scroll-timeline: top_timeline block;
}
#bottom_scroller {
- scroll-timeline: inline bottom_timeline;
+ scroll-timeline: bottom_timeline inline;
}
#left_scroller {
- scroll-timeline: block left_timeline;
+ scroll-timeline: left_timeline block;
}
#right_scroller {
- scroll-timeline: inline right_timeline;
+ scroll-timeline: right_timeline inline;
}
#element {
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-writing-mode.html b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-writing-mode.html
index 90912bfc227..37b4dfdf549 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-writing-mode.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-axis-writing-mode.html
@@ -22,23 +22,23 @@
scroll-timeline: timeline_initial_axis;
}
#timeline_vertical {
- scroll-timeline: vertical timeline_vertical;
+ scroll-timeline: timeline_vertical vertical;
}
#timeline_horizontal {
- scroll-timeline: horizontal timeline_horizontal;
+ scroll-timeline: timeline_horizontal horizontal;
}
#timeline_block_in_horizontal {
- scroll-timeline: block timeline_block_in_horizontal;
+ scroll-timeline: timeline_block_in_horizontal block;
}
#timeline_inline_in_horizontal {
- scroll-timeline: inline timeline_inline_in_horizontal;
+ scroll-timeline: timeline_inline_in_horizontal inline;
}
#timeline_block_in_vertical {
- scroll-timeline: block timeline_block_in_vertical;
+ scroll-timeline: timeline_block_in_vertical block;
writing-mode: vertical-lr;
}
#timeline_inline_in_vertical {
- scroll-timeline: inline timeline_inline_in_vertical;
+ scroll-timeline: timeline_inline_in_vertical inline;
writing-mode: vertical-lr;
}
#container > div {
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-name-tree-scoped.html b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-name-shadow.html
similarity index 71%
rename from tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-name-tree-scoped.html
rename to tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-name-shadow.html
index 622a582cce9..3d6a55883e0 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-name-tree-scoped.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-name-shadow.html
@@ -1,7 +1,8 @@
-scroll-timelime-name and tree-scoped references
+scroll-timeline-name and tree-scoped references
-
+
+
@@ -59,8 +60,8 @@
assert_equals(target.getAnimations().length, 1);
let anim = target.getAnimations()[0];
assert_not_equals(anim.timeline, null);
- assert_equals(anim.timeline.axis, 'horizontal');
- }, 'Outer animation can not see scroll timeline defined by :host');
+ assert_equals(anim.timeline.axis, 'vertical');
+ }, 'Outer animation can see scroll timeline defined by :host');
@@ -97,8 +98,8 @@
assert_equals(target.getAnimations().length, 1);
let anim = target.getAnimations()[0];
assert_not_equals(anim.timeline, null);
- assert_equals(anim.timeline.axis, 'horizontal');
- }, 'Outer animation can not see scroll timeline defined by ::slotted');
+ assert_equals(anim.timeline.axis, 'vertical');
+ }, 'Outer animation can see scroll timeline defined by ::slotted');
@@ -142,3 +143,43 @@
assert_equals(anim.timeline.axis, 'horizontal');
}, 'Inner animation can see scroll timeline defined by ::part');
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-shorthand.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-shorthand.tentative.html
index b340ff34ffe..c76ee9e22bb 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-shorthand.tentative.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/scroll-timeline-shorthand.tentative.html
@@ -8,12 +8,12 @@
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-name-tree-scoped.html b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-name-shadow.html
similarity index 71%
rename from tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-name-tree-scoped.html
rename to tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-name-shadow.html
index c216c345ed9..bf93d8c160d 100644
--- a/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-name-tree-scoped.html
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-name-shadow.html
@@ -1,7 +1,8 @@
-view-timelime-name and tree-scoped references
+view-timeline-name and and shadow trees
-
+
+
@@ -60,8 +61,8 @@
assert_equals(target.getAnimations().length, 1);
let anim = target.getAnimations()[0];
assert_not_equals(anim.timeline, null);
- assert_equals(anim.timeline.axis, 'horizontal');
- }, 'Outer animation can not see view timeline defined by :host');
+ assert_equals(anim.timeline.axis, 'vertical');
+ }, 'Outer animation can see view timeline defined by :host');
@@ -98,8 +99,8 @@
assert_equals(target.getAnimations().length, 1);
let anim = target.getAnimations()[0];
assert_not_equals(anim.timeline, null);
- assert_equals(anim.timeline.axis, 'horizontal');
- }, 'Outer animation can not see view timeline defined by ::slotted');
+ assert_equals(anim.timeline.axis, 'vertical');
+ }, 'Outer animation can see view timeline defined by ::slotted');
@@ -143,3 +144,43 @@
assert_equals(anim.timeline.axis, 'horizontal');
}, 'Inner animation can see view timeline defined by ::part');
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-range-animation.html b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-range-animation.html
new file mode 100644
index 00000000000..32febb2f2b6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/scroll-animations/css/view-timeline-range-animation.html
@@ -0,0 +1,145 @@
+
+Animations using named timeline ranges
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/storage-access-api/helpers.js b/tests/wpt/web-platform-tests/storage-access-api/helpers.js
index de9fba2d1c4..99ba7923413 100644
--- a/tests/wpt/web-platform-tests/storage-access-api/helpers.js
+++ b/tests/wpt/web-platform-tests/storage-access-api/helpers.js
@@ -9,28 +9,41 @@ function processQueryParams() {
};
}
-function CreateFrameAndRunTests(setUpFrame) {
+// Create an iframe element, set it up using `setUpFrame`, and optionally fetch
+// tests in it. Returns the created frame, after it has loaded.
+function CreateFrameHelper(setUpFrame, fetchTests) {
const frame = document.createElement('iframe');
const promise = new Promise((resolve, reject) => {
- frame.onload = resolve;
+ frame.onload = () => resolve(frame);
frame.onerror = reject;
});
setUpFrame(frame);
- fetch_tests_from_window(frame.contentWindow);
+ if (fetchTests) {
+ fetch_tests_from_window(frame.contentWindow);
+ }
return promise;
}
-function RunTestsInIFrame(sourceURL) {
- return CreateFrameAndRunTests((frame) => {
+// Create an iframe element with content loaded from `sourceURL`, append it to
+// the document, and optionally fetch tests. Returns the loaded frame, once
+// ready.
+function CreateFrame(sourceURL, fetchTests = false) {
+ return CreateFrameHelper((frame) => {
frame.src = sourceURL;
document.body.appendChild(frame);
- });
+ }, fetchTests);
+}
+
+// Create a new iframe with content loaded from `sourceURL`, and fetches tests.
+// Returns the loaded frame, once ready.
+function RunTestsInIFrame(sourceURL) {
+ return CreateFrame(sourceURL, true);
}
function RunTestsInNestedIFrame(sourceURL) {
- return CreateFrameAndRunTests((frame) => {
+ return CreateFrameHelper((frame) => {
document.body.appendChild(frame);
frame.contentDocument.write(`
@@ -41,7 +54,7 @@ function RunTestsInNestedIFrame(sourceURL) {
`);
frame.contentDocument.close();
- });
+ }, true);
}
function RunRequestStorageAccessInDetachedFrame() {
@@ -61,3 +74,61 @@ function RunRequestStorageAccessViaDomParser() {
function RunCallbackWithGesture(callback) {
return test_driver.bless('run callback with user gesture', callback);
}
+
+// Sends a message to the given target window, and waits for the provided
+// promise to resolve.
+function PostMessageAndAwait(message, targetWindow, promise) {
+ targetWindow.postMessage(message, "*");
+ return promise;
+}
+
+// Returns a promise that resolves when the next "reply" is received via
+// postMessage.
+function ReplyPromise() {
+ return new Promise((resolve) => {
+ window.addEventListener("message", (event) => {
+ resolve(event.data);
+ }, { once: true });
+ });
+}
+
+// Returns a promise that resolves when the given frame fires its load event.
+function ReloadPromise(frame) {
+ return new Promise((resolve) => {
+ frame.addEventListener("load", (event) => {
+ resolve();
+ }, { once: true });
+ });
+}
+
+// Reads cookies via document.cookie in the given frame.
+function GetJSCookiesFromFrame(frame) {
+ return PostMessageAndAwait({ command: "document.cookie" }, frame.contentWindow, ReplyPromise());
+}
+
+// Reads cookies via the `httpCookies` variable in the given frame.
+function GetHTTPCookiesFromFrame(frame) {
+ return PostMessageAndAwait({ command: "httpCookies" }, frame.contentWindow, ReplyPromise());
+}
+
+// Executes document.hasStorageAccess in the given frame.
+function FrameHasStorageAccess(frame) {
+ return PostMessageAndAwait({ command: "hasStorageAccess" }, frame.contentWindow, ReplyPromise());
+}
+
+// Executes document.requestStorageAccess in the given frame.
+function RequestStorageAccessInFrame(frame) {
+ return PostMessageAndAwait({ command: "requestStorageAccess" }, frame.contentWindow, ReplyPromise());
+}
+
+// Executes test_driver.set_permission in the given frame, with the provided
+// arguments.
+function SetPermissionInFrame(frame, args = []) {
+ return PostMessageAndAwait({ command: "set_permission", args }, frame.contentWindow, ReplyPromise());
+}
+
+// Executes `location.reload()` in the given frame. The returned promise
+// resolves when the frame has finished reloading.
+function FrameInitiatedReload(frame) {
+ return PostMessageAndAwait({ command: "reload" }, frame.contentWindow, ReloadPromise(frame));
+}
diff --git a/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js b/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js
new file mode 100644
index 00000000000..5081bb4a9cb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js
@@ -0,0 +1,48 @@
+// META: script=helpers.js
+// META: script=/cookies/resources/cookie-helper.sub.js
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+'use strict';
+
+(async function() {
+ // This is on the www subdomain, so it's cross-origin from the current document.
+ const wwwHost = "https://{{domains[www]}}:{{ports[https][0]}}";
+
+ // Set up storage access rules
+ try {
+ await test_driver.set_storage_access(wwwHost + "/", "*", "blocked");
+ } catch (e) {
+ // Ignore, can be unimplemented if the platform blocks cross-site cookies
+ // by default. If this failed without default blocking we'll notice it later
+ // in the test.
+ }
+
+ promise_test(async (t) => {
+ const responder_html = `${wwwHost}/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js`;
+ const frame = await CreateFrame(responder_html);
+
+ t.add_cleanup(async () => {
+ await test_driver.delete_all_cookies();
+ await SetPermissionInFrame(frame, [{ name: 'storage-access' }, 'prompt']);
+ });
+
+ await SetPermissionInFrame(frame, [{ name: 'storage-access' }, 'granted']);
+ await fetch(`${wwwHost}/cookies/resources/set.py?cookie=monster;Secure;SameSite=None;Path=/`,
+ { mode: "no-cors", credentials: "include" });
+
+ assert_false(await FrameHasStorageAccess(frame), "frame initially does not have storage access.");
+ assert_false(cookieStringHasCookie("cookie", "monster", await GetJSCookiesFromFrame(frame)), "frame cannot access cookies via JS.");
+ assert_false(cookieStringHasCookie("cookie", "monster", await GetHTTPCookiesFromFrame(frame)), "frame's fetch was done without credentials.");
+
+ assert_true(await RequestStorageAccessInFrame(frame), "requestStorageAccess resolves without requiring a gesture.");
+
+ assert_true(await FrameHasStorageAccess(frame), "frame has storage access after request.");
+ assert_true(cookieStringHasCookie("cookie", "monster", await GetJSCookiesFromFrame(frame)), "frame has cookie access via JS after request.");
+
+ await FrameInitiatedReload(frame);
+
+ assert_true(await FrameHasStorageAccess(frame), "frame has storage access after refresh.");
+ assert_true(cookieStringHasCookie("cookie", "monster", await GetJSCookiesFromFrame(frame)), "frame can access cookies via JS after refresh.");
+ assert_true(cookieStringHasCookie("cookie", "monster", await GetHTTPCookiesFromFrame(frame)), "frame's fetch was credentialed.");
+ }, "Self-initiated same-origin navigations preserve storage access");
+})();
diff --git a/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js b/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js
new file mode 100644
index 00000000000..75ea90744ff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-sibling-iframes.sub.https.window.js
@@ -0,0 +1,55 @@
+// META: script=helpers.js
+// META: script=/cookies/resources/cookie-helper.sub.js
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+'use strict';
+
+(async function() {
+ // This is on the www subdomain, so it's cross-origin from the current document.
+ const wwwHost = "https://{{domains[www]}}:{{ports[https][0]}}";
+
+ // Set up storage access rules
+ try {
+ await test_driver.set_storage_access(wwwHost + "/", "*", "blocked");
+ } catch (e) {
+ // Ignore, can be unimplemented if the platform blocks cross-site cookies
+ // by default. If this failed without default blocking we'll notice it later
+ // in the test.
+ }
+
+ promise_test(async (t) => {
+ const responder_html = `${wwwHost}/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js`;
+ const [frame1, frame2] = await Promise.all([
+ CreateFrame(responder_html),
+ CreateFrame(responder_html),
+ ]);
+
+ t.add_cleanup(async () => {
+ await test_driver.delete_all_cookies();
+ await SetPermissionInFrame(frame1, [{ name: 'storage-access' }, 'prompt']);
+ });
+
+ await SetPermissionInFrame(frame1, [{ name: 'storage-access' }, 'granted']);
+ await fetch(`${wwwHost}/cookies/resources/set.py?cookie=monster;Secure;SameSite=None;Path=/`,
+ { mode: "no-cors", credentials: "include" });
+
+ assert_false(await FrameHasStorageAccess(frame1), "frame1 should not have storage access initially.");
+ assert_false(await FrameHasStorageAccess(frame2), "frame2 should not have storage access initially.");
+
+ assert_false(cookieStringHasCookie("cookie", "monster", await GetJSCookiesFromFrame(frame1)), "frame1 should not have access via document.cookie.");
+ assert_false(cookieStringHasCookie("cookie", "monster", await GetJSCookiesFromFrame(frame2)), "frame2 should not have access via document.cookie.");
+
+ assert_true(await RequestStorageAccessInFrame(frame1), "requestStorageAccess doesn't require a gesture since the permission has already been granted.");
+
+ assert_true(await FrameHasStorageAccess(frame1), "frame1 should have storage access now.");
+ assert_true(cookieStringHasCookie("cookie", "monster", await GetJSCookiesFromFrame(frame1)), "frame1 should now be able to access cookies via document.cookie.");
+
+ assert_false(await FrameHasStorageAccess(frame2), "frame2 should still not have storage access.");
+ assert_false(cookieStringHasCookie("cookie", "monster", await GetJSCookiesFromFrame(frame2)), "frame2 should should still be unable to access cookies via document.cookie");
+
+ assert_true(await RequestStorageAccessInFrame(frame2), "frame2 should be able to get storage access without a gesture.");
+
+ assert_true(await FrameHasStorageAccess(frame2), "frame2 should have storage access after it requested it.");
+ assert_true(cookieStringHasCookie("cookie", "monster", await GetJSCookiesFromFrame(frame2)), "frame2 should be able to access cookies via document.cookie after getting storage access.");
+ }, "Grants have per-frame scope");
+})();
diff --git a/tests/wpt/web-platform-tests/storage-access-api/resources/embedded_responder.js b/tests/wpt/web-platform-tests/storage-access-api/resources/embedded_responder.js
new file mode 100644
index 00000000000..0d563e6b30c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/storage-access-api/resources/embedded_responder.js
@@ -0,0 +1,34 @@
+// META: script=/resources/testdriver.js
+// META: script=/resources/testdriver-vendor.js
+"use strict";
+
+test_driver.set_test_context(window.top);
+
+window.addEventListener("message", async (event) => {
+ function reply(data) {
+ event.source.postMessage(data, event.origin);
+ }
+
+ switch (event.data["command"]) {
+ case "hasStorageAccess":
+ reply(await document.hasStorageAccess());
+ break;
+ case "requestStorageAccess": {
+ const obtainedAccess = await document.requestStorageAccess()
+ .then(() => true, () => false);
+ reply(obtainedAccess);
+ }
+ break;
+ case "document.cookie":
+ reply(document.cookie);
+ break;
+ case "set_permission":
+ await test_driver.set_permission(...event.data.args);
+ reply(undefined);
+ break;
+ case "reload":
+ window.location.reload();
+ break;
+ default:
+ }
+});
diff --git a/tests/wpt/web-platform-tests/storage-access-api/resources/script-with-cookie-header.py b/tests/wpt/web-platform-tests/storage-access-api/resources/script-with-cookie-header.py
new file mode 100644
index 00000000000..83129a55595
--- /dev/null
+++ b/tests/wpt/web-platform-tests/storage-access-api/resources/script-with-cookie-header.py
@@ -0,0 +1,19 @@
+def main(request, response):
+ script = request.GET.first(b"script")
+ cookie_header = request.headers.get(b"Cookie", b"")
+
+ body = b"""
+
+
+ Subframe with HTTP Cookies
+
+
+
+
+
+
+ """ % (cookie_header, script)
+
+ return (200, [], body)
diff --git a/tests/wpt/web-platform-tests/subapps/add-error.tentative.https.html b/tests/wpt/web-platform-tests/subapps/add-error.tentative.https.html
index c9db29b62de..3dafdcd5aca 100644
--- a/tests/wpt/web-platform-tests/subapps/add-error.tentative.https.html
+++ b/tests/wpt/web-platform-tests/subapps/add-error.tentative.https.html
@@ -20,15 +20,9 @@ promise_test(async t => {
// Detach the frame.
iframe.remove();
- const same_origin_url = document.location.origin + '/sub-app';
- let subapp = {};
- let install_options = {};
- install_options["install_url"] = same_origin_url;
- subapp[same_origin_url] = install_options;
-
// At this point the iframe is detached and unloaded, and its execution
// context is gone.
- await promise_rejects_dom(t, 'NotFoundError', iframeDOMException, iframeNavigator.subApps.add(subapp));
+ await promise_rejects_dom(t, 'NotFoundError', iframeDOMException, iframeNavigator.subApps.add({}));
}, "The object is no longer associated to a document.");
promise_test(async t => {
@@ -39,46 +33,9 @@ promise_test(async t => {
const iframeDOMException = iframe.contentWindow.DOMException;
t.add_cleanup(() => iframe.remove());
- const same_origin_url = document.location.origin + '/sub-app';
- let subapp = {};
- let install_options = {};
- install_options["install_url"] = same_origin_url;
- subapp[same_origin_url] = install_options;
-
- await promise_rejects_dom(t, 'InvalidStateError', iframeDOMException, iframeNavigator.subApps.add(subapp));
+ await promise_rejects_dom(t, 'InvalidStateError', iframeDOMException, iframeNavigator.subApps.add({}));
}, "API is only supported in top-level browsing contexts.");
-promise_test(async t => {
- const wrong_origin_url = 'https://some.other.origin/sub-app';
- let subapp = {};
- let install_options = {};
- install_options["install_url"] = wrong_origin_url;
- subapp[wrong_origin_url] = install_options;
-
- await test_driver.bless("installing a subapp", async function () {
- await promise_rejects_dom(t, 'URLMismatchError', navigator.subApps.add(subapp));
- });
-}, 'Wrong origin URL argument.');
-
-promise_test(async t => {
- const same_origin_url = document.location.origin + '/sub-app';
-
- let add_call_params = {};
- let install_options = {};
- install_options["install_url"] = same_origin_url;
- add_call_params[same_origin_url] = install_options;
-
- let mocked_response = [
- { unhashedAppId: same_origin_url, resultCode: AddCallResultCode.EXPECTED_APP_ID_CHECK_FAILED }
- ]
- let expected_results = {};
- expected_results[same_origin_url] = "expected-app-id-check-failed";
-
- await test_driver.bless("installing a subapp", async function () {
- await subapps_add_expect_reject_with_result(t, add_call_params, mocked_response, expected_results);
- });
-}, 'Service failed to add single sub-app.');
-
promise_test(async t => {
const same_origin_url = document.location.origin + '/sub-app';
@@ -104,25 +61,35 @@ promise_test(async t => {
}, 'Too many subapps at once.');
promise_test(async t => {
- let add_call_params = {};
+ const full_url = document.location.origin + '/sub-app';
- const url_1 = document.location.origin + '/sub-app-1';
- let install_options_1 = {};
- install_options_1["install_url"] = url_1;
- add_call_params[url_1] = install_options_1;
+ let add_call_params = {
+ [full_url]: {"install_url": full_url},
+ };
- const url_2 = document.location.origin + '/sub-app-2';
- let install_options_2 = {};
- install_options_2["install_url"] = url_2;
- add_call_params[url_2] = install_options_2;
+ await test_driver.bless("installing subapps", async function () {
+ await promise_rejects_dom(t, 'NotSupportedError', navigator.subApps.add(add_call_params));
+ });
+}, 'API supports only root-relative paths.');
+
+promise_test(async t => {
+ const url_1 = '/sub-app-1';
+ const url_2 = '/sub-app-2';
+
+ let add_call_params = {
+ [url_1]: {"install_url": url_1},
+ [url_2]: {"install_url": url_2},
+ };
let mocked_response = [
- { unhashedAppId: url_1, resultCode: AddCallResultCode.EXPECTED_APP_ID_CHECK_FAILED },
- { unhashedAppId: url_2, resultCode: AddCallResultCode.INSTALL_URL_INVALID }
- ]
- let expected_results = {};
- expected_results[url_1] = "expected-app-id-check-failed";
- expected_results[url_2] = "install-url-invalid";
+ { unhashedAppIdPath: url_1, resultCode: AddCallResultCode.EXPECTED_APP_ID_CHECK_FAILED },
+ { unhashedAppIdPath: url_2, resultCode: AddCallResultCode.INSTALL_URL_INVALID }
+ ];
+
+ let expected_results = {
+ [url_1]: "expected-app-id-check-failed",
+ [url_2]: "install-url-invalid",
+ };
await test_driver.bless("installing a subapp", async function () {
await subapps_add_expect_reject_with_result(t, add_call_params, mocked_response, expected_results);
@@ -130,28 +97,27 @@ promise_test(async t => {
}, 'Service failed to add two sub-apps.');
promise_test(async t => {
- let add_call_params = {};
+ const url_1 = '/sub-app-1';
+ const url_2 = '/sub-app-2';
- const url_1 = document.location.origin + '/sub-app-1';
- let install_options_1 = {};
- install_options_1["install_url"] = url_1;
- add_call_params[url_1] = install_options_1;
-
- const url_2 = document.location.origin + '/sub-app-2';
- let install_options_2 = {};
- install_options_2["install_url"] = url_2;
- add_call_params[url_2] = install_options_2;
+ let add_call_params = {
+ [url_1]: {"install_url": url_1},
+ [url_2]: {"install_url": url_2},
+ };
let mocked_response = [
- { unhashedAppId: url_1, resultCode: AddCallResultCode.SUCCESS_NEW_INSTALL },
- { unhashedAppId: url_2, resultCode: AddCallResultCode.EXPECTED_APP_ID_CHECK_FAILED }
- ]
- let expected_results = {};
- expected_results[url_1] = "success-new-install";
- expected_results[url_2] = "expected-app-id-check-failed";
+ { unhashedAppIdPath: url_1, resultCode: AddCallResultCode.SUCCESS_NEW_INSTALL },
+ { unhashedAppIdPath: url_2, resultCode: AddCallResultCode.EXPECTED_APP_ID_CHECK_FAILED }
+ ];
+
+ let expected_results = {
+ [url_1]: "success-new-install",
+ [url_2]: "expected-app-id-check-failed",
+ };
await test_driver.bless("installing a subapp", async function () {
await subapps_add_expect_reject_with_result(t, add_call_params, mocked_response, expected_results);
});
}, 'Service added one sub-app failed to add another sub-app.');
+
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/subapps/add-success.tentative.https.html b/tests/wpt/web-platform-tests/subapps/add-success.tentative.https.html
index b2751adcb8f..fee7c6605c6 100644
--- a/tests/wpt/web-platform-tests/subapps/add-success.tentative.https.html
+++ b/tests/wpt/web-platform-tests/subapps/add-success.tentative.https.html
@@ -9,18 +9,19 @@
diff --git a/tests/wpt/web-platform-tests/webcodecs/videoFrame-serialization.crossAgentCluster.https.html b/tests/wpt/web-platform-tests/webcodecs/videoFrame-serialization.crossAgentCluster.https.html
index 5822cb8415e..e07f61072dd 100644
--- a/tests/wpt/web-platform-tests/webcodecs/videoFrame-serialization.crossAgentCluster.https.html
+++ b/tests/wpt/web-platform-tests/webcodecs/videoFrame-serialization.crossAgentCluster.https.html
@@ -4,16 +4,27 @@
+
@@ -29,13 +40,13 @@ const CROSSORIGIN_HELPER = CROSSORIGIN_BASE + HELPER;
promise_test(async () => {
const target = (await appendIframe(SAMEORIGIN_HELPER)).contentWindow;
let frame = createVideoFrame(10);
- assert_true(await canSendVideoFrame(target, frame));
+ assert_true(await canSerializeVideoFrame(target, frame));
}, 'Verify frames can be passed within the same agent clusters');
promise_test(async () => {
const target = (await appendIframe(CROSSORIGIN_HELPER)).contentWindow;
let frame = createVideoFrame(20);
- assert_false(await canSendVideoFrame(target, frame));
+ assert_false(await canSerializeVideoFrame(target, frame));
}, 'Verify frames cannot be passed accross the different agent clusters');
promise_test(async () => {
@@ -44,7 +55,7 @@ promise_test(async () => {
});
const worker = new Worker(window.URL.createObjectURL(blob));
let frame = createVideoFrame(30);
- worker.postMessage(frame);
+ worker.postMessage({frame: frame, transfer: false});
const received = await new Promise(resolve => worker.onmessage = e => {
resolve(e.data);
});
@@ -58,7 +69,7 @@ promise_test(async () => {
});
const worker = new SharedWorker(window.URL.createObjectURL(blob));
let frame = createVideoFrame(40);
- worker.port.postMessage(frame);
+ worker.port.postMessage({frame: frame, transfer: false});
const received = await new Promise(resolve => worker.port.onmessage = e => {
resolve(e.data);
});
@@ -79,6 +90,60 @@ promise_test(async () => {
assert_equals(received, 'NOT_RECEIVED');
}, 'Verify frames cannot be passed to serviceworker');
+promise_test(async () => {
+ const target = (await appendIframe(SAMEORIGIN_HELPER)).contentWindow;
+ let frame = createVideoFrame(60);
+ assert_true(await canTransferVideoFrame(target, frame));
+ assert_true(isFrameClosed(frame));
+}, 'Verify frames can be transferred within the same agent clusters');
+
+promise_test(async () => {
+ const target = (await appendIframe(CROSSORIGIN_HELPER)).contentWindow;
+ let frame = createVideoFrame(70);
+ assert_false(await canTransferVideoFrame(target, frame));
+}, 'Verify frames cannot be transferred accross the different agent clusters');
+
+promise_test(async () => {
+ const blob = new Blob([document.querySelector('#workerCode').textContent], {
+ type: 'text/javascript',
+ });
+ const worker = new Worker(window.URL.createObjectURL(blob));
+ let frame = createVideoFrame(80);
+ worker.postMessage({frame: frame, transfer: true}, [frame]);
+ const received = await new Promise(resolve => worker.onmessage = e => {
+ resolve(e.data);
+ });
+ assert_equals(received.toString(), '[object VideoFrame]');
+ assert_equals(received.timestamp, 80);
+}, 'Verify frames can be transferred back and forth between main and worker');
+
+promise_test(async () => {
+ const blob = new Blob([document.querySelector('#sharedWorkerCode').textContent], {
+ type: 'text/javascript',
+ });
+ const worker = new SharedWorker(window.URL.createObjectURL(blob));
+ let frame = createVideoFrame(90);
+ worker.port.postMessage({frame: frame, transfer: true});
+ const received = await new Promise(resolve => worker.port.onmessage = e => {
+ resolve(e.data);
+ });
+ assert_equals(received.toString(), '[object VideoFrame]');
+ assert_equals(received.timestamp, 90);
+}, 'Verify frames can be transferred back and forth between main and sharedworker');
+
+promise_test(async () => {
+ navigator.serviceWorker.register('videoFrame-serialization.crossAgentCluster.serviceworker.js');
+ navigator.serviceWorker.ready.then((registration) => {
+ let frame = createVideoFrame(100);
+ registration.active.postMessage(frame, [frame]);
+ registration.active.postMessage({'id': 100});
+ });
+ const received = await new Promise(resolve => navigator.serviceWorker.onmessage = (e) => {
+ resolve(e.data);
+ });
+ assert_equals(received, 'NOT_RECEIVED');
+}, 'Verify frames cannot be transferred to serviceworker');
+
function appendIframe(src) {
const frame = document.createElement('iframe');
document.body.appendChild(frame);
@@ -99,8 +164,22 @@ function createVideoFrame(ts) {
});
}
-function canSendVideoFrame(target, vf) {
- target.postMessage(vf, '*');
+function canSerializeVideoFrame(target, vf, transfer) {
+ return canPostVideoFrame(target, vf, false);
+};
+
+function canTransferVideoFrame(target, vf, transfer) {
+ return canPostVideoFrame(target, vf, true);
+};
+
+function canPostVideoFrame(target, vf, transfer) {
+ if (transfer) {
+ target.postMessage(vf, '*', [vf]);
+ assert_true(isFrameClosed(vf));
+ } else {
+ target.postMessage(vf, '*');
+ }
+ // vf.timestamp doesn't change after vf is closed, so it's fine to use it.
target.postMessage({'id': vf.timestamp}, '*');
return new Promise(resolve => window.onmessage = e => {
resolve(e.data == 'RECEIVED');
diff --git a/tests/wpt/web-platform-tests/xhr/xhr-authorization-redirect.any.js b/tests/wpt/web-platform-tests/xhr/xhr-authorization-redirect.any.js
index e9a4db44f72..beed7c31d70 100644
--- a/tests/wpt/web-platform-tests/xhr/xhr-authorization-redirect.any.js
+++ b/tests/wpt/web-platform-tests/xhr/xhr-authorization-redirect.any.js
@@ -1,4 +1,4 @@
-// META: global=window,worker
+// META: global=window,sharedworker,dedicatedworker
// META: script=/common/get-host-info.sub.js
const authorizationValue = "Basic " + btoa("user:pass");