aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2020-01-29 01:43:40 -0500
committerGitHub <noreply@github.com>2020-01-29 01:43:40 -0500
commit7e4d0534c3dcb54a6721c24ecae91942b019daaa (patch)
tree047f53430a0f037d7b5d3a144c1c39dce311d5ea
parent271a30f22f741afa6e036e4c45fff078dacf5e84 (diff)
parent81d0cdbb2cc73a263740569138ef2a67aa0cd106 (diff)
downloadservo-7e4d0534c3dcb54a6721c24ecae91942b019daaa.tar.gz
servo-7e4d0534c3dcb54a6721c24ecae91942b019daaa.zip
Auto merge of #25631 - servo-wpt-sync:wpt_update_28-01-2020, r=servo-wpt-sync
Sync WPT with upstream (28-01-2020) Automated downstream sync of changes from upstream as of 28-01-2020. [no-wpt-sync] r? @servo-wpt-sync
-rw-r--r--tests/wpt/metadata/MANIFEST.json603
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-transforms/transofrmed-preserve-3d-1.html.ini3
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini16
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini8
-rw-r--r--tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini2
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini)2
-rw-r--r--tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini2
-rw-r--r--tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini3
-rw-r--r--tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini1
-rw-r--r--tests/wpt/metadata/webxr/hit-test/ar_hittest_subscription_states.https.html.ini10
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html2
-rw-r--r--tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html2
-rw-r--r--tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html2
-rw-r--r--tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html2
-rw-r--r--tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html14
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html12
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm38
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html2
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html4
-rw-r--r--tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js12
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html88
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html24
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html6
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html85
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html86
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html125
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-001.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-002.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-003.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-004.html23
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-ref.html10
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html4
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html233
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html222
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-002.html224
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html173
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003.html151
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-preserve-3d-1-ref.html (renamed from tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateX-3-ref.html (renamed from tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateX-3-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateY-1-ref.html (renamed from tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateY-1-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/transformed-preserve-3d-1.html (renamed from tests/wpt/web-platform-tests/css/css-transforms/transofrmed-preserve-3d-1.html)2
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateX-3.html (renamed from tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateX-3.html)2
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateY-1.html (renamed from tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateY-1.html)2
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html2
-rw-r--r--tests/wpt/web-platform-tests/css/support/grid.css6
-rw-r--r--tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html4
-rw-r--r--tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html16
-rw-r--r--tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html8
-rw-r--r--tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html64
-rw-r--r--tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html.headers2
-rw-r--r--tests/wpt/web-platform-tests/dom/events/Event-constructors.html2
-rw-r--r--tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html2
-rw-r--r--tests/wpt/web-platform-tests/dom/nodes/attributes.html20
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js14
-rw-r--r--tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js4
-rw-r--r--tests/wpt/web-platform-tests/event-timing/buffered-flag.html4
-rw-r--r--tests/wpt/web-platform-tests/event-timing/click-timing.html4
-rw-r--r--tests/wpt/web-platform-tests/event-timing/crossiframe.html7
-rw-r--r--tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html4
-rw-r--r--tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html4
-rw-r--r--tests/wpt/web-platform-tests/event-timing/retrievability.html4
-rw-r--r--tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html4
-rw-r--r--tests/wpt/web-platform-tests/event-timing/supported-types.window.js5
-rw-r--r--tests/wpt/web-platform-tests/event-timing/timingconditions.html4
-rw-r--r--tests/wpt/web-platform-tests/event-timing/toJSON.html4
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html4
-rw-r--r--tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js8
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html20
-rw-r--r--tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html77
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html8
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webrtc.idl3
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html45
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/buffered-flag.html41
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/recent-input.html55
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html5
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/toJSON.html57
-rw-r--r--tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html8
-rw-r--r--tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html8
-rw-r--r--tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html8
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html16
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html30
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html2
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html2
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webxr-test.js1
-rw-r--r--tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html2
-rw-r--r--tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js8
-rw-r--r--tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py4
-rw-r--r--tests/wpt/web-platform-tests/selection/removeRange.html4
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py16
-rw-r--r--tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js10
-rw-r--r--tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js6
-rw-r--r--tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js2
-rw-r--r--tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js14
-rw-r--r--tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js6
-rw-r--r--tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js2
-rw-r--r--tests/wpt/web-platform-tests/streams/resources/test-utils.js2
-rw-r--r--tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js8
-rw-r--r--tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js8
-rw-r--r--tests/wpt/web-platform-tests/streams/writable-streams/write.any.js2
-rw-r--r--tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html158
-rwxr-xr-xtests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh7
-rwxr-xr-xtests/wpt/web-platform-tests/tools/ci/run_tc.py79
-rwxr-xr-xtests/wpt/web-platform-tests/tools/ci/taskcluster-run.py12
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/tc/README.md8
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/tc/decision.py23
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml11
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py3
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/browser.py56
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/install.py13
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html4
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html8
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html2
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html2
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js2
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js4
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js2
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js4
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js2
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js2
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js2
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js2
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js4
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js4
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js2
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html48
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onremove.html58
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html6
-rw-r--r--tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html6
-rw-r--r--tests/wpt/web-platform-tests/webmessaging/with-ports/027.html4
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html2
-rw-r--r--tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js6
-rw-r--r--tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html19
-rw-r--r--tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states.https.html65
-rw-r--r--tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js1
-rw-r--r--tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html18
-rw-r--r--tests/wpt/web-platform-tests/workers/Worker-formdata.any.js4
-rw-r--r--tests/wpt/web-platform-tests/workers/Worker-multi-port.html32
-rw-r--r--tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html18
-rw-r--r--tests/wpt/web-platform-tests/workers/modules/shared-worker-import-data-url.any.js24
159 files changed, 2805 insertions, 963 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 558903fe28b..33bc60aa83c 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -126987,6 +126987,54 @@
{}
]
],
+ "css/css-grid/grid-item-non-auto-height-stretch-001.html": [
+ [
+ "css/css-grid/grid-item-non-auto-height-stretch-001.html",
+ [
+ [
+ "/css/css-grid/grid-item-non-auto-height-stretch-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/grid-item-non-auto-height-stretch-002.html": [
+ [
+ "css/css-grid/grid-item-non-auto-height-stretch-002.html",
+ [
+ [
+ "/css/css-grid/grid-item-non-auto-height-stretch-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/grid-item-non-auto-height-stretch-003.html": [
+ [
+ "css/css-grid/grid-item-non-auto-height-stretch-003.html",
+ [
+ [
+ "/css/css-grid/grid-item-non-auto-height-stretch-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/grid-item-non-auto-height-stretch-004.html": [
+ [
+ "css/css-grid/grid-item-non-auto-height-stretch-004.html",
+ [
+ [
+ "/css/css-grid/grid-item-non-auto-height-stretch-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-grid/grid-items/anonymous-grid-item-001.html": [
[
"css/css-grid/grid-items/anonymous-grid-item-001.html",
@@ -129435,6 +129483,42 @@
{}
]
],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-001.html": [
+ [
+ "css/css-grid/subgrid/subgrid-mbp-overflow-001.html",
+ [
+ [
+ "/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-002.html": [
+ [
+ "css/css-grid/subgrid/subgrid-mbp-overflow-002.html",
+ [
+ [
+ "/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-003.html": [
+ [
+ "css/css-grid/subgrid/subgrid-mbp-overflow-003.html",
+ [
+ [
+ "/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-images/css-image-fallbacks-and-annotations.html": [
[
"css/css-images/css-image-fallbacks-and-annotations.html",
@@ -165007,6 +165091,42 @@
{}
]
],
+ "css/css-transforms/transformed-preserve-3d-1.html": [
+ [
+ "css/css-transforms/transformed-preserve-3d-1.html",
+ [
+ [
+ "/css/css-transforms/reference/transformed-preserve-3d-1-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-transforms/transformed-rotateX-3.html": [
+ [
+ "css/css-transforms/transformed-rotateX-3.html",
+ [
+ [
+ "/css/css-transforms/reference/transformed-rotateX-3-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-transforms/transformed-rotateY-1.html": [
+ [
+ "css/css-transforms/transformed-rotateY-1.html",
+ [
+ [
+ "/css/css-transforms/reference/transformed-rotateY-1-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-transforms/transforms-rotate-degree-45.html": [
[
"css/css-transforms/transforms-rotate-degree-45.html",
@@ -166051,42 +166171,6 @@
{}
]
],
- "css/css-transforms/transofrmed-preserve-3d-1.html": [
- [
- "css/css-transforms/transofrmed-preserve-3d-1.html",
- [
- [
- "/css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "css/css-transforms/transofrmed-rotateX-3.html": [
- [
- "css/css-transforms/transofrmed-rotateX-3.html",
- [
- [
- "/css/css-transforms/reference/transofrmed-rotateX-3-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "css/css-transforms/transofrmed-rotateY-1.html": [
- [
- "css/css-transforms/transofrmed-rotateY-1.html",
- [
- [
- "/css/css-transforms/reference/transofrmed-rotateY-1-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
"css/css-transforms/ttwf-css-3d-polygon-cycle-mismatch.html": [
[
"css/css-transforms/ttwf-css-3d-polygon-cycle-mismatch.html",
@@ -253112,6 +253196,9 @@
"css/css-grid/grid-definition/support/testing-utils.js": [
[]
],
+ "css/css-grid/grid-item-non-auto-height-stretch-ref.html": [
+ []
+ ],
"css/css-grid/grid-items/grid-item-overflow-auto-max-height-percentage-ref.html": [
[]
],
@@ -253361,6 +253448,12 @@
"css/css-grid/subgrid/subgrid-item-block-size-001-ref.html": [
[]
],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html": [
+ []
+ ],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html": [
+ []
+ ],
"css/css-grid/test-plan/index.html": [
[]
],
@@ -258689,6 +258782,15 @@
"css/css-transforms/reference/transform-translateX-001-ref.html": [
[]
],
+ "css/css-transforms/reference/transformed-preserve-3d-1-ref.html": [
+ []
+ ],
+ "css/css-transforms/reference/transformed-rotateX-3-ref.html": [
+ []
+ ],
+ "css/css-transforms/reference/transformed-rotateY-1-ref.html": [
+ []
+ ],
"css/css-transforms/reference/transforms-rotate-degree-45-ref.html": [
[]
],
@@ -258710,15 +258812,6 @@
"css/css-transforms/reference/translate-optional-second-ref.html": [
[]
],
- "css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html": [
- []
- ],
- "css/css-transforms/reference/transofrmed-rotateX-3-ref.html": [
- []
- ],
- "css/css-transforms/reference/transofrmed-rotateY-1-ref.html": [
- []
- ],
"css/css-transforms/reference/ttwf-css-3d-polygon-cycle-ref.html": [
[]
],
@@ -266636,6 +266729,9 @@
"document-policy/required-policy/required-document-policy.html.headers": [
[]
],
+ "document-policy/required-policy/separate-document-policies.html.headers": [
+ []
+ ],
"dom/META.yml": [
[]
],
@@ -325365,6 +325461,24 @@
{}
]
],
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html": [
+ [
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html": [
+ [
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html": [
+ [
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html",
+ {}
+ ]
+ ],
"css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html": [
[
"css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html",
@@ -340761,6 +340875,12 @@
{}
]
],
+ "document-policy/required-policy/separate-document-policies.html": [
+ [
+ "document-policy/required-policy/separate-document-policies.html",
+ {}
+ ]
+ ],
"dom/abort/event.any.js": [
[
"dom/abort/event.any.html",
@@ -368729,12 +368849,6 @@
{}
]
],
- "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html": [
- [
- "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html",
- {}
- ]
- ],
"html/semantics/interfaces.html": [
[
"html/semantics/interfaces.html",
@@ -438563,6 +438677,12 @@
{}
]
],
+ "web-animations/interfaces/Animation/onremove.html": [
+ [
+ "web-animations/interfaces/Animation/onremove.html",
+ {}
+ ]
+ ],
"web-animations/interfaces/Animation/pause.html": [
[
"web-animations/interfaces/Animation/pause.html",
@@ -448290,6 +448410,12 @@
{}
]
],
+ "webxr/hit-test/ar_hittest_subscription_states.https.html": [
+ [
+ "webxr/hit-test/ar_hittest_subscription_states.https.html",
+ {}
+ ]
+ ],
"webxr/hit-test/xrRay_constructor.https.html": [
[
"webxr/hit-test/xrRay_constructor.https.html",
@@ -450266,6 +450392,23 @@
}
]
],
+ "workers/modules/shared-worker-import-data-url.any.js": [
+ [
+ "workers/modules/shared-worker-import-data-url.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "!worker"
+ ],
+ [
+ "script",
+ "/workers/modules/resources/import-test-cases.js"
+ ]
+ ]
+ }
+ ]
+ ],
"workers/modules/shared-worker-import-failure.html": [
[
"workers/modules/shared-worker-import-failure.html",
@@ -476987,7 +477130,7 @@
"testharness"
],
"2dcontext/imagebitmap/createImageBitmap-transfer.html": [
- "6e836db9b96eea6668fd703c1f6ab090e8d88323",
+ "3ec02fcbf486f2f43c4c090b65ece7ad1d55f218",
"testharness"
],
"2dcontext/imagebitmap/createImageBitmap-worker.js": [
@@ -478951,11 +479094,11 @@
"testharness"
],
"FileAPI/blob/Blob-constructor-endings.html": [
- "e5426bb979d6fbec0c0693ec6de1dd70fde38135",
+ "04edd2a303b1359d7f00c154c9b109df3610a1c6",
"testharness"
],
"FileAPI/blob/Blob-constructor.html": [
- "d2b1777b86bed3d54303de9be0cd85d51d8ace92",
+ "62a649aed66418494e9f06db833b25dcc477db1a",
"testharness"
],
"FileAPI/blob/Blob-in-worker.worker.js": [
@@ -478979,11 +479122,11 @@
"testharness"
],
"FileAPI/file/File-constructor-endings.html": [
- "f76d33295218c50553edab8a3075b9d192b35f10",
+ "1282b6c5ac2c790803eea11ad74183ae8d78bd07",
"testharness"
],
"FileAPI/file/File-constructor.html": [
- "60dbb233f018f0bab078daf6969218aff2bff73b",
+ "63fda5e8d17d0f1d297014c0ff3f721edb122bb6",
"testharness"
],
"FileAPI/file/Worker-read-file-constructor.worker.js": [
@@ -479271,7 +479414,7 @@
"testharness"
],
"IndexedDB/clone-before-keypath-eval.html": [
- "8b99e1ae16c47a4b34e4c3c579ce7d1fea863d27",
+ "c885620e292219ec4cf23514a49a9044a866322a",
"testharness"
],
"IndexedDB/close-in-upgradeneeded.html": [
@@ -479355,11 +479498,11 @@
"testharness"
],
"IndexedDB/idbcursor-advance-exception-order.html": [
- "893c179e24f588249d075f9b8583b8c6984dd189",
+ "a0294e9b7a1e7342270ba7837dd44f0ae26dcfb6",
"testharness"
],
"IndexedDB/idbcursor-advance-invalid.htm": [
- "02c7fde0c4959b6524f9385a0b29dfa389ddf474",
+ "67e03187c0fc5cd1ff76404440439aa52cd0f26b",
"testharness"
],
"IndexedDB/idbcursor-advance.htm": [
@@ -479907,11 +480050,11 @@
"testharness"
],
"IndexedDB/idbindex-getAll-enforcerange.html": [
- "198253550042120a94dea1f8cf74c4ded9bd3aad",
+ "ab0c18b04ff53fdf78932fe86189bd7cc3322c14",
"testharness"
],
"IndexedDB/idbindex-getAllKeys-enforcerange.html": [
- "40cad527bb0893f8191f337fc58880eb3cb41306",
+ "fc65311a5644827c2ffe341ac61833699715fcc7",
"testharness"
],
"IndexedDB/idbindex-multientry-arraykeypath.htm": [
@@ -480111,15 +480254,15 @@
"testharness"
],
"IndexedDB/idbobjectstore-getAll-enforcerange.html": [
- "80c653b38642443b595487b35e2e838ad249e584",
+ "0c4eb89905dc001a6e6293f43da1c646e5ea0ed0",
"testharness"
],
"IndexedDB/idbobjectstore-getAllKeys-enforcerange.html": [
- "3653d1d5a1f41f3a0e23a7d5b18c51dfea9c0f1e",
+ "23fe5966912e8ff955a82a1612a219301ad31ca2",
"testharness"
],
"IndexedDB/idbobjectstore-index-finished.html": [
- "cc8dceaf42e6094bb613f27ffd1d9749d86fe859",
+ "67b0945cc982711153f6d062db05cd5710f40571",
"testharness"
],
"IndexedDB/idbobjectstore-query-exception-order.html": [
@@ -480467,11 +480610,11 @@
"testharness"
],
"IndexedDB/idbrequest_error.html": [
- "651a844d29dae291da08af72fa704860c5b913fd",
+ "c140c59e2de9b2bd1343fb6720e66db143b106f7",
"testharness"
],
"IndexedDB/idbrequest_result.html": [
- "f77aba7dfe4114d56eebcea895dd00f919324209",
+ "e7516d52e8f0d7259db255657ae7adffce722a0a",
"testharness"
],
"IndexedDB/idbtransaction-db-SameObject.html": [
@@ -480479,11 +480622,11 @@
"testharness"
],
"IndexedDB/idbtransaction-objectStore-exception-order.html": [
- "4b7659ff0bf9ea671bb43488a231760db7656baa",
+ "bc0357a13115d0398668b88c62284feff5455a9d",
"testharness"
],
"IndexedDB/idbtransaction-objectStore-finished.html": [
- "e1a8500b17a915a787ece533b2803d805410d901",
+ "78d2777e63cd2734c48681562cc23fed7fecc3e2",
"testharness"
],
"IndexedDB/idbtransaction-oncomplete.htm": [
@@ -504819,7 +504962,7 @@
"support"
],
"content-security-policy/inside-worker/support/script-src-self.sub.js": [
- "c5733d64cc9691a8bf1dcc6497134bfea39f7263",
+ "67d5943624c6a5252bc2f79af4e9accceb760690",
"support"
],
"content-security-policy/media-src/media-src-7_1.html": [
@@ -506095,7 +506238,7 @@
"testharness"
],
"content-security-policy/securitypolicyviolation/constructor-required-fields.html": [
- "1424cdcd7ffafaba543f7b4986c61b4f51a611a3",
+ "1a090d8e2c46057c950e0087efaf27cce0d11fb0",
"testharness"
],
"content-security-policy/securitypolicyviolation/idlharness.window.js": [
@@ -576087,7 +576230,7 @@
"support"
],
"css/css-conditional/test_group_insertRule.html": [
- "3818108ac6015616c39b92256305a379c8c7a9f0",
+ "e9e8cce8ffaeb983eed7a84e33da04cc4c3a5242",
"testharness"
],
"css/css-contain/META.yml": [
@@ -591967,15 +592110,15 @@
"support"
],
"css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html": [
- "cecab3e213653fbb732cc12f04cc44daee6da5a5",
+ "0901ddea41695f00ca9735085c79cf887ee80730",
"testharness"
],
"css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html": [
- "40ee22190b917488af3005e16574a75f1de210ca",
+ "1b495c47d2d165550e15ea4a2e8e9a44d71cb001",
"testharness"
],
"css/css-grid/alignment/grid-align-content-distribution.html": [
- "488fc05aad441bd2a648ad1a95c339ae82504ee1",
+ "444e46b9ca5c8049170f09619f424400967c7633",
"testharness"
],
"css/css-grid/alignment/grid-align-content-vertical-lr.html": [
@@ -592003,7 +592146,7 @@
"testharness"
],
"css/css-grid/alignment/grid-align-justify-overflow.html": [
- "f0d94198aff6dddb7acab1e7965e1ca9fc84c4a3",
+ "3ae182782a3bcc1261d47a130dbedb305b3ada83",
"testharness"
],
"css/css-grid/alignment/grid-align-justify-stretch-with-orthogonal-flows.html": [
@@ -592622,6 +592765,18 @@
"eb9666465542a34cc29853dd71dc326ff4cbbd63",
"reftest"
],
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html": [
+ "32c2efb39571e2575de8b90042f8dde9f39a3adc",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html": [
+ "845c6cea27eac594100d3b5917e05f896c36e4b1",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html": [
+ "c506547a7607ccb174c9bf3758b432f68ebfe3a9",
+ "testharness"
+ ],
"css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html": [
"967b0e4be967e9b3619e24cdf372aefcfd6b4f24",
"testharness"
@@ -593298,6 +593453,26 @@
"217b620463624e2feb294b320e7787f6c91f1932",
"support"
],
+ "css/css-grid/grid-item-non-auto-height-stretch-001.html": [
+ "458ed020e37d8b8b66bc6ee7a8b4a6f8acf7d1df",
+ "reftest"
+ ],
+ "css/css-grid/grid-item-non-auto-height-stretch-002.html": [
+ "9b2757f4d845be1e753b5e12079450b7324c59c7",
+ "reftest"
+ ],
+ "css/css-grid/grid-item-non-auto-height-stretch-003.html": [
+ "acd382b4f9fa018474140ebd27f473b89feee6ee",
+ "reftest"
+ ],
+ "css/css-grid/grid-item-non-auto-height-stretch-004.html": [
+ "b68cf7546d77a9c8da8b9f9a12589850cfc62d89",
+ "reftest"
+ ],
+ "css/css-grid/grid-item-non-auto-height-stretch-ref.html": [
+ "1249dbaa8c88cd1436741b6bcf526efb183a35a6",
+ "support"
+ ],
"css/css-grid/grid-items/anonymous-grid-item-001.html": [
"db88ce54b38badc1277661af913303942d63ece0",
"reftest"
@@ -594515,7 +594690,7 @@
"reftest"
],
"css/css-grid/subgrid/abs-pos-002-ref.html": [
- "69e071c758b65724d49af23ecd7d3d77d1970e3c",
+ "1354260d50be155f18bed7f924143800c69f6b51",
"support"
],
"css/css-grid/subgrid/abs-pos-002.html": [
@@ -594798,6 +594973,26 @@
"29e82197831fec5e996d0f682a8f42eca819a8ed",
"reftest"
],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html": [
+ "30f4bf7a969527eca2963bdd2f62d8749bb5000f",
+ "support"
+ ],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-001.html": [
+ "a9aec76a9f027dcd1908a383e1573f7a110e67ae",
+ "reftest"
+ ],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-002.html": [
+ "1bd1fa67bfc53c3b7637fd3bc4bf98b8aa2403c5",
+ "reftest"
+ ],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html": [
+ "d771427f6e5adff7304c892bfc0990cba51d923a",
+ "support"
+ ],
+ "css/css-grid/subgrid/subgrid-mbp-overflow-003.html": [
+ "45afcb56cbd2beb4d3a6afdbfc9856686526f596",
+ "reftest"
+ ],
"css/css-grid/test-plan/index.html": [
"039f3a87c1a7d042af4ac043b1a5c4c4cb6c0d1e",
"support"
@@ -617302,6 +617497,18 @@
"a1cee2aa91eb9ba2928ef5b7e2d0cb152cebebe0",
"support"
],
+ "css/css-transforms/reference/transformed-preserve-3d-1-ref.html": [
+ "06f7257c50a98359a625c8b6f34c309628858f93",
+ "support"
+ ],
+ "css/css-transforms/reference/transformed-rotateX-3-ref.html": [
+ "aeb72f5df2594abd68c1fe4a12423c75f3edda8e",
+ "support"
+ ],
+ "css/css-transforms/reference/transformed-rotateY-1-ref.html": [
+ "9c3419e6f436e6c9c68921040b431eabb15bb9ef",
+ "support"
+ ],
"css/css-transforms/reference/transforms-rotate-degree-45-ref.html": [
"b79cc4716799f45183951748c3349016a1655b2b",
"support"
@@ -617330,18 +617537,6 @@
"11742fef0c7f645b510080ac4c41941a9b8f0295",
"support"
],
- "css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html": [
- "06f7257c50a98359a625c8b6f34c309628858f93",
- "support"
- ],
- "css/css-transforms/reference/transofrmed-rotateX-3-ref.html": [
- "aeb72f5df2594abd68c1fe4a12423c75f3edda8e",
- "support"
- ],
- "css/css-transforms/reference/transofrmed-rotateY-1-ref.html": [
- "9c3419e6f436e6c9c68921040b431eabb15bb9ef",
- "support"
- ],
"css/css-transforms/reference/ttwf-css-3d-polygon-cycle-ref.html": [
"e5c99eae722d3d35c7294ad3d68c424e6b9734ff",
"support"
@@ -619970,6 +620165,18 @@
"61feb7e61a42346914555dc66c54f60791f00cfb",
"testharness"
],
+ "css/css-transforms/transformed-preserve-3d-1.html": [
+ "14ab46e29a1285857df09b7abfbee641b9658c68",
+ "reftest"
+ ],
+ "css/css-transforms/transformed-rotateX-3.html": [
+ "2517eac8e40fde4911dd4666f7579ec154093799",
+ "reftest"
+ ],
+ "css/css-transforms/transformed-rotateY-1.html": [
+ "e1e9b2969d8ca8934aae5ff3eeca155a6474050f",
+ "reftest"
+ ],
"css/css-transforms/transforms-rotate-degree-45.html": [
"e18cd988636ce0146343e5b7ce8651d4ae9050b6",
"reftest"
@@ -620354,18 +620561,6 @@
"39b5f91d8b3cb2c2eadf6bee7ca1f56f2ce0a4ca",
"reftest"
],
- "css/css-transforms/transofrmed-preserve-3d-1.html": [
- "b7e1f905bb8a680fba133bcd0224e44ea799e9c1",
- "reftest"
- ],
- "css/css-transforms/transofrmed-rotateX-3.html": [
- "58ab80e807a2b8f59edd8d11afb0a411054e56ac",
- "reftest"
- ],
- "css/css-transforms/transofrmed-rotateY-1.html": [
- "86581bc447b9f9a6a803770209e8cc3c379f023a",
- "reftest"
- ],
"css/css-transforms/ttwf-css-3d-polygon-cycle-mismatch.html": [
"addcb65cd71de768e7205fc6c8eded21dcc8ef55",
"reftest"
@@ -634527,7 +634722,7 @@
"testharness"
],
"css/cssom/getComputedStyle-pseudo.html": [
- "1795bcf2ba40806f11c0fd35a1ede40d56c937a5",
+ "3f8b7a72bdc28bb7773d0da72373799dfab6db63",
"testharness"
],
"css/cssom/getComputedStyle-resolved-min-max-clamping.html": [
@@ -638755,7 +638950,7 @@
"support"
],
"css/support/grid.css": [
- "5cfb15e7ef0dcd9c4bb1f6d1d9fc04e703ac126e",
+ "4007ebba43631ad69dafe6cf3dae74481ab219af",
"support"
],
"css/support/import-green.css": [
@@ -648331,11 +648526,11 @@
"testharness"
],
"custom-elements/HTMLElement-attachInternals.html": [
- "9331869f8fe388503f93d6526111c34f36fa95ad",
+ "43ea55a67e08ce1c3086775f0df89f464e505e03",
"testharness"
],
"custom-elements/HTMLElement-constructor.html": [
- "8e33137d4ff7514918a986d55a96c29b1e5988f5",
+ "b52c84147097a60ff87e5aa7214d2b345a5cf891",
"testharness"
],
"custom-elements/META.yml": [
@@ -648423,7 +648618,7 @@
"testharness"
],
"custom-elements/htmlconstructor/newtarget.html": [
- "b95d7ade0bbd2cf490ecf82dba21ecefc12eab5c",
+ "d2eb022d85444a82f1554debff2ead9ebde5fc70",
"testharness"
],
"custom-elements/microtasks-and-constructors.html": [
@@ -649086,6 +649281,14 @@
"1b671dafe06d44e5b267bbfc54691f5f911297eb",
"support"
],
+ "document-policy/required-policy/separate-document-policies.html": [
+ "c2611a5dcf23eb165eec4edd34493c654c88a5a8",
+ "testharness"
+ ],
+ "document-policy/required-policy/separate-document-policies.html.headers": [
+ "0dcb2328ae7c48f451f43a7f89fcf90828d5f8a2",
+ "support"
+ ],
"dom/META.yml": [
"6fd5b12664da091fd9ee773b821ad72ee704ee8f",
"support"
@@ -649159,7 +649362,7 @@
"testharness"
],
"dom/events/Event-constructors.html": [
- "72347efd5324adb4e518b8e725f258646265df55",
+ "87d68d5ef527fd5a6caa592d87e58cc526cfced8",
"testharness"
],
"dom/events/Event-defaultPrevented-after-dispatch.html": [
@@ -649879,7 +650082,7 @@
"testharness"
],
"dom/nodes/Document-createElement.html": [
- "653108ca11acec98bb7a0990034c0d3a1338f4d1",
+ "c0126b4f8a88d887cd9fa05618e1b7d441064641",
"testharness"
],
"dom/nodes/Document-createElementNS.html": [
@@ -650399,7 +650602,7 @@
"testharness"
],
"dom/nodes/attributes.html": [
- "65bea67173d2475a27c33b7cbf69bda17af2dacb",
+ "c6db7eb8aa4e6c3c4a4f365965af6acb9665f562",
"testharness"
],
"dom/nodes/attributes.js": [
@@ -653351,7 +653554,7 @@
"testharness"
],
"encoding/streams/decode-attributes.any.js": [
- "3fe442bf133c747d5b923d207b8f1c3a93ee5507",
+ "6552a91c6e281a9dd76e85fe11356e3ee7fc964b",
"testharness"
],
"encoding/streams/decode-bad-chunks.any.js": [
@@ -653419,7 +653622,7 @@
"testharness"
],
"encoding/textdecoder-fatal.any.js": [
- "5ee4b65ebe3dfd3a515aae3ae904709ae084a632",
+ "f9ccb2dfa7608baf283ce8b163d18b98e68f92e9",
"testharness"
],
"encoding/textdecoder-ignorebom.any.js": [
@@ -654315,15 +654518,15 @@
"support"
],
"event-timing/buffered-flag.html": [
- "b9c63ffd8fdd6dca11211376538c65fa9571c437",
+ "dc70ff253ff3c408f052e3d8cca705069ee8fa76",
"testharness"
],
"event-timing/click-timing.html": [
- "afe53bfc23c943a3f3a3679dffbab5edcf5a27ea",
+ "376372a3f110feb85d65bd3dc0e28465e5a5e71d",
"testharness"
],
"event-timing/crossiframe.html": [
- "f24e2c21edbaf258c65b9f01d240f38bcd307d75",
+ "55e2becfcbcfa3feba1473ddcd17e15a30adbfc0",
"testharness"
],
"event-timing/idlharness.any.js": [
@@ -654331,11 +654534,11 @@
"testharness"
],
"event-timing/only-observe-firstInput.html": [
- "48df6ec9fc65a9eb8c4adf62f5fc7219b7c5a056",
+ "ad71153d40bca022ebcd9c902710f8d71aeaeb61",
"testharness"
],
"event-timing/programmatic-click-not-observed.html": [
- "c84d4eff6b8779953bcde54eb5169f0ffa1c6314",
+ "1c2921ca48991f46de533e10a7c4a2a924ab3551",
"testharness"
],
"event-timing/resources/crossiframe-childframe.html": [
@@ -654351,23 +654554,23 @@
"support"
],
"event-timing/retrievability.html": [
- "cdb47c6a50480087b92a35ce86c621e28f23d8a7",
+ "d2b6da2439fe5f42091b35d0916c6e36ff3c0e8b",
"testharness"
],
"event-timing/retrieve-firstInput.html": [
- "5ddd9b5f01b75d9530adac84acab9a214bfded87",
+ "acff788259f5ee85db230d967692b3a35894c387",
"testharness"
],
"event-timing/supported-types.window.js": [
- "443c2533c2e503145e8c3639050f89d1277993bd",
+ "5360bdd9e82244350ac19de21bcd67d9fd5a0450",
"testharness"
],
"event-timing/timingconditions.html": [
- "1fcda21a197028ee3b6812f63aef41503d2a7b9b",
+ "02da2976ceecc8c5fa648b74a70fcf277bc8ee3f",
"testharness"
],
"event-timing/toJSON.html": [
- "05a7ba76319b0947c6c3057ae35e97b7c9d4d3c1",
+ "a11073aa9a0eb8436fb0ecfcdc48f4a35c908993",
"testharness"
],
"eventsource/META.yml": [
@@ -655839,7 +656042,7 @@
"testharness"
],
"fetch/api/headers/headers-record.html": [
- "0a217c3ddb287fde30f27f75607f52c1fb2cb3ed",
+ "c7d8d99a7095ebb6b5d3e3154ac69108e819698f",
"testharness"
],
"fetch/api/headers/headers-structure.html": [
@@ -658423,7 +658626,7 @@
"support"
],
"generic-sensor/generic-sensor-tests.js": [
- "0cb3cb224a187daee110c0ef044da786f480bc3c",
+ "1843734a3bb0adf4d9e853af4ba74ae39aa33f41",
"support"
],
"generic-sensor/idlharness.https.window.js": [
@@ -660703,7 +660906,7 @@
"testharness"
],
"html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [
- "46fc568a0eeffc5373a5ad33b5f3be0bc753d028",
+ "a00f4f5357f218599a379206a7f920d358a2b0a0",
"testharness"
],
"html/browsers/origin/cross-origin-objects/frame-with-then.html": [
@@ -667211,7 +667414,7 @@
"support"
],
"html/infrastructure/common-dom-interfaces/collections/domstringlist.html": [
- "33f2ed6feff68d2a6ca938bf8a235f68f885cc20",
+ "6e6e4312a031b66f5c17d33d54709a5991932707",
"testharness"
],
"html/infrastructure/common-dom-interfaces/collections/historical.html": [
@@ -672907,7 +673110,7 @@
"testharness"
],
"html/semantics/forms/constraints/form-validation-validity-customError.html": [
- "16e64214761bbcccbf2022ad4ba187037bbffced",
+ "2ae6240aceed657e919ff40ae974eb7eb129f784",
"testharness"
],
"html/semantics/forms/constraints/form-validation-validity-patternMismatch.html": [
@@ -674474,10 +674677,6 @@
"4a3693bd2dafe710b82054bfadd8bcaa97b16db5",
"testharness"
],
- "html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html": [
- "ab200020b4f05321d4ee7c17c4a8f11c6f5931db",
- "testharness"
- ],
"html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html": [
"57cc45478e03ce1cdbb755281b2f434b38582563",
"crashtest"
@@ -679003,7 +679202,7 @@
"testharness"
],
"html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html": [
- "888750721281df568bdc419088190b193ff37868",
+ "916527909173fd87429590e51a866a712cf97854",
"testharness"
],
"html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events-attached-in-event.html": [
@@ -681207,7 +681406,7 @@
"support"
],
"interfaces/webrtc.idl": [
- "053afdcb13587543e7da6140e72101f3892a05a0",
+ "852ec06209ea13a0a618d32ff836624b92d65642",
"support"
],
"interfaces/webusb.idl": [
@@ -681855,11 +682054,11 @@
"testharness"
],
"layout-instability/buffer-layout-shift.html": [
- "b6a33f579b4009d1497fdc104c07633793d53f01",
+ "50cabda8d20406f4a0c8b4ac412f6b391572bf42",
"testharness"
],
"layout-instability/buffered-flag.html": [
- "cd1260e3613f58c191688ab2f492647b0cc72c0c",
+ "1d200712c280346b12976c22d38e310ae9df639d",
"testharness"
],
"layout-instability/clip-negative-bottom-margin.html": [
@@ -681903,7 +682102,7 @@
"testharness"
],
"layout-instability/recent-input.html": [
- "a4fa0d8b0d92a83984034926de30958b840c1028",
+ "52adbf723ea34ce2ae7d2fb3027be67dcd785d5e",
"testharness"
],
"layout-instability/resources/slow-image.py": [
@@ -681939,11 +682138,11 @@
"testharness"
],
"layout-instability/supported-layout-type.html": [
- "8679a2de7388c5e43a8d784cb3a986d4e23ca568",
+ "cee4b808c87b585c49d463085e92e7d000ffba0c",
"testharness"
],
"layout-instability/toJSON.html": [
- "374a7de0cd1c4d5d5b089b7d026c8eb5709e91f1",
+ "00f074a4dd88aa17e7c4c7ef36e097738b932015",
"testharness"
],
"layout-instability/transform.html": [
@@ -683611,7 +683810,7 @@
"testharness"
],
"media-source/SourceBuffer-abort-removed.html": [
- "c96412d06309f0976231539fe4c7b77332275535",
+ "4782412ccdf563638ab38b234c4f82aa08398fba",
"testharness"
],
"media-source/SourceBuffer-abort-updating.html": [
@@ -683871,7 +684070,7 @@
"testharness"
],
"media-source/mediasource-sourcebuffer-mode-timestamps.html": [
- "c62e542162209fe18c19a2e3bcad140bdfbc21fb",
+ "e7e9b8ca5f62b8b6443b17be54bad6b2e27a2b48",
"testharness"
],
"media-source/mediasource-sourcebuffer-mode.html": [
@@ -683879,7 +684078,7 @@
"testharness"
],
"media-source/mediasource-sourcebuffer-trackdefaults.html": [
- "905d1d0d0ee197aeab7a4823bdad72136674c1ce",
+ "7b45486d71edf61fd557c289a86e3bfff5ffebc0",
"testharness"
],
"media-source/mediasource-sourcebufferlist.html": [
@@ -684275,7 +684474,7 @@
"testharness"
],
"mediacapture-image/ImageCapture-creation.https.html": [
- "e53915608f00df16cdbe65f6bcae304a8dd4d92a",
+ "9abffe25edde54acb1dc235b3b29ad6a5bc241a8",
"testharness"
],
"mediacapture-image/ImageCapture-grabFrame.html": [
@@ -684391,7 +684590,7 @@
"testharness"
],
"mediacapture-record/MediaRecorder-events-and-exceptions.html": [
- "5dca350dd2754211ace05c5df7d9a5fd62aee428",
+ "d5abf3a05c3584df3a19735a24030141a1b13010",
"testharness"
],
"mediacapture-record/MediaRecorder-mimetype.html": [
@@ -695823,7 +696022,7 @@
"testharness"
],
"pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html": [
- "c54e3a7ada636358e8633c6825bd388e638d1791",
+ "f51674cb4293a8f7d021a057abc9da16766cd625",
"testharness"
],
"pointerevents/pointerevent_releasepointercapture_onpointercancel_touch.html": [
@@ -695863,7 +696062,7 @@
"testharness"
],
"pointerevents/pointerevent_setpointercapture_invalid_pointerid.html": [
- "ada67fa5b7b959015dc0756bb8c11207b4effb9d",
+ "7d9f948919f87a69659262bd8aee7778c79b2f23",
"testharness"
],
"pointerevents/pointerevent_setpointercapture_override_pending_capture_element-manual.html": [
@@ -718855,7 +719054,7 @@
"support"
],
"resources/chromium/webxr-test.js": [
- "695b265db60067f5872099a7eda6ed579b3d73ca",
+ "34aeab08a749fcbd89a78c8899b7da2286004dcd",
"support"
],
"resources/chromium/webxr-test.js.headers": [
@@ -719427,7 +719626,7 @@
"testharness"
],
"scroll-to-text-fragment/scroll-to-text-fragment-target.html": [
- "09d22ff6d1d6792b66865d62ccd8e07ec96a70b7",
+ "b06f3c889c19c65a5a0d7b419d6d31429838bf5a",
"support"
],
"scroll-to-text-fragment/scroll-to-text-fragment.html": [
@@ -719435,11 +719634,11 @@
"testharness"
],
"scroll-to-text-fragment/stash.js": [
- "b3d9ea8e93fe9efe563d559eca8f1208a9ed8e41",
+ "f1b2ea8d3a5c4d736b19db2e0f13a67adc09570c",
"support"
],
"scroll-to-text-fragment/stash.py": [
- "49567390e1edf28d8ac3c2a7818fc997505f744b",
+ "31a29343d9e22c3f588b24a47f20824c163c0199",
"support"
],
"secure-contexts/META.yml": [
@@ -719683,7 +719882,7 @@
"testharness"
],
"selection/removeRange.html": [
- "7618a4ac535b5b7fed48f2f533bc4489d0008813",
+ "8dcd6d2c074325a47fab80661b91e68cf40c4916",
"testharness"
],
"selection/script-and-style-elements.html": [
@@ -722603,7 +722802,7 @@
"support"
],
"service-workers/service-worker/resources/service-worker-csp-worker.py": [
- "7b0c13feba9fbcd591cd52ad553418b06d933b93",
+ "62c945f82213ffb89d2d84eb93f8d30176738fac",
"support"
],
"service-workers/service-worker/resources/service-worker-header.py": [
@@ -724487,7 +724686,7 @@
"testharness"
],
"streams/piping/pipe-through.any.js": [
- "e6959b6c12ae9b3416b70b51ba37481f26ec76f9",
+ "71d75b03504e5231178bc6a74c85b703b3df8f2d",
"testharness"
],
"streams/piping/then-interception.any.js": [
@@ -724503,11 +724702,11 @@
"testharness"
],
"streams/readable-byte-streams/brand-checks.any.js": [
- "9bbe7111ea8ddf4afbea30d435400a19ff63c684",
+ "bed4ec411ec226a5e52c9c3a047b75a847ec1814",
"testharness"
],
"streams/readable-byte-streams/construct-byob-request.any.js": [
- "2e1c53fdea877946e2a097a81b4c949421883e9b",
+ "516025135b07d6bed4fda99b1a12828dd432bf17",
"testharness"
],
"streams/readable-byte-streams/constructor.any.js": [
@@ -724519,7 +724718,7 @@
"testharness"
],
"streams/readable-byte-streams/general.any.js": [
- "1947ededb6652ef6c048ef34496d6b75f0afc7ac",
+ "e4951c0c819409ab5e508d5ff3b9b648baa58cdd",
"testharness"
],
"streams/readable-byte-streams/properties.any.js": [
@@ -724539,7 +724738,7 @@
"testharness"
],
"streams/readable-streams/brand-checks.any.js": [
- "c82f513df01a86576442b31ca7fa93fcf0652b9a",
+ "564eea016bd7fb83cdc758391b6d76b0b5cc6320",
"testharness"
],
"streams/readable-streams/cancel.any.js": [
@@ -724555,7 +724754,7 @@
"testharness"
],
"streams/readable-streams/default-reader.any.js": [
- "1e67b272b544edfb718acaff71dccc05fee752f1",
+ "bf807f76686b174333dc18d310b98684fefbec3b",
"testharness"
],
"streams/readable-streams/floating-point-total-queue-size.any.js": [
@@ -724603,7 +724802,7 @@
"support"
],
"streams/resources/test-utils.js": [
- "614fcca18e96dee419800f34e54c941a0843f697",
+ "ff5c0151c1c8772aebc26d2f8c45c3bd11ed9346",
"support"
],
"streams/transform-streams/backpressure.any.js": [
@@ -724647,7 +724846,7 @@
"testharness"
],
"streams/transform-streams/strategies.any.js": [
- "c7645e7e651c0b57cd65870fb6f9048aa4bd5a0c",
+ "c29c6cb59d85700363ac968731aa6b58aa6989ac",
"testharness"
],
"streams/transform-streams/terminate.any.js": [
@@ -724679,7 +724878,7 @@
"testharness"
],
"streams/writable-streams/constructor.any.js": [
- "c792e1f1fafe35c34e10c1b4fdf8662ad6add073",
+ "ac0483e61f08cc0494819725f913b15cceaf0594",
"testharness"
],
"streams/writable-streams/count-queuing-strategy.any.js": [
@@ -724711,7 +724910,7 @@
"testharness"
],
"streams/writable-streams/write.any.js": [
- "68da793985556635844b7711271a6ee0a9c7b1a5",
+ "f60434b9fc13e23eb1820c6143f1c5829cd2705b",
"testharness"
],
"subresource-integrity/META.yml": [
@@ -725203,7 +725402,7 @@
"testharness"
],
"svg/animations/repeatn-remove-add-animation.html": [
- "1715cd9d4711878d101e5b68963d2359521b4bfe",
+ "8098a8853568a10370bf35f444c6de5d842f07fe",
"testharness"
],
"svg/animations/scripted/SVGAnimationElement-exceptions.html": [
@@ -729971,7 +730170,7 @@
"support"
],
"tools/ci/ci_wptrunner_infrastructure.sh": [
- "8db08794ade26bef899f05c4890c2b88e68df292",
+ "992a1b58c24268baecdbbe03ee1e9f813fd460d9",
"support"
],
"tools/ci/commands.json": [
@@ -729999,15 +730198,15 @@
"support"
],
"tools/ci/run_tc.py": [
- "f9086a31bd93baf72819fc450f90a290d65674fd",
+ "c460eecbbd72364d8c7f6d7683d62963d84d72dd",
"support"
],
"tools/ci/taskcluster-run.py": [
- "ac5abc12b1f17d2fc93c6ac5636bfd6fe7cafa04",
+ "d8e42ccea2112694c6d3b8b1aa6ca7034ea22282",
"support"
],
"tools/ci/tc/README.md": [
- "11f367f986f97fdbfe40f09b2ae4114f263916f7",
+ "785c82cca39cdfb186fda24103a5a6fd649bee5a",
"support"
],
"tools/ci/tc/__init__.py": [
@@ -730015,7 +730214,7 @@
"support"
],
"tools/ci/tc/decision.py": [
- "4b23630012bd2cd4757d930dc4379396472ff486",
+ "f8f186f744d8082790a8c3bec8654fa15ca7f3e8",
"support"
],
"tools/ci/tc/download.py": [
@@ -730027,7 +730226,7 @@
"support"
],
"tools/ci/tc/tasks/test.yml": [
- "7476337e09bfd31f6fb68ecf2e17b33b4ac70d8b",
+ "562239c31e3a5a0592160a3186279316e0b306dc",
"support"
],
"tools/ci/tc/testdata/epochs_daily_push_event.json": [
@@ -730055,7 +730254,7 @@
"support"
],
"tools/ci/tc/tests/test_valid.py": [
- "a194d370181d1fc7d420d136da349af5001b10f8",
+ "4573541bf5864badfa39a155c5d62d71a18911e0",
"support"
],
"tools/ci/tests/test_jobs.py": [
@@ -734823,7 +735022,7 @@
"support"
],
"tools/wpt/browser.py": [
- "bf1958fab9912044f4b26afc5a515b815463fb3f",
+ "c9a5353ab4f3ec48b86fe98ad9f90ee6692de036",
"support"
],
"tools/wpt/commands.json": [
@@ -734835,7 +735034,7 @@
"support"
],
"tools/wpt/install.py": [
- "4a368f9a4d6e72a2f92135cd31c7b4a774882aca",
+ "6eb59f814bf08d139d597a4b4b26a7d7aa920fd6",
"support"
],
"tools/wpt/mach-emulator.manifest": [
@@ -736259,7 +736458,7 @@
"support"
],
"trusted-types/trusted-types-createHTMLDocument.tentative.html": [
- "ac95d9e64de97d96c18fdfad9b7b99b737228c59",
+ "440d2a88b9367daa42c6aeb6e747f58a1487ea6f",
"testharness"
],
"trusted-types/trusted-types-duplicate-names-list-report-only.tentative.html": [
@@ -736271,11 +736470,11 @@
"support"
],
"trusted-types/trusted-types-duplicate-names-list.tentative.html": [
- "9a895ffa2ad2b1cc56b6e1727c6e184ab26e1420",
+ "afb2f5f7c4b7f6ddfe8da004750017e6c7f01f9a",
"testharness"
],
"trusted-types/trusted-types-duplicate-names.tentative.html": [
- "e817cf145a260b1e355e5fc06288d8c959a42779",
+ "decce5356467f9f4e6a8886c6b6eff7194bf2385",
"testharness"
],
"trusted-types/trusted-types-eval-reporting-no-unsafe-eval.tentative.https.html": [
@@ -736295,7 +736494,7 @@
"support"
],
"trusted-types/trusted-types-eval-reporting.tentative.https.html": [
- "90007168a13d1d141dc149c42aa92c645f64bf28",
+ "d98b457f6aaa7f8774d4de9539b0296f56fbb43b",
"testharness"
],
"trusted-types/trusted-types-eval-reporting.tentative.https.html.headers": [
@@ -741131,11 +741330,11 @@
"testharness"
],
"wasm/jsapi/constructor/validate.any.js": [
- "a0eaa3fb87d62497379d1e7b2320a3fc43e9508f",
+ "a523acc7925c9ef7646d296a78bf9831eda86d71",
"testharness"
],
"wasm/jsapi/global/constructor.any.js": [
- "cb287da4e9afa1a4006bc6c091cda22081492960",
+ "270149ec1443045e4134eeb80403651a3d0a12ff",
"testharness"
],
"wasm/jsapi/global/toString.any.js": [
@@ -741163,7 +741362,7 @@
"testharness"
],
"wasm/jsapi/instance/constructor.any.js": [
- "745c3f8495123b4b67fd1e9402304ceff49278a6",
+ "06c6d7a88c09235abd40a71a379f0d8005a33618",
"testharness"
],
"wasm/jsapi/instance/exports.any.js": [
@@ -741187,7 +741386,7 @@
"testharness"
],
"wasm/jsapi/memory/constructor.any.js": [
- "8bd606e321283a3ab91fecc1511c915c82dcd26a",
+ "03eed5270831b504e6ab21bcc8ee36fdfd050304",
"testharness"
],
"wasm/jsapi/memory/grow.any.js": [
@@ -741199,19 +741398,19 @@
"testharness"
],
"wasm/jsapi/module/constructor.any.js": [
- "1fffb6cd4f3b9013f5b65987dfeef8c0a46c6c8f",
+ "b6f03c73b5d0483fea1efe896525c5040d9525bf",
"testharness"
],
"wasm/jsapi/module/customSections.any.js": [
- "298d89604cf739ba6ef9929da9162bdf6beb4c80",
+ "8c215d17bd25834ad2983e88172371c4ee1f65c2",
"testharness"
],
"wasm/jsapi/module/exports.any.js": [
- "83f97dd67a1e419c10c399b26fc50e1d37de3405",
+ "1329c6a6021f2d5902f759e4da92d209974da70e",
"testharness"
],
"wasm/jsapi/module/imports.any.js": [
- "91e4be33aca6955d8b67cf0b51ddd7323ae62843",
+ "9a7d6115986ea066c5075d14f60d3cb0277a78a1",
"testharness"
],
"wasm/jsapi/module/toString.any.js": [
@@ -741219,15 +741418,15 @@
"testharness"
],
"wasm/jsapi/table/assertions.js": [
- "c42a446a75d01f172dd0ef28a836553e79566156",
+ "b1aeaf1a65dab748c56c8cdf9c1393f97bfdf0e5",
"support"
],
"wasm/jsapi/table/constructor.any.js": [
- "a494a9e559b92136e3616d16f73b08a72a8b222b",
+ "5c9a6f13d91eba098ab59e893145222375e1b6cc",
"testharness"
],
"wasm/jsapi/table/get-set.any.js": [
- "175f30fbcadca6e9a3b698ec677779fc56175239",
+ "4e0a5f8c1048f4b771c38ff0aef9910ed37b25c2",
"testharness"
],
"wasm/jsapi/table/grow-reftypes.tentative.any.js": [
@@ -741555,7 +741754,7 @@
"testharness"
],
"web-animations/interfaces/Animation/commitStyles.html": [
- "40cb2634e41a41bac6b9699f4c815c3f8e3b57dd",
+ "8d45cd65199c1a8f7b26ee1ead574e1ff0b26ac9",
"testharness"
],
"web-animations/interfaces/Animation/constructor.html": [
@@ -741582,8 +741781,12 @@
"2df3cfbd120eaead9aa31ad5eeef4ebf54ec23ec",
"testharness"
],
+ "web-animations/interfaces/Animation/onremove.html": [
+ "d7709949f2a0055bb8b563237de8c3ba0a9c78c5",
+ "testharness"
+ ],
"web-animations/interfaces/Animation/pause.html": [
- "74d0724ef427f6b1752012e876d338d8b8ec4d60",
+ "1d1bd5fd89aedd6055cd2a3ab0c2c59fcb353a7e",
"testharness"
],
"web-animations/interfaces/Animation/pending.html": [
@@ -741595,7 +741798,7 @@
"testharness"
],
"web-animations/interfaces/Animation/play.html": [
- "d29b67b7992860d072c73bcbbeaa269d8aea10dc",
+ "6c5d604b1e4c88bfffe03238e059dc2b97c6947d",
"testharness"
],
"web-animations/interfaces/Animation/ready.html": [
@@ -744995,7 +745198,7 @@
"testharness"
],
"webmessaging/with-ports/027.html": [
- "78ea225eb75577aadac1a33fb547629caac16463",
+ "715835125811b13c69a7b820686401a9d0ac899b",
"testharness"
],
"webmessaging/without-ports/001.html": [
@@ -745259,7 +745462,7 @@
"support"
],
"webrtc/RTCDTMFSender-insertDTMF.https.html": [
- "be6e3c6e59d039a0f2bbf065db9897fb971f5b15",
+ "ac27c5139ccb12715d51cbd8f5ecdd83c40c23d1",
"testharness"
],
"webrtc/RTCDTMFSender-ontonechange-long.https.html": [
@@ -746739,7 +746942,7 @@
"testharness"
],
"websockets/stream-tentative/close.any.js": [
- "1442d821148119a07889f3087edd02d78cbe3b8e",
+ "31febe9d9fdec989dc4b58b40d0e17fbb1073271",
"testharness"
],
"websockets/stream-tentative/constructor.any.js": [
@@ -750463,7 +750666,11 @@
"testharness"
],
"webxr/hit-test/ar_hittest_subscription_refSpaces.https.html": [
- "3cbbd6ca3db5055f8f6f52c2bc73ca2540f505f8",
+ "1f812d3a1f0a01c3c43de356d614e4d0fe254171",
+ "testharness"
+ ],
+ "webxr/hit-test/ar_hittest_subscription_states.https.html": [
+ "98947da263703e29588c5ac432137d9eca69d046",
"testharness"
],
"webxr/hit-test/xrRay_constructor.https.html": [
@@ -750503,7 +750710,7 @@
"support"
],
"webxr/resources/webxr_test_constants.js": [
- "553a8127fcf80fd3999add61439fca4a58c5d065",
+ "d5ee1e7391c6e76de28b88fb88a1566f347313ee",
"support"
],
"webxr/resources/webxr_test_constants_fake_world.js": [
@@ -750779,7 +750986,7 @@
"testharness"
],
"workers/SharedWorker-constructor.html": [
- "5347891d41855aaa5d1398d0b0fe53cc9c2fda3d",
+ "6298dd934e11d86d8147a4a84bbd03ad30676e6c",
"testharness"
],
"workers/SharedWorker-detach-frame-in-error-event.html": [
@@ -750835,7 +751042,7 @@
"testharness"
],
"workers/Worker-formdata.any.js": [
- "f14d4ff41a2419e464d6887513b89cc982cfd0f3",
+ "389d34b1c314c0ea2858f77085d334c73ca5333a",
"testharness"
],
"workers/Worker-location.sub.any.js": [
@@ -750847,7 +751054,7 @@
"testharness"
],
"workers/Worker-multi-port.html": [
- "725745b0ea4498ec3eec8811b51f692c555f21df",
+ "587176e9fc101e950b8f941d96f1f170356ea51e",
"testharness"
],
"workers/Worker-nested-importScripts-error.html": [
@@ -751371,7 +751578,7 @@
"testharness"
],
"workers/constructors/Worker/Worker-constructor.html": [
- "524a0982a9e532c1e5be01a526ed61bd6a0e58de",
+ "6d6843b77b69be522e8759f89b0b1bf06d1ac6c0",
"testharness"
],
"workers/constructors/Worker/ctor-1.html": [
@@ -752098,6 +752305,10 @@
"f56c1a5525f8c46e5d06f6549b3f355c4ccb4a0a",
"testharness"
],
+ "workers/modules/shared-worker-import-data-url.any.js": [
+ "81df965b9e1276746c001350658c5ea80334b736",
+ "testharness"
+ ],
"workers/modules/shared-worker-import-failure.html": [
"718ea650ec7d5f5a2beb192a901f186b29187dc6",
"testharness"
diff --git a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
index 4a1e8110f6f..f8e7e539aae 100644
--- a/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/transform-scale-hittest.html.ini
@@ -2,3 +2,6 @@
[Hit test intersecting scaled box]
expected: FAIL
+ [Hit test within unscaled box]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-transforms/transofrmed-preserve-3d-1.html.ini b/tests/wpt/metadata/css/css-transforms/transofrmed-preserve-3d-1.html.ini
deleted file mode 100644
index 9062312d6e9..00000000000
--- a/tests/wpt/metadata/css/css-transforms/transofrmed-preserve-3d-1.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[transofrmed-preserve-3d-1.html]
- type: reftest
- disabled: https://github.com/servo/servo/issues/9087
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index 44c57c7e76c..bfabd206a43 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -312,18 +312,24 @@
[fetch(): separate response Content-Type: text/plain ]
expected: NOTRUN
- [<iframe>: separate response Content-Type: text/html;" text/plain]
+ [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
+ [<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*]
+ [<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
+ [<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/html */*]
+ expected: FAIL
+
+ [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index 773361a5934..536384f36e1 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,12 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
- [X-Content-Type-Options%3A%20%22nosniFF%22]
- expected: FAIL
-
- [X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
- expected: FAIL
-
- [Content-Type-Options%3A%20nosniff]
+ [X-Content-Type-Options%3A%20%2Cnosniff]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini b/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini
index 6bd06899fdd..80ebd73cb00 100644
--- a/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini
+++ b/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini
@@ -8,7 +8,7 @@
expected: FAIL
[Embedded credentials are treated as network errors in new windows.]
- expected: FAIL
+ expected: TIMEOUT
[Embedded credentials matching the top-level are treated as network errors for cross-origin URLs.]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
index dc2e45516de..75d75b4cda2 100644
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_5.html]
+[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
index fd369192a02..c757b400205 100644
--- a/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
+++ b/tests/wpt/metadata/html/browsers/windows/embedded-opener-remove-frame.html.ini
@@ -1,5 +1,5 @@
[embedded-opener-remove-frame.html]
- expected: TIMEOUT
+ expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index f6a7aca3306..5f60c78e73c 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,5 +1,6 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 9df1ac56f2a..3f7e3e9544f 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini
index 25ad3f2bd44..24a00550af7 100644
--- a/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/constraints/form-validation-validity-customError.html.ini
@@ -24,3 +24,6 @@
[[textarea\] The validity.customError must be true if the custom validity error message is not empty]
expected: FAIL
+ [[select\] The validity.customError must be false if the custom validity error message is empty]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
index df89cd21511..941d0dee0c8 100644
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
@@ -1,5 +1,5 @@
[form-double-submit-3.html]
expected: ERROR
[<button> should have the same double-submit protection as <input type=submit>]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini
deleted file mode 100644
index bab4ff15d5b..00000000000
--- a/tests/wpt/metadata/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[anchor-with-inline-element.html]
- expected: TIMEOUT
- [Clicking on anchor with embedded inline element should navigate instead of opening details]
- expected: NOTRUN
-
- [Expected <a> containing <i> to navigate]
- expected: NOTRUN
-
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini
new file mode 100644
index 00000000000..8472b06a926
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini
@@ -0,0 +1,2 @@
+[errorhandling.html]
+ expected: CRASH
diff --git a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
index 6d08beab111..97f8a0cc51f 100644
--- a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
+++ b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
@@ -10,3 +10,6 @@
[Verifies the resolution of entry.startTime is at least 20 microseconds.]
expected: TIMEOUT
+ [Verifies the resolution of performance.now() is at least 5 microseconds.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini b/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini
index b4090ef9fe2..1c7ec9ce1db 100644
--- a/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini
+++ b/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini
@@ -1,5 +1,4 @@
[crossorigin-sandwich-TAO.sub.html]
- expected: ERROR
[There should be one entry.]
expected: FAIL
diff --git a/tests/wpt/metadata/webxr/hit-test/ar_hittest_subscription_states.https.html.ini b/tests/wpt/metadata/webxr/hit-test/ar_hittest_subscription_states.https.html.ini
new file mode 100644
index 00000000000..4ef02537e6e
--- /dev/null
+++ b/tests/wpt/metadata/webxr/hit-test/ar_hittest_subscription_states.https.html.ini
@@ -0,0 +1,10 @@
+[ar_hittest_subscription_states.https.html]
+ [Hit test subscription succeeds if the feature was requested]
+ expected: FAIL
+
+ [Hit test subscription fails if the feature was not requested]
+ expected: FAIL
+
+ [Hit test subscription fails if the feature was requested but the session already ended]
+ expected: FAIL
+
diff --git a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html
index 6e836db9b96..3ec02fcbf48 100644
--- a/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html
+++ b/tests/wpt/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html
@@ -47,7 +47,7 @@ promise_test(async (t) => {
const bitmap = await createImageBitmap(image);
assert_throws_dom('DataCloneError',
- () => worker.postMessage(bitmap, [bitmap]));
+ () => worker.postMessage(bitmap, [bitmap]));
}, 'Transferring a non-origin-clean ImageBitmap throws.');
</script>
diff --git a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html
index e5426bb979d..04edd2a303b 100644
--- a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html
+++ b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html
@@ -37,7 +37,7 @@ function readBlobAsPromise(blob) {
{}
].forEach(value => test(t => {
assert_throws_js(TypeError, () => new Blob([], {endings: value}),
- 'Blob constructor should throw');
+ 'Blob constructor should throw');
}, `Invalid "endings" value: ${JSON.stringify(value)}`));
test(t => {
diff --git a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html
index d2b1777b86b..62a649aed66 100644
--- a/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html
+++ b/tests/wpt/web-platform-tests/FileAPI/blob/Blob-constructor.html
@@ -465,7 +465,7 @@ test(function() {
].forEach(arg => {
test(t => {
assert_throws_js(TypeError, () => new Blob([], arg),
- 'Blob constructor should throw with invalid property bag');
+ 'Blob constructor should throw with invalid property bag');
}, `Passing ${JSON.stringify(arg)} for options should throw`);
});
diff --git a/tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html b/tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html
index f76d3329521..1282b6c5ac2 100644
--- a/tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html
+++ b/tests/wpt/web-platform-tests/FileAPI/file/File-constructor-endings.html
@@ -37,7 +37,7 @@ function readBlobAsPromise(blob) {
{}
].forEach(value => test(t => {
assert_throws_js(TypeError, () => new File([], "name", {endings: value}),
- 'File constructor should throw');
+ 'File constructor should throw');
}, `Invalid "endings" value: ${JSON.stringify(value)}`));
test(t => {
diff --git a/tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html b/tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html
index 60dbb233f01..63fda5e8d17 100644
--- a/tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html
+++ b/tests/wpt/web-platform-tests/FileAPI/file/File-constructor.html
@@ -15,9 +15,9 @@ test(function() {
test(t => {
assert_throws_js(TypeError, () => new File(),
- 'Bits argument is required');
+ 'Bits argument is required');
assert_throws_js(TypeError, () => new File([]),
- 'Name argument is required');
+ 'Name argument is required');
}, 'Required arguments');
function test_first_argument(arg1, expectedSize, testName) {
@@ -65,13 +65,13 @@ test_first_argument({[Symbol.iterator]() {
].forEach(arg => {
test(t => {
assert_throws_js(TypeError, () => new File(arg, 'world.html'),
- 'Constructor should throw for invalid bits argument');
+ 'Constructor should throw for invalid bits argument');
}, `Invalid bits argument: ${JSON.stringify(arg)}`);
});
test(t => {
assert_throws_js(Error, () => new File([to_string_throws], 'name.txt'),
- 'Constructor should propagate exceptions');
+ 'Constructor should propagate exceptions');
}, 'Bits argument: object that throws');
@@ -132,7 +132,7 @@ test(function() {
].forEach(arg => {
test(t => {
assert_throws_js(TypeError, () => new File(['bits'], 'name.txt', arg),
- 'Constructor should throw for invalid property bag type');
+ 'Constructor should throw for invalid property bag type');
}, `Invalid property bag: ${JSON.stringify(arg)}`);
});
@@ -151,8 +151,8 @@ test(function() {
test(t => {
assert_throws_js(Error,
- () => new File(['bits'], 'name.txt', {type: to_string_throws}),
- 'Constructor should propagate exceptions');
+ () => new File(['bits'], 'name.txt', {type: to_string_throws}),
+ 'Constructor should propagate exceptions');
}, 'Property bag propagates exceptions');
</script>
diff --git a/tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html b/tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html
index 8b99e1ae16c..c885620e292 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/clone-before-keypath-eval.html
@@ -64,7 +64,7 @@ indexeddb_test(
const store = tx.objectStore('store');
const obj = new ProbeObject();
assert_throws_dom('DataError', () => { store.put(obj); },
- 'put() should throw if primary key cannot be injected');
+ 'put() should throw if primary key cannot be injected');
assert_equals(
obj.invalid_id_count, 1,
'put() operation should access primary key property once');
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html
index 893c179e24f..a0294e9b7a1 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-exception-order.html
@@ -24,8 +24,8 @@ indexeddb_test(
setTimeout(t.step_func(() => {
assert_throws_js(TypeError, () => { cursor.advance(0); },
- '"zero" check (TypeError) should precede ' +
- '"not active" check (TransactionInactiveError)');
+ '"zero" check (TypeError) should precede ' +
+ '"not active" check (TransactionInactiveError)');
t.done();
}), 0);
});
@@ -49,8 +49,8 @@ indexeddb_test(
setTimeout(t.step_func(() => {
assert_throws_dom('TransactionInactiveError', () => { cursor.advance(1); },
- '"not active" check (TransactionInactiveError) ' +
- 'should precede "deleted" check (InvalidStateError)');
+ '"not active" check (TransactionInactiveError) ' +
+ 'should precede "deleted" check (InvalidStateError)');
t.done();
}), 0);
});
@@ -78,8 +78,8 @@ indexeddb_test(
setTimeout(t.step_func(() => {
assert_throws_dom('TransactionInactiveError', () => { cursor.advance(1); },
- '"not active" check (TransactionInactiveError) ' +
- 'should precede "got value" check (InvalidStateError)');
+ '"not active" check (TransactionInactiveError) ' +
+ 'should precede "got value" check (InvalidStateError)');
t.done();
}), 0);
});
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm
index 02c7fde0c49..67e03187c0f 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor-advance-invalid.htm
@@ -39,10 +39,10 @@ indexeddb_test(
// Second try
assert_throws_dom('InvalidStateError',
- function() { cursor.advance(1); }, 'second advance');
+ function() { cursor.advance(1); }, 'second advance');
assert_throws_dom('InvalidStateError',
- function() { cursor.advance(3); }, 'third advance');
+ function() { cursor.advance(3); }, 'third advance');
count++;
});
@@ -60,19 +60,19 @@ indexeddb_test(
var cursor = e.target.result;
assert_throws_js(TypeError,
- function() { cursor.advance(document); });
+ function() { cursor.advance(document); });
assert_throws_js(TypeError,
- function() { cursor.advance({}); });
+ function() { cursor.advance({}); });
assert_throws_js(TypeError,
- function() { cursor.advance([]); });
+ function() { cursor.advance([]); });
assert_throws_js(TypeError,
- function() { cursor.advance(""); });
+ function() { cursor.advance(""); });
assert_throws_js(TypeError,
- function() { cursor.advance("1 2"); });
+ function() { cursor.advance("1 2"); });
t.done();
});
@@ -91,14 +91,14 @@ indexeddb_test(
var cursor = e.target.result;
assert_throws_js(TypeError,
- function() { cursor.advance(null); });
+ function() { cursor.advance(null); });
assert_throws_js(TypeError,
- function() { cursor.advance(undefined); });
+ function() { cursor.advance(undefined); });
var myvar = null;
assert_throws_js(TypeError,
- function() { cursor.advance(myvar); });
+ function() { cursor.advance(myvar); });
t.done();
});
@@ -117,7 +117,7 @@ indexeddb_test(
var cursor = e.target.result;
assert_throws_js(TypeError,
- function() { cursor.advance(); });
+ function() { cursor.advance(); });
t.done();
});
@@ -135,26 +135,26 @@ indexeddb_test(
var cursor = e.target.result;
assert_throws_js(TypeError,
- function() { cursor.advance(-1); });
+ function() { cursor.advance(-1); });
assert_throws_js(TypeError,
- function() { cursor.advance(NaN); });
+ function() { cursor.advance(NaN); });
assert_throws_js(TypeError,
- function() { cursor.advance(0); });
+ function() { cursor.advance(0); });
assert_throws_js(TypeError,
- function() { cursor.advance(-0); });
+ function() { cursor.advance(-0); });
assert_throws_js(TypeError,
- function() { cursor.advance(Infinity); });
+ function() { cursor.advance(Infinity); });
assert_throws_js(TypeError,
- function() { cursor.advance(-Infinity); });
+ function() { cursor.advance(-Infinity); });
var myvar = -999999;
assert_throws_js(TypeError,
- function() { cursor.advance(myvar); });
+ function() { cursor.advance(myvar); });
t.done();
});
@@ -179,7 +179,7 @@ indexeddb_test(
}
assert_throws_js(TypeError,
- function() { cursor.advance(0); });
+ function() { cursor.advance(0); });
cursor.advance(1);
count++;
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html b/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html
index 19825355004..ab0c18b04ff 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAll-enforcerange.html
@@ -18,7 +18,7 @@ indexeddb_test(
const index = store.index('index');
[NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => {
assert_throws_js(TypeError, () => { index.getAll(null, count); },
- `getAll with count ${count} count should throw TypeError`);
+ `getAll with count ${count} count should throw TypeError`);
});
t.done();
},
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html b/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html
index 40cad527bb0..fc65311a564 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-getAllKeys-enforcerange.html
@@ -18,7 +18,7 @@ indexeddb_test(
const index = store.index('index');
[NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => {
assert_throws_js(TypeError, () => { index.getAllKeys(null, count); },
- `getAllKeys with count ${count} count should throw TypeError`);
+ `getAllKeys with count ${count} count should throw TypeError`);
});
t.done();
},
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html
index 80c653b3864..0c4eb89905d 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAll-enforcerange.html
@@ -16,7 +16,7 @@ indexeddb_test(
const store = tx.objectStore('store');
[NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => {
assert_throws_js(TypeError, () => { store.getAll(null, count); },
- `getAll with count ${count} count should throw TypeError`);
+ `getAll with count ${count} count should throw TypeError`);
});
t.done();
},
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html
index 3653d1d5a1f..23fe5966912 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-getAllKeys-enforcerange.html
@@ -16,7 +16,7 @@ indexeddb_test(
const store = tx.objectStore('store');
[NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => {
assert_throws_js(TypeError, () => { store.getAllKeys(null, count); },
- `getAllKeys with count ${count} count should throw TypeError`);
+ `getAllKeys with count ${count} count should throw TypeError`);
});
t.done();
},
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html
index cc8dceaf42e..67b0945cc98 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore-index-finished.html
@@ -17,7 +17,7 @@ indexeddb_test(
const store = tx.objectStore('store');
tx.abort();
assert_throws_dom('InvalidStateError', () => store.index('index'),
- 'index() should throw if transaction is finished');
+ 'index() should throw if transaction is finished');
t.done();
},
'IDBObjectStore index() behavior when transaction is finished'
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html b/tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html
index 651a844d29d..c140c59e2de 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbrequest_error.html
@@ -18,7 +18,7 @@ async_test(t => {
assert_equals(request.readyState, 'pending');
assert_throws_dom('InvalidStateError', () => request.error,
- 'IDBRequest.error should throw if request is pending');
+ 'IDBRequest.error should throw if request is pending');
t.done();
});
}, 'IDBRequest.error throws if ready state is pending');
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html b/tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html
index f77aba7dfe4..e7516d52e8f 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbrequest_result.html
@@ -18,7 +18,7 @@ async_test(t => {
assert_equals(request.readyState, 'pending');
assert_throws_dom('InvalidStateError', () => request.result,
- 'IDBRequest.result should throw if request is pending');
+ 'IDBRequest.result should throw if request is pending');
t.done();
});
}, 'IDBRequest.result throws if ready state is pending');
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html
index 4b7659ff0bf..bc0357a1311 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-exception-order.html
@@ -15,8 +15,8 @@ indexeddb_test(
const tx = db.transaction('s');
tx.oncomplete = t.step_func(() => {
assert_throws_dom('InvalidStateError', () => { tx.objectStore('nope'); },
- '"finished" check (InvalidStateError) should precede ' +
- '"name in scope" check (NotFoundError)');
+ '"finished" check (InvalidStateError) should precede ' +
+ '"name in scope" check (NotFoundError)');
t.done();
});
},
diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html
index e1a8500b17a..78d2777e63c 100644
--- a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html
+++ b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-objectStore-finished.html
@@ -15,7 +15,7 @@ indexeddb_test(
const tx = db.transaction('store');
tx.abort();
assert_throws_dom('InvalidStateError', () => tx.objectStore('store'),
- 'objectStore() should throw if transaction is finished');
+ 'objectStore() should throw if transaction is finished');
t.done();
},
'IDBTransaction objectStore() behavior when transaction is finished'
diff --git a/tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js b/tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js
index c5733d64cc9..67d5943624c 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js
+++ b/tests/wpt/web-platform-tests/content-security-policy/inside-worker/support/script-src-self.sub.js
@@ -4,19 +4,19 @@ importScripts("{{location[server]}}/content-security-policy/support/testharness-
test(t => {
self.a = false;
assert_throws_dom("NetworkError",
- _ => importScripts("http://{{domains[www]}}:{{ports[http][1]}}/content-security-policy/support/var-a.js"),
- "importScripts should throw `NetworkError`");
+ _ => importScripts("http://{{domains[www]}}:{{ports[http][1]}}/content-security-policy/support/var-a.js"),
+ "importScripts should throw `NetworkError`");
assert_false(self.a);
}, "Cross-origin `importScripts()` blocked in " + self.location.protocol + self.location.search);
test(t => {
assert_throws_js(EvalError,
- _ => eval("1 + 1"),
- "`eval()` should throw 'EvalError'.");
+ _ => eval("1 + 1"),
+ "`eval()` should throw 'EvalError'.");
assert_throws_js(EvalError,
- _ => new Function("1 + 1"),
- "`new Function()` should throw 'EvalError'.");
+ _ => new Function("1 + 1"),
+ "`new Function()` should throw 'EvalError'.");
}, "`eval()` blocked in " + self.location.protocol + self.location.search);
async_test(t => {
diff --git a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html
index 1424cdcd7ff..1a090d8e2c4 100644
--- a/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html
+++ b/tests/wpt/web-platform-tests/content-security-policy/securitypolicyviolation/constructor-required-fields.html
@@ -5,7 +5,7 @@
// basic tests.
test(function() {
assert_throws_js(TypeError,
- function() { new SecurityPolicyViolationEvent(); });
+ function() { new SecurityPolicyViolationEvent(); });
}, "SecurityPolicyViolationEvent constructor should throw with no parameters");
test(function() {
diff --git a/tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html b/tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html
index 3818108ac60..e9e8cce8ffa 100644
--- a/tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html
+++ b/tests/wpt/web-platform-tests/css/css-conditional/test_group_insertRule.html
@@ -35,19 +35,19 @@
test(function() {
assert_throws_dom("HIERARCHY_REQUEST_ERR",
- function() {
- grouping_rule.insertRule("@import url(foo.css);", 0);
- },
- "inserting a disallowed rule should throw HIERARCHY_REQUEST_ERR");
+ function() {
+ grouping_rule.insertRule("@import url(foo.css);", 0);
+ },
+ "inserting a disallowed rule should throw HIERARCHY_REQUEST_ERR");
},
"insert_import_throws");
test(function() {
assert_throws_dom("INDEX_SIZE_ERR",
- function() {
- grouping_rule.insertRule("p { color: green }", 1);
- },
- "inserting at a bad index throws INDEX_SIZE_ERR");
+ function() {
+ grouping_rule.insertRule("p { color: green }", 1);
+ },
+ "inserting at a bad index throws INDEX_SIZE_ERR");
},
"insert_index_throws1");
test(function() {
@@ -61,10 +61,10 @@
assert_equals(grouping_rule.cssRules.length, 3,
"Modified cssRules.length of @media rule");
assert_throws_dom("INDEX_SIZE_ERR",
- function() {
- grouping_rule.insertRule("p { color: green }", 4);
- },
- "inserting at a bad index throws INDEX_SIZE_ERR");
+ function() {
+ grouping_rule.insertRule("p { color: green }", 4);
+ },
+ "inserting at a bad index throws INDEX_SIZE_ERR");
assert_equals(grouping_rule.cssRules.length, 3,
"Modified cssRules.length of @media rule");
},
@@ -97,10 +97,10 @@
grouping_rule.deleteRule(0);
}
assert_throws_dom("SYNTAX_ERR",
- function() {
- grouping_rule.insertRule("@media bad syntax;", 0);
- },
- "inserting syntactically invalid rule throws syntax error");
+ function() {
+ grouping_rule.insertRule("@media bad syntax;", 0);
+ },
+ "inserting syntactically invalid rule throws syntax error");
assert_equals(grouping_rule.cssRules.length, 0,
"Modified cssRules.length of @media rule");
},
@@ -110,10 +110,10 @@
grouping_rule.deleteRule(0);
}
assert_throws_dom("SYNTAX_ERR",
- function() {
- grouping_rule.insertRule("", 0);
- },
- "inserting empty rule throws syntax error");
+ function() {
+ grouping_rule.insertRule("", 0);
+ },
+ "inserting empty rule throws syntax error");
assert_equals(grouping_rule.cssRules.length, 0,
"Modified cssRules.length of @media rule");
},
@@ -123,10 +123,10 @@
grouping_rule.deleteRule(0);
}
assert_throws_dom("SYNTAX_ERR",
- function() {
- grouping_rule.insertRule("@media print {} foo", 0);
- },
- "inserting rule with garbage afterwards throws syntax error");
+ function() {
+ grouping_rule.insertRule("@media print {} foo", 0);
+ },
+ "inserting rule with garbage afterwards throws syntax error");
assert_equals(grouping_rule.cssRules.length, 0,
"Modified cssRules.length of @media rule");
},
@@ -136,10 +136,10 @@
grouping_rule.deleteRule(0);
}
assert_throws_dom("SYNTAX_ERR",
- function() {
- grouping_rule.insertRule("p { color: yellow } foo", 0);
- },
- "inserting rule with garbage afterwards throws syntax error");
+ function() {
+ grouping_rule.insertRule("p { color: yellow } foo", 0);
+ },
+ "inserting rule with garbage afterwards throws syntax error");
assert_equals(grouping_rule.cssRules.length, 0,
"Modified cssRules.length of @media rule");
},
@@ -149,10 +149,10 @@
grouping_rule.deleteRule(0);
}
assert_throws_dom("SYNTAX_ERR",
- function() {
- grouping_rule.insertRule("@media print {} @media print {}", 0);
- },
- "inserting multiple rules throws syntax error");
+ function() {
+ grouping_rule.insertRule("@media print {} @media print {}", 0);
+ },
+ "inserting multiple rules throws syntax error");
assert_equals(grouping_rule.cssRules.length, 0,
"Modified cssRules.length of @media rule");
},
@@ -162,10 +162,10 @@
grouping_rule.deleteRule(0);
}
assert_throws_dom("SYNTAX_ERR",
- function() {
- grouping_rule.insertRule("p { color: yellow } @media print {}", 0);
- },
- "inserting multiple rules throws syntax error");
+ function() {
+ grouping_rule.insertRule("p { color: yellow } @media print {}", 0);
+ },
+ "inserting multiple rules throws syntax error");
assert_equals(grouping_rule.cssRules.length, 0,
"Modified cssRules.length of @media rule");
},
@@ -175,10 +175,10 @@
grouping_rule.deleteRule(0);
}
assert_throws_dom("SYNTAX_ERR",
- function() {
- grouping_rule.insertRule("@media print {} p { color: yellow }", 0);
- },
- "inserting multiple rules throws syntax error");
+ function() {
+ grouping_rule.insertRule("@media print {} p { color: yellow }", 0);
+ },
+ "inserting multiple rules throws syntax error");
assert_equals(grouping_rule.cssRules.length, 0,
"Modified cssRules.length of @media rule");
},
@@ -188,10 +188,10 @@
grouping_rule.deleteRule(0);
}
assert_throws_dom("SYNTAX_ERR",
- function() {
- grouping_rule.insertRule("p { color: yellow } p { color: yellow }", 0);
- },
- "inserting multiple rules throws syntax error");
+ function() {
+ grouping_rule.insertRule("p { color: yellow } p { color: yellow }", 0);
+ },
+ "inserting multiple rules throws syntax error");
assert_equals(grouping_rule.cssRules.length, 0,
"Modified cssRules.length of @media rule");
},
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html
index cecab3e2136..0901ddea416 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html
@@ -27,30 +27,6 @@
height: 400px;
}
-.thirdRowFirstColumn {
- background-color: green;
- grid-column: 1;
- grid-row: 3;
-}
-
-.fourthRowFirstColumn {
- background-color: deepskyblue;
- grid-column: 1;
- grid-row: 4;
-}
-
-.fourthRowSecondColumn {
- background-color: maroon;
- grid-column: 2;
- grid-row: 4;
-}
-
-.thirdRowFirstColumn {
- background-color: green;
- grid-column: 1;
- grid-row: 3;
-}
-
.fourthRowFirstColumn {
background-color: deepskyblue;
grid-column: 1;
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html
index 40ee22190b9..1b495c47d2d 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html
@@ -27,30 +27,6 @@
height: 400px;
}
-.thirdRowFirstColumn {
- background-color: green;
- grid-column: 1;
- grid-row: 3;
-}
-
-.fourthRowFirstColumn {
- background-color: deepskyblue;
- grid-column: 1;
- grid-row: 4;
-}
-
-.fourthRowSecondColumn {
- background-color: maroon;
- grid-column: 2;
- grid-row: 4;
-}
-
-.thirdRowFirstColumn {
- background-color: green;
- grid-column: 1;
- grid-row: 3;
-}
-
.fourthRowFirstColumn {
background-color: deepskyblue;
grid-column: 1;
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html
index 488fc05aad4..444e46b9ca5 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-content-distribution.html
@@ -22,30 +22,6 @@
grid-auto-rows: auto;
}
-.thirdRowFirstColumn {
- background-color: green;
- grid-column: 1;
- grid-row: 3;
-}
-
-.fourthRowFirstColumn {
- background-color: deepskyblue;
- grid-column: 1;
- grid-row: 4;
-}
-
-.fourthRowSecondColumn {
- background-color: maroon;
- grid-column: 2;
- grid-row: 4;
-}
-
-.thirdRowFirstColumn {
- background-color: green;
- grid-column: 1;
- grid-row: 3;
-}
-
.fourthRowFirstColumn {
background-color: deepskyblue;
grid-column: 1;
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html
index f0d94198aff..3ae182782a3 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-align-justify-overflow.html
@@ -29,11 +29,7 @@
width: 50px;
height: 40px;
}
-.thirdRowFirstColumn {
- background-color: green;
- grid-column: 1;
- grid-row: 3;
-}
+
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html
new file mode 100644
index 00000000000..32c2efb3957
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-lr.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout test:item alignment with orthogonal flows, vertical-lr writing mode</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#alignment-values">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#orthogonal-flows">
+<meta name="assert" content="This test checks that grid item alignment works as expected with vertical-lr and horizontal-tb orthogonal flows">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" href="/css/support/grid.css">
+<link rel="stylesheet" href="/css/support/alignment.css">
+<link rel="stylesheet" href="/css/support/width-keyword-classes.css">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+
+<style>
+.container {
+ position: relative;
+}
+.grid {
+ grid-template-columns: 100px 100px;
+ grid-template-rows: 150px 150px 150px;
+ font-size: 10px;
+}
+.item {
+ width: 50px;
+ height: 20px;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that grid items alignment works as expected with VERTICAL-LR vs HORIZONTAL-TB orthogonal flows.</p>
+
+<p>Direction: LTR vs LTR</p>
+<div class="container">
+ <div class="grid fit-content verticalLR directionLTR">
+ <div class="item firstRowFirstColumn horizontalTB selfEnd" data-offset-x="100" data-offset-y="80">end</div>
+ <div class="item firstRowSecondColumn horizontalTB selfCenter" data-offset-x="50" data-offset-y="140">center</div>
+ <div class="item secondRowFirstColumn horizontalTB selfStart" data-offset-x="150" data-offset-y="0">start</div>
+ <div class="item secondRowSecondColumn horizontalTB selfSelfEnd" data-offset-x="250" data-offset-y="180">s-end</div>
+ <div class="item thirdRowFirstColumn horizontalTB selfSelfStart" data-offset-x="300" data-offset-y="0">s-start</div>
+ <div class="item thirdRowSecondColumn horizontalTB" data-offset-x="300" data-offset-y="100">default</div>
+ </div>
+</div>
+
+<p>Direction: RTL vs LTR</p>
+<div class="container">
+ <div class="grid fit-content verticalLR directionRTL">
+ <div class="item firstRowFirstColumn directionLTR horizontalTB selfEnd" data-offset-x="100" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn directionLTR horizontalTB selfCenter" data-offset-x="50" data-offset-y="40">center</div>
+ <div class="item secondRowFirstColumn directionLTR horizontalTB selfStart" data-offset-x="150" data-offset-y="180">start</div>
+ <div class="item secondRowSecondColumn directionLTR horizontalTB selfSelfEnd" data-offset-x="250" data-offset-y="80">s-end</div>
+ <div class="item thirdRowFirstColumn directionLTR horizontalTB selfSelfStart" data-offset-x="300" data-offset-y="100">s-start</div>
+ <div class="item thirdRowSecondColumn directionLTR horizontalTB" data-offset-x="300" data-offset-y="80">default</div>
+ </div>
+</div>
+
+<p>Direction: LTR vs RTL</p>
+<div class="container">
+ <div class="grid fit-content verticalLR directionLTR">
+ <div class="item firstRowFirstColumn directionRTL horizontalTB selfEnd" data-offset-x="100" data-offset-y="80">end</div>
+ <div class="item firstRowSecondColumn directionRTL horizontalTB selfCenter" data-offset-x="50" data-offset-y="140">center</div>
+ <div class="item secondRowFirstColumn directionRTL horizontalTB selfStart" data-offset-x="150" data-offset-y="0">start</div>
+ <div class="item secondRowSecondColumn directionRTL horizontalTB selfSelfEnd" data-offset-x="150" data-offset-y="180">s-end</div>
+ <div class="item thirdRowFirstColumn directionRTL horizontalTB selfSelfStart" data-offset-x="400" data-offset-y="0">s-start</div>
+ <div class="item thirdRowSecondColumn directionRTL horizontalTB" data-offset-x="300" data-offset-y="100">default</div>
+ </div>
+</div>
+
+<p>Direction: RTL vs RTL</p>
+<div class="container">
+ <div class="grid fit-content verticalLR directionRTL">
+ <div class="item firstRowFirstColumn horizontalTB selfEnd" data-offset-x="100" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn horizontalTB selfCenter" data-offset-x="50" data-offset-y="40">center</div>
+ <div class="item secondRowFirstColumn horizontalTB selfStart" data-offset-x="150" data-offset-y="180">start</div>
+ <div class="item secondRowSecondColumn horizontalTB selfSelfEnd" data-offset-x="150" data-offset-y="80">s-end</div>
+ <div class="item thirdRowFirstColumn horizontalTB selfSelfStart" data-offset-x="400" data-offset-y="100">s-start</div>
+ <div class="item thirdRowSecondColumn horizontalTB" data-offset-x="300" data-offset-y="80">default</div>
+ </div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html
new file mode 100644
index 00000000000..845c6cea27e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows-vertical-rl.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout test:item alignment with orthogonal flows, vertical-rl writing mode</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#alignment-values">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#orthogonal-flows">
+<meta name="assert" content="This test checks that grid item alignment works as expected with vertical-rl and horizontal-tb orthogonal flows">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" href="/css/support/grid.css">
+<link rel="stylesheet" href="/css/support/alignment.css">
+<link rel="stylesheet" href="/css/support/width-keyword-classes.css">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+
+<style>
+.container {
+ position: relative;
+}
+.grid {
+ grid-template-columns: 100px 100px;
+ grid-template-rows: 150px 150px 150px;
+ font-size: 10px;
+}
+.item {
+ width: 50px;
+ height: 20px;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that grid items alignment works as expected with VERTICAL-RL vs HORIZONTAL-TB orthogonal flows.</p>
+
+<p>Direction: LTR vs LTR</p>
+<div class="container">
+ <div class="grid fit-content verticalRL directionLTR">
+ <div class="item firstRowFirstColumn horizontalTB selfEnd" data-offset-x="300" data-offset-y="80">end</div>
+ <div class="item firstRowSecondColumn horizontalTB selfCenter" data-offset-x="350" data-offset-y="140">center</div>
+ <div class="item secondRowFirstColumn horizontalTB selfStart" data-offset-x="250" data-offset-y="0">start</div>
+ <div class="item secondRowSecondColumn horizontalTB selfSelfEnd" data-offset-x="250" data-offset-y="180">s-end</div>
+ <div class="item thirdRowFirstColumn horizontalTB selfSelfStart" data-offset-x="0" data-offset-y="0">s-start</div>
+ <div class="item thirdRowSecondColumn horizontalTB" data-offset-x="100" data-offset-y="100">default</div>
+ </div>
+</div>
+
+<p>Direction: RTL vs LTR</p>
+<div class="container">
+ <div class="grid fit-content verticalRL directionRTL">
+ <div class="item firstRowFirstColumn directionLTR horizontalTB selfEnd" data-offset-x="300" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn directionLTR horizontalTB selfCenter" data-offset-x="350" data-offset-y="40">center</div>
+ <div class="item secondRowFirstColumn directionLTR horizontalTB selfStart" data-offset-x="250" data-offset-y="180">start</div>
+ <div class="item secondRowSecondColumn directionLTR horizontalTB selfSelfEnd" data-offset-x="250" data-offset-y="80">s-end</div>
+ <div class="item thirdRowFirstColumn directionLTR horizontalTB selfSelfStart" data-offset-x="0" data-offset-y="100">s-start</div>
+ <div class="item thirdRowSecondColumn directionLTR horizontalTB" data-offset-x="100" data-offset-y="80">default</div>
+ </div>
+</div>
+
+<p>Direction: LTR vs RTL</p>
+<div class="container">
+ <div class="grid fit-content verticalRL directionLTR">
+ <div class="item firstRowFirstColumn directionRTL horizontalTB selfEnd" data-offset-x="300" data-offset-y="80">end</div>
+ <div class="item firstRowSecondColumn directionRTL horizontalTB selfCenter" data-offset-x="350" data-offset-y="140">center</div>
+ <div class="item secondRowFirstColumn directionRTL horizontalTB selfStart" data-offset-x="250" data-offset-y="0">start</div>
+ <div class="item secondRowSecondColumn directionRTL horizontalTB selfSelfEnd" data-offset-x="150" data-offset-y="180">s-end</div>
+ <div class="item thirdRowFirstColumn directionRTL horizontalTB selfSelfStart" data-offset-x="100" data-offset-y="0">s-start</div>
+ <div class="item thirdRowSecondColumn directionRTL horizontalTB" data-offset-x="100" data-offset-y="100">default</div>
+
+ </div>
+</div>
+
+<p>Direction: RTL vs RTL</p>
+<div class="container">
+ <div class="grid fit-content verticalRL directionRTL">
+ <div class="item firstRowFirstColumn horizontalTB selfEnd" data-offset-x="300" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn horizontalTB selfCenter" data-offset-x="350" data-offset-y="40">center</div>
+ <div class="item secondRowFirstColumn horizontalTB selfStart" data-offset-x="250" data-offset-y="180">start</div>
+ <div class="item secondRowSecondColumn horizontalTB selfSelfEnd" data-offset-x="150" data-offset-y="80">s-end</div>
+ <div class="item thirdRowFirstColumn horizontalTB selfSelfStart" data-offset-x="100" data-offset-y="100">s-start</div>
+ <div class="item thirdRowSecondColumn horizontalTB" data-offset-x="100" data-offset-y="80">default</div>
+ </div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html
new file mode 100644
index 00000000000..c506547a760
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-item-alignment-with-orthogonal-flows.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout test: item alignment with orthogonal flows</title>
+<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#alignment-values">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#orthogonal-flows">
+<meta name="assert" content="This test checks that grid item alignment works as expected with horizontal-tb and vertical-rl/vertical-lr orthogonal flows">
+<meta name="flags" content="ahem">
+<link rel="stylesheet" href="/css/support/grid.css">
+<link rel="stylesheet" href="/css/support/alignment.css">
+<link rel="stylesheet" href="/css/support/width-keyword-classes.css">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+
+<style>
+.container {
+ position: relative;
+}
+.grid {
+ grid-template-columns: 100px 100px;
+ grid-template-rows: 150px 150px 150px;
+ font-size: 10px;
+}
+.item {
+ width: 20px;
+ height: 50px;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.grid')">
+
+<p>This test checks that grid items alignment works as expected with HORIZONTAL-TB vs VERTICAL-RL orthogonal flows.</p>
+
+<p>Orthogonal flows: HORIZONTAL-TB vs VERTICAL-RL</p>
+<p>Direction: LTR vs LTR</p>
+<div class="container">
+ <div class="grid fit-content directionLTR">
+ <div class="item firstRowFirstColumn verticalRL selfEnd" data-offset-x="80" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn verticalRL selfCenter" data-offset-x="140" data-offset-y="50">center</div>
+ <div class="item secondRowFirstColumn verticalRL selfStart" data-offset-x="0" data-offset-y="150">start</div>
+ <div class="item secondRowSecondColumn verticalRL selfSelfEnd" data-offset-x="100" data-offset-y="250">s-end</div>
+ <div class="item thirdRowFirstColumn verticalRL selfSelfStart" data-offset-x="80" data-offset-y="300">s-start</div>
+ <div class="item thirdRowSecondColumn verticalRL" data-offset-x= "100" data-offset-y="300">default</div>
+ </div>
+</div>
+
+<p>Direction: RTL vs LTR</p>
+<div class="container">
+ <div class="grid fit-content directionRTL">
+ <div class="item firstRowFirstColumn directionLTR verticalRL selfEnd" data-offset-x="100" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn directionLTR verticalRL selfCenter" data-offset-x="40" data-offset-y="50">center</div>
+ <div class="item secondRowFirstColumn directionLTR verticalRL selfStart" data-offset-x="180" data-offset-y="150">start</div>
+ <div class="item secondRowSecondColumn directionLTR verticalRL selfSelfEnd" data-offset-x="0" data-offset-y="250">s-end</div>
+ <div class="item thirdRowFirstColumn directionLTR verticalRL selfSelfStart" data-offset-x="180" data-offset-y="300">s-start</div>
+ <div class="item thirdRowSecondColumn directionLTR verticalRL" data-offset-x="80" data-offset-y="300">default</div>
+
+ </div>
+</div>
+
+<p>Direction: LTR vs RTL</p>
+<div class="container">
+ <div class="grid fit-content directionLTR">
+ <div class="item firstRowFirstColumn directionRTL verticalRL selfEnd" data-offset-x="80" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn directionRTL verticalRL selfCenter" data-offset-x="140" data-offset-y="50">center</div>
+ <div class="item secondRowFirstColumn directionRTL verticalRL selfStart" data-offset-x="0" data-offset-y="150">start</div>
+ <div class="item secondRowSecondColumn directionRTL verticalRL selfSelfEnd" data-offset-x="100" data-offset-y="150">s-end</div>
+ <div class="item thirdRowFirstColumn directionRTL verticalRL selfSelfStart" data-offset-x="80" data-offset-y="400">s-start</div>
+ <div class="item thirdRowSecondColumn directionRTL verticalRL" data-offset-x="100" data-offset-y="300">default</div>
+ </div>
+</div>
+
+<p>Direction: RTL vs RTL</p>
+<div class="container">
+ <div class="grid fit-content directionRTL">
+ <div class="item firstRowFirstColumn verticalRL selfEnd" data-offset-x="100" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn verticalRL selfCenter" data-offset-x="40" data-offset-y="50">center</div>
+ <div class="item secondRowFirstColumn verticalRL selfStart" data-offset-x="180" data-offset-y="150">start</div>
+ <div class="item secondRowSecondColumn verticalRL selfSelfEnd" data-offset-x="0" data-offset-y="150">s-end</div>
+ <div class="item thirdRowFirstColumn verticalRL selfSelfStart" data-offset-x="180" data-offset-y="400">s-start</div>
+ <div class="item thirdRowSecondColumn verticalRL" data-offset-x="80" data-offset-y="300">default</div>
+ </div>
+</div>
+
+<!-- HORIZONTAL-TB vs VERTICAL-LR -->
+<p>Orthogonal flows: HORIZONTAL-TB vs VERTICAL-LR</p>
+<p>Direction: LTR vs LTR</p>
+<div class="container">
+ <div class="grid fit-content drectionLTR">
+ <div class="item firstRowFirstColumn verticalLR selfEnd" data-offset-x="80" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn verticalLR selfCenter" data-offset-x="140" data-offset-y="50">center</div>
+ <div class="item secondRowFirstColumn verticalLR selfStart" data-offset-x="0" data-offset-y="150">start</div>
+ <div class="item secondRowSecondColumn verticalLR selfSelfEnd" data-offset-x="180" data-offset-y="250">s-end</div>
+ <div class="item thirdRowFirstColumn verticalLR selfSelfStart" data-offset-x="0" data-offset-y="300">s-start</div>
+ <div class="item thirdRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="300">default</div>
+ </div>
+</div>
+
+<p>Direction: RTL vs LTR</p>
+<div class="container">
+ <div class="grid fit-content directionRTL">
+ <div class="item firstRowFirstColumn directionLTR verticalLR selfEnd" data-offset-x="100" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn directionLTR verticalLR selfCenter" data-offset-x="40" data-offset-y="50">center</div>
+ <div class="item secondRowFirstColumn directionLTR verticalLR selfStart" data-offset-x="180" data-offset-y="150">start</div>
+ <div class="item secondRowSecondColumn directionLTR verticalLR selfSelfEnd" data-offset-x="80" data-offset-y="250">s-end</div>
+ <div class="item thirdRowFirstColumn directionLTR verticalLR selfSelfStart" data-offset-x="100" data-offset-y="300">s-start</div>
+ <div class="item thirdRowSecondColumn directionLTR verticalLR" data-offset-x="80" data-offset-y="300">default</div>
+ </div>
+</div>
+
+<p>Direction: RTL vs RTL</p>
+<div class="container">
+ <div class="grid fit-content directionRTL">
+ <div class="item firstRowFirstColumn verticalLR selfEnd" data-offset-x="100" data-offset-y="100">end</div>
+ <div class="item firstRowSecondColumn verticalLR selfCenter" data-offset-x="40" data-offset-y="50">center</div>
+ <div class="item secondRowFirstColumn verticalLR selfStart" data-offset-x="180" data-offset-y="150">start</div>
+ <div class="item secondRowSecondColumn verticalLR selfSelfEnd" data-offset-x="80" data-offset-y="150">s-end</div>
+ <div class="item thirdRowFirstColumn verticalLR selfSelfStart" data-offset-x="100" data-offset-y="400">s-start</div>
+ <div class="item thirdRowSecondColumn verticalLR" data-offset-x="80" data-offset-y="300">default</div>
+ </div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-001.html
new file mode 100644
index 00000000000..458ed020e37
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-001.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<title>Grid items only stretch if block-size computes to auto</title>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4525">
+<link rel="help" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://mozilla.org" title="Mozilla">
+<link rel="match" href="grid-item-non-auto-height-stretch-ref.html">
+<style>
+#grid {
+ display: grid;
+ width: 100px;
+ height: 100px;
+ grid-template: 100% / 100%;
+ background: green;
+}
+#item {
+ height: max-content;
+ background: red;
+}
+</style>
+<div id="grid">
+ <div id="item"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-002.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-002.html
new file mode 100644
index 00000000000..9b2757f4d84
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-002.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<title>Grid items only stretch if block-size computes to auto</title>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4525">
+<link rel="help" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://mozilla.org" title="Mozilla">
+<link rel="match" href="grid-item-non-auto-height-stretch-ref.html">
+<style>
+#grid {
+ writing-mode: vertical-lr;
+ display: grid;
+ width: 100px;
+ height: 100px;
+ grid-template: 100% / 100%;
+ background: green;
+}
+#item {
+ width: max-content;
+ background: red;
+}
+</style>
+<div id="grid">
+ <div id="item"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-003.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-003.html
new file mode 100644
index 00000000000..acd382b4f9f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-003.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<title>Grid items only stretch if block-size computes to auto</title>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4525">
+<link rel="help" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://mozilla.org" title="Mozilla">
+<link rel="match" href="grid-item-non-auto-height-stretch-ref.html">
+<style>
+#grid {
+ display: grid;
+ width: 100px;
+ height: 100px;
+ grid-template: 100% / 100%;
+ background: green;
+}
+#item {
+ height: min-content;
+ background: red;
+}
+</style>
+<div id="grid">
+ <div id="item"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-004.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-004.html
new file mode 100644
index 00000000000..b68cf7546d7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-004.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<title>Grid items only stretch if block-size computes to auto</title>
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4525">
+<link rel="help" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://mozilla.org" title="Mozilla">
+<link rel="match" href="grid-item-non-auto-height-stretch-ref.html">
+<style>
+#grid {
+ writing-mode: vertical-lr;
+ display: grid;
+ width: 100px;
+ height: 100px;
+ grid-template: 100% / 100%;
+ background: green;
+}
+#item {
+ width: min-content;
+ background: red;
+}
+</style>
+<div id="grid">
+ <div id="item"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-ref.html b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-ref.html
new file mode 100644
index 00000000000..1249dbaa8c8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/grid-item-non-auto-height-stretch-ref.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<title>CSS test reference</title>
+<style>
+#ref {
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+<div id="ref"></div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html
index 69e071c758b..1354260d50b 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/abs-pos-002-ref.html
@@ -61,7 +61,7 @@ x {
<div class="grid">
<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i>
<div class="subgrid">
- <x style="grid-column:3; right:33px">x</x>
+ <x style="grid-column:3; right:27px">x</x>
</div>
</div>
@@ -117,7 +117,7 @@ x {
<div class="grid">
<i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i>
<div class="subgrid hr">
- <x style="grid-column:auto/1; left:-33px">x</x>
+ <x style="grid-column:auto/1; left:-27px">x</x>
</div>
</div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html
new file mode 100644
index 00000000000..30f4bf7a969
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001-ref.html
@@ -0,0 +1,233 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: subgrid margin/border/padding that overflow the edge track</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+<style>
+html,body {
+ color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid: auto / 7px 30px 10px 20px 5px;
+ justify-content: space-around;
+ align-content: start;
+ border: 3px solid;
+ width: 80px;
+}
+.rtl { direction: rtl; }
+
+.subgrid {
+ display: grid;
+ min-width: 0;
+ min-height: 30px;
+ background: pink;
+ border:1px solid;
+ margin: 0 4px 0 3px;
+ position: relative;
+ justify-content: space-between;
+}
+.c1 { width: 30px; grid-column: 2 / span 1; grid: auto / 26px; }
+.rtl > .c1 { grid: auto / 25px; }
+.c1.plr { padding-right: 100px; }
+.rtl > .c1.plr { padding: 0 0 0 100px; }
+
+.c2 { width: 33px; grid-column: 2 / span 2; grid: auto / 26px 5px; }
+.rtl > .c2 { grid: auto / 25px 6px; }
+.c2.plr { padding-right: 97px; }
+.rtl > .c2.plr { padding: 0 0 0 97px; }
+
+.c3 { width: 55px; grid-column: 2 / span 3; grid: auto / 26px 10px 15px; }
+.rtl > .c3 { grid: auto / 25px 10px 16px; }
+.c3.plr { padding-right: 75px; }
+.rtl > .c3.plr { padding: 0 0 0 75px; }
+
+y {
+ background: blue;
+ height: 10px;
+}
+y:nth-of-type(1) { grid-column: 2; }
+y:nth-of-type(2) { grid-column: 4; }
+
+x { background: silver; }
+x:nth-of-type(2) { background: purple; }
+x:nth-of-type(3) { background: magenta; }
+
+a {
+ position: absolute;
+ grid-column-start: 1;
+ inset: 0;
+ top: 3px;
+ border-top: 2px solid grey;
+}
+a:nth-of-type(2) {
+ grid-column-start: 2;
+ top: 6px;
+}
+a:nth-of-type(3) {
+ grid-column-start: 3;
+ top: 9px;
+}
+
+b {
+ position: absolute;
+ grid-column-end: 1;
+ inset: 0;
+ top: 12px;
+ border-top: 2px solid grey;
+}
+b:nth-of-type(2) {
+ grid-column-end: 2;
+ top: 15px;
+}
+b:nth-of-type(3) {
+ grid-column-end: 3;
+ top: 18px;
+}
+
+.f { float:left; margin-left:80px; }
+.z { height:0; }
+.s2 { grid-column:2; }
+.gl { left: -2px; }
+.e2 { grid-column-end:2; }
+.gr { right: -2px; }
+</style>
+</head>
+<body>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 pl"><x class="z"></x><a class="s2 gl"></a><b class="e2"></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 plr"><x class="z"></x><a class="s2 gl"></a><b class="e2"></b><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 pr"><x class="z"></x><a class="s2 gr"></a><b class="e2"></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 plr"><x class="z"></x><a class="s2 gr"></a><b class="e2"></b><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div>
+</div>
+
+</div>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 pr"><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 pl"><x class="z"></x><a class="s2 gl"></a><b class="e2"></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 plr"><a class="s2 gl"></a><b class="e2"></b><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 pr"><x class="z"></x><a class="s2 gr"></a><b class="e2"></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 pl"><x></x><a></a><b></b><x class="z"></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 plr"><a class="s2 gr"></a><b class="e2"></b><a></a><b></b></div>
+</div>
+
+</div>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 pr"><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 pl"><a class="s2"></a><b class="e2"></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 plr"><a class="s2"></a><b class="e2"></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 pr"><a class="s2"></a><b class="e2"></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 pl"><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 plr"><a class="s2"></a><b class="e2"></b></div>
+</div>
+
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html
new file mode 100644
index 00000000000..a9aec76a9f0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-001.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: subgrid margin/border/padding that overflow the edge track</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2">
+ <link rel="match" href="subgrid-mbp-overflow-001-ref.html">
+<style>
+html,body {
+ color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid: auto / 7px 30px 10px 20px 5px;
+ justify-content: space-around;
+ align-content: start;
+ border: 3px solid;
+ width: 80px;
+}
+.rtl { direction: rtl; }
+
+.subgrid {
+ display: grid;
+ grid: auto / subgrid;
+ min-width: 0;
+ min-height: 30px;
+ background: pink;
+ border:1px solid;
+ margin: 0 4px 0 3px;
+ position: relative;
+}
+.c1 { grid-column: 2 / span 1; }
+.c2 { grid-column: 2 / span 2; }
+.c3 { grid-column: 2 / span 3; }
+.pr { padding-right: 30px; }
+.pl { padding-left: 30px; }
+.plr { padding: 0 50px 0 80px; }
+
+y {
+ background: blue;
+ height: 10px;
+}
+y:nth-of-type(1) { grid-column: 2; }
+y:nth-of-type(2) { grid-column: 4; }
+
+x { background: silver; }
+x:nth-of-type(2) { background: purple; }
+x:nth-of-type(3) { background: magenta; }
+
+a {
+ position: absolute;
+ grid-column-start: 1;
+ inset: 0;
+ top: 3px;
+ border-top: 2px solid grey;
+}
+a:nth-of-type(2) {
+ grid-column-start: 2;
+ top: 6px;
+}
+a:nth-of-type(3) {
+ grid-column-start: 3;
+ top: 9px;
+}
+
+b {
+ position: absolute;
+ grid-column-end: 1;
+ inset: 0;
+ top: 12px;
+ border-top: 2px solid grey;
+}
+b:nth-of-type(2) {
+ grid-column-end: 2;
+ top: 15px;
+}
+b:nth-of-type(3) {
+ grid-column-end: 3;
+ top: 18px;
+}
+
+.f { float:left; margin-left:80px; }
+</style>
+</head>
+<body>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 plr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 plr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 pr"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 pl"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 plr"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 pr"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 pl"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 plr"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 pr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 pl"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 plr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 pr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 pl"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 plr"><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-002.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-002.html
new file mode 100644
index 00000000000..1bd1fa67bfc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-002.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: orthogonal writing-mode subgrid margin/border/padding that overflow the edge track</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2">
+ <link rel="match" href="subgrid-mbp-overflow-001-ref.html">
+<style>
+html,body {
+ color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid: auto / 7px 30px 10px 20px 5px;
+ justify-content: space-around;
+ align-content: start;
+ border: 3px solid;
+ width: 80px;
+}
+.rtl { direction: rtl; }
+
+.subgrid {
+ display: grid;
+ grid: subgrid / auto;
+ min-width: 0;
+ min-height: 30px;
+ background: pink;
+ border:1px solid;
+ margin: 0 4px 0 3px;
+ position: relative;
+ writing-mode: vertical-lr;
+}
+.rtl > .subgrid { writing-mode: vertical-rl; }
+.c1 { grid-column: 2 / span 1; }
+.c2 { grid-column: 2 / span 2; }
+.c3 { grid-column: 2 / span 3; }
+.pr { padding-right: 30px; }
+.pl { padding-left: 30px; }
+.plr { padding: 0 50px 0 80px; }
+
+y {
+ background: blue;
+ height: 10px;
+}
+y:nth-of-type(1) { grid-column: 2; }
+y:nth-of-type(2) { grid-column: 4; }
+
+x { background: silver; }
+x:nth-of-type(2) { background: purple; }
+x:nth-of-type(3) { background: magenta; }
+
+a {
+ position: absolute;
+ grid-row-start: 1;
+ inset: 0;
+ top: 3px;
+ border-top: 2px solid grey;
+}
+a:nth-of-type(2) {
+ grid-row-start: 2;
+ top: 6px;
+}
+a:nth-of-type(3) {
+ grid-row-start: 3;
+ top: 9px;
+}
+
+b {
+ position: absolute;
+ grid-row-end: 1;
+ inset: 0;
+ top: 12px;
+ border-top: 2px solid grey;
+}
+b:nth-of-type(2) {
+ grid-row-end: 2;
+ top: 15px;
+}
+b:nth-of-type(3) {
+ grid-row-end: 3;
+ top: 18px;
+}
+
+.f { float:left; margin-left:80px; }
+</style>
+</head>
+<body>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c3 plr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c3 plr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 pr"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 pl"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c2 plr"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 pr"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 pl"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c2 plr"><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+<div class=f>
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 pr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 pl"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid">
+ <y></y><y></y>
+ <div class="subgrid c1 plr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 pr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 pl"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid c1 plr"><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html
new file mode 100644
index 00000000000..d771427f6e5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003-ref.html
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>Reference: subgrid margin/border/padding that overflow the edge track</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+<style>
+html,body {
+ color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid: auto / 7px 30px 10px 20px 5px;
+ justify-content: space-around;
+ align-content: start;
+ border: 3px solid;
+ width: 80px;
+}
+.rtl { direction: rtl; }
+.ltr { direction: ltr; }
+
+.subgrid {
+ display: grid;
+ justify-content: space-between;
+ justify-self: self-start;
+ min-width: 0;
+ min-height: 30px;
+ background: pink;
+ border:1px solid;
+ margin: 0 4px 0 3px;
+ position: relative;
+}
+.c1 { grid-column: 4 / span 1; }
+.c3 { grid-column: 2 / span 3; }
+
+y {
+ background: blue;
+ height: 10px;
+}
+y:nth-of-type(1) { grid-column: 2; }
+y:nth-of-type(2) { grid-column: 4; }
+
+x { background: silver; border-inline-start: 2px solid lime; }
+x:nth-of-type(2) { background: purple; }
+x:nth-of-type(3) { background: magenta; }
+
+a {
+ position: absolute;
+ grid-column-start: 1;
+ inset: 0;
+ top: 3px;
+ border-top: 2px solid grey;
+}
+a:nth-of-type(2) {
+ grid-column-start: 2;
+ top: 6px;
+}
+a:nth-of-type(3) {
+ grid-column-start: 3;
+ top: 9px;
+}
+
+b {
+ position: absolute;
+ grid-column-end: 1;
+ inset: 0;
+ top: 12px;
+ border-top: 2px solid grey;
+}
+b:nth-of-type(2) {
+ grid-column-end: 2;
+ top: 15px;
+}
+b:nth-of-type(3) {
+ grid-column-end: 3;
+ top: 18px;
+}
+
+.f { float:left; margin-left:10px; }
+
+.c1 { width: 30px; }
+.ltr.c1.pl > x, .rtl.c1.pr > x {
+ padding-inline-start: 15px;
+ border-inline: none;
+ border-inline-end: 2px solid lime;
+ background: pink;
+}
+.ltr.c1.pl > x { padding-inline-start: 16px; }
+.rtl.c1.pr > a { width: 15px; margin-inline-start: 15px; }
+.ltr.c1.pl > a { width: 14px; margin-inline-start: 16px;}
+.rtl.c1.pr > b { width: 15px; }
+.ltr.c1.pl > b { width: 16px; }
+
+.c3 { width: 55px; grid: auto / 15px 10px 26px; }
+.rtl.c3.pl { padding-inline-end: 4px; }
+.ltr.c3.pr { padding-inline-end: 5px; }
+.ltr.c3 { grid: auto / 16px 10px 25px; }
+.rtl.c3.pr > a:nth-of-type(1) { width: 40px; right: 15px; }
+.ltr.c3.pl > a:nth-of-type(1) { width: 39px; left: 16px; }
+.rtl.c3.pr > b:nth-of-type(1),
+.rtl.c3.pr > b:nth-of-type(2){ width: 15px; }
+.ltr.c3.pl > b:nth-of-type(1),
+.ltr.c3.pl > b:nth-of-type(2){ width: 16px; }
+
+x.zero { background: pink; }
+</style>
+</head>
+<body>
+
+<div class=f>
+<div class="grid ltr">
+ <y></y><y></y>
+ <div class="subgrid rtl c3 pr"><x class="zero" style="margin-right:15px"></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid ltr">
+ <y></y><y></y>
+ <div class="subgrid rtl c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x class="zero"></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid ltr c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x class="zero"></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid ltr c3 pl"><x class="zero" style="margin-left:16px"></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+<div class=f>
+<div class="grid ltr">
+ <y></y><y></y>
+ <div class="subgrid rtl c1 pr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid ltr">
+ <y></y><y></y>
+ <div class="subgrid rtl c1 pl"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid ltr c1 pr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid ltr c1 pl"><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003.html b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003.html
new file mode 100644
index 00000000000..45afcb56cbd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/subgrid/subgrid-mbp-overflow-003.html
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html><head>
+ <meta charset="utf-8">
+ <title>CSS Grid Test: subgrid margin/border/padding that overflow the edge track</title>
+ <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-grid-2">
+ <link rel="match" href="subgrid-mbp-overflow-003-ref.html">
+<style>
+html,body {
+ color:black; background-color:white; font:16px/1 monospace; margin:0; padding:0;
+}
+
+.grid {
+ display: inline-grid;
+ grid: auto / 7px 30px 10px 20px 5px;
+ justify-content: space-around;
+ align-content: start;
+ border: 3px solid;
+ width: 80px;
+}
+.rtl { direction: rtl; }
+.ltr { direction: ltr; }
+
+.subgrid {
+ display: grid;
+ grid: auto / subgrid;
+ justify-self: self-start;
+ min-width: 0;
+ min-height: 30px;
+ background: pink;
+ border:1px solid;
+ margin: 0 4px 0 3px;
+ position: relative;
+}
+.c1 { grid-column: 4 / span 1; }
+.c3 { grid-column: 2 / span 3; }
+.pr { padding-right: 30px; }
+.pl { padding-left: 30px; }
+
+y {
+ background: blue;
+ height: 10px;
+}
+y:nth-of-type(1) { grid-column: 2; }
+y:nth-of-type(2) { grid-column: 4; }
+
+x { background: silver; border-inline-start: 2px solid lime; }
+x:nth-of-type(2) { background: purple; }
+x:nth-of-type(3) { background: magenta; }
+
+a {
+ position: absolute;
+ grid-column-start: 1;
+ inset: 0;
+ top: 3px;
+ border-top: 2px solid grey;
+}
+a:nth-of-type(2) {
+ grid-column-start: 2;
+ top: 6px;
+}
+a:nth-of-type(3) {
+ grid-column-start: 3;
+ top: 9px;
+}
+
+b {
+ position: absolute;
+ grid-column-end: 1;
+ inset: 0;
+ top: 12px;
+ border-top: 2px solid grey;
+}
+b:nth-of-type(2) {
+ grid-column-end: 2;
+ top: 15px;
+}
+b:nth-of-type(3) {
+ grid-column-end: 3;
+ top: 18px;
+}
+
+.f { float:left; margin-left:10px; }
+</style>
+</head>
+<body>
+
+<div class=f>
+<div class="grid ltr">
+ <y></y><y></y>
+ <div class="subgrid rtl c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid ltr">
+ <y></y><y></y>
+ <div class="subgrid rtl c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid ltr c3 pr"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid ltr c3 pl"><x></x><a></a><b></b><x></x><a></a><b></b><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+<div class=f>
+<div class="grid ltr">
+ <y></y><y></y>
+ <div class="subgrid rtl c1 pr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid ltr">
+ <y></y><y></y>
+ <div class="subgrid rtl c1 pl"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid ltr c1 pr"><x></x><a></a><b></b></div>
+</div>
+
+<br>
+
+<div class="grid rtl">
+ <y></y><y></y>
+ <div class="subgrid ltr c1 pl"><x></x><a></a><b></b></div>
+</div>
+
+</div>
+
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-preserve-3d-1-ref.html
index 06f7257c50a..06f7257c50a 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-preserve-3d-1-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-preserve-3d-1-ref.html
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateX-3-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateX-3-ref.html
index aeb72f5df25..aeb72f5df25 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateX-3-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateX-3-ref.html
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateY-1-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateY-1-ref.html
index 9c3419e6f43..9c3419e6f43 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/reference/transofrmed-rotateY-1-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/reference/transformed-rotateY-1-ref.html
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-preserve-3d-1.html b/tests/wpt/web-platform-tests/css/css-transforms/transformed-preserve-3d-1.html
index b7e1f905bb8..14ab46e29a1 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-preserve-3d-1.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/transformed-preserve-3d-1.html
@@ -4,7 +4,7 @@
<title>CSS Transforms API Test: transform preserve-3d</title>
<link rel="author" title="loveky" href="mailto:ylzcylx@gmail.com">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
- <link rel="match" href="reference/transofrmed-preserve-3d-1-ref.html">
+ <link rel="match" href="reference/transformed-preserve-3d-1-ref.html">
<meta name="assert" content="The transformed div should establishe a 3D rendering context">
<style>
div {
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateX-3.html b/tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateX-3.html
index 58ab80e807a..2517eac8e40 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateX-3.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateX-3.html
@@ -4,7 +4,7 @@
<title>CSS Transforms API Test: transform rotateX</title>
<link rel="author" title="loveky" href="mailto:ylzcylx@gmail.com">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
- <link rel="match" href="reference/transofrmed-rotateX-3-ref.html">
+ <link rel="match" href="reference/transformed-rotateX-3-ref.html">
<meta name="assert" content="The transformed div should rotateX by 180 degrees">
<style>
div {
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateY-1.html b/tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateY-1.html
index 86581bc447b..e1e9b2969d8 100644
--- a/tests/wpt/web-platform-tests/css/css-transforms/transofrmed-rotateY-1.html
+++ b/tests/wpt/web-platform-tests/css/css-transforms/transformed-rotateY-1.html
@@ -4,7 +4,7 @@
<title>CSS Transforms API Test: transform rotateY</title>
<link rel="author" title="loveky" href="mailto:ylzcylx@gmail.com">
<link rel="help" href="http://www.w3.org/TR/css-transforms-1/#transform-property">
- <link rel="match" href="reference/transofrmed-rotateY-1-ref.html">
+ <link rel="match" href="reference/transformed-rotateY-1-ref.html">
<meta name="assert" content="The transformed div should rotate 90 degrees">
<style>
div {
diff --git a/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html
index 1795bcf2ba4..3f8b7a72bdc 100644
--- a/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html
+++ b/tests/wpt/web-platform-tests/css/cssom/getComputedStyle-pseudo.html
@@ -139,6 +139,6 @@ test(function() {
test(function() {
var div = document.getElementById('test');
assert_throws_js(TypeError, () => getComputedStyle(div, "totallynotapseudo"),
- "getComputedStyle with an unknown pseudo-element throws");
+ "getComputedStyle with an unknown pseudo-element throws");
}, "Unknown pseudo-elements throw");
</script>
diff --git a/tests/wpt/web-platform-tests/css/support/grid.css b/tests/wpt/web-platform-tests/css/support/grid.css
index 5cfb15e7ef0..4007ebba436 100644
--- a/tests/wpt/web-platform-tests/css/support/grid.css
+++ b/tests/wpt/web-platform-tests/css/support/grid.css
@@ -86,6 +86,12 @@
grid-row: 2;
}
+.thirdRowFirstColumn {
+ background-color: green;
+ grid-column: 1;
+ grid-row: 3;
+}
+
.thirdRowSecondColumn {
background-color: red;
grid-column: 2;
diff --git a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html
index 9331869f8fe..43ea55a67e0 100644
--- a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html
+++ b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-attachInternals.html
@@ -15,13 +15,13 @@ test(() => {
assert_true(element.attachInternals() instanceof ElementInternals,
'New - 1st call');
assert_throws_dom('NotSupportedError', () => { element.attachInternals(); },
- 'New - 2nd call');
+ 'New - 2nd call');
element = document.createElement('my-element1');
assert_true(element.attachInternals() instanceof ElementInternals,
'createElement - 1st call');
assert_throws_dom('NotSupportedError', () => { element.attachInternals(); },
- 'createElement - 2nd call');
+ 'createElement - 2nd call');
container.innerHTML = '<my-element1></my-element1>';
assert_true(container.firstChild.attachInternals() instanceof ElementInternals,
diff --git a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html
index 8e33137d4ff..b52c8414709 100644
--- a/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html
+++ b/tests/wpt/web-platform-tests/custom-elements/HTMLElement-constructor.html
@@ -179,8 +179,8 @@ test(function() {
// reset the counter.
getCount = 0;
assert_throws_js(TypeError,
- function () { new countingProxy() },
- "Should not be able to construct an HTMLElement named 'button'");
+ function () { new countingProxy() },
+ "Should not be able to construct an HTMLElement named 'button'");
assert_equals(getCount, 0, "Should never have gotten .prototype");
}, 'HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly');
@@ -201,8 +201,8 @@ test(function() {
// reset the counter.
getCount = 0;
assert_throws_js(TypeError,
- function () { Reflect.construct(HTMLElement, [], countingProxy) },
- "Should not be able to construct an HTMLElement named 'button'");
+ function () { Reflect.construct(HTMLElement, [], countingProxy) },
+ "Should not be able to construct an HTMLElement named 'button'");
assert_equals(getCount, 0, "Should never have gotten .prototype");
}, 'HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect');
@@ -220,8 +220,8 @@ test(function() {
// Purposefully don't register it.
assert_throws_js(TypeError,
- function () { new countingProxy() },
- "Should not be able to construct an HTMLElement named 'button'");
+ function () { new countingProxy() },
+ "Should not be able to construct an HTMLElement named 'button'");
assert_equals(getCount, 0, "Should never have gotten .prototype");
}, 'HTMLElement constructor must not get .prototype until it finishes its registration sanity checks, calling proxy constructor directly');
@@ -239,8 +239,8 @@ test(function() {
// Purposefully don't register it.
assert_throws_js(TypeError,
- function () { Reflect.construct(HTMLElement, [], countingProxy) },
- "Should not be able to construct an HTMLElement named 'button'");
+ function () { Reflect.construct(HTMLElement, [], countingProxy) },
+ "Should not be able to construct an HTMLElement named 'button'");
assert_equals(getCount, 0, "Should never have gotten .prototype");
}, 'HTMLElement constructor must not get .prototype until it finishes its registration sanity checks, calling via Reflect');
</script>
diff --git a/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html b/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html
index b95d7ade0bb..d2eb022d854 100644
--- a/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html
+++ b/tests/wpt/web-platform-tests/custom-elements/htmlconstructor/newtarget.html
@@ -204,8 +204,8 @@ test_with_window(w => {
// reset the counter.
getCount = 0;
assert_throws_js(TypeError,
- function () { new countingProxy() },
- "Should not be able to construct an HTMLParagraphElement not named 'p'");
+ function () { new countingProxy() },
+ "Should not be able to construct an HTMLParagraphElement not named 'p'");
assert_equals(getCount, 0, "Should never have gotten .prototype");
}, 'HTMLParagraphElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly');
@@ -225,8 +225,8 @@ test_with_window(w => {
// reset the counter.
getCount = 0;
assert_throws_js(TypeError,
- function () { Reflect.construct(HTMLParagraphElement, [], countingProxy) },
- "Should not be able to construct an HTMLParagraphElement not named 'p'");
+ function () { Reflect.construct(HTMLParagraphElement, [], countingProxy) },
+ "Should not be able to construct an HTMLParagraphElement not named 'p'");
assert_equals(getCount, 0, "Should never have gotten .prototype");
}, 'HTMLParagraphElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect');
</script>
diff --git a/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html b/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html
new file mode 100644
index 00000000000..c2611a5dcf2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Test advertised required document policy</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script> </head>
+ <body>
+ <h1>Test advertised required document policy</h1>
+<script>
+// The top-level document has a document policy, as well as a required document
+// policy (for subframes) which is stricter. This test should load (the required
+// policy should not block this page,) but the requirements should be applied to
+// nested content.
+
+callbacks = {};
+
+window.addEventListener('message', ev => {
+ var id = ev.data.id;
+ if (id && callbacks[id]) {
+ callbacks[id](ev.data.requiredPolicy || null);
+ }
+});
+
+async_test(t => {
+ var iframe = document.createElement('iframe');
+ iframe.src = "/document-policy/echo-policy.py?id=1";
+ callbacks["1"] = t.step_func_done(result => {
+ assert_equals(result, "unoptimized-lossless-images;bpp=1.0");
+ });
+ document.body.appendChild(iframe);
+}, "Child frame with no explicit policy should have the same required policy as its parent.");
+
+async_test(t => {
+ var iframe = document.createElement('iframe');
+ iframe.src = "/document-policy/echo-policy.py?id=2";
+ iframe.policy = "unoptimized-lossless-images;bpp=4";
+ callbacks["2"] = t.step_func_done(result => {
+ assert_equals(result, "unoptimized-lossless-images;bpp=1.0");
+ });
+ document.body.appendChild(iframe);
+}, "Child frame with a less strict required policy should have the stricter value from the parent's policy applied.");
+
+async_test(t => {
+ var iframe = document.createElement('iframe');
+ iframe.src = "/document-policy/echo-policy.py?id=3";
+ iframe.policy = "unoptimized-lossless-images;bpp=0.9";
+ callbacks["3"] = t.step_func_done(result => {
+ assert_equals(result, "unoptimized-lossless-images;bpp=0.9");
+ });
+ document.body.appendChild(iframe);
+}, "Child frame may have a stricter policy than the parent.");
+
+async_test(t => {
+ var iframe = document.createElement('iframe');
+ iframe.src = "/document-policy/echo-policy.py?id=4";
+ iframe.policy = "no-font-display-late-swap";
+ callbacks["4"] = t.step_func_done(result => {
+ assert_equals(result, "no-font-display-late-swap, unoptimized-lossless-images;bpp=1.0");
+ });
+ document.body.appendChild(iframe);
+}, "Any unrelated policy directives should combine with the parent's required policy.");
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html.headers b/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html.headers
new file mode 100644
index 00000000000..0dcb2328ae7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/document-policy/required-policy/separate-document-policies.html.headers
@@ -0,0 +1,2 @@
+Document-Policy: unoptimized-lossless-images;bpp=1.1
+Require-Document-Policy: unoptimized-lossless-images;bpp=1.0
diff --git a/tests/wpt/web-platform-tests/dom/events/Event-constructors.html b/tests/wpt/web-platform-tests/dom/events/Event-constructors.html
index 72347efd532..87d68d5ef52 100644
--- a/tests/wpt/web-platform-tests/dom/events/Event-constructors.html
+++ b/tests/wpt/web-platform-tests/dom/events/Event-constructors.html
@@ -47,7 +47,7 @@ test(function() {
})
test(function() {
assert_throws_js(TypeError, function() { Event("test") },
- 'Calling Event constructor without "new" must throw');
+ 'Calling Event constructor without "new" must throw');
})
test(function() {
var ev = new Event("I am an event", { bubbles: true, cancelable: false})
diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html
index 653108ca11a..c0126b4f8a8 100644
--- a/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html
+++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createElement.html
@@ -147,7 +147,7 @@ invalid.forEach(function(arg) {
testObj.step(function() {
var doc = getWin(desc).document;
assert_throws_dom("InvalidCharacterError",
- function() { doc.createElement(arg) })
+ function() { doc.createElement(arg) })
});
testObj.done();
});
diff --git a/tests/wpt/web-platform-tests/dom/nodes/attributes.html b/tests/wpt/web-platform-tests/dom/nodes/attributes.html
index 65bea67173d..c6db7eb8aa4 100644
--- a/tests/wpt/web-platform-tests/dom/nodes/attributes.html
+++ b/tests/wpt/web-platform-tests/dom/nodes/attributes.html
@@ -232,7 +232,7 @@ test(function() {
var el = document.createElement("foo")
for (var i = 0, il = invalid_names.length; i < il; ++i) {
assert_throws_dom("INVALID_CHARACTER_ERR",
- function() { el.setAttributeNS("a", invalid_names[i], "fail") })
+ function() { el.setAttributeNS("a", invalid_names[i], "fail") })
}
}, "When qualifiedName does not match the Name production, an " +
"INVALID_CHARACTER_ERR exception is to be thrown. (setAttributeNS)")
@@ -253,8 +253,8 @@ test(function() {
var el = document.createElement("foo")
for (var i = 0, il = invalid_qnames.length; i < il; ++i) {
assert_throws_dom("INVALID_CHARACTER_ERR",
- function() { el.setAttributeNS("a", invalid_qnames[i], "fail") },
- "Expected exception for " + invalid_qnames[i] + ".")
+ function() { el.setAttributeNS("a", invalid_qnames[i], "fail") },
+ "Expected exception for " + invalid_qnames[i] + ".")
}
}, "When qualifiedName does not match the QName production, an " +
"INVALID_CHARACTER_ERR exception is to be thrown.")
@@ -272,16 +272,16 @@ test(function() {
test(function() {
var el = document.createElement("foo")
assert_throws_dom("NAMESPACE_ERR",
- function() { el.setAttributeNS("", "aa:bb", "fail") })
+ function() { el.setAttributeNS("", "aa:bb", "fail") })
assert_throws_dom("NAMESPACE_ERR",
- function() { el.setAttributeNS(null, "aa:bb", "fail") })
+ function() { el.setAttributeNS(null, "aa:bb", "fail") })
}, "A namespace is required to use a prefix.")
// Step 5
test(function() {
var el = document.createElement("foo")
assert_throws_dom("NAMESPACE_ERR",
- function() { el.setAttributeNS("a", "xml:bb", "fail") })
+ function() { el.setAttributeNS("a", "xml:bb", "fail") })
}, "The xml prefix should not be allowed for arbitrary namespaces")
test(function() {
var el = document.createElement("foo")
@@ -294,12 +294,12 @@ test(function() {
test(function() {
var el = document.createElement("foo")
assert_throws_dom("NAMESPACE_ERR",
- function() { el.setAttributeNS("a", "xmlns:bb", "fail") })
+ function() { el.setAttributeNS("a", "xmlns:bb", "fail") })
}, "The xmlns prefix should not be allowed for arbitrary namespaces")
test(function() {
var el = document.createElement("foo")
assert_throws_dom("NAMESPACE_ERR",
- function() { el.setAttributeNS("a", "xmlns", "fail") })
+ function() { el.setAttributeNS("a", "xmlns", "fail") })
}, "The xmlns qualified name should not be allowed for arbitrary namespaces")
test(function() {
var el = document.createElement("foo")
@@ -312,9 +312,9 @@ test(function() {
test(function() {
var el = document.createElement("foo")
assert_throws_dom("NAMESPACE_ERR",
- function() { el.setAttributeNS(XMLNS, "a:xmlns", "fail") })
+ function() { el.setAttributeNS(XMLNS, "a:xmlns", "fail") })
assert_throws_dom("NAMESPACE_ERR",
- function() { el.setAttributeNS(XMLNS, "b:foo", "fail") })
+ function() { el.setAttributeNS(XMLNS, "b:foo", "fail") })
}, "The XMLNS namespace should require xmlns as prefix or qualified name")
test(function() {
var el = document.createElement("foo")
diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js
index 3fe442bf133..6552a91c6e2 100644
--- a/tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js
+++ b/tests/wpt/web-platform-tests/encoding/streams/decode-attributes.any.js
@@ -47,7 +47,7 @@ for (const trueValue of [true, 1, {}, [], 'yes']) {
test(() => {
assert_throws_js(RangeError, () => new TextDecoderStream(''),
- 'the constructor should throw');
+ 'the constructor should throw');
}, 'constructing with an invalid encoding should throw');
test(() => {
@@ -58,14 +58,14 @@ test(() => {
test(() => {
assert_throws_js(Error,
- () => new TextDecoderStream('utf-8', {
- get fatal() { throw new Error(); }
- }), 'the constructor should throw');
+ () => new TextDecoderStream('utf-8', {
+ get fatal() { throw new Error(); }
+ }), 'the constructor should throw');
}, 'a throwing fatal member should cause the constructor to throw');
test(() => {
assert_throws_js(Error,
- () => new TextDecoderStream('utf-8', {
- get ignoreBOM() { throw new Error(); }
- }), 'the constructor should throw');
+ () => new TextDecoderStream('utf-8', {
+ get ignoreBOM() { throw new Error(); }
+ }), 'the constructor should throw');
}, 'a throwing ignoreBOM member should cause the constructor to throw');
diff --git a/tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js b/tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js
index 5ee4b65ebe3..f9ccb2dfa76 100644
--- a/tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js
+++ b/tests/wpt/web-platform-tests/encoding/textdecoder-fatal.any.js
@@ -72,8 +72,8 @@ test(() => {
'♥',
'decode() should decode full sequence');
assert_throws_js(TypeError,
- () => decoder.decode(new DataView(bytes.buffer, 0, 2)),
- 'decode() should throw on incomplete sequence');
+ () => decoder.decode(new DataView(bytes.buffer, 0, 2)),
+ 'decode() should throw on incomplete sequence');
assert_equals(decoder.decode(new DataView(bytes.buffer, 0, 3)),
'♥',
'decode() should not throw on subsequent call');
diff --git a/tests/wpt/web-platform-tests/event-timing/buffered-flag.html b/tests/wpt/web-platform-tests/event-timing/buffered-flag.html
index b9c63ffd8fd..dc70ff253ff 100644
--- a/tests/wpt/web-platform-tests/event-timing/buffered-flag.html
+++ b/tests/wpt/web-platform-tests/event-timing/buffered-flag.html
@@ -12,9 +12,7 @@
let firstInputSeen = false;
let eventSeen = false;
async_test(t => {
- if (!window.PerformanceEventTiming)
- assert_unreached("PerformanceEventTiming is not supported");
-
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
const validateEntry = t.step_func(entry => {
if (entry.entryType === 'first-input')
firstInputSeen = true;
diff --git a/tests/wpt/web-platform-tests/event-timing/click-timing.html b/tests/wpt/web-platform-tests/event-timing/click-timing.html
index afe53bfc23c..376372a3f11 100644
--- a/tests/wpt/web-platform-tests/event-timing/click-timing.html
+++ b/tests/wpt/web-platform-tests/event-timing/click-timing.html
@@ -21,9 +21,7 @@
let timeAfterSecondClick;
let observedEntries = [];
async_test(function(t) {
- if (!window.PerformanceEventTiming)
- assert_unreached("PerformanceEventTiming is not supported");
-
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
new PerformanceObserver(t.step_func(entryList => {
observedEntries = observedEntries.concat(entryList.getEntries().filter(
entry => entry.name === 'mousedown'));
diff --git a/tests/wpt/web-platform-tests/event-timing/crossiframe.html b/tests/wpt/web-platform-tests/event-timing/crossiframe.html
index f24e2c21edb..55e2becfcbc 100644
--- a/tests/wpt/web-platform-tests/event-timing/crossiframe.html
+++ b/tests/wpt/web-platform-tests/event-timing/crossiframe.html
@@ -47,10 +47,8 @@
clickTimeMin.");
}
- async_test(async function(t) {
- assert_precondition(window.PerformanceEventTiming,
- "PerformanceEventTiming is not supported");
-
+ promise_test(async t => {
+ assert_precondition(window.PerformanceEventTiming, "Event Timing is not supported");
clickTimeMin = performance.now();
let observedEntries = false;
const observerPromise = new Promise(resolve => {
@@ -84,7 +82,6 @@
t.step(() => {
validateChildFrameEntries(childFrameData);
});
- t.done();
}, "Event Timing: entries should only be observable by its own frame.");
</script>
diff --git a/tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html b/tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html
index 48df6ec9fc6..ad71153d40b 100644
--- a/tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html
+++ b/tests/wpt/web-platform-tests/event-timing/only-observe-firstInput.html
@@ -20,9 +20,7 @@
PerformanceObserver should observe one and only one entry.
*/
async_test(function(t) {
- if (!window.PerformanceEventTiming)
- assert_unreached("PerformanceEventTiming is not supported");
-
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
let hasObservedFirstInput = false;
new PerformanceObserver(t.step_func((entryList) => {
assert_false(hasObservedFirstInput);
diff --git a/tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html b/tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html
index c84d4eff6b8..1c2921ca489 100644
--- a/tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html
+++ b/tests/wpt/web-platform-tests/event-timing/programmatic-click-not-observed.html
@@ -18,9 +18,7 @@
delayCalled = true;
}
async_test(function(t) {
- if (!window.PerformanceEventTiming)
- assert_unreached("PerformanceEventTiming is not supported");
-
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
const observer = new PerformanceObserver(t.step_func_done((entryList) => {
const entries = entryList.getEntries().filter(e => e.name === 'mousedown');
// There must only be one click entry: from the clickAndBlockMain() call.
diff --git a/tests/wpt/web-platform-tests/event-timing/retrievability.html b/tests/wpt/web-platform-tests/event-timing/retrievability.html
index cdb47c6a504..d2b6da2439f 100644
--- a/tests/wpt/web-platform-tests/event-timing/retrievability.html
+++ b/tests/wpt/web-platform-tests/event-timing/retrievability.html
@@ -30,9 +30,7 @@
Validate entries
*/
async_test(function(t) {
- if (!window.PerformanceEventTiming) {
- assert_unreached('PerformanceEventTiming is not implemented');
- }
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
new PerformanceObserver(t.step_func_done(() => {
validateEntries();
t.done();
diff --git a/tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html b/tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html
index 5ddd9b5f01b..acff788259f 100644
--- a/tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html
+++ b/tests/wpt/web-platform-tests/event-timing/retrieve-firstInput.html
@@ -12,9 +12,7 @@
<script>
async_test(function(t) {
- if (!window.PerformanceEventTiming)
- assert_unreached("PerformanceEventTiming is not supported");
-
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
function testEntries() {
// First callback is not ensured to have the entry.
if (performance.getEntriesByType('first-input').length === 0) {
diff --git a/tests/wpt/web-platform-tests/event-timing/supported-types.window.js b/tests/wpt/web-platform-tests/event-timing/supported-types.window.js
index 443c2533c2e..5360bdd9e82 100644
--- a/tests/wpt/web-platform-tests/event-timing/supported-types.window.js
+++ b/tests/wpt/web-platform-tests/event-timing/supported-types.window.js
@@ -1,6 +1,7 @@
test(() => {
- if (typeof PerformanceObserver.supportedEntryTypes === "undefined")
- assert_unreached("supportedEntryTypes is not supported.");
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
+ assert_precondition(typeof PerformanceObserver.supportedEntryTypes !== "undefined",
+ 'supportedEntryTypes is not supported');
const types = PerformanceObserver.supportedEntryTypes;
assert_true(types.includes("first-input"),
"There should be 'first-input' in PerformanceObserver.supportedEntryTypes");
diff --git a/tests/wpt/web-platform-tests/event-timing/timingconditions.html b/tests/wpt/web-platform-tests/event-timing/timingconditions.html
index 1fcda21a197..02da2976cee 100644
--- a/tests/wpt/web-platform-tests/event-timing/timingconditions.html
+++ b/tests/wpt/web-platform-tests/event-timing/timingconditions.html
@@ -35,9 +35,7 @@
}
async_test(function(t) {
- if (!window.PerformanceEventTiming)
- assert_unreached("PerformanceEventTiming is not supported");
-
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
new PerformanceObserver(t.step_func_done(entryList => {
const observerCallbackTime = performance.now();
const entries = entryList.getEntries().filter(
diff --git a/tests/wpt/web-platform-tests/event-timing/toJSON.html b/tests/wpt/web-platform-tests/event-timing/toJSON.html
index 05a7ba76319..a11073aa9a0 100644
--- a/tests/wpt/web-platform-tests/event-timing/toJSON.html
+++ b/tests/wpt/web-platform-tests/event-timing/toJSON.html
@@ -10,9 +10,7 @@
<button id='button'>Generate a 'click' event</button>
<script>
async_test(function (t) {
- if (!window.PerformanceEventTiming) {
- assert_unreached("PerformanceEventTiming is not implemented");
- }
+ assert_precondition(window.PerformanceEventTiming, 'Event Timing is not supported.');
const observer = new PerformanceObserver(
t.step_func_done(function(entryList) {
const entry = entryList.getEntries()[0];
diff --git a/tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html b/tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html
index 0a217c3ddb2..c7d8d99a709 100644
--- a/tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html
+++ b/tests/wpt/web-platform-tests/fetch/api/headers/headers-record.html
@@ -257,7 +257,7 @@ test(function() {
// Returning duplicate keys from ownKeys() throws a TypeError.
assert_throws_js(TypeError,
- function() { var h = new Headers(proxy); });
+ function() { var h = new Headers(proxy); });
assert_equals(log.length, 2);
// The first thing is the [[Get]] of Symbol.iterator to figure out whether
@@ -280,7 +280,7 @@ test(function() {
c: "d" };
var proxy = new Proxy(record, loggingHandler);
assert_throws_js(TypeError,
- function() { var h = new Headers(proxy); });
+ function() { var h = new Headers(proxy); });
assert_equals(log.length, 7);
// The first thing is the [[Get]] of Symbol.iterator to figure out whether
diff --git a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js
index 0cb3cb224a1..1843734a3bb 100644
--- a/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js
+++ b/tests/wpt/web-platform-tests/generic-sensor/generic-sensor-tests.js
@@ -487,8 +487,8 @@ function runGenericSensorTests(sensorName,
];
invalidFreqs.map(freq => {
assert_throws_js(TypeError,
- () => { new sensorType({frequency: freq}) },
- `when freq is ${freq}`);
+ () => { new sensorType({frequency: freq}) },
+ `when freq is ${freq}`);
});
}, `${sensorName}: throw 'TypeError' if frequency is invalid.`);
@@ -539,8 +539,8 @@ function runGenericSensorTests(sensorName,
];
invalidRefFrames.map(refFrame => {
assert_throws_js(TypeError,
- () => { new sensorType({referenceFrame: refFrame}) },
- `when refFrame is ${refFrame}`);
+ () => { new sensorType({referenceFrame: refFrame}) },
+ `when refFrame is ${refFrame}`);
});
}, `${sensorName}: throw 'TypeError' if referenceFrame is not one of\
enumeration values.`);
diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html
index 46fc568a0ee..a00f4f5357f 100644
--- a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html
+++ b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html
@@ -223,9 +223,9 @@ addTest(function(win) {
} else {
assert_throws_dom("SecurityError", function() { win[prop]; }, "Should throw when accessing " + String(prop) + " on Window");
assert_throws_dom("SecurityError", function() { Object.getOwnPropertyDescriptor(win, prop); },
- "Should throw when accessing property descriptor for " + prop + " on Window");
+ "Should throw when accessing property descriptor for " + prop + " on Window");
assert_throws_dom("SecurityError", function() { Object.prototype.hasOwnProperty.call(win, prop); },
- "Should throw when invoking hasOwnProperty for " + prop + " on Window");
+ "Should throw when invoking hasOwnProperty for " + prop + " on Window");
}
if (prop != 'location')
assert_throws_dom("SecurityError", function() { win[prop] = undefined; }, "Should throw when writing to " + prop + " on Window");
@@ -246,14 +246,14 @@ addTest(function(win) {
Object.getOwnPropertyDescriptor(win.location, prop); // Shouldn't throw.
assert_true(Object.prototype.hasOwnProperty.call(win.location, prop), "hasOwnProperty for " + prop);
assert_throws_dom("SecurityError", function() { win.location[prop] },
- "Should throw reading href on Location");
+ "Should throw reading href on Location");
}
else {
assert_throws_dom("SecurityError", function() { win.location[prop]; }, "Should throw when accessing " + prop + " on Location");
assert_throws_dom("SecurityError", function() { Object.getOwnPropertyDescriptor(win.location, prop); },
- "Should throw when accessing property descriptor for " + prop + " on Location");
+ "Should throw when accessing property descriptor for " + prop + " on Location");
assert_throws_dom("SecurityError", function() { Object.prototype.hasOwnProperty.call(win.location, prop); },
- "Should throw when invoking hasOwnProperty for " + prop + " on Location");
+ "Should throw when invoking hasOwnProperty for " + prop + " on Location");
assert_throws_dom("SecurityError", function() { win.location[prop] = undefined; }, "Should throw when writing to " + prop + " on Location");
}
}
@@ -279,7 +279,7 @@ addPromiseTest(async function(win, test_obj) {
} else if (!allowedlists.methods.includes(prop)) {
for (let args of methodArgs.get(prop) || [[]]) {
assert_throws_dom("SecurityError", desc.value.bind(otherObj, ...args),
- `Should throw when calling ${objName}.${prop} with cross-origin this object`);
+ `Should throw when calling ${objName}.${prop} with cross-origin this object`);
}
} else {
@@ -294,7 +294,7 @@ addPromiseTest(async function(win, test_obj) {
desc.get.call(otherObj); // Shouldn't throw.
} else {
assert_throws_dom("SecurityError", desc.get.bind(otherObj),
- `Should throw when calling ${objName}.${prop} getter with cross-origin this object`);
+ `Should throw when calling ${objName}.${prop} getter with cross-origin this object`);
}
}
if (desc.set) {
@@ -302,7 +302,7 @@ addPromiseTest(async function(win, test_obj) {
desc.set.call(otherObj, "javascript:undefined"); // Shouldn't throw.
} else {
assert_throws_dom("SecurityError", desc.set.bind(otherObj, "foo"),
- `Should throw when calling ${objName}.${prop} setter with cross-origin this object`);
+ `Should throw when calling ${objName}.${prop} setter with cross-origin this object`);
}
}
}
@@ -376,9 +376,9 @@ addTest(function(win) {
*/
addTest(function(win) {
assert_throws_js(TypeError, function() { Object.preventExtensions(win) },
- "preventExtensions on cross-origin Window should throw");
+ "preventExtensions on cross-origin Window should throw");
assert_throws_js(TypeError, function() { Object.preventExtensions(win.location) },
- "preventExtensions on cross-origin Location should throw");
+ "preventExtensions on cross-origin Location should throw");
}, "[[PreventExtensions]] should throw for cross-origin objects");
/*
diff --git a/tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html b/tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html
index 33f2ed6feff..6e6e4312a03 100644
--- a/tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html
+++ b/tests/wpt/web-platform-tests/html/infrastructure/common-dom-interfaces/collections/domstringlist.html
@@ -37,7 +37,7 @@ dsl_test(['a', 'b', 'c'], (t, dsl) => {
assert_equals(dsl.item(3), null, 'item method out of range');
assert_equals(dsl.item(-1), null, 'item method out of range');
assert_throws_js(TypeError, () => dsl.item(),
- 'item method should throw if called without enough args');
+ 'item method should throw if called without enough args');
}, 'DOMStringList: item() method');
dsl_test(['a', 'b', 'c'], (t, dsl) => {
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html
index 16e64214761..2ae6240acee 100644
--- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-customError.html
@@ -31,7 +31,7 @@ var testElements = [
types: [],
testData: [
{conditions: {message: "My custom error"}, expected: true, name: "[target] The validity.customError must be true if the custom validity error message is not empty"},
- {conditions: {message: ""}, expected: false, name: "[target] The validity.customError must be false i the custom validity error message is empty"}
+ {conditions: {message: ""}, expected: false, name: "[target] The validity.customError must be false if the custom validity error message is empty"}
]
},
{
diff --git a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html b/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html
deleted file mode 100644
index ab200020b4f..00000000000
--- a/tests/wpt/web-platform-tests/html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>summary element: clicking on anchor containing inline element</title>
-<link rel="author" title="Yu Han" href="mailto:yuzhehan@chromium.org">
-<link rel="help" href="https://html.spec.whatwg.org/C/#the-summary-element">
-<link rel="help" href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-
-<details id="details_i">
- <summary>Anchor text is wrapped with &lt;i&gt; tag <a href="#with_i_tag"><i id="with_i">permalink</i></a></summary>
- <p>asdf</p>
-</details>
-
-<details id="details_span">
- <summary>This one uses &lt;span&gt;. <a href="#with_span_tag"><span id="with_span">permalink</span></a></summary>
- <p>asdf</p>
-</details>
-
-<details id="details_svg">
- <summary>
- <svg style="width: 100px;" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
- <a href="#inside_svg_w_circle">
- <circle id="svg_circle" cx="50" cy="40" r="35"/>
- </a>
- <a href="#inside_svg_w_text">
- <text id="svg_text" x="50" y="90" text-anchor="middle">
- &lt;circle&gt;
- </text>
- </a>
- </svg>
- </summary>
- <p>asdf</p>
-</details>
-
-<script>
-function testClickingOnInlineElement(detailsId, targetId, expected, testName) {
- const details = document.getElementById(detailsId);
- const target = document.getElementById(targetId);
- const test = async_test(testName);
-
- const promise = new Promise((resolve, reject) => {
- window.onhashchange = test.step_func_done(() => {
- assert_false(details.open);
- assert_true(location.hash === expected);
- resolve();
- });
- });
-
- if (target.click) {
- target.click();
- }
- else {
- // svg element don't have click method
- target.dispatchEvent(new MouseEvent('click', {
- view: window,
- bubbles: true,
- cancelable: true
- }));
- }
- return promise;
-};
-
-async function testAll() {
- try {
- await testClickingOnInlineElement("details_i", "with_i", "#with_i_tag", "Expected <a> containing <i> to navigate");
- await testClickingOnInlineElement("details_span", "with_span", "#with_span_tag", "Expected <a> containing <span> to navigate");
- await testClickingOnInlineElement("details_svg", "svg_circle", "#inside_svg_w_circle", "Expected <a>, inside svg, containing <circle> to navigate");
- await testClickingOnInlineElement("details_svg", "svg_text", "#inside_svg_w_text", "Expected <a>, inside svg, containing <text> to navigate");
- } catch (exception) {
- assert_unreached("should NOT-THROW exception");
- }
-};
-
-var allTests = async_test("Clicking on anchor with embedded inline element should navigate instead of opening details");
-testAll().then(()=>{ allTests.done(); });
-</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html
index 88875072128..91652790917 100644
--- a/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html
+++ b/tests/wpt/web-platform-tests/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-event-constructor.html
@@ -17,10 +17,10 @@ test(function() {
// No promise is passed.
assert_throws_js(TypeError,
- function() {
- new PromiseRejectionEvent('eventType', { bubbles: false });
- },
- 'Cannot construct PromiseRejectionEventInit without promise');
+ function() {
+ new PromiseRejectionEvent('eventType', { bubbles: false });
+ },
+ 'Cannot construct PromiseRejectionEventInit without promise');
// bubbles is passed.
assert_equals(new PromiseRejectionEvent('eventType', { bubbles: false, promise: p }).bubbles, false);
diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc.idl
index 053afdcb135..852ec06209e 100644
--- a/tests/wpt/web-platform-tests/interfaces/webrtc.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webrtc.idl
@@ -229,7 +229,8 @@ interface RTCPeerConnectionIceErrorEvent : Event {
};
dictionary RTCPeerConnectionIceErrorEventInit : EventInit {
- DOMString hostCandidate;
+ DOMString? address;
+ unsigned short? port;
DOMString url;
required unsigned short errorCode;
USVString statusText;
diff --git a/tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html b/tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html
index b6a33f579b4..50cabda8d20 100644
--- a/tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html
+++ b/tests/wpt/web-platform-tests/layout-instability/buffer-layout-shift.html
@@ -10,32 +10,35 @@
<script src="/resources/testharnessreport.js"></script>
<script src="resources/util.js"></script>
<script>
-async_test(async function(t) {
- assert_precondition(window.LayoutShift, 'LayoutShift entries are not supported');
+promise_test(async t => {
+ assert_precondition(window.LayoutShift, 'Layout Instability is not supported.');
// Wait for the initial render to complete.
await waitForAnimationFrames(2);
const startTime = performance.now();
- new PerformanceObserver(t.step_func_done(list => {
- const endTime = performance.now();
- assert_equals(list.getEntries().length, 1);
- const entry = list.getEntries()[0];
- assert_equals(entry.entryType, "layout-shift");
- assert_equals(entry.name, "");
- assert_greater_than_equal(entry.startTime, startTime);
- assert_less_than_equal(entry.startTime, endTime);
- assert_equals(entry.duration, 0.0);
- // The layout shift value should be:
- // 300 * (100 + 60) * (60 / maxDimension) / viewport size.
- assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60));
+ return new Promise(resolve => {
+ new PerformanceObserver(t.step_func(list => {
+ const endTime = performance.now();
+ assert_equals(list.getEntries().length, 1);
+ const entry = list.getEntries()[0];
+ assert_equals(entry.entryType, "layout-shift");
+ assert_equals(entry.name, "");
+ assert_greater_than_equal(entry.startTime, startTime);
+ assert_less_than_equal(entry.startTime, endTime);
+ assert_equals(entry.duration, 0.0);
+ // The layout shift value should be:
+ // 300 * (100 + 60) * (60 / maxDimension) / viewport size.
+ assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60));
- // The entry should not be available via getEntries* methods.
- assert_equals(performance.getEntriesByType('layout-shift').length, 0, 'getEntriesByType should have no layout-shift entries');
- assert_equals(performance.getEntriesByName('', 'layout-shift').length, 0, 'getEntriesByName should have no layout-shift entries');
- assert_equals(performance.getEntries().filter(e => e.entryType === 'layout-shift').length, 0, 'getEntries should have no layout-shift entries');
- })).observe({type: 'layout-shift'});
- // Modify the position of the div.
- document.getElementById('myDiv').style = "top: 60px";
+ // The entry should not be available via getEntries* methods.
+ assert_equals(performance.getEntriesByType('layout-shift').length, 0, 'getEntriesByType should have no layout-shift entries');
+ assert_equals(performance.getEntriesByName('', 'layout-shift').length, 0, 'getEntriesByName should have no layout-shift entries');
+ assert_equals(performance.getEntries().filter(e => e.entryType === 'layout-shift').length, 0, 'getEntries should have no layout-shift entries');
+ resolve();
+ })).observe({type: 'layout-shift'});
+ // Modify the position of the div.
+ document.getElementById('myDiv').style = "top: 60px";
+ });
}, 'Layout shift before onload is not buffered into the performance timeline.');
</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/buffered-flag.html b/tests/wpt/web-platform-tests/layout-instability/buffered-flag.html
index cd1260e3613..1d200712c28 100644
--- a/tests/wpt/web-platform-tests/layout-instability/buffered-flag.html
+++ b/tests/wpt/web-platform-tests/layout-instability/buffered-flag.html
@@ -10,29 +10,32 @@
<script src="/resources/testharnessreport.js"></script>
<script src="resources/util.js"></script>
<script>
-async_test(async function(t) {
- assert_precondition(window.LayoutShift, 'LayoutShift entries are not supported');
+promise_test(async t => {
+ assert_precondition(window.LayoutShift, 'Layout Instability is not supported.');
// Wait for the initial render to complete.
await waitForAnimationFrames(2);
const startTime = performance.now();
- // First observer creates second in callback to ensure the entry has been dispatched by the time
- // the second observer begins observing.
- new PerformanceObserver(() => {
- const endTime = performance.now();
- // Second observer requires 'buffered: true' to see entries.
- new PerformanceObserver(t.step_func_done(list => {
- assert_equals(list.getEntries().length, 1);
- const entry = list.getEntries()[0];
- assert_equals(entry.entryType, "layout-shift");
- assert_greater_than_equal(entry.startTime, startTime);
- assert_less_than_equal(entry.startTime, endTime);
- assert_equals(entry.duration, 0.0);
- assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60));
- })).observe({'type': 'layout-shift', buffered: true});
- }).observe({type: 'layout-shift'});
- // Modify the position of the div to cause a layout-shift entry.
- document.getElementById('myDiv').style = "top: 60px";
+ return new Promise(resolve => {
+ // First observer creates second in callback to ensure the entry has been dispatched by the time
+ // the second observer begins observing.
+ new PerformanceObserver(() => {
+ const endTime = performance.now();
+ // Second observer requires 'buffered: true' to see entries.
+ new PerformanceObserver(t.step_func(list => {
+ assert_equals(list.getEntries().length, 1);
+ const entry = list.getEntries()[0];
+ assert_equals(entry.entryType, "layout-shift");
+ assert_greater_than_equal(entry.startTime, startTime);
+ assert_less_than_equal(entry.startTime, endTime);
+ assert_equals(entry.duration, 0.0);
+ assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60));
+ resolve();
+ })).observe({'type': 'layout-shift', buffered: true});
+ }).observe({type: 'layout-shift'});
+ // Modify the position of the div to cause a layout-shift entry.
+ document.getElementById('myDiv').style = "top: 60px";
+ });
}, 'PerformanceObserver with buffered flag sees previous layout-shift entry.');
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/layout-instability/recent-input.html b/tests/wpt/web-platform-tests/layout-instability/recent-input.html
index a4fa0d8b0d9..52adbf723ea 100644
--- a/tests/wpt/web-platform-tests/layout-instability/recent-input.html
+++ b/tests/wpt/web-platform-tests/layout-instability/recent-input.html
@@ -21,36 +21,39 @@
<script>
let timeAfterClick;
-async_test(async function(t) {
- assert_precondition(window.LayoutShift, 'LayoutShift entries are not supported');
+promise_test(async t => {
+ assert_precondition(window.LayoutShift, 'Layout Instability is not supported.');
// Wait for the initial render to complete.
await waitForAnimationFrames(2);
const startTime = performance.now();
- const observer = new PerformanceObserver(
- t.step_func_done(function(entryList) {
- const endTime = performance.now();
- assert_equals(entryList.getEntries().length, 1);
- const entry = entryList.getEntries()[0];
- assert_equals(entry.entryType, "layout-shift");
- assert_equals(entry.name, "");
- assert_greater_than_equal(entry.startTime, startTime);
- assert_less_than_equal(entry.startTime, endTime);
- assert_equals(entry.duration, 0.0);
- // The layout shift value should be:
- // 300 * (100 + 60) * (60 / maxDimension) / viewport size.
- assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60));
- // We should see that there was a click input entry.
- assert_equals(entry.hadRecentInput, true);
- assert_greater_than_equal(timeAfterClick, entry.lastInputTime);
- })
- );
- observer.observe({entryTypes: ['layout-shift']});
- // User input event
- clickAndBlockMain('button').then(() => {
- timeAfterClick = performance.now();
- // Modify the position of the div.
- document.getElementById('myDiv').style = "top: 60px";
+ return new Promise(resolve => {
+ const observer = new PerformanceObserver(
+ t.step_func(entryList => {
+ const endTime = performance.now();
+ assert_equals(entryList.getEntries().length, 1);
+ const entry = entryList.getEntries()[0];
+ assert_equals(entry.entryType, "layout-shift");
+ assert_equals(entry.name, "");
+ assert_greater_than_equal(entry.startTime, startTime);
+ assert_less_than_equal(entry.startTime, endTime);
+ assert_equals(entry.duration, 0.0);
+ // The layout shift value should be:
+ // 300 * (100 + 60) * (60 / maxDimension) / viewport size.
+ assert_equals(entry.value, computeExpectedScore(300 * (100 + 60), 60));
+ // We should see that there was a click input entry.
+ assert_equals(entry.hadRecentInput, true);
+ assert_greater_than_equal(timeAfterClick, entry.lastInputTime);
+ resolve();
+ })
+ );
+ observer.observe({entryTypes: ['layout-shift']});
+ // User input event
+ clickAndBlockMain('button').then(() => {
+ timeAfterClick = performance.now();
+ // Modify the position of the div.
+ document.getElementById('myDiv').style = "top: 60px";
+ });
});
}, 'Layout shift right after user input is observable via PerformanceObserver.');
</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html b/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html
index 8679a2de738..cee4b808c87 100644
--- a/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html
+++ b/tests/wpt/web-platform-tests/layout-instability/supported-layout-type.html
@@ -7,8 +7,9 @@
<script src="/resources/testharnessreport.js"></script>
<script>
test(() => {
- if (typeof PerformanceObserver.supportedEntryTypes === "undefined")
- assert_unreached("supportedEntryTypes is not supported.");
+ assert_precondition(window.LayoutShift, 'Layout Instability is not supported.');
+ assert_precondition(typeof PerformanceObserver.supportedEntryTypes !== "undefined",
+ 'supportedEntryTypes is not supported.');
assert_greater_than(PerformanceObserver.supportedEntryTypes.indexOf("layout-shift"), -1,
"There should be an entry 'layout-shift' in PerformanceObserver.supportedEntryTypes");
}, "supportedEntryTypes contains 'layoutShift'.");
diff --git a/tests/wpt/web-platform-tests/layout-instability/toJSON.html b/tests/wpt/web-platform-tests/layout-instability/toJSON.html
index 374a7de0cd1..00f074a4dd8 100644
--- a/tests/wpt/web-platform-tests/layout-instability/toJSON.html
+++ b/tests/wpt/web-platform-tests/layout-instability/toJSON.html
@@ -10,36 +10,39 @@
<script src="/resources/testharnessreport.js"></script>
<script src="resources/util.js"></script>
<script>
-async_test(async function(t) {
- assert_precondition(window.LayoutShift, 'LayoutShift entries are not supported');
+promise_test(async t => {
+ assert_precondition(window.LayoutShift, 'Layout Instability is not supported.');
// Wait for the initial render to complete.
await waitForAnimationFrames(2);
- const observer = new PerformanceObserver(
- t.step_func_done(function(entryList) {
- const entry = entryList.getEntries()[0];
- assert_equals(typeof(entry.toJSON), 'function');
- const json = entry.toJSON();
- assert_equals(typeof(json), 'object');
- const keys = [
- // PerformanceEntry
- 'name',
- 'entryType',
- 'startTime',
- 'duration',
- // LayoutShift
- 'value',
- 'hadRecentInput',
- 'lastInputTime',
- ];
- for (const key of keys) {
- assert_equals(json[key], entry[key],
- 'LayoutShift ${key} entry does not match its toJSON value');
- }
- })
- );
- observer.observe({type: 'layout-shift'});
- document.getElementById('myDiv').style = "top: 60px";
+ return new Promise(resolve => {
+ const observer = new PerformanceObserver(
+ t.step_func(entryList => {
+ const entry = entryList.getEntries()[0];
+ assert_equals(typeof(entry.toJSON), 'function');
+ const json = entry.toJSON();
+ assert_equals(typeof(json), 'object');
+ const keys = [
+ // PerformanceEntry
+ 'name',
+ 'entryType',
+ 'startTime',
+ 'duration',
+ // LayoutShift
+ 'value',
+ 'hadRecentInput',
+ 'lastInputTime',
+ ];
+ for (const key of keys) {
+ assert_equals(json[key], entry[key],
+ `LayoutShift ${key} entry does not match its toJSON value`);
+ }
+ resolve();
+ })
+ );
+ observer.observe({type: 'layout-shift'});
+ document.getElementById('myDiv').style = "top: 60px";
+ });
}, 'Test toJSON() in LayoutShift.');
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html b/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html
index c96412d0630..4782412ccdf 100644
--- a/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html
+++ b/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-removed.html
@@ -33,10 +33,10 @@ function mediaTest(mime) {
var sourceBuffer = mediaSource.addSourceBuffer(mime);
mediaSource.removeSourceBuffer(sourceBuffer);
assert_throws_dom('InvalidStateError',
- function() {
- sourceBuffer.abort();
- },
- 'SourceBuffer#abort() after removing the SourceBuffer object');
+ function() {
+ sourceBuffer.abort();
+ },
+ 'SourceBuffer#abort() after removing the SourceBuffer object');
}), false);
var video = document.createElement('video');
video.src = window.URL.createObjectURL(mediaSource);
diff --git a/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html b/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html
index c62e5421622..e7e9b8ca5f6 100644
--- a/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html
+++ b/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html
@@ -33,10 +33,10 @@ function mediaTest(mime) {
var sourceBuffer = mediaSource.addSourceBuffer(mime);
assert_equals(sourceBuffer.updating, false, "SourceBuffer.updating is false");
assert_throws_js(TypeError,
- function() {
- sourceBuffer.mode = "segments";
- },
- 'SourceBuffer#mode with generate timestamps flag true');
+ function() {
+ sourceBuffer.mode = "segments";
+ },
+ 'SourceBuffer#mode with generate timestamps flag true');
}), false);
var video = document.createElement('video');
video.src = window.URL.createObjectURL(mediaSource);
diff --git a/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html b/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html
index 905d1d0d0ee..7b45486d71e 100644
--- a/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html
+++ b/tests/wpt/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html
@@ -44,8 +44,8 @@
{
mediaSource.removeSourceBuffer(sourceBuffer);
assert_throws_dom("InvalidStateError",
- function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); },
- "Exception thrown when setting trackDefaults on SourceBuffer that is removed from MediaSource");
+ function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); },
+ "Exception thrown when setting trackDefaults on SourceBuffer that is removed from MediaSource");
test.done();
}, "Test setting trackDefaults on an already-removed SourceBuffer");
@@ -57,8 +57,8 @@
assert_true(sourceBuffer.updating, "SourceBuffer is updating");
assert_throws_dom("InvalidStateError",
- function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); },
- "Exception thrown when setting trackDefaults on SourceBuffer that is updating");
+ function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); },
+ "Exception thrown when setting trackDefaults on SourceBuffer that is updating");
test.waitForExpectedEvents(function()
{
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html
index e53915608f0..9abffe25edd 100644
--- a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html
+++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html
@@ -62,10 +62,10 @@ var testAudio = async_test(function() {
assert_equals(stream.getAudioTracks().length, 1);
assert_equals(stream.getVideoTracks().length, 0);
assert_throws_dom("NotSupportedError",
- function() {
- var capturer = new ImageCapture(stream.getAudioTracks()[0]);
- },
- 'an ImageCapturer can only be created from a video track');
+ function() {
+ var capturer = new ImageCapture(stream.getAudioTracks()[0]);
+ },
+ 'an ImageCapturer can only be created from a video track');
this.done();
}))
@@ -83,12 +83,12 @@ var testParameter = test(function() {
true
];
assert_throws_js(TypeError,
- function() { var capturer = new ImageCapture(); },
- 'an ImageCapturer can not be created with no parameter');
+ function() { var capturer = new ImageCapture(); },
+ 'an ImageCapturer cannot be created with no parameter');
invalidParameters.map(parameter => {
assert_throws_js(TypeError,
- function() { var capturer = new ImageCapture(parameter); },
- `an ImageCapturer can not be created with a ${parameter} parameter`);
+ function() { var capturer = new ImageCapture(parameter); },
+ `an ImageCapturer cannot be created with a ${parameter} parameter`);
});
}, 'throw "TypeError" if parameter is not MediaStreamTrack.');
diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html
index 5dca350dd27..d5abf3a05c3 100644
--- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html
+++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html
@@ -46,11 +46,11 @@
recorder.stop();
assert_equals(recorder.state, "inactive", "stop() is idempotent");
assert_throws_dom("InvalidStateError", function() { recorder.pause() },
- "recorder cannot be pause()ed in |inactive| state");
+ "recorder cannot be pause()ed in |inactive| state");
assert_throws_dom("InvalidStateError", function() { recorder.resume() },
- "recorder cannot be resume()d in |inactive| state");
+ "recorder cannot be resume()d in |inactive| state");
assert_throws_dom("InvalidStateError", function() { recorder.requestData() },
- "cannot requestData() if recorder is in |inactive| state");
+ "cannot requestData() if recorder is in |inactive| state");
test.done();
});
@@ -81,28 +81,28 @@
assert_equals(stream.getVideoTracks()[0].readyState, 'live');
assert_throws_dom("NotSupportedError",
- function() {
- recorder = new MediaRecorder(
- new MediaStream(), {mimeType : "video/invalid"});
- },
- "recorder should throw() with unsupported mimeType");
+ function() {
+ recorder = new MediaRecorder(
+ new MediaStream(), {mimeType : "video/invalid"});
+ },
+ "recorder should throw() with unsupported mimeType");
let recorder = new MediaRecorder(new MediaStream());
assert_equals(recorder.state, "inactive");
recorder.stop();
assert_equals(recorder.state, "inactive", "stop() is idempotent");
assert_throws_dom("InvalidStateError", function(){recorder.pause()},
- "recorder cannot be pause()ed in |inactive| state");
+ "recorder cannot be pause()ed in |inactive| state");
assert_throws_dom("InvalidStateError", function(){recorder.resume()},
- "recorder cannot be resume()d in |inactive| state");
+ "recorder cannot be resume()d in |inactive| state");
assert_throws_dom("InvalidStateError", function(){recorder.requestData()},
- "cannot requestData() if recorder is in |inactive| state");
+ "cannot requestData() if recorder is in |inactive| state");
assert_throws_dom("NotSupportedError",
- function() {
- recorder.start();
- },
- "recorder should throw() when starting with inactive stream");
+ function() {
+ recorder.start();
+ },
+ "recorder should throw() when starting with inactive stream");
recorder.stream.addTrack(stream.getTracks()[0]);
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html
index c54e3a7ada6..f51674cb429 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html
@@ -38,7 +38,7 @@
test_pointerEvent.step(function() {
assert_throws_dom("NotFoundError", function(){ listener.releasePointerCapture(INVALID_POINTERID); },
- "It should not be possible to release capture an invalid pointer id");
+ "It should not be possible to release capture an invalid pointer id");
});
test_pointerEvent.done(); // complete test
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html
index ada67fa5b7b..7d9f948919f 100644
--- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html
@@ -34,7 +34,7 @@
detected_pointertypes[event.pointerType] = true;
test_pointerEvent.step(function() {
assert_throws_dom("NotFoundError", function(){ listener.setPointerCapture(INVALID_POINTERID); },
- "It should not be possible to capture an invalid pointer id");
+ "It should not be possible to capture an invalid pointer id");
});
test_pointerEvent.done(); // complete test
});
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
index 695b265db60..34aeab08a74 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js
@@ -208,6 +208,7 @@ class MockRuntime {
"local-floor": device.mojom.XRSessionFeature.REF_SPACE_LOCAL_FLOOR,
"bounded-floor": device.mojom.XRSessionFeature.REF_SPACE_BOUNDED_FLOOR,
"unbounded": device.mojom.XRSessionFeature.REF_SPACE_UNBOUNDED,
+ "hit-test": device.mojom.XRSessionFeature.HIT_TEST,
};
static sessionModeToMojoMap = {
diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html
index 09d22ff6d1d..b06f3c889c1 100644
--- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html
+++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/scroll-to-text-fragment-target.html
@@ -46,7 +46,7 @@ function checkScroll() {
};
let key = (new URL(document.location)).searchParams.get("key");
- stashResults(key, results);
+ stashResultsThenClose(key, results);
}
// Ensure two animation frames on load to test the fallback to element anchor,
diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js b/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js
index b3d9ea8e93f..f1b2ea8d3a5 100644
--- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js
+++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.js
@@ -1,8 +1,10 @@
// Put test results into Stash
-function stashResults(key, results) {
+function stashResultsThenClose(key, results) {
fetch(`/scroll-to-text-fragment/stash.py?key=${key}`, {
method: 'POST',
body: JSON.stringify(results)
+ }).then(() => {
+ window.close();
});
}
@@ -18,6 +20,10 @@ function fetchResults(key, resolve, reject) {
} catch(e) {
reject();
}
+ } else {
+ // We keep trying to fetch results as the target page may not have stashed
+ // them yet.
+ fetchResults(key, resolve, reject);
}
});
}
diff --git a/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py b/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py
index 49567390e1e..31a29343d9e 100644
--- a/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py
+++ b/tests/wpt/web-platform-tests/scroll-to-text-fragment/stash.py
@@ -10,8 +10,4 @@ def main(request, response):
else:
# Request for result data from test page
value = request.server.stash.take(key, '/scroll-to-text-fragment/')
- # Poll until data is stashed
- while value is None:
- time.sleep(.1)
- value = request.server.stash.take(key, '/scroll-to-text-fragment/')
return value
diff --git a/tests/wpt/web-platform-tests/selection/removeRange.html b/tests/wpt/web-platform-tests/selection/removeRange.html
index 7618a4ac535..8dcd6d2c074 100644
--- a/tests/wpt/web-platform-tests/selection/removeRange.html
+++ b/tests/wpt/web-platform-tests/selection/removeRange.html
@@ -31,8 +31,8 @@ testRanges.forEach(function(rangeData, index) {
equivalentRange.setStart(endpoints[0], endpoints[1]);
equivalentRange.setEnd(endpoints[2], endpoints[3]);
assert_throws_dom("NotFoundError",
- function() { selection.removeRange(equivalentRange) },
- "Removing a different range should throw");
+ function() { selection.removeRange(equivalentRange) },
+ "Removing a different range should throw");
assert_equals(selection.rangeCount, 1, 'Equivalent Range should not remove the registered Range.');
}, 'removeRange() with Range ' + index);
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py
index 7b0c13feba9..62c945f8221 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/service-worker-csp-worker.py
@@ -19,11 +19,11 @@ test(function() {
test(function() {
assert_throws_js(EvalError,
- function() { eval('1 + 1'); },
- 'eval() should throw EvalError.')
+ function() { eval('1 + 1'); },
+ 'eval() should throw EvalError.')
assert_throws_js(EvalError,
- function() { new Function('1 + 1'); },
- 'new Function() should throw EvalError.')
+ function() { new Function('1 + 1'); },
+ 'new Function() should throw EvalError.')
}, 'eval test for default-src');
async_test(function(t) {
@@ -74,11 +74,11 @@ test(function() {
test(function() {
assert_throws_js(EvalError,
- function() { eval('1 + 1'); },
- 'eval() should throw EvalError.')
+ function() { eval('1 + 1'); },
+ 'eval() should throw EvalError.')
assert_throws_js(EvalError,
- function() { new Function('1 + 1'); },
- 'new Function() should throw EvalError.')
+ function() { new Function('1 + 1'); },
+ 'new Function() should throw EvalError.')
}, 'eval test for script-src');
async_test(function(t) {
diff --git a/tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js b/tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js
index e6959b6c12a..71d75b03504 100644
--- a/tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js
+++ b/tests/wpt/web-platform-tests/streams/piping/pipe-through.any.js
@@ -100,8 +100,8 @@ const badReadables = [null, undefined, 0, NaN, true, 'ReadableStream', Object.cr
for (const readable of badReadables) {
test(() => {
assert_throws_js(TypeError,
- ReadableStream.prototype.pipeThrough.bind(readable, uninterestingReadableWritablePair()),
- 'pipeThrough should throw');
+ ReadableStream.prototype.pipeThrough.bind(readable, uninterestingReadableWritablePair()),
+ 'pipeThrough should throw');
}, `pipeThrough should brand-check this and not allow '${readable}'`);
test(() => {
@@ -176,7 +176,7 @@ for (const signal of badSignals) {
test(() => {
const rs = new ReadableStream();
assert_throws_js(TypeError, () => rs.pipeThrough(uninterestingReadableWritablePair(), { signal }),
- 'pipeThrough should throw');
+ 'pipeThrough should throw');
}, `invalid values of signal should throw; specifically '${signal}'`);
}
@@ -191,7 +191,7 @@ test(() => {
const rs = new ReadableStream();
rs.getReader();
assert_throws_js(TypeError, () => rs.pipeThrough(uninterestingReadableWritablePair()),
- 'pipeThrough should throw');
+ 'pipeThrough should throw');
}, 'pipeThrough should throw if this is locked');
test(() => {
@@ -200,7 +200,7 @@ test(() => {
const readable = new ReadableStream();
writable.getWriter();
assert_throws_js(TypeError, () => rs.pipeThrough({writable, readable}),
- 'pipeThrough should throw');
+ 'pipeThrough should throw');
}, 'pipeThrough should throw if writable is locked');
test(() => {
diff --git a/tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js b/tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js
index 9bbe7111ea8..bed4ec411ec 100644
--- a/tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js
+++ b/tests/wpt/web-platform-tests/streams/readable-byte-streams/brand-checks.any.js
@@ -107,14 +107,14 @@ test(() => {
test(() => {
assert_throws_js(TypeError, () => new ReadableByteStreamController(fakeRS()),
- 'Constructing a ReadableByteStreamController should throw');
+ 'Constructing a ReadableByteStreamController should throw');
}, 'ReadableByteStreamController enforces a brand check on its arguments');
test(() => {
assert_throws_js(TypeError, () => new ReadableByteStreamController(realRS()),
- 'Constructing a ReadableByteStreamController should throw');
+ 'Constructing a ReadableByteStreamController should throw');
}, 'ReadableByteStreamController can\'t be given a fully-constructed ReadableStream');
@@ -175,7 +175,7 @@ promise_test(t => {
function brandChecks() {
for (const badController of [fakeRBSController(), realRS(), realRSBYOBReader(), undefined, null]) {
assert_throws_js(TypeError, () => new ReadableStreamBYOBRequest(badController, new Uint8Array(1)),
- 'ReadableStreamBYOBRequest constructor must throw for an invalid controller argument');
+ 'ReadableStreamBYOBRequest constructor must throw for an invalid controller argument');
}
getterThrowsForAll(ReadableStreamBYOBRequest.prototype, 'view',
[fakeRSBYOBRequest(), realRS(), realRSBYOBReader(), realRBSController(), undefined, null]);
diff --git a/tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js b/tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js
index 2e1c53fdea8..516025135b0 100644
--- a/tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js
+++ b/tests/wpt/web-platform-tests/streams/readable-byte-streams/construct-byob-request.any.js
@@ -49,7 +49,7 @@ function runTests(ReadableStreamBYOBRequest) {
const view = createDummyObject(Uint8Array.prototype, viewType, () => new Uint8Array(16));
test(() => {
assert_throws_js(TypeError, () => new ReadableStreamBYOBRequest(controller, view),
- 'constructor should throw');
+ 'constructor should throw');
}, `ReadableStreamBYOBRequest constructor should throw when passed a ${controllerType} ` +
`ReadableByteStreamController and a ${viewType} view`);
}
diff --git a/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js b/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js
index 1947ededb66..e4951c0c819 100644
--- a/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js
+++ b/tests/wpt/web-platform-tests/streams/readable-byte-streams/general.any.js
@@ -1990,7 +1990,7 @@ promise_test(() => {
const reader = rs.getReader({ mode: 'byob' });
return reader.read(newView()).then(() => {
assert_throws_js(TypeError, () => byobRequest.respondWithNewView(newView()),
- 'respondWithNewView() should throw a TypeError');
+ 'respondWithNewView() should throw a TypeError');
});
}, 'calling respondWithNewView() twice on the same byobRequest should throw');
@@ -2102,20 +2102,20 @@ test(() => {
}), 'constructor should throw for size function');
assert_throws_js(RangeError, () => new ReadableStream({ type: 'bytes' }, { size: null }),
- 'constructor should throw for size defined');
+ 'constructor should throw for size defined');
assert_throws_js(RangeError,
- () => new ReadableStream({ type: 'bytes' }, new CountQueuingStrategy({ highWaterMark: 1 })),
- 'constructor should throw when strategy is CountQueuingStrategy');
+ () => new ReadableStream({ type: 'bytes' }, new CountQueuingStrategy({ highWaterMark: 1 })),
+ 'constructor should throw when strategy is CountQueuingStrategy');
assert_throws_js(RangeError,
- () => new ReadableStream({ type: 'bytes' }, new ByteLengthQueuingStrategy({ highWaterMark: 512 })),
- 'constructor should throw when strategy is ByteLengthQueuingStrategy');
+ () => new ReadableStream({ type: 'bytes' }, new ByteLengthQueuingStrategy({ highWaterMark: 512 })),
+ 'constructor should throw when strategy is ByteLengthQueuingStrategy');
class HasSizeMethod {
size() {}
}
assert_throws_js(RangeError, () => new ReadableStream({ type: 'bytes' }, new HasSizeMethod()),
- 'constructor should throw when size on the prototype chain');
+ 'constructor should throw when size on the prototype chain');
}, 'ReadableStream constructor should not accept a strategy with a size defined if type is "bytes"');
diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js b/tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js
index c82f513df01..564eea016bd 100644
--- a/tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js
+++ b/tests/wpt/web-platform-tests/streams/readable-streams/brand-checks.any.js
@@ -120,7 +120,7 @@ test(() => {
test(() => {
assert_throws_js(TypeError, () => new ReadableStreamDefaultReader(fakeRS()),
- 'Constructing a ReadableStreamDefaultReader should throw');
+ 'Constructing a ReadableStreamDefaultReader should throw');
}, 'ReadableStreamDefaultReader enforces a brand check on its argument');
@@ -155,14 +155,14 @@ test(() => {
test(() => {
assert_throws_js(TypeError, () => new ReadableStreamDefaultController(fakeRS()),
- 'Constructing a ReadableStreamDefaultController should throw');
+ 'Constructing a ReadableStreamDefaultController should throw');
}, 'ReadableStreamDefaultController enforces a brand check on its argument');
test(() => {
assert_throws_js(TypeError, () => new ReadableStreamDefaultController(realRS()),
- 'Constructing a ReadableStreamDefaultController should throw');
+ 'Constructing a ReadableStreamDefaultController should throw');
}, 'ReadableStreamDefaultController can\'t be given a fully-constructed ReadableStream');
diff --git a/tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js b/tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js
index 1e67b272b54..bf807f76686 100644
--- a/tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js
+++ b/tests/wpt/web-platform-tests/streams/readable-streams/default-reader.any.js
@@ -69,7 +69,7 @@ test(() => {
const rs = new ReadableStream();
new ReadableStreamDefaultReader(rs); // Constructing directly the first time should be fine.
assert_throws_js(TypeError, () => new ReadableStreamDefaultReader(rs),
- 'constructing directly the second time should fail');
+ 'constructing directly the second time should fail');
}, 'Constructing a ReadableStreamDefaultReader directly should fail if the stream is already locked (via direct ' +
'construction)');
diff --git a/tests/wpt/web-platform-tests/streams/resources/test-utils.js b/tests/wpt/web-platform-tests/streams/resources/test-utils.js
index 614fcca18e9..ff5c0151c1c 100644
--- a/tests/wpt/web-platform-tests/streams/resources/test-utils.js
+++ b/tests/wpt/web-platform-tests/streams/resources/test-utils.js
@@ -44,7 +44,7 @@ self.methodThrowsForAll = (obj, methodName, targets, args) => {
self.constructorThrowsForAll = (constructor, firstArgs) => {
firstArgs.forEach(firstArg => assert_throws_js(TypeError, () => new constructor(firstArg),
- 'constructor should throw a TypeError'));
+ 'constructor should throw a TypeError'));
};
self.garbageCollect = () => {
diff --git a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js
index c7645e7e651..c29c6cb59d8 100644
--- a/tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js
+++ b/tests/wpt/web-platform-tests/streams/transform-streams/strategies.any.js
@@ -87,13 +87,13 @@ promise_test(t => {
test(() => {
assert_throws_js(RangeError, () => new TransformStream(undefined, { highWaterMark: -1 }),
- 'should throw RangeError for negative writableHighWaterMark');
+ 'should throw RangeError for negative writableHighWaterMark');
assert_throws_js(RangeError, () => new TransformStream(undefined, undefined, { highWaterMark: -1 }),
- 'should throw RangeError for negative readableHighWaterMark');
+ 'should throw RangeError for negative readableHighWaterMark');
assert_throws_js(RangeError, () => new TransformStream(undefined, { highWaterMark: NaN }),
- 'should throw RangeError for NaN writableHighWaterMark');
+ 'should throw RangeError for NaN writableHighWaterMark');
assert_throws_js(RangeError, () => new TransformStream(undefined, undefined, { highWaterMark: NaN }),
- 'should throw RangeError for NaN readableHighWaterMark');
+ 'should throw RangeError for NaN readableHighWaterMark');
}, 'a RangeError should be thrown for an invalid highWaterMark');
const objectThatConvertsTo42 = {
diff --git a/tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js b/tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js
index c792e1f1faf..ac0483e61f0 100644
--- a/tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js
+++ b/tests/wpt/web-platform-tests/streams/writable-streams/constructor.any.js
@@ -116,7 +116,7 @@ test(() => {
});
assert_throws_js(TypeError, () => new WritableStreamDefaultController({}),
- 'constructor should throw a TypeError exception');
+ 'constructor should throw a TypeError exception');
}, 'WritableStreamDefaultController constructor should throw');
test(() => {
@@ -128,7 +128,7 @@ test(() => {
});
assert_throws_js(TypeError, () => new WritableStreamDefaultController(stream),
- 'constructor should throw a TypeError exception');
+ 'constructor should throw a TypeError exception');
}, 'WritableStreamDefaultController constructor should throw when passed an initialised WritableStream');
test(() => {
@@ -137,7 +137,7 @@ test(() => {
const WritableStreamDefaultWriter = writer.constructor;
writer.releaseLock();
assert_throws_js(TypeError, () => new WritableStreamDefaultWriter({}),
- 'constructor should throw a TypeError exception');
+ 'constructor should throw a TypeError exception');
}, 'WritableStreamDefaultWriter should throw unless passed a WritableStream');
test(() => {
@@ -145,7 +145,7 @@ test(() => {
const writer = stream.getWriter();
const WritableStreamDefaultWriter = writer.constructor;
assert_throws_js(TypeError, () => new WritableStreamDefaultWriter(stream),
- 'constructor should throw a TypeError exception');
+ 'constructor should throw a TypeError exception');
}, 'WritableStreamDefaultWriter constructor should throw when stream argument is locked');
const operations = [
diff --git a/tests/wpt/web-platform-tests/streams/writable-streams/write.any.js b/tests/wpt/web-platform-tests/streams/writable-streams/write.any.js
index 68da7939855..f60434b9fc1 100644
--- a/tests/wpt/web-platform-tests/streams/writable-streams/write.any.js
+++ b/tests/wpt/web-platform-tests/streams/writable-streams/write.any.js
@@ -257,7 +257,7 @@ promise_test(() => {
const writer = stream.getWriter();
const WritableStreamDefaultWriter = writer.constructor;
assert_throws_js(TypeError, () => new WritableStreamDefaultWriter(stream),
- 'should not be able to construct on locked stream');
+ 'should not be able to construct on locked stream');
// If stream.[[writer]] no longer points to |writer| then the closed Promise
// won't work properly.
return Promise.all([writer.close(), writer.closed]);
diff --git a/tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html b/tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html
index 1715cd9d471..8098a885356 100644
--- a/tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html
+++ b/tests/wpt/web-platform-tests/svg/animations/repeatn-remove-add-animation.html
@@ -1,98 +1,90 @@
<!doctype html>
-<html>
<meta charset="utf-8">
-<title>This removes and adds an animation element while the animation is repeating</title>
+<title>Remove and add an animation element while the animation is repeating</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/SVGAnimationTestCase-testharness.js"></script>
-
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
+<svg>
<animate id="anim" attributeName="visibility" to="visible" begin="0s" dur="2s" repeatCount="4"/>
- <rect x="0" y="0" width="100" height="100" fill="rgb(0, 255, 0)">
- <set attributeName="fill" to="rgb(255, 0, 0)" begin="anim.repeat(0)"/>
+ <rect x="0" y="0" width="50" height="50" fill="lime">
+ <set attributeName="fill" to="red" begin="anim.repeat(0)"/>
</rect>
- <rect x="200" y="0" width="100" height="100" fill="rgb(255, 0, 0)">
- <set attributeName="fill" to="rgb(0, 255, 0)" begin="anim.repeat(1)"/>
+ <rect x="50" y="0" width="50" height="50" fill="red">
+ <set attributeName="fill" to="lime" begin="anim.repeat(1)"/>
</rect>
- <rect x="0" y="200" width="100" height="100" fill="rgb(255, 0, 0)">
- <set attributeName="fill" to="rgb(0, 255, 0)" begin="anim.repeat(2)"/>
+ <rect x="0" y="50" width="50" height="50" fill="red">
+ <set attributeName="fill" to="lime" begin="anim.repeat(2)"/>
</rect>
- <rect x="200" y="200" width="100" height="100" fill="rgb(255, 0, 0)">
- <set attributeName="fill" to="rgb(0, 255, 0)" begin="anim.repeat(3)"/>
+ <rect x="50" y="50" width="50" height="50" fill="red">
+ <set attributeName="fill" to="lime" begin="anim.repeat(3)"/>
</rect>
-
</svg>
-
<script>
-var rootSVGElement = document.querySelector("svg");
-var epsilon = 1.0;
-
-// Setup animation test
-function sample1() {
- expectFillColor(rect1, 0, 255, 0, "1.1");
- expectFillColor(rect2, 255, 0, 0, "1.2");
- expectFillColor(rect3, 255, 0, 0, "1.3");
- expectFillColor(rect4, 255, 0, 0, "1.4");
-}
-
-function sample2() {
- expectFillColor(rect1, 0, 255, 0, "2.1");
- expectFillColor(rect2, 0, 255, 0, "2.2");
- expectFillColor(rect3, 255, 0, 0, "2.3");
- expectFillColor(rect4, 255, 0, 0, "2.4");
-}
-
-function sample3() {
- expectFillColor(rect1, 0, 255, 0, "3.1");
- expectFillColor(rect2, 0, 255, 0, "3.2");
- expectFillColor(rect3, 0, 255, 0, "3.3");
- expectFillColor(rect4, 255, 0, 0, "3.4");
-}
-
-function sample4() {
- expectFillColor(rect1, 0, 255, 0, "4.1");
- expectFillColor(rect2, 0, 255, 0, "4.2");
- expectFillColor(rect3, 0, 255, 0, "4.3");
- expectFillColor(rect4, 0, 255, 0, "4.4");
-}
-
-function recreate() {
- var anim1 = rootSVGElement.ownerDocument.getElementById("anim");
- anim1.parentNode.removeChild(anim1);
- var anim2 = createSVGElement("animate");
- anim2.setAttribute("id", "anim");
- anim2.setAttribute("attributeName", "visibility");
- anim2.setAttribute("to", "visible");
- anim2.setAttribute("begin", "0s");
- anim2.setAttribute("dur", "2s");
- anim2.setAttribute("repeatCount", "4");
- rootSVGElement.appendChild(anim2);
-}
-
-smil_async_test((t) => {
- var rects = rootSVGElement.ownerDocument.getElementsByTagName("rect");
- rect1 = rects[0];
- rect2 = rects[1];
- rect3 = rects[2];
- rect4 = rects[3];
-
- const expectedValues = [
- // [animationId, time, sampleCallback]
- ["anim", 1.999, sample1],
- ["anim", 2.000, sample2],
- ["anim", 2.999, sample2],
- ["anim", 4.000, sample3],
- ["anim", 5.0, recreate],
- ["anim", 5.999, sample3],
- ["anim", 6.000, sample4],
- ];
+ function recreate(anim) {
+ anim.parentNode.removeChild(anim);
+ return document.querySelector('svg').appendChild(anim.cloneNode());
+ }
- runAnimationTest(t, expectedValues);
-});
+ function waitFrame() {
+ return new Promise(resolve => {
+ window.requestAnimationFrame(resolve);
+ });
+ }
-window.animationStartsImmediately = true;
+ function checkSetElements(setElements, expected) {
+ let fillValues = Array.from(setElements).map(set => {
+ return getComputedStyle(set.targetElement, '').fill;
+ });
+ let remappedExpected = expected.map(color => {
+ const colorMap = {'red': 'rgb(255, 0, 0)', 'lime': 'rgb(0, 255, 0)'};
+ return colorMap[color];
+ })
+ assert_array_equals(fillValues, remappedExpected);
+ }
+ promise_test(t => {
+ let svg = document.querySelector('svg');
+ let anim = document.getElementById('anim');
+ let animWatcher = new EventWatcher(t, anim, ['beginEvent', 'repeatEvent']);
+ // Wait for #anims 'beginEvent' and then step through the
+ // 'repeatEvents' one at a time.
+ let stepsPromise = animWatcher.wait_for('beginEvent').then(() => {
+ checkSetElements(setElements, ['lime', 'red', 'red', 'red']);
+ svg.setCurrentTime(1.999);
+ return animWatcher.wait_for('repeatEvent');
+ }).then(() => {
+ return waitFrame();
+ }).then(() => {
+ checkSetElements(setElements, ['lime', 'lime', 'red', 'red']);
+ svg.setCurrentTime(2.999);
+ return waitFrame();
+ }).then(() => {
+ checkSetElements(setElements, ['lime', 'lime', 'red', 'red']);
+ svg.setCurrentTime(3.999);
+ return animWatcher.wait_for('repeatEvent');
+ }).then(() => {
+ return waitFrame();
+ }).then(() => {
+ checkSetElements(setElements, ['lime', 'lime', 'lime', 'red']);
+ let newAnim = recreate(anim);
+ let animWatcher = new EventWatcher(t, newAnim, ['repeatEvent']);
+ svg.setCurrentTime(5.999);
+ return animWatcher.wait_for('repeatEvent');
+ }).then(() => {
+ return waitFrame();
+ }).then(() => {
+ checkSetElements(setElements, ['lime', 'lime', 'lime', 'lime']);
+ });
+ let setElements = document.getElementsByTagName('set');
+ let setBeginWatchers = Array.from(setElements).map(element => {
+ return new EventWatcher(t, element, 'beginEvent');
+ });
+ // Expect 'beginEvent' to be dispatched once for all but the first 'set' element.
+ let setPromises = setBeginWatchers.slice(1).map(watcher => {
+ return watcher.wait_for('beginEvent').then(evt => {
+ let target = evt.target.targetElement;
+ assert_equals(getComputedStyle(target, '').fill, 'rgb(0, 255, 0)');
+ });
+ });
+ return Promise.all([stepsPromise, ...setPromises]);
+ });
</script>
diff --git a/tests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh b/tests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh
index 8db08794ade..992a1b58c24 100755
--- a/tests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh
+++ b/tests/wpt/web-platform-tests/tools/ci/ci_wptrunner_infrastructure.sh
@@ -5,14 +5,10 @@ SCRIPT_DIR=$(cd $(dirname "$0") && pwd -P)
WPT_ROOT=$SCRIPT_DIR/../..
cd $WPT_ROOT
-add_wpt_hosts() {
- ./wpt make-hosts-file | sudo tee -a /etc/hosts
-}
-
test_infrastructure() {
local ARGS="";
if [ $PRODUCT == "firefox" ]; then
- ARGS="--install-browser"
+ ARGS="--binary=~/build/firefox/firefox"
else
ARGS=$1
fi
@@ -24,7 +20,6 @@ main() {
./wpt manifest --rebuild -p ~/meta/MANIFEST.json
for PRODUCT in "${PRODUCTS[@]}"; do
if [[ "$PRODUCT" == "chrome" ]]; then
- add_wpt_hosts
test_infrastructure "--binary=$(which google-chrome-unstable) --channel dev"
else
test_infrastructure
diff --git a/tests/wpt/web-platform-tests/tools/ci/run_tc.py b/tests/wpt/web-platform-tests/tools/ci/run_tc.py
index f9086a31bd9..c460eecbbd7 100755
--- a/tests/wpt/web-platform-tests/tools/ci/run_tc.py
+++ b/tests/wpt/web-platform-tests/tools/ci/run_tc.py
@@ -36,11 +36,14 @@ the serialization of a GitHub event payload.
"""
import argparse
+import fnmatch
import json
import os
import subprocess
import sys
+import tarfile
import tempfile
+import zipfile
from socket import error as SocketError # NOQA: N812
import errno
try:
@@ -169,15 +172,16 @@ def install_webkitgtk_from_apt_repository(channel):
run(["sudo", "apt-get", "-qqy", "-t", "bionic-wpt-webkit-updates", "install", "webkit2gtk-driver"])
-# Download an URL in chunks and saves it to a file descriptor (truncating it)
-# It doesn't close the descriptor, but flushes it on success.
-# It retries the download in case of ECONNRESET up to max_retries.
def download_url_to_descriptor(fd, url, max_retries=3):
+ """Download an URL in chunks and saves it to a file descriptor (truncating it)
+ It doesn't close the descriptor, but flushes it on success.
+ It retries the download in case of ECONNRESET up to max_retries."""
download_succeed = False
if max_retries < 0:
max_retries = 0
for current_retry in range(max_retries+1):
try:
+ print("INFO: Downloading %s Try %d/%d" % (url, current_retry + 1, max_retries))
resp = urlopen(url)
# We may come here in a retry, ensure to truncate fd before start writing.
fd.seek(0)
@@ -246,7 +250,65 @@ def set_variables(event):
os.environ["GITHUB_BRANCH"] = branch
+def task_url(task_id):
+ root_url = os.environ['TASKCLUSTER_ROOT_URL']
+ if root_url == 'https://taskcluster.net':
+ queue_base = "https://queue.taskcluster.net/v1/task"
+ else:
+ queue_base = root_url + "/api/queue/v1/task"
+
+ return "%s/%s" % (queue_base, task_id)
+
+
+def download_artifacts(artifacts):
+ artifact_list_by_task = {}
+ for artifact in artifacts:
+ base_url = task_url(artifact["task"])
+ if artifact["task"] not in artifact_list_by_task:
+ resp = urlopen(base_url + "/artifacts")
+ artifacts_data = json.load(resp)
+ artifact_list_by_task[artifact["task"]] = artifacts_data
+
+ artifacts_data = artifact_list_by_task[artifact["task"]]
+ print("DEBUG: Got artifacts %s" % artifacts_data)
+ found = False
+ for candidate in artifacts_data["artifacts"]:
+ print("DEBUG: candidate: %s glob: %s" % (candidate["name"], artifact["glob"]))
+ if fnmatch.fnmatch(candidate["name"], artifact["glob"]):
+ found = True
+ print("INFO: Fetching aritfact %s from task %s" % (candidate["name"], artifact["task"]))
+ file_name = candidate["name"].rsplit("/", 1)[1]
+ url = base_url + "/artifacts/" + candidate["name"]
+ dest_path = os.path.expanduser(os.path.join("~", artifact["dest"], file_name))
+ dest_dir = os.path.dirname(dest_path)
+ if not os.path.exists(dest_dir):
+ os.makedirs(dest_dir)
+ with open(dest_path, "wb") as f:
+ download_url_to_descriptor(f, url)
+
+ if artifact.get("extract"):
+ unpack(dest_path)
+ if not found:
+ print("WARNING: No artifact found matching %s in task %s" % (artifact["glob"], artifact["task"]))
+
+
+def unpack(path):
+ dest = os.path.dirname(path)
+ if tarfile.is_tarfile(path):
+ run(["tar", "-xf", path], cwd=os.path.dirname(path))
+ elif zipfile.is_zipfile(path):
+ with zipfile.ZipFile(path) as archive:
+ archive.extractall(dest)
+ else:
+ print("ERROR: Don't know how to extract %s" % path)
+ raise Exception
+
+
def setup_environment(args):
+ if "TASK_ARTIFACTS" in os.environ:
+ artifacts = json.loads(os.environ["TASK_ARTIFACTS"])
+ download_artifacts(artifacts)
+
if args.hosts_file:
make_hosts_file()
@@ -364,15 +426,8 @@ def fetch_event_data():
# For example under local testing
return None
- root_url = os.environ['TASKCLUSTER_ROOT_URL']
- if root_url == 'https://taskcluster.net':
- queue_base = "https://queue.taskcluster.net/v1/task"
- else:
- queue_base = root_url + "/api/queue/v1/task"
-
-
- resp = urlopen("%s/%s" % (queue_base, task_id))
-
+ url = task_url(task_id)
+ resp = urlopen(url)
task_data = json.load(resp)
event_data = task_data.get("extra", {}).get("github_event")
if event_data is not None:
diff --git a/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py b/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py
index ac5abc12b1f..d8e42ccea21 100755
--- a/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py
+++ b/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py
@@ -9,10 +9,18 @@ import subprocess
import sys
browser_specific_args = {
- "firefox": ["--install-browser"],
"servo": ["--install-browser", "--processes=12"]
}
+def get_browser_args(product):
+ if product == "firefox":
+ local_binary = os.path.expanduser(os.path.join("~", "build", "firefox", "firefox"))
+ if os.path.exists(local_binary):
+ return ["--binary=%s" % local_binary]
+ print("WARNING: Local firefox binary not found")
+ return ["--install-browser"]
+ return browser_specific_args.get(product, [])
+
def find_wptreport(args):
parser = argparse.ArgumentParser()
@@ -66,7 +74,7 @@ def main(product, commit_range, wpt_args):
"--no-headless",
"--verify-log-full"
]
- wpt_args += browser_specific_args.get(product, [])
+ wpt_args += get_browser_args(product)
# Hack to run servo with one process only for wdspec
if product == "servo" and "--test-type=wdspec" in wpt_args:
diff --git a/tests/wpt/web-platform-tests/tools/ci/tc/README.md b/tests/wpt/web-platform-tests/tools/ci/tc/README.md
index 11f367f986f..785c82cca39 100644
--- a/tests/wpt/web-platform-tests/tools/ci/tc/README.md
+++ b/tests/wpt/web-platform-tests/tools/ci/tc/README.md
@@ -40,6 +40,14 @@ top-level properties:
* `name`: Optional String. Name to use for the task overriding the
property name. This is useful in combination with substitutions
described below.
+* `download-artifacts`: Optional Object. An artifact to download from
+ a task that this task depends on. This has the following properties:
+ - `task` - Name of the task producing the artifact
+ - `glob` - A glob pattern for the filename of the artifact
+ - `dest` - A directory reltive to the home directory in which to place
+ the artifact
+ - `extract` - Optional. A boolean indicating whether an archive artifact
+ should be extracted in-place.
## Task Expansions
diff --git a/tests/wpt/web-platform-tests/tools/ci/tc/decision.py b/tests/wpt/web-platform-tests/tools/ci/tc/decision.py
index 4b23630012b..f8f186f744d 100644
--- a/tests/wpt/web-platform-tests/tools/ci/tc/decision.py
+++ b/tests/wpt/web-platform-tests/tools/ci/tc/decision.py
@@ -214,7 +214,7 @@ def get_owner(event):
return "web-platform-tests@users.noreply.github.com"
-def create_tc_task(event, task, taskgroup_id, depends_on_ids):
+def create_tc_task(event, task, taskgroup_id, depends_on_ids, env_extra=None):
command = build_full_command(event, task)
task_id = taskcluster.slugId()
task_data = {
@@ -241,12 +241,24 @@ def create_tc_task(event, task, taskgroup_id, depends_on_ids):
"github_event": json.dumps(event)
}
}
+ if env_extra:
+ task_data["payload"]["env"].update(env_extra)
if depends_on_ids:
task_data["dependencies"] = depends_on_ids
task_data["requires"] = "all-completed"
return task_id, task_data
+def get_artifact_data(artifact, task_id_map):
+ task_id, data = task_id_map[artifact["task"]]
+ return {
+ "task": task_id,
+ "glob": artifact["glob"],
+ "dest": artifact["dest"],
+ "extract": artifact.get("extract", False)
+ }
+
+
def build_task_graph(event, all_tasks, tasks):
task_id_map = OrderedDict()
taskgroup_id = os.environ.get("TASK_ID", taskcluster.slugId())
@@ -259,7 +271,14 @@ def build_task_graph(event, all_tasks, tasks):
add_task(depends_name,
all_tasks[depends_name])
depends_on_ids.append(task_id_map[depends_name][0])
- task_id, task_data = create_tc_task(event, task, taskgroup_id, depends_on_ids)
+ env_extra = {}
+ if "download-artifacts" in task:
+ env_extra["TASK_ARTIFACTS"] = json.dumps(
+ [get_artifact_data(artifact, task_id_map)
+ for artifact in task["download-artifacts"]])
+
+ task_id, task_data = create_tc_task(event, task, taskgroup_id, depends_on_ids,
+ env_extra=env_extra)
task_id_map[task_name] = (task_id, task_data)
for task_name, task in iteritems(tasks):
diff --git a/tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml b/tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml
index 7476337e09b..562239c31e3 100644
--- a/tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml
+++ b/tests/wpt/web-platform-tests/tools/ci/tc/tasks/test.yml
@@ -82,6 +82,11 @@ components:
browser-firefox:
depends-on:
- download-firefox-${vars.channel}
+ download-artifacts:
+ - task: download-firefox-${vars.channel}
+ glob: public/results/firefox-${vars.channel}.*
+ dest: build/
+ extract: true
browser-webkitgtk_minibrowser: {}
@@ -281,7 +286,7 @@ tasks:
download-firefox-${vars.channel}:
use:
- wpt-base
- command: "./wpt install --download-only --destination /home/test/artifacts/ --channel=${vars.channel} firefox browser"
+ command: "./wpt install --download-only --destination /home/test/artifacts/ --channel=${vars.channel} --rename=firefox-${vars.channel} firefox browser"
- lint:
use:
@@ -429,10 +434,12 @@ tasks:
- infrastructure/ tests:
description: >-
Smoketests for wptrunner
+ vars:
+ channel: nightly
use:
- wpt-base
- trigger-pr
- - tox-python2
+ - browser-firefox
command: ./tools/ci/ci_wptrunner_infrastructure.sh
install:
- libnss3-tools
diff --git a/tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py b/tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py
index a194d370181..4573541bf58 100644
--- a/tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py
+++ b/tests/wpt/web-platform-tests/tools/ci/tc/tests/test_valid.py
@@ -127,7 +127,8 @@ def test_verify_payload():
'wpt-chrome-dev-crashtest-1',
'lint'}),
("pr_event.json", True, {".taskcluster.yml",".travis.yml","tools/ci/start.sh"},
- {'lint',
+ {'download-firefox-nightly',
+ 'lint',
'tools/ unittests (Python 2)',
'tools/ unittests (Python 3.6)',
'tools/ unittests (Python 3.8)',
diff --git a/tests/wpt/web-platform-tests/tools/wpt/browser.py b/tests/wpt/web-platform-tests/tools/wpt/browser.py
index bf1958fab99..c9a5353ab4f 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/browser.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/browser.py
@@ -41,6 +41,14 @@ def handle_remove_readonly(func, path, exc):
raise
+def get_ext(filename):
+ """Get the extension from a filename with special handling for .tar.foo"""
+ name, ext = os.path.splitext(filename)
+ if name.endswith(".tar"):
+ ext = ".tar%s" % ext
+ return ext
+
+
class Browser(object):
__metaclass__ = ABCMeta
@@ -48,8 +56,13 @@ class Browser(object):
self.logger = logger
@abstractmethod
- def download(self, dest=None, channel=None):
- """Download a package or installer for the browser"""
+ def download(self, dest=None, channel=None, rename=None):
+ """Download a package or installer for the browser
+ :param dest: Directory in which to put the dowloaded package
+ :param channel: Browser channel to download
+ :param rename: Optional name for the downloaded package; the original
+ extension is preserved.
+ """
return NotImplemented
@abstractmethod
@@ -133,7 +146,7 @@ class Firefox(Browser):
return dest
- def download(self, dest=None, channel="nightly"):
+ def download(self, dest=None, channel="nightly", rename=None):
product = {
"nightly": "firefox-nightly-latest-ssl",
"beta": "firefox-beta-latest-ssl",
@@ -177,6 +190,9 @@ class Firefox(Browser):
if not filename:
filename = "firefox.tar.bz2"
+ if rename:
+ filename = "%s%s" % (rename, get_ext(filename))
+
installer_path = os.path.join(dest, filename)
with open(installer_path, "wb") as f:
@@ -441,7 +457,7 @@ class FirefoxAndroid(Browser):
product = "firefox_android"
requirements = "requirements_firefox.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
if dest is None:
dest = os.pwd
@@ -464,7 +480,10 @@ class FirefoxAndroid(Browser):
(task_id, "public/build/geckoview-androidTest.apk"))
resp.raise_for_status()
- apk_path = os.path.join(dest, "geckoview-androidTest.apk")
+ filename = "geckoview-androidTest.apk"
+ if rename:
+ filename = "%s%s" % (rename, get_ext(filename)[1])
+ apk_path = os.path.join(dest, filename)
with open(apk_path, "wb") as f:
f.write(resp.content)
@@ -500,7 +519,7 @@ class Chrome(Browser):
product = "chrome"
requirements = "requirements_chrome.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -658,7 +677,7 @@ class ChromeAndroidBase(Browser):
super(ChromeAndroidBase, self).__init__(logger)
self.device_serial = None
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -766,7 +785,7 @@ class ChromeiOS(Browser):
product = "chrome_ios"
requirements = "requirements_chrome_ios.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -802,7 +821,7 @@ class Opera(Browser):
self.logger.warning("Unable to find the browser binary.")
return None
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -874,7 +893,7 @@ class EdgeChromium(Browser):
edgedriver_name = "msedgedriver"
requirements = "requirements_edge_chromium.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -975,7 +994,7 @@ class Edge(Browser):
product = "edge"
requirements = "requirements_edge.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -1009,7 +1028,7 @@ class InternetExplorer(Browser):
product = "ie"
requirements = "requirements_ie.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -1037,7 +1056,7 @@ class Safari(Browser):
product = "safari"
requirements = "requirements_safari.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -1107,14 +1126,15 @@ class Servo(Browser):
url = "https://download.servo.org/nightly/%s/servo-latest%s" % (platform, extension)
return get(url)
- def download(self, dest=None, channel="nightly"):
+ def download(self, dest=None, channel="nightly", rename=None):
if dest is None:
dest = os.pwd
resp = self._get(dest, channel)
_, extension, _ = self.platform_components()
- with open(os.path.join(dest, "servo-latest%s" % (extension,)), "w") as f:
+ filename = rename if rename is not None else "servo-latest"
+ with open(os.path.join(dest, "%s%s" % (filename, extension,)), "w") as f:
f.write(resp.content)
def install(self, dest=None, channel="nightly"):
@@ -1161,7 +1181,7 @@ class Sauce(Browser):
product = "sauce"
requirements = "requirements_sauce.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -1186,7 +1206,7 @@ class WebKit(Browser):
product = "webkit"
requirements = "requirements_webkit.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
@@ -1252,7 +1272,7 @@ class Epiphany(Browser):
product = "epiphany"
requirements = "requirements_epiphany.txt"
- def download(self, dest=None, channel=None):
+ def download(self, dest=None, channel=None, rename=None):
raise NotImplementedError
def install(self, dest=None, channel=None):
diff --git a/tests/wpt/web-platform-tests/tools/wpt/install.py b/tests/wpt/web-platform-tests/tools/wpt/install.py
index 4a368f9a4d6..6eb59f814bf 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/install.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/install.py
@@ -43,6 +43,9 @@ def get_parser():
'latest browser release on the selected channel.')
parser.add_argument('--download-only', action="store_true",
help="Download the selected component but don't install it")
+ parser.add_argument('--rename', action="store", default=None,
+ help="Filename, excluding extension for downloaded archive "
+ "(only with --download-only)")
parser.add_argument('-d', '--destination',
help='filesystem directory to place the component')
return parser
@@ -75,10 +78,11 @@ def run(venv, **kwargs):
"No --destination argument, and no default for the environment")
install(browser, kwargs["component"], destination, channel,
- download_only=kwargs["download_only"])
+ download_only=kwargs["download_only"], rename=kwargs["rename"])
-def install(name, component, destination, channel="nightly", logger=None, download_only=False):
+def install(name, component, destination, channel="nightly", logger=None, download_only=False,
+ rename=None):
if logger is None:
import logging
logger = logging.getLogger("install")
@@ -90,6 +94,9 @@ def install(name, component, destination, channel="nightly", logger=None, downlo
subclass = getattr(browser, name.title())
sys.stdout.write('Now installing %s %s...\n' % (name, component))
- path = getattr(subclass(logger), method)(dest=destination, channel=channel)
+ kwargs = {}
+ if download_only and rename:
+ kwargs["rename"] = rename
+ path = getattr(subclass(logger), method)(dest=destination, channel=channel, **kwargs)
if path:
sys.stdout.write('Binary %s as %s\n' % ("downloaded" if download_only else "installed", path,))
diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html
index ac95d9e64de..440d2a88b93 100644
--- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-createHTMLDocument.tentative.html
@@ -36,7 +36,7 @@ function doc_test(doc_type, test_fn, description) {
for (let doc_type in doc_types) {
doc_test(doc_type, doc => {
assert_throws_js(TypeError,
- _ => { doc.createElement("script").textContent = "2+2"; });
+ _ => { doc.createElement("script").textContent = "2+2"; });
}, "Trusted Type assignment is blocked." );
doc_test(doc_type, doc => {
@@ -45,7 +45,7 @@ for (let doc_type in doc_types) {
doc.body.innerHTML = value;
assert_equals(doc.body.textContent, "hello");
assert_throws_js(TypeError,
- _ => { doc.body.innerHTML = "world"; });
+ _ => { doc.body.innerHTML = "world"; });
}, "Trusted Type instances created in the main doc can be used.");
}
diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html
index 9a895ffa2ad..afb2f5f7c4b 100644
--- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names-list.tentative.html
@@ -9,14 +9,14 @@
test(t => {
trustedTypes.createPolicy("a", {}),
assert_throws_js(TypeError,
- _ => trustedTypes.createPolicy("a", {}),
- "Duplicate name");
+ _ => trustedTypes.createPolicy("a", {}),
+ "Duplicate name");
trustedTypes.createPolicy("b", {}),
assert_throws_js(TypeError,
- _ => trustedTypes.createPolicy("d", {}),
- "Invalid name.");
+ _ => trustedTypes.createPolicy("d", {}),
+ "Invalid name.");
}, "TrustedTypePolicyFactory and policy list in CSP.");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html
index e817cf145a2..decce535646 100644
--- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-duplicate-names.tentative.html
@@ -19,7 +19,7 @@ test(t => {
let def = trustedTypes.createPolicy("default", {});
assert_throws_js(TypeError,
- _ => trustedTypes.createPolicy("default", {}));
+ _ => trustedTypes.createPolicy("default", {}));
}, "policy - duplicate names");
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html
index 90007168a13..d98b457f6aa 100644
--- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html
+++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-eval-reporting.tentative.https.html
@@ -71,7 +71,7 @@
.then(promise_violation("require-trusted-types-for 'script'"))
.then(promise_flush());
assert_throws_js(EvalError,
- _ => eval('beacon="should not run"'));
+ _ => eval('beacon="should not run"'));
assert_equals(beacon, 'never_overwritten');
flush();
return p;
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js
index a0eaa3fb87d..a523acc7925 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js
@@ -25,7 +25,7 @@ test(() => {
];
for (const argument of invalidArguments) {
assert_throws_js(TypeError, () => WebAssembly.validate(argument),
- `validate(${format_value(argument)})`);
+ `validate(${format_value(argument)})`);
}
}, "Invalid arguments");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js
index cb287da4e9a..270149ec144 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js
@@ -74,8 +74,8 @@ test(() => {
];
for (const invalidArgument of invalidArguments) {
assert_throws_js(TypeError,
- () => new WebAssembly.Global(invalidArgument),
- `new Global(${format_value(invalidArgument)})`);
+ () => new WebAssembly.Global(invalidArgument),
+ `new Global(${format_value(invalidArgument)})`);
}
}, "Invalid descriptor argument");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js
index 745c3f84951..06c6d7a88c0 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js
@@ -34,7 +34,7 @@ test(() => {
];
for (const argument of invalidArguments) {
assert_throws_js(TypeError, () => new WebAssembly.Instance(argument),
- `new Instance(${format_value(argument)})`);
+ `new Instance(${format_value(argument)})`);
}
}, "Non-Module arguments");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js
index 8bd606e3212..03eed527083 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js
@@ -54,8 +54,8 @@ test(() => {
];
for (const invalidArgument of invalidArguments) {
assert_throws_js(TypeError,
- () => new WebAssembly.Memory(invalidArgument),
- `new Memory(${format_value(invalidArgument)})`);
+ () => new WebAssembly.Memory(invalidArgument),
+ `new Memory(${format_value(invalidArgument)})`);
}
}, "Invalid descriptor argument");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js
index 1fffb6cd4f3..b6f03c73b5d 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js
@@ -39,7 +39,7 @@ test(() => {
];
for (const argument of invalidArguments) {
assert_throws_js(TypeError, () => new WebAssembly.Module(argument),
- `new Module(${format_value(argument)})`);
+ `new Module(${format_value(argument)})`);
}
}, "Invalid arguments");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js
index 298d89604cf..8c215d17bd2 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js
@@ -43,7 +43,7 @@ test(() => {
];
for (const argument of invalidArguments) {
assert_throws_js(TypeError, () => WebAssembly.Module.customSections(argument, ""),
- `customSections(${format_value(argument)})`);
+ `customSections(${format_value(argument)})`);
}
}, "Non-Module arguments");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js
index 83f97dd67a1..1329c6a6021 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js
@@ -52,7 +52,7 @@ test(() => {
];
for (const argument of invalidArguments) {
assert_throws_js(TypeError, () => WebAssembly.Module.exports(argument),
- `exports(${format_value(argument)})`);
+ `exports(${format_value(argument)})`);
}
}, "Non-Module arguments");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js
index 91e4be33aca..9a7d6115986 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js
@@ -58,7 +58,7 @@ test(() => {
];
for (const argument of invalidArguments) {
assert_throws_js(TypeError, () => WebAssembly.Module.imports(argument),
- `imports(${format_value(argument)})`);
+ `imports(${format_value(argument)})`);
}
}, "Non-Module arguments");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js
index c42a446a75d..b1aeaf1a65d 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js
@@ -7,7 +7,7 @@ function assert_equal_to_array(table, expected, message) {
assert_equals(table.get(i), expected[i], `${message}: table.get(${i} of ${expected.length})`);
}
assert_throws_js(RangeError, () => table.get(expected.length),
- `${message}: table.get(${expected.length} of ${expected.length})`);
+ `${message}: table.get(${expected.length} of ${expected.length})`);
assert_throws_js(RangeError, () => table.get(expected.length + 1),
- `${message}: table.get(${expected.length + 1} of ${expected.length})`);
+ `${message}: table.get(${expected.length + 1} of ${expected.length})`);
}
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js
index a494a9e559b..5c9a6f13d91 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js
@@ -48,8 +48,8 @@ test(() => {
];
for (const invalidArgument of invalidArguments) {
assert_throws_js(TypeError,
- () => new WebAssembly.Table(invalidArgument),
- `new Table(${format_value(invalidArgument)})`);
+ () => new WebAssembly.Table(invalidArgument),
+ `new Table(${format_value(invalidArgument)})`);
}
}, "Invalid descriptor argument");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js
index 175f30fbcad..4e0a5f8c104 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js
@@ -150,7 +150,7 @@ test(() => {
];
for (const argument of invalidArguments) {
assert_throws_js(TypeError, () => table.set(0, argument),
- `set(${format_value(argument)})`);
+ `set(${format_value(argument)})`);
}
assert_equal_to_array(table, [null]);
}, "Setting non-function");
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html
index 40cb2634e41..8d45cd65199 100644
--- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html
+++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/commitStyles.html
@@ -211,6 +211,54 @@ promise_test(async t => {
const div = createDiv(t);
div.style.opacity = '0.1';
+ const animA = div.animate(
+ { opacity: '0.2', composite: 'add' },
+ { duration: 1, fill: 'forwards' }
+ );
+ const animB = div.animate(
+ { opacity: '0.2', composite: 'add' },
+ { duration: 1, fill: 'forwards' }
+ );
+ const animC = div.animate(
+ { opacity: '0.3', composite: 'add' },
+ { duration: 1, fill: 'forwards' }
+ );
+
+ animA.persist();
+ animB.persist();
+ await animB.finished;
+
+ // The error cases are similar to the above test with one additional case;
+ // verifying that the animations composite on top of the correct underlying
+ // base style.
+ //
+ // Expected result:
+ //
+ // <underlying> + animA + animB = 0.5
+ //
+ // Additional error results:
+ //
+ // <underlying> + animA + animB + animC + animA + animB = 1.0 (saturates)
+ // (Added to the computed value instead of underlying value when
+ // resolving)
+ //
+ // animA + animB = 0.4
+ // Failed to composite on top of underlying value.
+ //
+
+ animB.commitStyles();
+
+ animA.cancel();
+ animB.cancel();
+ animC.cancel();
+
+ assert_numeric_style_equals(getComputedStyle(div).opacity, 0.5);
+}, 'Commit composites on top of the underlying value');
+
+promise_test(async t => {
+ const div = createDiv(t);
+ div.style.opacity = '0.1';
+
// Setup animation
const animation = div.animate(
{ opacity: 0.2 },
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onremove.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onremove.html
new file mode 100644
index 00000000000..d7709949f2a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/onremove.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Animation.onremove</title>
+<link rel="help" href="https://drafts.csswg.org/web-animations/#dom-animation-onremove">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../../testcommon.js"></script>
+<body>
+<div id="log"></div>
+<script>
+'use strict';
+
+async_test(t => {
+ const div = createDiv(t);
+ const animA = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' });
+ const animB = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' });
+
+ let finishedTimelineTime = null;
+ animB.onfinish = event => {
+ finishedTimelineTime = event.timelineTime;
+ };
+
+ animA.onremove = t.step_func_done(event => {
+ assert_equals(animA.replaceState, 'removed');
+ assert_equals(event.currentTime, 1);
+ assert_true(finishedTimelineTime != null, 'finished event fired');
+ assert_true(event.timelineTime == finishedTimelineTime,
+ 'timeline time is set');
+ });
+
+}, 'onremove event is fired when replaced animation is removed.');
+
+promise_test(async t => {
+ const div = createDiv(t);
+ const animA = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' });
+ const animB = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' });
+ const animC = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' });
+ const animD = div.animate({ opacity: 1 }, { duration: 1, fill: 'forwards' });
+
+ const removed = [];
+
+ animA.onremove = () => { removed.push('A'); };
+ animB.onremove = () => { removed.push('B'); };
+ animC.onremove = () => { removed.push('C'); };
+
+ animD.onremove = event => {
+ assert_unreached('onremove event should not be fired');
+ };
+
+ await waitForAnimationFrames(2);
+
+ assert_equals(removed.join(''), 'ABC');
+
+}, 'onremove events are fired in the correct order');
+
+</script>
+</body>
+
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html
index 74d0724ef42..1d1bd5fd89a 100644
--- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html
+++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pause.html
@@ -74,9 +74,9 @@ test(t => {
animation.playbackRate = -1;
assert_throws_dom('InvalidStateError',
- () => { animation.pause(); },
- 'Expect InvalidStateError exception on calling pause() ' +
- 'from idle with a negative playbackRate and ' +
+ () => { animation.pause(); },
+ 'Expect InvalidStateError exception on calling pause() ' +
+ 'from idle with a negative playbackRate and ' +
'infinite-duration animation');
}, 'pause() from idle with a negative playbackRate and endless effect');
diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html
index d29b67b7992..6c5d604b1e4 100644
--- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html
+++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/play.html
@@ -22,9 +22,9 @@ promise_test(t => {
animation.playbackRate = -1;
assert_throws_dom('InvalidStateError',
- () => { animation.play(); },
- 'Expected InvalidStateError exception on calling play() ' +
- 'with a negative playbackRate and infinite-duration ' +
+ () => { animation.play(); },
+ 'Expected InvalidStateError exception on calling play() ' +
+ 'with a negative playbackRate and infinite-duration ' +
'animation');
});
}, 'play() throws when seeking an infinite-duration animation played in ' +
diff --git a/tests/wpt/web-platform-tests/webmessaging/with-ports/027.html b/tests/wpt/web-platform-tests/webmessaging/with-ports/027.html
index 78ea225eb75..71583512581 100644
--- a/tests/wpt/web-platform-tests/webmessaging/with-ports/027.html
+++ b/tests/wpt/web-platform-tests/webmessaging/with-ports/027.html
@@ -19,8 +19,8 @@ test(() => {
channel[1] = channel.port2;
channel.length = 2;
assert_throws_js(TypeError,
- () => { postMessage('', '*', channel) },
- 'Old-style WebIDL arrays must throw a type error');
+ () => { postMessage('', '*', channel) },
+ 'Old-style WebIDL arrays must throw a type error');
}, "Old-style array objects");
</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html b/tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html
index be6e3c6e59d..ac27c5139cc 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html
@@ -181,7 +181,7 @@
pc.removeTrack(sender);
pc.close();
assert_throws_dom('InvalidStateError', () =>
- dtmfSender.insertDTMF('123'));
+ dtmfSender.insertDTMF('123'));
});
}, 'insertDTMF() after remove and close should reject');
diff --git a/tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js b/tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js
index 1442d821148..31febe9d9fd 100644
--- a/tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js
+++ b/tests/wpt/web-platform-tests/websockets/stream-tentative/close.any.js
@@ -51,7 +51,7 @@ promise_test(async () => {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
assert_throws_js(TypeError, () => wss.close(true),
- 'close should throw a TypeError');
+ 'close should throw a TypeError');
}, 'close(true) should throw a TypeError');
promise_test(async () => {
@@ -59,7 +59,7 @@ promise_test(async () => {
await wss.connection;
const reason = '.'.repeat(124);
assert_throws_dom('SyntaxError', () => wss.close({ reason }),
- 'close should throw a TypeError');
+ 'close should throw a TypeError');
}, 'close() with an overlong reason should throw');
promise_test(t => {
@@ -77,7 +77,7 @@ for (const invalidCode of [999, 1001, 2999, 5000]) {
const wss = new WebSocketStream(ECHOURL);
await wss.connection;
assert_throws_dom('InvalidAccessError', () => wss.close({ code: invalidCode }),
- 'close should throw a TypeError');
+ 'close should throw a TypeError');
}, `close() with invalid code ${invalidCode} should throw`);
}
diff --git a/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html b/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html
index 3cbbd6ca3db..1f812d3a1f0 100644
--- a/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html
+++ b/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html
@@ -38,9 +38,6 @@ const fakeDeviceInitParams = {
// |refSpaceName| - XRReferenceSpaceType - either 'local', 'local-floor' or 'viewer'.
let testFunctionGenerator = function(ray, entityTypes, expectedPoses, refSpaceName) {
const testFunction = function(session, fakeDeviceController, t) {
- assert_equals(session.mode, 'immersive-ar');
- assert_not_equals(session.environmentBlendMode, 'opaque');
-
return Promise.all([
session.requestReferenceSpace('local'),
session.requestReferenceSpace('viewer'),
@@ -109,6 +106,9 @@ const localFloorBasedTestFunctionGenerator = function(ray, entityTypes, expected
return testFunctionGenerator(ray, entityTypes, expectedPoses, 'local-floor');
};
+// All test cases require local-floor and hit-test.
+const sessionInit = { 'requiredFeatures': ['local-floor', 'hit-test'] };
+
// Pose of the first expected hit test result - straight ahead of the viewer, viewer-facing.
const pose_1 = {
position: {x: 0.0, y: 1.0, z: -2.5, w: 1.0},
@@ -125,11 +125,11 @@ const pose_1 = {
xr_session_promise_test(
"Ensures subscription to hit test works with viewer space - straight ahead - plane",
viewerBasedTestFunctionGenerator(new XRRay(), ["plane"], [pose_1]),
- fakeDeviceInitParams, 'immersive-ar', { 'requiredFeatures': ['local-floor'] });
+ fakeDeviceInitParams, 'immersive-ar', sessionInit);
xr_session_promise_test("Ensures subscription to hit test works with viewer space - straight up - plane - no results",
viewerBasedTestFunctionGenerator(new XRRay({}, {x: 0.0, y: 1.0, z : 0.0}), ["plane"], []),
- fakeDeviceInitParams, 'immersive-ar', { 'requiredFeatures': ['local-floor'] });
+ fakeDeviceInitParams, 'immersive-ar', sessionInit);
const pose_2 = {
position: {x: 0.0, y: 2.0, z: 0.0, w: 1.0},
@@ -142,8 +142,7 @@ const pose_2 = {
xr_session_promise_test("Ensures subscription to hit test works with viewer space - straight up - point",
viewerBasedTestFunctionGenerator(new XRRay({}, {x: 0.0, y: 1.0, z : 0.0}), ["point"], [pose_2]),
- fakeDeviceInitParams,
- 'immersive-ar', { 'requiredFeatures': ['local-floor'] });
+ fakeDeviceInitParams, 'immersive-ar', sessionInit);
const pose_3 = {
position: {x: 0.0, y: 0.0, z: -2.5, w: 1.0},
@@ -156,8 +155,7 @@ const pose_3 = {
xr_session_promise_test("Ensures subscription to hit test works with local space",
localBasedTestFunctionGenerator(new XRRay(), ["plane"], [pose_3]),
- fakeDeviceInitParams,
- 'immersive-ar', { 'requiredFeatures': ['local-floor'] });
+ fakeDeviceInitParams, 'immersive-ar', sessionInit);
const pose_4 = {
position: {x: 0.0, y: 0.25, z: -2.5, w: 1.0},
@@ -170,7 +168,6 @@ const pose_4 = {
xr_session_promise_test("Ensures subscription to hit test works with local-floor space",
localFloorBasedTestFunctionGenerator(new XRRay(), ["plane"], [pose_4]),
- fakeDeviceInitParams,
- 'immersive-ar', { 'requiredFeatures': ['local-floor'] });
+ fakeDeviceInitParams, 'immersive-ar', sessionInit);
</script>
diff --git a/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states.https.html b/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states.https.html
new file mode 100644
index 00000000000..98947da2637
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states.https.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/webxr_util.js"></script>
+<script src="../resources/webxr_test_asserts.js"></script>
+<script src="../resources/webxr_test_constants.js"></script>
+<script src="../resources/webxr_test_constants_fake_world.js"></script>
+<canvas />
+
+<script>
+
+const fakeDeviceInitParams = {
+ supportedModes: ["immersive-ar"],
+ views: VALID_VIEWS,
+ supportedFeatures: ALL_FEATURES,
+};
+
+// |shouldSucceed| - true if the hit test request is expected to succeed, false otherwise
+// |endSession| - true if the test case should call session.end() prior to requesting hit test
+const testFunctionGenerator = function(shouldSucceed, endSession) {
+ const testFunction = function(session, fakeDeviceController, t) {
+ session.requestReferenceSpace('viewer').then((viewerRefSpace) => {
+
+ const hitTestOptionsInit = {
+ space: viewerRefSpace,
+ offsetRay: new XRRay(),
+ };
+
+ if(endSession) {
+ session.end();
+ }
+
+ return session.requestHitTestSource(hitTestOptionsInit).then((hitTestSource) => {
+ t.step(() => {
+ assert_true(shouldSucceed,
+ "`requestHitTestSource` succeeded when it was expected to fail");
+ });
+ }).catch((error) => {
+ t.step(() => {
+ assert_false(shouldSucceed,
+ "`requestHitTestSource` failed when it was expected to succeed, error: " + error);
+ });
+ });
+ });
+ };
+
+ return testFunction;
+};
+
+xr_session_promise_test("Hit test subscription succeeds if the feature was requested",
+ testFunctionGenerator(/*shouldSucceed=*/true, /*endSession=*/false),
+ fakeDeviceInitParams,
+ 'immersive-ar', { 'requiredFeatures': ['hit-test'] });
+
+xr_session_promise_test("Hit test subscription fails if the feature was not requested",
+ testFunctionGenerator(/*shouldSucceed=*/false, /*endSession=*/false),
+ fakeDeviceInitParams,
+ 'immersive-ar', {});
+
+xr_session_promise_test("Hit test subscription fails if the feature was requested but the session already ended",
+ testFunctionGenerator(/*shouldSucceed=*/false, /*endSession=*/true),
+ fakeDeviceInitParams,
+ 'immersive-ar', { 'requiredFeatures': ['hit-test'] });
+
+</script>
diff --git a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js
index 553a8127fcf..d5ee1e7391c 100644
--- a/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js
+++ b/tests/wpt/web-platform-tests/webxr/resources/webxr_test_constants.js
@@ -126,6 +126,7 @@ const ALL_FEATURES = [
"local-floor",
"bounded-floor",
"unbounded",
+ "hit-test",
];
const TRACKED_IMMERSIVE_DEVICE = {
diff --git a/tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html b/tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html
index 5347891d418..6298dd934e1 100644
--- a/tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html
+++ b/tests/wpt/web-platform-tests/workers/SharedWorker-constructor.html
@@ -6,23 +6,23 @@
test(() => {
assert_throws_js(Error,
- function() {
- new SharedWorker({toString:function(){throw new Error()}}, "name") },
- "toString exception not propagagted");
+ function() {
+ new SharedWorker({toString:function(){throw new Error()}}, "name") },
+ "toString exception not propagated");
}, "Test toString exception propagated correctly.");
test(() => {
assert_throws_js(RangeError,
- function() {
- var foo = {toString:function(){new Worker(foo)}}
- new SharedWorker(foo, name); },
- "Trying to create workers recursively did not result in an exception.");
+ function() {
+ var foo = {toString:function(){new Worker(foo)}}
+ new SharedWorker(foo, name); },
+ "Trying to create workers recursively did not result in an exception.");
}, "Test recursive worker creation results in exception.");
test(() => {
assert_throws_js(TypeError,
- function() { new SharedWorker(); },
- "Invoking SharedWorker constructor without arguments did not result in an exception.");
+ function() { new SharedWorker(); },
+ "Invoking SharedWorker constructor without arguments did not result in an exception.");
}, "Test SharedWorker creation without arguments results in exception.");
test(() => {
diff --git a/tests/wpt/web-platform-tests/workers/Worker-formdata.any.js b/tests/wpt/web-platform-tests/workers/Worker-formdata.any.js
index f14d4ff41a2..389d34b1c31 100644
--- a/tests/wpt/web-platform-tests/workers/Worker-formdata.any.js
+++ b/tests/wpt/web-platform-tests/workers/Worker-formdata.any.js
@@ -14,6 +14,6 @@ test(() => {
formData.append('key', blob, 'filename');
assert_throws_dom("DataCloneError",
- function() { postMessage(formData) },
- "Trying to clone formdata inside a postMessage results in an exception." );
+ function() { postMessage(formData) },
+ "Trying to clone formdata inside a postMessage results in an exception." );
},'Test FormData interface object');
diff --git a/tests/wpt/web-platform-tests/workers/Worker-multi-port.html b/tests/wpt/web-platform-tests/workers/Worker-multi-port.html
index 725745b0ea4..587176e9fc1 100644
--- a/tests/wpt/web-platform-tests/workers/Worker-multi-port.html
+++ b/tests/wpt/web-platform-tests/workers/Worker-multi-port.html
@@ -39,45 +39,45 @@ async_test(function(t) {
test(() => {
var worker = new Worker("support/Worker-thread-multi-port.js");
assert_throws_js(TypeError,
- function() { worker.postMessage(); },
- 'Empty postMessage should throw exception.');
+ function() { worker.postMessage(); },
+ 'Empty postMessage should throw exception.');
}, 'Test empty postMessage throws exception.');
test(() => {
var worker = new Worker("support/Worker-thread-multi-port.js");
var channel = new MessageChannel();
assert_throws_js(TypeError,
- function() { worker.postMessage("null port",
- [channel.port1, null,
- channel.port2]); },
- 'postMessage with null ports should throw exception.');
+ function() { worker.postMessage("null port",
+ [channel.port1, null,
+ channel.port2]); },
+ 'postMessage with null ports should throw exception.');
}, 'Test postMessage with null ports throws exception.');
test(() => {
var worker = new Worker("support/Worker-thread-multi-port.js")
var channel = new MessageChannel();
assert_throws_dom('DataCloneError',
- function() { worker.postMessage("notAPort",
- [channel.port1, {},
- channel.port2]); },
- 'postMessage with incorrect ports should throw exception.');
+ function() { worker.postMessage("notAPort",
+ [channel.port1, {},
+ channel.port2]); },
+ 'postMessage with incorrect ports should throw exception.');
}, 'Test postMessage with incorrect ports throws exception');
test(() => {
var worker = new Worker("support/Worker-thread-multi-port.js");
assert_throws_dom('DataCloneError',
- function() { worker.postMessage("notASequence", [{length: 3}]) },
- 'postMessage without sequence should throw exception.');
+ function() { worker.postMessage("notASequence", [{length: 3}]) },
+ 'postMessage without sequence should throw exception.');
}, 'Test postMessage without sequence throws exception');
async_test(function(t) {
var worker = new Worker("support/Worker-thread-multi-port.js");
var channel = new MessageChannel();
assert_throws_dom('DataCloneError',
- function() { worker.postMessage("notAPort",
- [channel.port1, {},
- channel.port2]); },
- 'postMessage with incorrect ports should throw exception.');
+ function() { worker.postMessage("notAPort",
+ [channel.port1, {},
+ channel.port2]); },
+ 'postMessage with incorrect ports should throw exception.');
worker.onmessage = t.step_func_done(function(evt) {
assert_true(evt.data.startsWith('PASS'));
});
diff --git a/tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html b/tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html
index 524a0982a9e..6d6843b77b6 100644
--- a/tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html
+++ b/tests/wpt/web-platform-tests/workers/constructors/Worker/Worker-constructor.html
@@ -6,9 +6,9 @@
test(() => {
assert_throws_js(Error,
- function() {
- new Worker({toString:function(){throw new Error()}})},
- 'toString exception should be propagated');
+ function() {
+ new Worker({toString:function(){throw new Error()}})},
+ 'toString exception should be propagated');
}, 'Test toString propagation exception.');
test(() => {
@@ -23,9 +23,9 @@ test(() => {
test(() => {
assert_throws_js(TypeError,
- function() { new Worker(); },
- 'invoking Worker constructor without arguments should result' +
- 'in an exception.')
+ function() { new Worker(); },
+ 'invoking Worker constructor without arguments should result ' +
+ 'in an exception.')
}, 'Test worker creation with no arguments');
async_test(t => {
@@ -38,9 +38,9 @@ async_test(t => {
test(() => {
assert_throws_dom("SyntaxError",
- function() { var worker = new Worker('http://invalid:123$'); },
- 'Invoking Worker constructor with invalid script URL should' +
- 'result in an exception.');
+ function() { var worker = new Worker('http://invalid:123$'); },
+ 'Invoking Worker constructor with invalid script URL should ' +
+ 'result in an exception.');
}, 'Test invalid script URL.');
async_test(t => {
diff --git a/tests/wpt/web-platform-tests/workers/modules/shared-worker-import-data-url.any.js b/tests/wpt/web-platform-tests/workers/modules/shared-worker-import-data-url.any.js
new file mode 100644
index 00000000000..81df965b9e1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/workers/modules/shared-worker-import-data-url.any.js
@@ -0,0 +1,24 @@
+// META: global=!worker
+// META: script=/workers/modules/resources/import-test-cases.js
+
+// Imports |testCase.scriptURL| on a shared worker loaded from a data URL,
+// and waits until the list of imported modules is sent from the worker. Passes
+// if the list is equal to |testCase.expectation|.
+function import_data_url_test(testCase) {
+ promise_test(async () => {
+ // The Access-Control-Allow-Origin header is necessary because a worker
+ // loaded from a data URL has a null origin and import() on the worker
+ // without the header is blocked.
+ const importURL = new URL(testCase.scriptURL, location.href) +
+ '?pipe=header(Access-Control-Allow-Origin, *)';
+ const dataURL = `data:text/javascript,import "${importURL}";`;
+
+ const worker = new SharedWorker(dataURL, { type: 'module'});
+ worker.port.postMessage('Send message for tests from main script.');
+ const msgEvent =
+ await new Promise(resolve => worker.port.onmessage = resolve);
+ assert_array_equals(msgEvent.data, testCase.expectation);
+ }, testCase.description);
+}
+
+testCases.forEach(import_data_url_test);