aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <infra@servo.org>2023-01-26 17:14:46 +0100
committerGitHub <noreply@github.com>2023-01-26 17:14:46 +0100
commit9dfae50c5e9802fce718bfac49f1023d80e13680 (patch)
tree369eb4c928dc99ddeb623abf9dbeac88c761aa4e
parent5a0b67cfc422796b6981ed4ffb6ec92997ef7b27 (diff)
parentcda7a1049826810ad88dc184b466d7e2fb43b345 (diff)
downloadservo-9dfae50c5e9802fce718bfac49f1023d80e13680.tar.gz
servo-9dfae50c5e9802fce718bfac49f1023d80e13680.zip
Auto merge of #29300 - servo:wpt_update_26-01-2023, r=jdm
Sync WPT with upstream (26-01-2023) Automated downstream sync of changes from upstream as of 26-01-2023 [no-wpt-sync] r? @servo-wpt-sync
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini2
-rw-r--r--tests/wpt/metadata/MANIFEST.json184
-rw-r--r--tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini15
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-normal-015a.xht.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/line-break/line-break-strict-015a.xht.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/break-spaces-011.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini373
-rw-r--r--tests/wpt/metadata/css/css-transitions/properties-value-inherit-001.html.ini723
-rw-r--r--tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini150
-rw-r--r--tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini3
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini6
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini3
-rw-r--r--tests/wpt/metadata/css/mediaqueries/match-media-parsing.html.ini18
-rw-r--r--tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini5
-rw-r--r--tests/wpt/metadata/fetch/content-length/parsing.window.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini6
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini6
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini3
-rw-r--r--tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini2
-rw-r--r--tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini3
-rw-r--r--tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_canplay.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/forms/historical.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.tentative.html.ini18
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini3
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini3
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html.ini5
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html.ini3
-rw-r--r--tests/wpt/metadata/resource-timing/content-type-parsing.html.ini6
-rw-r--r--tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini23
-rw-r--r--tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini3
-rw-r--r--tests/wpt/metadata/resource-timing/response-status-code.html.ini172
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini1
-rw-r--r--tests/wpt/metadata/webmessaging/with-ports/017.html.ini4
-rw-r--r--tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini3
-rw-r--r--tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-001.html78
-rw-r--r--tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-002.html70
-rw-r--r--tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-003.html89
-rw-r--r--tests/wpt/web-platform-tests/css/css-nesting/parsing.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html5
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html42
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html55
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-scroll-snap/snap-after-relayout/focus-element-no-snap.html51
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht4
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht4
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht8
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht8
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-011.html31
-rw-r--r--tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-view-transitions/only-child-on-root-element-with-view-transition.html46
-rw-r--r--tests/wpt/web-platform-tests/css/mediaqueries/match-media-parsing.html34
-rw-r--r--tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py22
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/gentest.py8
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py345
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py376
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html9
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.tentative.html126
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini4
-rw-r--r--tests/wpt/web-platform-tests/interfaces/payment-handler.idl23
-rw-r--r--tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html9
-rw-r--r--tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js16
-rw-r--r--tests/wpt/web-platform-tests/lint.ignore2
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js2
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html379
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/register-and-activate-service-worker.js28
-rw-r--r--tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html1
-rw-r--r--tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html20
-rw-r--r--tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html20
-rw-r--r--tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js26
-rw-r--r--tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js13
-rw-r--r--tests/wpt/web-platform-tests/resource-timing/response-status-code.html8
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/focus/delegatesFocus-tabindex-change.html23
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py9
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py3
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py8
-rw-r--r--tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html2
98 files changed, 2786 insertions, 1167 deletions
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 cdeaf7f7080..282ab0b2525 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: TIMEOUT
+ expected: FAIL
[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 a6796b61be3..9e39bb43f96 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -216863,6 +216863,32 @@
{}
]
],
+ "scoped-reference-animation-001.html": [
+ "891bda52a39b42322cf15cb01727f9cad58cf026",
+ [
+ null,
+ [
+ [
+ "/css/css-scoping/scoped-reference-animation-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "scoped-reference-animation-002.html": [
+ "d5c25f06c0aa73269615ec9bf2b6399729ea261a",
+ [
+ null,
+ [
+ [
+ "/css/css-scoping/scoped-reference-animation-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"shadow-assign-dynamic-001.html": [
"b9a0d1a2991c071bb3654995f93c4ac7ff495aee",
[
@@ -231462,7 +231488,7 @@
]
],
"line-break-normal-015a.xht": [
- "db3ee2a586fb90433f85b626cf05c2da5eb143cb",
+ "d2e0fe34995f43ffc1e4da10209efb9a71912ceb",
[
null,
[
@@ -231657,7 +231683,7 @@
]
],
"line-break-strict-015a.xht": [
- "9114120bc86e2b629a555539fd97682c8bfe6d6e",
+ "ad31e4fc54d80cd815e09889ae11a6bc633d80a8",
[
null,
[
@@ -237907,6 +237933,19 @@
{}
]
],
+ "break-spaces-011.html": [
+ "8c40a31a35688512742727639c11091ac8163dd8",
+ [
+ null,
+ [
+ [
+ "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"break-spaces-051.html": [
"2626511808335491910d3c14d752bb08494fcbc2",
[
@@ -385291,6 +385330,10 @@
[]
]
},
+ "scoped-reference-animation-ref.html": [
+ "9f407eb690e0fb3d033afba0817082f84e30b783",
+ []
+ ],
"slotted-placeholder-ref.html": [
"f99c0385d061766b49d55e7703bf596fe69d6ec2",
[]
@@ -388560,7 +388603,7 @@
[]
],
"line-break-normal-015a-ref.xht": [
- "941e18242d9868a45dbde986a189feecaed8b05c",
+ "23cf1487b1b3c11d67787b5d4dfc422f61495254",
[]
],
"line-break-normal-015b-ref.xht": [
@@ -388616,7 +388659,7 @@
[]
],
"line-break-strict-015a-ref.xht": [
- "f8a1222a3334edb8117e9141359958c9b8f51748",
+ "252818c22a0c0cce5d2844a283d447a32f4b5420",
[]
],
"line-break-strict-015b-ref.xht": [
@@ -410106,8 +410149,12 @@
]
},
"tools": {
+ "PRESUBMIT.py": [
+ "048e96b7012b70b276922ace2d7cdd811ebb3291",
+ []
+ ],
"gentest.py": [
- "cb1f720590ce8b41fe6bcb113ee24a60e173d263",
+ "bca7b9ecfcb72dccec216b5435f9071f47fde0be",
[]
],
"gentest_union.py": [
@@ -410115,11 +410162,11 @@
[]
],
"gentestutils.py": [
- "1206aa91bfbe737b55a1ba500713e18cbf8e07fd",
+ "16ca5f410c0dd1182271b151fc2fa3e0530248e6",
[]
],
"gentestutilsunion.py": [
- "c6fba8453d0ebbe389f6b9103f6272869076e641",
+ "047dd6c802b14f375f8049afa211ba921715ca6c",
[]
],
"name2dir-canvas.yaml": [
@@ -410967,10 +411014,6 @@
"d5c99062d2bb8f9660b68c172754867b598ed43f",
[]
],
- "named_targeting.https.html.headers": [
- "d5c99062d2bb8f9660b68c172754867b598ed43f",
- []
- ],
"popup-so.https.html.headers": [
"46ad58d83bf6e98913ca4c564b7acb8f19fa0093",
[]
@@ -422136,7 +422179,7 @@
},
"server": {
"context.any.js.ini": [
- "72009c61e6efb374ff3ce0aa9470d994a737789d",
+ "49220324f2f08b8e2bd700e2161615ba93f78b59",
[]
],
"http2-context.sub.h2.any.js.ini": [
@@ -423153,7 +423196,7 @@
[]
],
"payment-handler.idl": [
- "d0e5bd9fda832377e89a8b2b62fb4f597847a780",
+ "65b64bdf31c7dfed778ba475e154cd780ca44e86",
[]
],
"payment-request.idl": [
@@ -423830,7 +423873,7 @@
[]
],
"largest-contentful-paint-helpers.js": [
- "043587ca654c44fb97ae41e32cff094852199365",
+ "b0fe1b08cb44b1871ba6dac4c1d25018c6032019",
[]
],
"lcp-sw-from-cache.js": [
@@ -423912,7 +423955,7 @@
]
},
"lint.ignore": [
- "11821957cf4db2a454da4f7b135198797ceb437f",
+ "011f05c607e24b53f0d1120dc9c8a6cf5fdf06d9",
[]
],
"loading": {
@@ -426772,10 +426815,6 @@
"f97229762ce388ff0695d56684099b9286326a29",
[]
],
- "register-and-activate-service-worker.js": [
- "fb54c5c06488f319b0b4152837cc6a1b530cab7a",
- []
- ],
"supports-shipping-contact-delegation-manual-manifest.json": [
"fd6bc89ef6d38e0cee82bfadcc697e36a2952070",
[]
@@ -429882,7 +429921,7 @@
[]
],
"entry-invariants.js": [
- "dc907533946b383ccadd62ce1c81135ee6c1d19c",
+ "bbc913b722903085963a133dab0a8a96f77b2506",
[]
],
"eventsource.py": [
@@ -430062,7 +430101,7 @@
[]
],
"resource-loaders.js": [
- "70889b709f15a40f9cdc12cfeafb7a46c88b9a0c",
+ "37fea16b1750faa5df8983cc88ce197125c21490",
[]
],
"resource-timing-content-length.py": [
@@ -444681,7 +444720,7 @@
[]
],
"test_update_expectations.py": [
- "92022e9b1ea1bcc516a654e1e4975db851c6ac92",
+ "1635dce7ec67809e7824ba39806cf16e2f40b31a",
[]
],
"test_wpt.py": [
@@ -445043,7 +445082,7 @@
[]
],
"manifestupdate.py": [
- "ce12bc3370a3fb06a85ffc0db2e93a42eb093159",
+ "0bc25187976ddd9f970506ff74f63b9720e62588",
[]
],
"metadata.py": [
@@ -445095,7 +445134,7 @@
[]
],
"testloader.py": [
- "0e24c0deaa1adb34e401aa4effebbe816b2892f1",
+ "93e2a87826c59926a649bcfb16949aa5c6c93342",
[]
],
"testrunner.py": [
@@ -445162,7 +445201,7 @@
[]
],
"test_wpttest.py": [
- "d11b3a22451b9659a362461f0259239098e65af2",
+ "2d3578a903ccc45f03eef2fc29f4a54e3b87983e",
[]
]
},
@@ -488120,6 +488159,27 @@
{}
]
],
+ "anchor-transition-001.html": [
+ "b5849510e838b47fd5ddcf30489842e755225d5b",
+ [
+ null,
+ {}
+ ]
+ ],
+ "anchor-transition-002.html": [
+ "b6a1ff4511ac9ddfb20a531086137741b137b36b",
+ [
+ null,
+ {}
+ ]
+ ],
+ "anchor-transition-003.html": [
+ "e7441275141176078e14fc16aadf134bf9b65a37",
+ [
+ null,
+ {}
+ ]
+ ],
"at-fallback-position-allowed-declarations.html": [
"873fa13140047c0943dde64faa8ab7dc54b28203",
[
@@ -501598,7 +501658,7 @@
]
],
"parsing.html": [
- "66d1566586cd7d94f3c1da014e1ef3e4134daeac",
+ "8e445faf1c9b8b0942f684d5093c5a7071d43a91",
[
null,
{}
@@ -503271,7 +503331,7 @@
]
],
"at-property.html": [
- "d996091dc203eab079fff2d2b980d064300af39b",
+ "b91b143e368ff5371bce34d9b0e43ca78ed358cf",
[
null,
{}
@@ -504684,6 +504744,13 @@
{}
]
],
+ "focus-element-no-snap.html": [
+ "9ec004c6287008693e73bb51d0503f99e2f0b087",
+ [
+ null,
+ {}
+ ]
+ ],
"move-current-target.html": [
"ccadc884c5ba23f90b4b7d273e5aaf355cf648d1",
[
@@ -515806,21 +515873,21 @@
]
],
"only-child-group.html": [
- "034df41dde165f7624effddf70209472ea74a322",
+ "c3e9d669a30e24c93cbe0dc20c211b8e3e92d9a8",
[
null,
{}
]
],
"only-child-image-pair.html": [
- "830b37313eaaa3165d5739b39f2ccb415886e724",
+ "93fcc0a5ea8bcfce67c6f375ecd19602337949ef",
[
null,
{}
]
],
"only-child-new.html": [
- "2f8a7a4023ec7ffde81a6eeda6a65ca4533540ce",
+ "62328f27cf259d5b50fbea43e02ba3200364b8e7",
[
null,
{}
@@ -515834,7 +515901,14 @@
]
],
"only-child-old.html": [
- "4ca6fed20ce7b2f092de2c324ad6197caed22bc9",
+ "56dfa168e253eddc61e41db8bcd766c3282ae726",
+ [
+ null,
+ {}
+ ]
+ ],
+ "only-child-on-root-element-with-view-transition.html": [
+ "0bf6d8b84b397f6818b133374b4ba0446af70842",
[
null,
{}
@@ -519079,6 +519153,13 @@
{}
]
],
+ "match-media-parsing.html": [
+ "9d9aa3dd581579dfb6e14e2ad82ee54f8f575696",
+ [
+ null,
+ {}
+ ]
+ ],
"media-query-matches-in-iframe.html": [
"5828936732e7133d4365eb288b99e99cb428fb19",
[
@@ -521219,7 +521300,7 @@
]
],
"form-disabled-callback.html": [
- "954c3f3f6eecc95b12ffb235ffe287675f734429",
+ "c61a7719fc628c21d380e7f16c8c19921e3ceb2b",
[
null,
{}
@@ -588362,7 +588443,7 @@
]
],
"iframe-popup.https.html": [
- "2c6f0b62822f61bc4aac8a9bdd50cdbd724c07eb",
+ "17840724d9e342aa52cdcc474356b25d554dfd63",
[
"html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html?1-2",
{
@@ -588447,7 +588528,7 @@
]
],
"popup-with-same-origin.https.html": [
- "491cbc3b9d091e91976624b807a76f254fa68958",
+ "c0020fa23a478fd75aa27b69edb95c84f3e3789a",
[
null,
{
@@ -601923,6 +602004,13 @@
{}
]
],
+ "popover-target-element-disabled.tentative.html": [
+ "3d139c5950eb6bc1048c10e0ea6053369cb93403",
+ [
+ null,
+ {}
+ ]
+ ],
"popover-top-layer-combinations.tentative.html": [
"001bf88a25ef851e6607dc6e0ba7a7cf3b8cf4f8",
[
@@ -614775,7 +614863,7 @@
]
],
"image-upscaling.html": [
- "a4f7d8079d3b9a75f79b896743cbc018cc81c9ce",
+ "5cb3767ca7d29a30103797c8c8abe1c692787466",
[
null,
{}
@@ -625798,7 +625886,7 @@
]
],
"idlharness.https.any.js": [
- "dfb0190abacb96c61cf5c125c68a1ad346f60205",
+ "d34e20630bf7d60faa5aa8333d1595754420c080",
[
"payment-handler/idlharness.https.any.html",
{
@@ -625912,13 +626000,6 @@
}
]
],
- "payment-instruments.https.html": [
- "121c131568852eafe1b9ce5f9ec148c2cbee3fb6",
- [
- null,
- {}
- ]
- ],
"payment-request-event-constructor.https.html": [
"31ac8cafa78fb52fb7c02722003b5359ceadb7e2",
[
@@ -625941,7 +626022,7 @@
]
],
"same-object-attributes.https.html": [
- "2e5dea3a4aed33378f25b09b6e58929e22f2f72c",
+ "27c204484359d6b1afbb3412ae4feabf1295d6b1",
[
null,
{}
@@ -643761,7 +643842,7 @@
]
],
"cross-origin-start-end-time-with-redirects.html": [
- "1b107d3aef7764d9b9603ea2658cf469cf285980",
+ "8e368d13807745761083b090bc097217ff22e598",
[
null,
{}
@@ -644212,7 +644293,7 @@
]
],
"object-not-found-after-cross-origin-redirect.html": [
- "4d5d121fe32c4232dc8094906f92b7c8ac8d2ef1",
+ "6990c6c06082e5d62ba3aa576eccd42d13246d2a",
[
null,
{
@@ -644342,7 +644423,7 @@
]
],
"response-status-code.html": [
- "3c606c5496e6c7f9b0ecd5a7bfec9a611ad4f86f",
+ "3a184c6f016b28c7003ea4650b7827b74388faf8",
[
null,
{
@@ -652672,6 +652753,13 @@
}
]
],
+ "delegatesFocus-tabindex-change.html": [
+ "f159c22164bb62064b62bc089faf5bd05cba555f",
+ [
+ null,
+ {}
+ ]
+ ],
"focus-autofocus.html": [
"75a50b84c6df5525b5da0df86192637b70247820",
[
@@ -677573,7 +677661,7 @@
]
],
"getcredential-prf.https.html": [
- "6f8670f64d19e1a7366eb6cf42a83a3b6eedd387",
+ "61b52ac5958c7b242168285ad5e83581b4c1497e",
[
null,
{
diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
index ee34bc91078..51432362d66 100644
--- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
+++ b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-002.html.ini
@@ -1,6 +1,3 @@
[block-in-inline-hittest-002.html]
[elementsFromPoint]
expected: FAIL
-
- [elementFromPoint]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini b/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini
new file mode 100644
index 00000000000..eb3cf41a070
--- /dev/null
+++ b/tests/wpt/metadata/css/css-color/animation/opacity-animation-ending-correctly-002.html.ini
@@ -0,0 +1,2 @@
+[opacity-animation-ending-correctly-002.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini b/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini
deleted file mode 100644
index b8f8d45a31f..00000000000
--- a/tests/wpt/metadata/css/css-flexbox/hittest-anonymous-box.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[hittest-anonymous-box.html]
- [Hit-testing within an anonymous flex-item should return the flexbox as the hittest result.]
- expected: FAIL
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 e37df87f114..68d900bb5b0 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
@@ -319,3 +319,18 @@
[Matching font-style: 'oblique -21deg' should prefer 'oblique -21deg' over 'oblique -60deg -40deg']
expected: FAIL
+
+ [Matching font-weight: '399' should prefer '340 360' over '200 300']
+ expected: FAIL
+
+ [Matching font-stretch: '110%' should prefer '100%' over '50% 80%']
+ expected: FAIL
+
+ [Matching font-style: 'oblique 21deg' should prefer 'oblique 40deg 50deg' over 'oblique 20deg']
+ expected: FAIL
+
+ [Matching font-style: 'oblique 10deg' should prefer 'oblique 10deg' over 'oblique 5deg']
+ expected: FAIL
+
+ [Matching font-style: 'oblique -10deg' should prefer 'oblique -1deg 0deg' over 'oblique -20deg -15deg']
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-normal-015a.xht.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-normal-015a.xht.ini
deleted file mode 100644
index 71680f4af31..00000000000
--- a/tests/wpt/metadata/css/css-text/line-break/line-break-normal-015a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-break-normal-015a.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/line-break/line-break-strict-015a.xht.ini b/tests/wpt/metadata/css/css-text/line-break/line-break-strict-015a.xht.ini
deleted file mode 100644
index 881ee8aa238..00000000000
--- a/tests/wpt/metadata/css/css-text/line-break/line-break-strict-015a.xht.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-break-strict-015a.xht]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-011.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-011.html.ini
new file mode 100644
index 00000000000..1f5e74a33d4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-011.html.ini
@@ -0,0 +1,2 @@
+[break-spaces-011.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini
index a94867c6dfe..2b9002f0e0c 100644
--- a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini
@@ -53,152 +53,425 @@
[background-position length(px) / events]
expected: FAIL
- [margin-right length(cm) / values]
+ [background-color color(rgba) / values]
expected: FAIL
- [margin-right length(in) / values]
+ [border-top-width length(pt) / values]
expected: FAIL
- [margin-top length(pt) / values]
+ [border-top-width length(pc) / values]
expected: FAIL
- [margin-top length(pc) / values]
+ [border-top-width length(px) / values]
expected: FAIL
- [margin-top length(px) / values]
+ [border-top-width length(em) / values]
expected: FAIL
- [margin-top length(em) / values]
+ [border-top-width length(ex) / values]
expected: FAIL
- [margin-top length(ex) / values]
+ [border-top-width length(mm) / values]
expected: FAIL
- [margin-top length(mm) / values]
+ [border-top-width length(cm) / values]
expected: FAIL
- [margin-top length(cm) / values]
+ [border-top-width length(in) / values]
expected: FAIL
- [margin-top length(in) / values]
+ [border-right-width length(pt) / values]
expected: FAIL
- [height length(pt) / values]
+ [border-right-width length(pc) / values]
expected: FAIL
- [height length(pc) / values]
+ [border-right-width length(px) / values]
expected: FAIL
- [height length(px) / values]
+ [border-right-width length(em) / values]
expected: FAIL
- [height length(em) / values]
+ [border-right-width length(ex) / values]
expected: FAIL
- [height length(ex) / values]
+ [border-right-width length(mm) / values]
expected: FAIL
- [height length(mm) / values]
+ [border-right-width length(cm) / values]
expected: FAIL
- [height length(cm) / values]
+ [border-right-width length(in) / values]
expected: FAIL
- [height length(in) / values]
+ [border-bottom-width length(pt) / values]
expected: FAIL
- [height percentage(%) / values]
+ [border-bottom-width length(pc) / values]
expected: FAIL
- [width length(pt) / values]
+ [border-bottom-width length(px) / values]
expected: FAIL
- [width length(pc) / values]
+ [border-bottom-width length(em) / values]
expected: FAIL
- [width length(px) / values]
+ [border-bottom-width length(ex) / values]
expected: FAIL
- [width length(em) / values]
+ [border-bottom-width length(mm) / values]
expected: FAIL
- [width length(ex) / values]
+ [border-bottom-width length(cm) / values]
expected: FAIL
- [width length(mm) / values]
+ [border-bottom-width length(in) / values]
expected: FAIL
- [width length(cm) / values]
+ [border-left-width length(pt) / values]
expected: FAIL
- [width length(in) / values]
+ [border-left-width length(pc) / values]
expected: FAIL
- [width percentage(%) / values]
+ [border-left-width length(px) / values]
expected: FAIL
- [min-height length(pt) / values]
+ [border-left-width length(em) / values]
expected: FAIL
- [min-height length(pc) / values]
+ [border-left-width length(ex) / values]
expected: FAIL
- [min-height length(px) / values]
+ [border-left-width length(mm) / values]
expected: FAIL
- [min-height length(em) / values]
+ [border-left-width length(cm) / values]
expected: FAIL
- [min-height length(ex) / values]
+ [border-left-width length(in) / values]
expected: FAIL
- [min-height length(mm) / values]
+ [border-top-color color(rgba) / values]
expected: FAIL
- [min-height length(cm) / values]
+ [border-right-color color(rgba) / values]
expected: FAIL
- [min-height length(in) / values]
+ [border-bottom-color color(rgba) / values]
expected: FAIL
- [min-height percentage(%) / values]
+ [border-left-color color(rgba) / values]
expected: FAIL
- [min-width length(pt) / values]
+ [padding-bottom length(pt) / values]
expected: FAIL
- [min-width length(pc) / values]
+ [padding-bottom length(pc) / values]
expected: FAIL
- [min-width length(px) / values]
+ [padding-bottom length(px) / values]
expected: FAIL
- [min-width length(em) / values]
+ [padding-bottom length(em) / values]
expected: FAIL
- [min-width length(ex) / values]
+ [padding-bottom length(ex) / values]
expected: FAIL
- [min-width length(mm) / values]
+ [padding-bottom length(mm) / values]
expected: FAIL
- [min-width length(cm) / values]
+ [padding-bottom length(cm) / values]
expected: FAIL
- [min-width length(in) / values]
+ [padding-bottom length(in) / values]
expected: FAIL
- [min-width percentage(%) / values]
+ [padding-left length(pt) / values]
expected: FAIL
- [max-height length(pt) / values]
+ [padding-left length(pc) / values]
expected: FAIL
- [max-height length(pc) / values]
+ [padding-left length(px) / values]
expected: FAIL
- [max-height length(px) / values]
+ [padding-left length(em) / values]
expected: FAIL
- [max-height length(em) / values]
+ [padding-left length(ex) / values]
+ expected: FAIL
+
+ [padding-left length(mm) / values]
+ expected: FAIL
+
+ [padding-left length(cm) / values]
+ expected: FAIL
+
+ [padding-left length(in) / values]
+ expected: FAIL
+
+ [padding-right length(pt) / values]
+ expected: FAIL
+
+ [padding-right length(pc) / values]
+ expected: FAIL
+
+ [padding-right length(px) / values]
+ expected: FAIL
+
+ [padding-right length(em) / values]
+ expected: FAIL
+
+ [padding-right length(ex) / values]
+ expected: FAIL
+
+ [padding-right length(mm) / values]
+ expected: FAIL
+
+ [padding-right length(cm) / values]
+ expected: FAIL
+
+ [padding-right length(in) / values]
+ expected: FAIL
+
+ [padding-top length(pt) / values]
+ expected: FAIL
+
+ [padding-top length(pc) / values]
+ expected: FAIL
+
+ [padding-top length(px) / values]
+ expected: FAIL
+
+ [padding-top length(em) / values]
+ expected: FAIL
+
+ [padding-top length(ex) / values]
+ expected: FAIL
+
+ [padding-top length(mm) / values]
+ expected: FAIL
+
+ [padding-top length(cm) / values]
+ expected: FAIL
+
+ [padding-top length(in) / values]
+ expected: FAIL
+
+ [margin-bottom length(pt) / values]
+ expected: FAIL
+
+ [margin-bottom length(pc) / values]
+ expected: FAIL
+
+ [margin-bottom length(px) / values]
+ expected: FAIL
+
+ [margin-bottom length(em) / values]
+ expected: FAIL
+
+ [margin-bottom length(ex) / values]
+ expected: FAIL
+
+ [margin-bottom length(mm) / values]
+ expected: FAIL
+
+ [margin-bottom length(cm) / values]
+ expected: FAIL
+
+ [margin-bottom length(in) / values]
+ expected: FAIL
+
+ [margin-left length(pt) / values]
+ expected: FAIL
+
+ [margin-left length(pc) / values]
+ expected: FAIL
+
+ [margin-left length(px) / values]
+ expected: FAIL
+
+ [margin-left length(em) / values]
+ expected: FAIL
+
+ [margin-left length(ex) / values]
+ expected: FAIL
+
+ [margin-left length(mm) / values]
+ expected: FAIL
+
+ [margin-left length(cm) / values]
+ expected: FAIL
+
+ [margin-left length(in) / values]
+ expected: FAIL
+
+ [margin-right length(pt) / values]
+ expected: FAIL
+
+ [margin-right length(pc) / values]
+ expected: FAIL
+
+ [margin-right length(px) / values]
+ expected: FAIL
+
+ [margin-right length(em) / values]
+ expected: FAIL
+
+ [margin-right length(ex) / values]
+ expected: FAIL
+
+ [margin-right length(mm) / 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 e87f8c08864..f4caeba01db 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
@@ -55,3 +55,726 @@
[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
+
+ [padding-bottom length(mm) / events]
+ expected: FAIL
+
+ [padding-bottom length(cm) / events]
+ expected: FAIL
+
+ [padding-bottom length(in) / events]
+ expected: FAIL
+
+ [padding-left length(pt) / events]
+ expected: FAIL
+
+ [padding-left length(pc) / events]
+ expected: FAIL
+
+ [padding-left length(px) / events]
+ expected: FAIL
+
+ [padding-left length(em) / events]
+ expected: FAIL
+
+ [padding-left length(ex) / events]
+ expected: FAIL
+
+ [padding-left length(mm) / events]
+ expected: FAIL
+
+ [padding-left length(cm) / events]
+ expected: FAIL
+
+ [padding-left length(in) / events]
+ expected: FAIL
+
+ [padding-right length(pt) / events]
+ expected: FAIL
+
+ [padding-right length(pc) / events]
+ expected: FAIL
+
+ [padding-right length(px) / events]
+ expected: FAIL
+
+ [padding-right length(em) / events]
+ expected: FAIL
+
+ [padding-right length(ex) / events]
+ expected: FAIL
+
+ [padding-right length(mm) / events]
+ expected: FAIL
+
+ [padding-right length(cm) / events]
+ expected: FAIL
+
+ [padding-right length(in) / events]
+ expected: FAIL
+
+ [padding-top length(pt) / events]
+ expected: FAIL
+
+ [padding-top length(pc) / events]
+ expected: FAIL
+
+ [padding-top length(px) / events]
+ expected: FAIL
+
+ [padding-top length(em) / events]
+ expected: FAIL
+
+ [padding-top length(ex) / events]
+ expected: FAIL
+
+ [padding-top length(mm) / events]
+ expected: FAIL
+
+ [padding-top length(cm) / events]
+ expected: FAIL
+
+ [padding-top length(in) / events]
+ expected: FAIL
+
+ [margin-bottom length(pt) / events]
+ expected: FAIL
+
+ [margin-bottom length(pc) / events]
+ expected: FAIL
+
+ [margin-bottom length(px) / events]
+ expected: FAIL
+
+ [margin-bottom length(em) / events]
+ expected: FAIL
+
+ [margin-bottom length(ex) / events]
+ expected: FAIL
+
+ [margin-bottom length(mm) / events]
+ expected: FAIL
+
+ [margin-bottom length(cm) / events]
+ expected: FAIL
+
+ [margin-bottom length(in) / events]
+ expected: FAIL
+
+ [margin-left length(pt) / events]
+ expected: FAIL
+
+ [margin-left length(pc) / events]
+ expected: FAIL
+
+ [margin-left length(px) / events]
+ expected: FAIL
+
+ [margin-left length(em) / events]
+ expected: FAIL
+
+ [margin-left length(ex) / events]
+ expected: FAIL
+
+ [margin-left length(mm) / events]
+ expected: FAIL
+
+ [margin-left length(cm) / events]
+ expected: FAIL
+
+ [margin-left length(in) / events]
+ expected: FAIL
+
+ [margin-right length(pt) / events]
+ expected: FAIL
+
+ [margin-right length(pc) / events]
+ expected: FAIL
+
+ [margin-right length(px) / events]
+ expected: FAIL
+
+ [margin-right length(em) / events]
+ expected: FAIL
+
+ [margin-right length(ex) / events]
+ expected: FAIL
+
+ [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
+
+ [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
+
+ [color color(rgba) / events]
+ expected: FAIL
+
+ [font-size length(pt) / events]
+ expected: FAIL
+
+ [font-size length(pc) / events]
+ expected: FAIL
+
+ [font-size length(px) / events]
+ expected: FAIL
+
+ [font-size length(em) / events]
+ expected: FAIL
+
+ [font-size length(ex) / events]
+ expected: FAIL
+
+ [font-size length(mm) / events]
+ expected: FAIL
+
+ [font-size length(cm) / events]
+ expected: FAIL
+
+ [font-size length(in) / events]
+ expected: FAIL
+
+ [font-size percentage(%) / events]
+ expected: FAIL
+
+ [font-weight font-weight(keyword) / events]
+ expected: FAIL
+
+ [font-weight font-weight(numeric) / events]
+ expected: FAIL
+
+ [line-height number(integer) / events]
+ expected: FAIL
+
+ [line-height number(decimal) / events]
+ expected: FAIL
+
+ [line-height length(pt) / events]
+ expected: FAIL
+
+ [line-height length(pc) / events]
+ expected: FAIL
+
+ [line-height length(px) / events]
+ expected: FAIL
+
+ [line-height length(em) / events]
+ expected: FAIL
+
+ [line-height length(ex) / events]
+ expected: FAIL
+
+ [line-height length(mm) / events]
+ expected: FAIL
+
+ [line-height length(cm) / events]
+ expected: FAIL
+
+ [line-height length(in) / events]
+ expected: FAIL
+
+ [line-height percentage(%) / events]
+ expected: FAIL
+
+ [letter-spacing length(pt) / events]
+ expected: FAIL
+
+ [letter-spacing length(pc) / events]
+ expected: FAIL
+
+ [letter-spacing length(px) / events]
+ expected: FAIL
+
+ [letter-spacing length(em) / events]
+ expected: FAIL
+
+ [letter-spacing length(ex) / events]
+ expected: FAIL
+
+ [letter-spacing length(mm) / events]
+ expected: FAIL
+
+ [letter-spacing length(cm) / events]
+ expected: FAIL
+
+ [letter-spacing length(in) / events]
+ expected: FAIL
+
+ [word-spacing length(pt) / events]
+ expected: FAIL
+
+ [word-spacing length(pc) / events]
+ expected: FAIL
+
+ [word-spacing length(px) / events]
+ expected: FAIL
+
+ [word-spacing length(em) / events]
+ expected: FAIL
+
+ [word-spacing length(ex) / events]
+ expected: FAIL
+
+ [word-spacing length(mm) / events]
+ expected: FAIL
+
+ [word-spacing length(cm) / events]
+ expected: FAIL
+
+ [word-spacing length(in) / events]
+ expected: FAIL
+
+ [word-spacing percentage(%) / events]
+ expected: FAIL
+
+ [text-indent length(pt) / events]
+ expected: FAIL
+
+ [text-indent length(pc) / events]
+ expected: FAIL
+
+ [text-indent length(px) / events]
+ expected: FAIL
+
+ [text-indent length(em) / events]
+ expected: FAIL
+
+ [text-indent length(ex) / events]
+ expected: FAIL
+
+ [text-indent length(mm) / events]
+ expected: FAIL
+
+ [text-indent length(cm) / events]
+ expected: FAIL
+
+ [text-indent length(in) / events]
+ expected: FAIL
+
+ [text-indent percentage(%) / events]
+ expected: FAIL
+
+ [text-shadow shadow(shadow) / events]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
index 526e81e6310..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,153 +52,3 @@
[background-position length(px) / events]
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/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini
new file mode 100644
index 00000000000..f18b8d2fcf9
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini
@@ -0,0 +1,3 @@
+[CaretPosition-001.html]
+ [Element at (400, 100)]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini
index 7ba6df407e1..758c26f2a2d 100644
--- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html.ini
@@ -1,6 +1,3 @@
[MediaQueryList-extends-EventTarget-interop.html]
[listeners are called in order they were added, ignoring capture parameter]
expected: FAIL
-
- [listener added with addListener and addEventListener (capture) is called twice]
- 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..54775e607a3 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,9 @@
[<li>Outside 3</li>]
expected: FAIL
+
+ [<li>Inside 2</li>]
+ expected: FAIL
+
+ [<li>Image Inside 1</li>]
+ 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 57cbb5a4948..ceb43099040 100644
--- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini
@@ -17,6 +17,3 @@
[test some point of the element: bottom right corner]
expected: FAIL
-
- [test some point of the element: top left corner]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/mediaqueries/match-media-parsing.html.ini b/tests/wpt/metadata/css/mediaqueries/match-media-parsing.html.ini
new file mode 100644
index 00000000000..4d5ecd0b127
--- /dev/null
+++ b/tests/wpt/metadata/css/mediaqueries/match-media-parsing.html.ini
@@ -0,0 +1,18 @@
+[match-media-parsing.html]
+ [Test parsing '(color)' with matchMedia]
+ expected: FAIL
+
+ [Test parsing '(color' with matchMedia]
+ expected: FAIL
+
+ [Test parsing ' (color)' with matchMedia]
+ expected: FAIL
+
+ [Test parsing ' ( color ) ' with matchMedia]
+ expected: FAIL
+
+ [Test parsing ' ( color ' with matchMedia]
+ expected: FAIL
+
+ [Test parsing ' color ), ( color' with matchMedia]
+ expected: FAIL
diff --git a/tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini b/tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini
index fb4fc58bf90..73ce3fa9a20 100644
--- a/tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini
+++ b/tests/wpt/metadata/custom-elements/form-associated/form-disabled-callback.html.ini
@@ -15,3 +15,8 @@
[Adding/removing disabled content attribute]
expected: FAIL
+ [Toggling "disabled" attribute on a custom element inside disabled <fieldset> does not trigger a callback]
+ expected: FAIL
+
+ [Toggling "disabled" attribute on a <fieldset> does not trigger a callback on disabled custom element descendant]
+ 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 3285a4f15ac..e0663d34a38 100644
--- a/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-length/parsing.window.js.ini
@@ -76,3 +76,6 @@
[Input: "Content-Length: ". Expected: 42.]
expected: FAIL
+
+ [Input: "Content-Length: 42\\r\\nContent-Length: 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 741af78eff8..cd15896eae7 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
@@ -147,8 +147,8 @@
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
expected: FAIL
- [background-image sec-fetch-site - HTTPS downgrade (header not sent)]
- expected: TIMEOUT
-
[border-image sec-fetch-site - HTTPS downgrade (header not sent)]
expected: FAIL
+
+ [background-image sec-fetch-site - Not sent to non-trustworthy same-site destination]
+ expected: TIMEOUT
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 736ff6130a5..e153b408731 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -7,3 +7,9 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
+
+ [X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
+ expected: FAIL
+
+ [X-Content-Type-Options%3A%20%22nosniFF%22]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini
index dc1144214ef..856bb1c9901 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini
@@ -1,9 +1,10 @@
[iframe-src-aboutblank-navigate-immediately.html]
+ expected: TIMEOUT
[Navigating to a different document with window.open]
expected: FAIL
[Navigating to a different document with form submission]
- expected: FAIL
+ expected: TIMEOUT
[Navigating to a different document with link click]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini
index bcda478adb1..5a245d61359 100644
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-referrer.window.js.ini
@@ -1,10 +1,6 @@
[javascript-url-referrer.window.html]
- expected: TIMEOUT
[unsafe-url referrer policy used to create the starting page]
expected: FAIL
[origin referrer policy used to create the starting page]
expected: FAIL
-
- [no-referrer referrer policy used to create the starting page]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini
deleted file mode 100644
index 4ecd6d9f753..00000000000
--- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[navigation-unload-cross-origin.sub.window.html]
- [Cross-origin navigation started from unload handler must be ignored]
- expected: FAIL
diff --git a/tests/wpt/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
new file mode 100644
index 00000000000..7dc346632a4
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
@@ -0,0 +1,3 @@
+[navigation-unload-same-origin.window.html]
+ [Same-origin navigation started from unload handler must be ignored]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini
new file mode 100644
index 00000000000..60a4fa51f8a
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html.ini
@@ -0,0 +1,3 @@
+[a-click.html]
+ [aElement.click() before the load event must NOT replace]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini
new file mode 100644
index 00000000000..f5b7b25324f
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse-during-unload.html.ini
@@ -0,0 +1,4 @@
+[traverse-during-unload.html]
+ expected: TIMEOUT
+ [Traversing the history during unload]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
deleted file mode 100644
index ba0aed26689..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[traverse_the_history_1.html]
- [Multiple history traversals from the same task]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/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/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini b/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini
index 2a54f2f8814..5cdcce07c65 100644
--- a/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini
@@ -1,2 +1,2 @@
[canvas.2d.disconnected.html]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini
index 830aeb8ae48..fdc27d37788 100644
--- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini
+++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html.ini
@@ -1,7 +1,6 @@
[autofocus-dialog.html]
- expected: TIMEOUT
[<dialog> can contain autofocus, without stopping page autofocus content from working]
expected: FAIL
[<dialog>-contained autofocus element gets focused when the dialog is shown]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
index 8acae84e1e4..d169bd2e9fa 100644
--- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
+++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
@@ -1,5 +1,4 @@
[supported-elements.html]
- expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
@@ -10,7 +9,7 @@
expected: FAIL
[Area element should support autofocus]
- expected: TIMEOUT
+ expected: FAIL
[Host element with delegatesFocus should support autofocus]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_canplay.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_canplay.html.ini
deleted file mode 100644
index 580b0c7a8e4..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_canplay.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[event_canplay.html]
- expected: ERROR
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
index 47b45e65a1c..3cdeb8ebcbc 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
@@ -1,9 +1,3 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
-
- [createHTMLDocument]
- expected: FAIL
-
- [<template>]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
index 9101c169754..35bc899ff38 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/multipart-formdata.window.js.ini
@@ -14,9 +14,6 @@
[multipart/form-data: 0x00 in name (formdata event)]
expected: FAIL
- [multipart/form-data: 0x00 in value (normal form)]
- expected: FAIL
-
[multipart/form-data: 0x00 in value (formdata event)]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini
index 200022641d0..0372084c73b 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/text-plain.window.js.ini
@@ -11,9 +11,6 @@
[text/plain: 0x00 in name (normal form)]
expected: FAIL
- [text/plain: 0x00 in name (formdata event)]
- expected: FAIL
-
[text/plain: 0x00 in value (normal form)]
expected: FAIL
@@ -167,9 +164,6 @@
[text/plain: character not in encoding in filename (formdata event)]
expected: FAIL
- [text/plain: Basic test (formdata event)]
- expected: FAIL
-
[text/plain: 0x00 in filename (formdata event)]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/historical.html.ini b/tests/wpt/metadata/html/semantics/forms/historical.html.ini
new file mode 100644
index 00000000000..5d8289307cc
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/forms/historical.html.ini
@@ -0,0 +1,3 @@
+[historical.html]
+ [<input name=isindex> should not be supported]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.tentative.html.ini b/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.tentative.html.ini
new file mode 100644
index 00000000000..371d5a57c10
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/popovers/popover-target-element-disabled.tentative.html.ini
@@ -0,0 +1,18 @@
+[popover-target-element-disabled.tentative.html]
+ [Disabled popover*target buttons should not affect the popover heirarchy.]
+ expected: FAIL
+
+ [Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly outer popover is closed.]
+ expected: FAIL
+
+ [Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly inner popover is closed.]
+ expected: FAIL
+
+ [Setting the form attribute on popover*target buttons when popovers are open should close all popovers.]
+ expected: FAIL
+
+ [Changing the input type on a popover*target button when popovers are open should close all popovers.]
+ expected: FAIL
+
+ [Disconnecting popover*target buttons when popovers are open should close all popovers.]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini
deleted file mode 100644
index fc0233f5241..00000000000
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-delayed.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[module-delayed.html]
- [async document.write in a module]
- expected: FAIL
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini
new file mode 100644
index 00000000000..53acb938c1b
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-static-import-delayed.html.ini
@@ -0,0 +1,3 @@
+[module-static-import-delayed.html]
+ [document.write in an imported module]
+ 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 7237f5792de..dbe1def99e3 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,10 +1,9 @@
[promise-job-entry-different-function-realm.html]
- expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
- expected: TIMEOUT
+ expected: FAIL
[Thenable resolution]
expected: FAIL
@@ -13,4 +12,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/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 6ab46a7862c..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,5 +1,4 @@
[promise-job-entry.html]
- expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
@@ -7,7 +6,7 @@
expected: FAIL
[Sanity check: this all works as expected with no promises involved]
- expected: TIMEOUT
+ expected: FAIL
[Thenable resolution]
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 9783c3ac379..b232fd58335 100644
--- a/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini
+++ b/tests/wpt/metadata/resource-timing/content-type-parsing.html.ini
@@ -7,13 +7,13 @@
expected: FAIL
[content-type 2 : text/html,text/plain]
- expected: TIMEOUT
+ expected: FAIL
[content-type 3 : text/plain;charset=gbk,text/html]
- expected: NOTRUN
+ expected: FAIL
[content-type 4 : text/plain;charset=gbk,text/html;charset=windows-1254]
- expected: NOTRUN
+ expected: TIMEOUT
[content-type 5 : text/plain;charset=gbk,text/plain]
expected: NOTRUN
diff --git a/tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini b/tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini
index 09c24f00b13..55121e9289c 100644
--- a/tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini
+++ b/tests/wpt/metadata/resource-timing/nextHopProtocol-is-tao-protected.https.html.ini
@@ -1,5 +1,4 @@
[nextHopProtocol-is-tao-protected.https.html]
- expected: TIMEOUT
[Add TAO-less iframe from remote origin. Make sure nextHopProtocol is the empty string]
expected: TIMEOUT
@@ -25,28 +24,16 @@
expected: FAIL
[Fetch TAO'd object from remote origin. Make sure nextHopProtocol is not the empty string.]
- expected: TIMEOUT
-
- [Fetch TAO-less script from remote origin. Make sure nextHopProtocol is the empty string.]
- expected: NOTRUN
+ expected: FAIL
[Fetch TAO'd script from remote origin. Make sure nextHopProtocol is not the empty string.]
- expected: NOTRUN
-
- [Fetch TAO-less stylesheet from remote origin. Make sure nextHopProtocol is the empty string.]
- expected: NOTRUN
+ expected: FAIL
[Fetch TAO'd stylesheet from remote origin. Make sure nextHopProtocol is not the empty string.]
- expected: NOTRUN
-
- [Fetch TAO-less synchronous xhr from remote origin. Make sure nextHopProtocol is the empty string.]
- expected: NOTRUN
+ expected: FAIL
[Fetch TAO'd synchronous xhr from remote origin. Make sure nextHopProtocol is not the empty string.]
- expected: NOTRUN
-
- [Fetch TAO-less asynchronous xhr from remote origin. Make sure nextHopProtocol is the empty string.]
- expected: NOTRUN
+ expected: FAIL
[Fetch TAO'd asynchronous xhr from remote origin. Make sure nextHopProtocol is not the empty string.]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini b/tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini
index 76a5e178ab0..ded983b5baa 100644
--- a/tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini
+++ b/tests/wpt/metadata/resource-timing/object-not-found-adds-entry.html.ini
@@ -1,5 +1,4 @@
[object-not-found-adds-entry.html]
- expected: TIMEOUT
[Test that an navigation object with a 200 response displays an entry]
expected: FAIL
@@ -16,4 +15,4 @@
expected: FAIL
[Verify that a 404 img-typed object emits an entry.]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/response-status-code.html.ini b/tests/wpt/metadata/resource-timing/response-status-code.html.ini
index 3c8127e59f6..38df5f01300 100644
--- a/tests/wpt/metadata/resource-timing/response-status-code.html.ini
+++ b/tests/wpt/metadata/resource-timing/response-status-code.html.ini
@@ -238,37 +238,37 @@
expected: FAIL
[This test validates the response status of resources. 79]
- expected: TIMEOUT
+ expected: FAIL
[This test validates the response status of resources. 80]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 81]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 82]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 83]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 84]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 85]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 86]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 87]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 88]
- expected: NOTRUN
+ expected: FAIL
[This test validates the response status of resources. 89]
- expected: NOTRUN
+ expected: TIMEOUT
[This test validates the response status of resources. 90]
expected: NOTRUN
@@ -899,3 +899,153 @@
[This test validates the response status of resources. 299]
expected: NOTRUN
+
+ [This test validates the response status of resources. 300]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 301]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 302]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 303]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 304]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 305]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 306]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 307]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 308]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 309]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 310]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 311]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 312]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 313]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 314]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 315]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 316]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 317]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 318]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 319]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 320]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 321]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 322]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 323]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 324]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 325]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 326]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 327]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 328]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 329]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 330]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 331]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 332]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 333]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 334]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 335]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 336]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 337]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 338]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 339]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 340]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 341]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 342]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 343]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 344]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 345]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 346]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 347]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 348]
+ expected: NOTRUN
+
+ [This test validates the response status of resources. 349]
+ expected: NOTRUN
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini
index b7537329068..eed03df37f3 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html.ini
@@ -1,5 +1,4 @@
[audiocontext-not-fully-active.html]
- expected: TIMEOUT
[frame in navigated remote-site frame]
expected: FAIL
diff --git a/tests/wpt/metadata/webmessaging/with-ports/017.html.ini b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini
new file mode 100644
index 00000000000..c7946fc91b4
--- /dev/null
+++ b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini
@@ -0,0 +1,4 @@
+[017.html]
+ expected: TIMEOUT
+ [origin of the script that invoked the method, about:blank]
+ expected: TIMEOUT
diff --git a/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini b/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini
new file mode 100644
index 00000000000..f78f699f620
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/scrollBy.html.ini
@@ -0,0 +1,3 @@
+[scrollBy.html]
+ [Ensure that the window.scrollBy function affects scroll position as expected]
+ expected: FAIL
diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-001.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-001.html
new file mode 100644
index 00000000000..b5849510e83
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-001.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<title>Tests CSS transition of anchor() and anchor-size() functions</title>
+<link rel="help" href="https://drafts4.csswg.org/css-anchor-1/">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8180"></script>
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+body {
+ margin: 0;
+}
+
+#anchor1 {
+ margin-left: 0px;
+ margin-top: 0px;
+ width: 200px;
+ height: 100px;
+ background: orange;
+ anchor-name: --a1;
+}
+
+#anchor2 {
+ margin-left: 400px;
+ margin-top: 200px;
+ width: 100px;
+ height: 200px;
+ background: orange;
+ anchor-name: --a2;
+}
+
+#target {
+ position: fixed;
+ width: 100px;
+ height: 100px;
+ background-color: lime;
+ transition: all 10s -5s linear;
+}
+
+#target.before {
+ top: anchor(--a1 top);
+ left: anchor(--a1 right);
+ width: anchor-size(--a1 width);
+ height: anchor-size(--a1 height);
+}
+
+#target.after {
+ top: anchor(--a2 bottom);
+ left: anchor(--a2 left);
+ width: anchor-size(--a2 width);
+ height: anchor-size(--a2 height);
+}
+</style>
+
+<div id="anchor1"></div>
+<div id="anchor2"></div>
+<div id="target" class="before"></div>
+
+<script>
+setup(() => {
+ // Forces layout
+ target.offsetLeft;
+ // Triggers transition starting at 50% immediately
+ target.classList.remove('before');
+ target.classList.add('after');
+});
+
+test(() => {
+ assert_equals(target.offsetLeft, 300);
+ assert_equals(target.offsetTop, 250);
+}, 'Transition of anchor() when changing target anchor element name');
+
+test(() => {
+ assert_equals(target.offsetWidth, 150);
+ assert_equals(target.offsetHeight, 150);
+}, 'Transition of anchor-size() when changing target anchor element name');
+</script>
+
diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-002.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-002.html
new file mode 100644
index 00000000000..b6a1ff4511a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-002.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<title>Tests CSS transition of anchor() across tree scopes</title>
+<link rel="help" href="https://drafts4.csswg.org/css-anchor-1/">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8180"></script>
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+body {
+ margin: 0;
+}
+
+#anchor1 {
+ width: 100px;
+ height: 100px;
+ background: orange;
+ anchor-name: --a;
+}
+
+#anchor2 {
+ width: 100px;
+ height: 100px;
+ margin-top: 200px;
+ margin-left: 300px;
+ background: orange;
+}
+
+#anchor2.after::part(target) {
+ top: anchor(--a top);
+ left: anchor(--a right);
+}
+</style>
+
+<div id="anchor1"></div>
+<div id="anchor2"></div>
+
+<script>
+setup(() => {
+ let shadow = anchor2.attachShadow({mode: 'open'});
+ shadow.innerHTML = `
+ <style>
+ :host { anchor-name: --a; }
+ #target {
+ position: fixed;
+ width: 100px;
+ height: 100px;
+ background: lime;
+ top: anchor(--a top);
+ left: anchor(--a right);
+ transition: all 10s -5s linear;
+ }
+ </style>
+ <div id="target" part="target"></div>
+ `;
+});
+
+test(() => {
+ let target = anchor2.shadowRoot.getElementById('target');
+
+ // Forces layout
+ target.offsetLeft;
+
+ // Triggers a transition from using #anchor2 to using #anchor1,
+ // starting immediately at 50% progress.
+ anchor2.classList.add('after');
+ assert_equals(target.offsetLeft, 250);
+ assert_equals(target.offsetTop, 150);
+}, 'Transition with anchor names defined in different tree scopes');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-003.html b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-003.html
new file mode 100644
index 00000000000..e7441275141
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-anchor-position/anchor-transition-003.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<title>Tests CSS transition of anchor() across three tree scopes</title>
+<link rel="help" href="https://drafts4.csswg.org/css-anchor-1/">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/8180"></script>
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+body {
+ margin: 0;
+}
+
+#anchor1 {
+ width: 100px;
+ height: 100px;
+ background: orange;
+ anchor-name: --a;
+}
+
+#host.after::part(target) {
+ left: anchor(--a left);
+}
+</style>
+
+<div id="anchor1"></div>
+<div id="host"></div>
+
+<script>
+setup(() => {
+let shadow = host.attachShadow({mode: 'open'});
+shadow.innerHTML = `
+ <style>
+ div {
+ width: 100px;
+ height: 100px;
+ background: orange;
+ }
+ #anchor2 {
+ margin-left: 200px;
+ anchor-name: --a;
+ }
+ #anchor3 {
+ margin-left: 400px;
+ }
+ #target {
+ position: fixed;
+ background: lime;
+ top: 300px;
+ transition: left 10s -5s linear;
+ }
+ #target.after {
+ left: anchor(--a left);
+ }
+ </style>
+ <div id="anchor2"></div>
+ <div id="anchor3">
+ <div id="target" part="target"></div>
+ </div>
+`;
+
+let anchor3 = shadow.getElementById('anchor3');
+let innerShadow = anchor3.attachShadow({mode: 'open'});
+innerShadow.innerHTML = `
+ <style>
+ :host { anchor-name: --a; }
+ ::slotted(*) { left: anchor(--a left); }
+ </style>
+ <slot></slot>
+`;
+});
+
+test(() => {
+ let target = host.shadowRoot.getElementById('target');
+
+ // Forces layout
+ target.offsetLeft;
+
+ // Triggers a transition from using #anchor3 to using #anchor2,
+ // starting immediately at 50% progress
+ target.classList.add('after');
+ assert_equals(target.offsetLeft, 300);
+
+ // Triggers another transition to using #anchor1 while the previous
+ // transition is still in progress.
+ host.classList.add('after');
+ assert_equals(target.offsetLeft, 150);
+}, 'Transition with anchor names defined in three different tree scopes');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-nesting/parsing.html b/tests/wpt/web-platform-tests/css/css-nesting/parsing.html
index 66d1566586c..8e445faf1c9 100644
--- a/tests/wpt/web-platform-tests/css/css-nesting/parsing.html
+++ b/tests/wpt/web-platform-tests/css/css-nesting/parsing.html
@@ -25,7 +25,6 @@
`.foo {\n .bar > & { color: green; }\n}`,
`.foo, .bar {\n & + .baz, &.qux { color: green; }\n}`,
`.foo {\n & .bar & .baz & .qux { color: green; }\n}`,
- `.foo {\n @media (min-width: 50px) {\n & { color: green; }\n}\n}`,
`.foo {\n @media (min-width: 50px) { color: green; }\n}`,
`main {\n & > section, & > article {\n & > header { color: green; }\n}\n}`,
]
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html
index d996091dc20..b91b143e368 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property.html
@@ -148,6 +148,11 @@ test_not_applied('gandalf', 'grey', false);
test_not_applied('<color>', 'notacolor', false);
test_not_applied('<length>', '10em', false);
+test_not_applied('<transform-function>', 'translateX(1em)', false);
+test_not_applied('<transform-function>', 'translateY(1lh)', false);
+test_not_applied('<transform-list>', 'rotate(10deg) translateX(1em)', false);
+test_not_applied('<transform-list>', 'rotate(10deg) translateY(1lh)', false);
+
// Inheritance
test_with_at_property({
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html
new file mode 100644
index 00000000000..891bda52a39
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-001.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<title>Tests animation with tree-scoped names and references</title>
+<meta name="assert" content="Custom counter style references should work in keyframes">
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#shadow-names">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="match" href="scoped-reference-animation-ref.html">
+
+<style>
+/* Overrides predefined lower-roman counter-style */
+@counter-style lower-roman {
+ system: cyclic;
+ symbols: 'X';
+}
+
+/* Overrides predefined upper-roman counter-style */
+@counter-style upper-roman {
+ system: cyclic;
+ symbols: 'O';
+}
+
+/* Should resolve to the custom counter styles, not the predefined ones */
+@keyframes list-style-type-anim {
+ from { list-style-type: lower-roman; }
+ to { list-style-type: upper-roman; }
+}
+
+#target1 {
+ animation: list-style-type-anim 2s -0.9s linear paused;
+}
+
+#target2 {
+ animation: list-style-type-anim 2s -1s linear paused;
+}
+</style>
+
+<ul id="target1">
+ <li>List marker should be X
+</ul>
+
+<ul id="target2">
+ <li>List marker should be O
+</ul>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html
new file mode 100644
index 00000000000..d5c25f06c0a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-002.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<title>Tests animation with tree-scoped names and references</title>
+<meta name="assert" content="Custom counter style references should work in shadow DOM keyframes">
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#shadow-names">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<link rel="match" href="scoped-reference-animation-ref.html">
+
+<style>
+@counter-style lower-roman { system: extends disc; }
+@counter-style upper-roman { system: extends disc; }
+</style>
+
+<div id="host">
+</div>
+
+<script>
+host.attachShadow({mode: 'open'}).innerHTML = `
+<style>
+/* Overrides predefined and outer tree scope's custom lower-roman counter-style */
+@counter-style lower-roman {
+ system: cyclic;
+ symbols: 'X';
+}
+
+/* Overrides predefined and outer tree scope's upper-roman counter-style */
+@counter-style upper-roman {
+ system: cyclic;
+ symbols: 'O';
+}
+
+/* Should resolve to the custom counter styles, not the predefined or the outer
+ tree scope's ones */
+@keyframes list-style-type-anim {
+ from { list-style-type: lower-roman; }
+ to { list-style-type: upper-roman; }
+}
+
+#target1 {
+ animation: list-style-type-anim 2s -0.9s linear paused;
+}
+
+#target2 {
+ animation: list-style-type-anim 2s -1s linear paused;
+}
+</style>
+
+<ul id="target1">
+ <li>List marker should be X
+</ul>
+
+<ul id="target2">
+ <li>List marker should be O
+</ul>
+`;
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html
new file mode 100644
index 00000000000..9f407eb690e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/scoped-reference-animation-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<title>Tests animation with tree-scoped names and references</title>
+
+<style>
+@counter-style from-counter-style {
+ system: cyclic;
+ symbols: 'X';
+}
+
+@counter-style to-counter-style {
+ system: cyclic;
+ symbols: 'O';
+}
+
+#target1 {
+ list-style-type: from-counter-style;
+}
+
+#target2 {
+ list-style-type: to-counter-style;
+}
+</style>
+
+<ul id="target1">
+ <li>List marker should be X
+</ul>
+
+<ul id="target2">
+ <li>List marker should be O
+</ul>
diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-after-relayout/focus-element-no-snap.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-after-relayout/focus-element-no-snap.html
new file mode 100644
index 00000000000..9ec004c6287
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-after-relayout/focus-element-no-snap.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<title>Resnap to focused element after relayout</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+
+#snapper {
+ width: 100px;
+ height: 200px;
+ overflow-x: scroll;
+ scroll-snap-type: x mandatory;
+ color: white;
+ background-color: oldlace;
+ display: flex;
+ align-items: center;
+}
+.child {
+ margin-right: 0.5rem;
+ height: 90%;
+ scroll-snap-align: start;
+ padding: 1rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ width: 100px;
+ height: 100px;
+ background-color: indigo;
+}
+</style>
+
+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap/#re-snap">
+
+<div id=snapper>
+ <div class="child no-snap" tabindex=-1></div>
+ <div class=child></div>
+ <div class="child" id ="focus" tabindex=-1></div>
+ <div class="child" tabindex=-1></div>
+ <div class=child></div>
+ <div class=child></div>
+</div>
+
+<script>
+
+test(t => {
+ document.getElementById("focus").focus();
+ const element = document.getElementById("snapper");
+ element.style.width = "101px";
+ assert_equals(element.scrollLeft, 0);
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht
index db3ee2a586f..d2e0fe34995 100644
--- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-normal-015a.xht
@@ -50,7 +50,7 @@
<span>サンプルサンプル文<span class="target">&#x2025;&#x2025;</span>サンプル文</span>
</p>
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2025;&#x2025;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2025;&#x2025;</span>サンプル文</span>
</p>
</div>
<div class="wrapper">
@@ -59,7 +59,7 @@
<span>サンプルサンプル文<span class="target">&#x2026;&#x2026;</span>サンプル文</span>
</p>
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2026;&#x2026;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2026;&#x2026;</span>サンプル文</span>
</p>
</div>
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht
index 9114120bc86..ad31e4fc54d 100644
--- a/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/line-break-strict-015a.xht
@@ -50,7 +50,7 @@
<span>サンプルサンプル文<span class="target">&#x2025;&#x2025;</span>サンプル文</span>
</p>
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2025;&#x2025;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2025;&#x2025;</span>サンプル文</span>
</p>
</div>
<div class="wrapper">
@@ -59,7 +59,7 @@
<span>サンプルサンプル文<span class="target">&#x2026;&#x2026;</span>サンプル文</span>
</p>
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2026;&#x2026;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2026;&#x2026;</span>サンプル文</span>
</p>
</div>
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht
index 941e18242d9..23cf1487b1b 100644
--- a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-normal-015a-ref.xht
@@ -41,19 +41,19 @@
<div class="wrapper">
<!-- inseparable characters TWO DOT LEADER -->
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2025;&#x2025;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2025;&#x2025;</span>サンプル文</span>
</p>
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2025;&#x2025;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2025;&#x2025;</span>サンプル文</span>
</p>
</div>
<div class="wrapper">
<!-- inseparable characters HORIZONTAL ELLIPSIS -->
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2026;&#x2026;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2026;&#x2026;</span>サンプル文</span>
</p>
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2026;&#x2026;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2026;&#x2026;</span>サンプル文</span>
</p>
</div>
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht
index f8a1222a333..252818c22a0 100644
--- a/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht
+++ b/tests/wpt/web-platform-tests/css/css-text/line-break/reference/line-break-strict-015a-ref.xht
@@ -41,19 +41,19 @@
<div class="wrapper">
<!-- inseparable characters TWO DOT LEADER -->
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2025;&#x2025;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2025;&#x2025;</span>サンプル文</span>
</p>
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2025;&#x2025;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2025;&#x2025;</span>サンプル文</span>
</p>
</div>
<div class="wrapper">
<!-- inseparable characters HORIZONTAL ELLIPSIS -->
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2026;&#x2026;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2026;&#x2026;</span>サンプル文</span>
</p>
<p class="control" lang="ja">
- <span>サンプルサンプル文<br /><span class="target">&#x2026;&#x2026;</span>サンプル文</span>
+ <span>サンプルサンプル<br />文<span class="target">&#x2026;&#x2026;</span>サンプル文</span>
</p>
</div>
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-011.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-011.html
new file mode 100644
index 00000000000..8c40a31a356
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-011.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Text Test: line breaking with white-space: break-spaces and element boundaries</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com" />
+<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<link rel="help" title="5.1. Line Breaking Details" href="https://drafts.csswg.org/css-text-3/#line-break-details">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
+<meta name="flags" content="ahem">
+<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
+<meta name="assert" content="An element boundary doesn't allow breaking if white-space is set to break-spaces at both sides of the boundary">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+div {
+ font: 25px/1 Ahem;
+}
+.fail {
+ position: absolute;
+ color: red;
+ z-index: -1;
+}
+.fail span { color: green; }
+.test {
+ color: green;
+ width: 4ch;
+ white-space: break-spaces;
+}
+</style>
+
+<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
+<div class="fail">XXXX<br>X<span>X</span>X<span>X</span><br>XX<span>XX</span><br>X<span>X</span>X<span>X</span></div>
+<div class="test"><span>XXXX</span> X X XX<span> </span><span> </span>X X</div>
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html
index 034df41dde1..c3e9d669a30 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-group.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
-<html class=reftest-wait>
+<html class="reftest-wait foo">
<title>View transitions: ensure :only-child is supported on view-transition-group</title>
<link rel="help" href="https://github.com/WICG/view-transitions">
<link rel="author" href="mailto:khushalsagar@chromium.org">
@@ -8,6 +8,22 @@
<script src="/resources/testharnessreport.js"></script>
<style>
+::view-transition {
+ background-color: black;
+}
+html:only-child {
+ background-color: black;
+}
+:root:only-child {
+ background-color: black;
+}
+:only-child {
+ background-color: black;
+}
+.foo:only-child {
+ background-color: black;
+}
+
::view-transition-group(root) {
background-color: blue;
}
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html
index 830b37313ea..93fcc0a5ea8 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-image-pair.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
-<html class=reftest-wait>
+<html class="reftest-wait foo">
<title>View transitions: ensure :only-child is supported on view-transition-image-pair</title>
<link rel="help" href="https://github.com/WICG/view-transitions">
<link rel="author" href="mailto:khushalsagar@chromium.org">
@@ -8,6 +8,22 @@
<script src="/resources/testharnessreport.js"></script>
<style>
+::view-transition {
+ background-color: black;
+}
+html:only-child {
+ background-color: black;
+}
+:root:only-child {
+ background-color: black;
+}
+:only-child {
+ background-color: black;
+}
+.foo:only-child {
+ background-color: black;
+}
+
::view-transition-image-pair(root):only-child {
background-color: red;
}
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html
index 2f8a7a4023e..62328f27cf2 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-new.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
-<html class=reftest-wait>
+<html class="reftest-wait foo">
<title>View transitions: ensure :only-child is supported on view-transition-new</title>
<link rel="help" href="https://github.com/WICG/view-transitions">
<link rel="author" href="mailto:khushalsagar@chromium.org">
@@ -8,6 +8,22 @@
<script src="/resources/testharnessreport.js"></script>
<style>
+::view-transition {
+ background-color: black;
+}
+html:only-child {
+ background-color: black;
+}
+:root:only-child {
+ background-color: black;
+}
+:only-child {
+ background-color: black;
+}
+.foo:only-child {
+ background-color: black;
+}
+
::view-transition-new(root) {
background-color: blue;
}
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html
index 4ca6fed20ce..56dfa168e25 100644
--- a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-old.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
-<html class=reftest-wait>
+<html class="reftest-wait foo">
<title>View transitions: ensure :only-child is supported on view-transition-old</title>
<link rel="help" href="https://github.com/WICG/view-transitions">
<link rel="author" href="mailto:khushalsagar@chromium.org">
@@ -8,6 +8,22 @@
<script src="/resources/testharnessreport.js"></script>
<style>
+::view-transition {
+ background-color: black;
+}
+html:only-child {
+ background-color: black;
+}
+:root:only-child {
+ background-color: black;
+}
+:only-child {
+ background-color: black;
+}
+.foo:only-child {
+ background-color: black;
+}
+
::view-transition-old(root) {
background-color: blue;
}
diff --git a/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-on-root-element-with-view-transition.html b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-on-root-element-with-view-transition.html
new file mode 100644
index 00000000000..0bf6d8b84b3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-view-transitions/only-child-on-root-element-with-view-transition.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html class="reftest-wait foo">
+<title>View transitions: ensure :only-child is supported on view-transition</title>
+<link rel="help" href="https://github.com/WICG/view-transitions">
+<link rel="author" href="mailto:khushalsagar@chromium.org">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+::view-transition {
+ background-color: red;
+}
+
+html:only-child {
+ background-color: blue;
+}
+
+:root:only-child {
+ background-color: blue;
+}
+
+:only-child {
+ background-color: blue;
+}
+
+.foo:only-child {
+ background-color: blue;
+}
+</style>
+
+<script>
+promise_test(() => {
+ return new Promise(async (resolve, reject) => {
+ let transition = document.startViewTransition();
+ transition.ready.then(() => {
+ let style = getComputedStyle(
+ document.documentElement, ":view-transition");
+ if (style.backgroundColor == "rgb(255, 0, 0)")
+ resolve();
+ else
+ reject(style.backgroundColor);
+ });
+ });
+}, ":only-child is not supported on view-transition");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/mediaqueries/match-media-parsing.html b/tests/wpt/web-platform-tests/css/mediaqueries/match-media-parsing.html
new file mode 100644
index 00000000000..9d9aa3dd581
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/mediaqueries/match-media-parsing.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-syntax-3/#parse-comma-separated-list-of-component-values">
+<script type="text/javascript" src="/resources/testharness.js"></script>
+<script type="text/javascript" src="/resources/testharnessreport.js"></script>
+
+<script>
+function test_parsing(query, expected) {
+ test(() => {
+ const match = window.matchMedia(query);
+ assert_equals(match.media, expected)
+ }, "Test parsing '" + query + "' with matchMedia");
+}
+test_parsing("", "");
+test_parsing(" ", "");
+test_parsing("all", "all");
+test_parsing(" all", "all");
+test_parsing(" all ", "all");
+test_parsing("all,all", "all, all");
+test_parsing(" all , all ", "all, all");
+test_parsing("(color)", "(color)");
+test_parsing("(color", "(color)");
+test_parsing(" (color)", "(color)");
+test_parsing(" ( color ) ", "(color)");
+test_parsing(" ( color ", "(color)");
+test_parsing("color)", "not all");
+test_parsing(" color)", "not all");
+test_parsing(" color ), ( color", "not all, (color)");
+test_parsing(" foo ", "foo");
+test_parsing(",", "not all, not all");
+test_parsing(" , ", "not all, not all");
+test_parsing(",,", "not all, not all, not all");
+test_parsing(" , , ", "not all, not all, not all");
+test_parsing(" foo,", "foo, not all");
+</script>
diff --git a/tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html b/tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html
index 954c3f3f6ee..c61a7719fc6 100644
--- a/tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html
+++ b/tests/wpt/web-platform-tests/custom-elements/form-associated/form-disabled-callback.html
@@ -110,5 +110,27 @@ test(() => {
container.innerHTML = '<fieldset disabled><my-control>';
assert_array_equals(container.querySelector('my-control').disabledHistory(), [true]);
}, 'Upgrading an element with disabled content attribute');
+
+test(() => {
+ const container = document.createElement('div');
+ document.body.appendChild(container);
+ container.innerHTML = '<fieldset disabled><my-control></my-control></fieldset>';
+
+ const control = container.querySelector('my-control');
+ control.setAttribute('disabled', '');
+ control.removeAttribute('disabled');
+ assert_array_equals(control.disabledHistory(), [true]);
+}, 'Toggling "disabled" attribute on a custom element inside disabled <fieldset> does not trigger a callback');
+
+test(() => {
+ const container = document.createElement('div');
+ document.body.appendChild(container);
+ container.innerHTML = '<fieldset><my-control disabled></my-control></fieldset>';
+
+ const fieldset = container.firstElementChild;
+ fieldset.disabled = true;
+ fieldset.disabled = false;
+ assert_array_equals(container.querySelector('my-control').disabledHistory(), [true]);
+}, 'Toggling "disabled" attribute on a <fieldset> does not trigger a callback on disabled custom element descendant');
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py b/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py
new file mode 100644
index 00000000000..048e96b7012
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/PRESUBMIT.py
@@ -0,0 +1,22 @@
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Presubmit script for t/b/web_tests/external/wpt/html/canvas/tools.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into depot_tools.
+"""
+
+USE_PYTHON3 = True
+
+
+def CommonChecks(input_api, output_api):
+ return input_api.canned_checks.RunPylint(input_api, output_api)
+
+
+def CheckChangeOnUpload(input_api, output_api):
+ return CommonChecks(input_api, output_api)
+
+
+def CheckChangeOnCommit(input_api, output_api):
+ return CommonChecks(input_api, output_api)
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentest.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentest.py
index cb1f720590c..bca7b9ecfcb 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/gentest.py
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentest.py
@@ -1,6 +1,8 @@
from gentestutils import genTestUtils
from gentestutilsunion import genTestUtils_union
-genTestUtils('../element', '../element', 'templates.yaml', 'name2dir-canvas.yaml', False)
-genTestUtils('../offscreen', '../offscreen', 'templates.yaml', 'name2dir-offscreen.yaml', True)
-genTestUtils_union('templates-new.yaml', 'name2dir.yaml') \ No newline at end of file
+genTestUtils('../element', '../element', 'templates.yaml',
+ 'name2dir-canvas.yaml', False)
+genTestUtils('../offscreen', '../offscreen', 'templates.yaml',
+ 'name2dir-offscreen.yaml', True)
+genTestUtils_union('templates-new.yaml', 'name2dir.yaml')
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py
index 1206aa91bfb..16ca5f410c0 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutils.py
@@ -6,19 +6,20 @@
# It has been adapted for use with the Web Platform Test Suite suite at
# https://github.com/web-platform-tests/wpt/
#
-# The original version had a number of now-removed features (multiple versions of
-# each test case of varying verbosity, Mozilla mochitests, semi-automated test
-# harness). It also had a different directory structure.
+# The original version had a number of now-removed features (multiple versions
+# of each test case of varying verbosity, Mozilla mochitests, semi-automated
+# test harness). It also had a different directory structure.
# To update or add test cases:
#
# * Modify the tests*.yaml files.
-# 'name' is an arbitrary hierarchical name to help categorise tests.
-# 'desc' is a rough description of what behaviour the test aims to test.
-# 'code' is JavaScript code to execute, with some special commands starting with '@'
-# 'expected' is what the final canvas output should be: a string 'green' or 'clear'
-# (100x50 images in both cases), or a string 'size 100 50' (or any other size)
-# followed by Python code using Pycairo to generate the image.
+# - 'name' is an arbitrary hierarchical name to help categorise tests.
+# - 'desc' is a rough description of what behaviour the test aims to test.
+# - 'code' is JavaScript code to execute, with some special commands starting
+# with '@'
+# - 'expected' is what the final canvas output should be: a string 'green' or
+# 'clear' (100x50 images in both cases), or a string 'size 100 50' (or any
+# other size) followed by Python code using Pycairo to generate the image.
#
# * Run "./build.sh".
# This requires a few Python modules which might not be ubiquitous.
@@ -27,43 +28,49 @@
#
# * Test the tests, add new ones to Git, remove deleted ones from Git, etc.
-from __future__ import print_function
+from typing import List, Optional
import re
import codecs
-import time
+import importlib
import os
-import shutil
import sys
-import xml.dom.minidom
-from xml.dom.minidom import Node
try:
- import cairocffi as cairo
+ import cairocffi as cairo # type: ignore
except ImportError:
import cairo
try:
- import syck as yaml # compatible and lots faster
+ # Compatible and lots faster.
+ import syck as yaml # type: ignore
except ImportError:
import yaml
-def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOFFSCREENCANVAS):
- MISCOUTPUTDIR = './output'
+class Error(Exception):
+ """Base class for all exceptions raised by this module"""
+
+
+class InvalidTestDefinitionError(Error):
+ """Raised on invalid test definition."""
+
+
+def genTestUtils(TESTOUTPUTDIR: str, IMAGEOUTPUTDIR: str, TEMPLATEFILE: str,
+ NAME2DIRFILE: str, ISOFFSCREENCANVAS: bool) -> None:
- def simpleEscapeJS(str):
- return str.replace('\\', '\\\\').replace('"', '\\"')
+ MISCOUTPUTDIR = './output'
- def escapeJS(str):
- str = simpleEscapeJS(str)
- str = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', str) # kind of an ugly hack, for nicer failure-message output
- return str
+ def simpleEscapeJS(string: str) -> str:
+ return string.replace('\\', '\\\\').replace('"', '\\"')
- def escapeHTML(str):
- return str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;')
+ def escapeJS(string: str) -> str:
+ string = simpleEscapeJS(string)
+ # Kind of an ugly hack, for nicer failure-message output.
+ string = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', string)
+ return string
- def expand_nonfinite(method, argstr, tail):
+ def expand_nonfinite(method: str, argstr: str, tail: str) -> str:
"""
>>> print expand_nonfinite('f', '<0 a>, <0 b>', ';')
f(a, 0);
@@ -80,14 +87,18 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF
f(0, b, d);
"""
# argstr is "<valid-1 invalid1-1 invalid2-1 ...>, ..." (where usually
- # 'invalid' is Infinity/-Infinity/NaN)
+ # 'invalid' is Infinity/-Infinity/NaN).
args = []
for arg in argstr.split(', '):
- a = re.match('<(.*)>', arg).group(1)
+ match = re.match('<(.*)>', arg)
+ if match is None:
+ raise InvalidTestDefinitionError(
+ f"Expected arg to match format '<(.*)>', but was: {arg}")
+ a = match.group(1)
args.append(a.split(' '))
calls = []
- # Start with the valid argument list
- call = [ args[j][0] for j in range(len(args)) ]
+ # Start with the valid argument list.
+ call = [args[j][0] for j in range(len(args))]
# For each argument alone, try setting it to all its invalid values:
for i in range(len(args)):
for a in args[i][1:]:
@@ -97,39 +108,45 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF
# For all combinations of >= 2 arguments, try setting them to their
# first invalid values. (Don't do all invalid values, because the
# number of combinations explodes.)
- def f(c, start, depth):
+ def f(c: List[str], start: int, depth: int) -> None:
for i in range(start, len(args)):
if len(args[i]) > 1:
a = args[i][1]
c2 = c[:]
c2[i] = a
- if depth > 0: calls.append(c2)
- f(c2, i+1, depth+1)
+ if depth > 0:
+ calls.append(c2)
+ f(c2, i + 1, depth + 1)
+
f(call, 0, 0)
- return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) for c in calls)
+ return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail)
+ for c in calls)
# Run with --test argument to run unit tests
if len(sys.argv) > 1 and sys.argv[1] == '--test':
- import doctest
+ doctest = importlib.import_module('doctest')
doctest.testmod()
sys.exit()
- templates = yaml.safe_load(open(TEMPLATEFILE, "r").read())
- name_mapping = yaml.safe_load(open(NAME2DIRFILE, "r").read())
+ templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read())
+ name_mapping = yaml.safe_load(open(NAME2DIRFILE, 'r').read())
tests = []
- test_yaml_directory = "yaml/element"
+ test_yaml_directory = 'yaml/element'
if ISOFFSCREENCANVAS:
- test_yaml_directory = "yaml/offscreen"
+ test_yaml_directory = 'yaml/offscreen'
TESTSFILES = [
- os.path.join(test_yaml_directory, f) for f in os.listdir(test_yaml_directory)
- if f.endswith(".yaml")]
- for t in sum([ yaml.safe_load(open(f, "r").read()) for f in TESTSFILES], []):
+ os.path.join(test_yaml_directory, f)
+ for f in os.listdir(test_yaml_directory) if f.endswith('.yaml')
+ ]
+ for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES],
+ []):
if 'DISABLED' in t:
continue
if 'meta' in t:
- eval(compile(t['meta'], '<meta test>', 'exec'), {}, {'tests':tests})
+ eval(compile(t['meta'], '<meta test>', 'exec'), {},
+ {'tests': tests})
else:
tests.append(t)
@@ -137,98 +154,85 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF
category_contents_direct = {}
category_contents_all = {}
- def backref_html(name):
+ def backref_html(name: str) -> str:
backrefs = []
c = ''
for p in name.split('.')[:-1]:
- c += '.'+p
+ c += '.' + p
backrefs.append('<a href="index%s.html">%s</a>.' % (c, p))
backrefs.append(name.split('.')[-1])
return ''.join(backrefs)
- def make_flat_image(filename, w, h, r,g,b,a):
- if os.path.exists('%s/%s' % (IMAGEOUTPUTDIR, filename)):
- return filename
- surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
- cr = cairo.Context(surface)
- cr.set_source_rgba(r, g, b, a)
- cr.rectangle(0, 0, w, h)
- cr.fill()
- surface.write_to_png('%s/%s' % (IMAGEOUTPUTDIR, filename))
- return filename
-
- # Ensure the test output directories exist
+ # Ensure the test output directories exist.
testdirs = [TESTOUTPUTDIR, IMAGEOUTPUTDIR, MISCOUTPUTDIR]
for map_dir in set(name_mapping.values()):
- testdirs.append("%s/%s" % (TESTOUTPUTDIR, map_dir))
+ testdirs.append('%s/%s' % (TESTOUTPUTDIR, map_dir))
for d in testdirs:
- try: os.mkdir(d)
- except: pass # ignore if it already exists
+ try:
+ os.mkdir(d)
+ except FileExistsError:
+ pass # Ignore if it already exists.
used_images = {}
- def map_name(name):
+ def map_name(name: str) -> Optional[str]:
mapped_name = None
for mn in sorted(name_mapping.keys(), key=len, reverse=True):
if name.startswith(mn):
- mapped_name = "%s/%s" % (name_mapping[mn], name)
+ mapped_name = '%s/%s' % (name_mapping[mn], name)
break
if not mapped_name:
- print("LIKELY ERROR: %s has no defined target directory mapping" % name)
+ print('LIKELY ERROR: %s has no defined target directory mapping' %
+ name)
+ return None
if 'manual' in test:
- mapped_name += "-manual"
+ mapped_name += '-manual'
return mapped_name
- def expand_test_code(code):
- code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m: expand_nonfinite(m.group(1), m.group(2), m.group(3)), code) # must come before '@assert throws'
+ def expand_test_code(code: str) -> str:
+ code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m:
+ expand_nonfinite(m.group(1), m.group(2), m.group(3)),
+ code) # Must come before '@assert throws'.
code = re.sub(r'@assert pixel (\d+,\d+) == (\d+,\d+,\d+,\d+);',
- r'_assertPixel(canvas, \1, \2);',
- code)
+ r'_assertPixel(canvas, \1, \2);', code)
code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+);',
- r'_assertPixelApprox(canvas, \1, \2, 2);',
- code)
+ r'_assertPixelApprox(canvas, \1, \2, 2);', code)
- code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);',
- r'_assertPixelApprox(canvas, \1, \2, \3);',
- code)
+ code = re.sub(
+ r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);',
+ r'_assertPixelApprox(canvas, \1, \2, \3);', code)
code = re.sub(r'@assert throws (\S+_ERR) (.*);',
- r'assert_throws_dom("\1", function() { \2; });',
- code)
+ r'assert_throws_dom("\1", function() { \2; });', code)
code = re.sub(r'@assert throws (\S+Error) (.*);',
- r'assert_throws_js(\1, function() { \2; });',
- code)
+ r'assert_throws_js(\1, function() { \2; });', code)
- code = re.sub(r'@assert (.*) === (.*);',
- lambda m: '_assertSame(%s, %s, "%s", "%s");'
- % (m.group(1), m.group(2), escapeJS(m.group(1)), escapeJS(m.group(2)))
- , code)
+ code = re.sub(
+ r'@assert (.*) === (.*);', lambda m:
+ '_assertSame(%s, %s, "%s", "%s");' % (m.group(1), m.group(
+ 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code)
- code = re.sub(r'@assert (.*) !== (.*);',
- lambda m: '_assertDifferent(%s, %s, "%s", "%s");'
- % (m.group(1), m.group(2), escapeJS(m.group(1)), escapeJS(m.group(2)))
- , code)
+ code = re.sub(
+ r'@assert (.*) !== (.*);', lambda m:
+ '_assertDifferent(%s, %s, "%s", "%s");' % (m.group(1), m.group(
+ 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code)
- code = re.sub(r'@assert (.*) =~ (.*);',
- lambda m: 'assert_regexp_match(%s, %s);'
- % (m.group(1), m.group(2))
- , code)
+ code = re.sub(
+ r'@assert (.*) =~ (.*);', lambda m: 'assert_regexp_match(%s, %s);'
+ % (m.group(1), m.group(2)), code)
- code = re.sub(r'@assert (.*);',
- lambda m: '_assert(%s, "%s");'
- % (m.group(1), escapeJS(m.group(1)))
- , code)
+ code = re.sub(
+ r'@assert (.*);', lambda m: '_assert(%s, "%s");' % (m.group(
+ 1), escapeJS(m.group(1))), code)
code = re.sub(r' @moz-todo', '', code)
- code = re.sub(r'@moz-UniversalBrowserRead;',
- ""
- , code)
+ code = re.sub(r'@moz-UniversalBrowserRead;', '', code)
- assert('@' not in code)
+ assert ('@' not in code)
return code
@@ -237,29 +241,29 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF
test = tests[i]
name = test['name']
- print("\r(%s)" % name, " "*32, "\t")
+ print('\r(%s)' % name, ' ' * 32, '\t')
if name in used_tests:
- print("Test %s is defined twice" % name)
+ print('Test %s is defined twice' % name)
used_tests[name] = 1
mapped_name = map_name(name)
if not mapped_name:
if ISOFFSCREENCANVAS:
continue
- else:
- mapped_name = name
-
+ mapped_name = name
cat_total = ''
for cat_part in [''] + name.split('.')[:-1]:
- cat_total += cat_part+'.'
- if not cat_total in category_names: category_names.append(cat_total)
+ cat_total += cat_part + '.'
+ if not cat_total in category_names:
+ category_names.append(cat_total)
category_contents_all.setdefault(cat_total, []).append(name)
category_contents_direct.setdefault(cat_total, []).append(name)
- if test.get('expected', '') == 'green' and re.search(r'@assert pixel .* 0,0,0,0;', test['code']):
- print("Probable incorrect pixel test in %s" % name)
+ if test.get('expected', '') == 'green' and re.search(
+ r'@assert pixel .* 0,0,0,0;', test['code']):
+ print('Probable incorrect pixel test in %s' % name)
code = expand_test_code(test['code'])
@@ -268,74 +272,86 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF
expected = test['expected']
expected_img = None
if expected == 'green':
- expected_img = "/images/green-100x50.png"
+ expected_img = '/images/green-100x50.png'
elif expected == 'clear':
- expected_img = "/images/clear-100x50.png"
+ expected_img = '/images/clear-100x50.png'
else:
if ';' in expected:
- print("Found semicolon in %s" % name)
- expected = re.sub(r'^size (\d+) (\d+)',
- r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)\ncr = cairo.Context(surface)',
- expected)
-
- if mapped_name.endswith("-manual"):
- png_name = mapped_name[:-len("-manual")]
+ print('Found semicolon in %s' % name)
+ expected = re.sub(
+ r'^size (\d+) (\d+)',
+ r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)'
+ r'\ncr = cairo.Context(surface)', expected)
+
+ if mapped_name.endswith('-manual'):
+ png_name = mapped_name[:-len('-manual')]
else:
png_name = mapped_name
- expected += "\nsurface.write_to_png('%s/%s.png')\n" % (IMAGEOUTPUTDIR, png_name)
- eval(compile(expected, '<test %s>' % test['name'], 'exec'), {}, {'cairo':cairo})
- expected_img = "%s.png" % name
+ expected += "\nsurface.write_to_png('%s/%s.png')\n" % (
+ IMAGEOUTPUTDIR, png_name)
+ eval(compile(expected, '<test %s>' % test['name'], 'exec'), {},
+ {'cairo': cairo})
+ expected_img = '%s.png' % name
if expected_img:
- expectation_html = ('<p class="output expectedtext">Expected output:' +
- '<p><img src="%s" class="output expected" id="expected" alt="">' % (expected_img))
+ expectation_html = (
+ '<p class="output expectedtext">Expected output:<p>'
+ '<img src="%s" class="output expected" id="expected" '
+ 'alt="">' % expected_img)
canvas = test.get('canvas', 'width="100" height="50"')
- prev = tests[i-1]['name'] if i != 0 else 'index'
- next = tests[i+1]['name'] if i != len(tests)-1 else 'index'
+ prev_test = tests[i - 1]['name'] if i != 0 else 'index'
+ next_test = tests[i + 1]['name'] if i != len(tests) - 1 else 'index'
name_wrapped = name.replace('.', '.&#8203;')
notes = '<p class="notes">%s' % test['notes'] if 'notes' in test else ''
- timeout = '\n<meta name="timeout" content="%s">' % test['timeout'] if 'timeout' in test else ''
+ timeout = ('\n<meta name="timeout" content="%s">' %
+ test['timeout'] if 'timeout' in test else '')
scripts = ''
for s in test.get('scripts', []):
scripts += '<script src="%s"></script>\n' % (s)
variants = test.get('script-variants', {})
- script_variants = [(v, '<script src="%s"></script>\n' % (s)) for (v, s) in variants.items()]
+ script_variants = [(v, '<script src="%s"></script>\n' % (s))
+ for (v, s) in variants.items()]
if not script_variants:
script_variants = [('', '')]
images = ''
- for i in test.get('images', []):
- id = i.split('/')[-1]
- if '/' not in i:
- used_images[i] = 1
- i = '../images/%s' % i
- images += '<img src="%s" id="%s" class="resource">\n' % (i,id)
- for i in test.get('svgimages', []):
- id = i.split('/')[-1]
- if '/' not in i:
- used_images[i] = 1
- i = '../images/%s' % i
- images += '<svg><image xlink:href="%s" id="%s" class="resource"></svg>\n' % (i,id)
- images = images.replace("../images/", "/images/")
+ for src in test.get('images', []):
+ img_id = src.split('/')[-1]
+ if '/' not in src:
+ used_images[src] = 1
+ src = '../images/%s' % src
+ images += '<img src="%s" id="%s" class="resource">\n' % (src,
+ img_id)
+ for src in test.get('svgimages', []):
+ img_id = src.split('/')[-1]
+ if '/' not in src:
+ used_images[src] = 1
+ src = '../images/%s' % src
+ images += ('<svg><image xlink:href="%s" id="%s" class="resource">'
+ '</svg>\n' % (src, img_id))
+ images = images.replace('../images/', '/images/')
fonts = ''
fonthack = ''
- for i in test.get('fonts', []):
- fonts += '@font-face {\n font-family: %s;\n src: url("/fonts/%s.ttf");\n}\n' % (i, i)
- # Browsers require the font to actually be used in the page
+ for font in test.get('fonts', []):
+ fonts += ('@font-face {\n font-family: %s;\n'
+ ' src: url("/fonts/%s.ttf");\n}\n' % (font, font))
+ # Browsers require the font to actually be used in the page.
if test.get('fonthack', 1):
- fonthack += '<span style="font-family: %s; position: absolute; visibility: hidden">A</span>\n' % i
+ fonthack += ('<span style="font-family: %s; position: '
+ 'absolute; visibility: hidden">A</span>\n' % font)
if fonts:
fonts = '<style>\n%s</style>\n' % fonts
- fallback = test.get('fallback', '<p class="fallback">FAIL (fallback content)</p>')
+ fallback = test.get('fallback',
+ '<p class="fallback">FAIL (fallback content)</p>')
desc = test.get('desc', '')
escaped_desc = simpleEscapeJS(desc)
@@ -351,26 +367,43 @@ def genTestUtils(TESTOUTPUTDIR, IMAGEOUTPUTDIR, TEMPLATEFILE, NAME2DIRFILE, ISOF
name_variant = '' if not variant else '.' + variant
template_params = {
- 'name':name + name_variant,
- 'name_wrapped':name_wrapped, 'backrefs':backref_html(name),
- 'mapped_name':mapped_name,
- 'desc':desc, 'escaped_desc':escaped_desc,
- 'prev':prev, 'next':next, 'notes':notes, 'images':images,
- 'fonts':fonts, 'fonthack':fonthack, 'timeout': timeout,
- 'canvas':canvas, 'expected':expectation_html, 'code':code,
- 'scripts':scripts + extra_script,
- 'fallback':fallback, 'attributes':attributes,
+ 'name': name + name_variant,
+ 'name_wrapped': name_wrapped,
+ 'backrefs': backref_html(name),
+ 'mapped_name': mapped_name,
+ 'desc': desc,
+ 'escaped_desc': escaped_desc,
+ 'prev': prev_test,
+ 'next': next_test,
+ 'notes': notes,
+ 'images': images,
+ 'fonts': fonts,
+ 'fonthack': fonthack,
+ 'timeout': timeout,
+ 'canvas': canvas,
+ 'expected': expectation_html,
+ 'code': code,
+ 'scripts': scripts + extra_script,
+ 'fallback': fallback,
+ 'attributes': attributes,
'context_args': context_args
}
if ISOFFSCREENCANVAS:
- f = codecs.open('%s/%s%s.html' % (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
+ f = codecs.open(
+ '%s/%s%s.html' %
+ (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
f.write(templates['w3coffscreencanvas'] % template_params)
- timeout = '// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else ''
+ timeout = ('// META: timeout=%s\n' %
+ test['timeout'] if 'timeout' in test else '')
template_params['timeout'] = timeout
- f = codecs.open('%s/%s%s.worker.js' % (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
+ f = codecs.open(
+ '%s/%s%s.worker.js' %
+ (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
f.write(templates['w3cworker'] % template_params)
else:
- f = codecs.open('%s/%s%s.html' % (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
+ f = codecs.open(
+ '%s/%s%s.html' %
+ (TESTOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
f.write(templates['w3ccanvas'] % template_params)
print()
diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py
index c6fba8453d0..047dd6c802b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py
+++ b/tests/wpt/web-platform-tests/html/canvas/tools/gentestutilsunion.py
@@ -6,19 +6,20 @@
# It has been adapted for use with the Web Platform Test Suite suite at
# https://github.com/web-platform-tests/wpt/
#
-# The original version had a number of now-removed features (multiple versions of
-# each test case of varying verbosity, Mozilla mochitests, semi-automated test
-# harness). It also had a different directory structure.
+# The original version had a number of now-removed features (multiple versions
+# of each test case of varying verbosity, Mozilla mochitests, semi-automated
+# test harness). It also had a different directory structure.
# To update or add test cases:
#
# * Modify the tests*.yaml files.
-# 'name' is an arbitrary hierarchical name to help categorise tests.
-# 'desc' is a rough description of what behaviour the test aims to test.
-# 'code' is JavaScript code to execute, with some special commands starting with '@'
-# 'expected' is what the final canvas output should be: a string 'green' or 'clear'
-# (100x50 images in both cases), or a string 'size 100 50' (or any other size)
-# followed by Python code using Pycairo to generate the image.
+# - 'name' is an arbitrary hierarchical name to help categorise tests.
+# - 'desc' is a rough description of what behaviour the test aims to test.
+# - 'code' is JavaScript code to execute, with some special commands starting
+# with '@'.
+# - 'expected' is what the final canvas output should be: a string 'green' or
+# 'clear' (100x50 images in both cases), or a string 'size 100 50' (or any
+# other size) followed by Python code using Pycairo to generate the image.
#
# * Run "./build.sh".
# This requires a few Python modules which might not be ubiquitous.
@@ -27,46 +28,51 @@
#
# * Test the tests, add new ones to Git, remove deleted ones from Git, etc.
-from __future__ import print_function
+from typing import List
import re
import codecs
-import time
+import importlib
import os
-import shutil
import sys
-import xml.dom.minidom
-from xml.dom.minidom import Node
try:
- import cairocffi as cairo
+ import cairocffi as cairo # type: ignore
except ImportError:
import cairo
try:
- import syck as yaml # compatible and lots faster
+ # Compatible and lots faster.
+ import syck as yaml # type: ignore
except ImportError:
import yaml
-def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE):
+
+class Error(Exception):
+ """Base class for all exceptions raised by this module"""
+
+
+class InvalidTestDefinitionError(Error):
+ """Raised on invalid test definition."""
+
+
+def genTestUtils_union(TEMPLATEFILE: str, NAME2DIRFILE: str) -> None:
CANVASOUTPUTDIR = '../element'
CANVASIMAGEOUTPUTDIR = '../element'
OFFSCREENCANVASOUTPUTDIR = '../offscreen'
OFFSCREENCANVASIMAGEOUTPUTDIR = '../offscreen'
MISCOUTPUTDIR = './output'
- def simpleEscapeJS(str):
- return str.replace('\\', '\\\\').replace('"', '\\"')
-
- def escapeJS(str):
- str = simpleEscapeJS(str)
- str = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', str) # kind of an ugly hack, for nicer failure-message output
- return str
+ def simpleEscapeJS(string: str) -> str:
+ return string.replace('\\', '\\\\').replace('"', '\\"')
- def escapeHTML(str):
- return str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;')
+ def escapeJS(string: str) -> str:
+ string = simpleEscapeJS(string)
+ # Kind of an ugly hack, for nicer failure-message output.
+ string = re.sub(r'\[(\w+)\]', r'[\\""+(\1)+"\\"]', string)
+ return string
- def expand_nonfinite(method, argstr, tail):
+ def expand_nonfinite(method: str, argstr: str, tail: str) -> str:
"""
>>> print expand_nonfinite('f', '<0 a>, <0 b>', ';')
f(a, 0);
@@ -83,14 +89,18 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE):
f(0, b, d);
"""
# argstr is "<valid-1 invalid1-1 invalid2-1 ...>, ..." (where usually
- # 'invalid' is Infinity/-Infinity/NaN)
+ # 'invalid' is Infinity/-Infinity/NaN).
args = []
for arg in argstr.split(', '):
- a = re.match('<(.*)>', arg).group(1)
+ match = re.match('<(.*)>', arg)
+ if match is None:
+ raise InvalidTestDefinitionError(
+ f"Expected arg to match format '<(.*)>', but was: {arg}")
+ a = match.group(1)
args.append(a.split(' '))
calls = []
- # Start with the valid argument list
- call = [ args[j][0] for j in range(len(args)) ]
+ # Start with the valid argument list.
+ call = [args[j][0] for j in range(len(args))]
# For each argument alone, try setting it to all its invalid values:
for i in range(len(args)):
for a in args[i][1:]:
@@ -100,37 +110,43 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE):
# For all combinations of >= 2 arguments, try setting them to their
# first invalid values. (Don't do all invalid values, because the
# number of combinations explodes.)
- def f(c, start, depth):
+ def f(c: List[str], start: int, depth: int) -> None:
for i in range(start, len(args)):
if len(args[i]) > 1:
a = args[i][1]
c2 = c[:]
c2[i] = a
- if depth > 0: calls.append(c2)
- f(c2, i+1, depth+1)
+ if depth > 0:
+ calls.append(c2)
+ f(c2, i + 1, depth + 1)
+
f(call, 0, 0)
- return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail) for c in calls)
+ return '\n'.join('%s(%s)%s' % (method, ', '.join(c), tail)
+ for c in calls)
- # Run with --test argument to run unit tests
+ # Run with --test argument to run unit tests.
if len(sys.argv) > 1 and sys.argv[1] == '--test':
- import doctest
+ doctest = importlib.import_module('doctest')
doctest.testmod()
sys.exit()
- templates = yaml.safe_load(open(TEMPLATEFILE, "r").read())
- name_mapping = yaml.safe_load(open(NAME2DIRFILE, "r").read())
+ templates = yaml.safe_load(open(TEMPLATEFILE, 'r').read())
+ name_mapping = yaml.safe_load(open(NAME2DIRFILE, 'r').read())
tests = []
- test_yaml_directory = "yaml-new"
+ test_yaml_directory = 'yaml-new'
TESTSFILES = [
- os.path.join(test_yaml_directory, f) for f in os.listdir(test_yaml_directory)
- if f.endswith(".yaml")]
- for t in sum([ yaml.safe_load(open(f, "r").read()) for f in TESTSFILES], []):
+ os.path.join(test_yaml_directory, f)
+ for f in os.listdir(test_yaml_directory) if f.endswith('.yaml')
+ ]
+ for t in sum([yaml.safe_load(open(f, 'r').read()) for f in TESTSFILES],
+ []):
if 'DISABLED' in t:
continue
if 'meta' in t:
- eval(compile(t['meta'], '<meta test>', 'exec'), {}, {'tests':tests})
+ eval(compile(t['meta'], '<meta test>', 'exec'), {},
+ {'tests': tests})
else:
tests.append(t)
@@ -138,88 +154,89 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE):
category_contents_direct = {}
category_contents_all = {}
- def backref_html(name):
+ def backref_html(name: str) -> str:
backrefs = []
c = ''
for p in name.split('.')[:-1]:
- c += '.'+p
+ c += '.' + p
backrefs.append('<a href="index%s.html">%s</a>.' % (c, p))
backrefs.append(name.split('.')[-1])
return ''.join(backrefs)
- # Ensure the test output directories exist
- testdirs = [CANVASOUTPUTDIR, OFFSCREENCANVASOUTPUTDIR, CANVASIMAGEOUTPUTDIR, OFFSCREENCANVASIMAGEOUTPUTDIR, MISCOUTPUTDIR]
+ # Ensure the test output directories exist.
+ testdirs = [
+ CANVASOUTPUTDIR, OFFSCREENCANVASOUTPUTDIR, CANVASIMAGEOUTPUTDIR,
+ OFFSCREENCANVASIMAGEOUTPUTDIR, MISCOUTPUTDIR
+ ]
for map_dir in set(name_mapping.values()):
- testdirs.append("%s/%s" % (CANVASOUTPUTDIR, map_dir))
- testdirs.append("%s/%s" % (OFFSCREENCANVASOUTPUTDIR, map_dir))
+ testdirs.append('%s/%s' % (CANVASOUTPUTDIR, map_dir))
+ testdirs.append('%s/%s' % (OFFSCREENCANVASOUTPUTDIR, map_dir))
for d in testdirs:
- try: os.mkdir(d)
- except: pass # ignore if it already exists
+ try:
+ os.mkdir(d)
+ except FileExistsError:
+ pass # Ignore if it already exists,
used_images = {}
- def map_name(name):
+ def map_name(name: str) -> str:
mapped_name = None
for mn in sorted(name_mapping.keys(), key=len, reverse=True):
if name.startswith(mn):
- mapped_name = "%s/%s" % (name_mapping[mn], name)
+ mapped_name = '%s/%s' % (name_mapping[mn], name)
break
if not mapped_name:
- print("LIKELY ERROR: %s has no defined target directory mapping" % name)
+ print('LIKELY ERROR: %s has no defined target directory mapping' %
+ name)
+ return name
if 'manual' in test:
- mapped_name += "-manual"
+ mapped_name += '-manual'
return mapped_name
- def expand_test_code(code):
- code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m: expand_nonfinite(m.group(1), m.group(2), m.group(3)), code) # must come before '@assert throws'
+ def expand_test_code(code: str) -> str:
+ code = re.sub(r'@nonfinite ([^(]+)\(([^)]+)\)(.*)', lambda m:
+ expand_nonfinite(m.group(1), m.group(2), m.group(3)),
+ code) # Must come before '@assert throws'.
code = re.sub(r'@assert pixel (\d+,\d+) == (\d+,\d+,\d+,\d+);',
- r'_assertPixel(canvas, \1, \2);',
- code)
+ r'_assertPixel(canvas, \1, \2);', code)
code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+);',
- r'_assertPixelApprox(canvas, \1, \2, 2);',
- code)
+ r'_assertPixelApprox(canvas, \1, \2, 2);', code)
- code = re.sub(r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);',
- r'_assertPixelApprox(canvas, \1, \2, \3);',
- code)
+ code = re.sub(
+ r'@assert pixel (\d+,\d+) ==~ (\d+,\d+,\d+,\d+) \+/- (\d+);',
+ r'_assertPixelApprox(canvas, \1, \2, \3);', code)
code = re.sub(r'@assert throws (\S+_ERR) (.*);',
- r'assert_throws_dom("\1", function() { \2; });',
- code)
+ r'assert_throws_dom("\1", function() { \2; });', code)
code = re.sub(r'@assert throws (\S+Error) (.*);',
- r'assert_throws_js(\1, function() { \2; });',
- code)
+ r'assert_throws_js(\1, function() { \2; });', code)
- code = re.sub(r'@assert (.*) === (.*);',
- lambda m: '_assertSame(%s, %s, "%s", "%s");'
- % (m.group(1), m.group(2), escapeJS(m.group(1)), escapeJS(m.group(2)))
- , code)
+ code = re.sub(
+ r'@assert (.*) === (.*);', lambda m:
+ '_assertSame(%s, %s, "%s", "%s");' % (m.group(1), m.group(
+ 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code)
- code = re.sub(r'@assert (.*) !== (.*);',
- lambda m: '_assertDifferent(%s, %s, "%s", "%s");'
- % (m.group(1), m.group(2), escapeJS(m.group(1)), escapeJS(m.group(2)))
- , code)
+ code = re.sub(
+ r'@assert (.*) !== (.*);', lambda m:
+ '_assertDifferent(%s, %s, "%s", "%s");' % (m.group(1), m.group(
+ 2), escapeJS(m.group(1)), escapeJS(m.group(2))), code)
- code = re.sub(r'@assert (.*) =~ (.*);',
- lambda m: 'assert_regexp_match(%s, %s);'
- % (m.group(1), m.group(2))
- , code)
+ code = re.sub(
+ r'@assert (.*) =~ (.*);', lambda m: 'assert_regexp_match(%s, %s);'
+ % (m.group(1), m.group(2)), code)
- code = re.sub(r'@assert (.*);',
- lambda m: '_assert(%s, "%s");'
- % (m.group(1), escapeJS(m.group(1)))
- , code)
+ code = re.sub(
+ r'@assert (.*);', lambda m: '_assert(%s, "%s");' % (m.group(
+ 1), escapeJS(m.group(1))), code)
code = re.sub(r' @moz-todo', '', code)
- code = re.sub(r'@moz-UniversalBrowserRead;',
- ""
- , code)
+ code = re.sub(r'@moz-UniversalBrowserRead;', '', code)
- assert('@' not in code)
+ assert ('@' not in code)
return code
@@ -231,33 +248,32 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE):
if test.get('canvasType', []):
HTMLCanvas_test = False
OffscreenCanvas_test = False
- for type in test.get('canvasType'):
- if type.lower() == 'htmlcanvas':
+ for canvas_type in test.get('canvasType'):
+ if canvas_type.lower() == 'htmlcanvas':
HTMLCanvas_test = True
- elif type.lower() == 'offscreencanvas':
+ elif canvas_type.lower() == 'offscreencanvas':
OffscreenCanvas_test = True
name = test['name']
- print("\r(%s)" % name, " "*32, "\t")
+ print('\r(%s)' % name, ' ' * 32, '\t')
if name in used_tests:
- print("Test %s is defined twice" % name)
+ print('Test %s is defined twice' % name)
used_tests[name] = 1
mapped_name = map_name(name)
- if not mapped_name:
- mapped_name = name
-
cat_total = ''
for cat_part in [''] + name.split('.')[:-1]:
- cat_total += cat_part+'.'
- if not cat_total in category_names: category_names.append(cat_total)
+ cat_total += cat_part + '.'
+ if not cat_total in category_names:
+ category_names.append(cat_total)
category_contents_all.setdefault(cat_total, []).append(name)
category_contents_direct.setdefault(cat_total, []).append(name)
- if test.get('expected', '') == 'green' and re.search(r'@assert pixel .* 0,0,0,0;', test['code']):
- print("Probable incorrect pixel test in %s" % name)
+ if test.get('expected', '') == 'green' and re.search(
+ r'@assert pixel .* 0,0,0,0;', test['code']):
+ print('Probable incorrect pixel test in %s' % name)
code_canvas = expand_test_code(test['code']).strip()
@@ -266,78 +282,97 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE):
expected = test['expected']
expected_img = None
if expected == 'green':
- expected_img = "/images/green-100x50.png"
+ expected_img = '/images/green-100x50.png'
elif expected == 'clear':
- expected_img = "/images/clear-100x50.png"
+ expected_img = '/images/clear-100x50.png'
else:
if ';' in expected:
- print("Found semicolon in %s" % name)
- expected = re.sub(r'^size (\d+) (\d+)',
- r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)\ncr = cairo.Context(surface)',
- expected)
-
- if mapped_name.endswith("-manual"):
- png_name = mapped_name[:-len("-manual")]
+ print('Found semicolon in %s' % name)
+ expected = re.sub(
+ r'^size (\d+) (\d+)',
+ r'surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, \1, \2)'
+ r'\ncr = cairo.Context(surface)', expected)
+
+ if mapped_name.endswith('-manual'):
+ png_name = mapped_name[:-len('-manual')]
else:
png_name = mapped_name
- expected_canvas = expected + "\nsurface.write_to_png('%s/%s.png')\n" % (CANVASIMAGEOUTPUTDIR, png_name)
- eval(compile(expected_canvas, '<test %s>' % test['name'], 'exec'), {}, {'cairo':cairo})
-
- expected_offscreencanvas = expected + "\nsurface.write_to_png('%s/%s.png')\n" % (OFFSCREENCANVASIMAGEOUTPUTDIR, png_name)
- eval(compile(expected_offscreencanvas, '<test %s>' % test['name'], 'exec'), {}, {'cairo':cairo})
-
- expected_img = "%s.png" % name
+ expected_canvas = (expected +
+ "\nsurface.write_to_png('%s/%s.png')\n" %
+ (CANVASIMAGEOUTPUTDIR, png_name))
+ eval(
+ compile(expected_canvas, '<test %s>' % test['name'],
+ 'exec'), {}, {'cairo': cairo})
+
+ expected_offscreencanvas = (
+ expected + "\nsurface.write_to_png('%s/%s.png')\n" %
+ (OFFSCREENCANVASIMAGEOUTPUTDIR, png_name))
+ eval(
+ compile(expected_offscreencanvas,
+ '<test %s>' % test['name'], 'exec'), {},
+ {'cairo': cairo})
+
+ expected_img = '%s.png' % name
if expected_img:
- expectation_html = ('<p class="output expectedtext">Expected output:' +
- '<p><img src="%s" class="output expected" id="expected" alt="">' % (expected_img))
+ expectation_html = (
+ '<p class="output expectedtext">Expected output:<p>'
+ '<img src="%s" class="output expected" id="expected" '
+ 'alt="">' % expected_img)
canvas = test.get('canvas', 'width="100" height="50"')
- prev = tests[i-1]['name'] if i != 0 else 'index'
- next = tests[i+1]['name'] if i != len(tests)-1 else 'index'
+ prev_test = tests[i - 1]['name'] if i != 0 else 'index'
+ next_test = tests[i + 1]['name'] if i != len(tests) - 1 else 'index'
name_wrapped = name.replace('.', '.&#8203;')
notes = '<p class="notes">%s' % test['notes'] if 'notes' in test else ''
- timeout = '\n<meta name="timeout" content="%s">' % test['timeout'] if 'timeout' in test else ''
+ timeout = ('\n<meta name="timeout" content="%s">' %
+ test['timeout'] if 'timeout' in test else '')
scripts = ''
for s in test.get('scripts', []):
scripts += '<script src="%s"></script>\n' % (s)
variants = test.get('script-variants', {})
- script_variants = [(v, '<script src="%s"></script>\n' % (s)) for (v, s) in variants.items()]
+ script_variants = [(v, '<script src="%s"></script>\n' % (s))
+ for (v, s) in variants.items()]
if not script_variants:
script_variants = [('', '')]
images = ''
- for i in test.get('images', []):
- id = i.split('/')[-1]
- if '/' not in i:
- used_images[i] = 1
- i = '../images/%s' % i
- images += '<img src="%s" id="%s" class="resource">\n' % (i,id)
- for i in test.get('svgimages', []):
- id = i.split('/')[-1]
- if '/' not in i:
- used_images[i] = 1
- i = '../images/%s' % i
- images += '<svg><image xlink:href="%s" id="%s" class="resource"></svg>\n' % (i,id)
- images = images.replace("../images/", "/images/")
+ for src in test.get('images', []):
+ img_id = src.split('/')[-1]
+ if '/' not in src:
+ used_images[src] = 1
+ src = '../images/%s' % src
+ images += '<img src="%s" id="%s" class="resource">\n' % (src,
+ img_id)
+ for src in test.get('svgimages', []):
+ img_id = src.split('/')[-1]
+ if '/' not in src:
+ used_images[src] = 1
+ src = '../images/%s' % src
+ images += ('<svg><image xlink:href="%s" id="%s" class="resource">'
+ '</svg>\n' % (src, img_id))
+ images = images.replace('../images/', '/images/')
fonts = ''
fonthack = ''
- for i in test.get('fonts', []):
- fonts += '@font-face {\n font-family: %s;\n src: url("/fonts/%s.ttf");\n}\n' % (i, i)
- # Browsers require the font to actually be used in the page
+ for font in test.get('fonts', []):
+ fonts += ('@font-face {\n font-family: %s;\n'
+ ' src: url("/fonts/%s.ttf");\n}\n' % (font, font))
+ # Browsers require the font to actually be used in the page.
if test.get('fonthack', 1):
- fonthack += '<span style="font-family: %s; position: absolute; visibility: hidden">A</span>\n' % i
+ fonthack += ('<span style="font-family: %s; position: '
+ 'absolute; visibility: hidden">A</span>\n' % font)
if fonts:
fonts = '<style>\n%s</style>\n' % fonts
- fallback = test.get('fallback', '<p class="fallback">FAIL (fallback content)</p>')
+ fallback = test.get('fallback',
+ '<p class="fallback">FAIL (fallback content)</p>')
desc = test.get('desc', '')
escaped_desc = simpleEscapeJS(desc)
@@ -353,35 +388,58 @@ def genTestUtils_union(TEMPLATEFILE, NAME2DIRFILE):
name_variant = '' if not variant else '.' + variant
template_params = {
- 'name':name + name_variant,
- 'name_wrapped':name_wrapped, 'backrefs':backref_html(name),
- 'mapped_name':mapped_name,
- 'desc':desc, 'escaped_desc':escaped_desc,
- 'prev':prev, 'next':next, 'notes':notes, 'images':images,
- 'fonts':fonts, 'fonthack':fonthack, 'timeout': timeout,
- 'canvas':canvas, 'expected':expectation_html, 'code':code_canvas,
- 'scripts':scripts + extra_script,
- 'fallback':fallback, 'attributes':attributes,
+ 'name': name + name_variant,
+ 'name_wrapped': name_wrapped,
+ 'backrefs': backref_html(name),
+ 'mapped_name': mapped_name,
+ 'desc': desc,
+ 'escaped_desc': escaped_desc,
+ 'prev': prev_test,
+ 'next': next_test,
+ 'notes': notes,
+ 'images': images,
+ 'fonts': fonts,
+ 'fonthack': fonthack,
+ 'timeout': timeout,
+ 'canvas': canvas,
+ 'expected': expectation_html,
+ 'code': code_canvas,
+ 'scripts': scripts + extra_script,
+ 'fallback': fallback,
+ 'attributes': attributes,
'context_args': context_args
}
# Create test cases for canvas and offscreencanvas.
if HTMLCanvas_test:
- f = codecs.open('%s/%s%s.html' % (CANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
+ f = codecs.open(
+ '%s/%s%s.html' %
+ (CANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
f.write(templates['w3ccanvas'] % template_params)
if OffscreenCanvas_test:
- f_html = codecs.open('%s/%s%s.html' % (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
- f_worker = codecs.open('%s/%s%s.worker.js' % (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w', 'utf-8')
- if ("then(t_pass, t_fail);" in code_canvas):
- temp_offscreen = templates['w3coffscreencanvas'].replace("t.done();\n", "")
- temp_worker = templates['w3cworker'].replace("t.done();\n", "")
+ f_html = codecs.open(
+ '%s/%s%s.html' %
+ (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w',
+ 'utf-8')
+ f_worker = codecs.open(
+ '%s/%s%s.worker.js' %
+ (OFFSCREENCANVASOUTPUTDIR, mapped_name, name_variant), 'w',
+ 'utf-8')
+ if ('then(t_pass, t_fail);' in code_canvas):
+ temp_offscreen = templates['w3coffscreencanvas'].replace(
+ 't.done();\n', '')
+ temp_worker = templates['w3cworker'].replace(
+ 't.done();\n', '')
f_html.write(temp_offscreen % template_params)
- timeout = '// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else ''
+ timeout = ('// META: timeout=%s\n' %
+ test['timeout'] if 'timeout' in test else '')
template_params['timeout'] = timeout
f_worker.write(temp_worker % template_params)
else:
- f_html.write(templates['w3coffscreencanvas'] % template_params)
- timeout = '// META: timeout=%s\n' % test['timeout'] if 'timeout' in test else ''
+ f_html.write(templates['w3coffscreencanvas'] %
+ template_params)
+ timeout = ('// META: timeout=%s\n' %
+ test['timeout'] if 'timeout' in test else '')
template_params['timeout'] = timeout
f_worker.write(templates['w3cworker'] % template_params)
print()
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html
index 2c6f0b62822..17840724d9e 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup.https.html
@@ -20,25 +20,26 @@
// This document has COOP: restrict-properties. The popup has COOP:
// restrict-properties. Opening from an iframe should not be different from
-// opening from the main frame and the opener should be severed.
+// opening from the main frame and the opener should be restricted if
+// cross-origin.
[
{
"title": "same origin iframe, same origin popup",
"iframeOrigin": SAME_ORIGIN,
"popupOrigin": SAME_ORIGIN,
- "opener": "restricted"
+ "opener": "preserved"
},
{
"title": "same site iframe, same origin popup",
"iframeOrigin": SAME_SITE,
"popupOrigin": SAME_ORIGIN,
- "opener": "restricted"
+ "opener": "preserved"
},
{
"title": "cross origin iframe, same origin popup",
"iframeOrigin": CROSS_ORIGIN,
"popupOrigin": SAME_ORIGIN,
- "opener": "restricted"
+ "opener": "preserved"
},
{
"title": "same origin iframe, same site popup",
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers
deleted file mode 100644
index d5c99062d2b..00000000000
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers
+++ /dev/null
@@ -1 +0,0 @@
-Cross-Origin-Opener-Policy: restrict-properties
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html
index 491cbc3b9d0..c0020fa23a4 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/tentative/restrict-properties/popup-with-same-origin.https.html
@@ -34,7 +34,7 @@
{
"title": "popup with coop restrict-properties",
"coop": "restrict-properties",
- "opener": "restricted"
+ "opener": "preserved"
}
].forEach(variant => {
popup_test(`Same-origin ${variant.title}`, SAME_ORIGIN,
diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.tentative.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.tentative.html
new file mode 100644
index 00000000000..3d139c5950e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-target-element-disabled.tentative.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://github.com/whatwg/html/pull/8221#discussion_r1049379113">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id=outerpopover popover=auto>
+ <button popovertoggletarget=innerpopover disabled>toggle popover</button>
+</div>
+<div id=innerpopover popover=auto>popover</div>
+<script>
+test(() => {
+ outerpopover.showPopover();
+ innerpopover.showPopover();
+ assert_true(innerpopover.matches(':open'),
+ 'The inner popover should be able to open successfully.');
+ assert_false(outerpopover.matches(':open'),
+ 'The outer popover should be closed by opening the inner one.');
+}, 'Disabled popover*target buttons should not affect the popover heirarchy.');
+</script>
+
+<div id=outerpopover2 popover=auto>
+ <button id=togglebutton2 popovertoggletarget=innerpopover2>toggle popover</button>
+</div>
+<div id=innerpopover2 popover=auto>popover</div>
+<script>
+test(() => {
+ outerpopover2.showPopover();
+ innerpopover2.showPopover();
+ assert_true(innerpopover2.matches(':open'),
+ 'The inner popover should be able to open successfully.');
+ assert_true(outerpopover2.matches(':open'),
+ 'The outer popover should stay open when opening the inner one.');
+
+ togglebutton2.disabled = true;
+ assert_false(innerpopover2.matches(':open'),
+ 'The inner popover should be closed when the hierarchy is broken.');
+ assert_false(outerpopover2.matches(':open'),
+ 'The outer popover should be closed when the hierarchy is broken.');
+}, 'Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly outer popover is closed.');
+</script>
+
+<div id=outerpopover3 popover=auto>
+ <button id=togglebutton3 popovertoggletarget=innerpopover3>toggle popover</button>
+</div>
+<div id=innerpopover3 popover=auto>popover</div>
+<script>
+test(() => {
+ outerpopover3.showPopover();
+ innerpopover3.showPopover();
+ assert_true(innerpopover3.matches(':open'),
+ 'The inner popover should be able to open successfully.');
+ assert_true(outerpopover3.matches(':open'),
+ 'The outer popover should stay open when opening the inner one.');
+
+ togglebutton3.disabled = true;
+ assert_false(innerpopover3.matches(':open'),
+ 'The inner popover be should be closed when the hierarchy is broken.');
+ assert_false(outerpopover3.matches(':open'),
+ 'The outer popover be should be closed when the hierarchy is broken.');
+}, 'Disabling popover*target buttons when popovers are open should still cause all popovers to be closed when the formerly inner popover is closed.');
+</script>
+
+<div id=outerpopover4 popover=auto>
+ <button id=togglebutton4 popovertoggletarget=innerpopover4>toggle popover</button>
+</div>
+<div id=innerpopover4 popover=auto>popover</div>
+<form id=submitform>form</form>
+<script>
+test(() => {
+ outerpopover4.showPopover();
+ innerpopover4.showPopover();
+ assert_true(innerpopover4.matches(':open'),
+ 'The inner popover should be able to open successfully.');
+ assert_true(outerpopover4.matches(':open'),
+ 'The outer popover should stay open when opening the inner one.');
+
+ togglebutton4.setAttribute('form', 'submitform');
+ assert_false(innerpopover4.matches(':open'),
+ 'The inner popover be should be closed when the hierarchy is broken.');
+ assert_false(outerpopover4.matches(':open'),
+ 'The outer popover be should be closed when the hierarchy is broken.');
+}, 'Setting the form attribute on popover*target buttons when popovers are open should close all popovers.');
+</script>
+
+<div id=outerpopover5 popover=auto>
+ <input type=button id=togglebutton5 popovertoggletarget=innerpopover5>toggle popover</button>
+</div>
+<div id=innerpopover5 popover=auto>popover</div>
+<script>
+test(() => {
+ outerpopover5.showPopover();
+ innerpopover5.showPopover();
+ assert_true(innerpopover5.matches(':open'),
+ 'The inner popover should be able to open successfully.');
+ assert_true(outerpopover5.matches(':open'),
+ 'The outer popover should stay open when opening the inner one.');
+
+ togglebutton5.setAttribute('type', 'text');
+ assert_false(innerpopover5.matches(':open'),
+ 'The inner popover be should be closed when the hierarchy is broken.');
+ assert_false(outerpopover5.matches(':open'),
+ 'The outer popover be should be closed when the hierarchy is broken.');
+}, 'Changing the input type on a popover*target button when popovers are open should close all popovers.');
+</script>
+
+<div id=outerpopover6 popover=auto>
+ <button id=togglebutton6 popovertoggletarget=innerpopover6>toggle popover</button>
+</div>
+<div id=innerpopover6 popover=auto>popover</div>
+<script>
+test(() => {
+ outerpopover6.showPopover();
+ innerpopover6.showPopover();
+ assert_true(innerpopover6.matches(':open'),
+ 'The inner popover should be able to open successfully.');
+ assert_true(outerpopover6.matches(':open'),
+ 'The outer popover should stay open when opening the inner one.');
+
+ togglebutton6.remove();
+ assert_false(innerpopover6.matches(':open'),
+ 'The inner popover be should be closed when the hierarchy is broken.');
+ assert_false(outerpopover6.matches(':open'),
+ 'The outer popover be should be closed when the hierarchy is broken.');
+}, 'Disconnecting popover*target buttons when popovers are open should close all popovers.');
+</script>
diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
index 72009c61e6e..49220324f2f 100644
--- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
+++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/server/context.any.js.ini
@@ -1,7 +1,3 @@
-[context.any.worker-module.html]
- expected:
- if product == "firefox": [TIMEOUT, OK] # https://bugzilla.mozilla.org/show_bug.cgi?id=1247687
-
[context.any.sharedworker-module.html]
expected:
if product == "firefox": TIMEOUT # https://bugzilla.mozilla.org/show_bug.cgi?id=1247687
diff --git a/tests/wpt/web-platform-tests/interfaces/payment-handler.idl b/tests/wpt/web-platform-tests/interfaces/payment-handler.idl
index d0e5bd9fda8..65b64bdf31c 100644
--- a/tests/wpt/web-platform-tests/interfaces/payment-handler.idl
+++ b/tests/wpt/web-platform-tests/interfaces/payment-handler.idl
@@ -9,7 +9,6 @@ partial interface ServiceWorkerRegistration {
[SecureContext, Exposed=(Window,Worker)]
interface PaymentManager {
- [SameObject] readonly attribute PaymentInstruments instruments;
attribute DOMString userHint;
Promise<undefined> enableDelegations(sequence<PaymentDelegation> delegations);
};
@@ -21,28 +20,6 @@ enum PaymentDelegation {
"payerEmail"
};
-[SecureContext, Exposed=(Window,Worker)]
-interface PaymentInstruments {
- Promise<boolean> delete(DOMString instrumentKey);
- Promise<any> get(DOMString instrumentKey);
- Promise<sequence<DOMString>> keys();
- Promise<boolean> has(DOMString instrumentKey);
- Promise<undefined> set(DOMString instrumentKey, PaymentInstrument details);
- Promise<undefined> clear();
-};
-
-dictionary PaymentInstrument {
- required DOMString name;
- sequence<ImageObject> icons;
- DOMString method;
-};
-
-dictionary ImageObject {
- required USVString src;
- DOMString sizes;
- DOMString type;
-};
-
partial interface ServiceWorkerGlobalScope {
attribute EventHandler oncanmakepayment;
};
diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html b/tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html
index a4f7d8079d3..5cb3767ca7d 100644
--- a/tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html
+++ b/tests/wpt/web-platform-tests/largest-contentful-paint/image-upscaling.html
@@ -29,15 +29,18 @@
applyStyle(image, imageStyle);
applyStyle(container, containerStyle);
image.id = token();
+ container.id = token();
const entryReported = new Promise(resolve => new popup.PerformanceObserver(entryList => {
entryList.getEntries().forEach(entry => {
- if (entry.id === image.id)
+ if (entry.id === image.id || entry.id === container.id)
resolve(entry.size);
});
}).observe({type: 'largest-contentful-paint'}));
popup.document.body.appendChild(container);
- const timeout = new Promise(resolve => t.step_timeout(() => resolve('not reported'), 1000));
- return {lcpSize: (await Promise.any([entryReported, timeout])), naturalSize};
+ return {
+ lcpSize: (await await_with_timeout(1000, 'not reported', entryReported)),
+ naturalSize
+ };
}
// We set the image to display: none when testing background, so that only the background is reported
diff --git a/tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js b/tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js
index 043587ca654..b0fe1b08cb4 100644
--- a/tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js
+++ b/tests/wpt/web-platform-tests/largest-contentful-paint/resources/largest-contentful-paint-helpers.js
@@ -1,6 +1,22 @@
const image_delay = 1000;
const delay_pipe_value = image_delay / 1000;
+const await_with_timeout = async (delay, message, promise, cleanup = ()=>{}) => {
+ let timeout_id;
+ const timeout = new Promise((_, reject) => {
+ timeout_id = step_timeout(() =>
+ reject(new DOMException(message, "TimeoutError")), delay)
+ });
+ let result = null;
+ try {
+ result = await Promise.race([promise, timeout]);
+ clearTimeout(timeout_id);
+ } finally {
+ cleanup();
+ }
+ return result;
+};
+
// Receives an image LargestContentfulPaint |entry| and checks |entry|'s attribute values.
// The |timeLowerBound| parameter is a lower bound on the loadTime value of the entry.
// The |options| parameter may contain some string values specifying the following:
diff --git a/tests/wpt/web-platform-tests/lint.ignore b/tests/wpt/web-platform-tests/lint.ignore
index 11821957cf4..011f05c607e 100644
--- a/tests/wpt/web-platform-tests/lint.ignore
+++ b/tests/wpt/web-platform-tests/lint.ignore
@@ -116,8 +116,6 @@ CONSOLE: service-workers/service-worker/navigation-redirect.https.html
CONSOLE: service-workers/service-worker/resources/clients-get-other-origin.html
CONSOLE: webrtc/tools/*
CONSOLE: webaudio/resources/audit.js:41
-CONSOLE: resource-timing/resources/resource-loaders.js
-CONSOLE: resource-timing/resources/entry-invariants.js
# use of console in a public library - annotation-model ensures
# it is not actually used
diff --git a/tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js b/tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js
index dfb0190abac..d34e20630bf 100644
--- a/tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js
+++ b/tests/wpt/web-platform-tests/payment-handler/idlharness.https.any.js
@@ -20,7 +20,6 @@ idl_test(
idl_array.add_objects({
ServiceWorkerRegistration: ['registration'],
PaymentManager: ['paymentManager'],
- PaymentInstruments: ['instruments'],
});
}
if (isServiceWorker) {
@@ -41,7 +40,6 @@ idl_test(
}
if (hasRegistration) {
self.paymentManager = self.registration.paymentManager;
- self.instruments = self.paymentManager.instruments;
}
}
);
diff --git a/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html b/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html
deleted file mode 100644
index 121c1315688..00000000000
--- a/tests/wpt/web-platform-tests/payment-handler/payment-instruments.https.html
+++ /dev/null
@@ -1,379 +0,0 @@
-<!doctype html>
-<meta charset="utf-8">
-<title>Tests for PaymentInstruments interface</title>
-<link rel="help" href="https://w3c.github.io/payment-handler/#paymentinstruments-interface">
-<link rel="manifest" href="manifest.json">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="register-and-activate-service-worker.js"></script>
-<script>
-function runTests(registration) {
- const methodName = window.location.origin + '/payment-handler/payment-app/';
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- await registration.paymentManager.instruments.set('instrument-key-1', {
- name: 'Instrument Name 1',
- });
- await registration.paymentManager.instruments.set('instrument-key-2', {
- name: 'Instrument Name 2',
- });
- await registration.paymentManager.instruments.delete('instrument-key-1');
- await registration.paymentManager.instruments.set('instrument-key-1', {
- name: 'Instrument Name 1',
- });
- const keys = await registration.paymentManager.instruments.keys();
- assert_array_equals(keys, ['instrument-key-2', 'instrument-key-1']);
- }, 'Instrument keys are returned in the original insertion order');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- await registration.paymentManager.instruments.set(
- 'existing-instrument-key',
- {
- name: 'Instrument Name',
- },
- );
- const result = await registration.paymentManager.instruments.delete(
- 'existing-instrument-key',
- );
- assert_true(result);
- }, 'Deleting an existing instrument returns true');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- await registration.paymentManager.instruments.set(
- 'existing-instrument-key',
- {
- name: 'Instrument Name',
- },
- );
- await registration.paymentManager.instruments.delete(
- 'existing-instrument-key',
- );
- const result = await registration.paymentManager.instruments.delete(
- 'existing-instrument-key',
- );
- assert_false(result);
- }, 'Deleting an existing instrument the second time returns false');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- const result = await registration.paymentManager.instruments.delete(
- 'non-existing-instrument-key',
- );
- assert_false(result);
- }, 'Deleting a non-existing instrument returns false');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- await registration.paymentManager.instruments.set(
- 'existing-instrument-key',
- {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- sizes: '256x256',
- type: 'image/png',
- },
- ],
- method: methodName,
- },
- );
- const result = await registration.paymentManager.instruments.get(
- 'existing-instrument-key',
- );
- assert_equals(result.name, 'Instrument Name');
- }, 'Getting an existing instrument returns the instrument');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- const result = await registration.paymentManager.instruments.get(
- 'non-existing-instrument-key',
- );
- assert_equals(result, undefined);
- }, 'Getting a non-existing instrument returns undefined');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- await registration.paymentManager.instruments.set(
- 'existing-instrument-key',
- {
- name: 'Instrument Name v1',
- icons: [
- {src: '/images/green-16x16.png', sizes: '16x16', type: 'image/png'},
- ],
- method: methodName,
- },
- );
- let result = await registration.paymentManager.instruments.get(
- 'existing-instrument-key',
- );
- assert_equals(result.name, 'Instrument Name v1');
- assert_equals(result.icons.length, 1);
- assert_equals(
- result.icons[0].src,
- new URL('/images/green-16x16.png', window.location.href).href,
- );
- assert_equals(result.icons[0].sizes, '16x16');
- assert_equals(result.icons[0].type, 'image/png');
- assert_equals(result.method, methodName);
- assert_array_equals(result.capabilities.supportedNetworks, ['mir']);
- await registration.paymentManager.instruments.set(
- 'existing-instrument-key',
- {
- name: 'Instrument Name v2',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- sizes: '256x256',
- type: 'image/png',
- },
- ],
- method: methodName,
- },
- );
- result = await registration.paymentManager.instruments.get(
- 'existing-instrument-key',
- );
- assert_equals(result.name, 'Instrument Name v2');
- assert_equals(result.icons.length, 1);
- assert_equals(
- result.icons[0].src,
- new URL('/images/rgrg-256x256.png', window.location.href).href,
- );
- assert_equals(result.icons[0].sizes, '256x256');
- assert_equals(result.icons[0].type, 'image/png');
- assert_equals(result.method, methodName);
- }, 'Resetting an existing instrument updates the instrument');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- await registration.paymentManager.instruments.set(
- 'existing-instrument-key',
- {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- sizes: '256x256',
- type: 'image/png',
- },
- ],
- method: methodName,
- },
- );
- await registration.paymentManager.instruments.clear();
- const result = await registration.paymentManager.instruments.get(
- 'existing-instrument-key',
- );
- assert_equals(result, undefined);
- }, 'Clearing the instruments');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- const setPromise = registration.paymentManager.instruments.set(
- 'instrument-key',
- {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- sizes: '256x256',
- type: 'image/jif',
- },
- ],
- method: methodName,
- },
- );
- return promise_rejects_js(t, TypeError, setPromise);
- }, 'Cannot register instruments with invalid icon media type image/jif');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- const setPromise = registration.paymentManager.instruments.set(
- 'instrument-key',
- {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- sizes: '256x256',
- type: 'image/pn' + 'g'.repeat(100000),
- },
- ],
- method: methodName,
- },
- );
- return promise_rejects_js(t, TypeError, setPromise);
- }, "Don't crash when registering instruments with very long icon media type image/pngggggg...");
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- return registration.paymentManager.instruments.set('instrument-key', {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- sizes: '8'.repeat(100000) + 'x' + '8'.repeat(100000),
- type: 'image/png',
- },
- ],
- method: methodName,
- });
- }, "Don't crash when registering an instrument with a very long icon size 888...x888...");
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- return registration.paymentManager.instruments.set('instrument-key', {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- type: 'image/png',
- },
- ],
- method: methodName,
- });
- }, "Don't crash when 'sizes' missing from icon definition");
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- return registration.paymentManager.instruments.set('instrument-key', {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- sizes: '256x256',
- },
- ],
- method: methodName,
- });
- }, "Don't crash when 'type' missing from icon definition");
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- const setPromise = registration.paymentManager.instruments.set(
- 'instrument-key',
- {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rgrg-256x256.png',
- sizes: '256 256',
- type: 'image/png',
- },
- ],
- method: methodName,
- },
- );
- return promise_rejects_js(t, TypeError, setPromise);
- }, 'Cannot register instruments with invalid icon size "256 256" (missing "x")');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- const setPromise = registration.paymentManager.instruments.set(
- 'instrument-key',
- {
- name: 'Instrument Name',
- icons: [
- {
- src: '/images/rg\0rg-256x256.png',
- sizes: '256x256',
- type: 'image/png',
- },
- ],
- method: methodName,
- },
- );
- return promise_rejects_js(t, TypeError, setPromise);
- }, 'Cannot register instruments with invalid icon URL (has a null character)');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- const setPromise = registration.paymentManager.instruments.set(
- 'instrument-key',
- {
- name: 'Instrument Name',
- icons: [
- {
- src: 'http://test.example/images/rgrg-256x256.png',
- sizes: '256x256',
- type: 'image/png',
- },
- ],
- method: methodName,
- },
- );
- return promise_rejects_js(t, TypeError, setPromise);
- }, 'Cannot register instruments with non-existing non-https icon URL');
-
- promise_test(async t => {
- await registration.paymentManager.instruments.clear();
- const setPromise = registration.paymentManager.instruments.set(
- 'instrument-key',
- {
- name: 'Instrument Name',
- icons: [
- {
- src:
- 'http://www.chromium.org/_/rsrc/1438879449147/config/customLogo.gif',
- sizes: '48x48',
- type: 'image/gif',
- },
- ],
- method: methodName,
- },
- );
- return promise_rejects_js(t, TypeError, setPromise);
- }, 'Cannot register instruments with an existing non-https icon URL');
-
- async function testUnusualStrings(existingKey, nonExistingKey) {
- await registration.paymentManager.instruments.clear();
- await registration.paymentManager.instruments.set(existingKey, {
- name: existingKey,
- icons: [
- {src: '/images/rgrg-256x256.png', sizes: '256x256', type: 'image/png'},
- ],
- method: existingKey,
- capabilities: {aCapabilityName: existingKey},
- });
- const hasExistingInstrument = await registration.paymentManager.instruments.has(
- existingKey,
- );
- assert_true(hasExistingInstrument);
- const hasNonExistingInstrument = await registration.paymentManager.instruments.has(
- nonExistingKey,
- );
- assert_false(hasNonExistingInstrument);
- const existingInstrument = await registration.paymentManager.instruments.get(
- existingKey,
- );
- assert_equals(existingInstrument.name, existingKey);
- const nonExistingInstrument = await registration.paymentManager.instruments.get(
- nonExistingKey,
- );
- assert_equals(nonExistingInstrument, undefined);
- const deletedExistingInstrument = await registration.paymentManager.instruments.delete(
- existingKey,
- );
- assert_true(deletedExistingInstrument);
- const deletedNonExistingInstrument = await registration.paymentManager.instruments.delete(
- nonExistingKey,
- );
- assert_false(deletedNonExistingInstrument);
- }
-
- promise_test(async t => {
- const length = 100000;
- await testUnusualStrings('0'.repeat(length), '1'.repeat(length));
- }, "Don't crash on very long key, name, method, and capability strings.");
-
- promise_test(async t => {
- await testUnusualStrings('foo\0bar', 'foo\0baz');
- }, "Don't crash on null characters in key, name, method, and capability strings.");
-}
-
-registerAndActiveServiceWorker('app-simple.js', 'payment-app/', runTests);
-</script>
diff --git a/tests/wpt/web-platform-tests/payment-handler/register-and-activate-service-worker.js b/tests/wpt/web-platform-tests/payment-handler/register-and-activate-service-worker.js
deleted file mode 100644
index fb54c5c0648..00000000000
--- a/tests/wpt/web-platform-tests/payment-handler/register-and-activate-service-worker.js
+++ /dev/null
@@ -1,28 +0,0 @@
-async function registerAndActiveServiceWorker(script, scope, callback) {
- const registration = await navigator.serviceWorker.register(script, {scope});
- const serviceWorker =
- registration.installing || registration.waiting || registration.active;
- if (serviceWorker) {
- waitForServiceWorkerActivation(scope, callback);
- return;
- }
-
- registration.addEventListener('updatefound', event => {
- waitForServiceWorkerActivation(scope, callback);
- });
-}
-
-async function waitForServiceWorkerActivation(scope, callback) {
- const registration = await navigator.serviceWorker.getRegistration(scope);
- if (registration.active) {
- callback(registration);
- return;
- }
-
- const serviceWorker = registration.installing || registration.waiting;
- serviceWorker.addEventListener('statechange', event => {
- if (event.target.state == 'activated') {
- callback(registration);
- }
- });
-}
diff --git a/tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html b/tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html
index 2e5dea3a4ae..27c20448435 100644
--- a/tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html
+++ b/tests/wpt/web-platform-tests/payment-handler/same-object-attributes.https.html
@@ -13,7 +13,6 @@ promise_test(async t => {
await wait_for_state(t, registration.installing, 'activated');
assert_equals(registration.paymentManager, registration.paymentManager);
- assert_equals(registration.paymentManager.instruments, registration.paymentManager.instruments);
});
</script>
diff --git a/tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html b/tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html
index 1b107d3aef7..8e368d13807 100644
--- a/tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html
+++ b/tests/wpt/web-platform-tests/resource-timing/cross-origin-start-end-time-with-redirects.html
@@ -19,13 +19,19 @@ const delay = 2
const blank_page = `/resource-timing/resources/blank_page_green.htm`;
const destUrl = `/common/slow-redirect.py?delay=${delay}&location=${REMOTE_ORIGIN}/${blank_page}`;
-const timeBefore = performance.now()
-attribute_test(load.iframe, destUrl, entry => {
- assert_equals(entry.startTime, entry.fetchStart, 'startTime and fetchStart should be equal');
- assert_greater_than(entry.startTime, timeBefore, 'startTime and fetchStart should be greater than the time before fetching');
- // See https://github.com/w3c/resource-timing/issues/264
- assert_less_than(Math.round(entry.startTime - timeBefore), delay * 1000, 'startTime should not expose redirect delays');
-}, "Verify that cross-origin resources don't implicitly expose their redirect timings")
+const timeBefore = performance.now();
+(async () => {
+ // Wait 10 ms, to ensure the difference between startTime and timeBefore is
+ // larger than 1 ms, to avoid flakiness in browsers that clamp timestamps to
+ // 1 ms.
+ await new Promise(r => step_timeout(r, 10));
+ attribute_test(load.iframe, destUrl, entry => {
+ assert_equals(entry.startTime, entry.fetchStart, 'startTime and fetchStart should be equal');
+ assert_greater_than(entry.startTime, timeBefore, 'startTime and fetchStart should be greater than the time before fetching');
+ // See https://github.com/w3c/resource-timing/issues/264
+ assert_less_than(Math.round(entry.startTime - timeBefore), delay * 1000, 'startTime should not expose redirect delays');
+ }, "Verify that cross-origin resources don't implicitly expose their redirect timings")
+})();
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html b/tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html
index 4d5d121fe32..6990c6c0608 100644
--- a/tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html
+++ b/tests/wpt/web-platform-tests/resource-timing/object-not-found-after-cross-origin-redirect.html
@@ -23,13 +23,19 @@ const load_null_object = async path => {
}
const destUrl = `/common/slow-redirect.py?delay=${delay}&location=${REMOTE_ORIGIN}${not_found_page}`;
-const timeBefore = performance.now()
-attribute_test(load_null_object, destUrl, entry => {
- assert_equals(entry.startTime, entry.fetchStart, 'startTime and fetchStart should be equal');
- assert_greater_than(entry.startTime, timeBefore, 'startTime and fetchStart should be greater than the time before fetching');
- // See https://github.com/w3c/resource-timing/issues/264
- assert_less_than(Math.round(entry.startTime - timeBefore), delay * 1000, 'startTime should not expose redirect delays');
-}, "Verify that cross-origin object resources don't implicitly expose their redirect timings")
+const timeBefore = performance.now();
+(async () => {
+ // Wait 10 ms, to ensure the difference between startTime and timeBefore is
+ // larger than 1 ms, to avoid flakiness in browsers that clamp timestamps to
+ // 1 ms.
+ await new Promise(r => step_timeout(r, 10));
+ attribute_test(load_null_object, destUrl, entry => {
+ assert_equals(entry.startTime, entry.fetchStart, 'startTime and fetchStart should be equal');
+ assert_greater_than(entry.startTime, timeBefore, 'startTime and fetchStart should be greater than the time before fetching');
+ // See https://github.com/w3c/resource-timing/issues/264
+ assert_less_than(Math.round(entry.startTime - timeBefore), delay * 1000, 'startTime should not expose redirect delays');
+ }, "Verify that cross-origin object resources don't implicitly expose their redirect timings")
+})();
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js b/tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js
index dc907533946..bbc913b7229 100644
--- a/tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js
+++ b/tests/wpt/web-platform-tests/resource-timing/resources/entry-invariants.js
@@ -1,3 +1,19 @@
+const await_with_timeout = async (delay, message, promise, cleanup = ()=>{}) => {
+ let timeout_id;
+ const timeout = new Promise((_, reject) => {
+ timeout_id = step_timeout(() =>
+ reject(new DOMException(message, "TimeoutError")), delay)
+ });
+ let result = null;
+ try {
+ result = await Promise.race([promise, timeout]);
+ clearTimeout(timeout_id);
+ } finally {
+ cleanup();
+ }
+ return result;
+};
+
// Asserts that the given attributes are present in 'entry' and hold equal
// values.
const assert_all_equal_ = (entry, attributes) => {
@@ -451,12 +467,10 @@ const attribute_test_internal = (loader, path, validator, run_test, test_label)
});
await loader(path, validator);
- const timeout = new Promise(r => step_timeout(() => {
- console.log("Timeout was reached before entry fired");
- r(null);
- }, 2000));
- const entry = await Promise.race([loaded_entry, timeout]);
- assert_not_equals(entry, null, 'No entry was recieved');
+ const entry = await await_with_timeout(2000,
+ "Timeout was reached before entry fired",
+ loaded_entry);
+ assert_not_equals(entry, null, 'No entry was received');
run_test(entry);
}, test_label);
};
diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js b/tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js
index 70889b709f1..37fea16b175 100644
--- a/tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js
+++ b/tests/wpt/web-platform-tests/resource-timing/resources/resource-loaders.js
@@ -135,7 +135,7 @@ const load = {
// object.
object: async (path, type) => {
const object = document.createElement("object");
- const loaded = new Promise(resolve => {
+ const object_load_settled = new Promise(resolve => {
object.onload = object.onerror = resolve;
});
object.data = load.cache_bust(path);
@@ -143,12 +143,11 @@ const load = {
object.type = type;
}
document.body.appendChild(object);
- const timeout = new Promise(r => step_timeout(() => {
- console.log("Timeout was reached before load or error events fired");
- r();
- }, 2000));
- await Promise.race([loaded, timeout]);
- document.body.removeChild(object);
+ await await_with_timeout(2000,
+ "Timeout was reached before load or error events fired",
+ object_load_settled,
+ () => { document.body.removeChild(object) }
+ );
},
// Returns a promise that settles once the given path has been fetched
diff --git a/tests/wpt/web-platform-tests/resource-timing/response-status-code.html b/tests/wpt/web-platform-tests/resource-timing/response-status-code.html
index 3c606c5496e..3a184c6f016 100644
--- a/tests/wpt/web-platform-tests/resource-timing/response-status-code.html
+++ b/tests/wpt/web-platform-tests/resource-timing/response-status-code.html
@@ -24,6 +24,10 @@ const load_image_object = async path => {
return load.object(path, "image/png");
}
+const load_frame_object = async path => {
+ return load.object(path, "text/html");
+}
+
const load_null_object = async path => {
return load.object(path, null);
}
@@ -38,6 +42,7 @@ for(const loader of [
load.xhr_async,
load.iframe,
load_image_object,
+ load_frame_object,
load_null_object
]) {
for(const status of status_codes) {
@@ -88,6 +93,7 @@ for(const loader of [
load.stylesheet,
load.iframe,
load_image_object,
+ load_frame_object,
load_null_object
]) {
for(const tao of [false, true]) {
@@ -113,6 +119,7 @@ for(const loader of [
// Same-Origin => Cross-Origin => Same-Origin => Same-Origin redirect chain
for(const loader of [
load.iframe,
+ load_frame_object,
load_null_object
]) {
for(const status of status_codes) {
@@ -136,6 +143,7 @@ for(const loader of [
// Response status for iframes is exposed for same origin redirects
for(const loader of [
load.iframe,
+ load_frame_object,
load_null_object
]) {
for(const status of status_codes) {
diff --git a/tests/wpt/web-platform-tests/shadow-dom/focus/delegatesFocus-tabindex-change.html b/tests/wpt/web-platform-tests/shadow-dom/focus/delegatesFocus-tabindex-change.html
new file mode 100644
index 00000000000..f159c22164b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/shadow-dom/focus/delegatesFocus-tabindex-change.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body>
+<script>
+test(() => {
+ const host = document.createElement('div');
+ document.body.appendChild(host);
+
+ const shadowRoot = host.attachShadow({mode: 'open', delegatesFocus: true});
+
+ const shadowInput = document.createElement('input');
+ shadowRoot.appendChild(shadowInput);
+
+ host.focus();
+ assert_equals(document.activeElement, host, 'The shadow host should be focused.');
+
+ host.setAttribute('tabindex', '0');
+ assert_equals(document.activeElement, host, 'The shadow host should remain focused after changing tabindex.');
+}, 'Setting tabindex on the shadow host of a focused element with delegatesFocus should not change focus.');
+</script>
diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py
index 92022e9b1ea..1635dce7ec6 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_update_expectations.py
@@ -7,6 +7,7 @@ import pytest
from tools.wpt import wpt
from tools.wptrunner.wptrunner import manifestexpected
+from tools.wptrunner.wptrunner.manifestupdate import get_test_name
from localpaths import repo_root
@pytest.fixture
@@ -118,11 +119,11 @@ def test_update(tmp_path, metadata_file):
run_info_firefox)
# Default expected isn't stored
with pytest.raises(KeyError):
- assert firefox_expected.get_test(test_id.rpartition('/')[-1]).get("expected")
- assert firefox_expected.get_test(test_id.rpartition('/')[-1]).get_subtest(subtest_name).expected == "FAIL"
+ assert firefox_expected.get_test(get_test_name(test_id)).get("expected")
+ assert firefox_expected.get_test(get_test_name(test_id)).get_subtest(subtest_name).expected == "FAIL"
chrome_expected = manifestexpected.get_manifest(metadata_path,
test_path,
run_info_chrome)
- assert chrome_expected.get_test(test_id.rpartition('/')[-1]).expected == "ERROR"
- assert chrome_expected.get_test(test_id.rpartition('/')[-1]).get_subtest(subtest_name).expected == "NOTRUN"
+ assert chrome_expected.get_test(get_test_name(test_id)).expected == "ERROR"
+ assert chrome_expected.get_test(get_test_name(test_id)).get_subtest(subtest_name).expected == "NOTRUN"
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py
index ce12bc3370a..0bc25187976 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/manifestupdate.py
@@ -60,6 +60,10 @@ def data_cls_getter(output_node, visited_node):
else:
raise ValueError
+def get_test_name(test_id):
+ # test name is base name of test path + query string + frament
+ return test_id[len(urlsplit(test_id).path.rsplit("/", 1)[0]) + 1:]
+
class UpdateProperties:
def __init__(self, manifest, **kwargs):
@@ -218,7 +222,7 @@ class TestNode(ManifestItem):
:param test_type: The type of the test
:param test_id: The id of the test"""
- name = test_id[len(urlsplit(test_id).path.rsplit("/", 1)[0]) + 1:]
+ name = get_test_name(test_id)
node = DataNode(name)
self = cls(node)
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
index 0e24c0deaa1..93e2a87826c 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
@@ -11,6 +11,7 @@ from collections import defaultdict, deque, namedtuple
from . import manifestinclude
from . import manifestexpected
+from . import manifestupdate
from . import mpcontext
from . import wpttest
from mozlog import structured
@@ -267,7 +268,7 @@ class TestLoader:
def get_test(self, manifest_file, manifest_test, inherit_metadata, test_metadata):
if test_metadata is not None:
inherit_metadata.append(test_metadata)
- test_metadata = test_metadata.get_test(manifest_test.id.rpartition('/')[-1])
+ test_metadata = test_metadata.get_test(manifestupdate.get_test_name(manifest_test.id))
return wpttest.from_manifest(manifest_file, manifest_test, inherit_metadata, test_metadata)
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py
index d11b3a22451..2d3578a903c 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_wpttest.py
@@ -7,7 +7,7 @@ from manifest import manifest as wptmanifest
from manifest.item import TestharnessTest, RefTest
from manifest.utils import to_os_path
from . test_update import tree_and_sourcefile_mocks
-from .. import manifestexpected, wpttest
+from .. import manifestexpected, manifestupdate, wpttest
dir_ini_0 = b"""\
@@ -111,7 +111,8 @@ def make_test_object(test_name,
test_path=test_path)
test = next(iter(tests[index][2])) if iterate else tests[index][2].pop()
- return wpttest.from_manifest(tests, test, inherit_metadata, test_metadata.get_test(test.id.rpartition('/')[-1]))
+ return wpttest.from_manifest(tests, test, inherit_metadata,
+ test_metadata.get_test(manifestupdate.get_test_name(test.id)))
def test_run_info():
@@ -224,7 +225,8 @@ def test_metadata_fuzzy():
test_path="a/fuzzy.html")
test = next(manifest.iterpath(to_os_path("a/fuzzy.html")))
- test_obj = wpttest.from_manifest(manifest, test, [], test_metadata.get_test(test.id.rpartition('/')[-1]))
+ test_obj = wpttest.from_manifest(manifest, test, [],
+ test_metadata.get_test(manifestupdate.get_test_name(test.id)))
assert test_obj.fuzzy == {('/a/fuzzy.html', '/a/fuzzy-ref.html', '=='): [[2, 3], [10, 15]]}
assert test_obj.fuzzy_override == {'/a/fuzzy-ref.html': ((1, 1), (200, 200))}
diff --git a/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html b/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html
index 6f8670f64d1..61b52ac5958 100644
--- a/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html
+++ b/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html
@@ -131,7 +131,7 @@ standardSetup(async function(authenticator) {
first: new Uint8Array([1,2,3,4]).buffer,
};
return promise_rejects_dom(
- t, "NotSupportedError", assert(id, {evalByCredential: byCred }));
+ t, "SyntaxError", assert(id, {evalByCredential: byCred }));
}, "navigator.credentials.get() using invalid base64url credential ID");
promise_test(async t => {