From 55139554bae383d85dfe2f96a09d91af2e01da77 Mon Sep 17 00:00:00 2001 From: WPT Sync Bot Date: Sat, 25 Apr 2020 08:18:23 +0000 Subject: [PATCH] Update web-platform-tests to revision 78eae724c61bb01d858a01a324363e997ac66851 --- .../drawImage-from-blob.tentative.html.ini | 2 + .../url/url-in-tags-revoke.window.js.ini | 2 +- .../class-string-interface.any.js.ini | 33 + ...tring-iterator-prototype-object.any.js.ini | 33 + ...ring-named-properties-object.window.js.ini | 13 + .../CSS2/floats/hit-test-floats-002.html.ini | 4 + .../CSS2/floats/hit-test-floats-003.html.ini | 4 + .../background-margin-iframe-root.html.ini | 2 + .../background-margin-root.html.ini | 2 + ...ackground-margin-transformed-root.html.ini | 2 + .../css/css-flexbox/gap-011.html.ini} | 2 +- .../css/css-flexbox/gap-012.html.ini | 2 + .../css/css-flexbox/gap-013.html.ini | 2 + .../css/css-flexbox/gap-014.html.ini | 2 + .../css/css-flexbox/gap-015.html.ini | 2 + .../css/css-flexbox/gap-016.html.ini | 2 + ...ckface-visibility-hidden-animated.html.ini | 2 + .../transform-box/fill-box-001.html.ini | 2 + .../transform-box/fill-box-002.html.ini | 2 + .../transform-percent-010.html.ini | 2 + .../transform-scale-hittest.html.ini | 3 - .../properties-value-inherit-002.html.ini | 547 +++ ...ryList-addListener-removeListener.html.ini | 3 + .../elementsFromPoint-invalid-cases.html.ini | 4 - .../fetch/content-type/response.window.js.ini | 13 +- .../fetch/content-type/script.window.js.ini | 6 +- .../nosniff/parsing-nosniff.window.js.ini | 3 + .../traverse_the_history_2.html.ini} | 2 +- ...ml.ini => traverse_the_history_3.html.ini} | 2 +- .../html/dom/idlharness.https.html.ini | 3503 +++++++++++++++++ .../supported-elements.html.ini | 7 +- ...rame_sandbox_popups_nonescaping-1.html.ini | 2 +- ...rame_sandbox_popups_nonescaping-2.html.ini | 2 +- .../promise-job-entry.html.ini | 5 +- .../wasm/jsapi/proto-from-ctor-realm.html.ini | 226 ++ .../audiobuffersource-multi-channels.html.ini | 3 + .../webxr/hit-test/idlharness.https.html.ini | 73 + .../webxr/idlharness.https.window.js.ini | 24 + .../workers/WorkerGlobalScope-close.html.ini | 4 - .../Worker/Worker-constructor.html.ini | 2 + .../xhr/send-redirect-to-cors.htm.ini | 6 + .../drawImage-from-blob.tentative.html.ini | 2 + .../url/url-in-tags-revoke.window.js.ini | 2 +- tests/wpt/metadata/MANIFEST.json | 1713 ++++++-- .../class-string-interface.any.js.ini | 33 + ...tring-iterator-prototype-object.any.js.ini | 33 + ...ring-named-properties-object.window.js.ini | 13 + .../CSS2/floats/hit-test-floats-002.html.ini | 4 + .../CSS2/floats/hit-test-floats-003.html.ini | 4 + .../background-margin-iframe-root.html.ini | 2 + .../background-margin-root.html.ini | 2 + ...ackground-margin-transformed-root.html.ini | 2 + .../metadata/css/css-flexbox/gap-011.html.ini | 2 + .../metadata/css/css-flexbox/gap-012.html.ini | 2 + .../metadata/css/css-flexbox/gap-013.html.ini | 2 + .../metadata/css/css-flexbox/gap-014.html.ini | 2 + .../metadata/css/css-flexbox/gap-015.html.ini | 2 + .../metadata/css/css-flexbox/gap-016.html.ini | 2 + ...ckface-visibility-hidden-animated.html.ini | 2 + .../transform-box/fill-box-001.html.ini | 2 + .../transform-box/fill-box-002.html.ini | 2 + .../transform-percent-010.html.ini | 2 + .../transform-scale-hittest.html.ini | 3 - .../properties-value-inherit-002.html.ini | 36 + ...ryList-addListener-removeListener.html.ini | 3 + .../elementsFromPoint-invalid-cases.html.ini | 4 - .../fetch/content-type/response.window.js.ini | 13 +- .../fetch/content-type/script.window.js.ini | 6 +- .../nosniff/parsing-nosniff.window.js.ini | 3 + .../traverse_the_history_2.html.ini | 4 + .../traverse_the_history_3.html.ini | 4 + .../html/dom/idlharness.https.html.ini | 9 + .../supported-elements.html.ini | 7 +- ...rame_sandbox_popups_nonescaping-1.html.ini | 2 +- ...rame_sandbox_popups_nonescaping-2.html.ini | 2 +- .../promise-job-entry.html.ini | 5 +- .../wasm/jsapi/proto-from-ctor-realm.html.ini | 226 ++ .../audiobuffersource-multi-channels.html.ini | 3 + .../webxr/hit-test/idlharness.https.html.ini | 73 + .../webxr/idlharness.https.window.js.ini | 24 + .../workers/WorkerGlobalScope-close.html.ini | 4 - .../Worker/Worker-constructor.html.ini | 2 + .../xhr/send-redirect-to-cors.htm.ini | 6 + tests/wpt/web-platform-tests/.taskcluster.yml | 2 +- .../drawImage-from-blob.tentative.html | 37 + .../reference/drawImage-from-blob-ref.html | 10 + .../class-string-interface.any.js | 62 + ...ss-string-iterator-prototype-object.any.js | 50 + ...s-string-named-properties-object.window.js | 42 + .../interface-prototype-object.html | 12 - .../iterator-prototype-object.html | 11 +- .../web-platform-tests/bluetooth/README.md | 11 +- ...ter-absent-getAvailability.https.window.js | 3 +- ...pter-added-getAvailability.https.window.js | 3 +- ...owered-off-getAvailability.https.window.js | 3 +- ...powered-on-getAvailability.https.window.js | 3 +- ...-on-off-on-getAvailability.https.window.js | 3 +- ...er-removed-getAvailability.https.window.js | 3 +- ...iframe-getAvailability.sub.https.window.js | 3 +- .../characteristicProperties.https.window.js | 3 +- ...-characteristic-is-removed.https.window.js | 3 +- ...descriptor-get-same-object.https.window.js | 3 +- .../gen-service-is-removed.https.window.js | 3 +- ...istic-is-removed-with-uuid.https.window.js | 3 +- ...-characteristic-is-removed.https.window.js | 3 +- ...descriptor-get-same-object.https.window.js | 3 +- ...rvice-is-removed-with-uuid.https.window.js | 3 +- .../gen-service-is-removed.https.window.js | 3 +- .../characteristic-is-removed.https.window.js | 3 +- .../service-is-removed.https.window.js | 3 +- ...d-multiple-event-listeners.https.window.js | 3 +- .../characteristic-is-removed.https.window.js | 3 +- .../readValue/event-is-fired.https.window.js | 3 +- ...-characteristic-is-removed.https.window.js | 3 +- .../readValue/read-succeeds.https.window.js | 3 +- .../read-updates-value.https.window.js | 3 +- .../service-is-removed.https.window.js | 3 +- ...ame-from-2-characteristics.https.window.js | 3 +- .../service-same-object.https.window.js | 3 +- ...-characteristic-is-removed.https.window.js | 3 +- .../buffer-is-detached.https.window.js | 3 +- .../characteristic-is-removed.https.window.js | 3 +- ...-characteristic-is-removed.https.window.js | 3 +- .../service-is-removed.https.window.js | 3 +- .../writeValue/write-succeeds.https.window.js | 3 +- .../gen-service-is-removed.https.window.js | 3 +- .../readValue/read-succeeds.https.window.js | 3 +- .../buffer-is-detached.https.window.js | 3 +- .../gen-service-is-removed.https.window.js | 3 +- .../disconnected.https.window.js | 3 +- .../disconnected_gc.https.window.js | 3 +- ...ne-event-per-disconnection.https.window.js | 3 +- ...-during-disconnected-event.https.window.js | 3 +- ...nted-devices-with-services.https.window.js | 5 +- .../no-granted-devices.https.window.js | 5 +- ...me-bluetooth-device-object.https.window.js | 5 +- .../idl/idl-BluetoothDevice.https.html | 3 +- .../device-with-empty-name.https.html | 3 +- .../device-with-name.https.html | 3 +- .../optional-services-missing.https.html | 3 +- .../optional-services-present.https.html | 3 +- .../blocklisted-service-in-filter.https.html | 3 +- ...ted-service-in-optionalServices.https.html | 3 +- ...evice-name-longer-than-29-bytes.https.html | 3 +- .../empty-filter.https.html | 3 +- .../empty-filters-member.https.html | 3 +- .../empty-namePrefix.https.html | 3 +- .../empty-services-member.https.html | 3 +- .../filters-xor-acceptAllDevices.https.html | 3 +- ...ax-length-exceeded-name-unicode.https.html | 3 +- .../max-length-exceeded-name.https.html | 3 +- ...gth-exceeded-namePrefix-unicode.https.html | 3 +- .../max-length-exceeded-namePrefix.https.html | 3 +- .../max-length-name-unicode.https.html | 3 +- .../max-length-name.https.html | 3 +- .../max-length-namePrefix-unicode.https.html | 3 +- .../max-length-namePrefix.https.html | 3 +- .../no-arguments.https.html | 3 +- .../unicode-valid-length-name-name.https.html | 3 +- ...de-valid-length-name-namePrefix.https.html | 3 +- ...vice-in-optionalServices-member.https.html | 3 +- ...rong-service-in-services-member.https.html | 3 +- .../cross-origin-iframe.sub.https.html | 3 +- .../discovery-succeeds.https.html | 3 +- .../doesnt-consume-user-gesture.https.html | 3 +- .../requestDevice/filter-matches.https.html | 3 +- .../requestDevice/le-not-supported.https.html | 3 +- ...y-device-from-name-empty-filter.https.html | 3 +- .../not-processing-user-gesture.https.html | 3 +- .../radio-not-present.https.html | 3 +- .../request-from-iframe.https.html | 3 +- .../request-from-sandboxed-iframe.https.html | 3 +- .../requestDevice/same-device.https.html | 3 +- .../single-filter-single-service.https.html | 3 +- .../resources/bluetooth-fake-devices.js | 991 +++++ .../bluetooth/resources/bluetooth-helpers.js | 1022 ----- .../resources/bluetooth-scanning-helpers.js | 2 +- .../bluetooth/resources/bluetooth-test.js | 384 ++ .../script-tests/base_test_js.template | 3 +- .../connect/connection-succeeds.https.html | 3 +- ...e-collection-ran-during-success.https.html | 3 +- .../connect/get-same-gatt-server.https.html | 3 +- .../server/device-same-object.https.html | 3 +- .../connect-disconnect-twice.https.html | 3 +- .../server/disconnect/detach-gc.https.html | 3 +- .../disconnect-twice-in-a-row.https.html | 3 +- .../server/disconnect/gc-detach.https.html | 3 +- ...n-disconnect-called-before.https.window.js | 3 +- ...onnect-called-during-error.https.window.js | 3 +- ...nect-called-during-success.https.window.js | 3 +- ...onnect-invalidates-objects.https.window.js | 3 +- .../gen-disconnected-device.https.window.js | 3 +- ...-permission-absent-service.https.window.js | 3 +- ...complete-service-not-found.https.window.js | 3 +- ...ollection-ran-during-error.https.window.js | 3 +- ...lection-ran-during-success.https.window.js | 3 +- ...service-after-reconnection.https.window.js | 3 +- .../gen-get-same-object.https.window.js | 3 +- .../gen-invalid-service-name.https.window.js | 3 +- ...-permission-absent-service.https.window.js | 3 +- ...permission-for-any-service.https.window.js | 3 +- ...permission-present-service.https.window.js | 3 +- .../gen-service-not-found.https.window.js | 3 +- .../service-found.https.html | 3 +- .../two-iframes-from-same-origin.https.html | 3 +- .../blocklisted-services-with-uuid.https.html | 3 +- .../blocklisted-services.https.html | 3 +- .../correct-services.https.html | 3 +- ...ct-called-before-with-uuid.https.window.js | 3 +- ...n-disconnect-called-before.https.window.js | 3 +- ...led-during-error-with-uuid.https.window.js | 3 +- ...onnect-called-during-error.https.window.js | 3 +- ...d-during-success-with-uuid.https.window.js | 3 +- ...nect-called-during-success.https.window.js | 3 +- ...alidates-objects-with-uuid.https.window.js | 3 +- ...onnect-invalidates-objects.https.window.js | 3 +- ...connected-device-with-uuid.https.window.js | 3 +- .../gen-disconnected-device.https.window.js | 3 +- ...n-absent-service-with-uuid.https.window.js | 3 +- ...ervice-not-found-with-uuid.https.window.js | 3 +- ...ran-during-error-with-uuid.https.window.js | 3 +- ...ollection-ran-during-error.https.window.js | 3 +- ...n-during-success-with-uuid.https.window.js | 3 +- ...lection-ran-during-success.https.window.js | 3 +- ...ter-reconnection-with-uuid.https.window.js | 3 +- ...service-after-reconnection.https.window.js | 3 +- ...-get-same-object-with-uuid.https.window.js | 3 +- .../gen-get-same-object.https.window.js | 3 +- .../gen-invalid-service-name.https.window.js | 3 +- ...n-absent-service-with-uuid.https.window.js | 3 +- ...-for-any-service-with-uuid.https.window.js | 3 +- ...permission-for-any-service.https.window.js | 3 +- ...-present-service-with-uuid.https.window.js | 3 +- ...ervice-not-found-with-uuid.https.window.js | 3 +- .../services-found-with-uuid.https.html | 3 +- .../services-found.https.html | 3 +- .../services-not-found.https.html | 3 +- .../device-same-from-2-services.https.html | 3 +- .../service/device-same-object.https.html | 3 +- .../characteristic-found.https.html | 3 +- ...blocklisted-characteristic.https.window.js | 3 +- ...n-characteristic-not-found.https.window.js | 3 +- ...ollection-ran-during-error.https.window.js | 3 +- .../gen-get-same-object.https.window.js | 3 +- ...nvalid-characteristic-name.https.window.js | 3 +- .../gen-reconnect-during.https.window.js | 3 +- .../gen-service-is-removed.https.window.js | 3 +- .../blocklisted-characteristics.https.html | 3 +- ...characteristics-found-with-uuid.https.html | 3 +- .../characteristics-found.https.html | 3 +- .../characteristics-not-found.https.html | 3 +- ...d-characteristic-with-uuid.https.window.js | 3 +- ...ristic-not-found-with-uuid.https.window.js | 3 +- ...ran-during-error-with-uuid.https.window.js | 3 +- ...ollection-ran-during-error.https.window.js | 3 +- ...-get-same-object-with-uuid.https.window.js | 3 +- .../gen-get-same-object.https.window.js | 3 +- ...nvalid-characteristic-name.https.window.js | 3 +- ...reconnect-during-with-uuid.https.window.js | 3 +- .../gen-reconnect-during.https.window.js | 3 +- ...rvice-is-removed-with-uuid.https.window.js | 3 +- .../gen-service-is-removed.https.window.js | 3 +- .../accept-ch-and-redir-to-do-not-expect.py | 2 + .../accept-ch-and-redir-to-expect.py | 2 + .../resources/accept-ch-test.js | 59 +- .../resources/do-not-expect-received.py | 19 + .../resources/expect-received.py | 19 + ...same-origin-navigation-redirect.https.html | 19 + ...ame-origin-subresource-redirect.https.html | 19 + .../async-idlharness.https.html | 1 + .../animations/line-height-interpolation.html | 1 + .../background-margin-iframe-root-ref.html | 16 + .../background-margin-iframe-root.html | 15 + .../background-margin-root-ref.html | 14 + .../background-margin-root.html | 12 + ...ackground-margin-transformed-root-ref.html | 14 + .../background-margin-transformed-root.html | 13 + .../css/css-flexbox/gap-001-lr-ref.html | 1 - .../css/css-flexbox/gap-001-rl-ref.html | 1 - .../css/css-flexbox/gap-001-rtl-ref.html | 1 - .../css/css-flexbox/gap-002-lr-ref.html | 1 - .../css/css-flexbox/gap-002-rl-ref.html | 1 - .../css/css-flexbox/gap-011.html | 32 + .../css/css-flexbox/gap-012.html | 32 + .../css/css-flexbox/gap-013.html | 29 + .../css/css-flexbox/gap-014.html | 31 + .../css/css-flexbox/gap-015.html | 38 + .../css/css-flexbox/gap-016.html | 38 + .../at-property-animation.html | 108 + .../at-property-typedom.html | 64 + .../determine-registration.html | 280 +- ...ckface-visibility-hidden-animated-ref.html | 36 + .../backface-visibility-hidden-animated.html | 51 + .../{fill-box.html => fill-box-001.html} | 0 .../transform-box/fill-box-002.html | 18 + .../css-transforms/transform-percent-010.html | 28 + .../buffered-and-duration-threshold.html | 38 + .../large-duration-threshold.html | 16 + .../medium-duration-threshold.html | 16 + .../event-timing/min-duration-threshold.html | 16 + .../resources/event-timing-test-utils.js | 81 +- .../event-timing/timingconditions.html | 6 +- .../fetch/stale-while-revalidate/fetch.html | 4 + .../fullscreen/idlharness.window.js | 1 + .../hr-time/idlharness.any.js | 1 + .../html-media-capture/idlharness.window.js | 1 + .../window-prototype-chain.html | 3 - .../the-input-element/type-change-state.html | 7 + .../navigator_user_agent.https.html | 6 +- .../web-platform-tests/interfaces/cssom.idl | 6 +- .../web-platform-tests/interfaces/html.idl | 116 +- .../interfaces/pointerevents.idl | 4 + .../interfaces/webrtc-stats.idl | 54 +- .../web-platform-tests/interfaces/webxr.idl | 6 +- .../layout-instability/resources/util.js | 1 + .../layout-instability/sources.html | 38 + tests/wpt/web-platform-tests/lint.whitelist | 9 + .../MediaDevices-enumerateDevices.https.html | 25 +- .../idlharness.https.any.js | 1 + .../navigation-timing/idlharness.window.js | 1 + .../idlharness.https.window.js | 1 + .../origin-policy/idlharness.any.js | 1 + .../page-visibility/idlharness.window.js | 1 + .../payment-handler/idlharness.https.any.js | 1 + .../permissions-revoke/idlharness.any.js | 1 + .../quirks/unitless-length/no-quirks.html | 1 + .../resources/idlharness.js | 34 +- .../element-based-offset.html | 11 +- .../scroll-animation-inactive-timeline.html | 144 + .../scroll-animations/scroll-animation.html | 52 +- .../setting-current-time.html | 66 + .../scroll-animations/testcommon.js | 2 +- .../navigation-preload/resources/cookie.py | 20 + .../resources/navigation-preload-worker.js | 3 + .../samesite-cookies.https.html | 61 + ...ative-shadow-dom-attachment.tentative.html | 93 + ...clarative-shadow-dom-basic.tentative.html} | 19 + .../storage/idlharness.https.any.js | 1 + .../reftests/url-reference-local-textpath.svg | 10 + .../wpt/web-platform-tests/tools/ci/run_tc.py | 4 +- .../tools/ci/tc/tasks/test.yml | 4 +- .../tools/docker/Dockerfile | 2 + .../web-platform-tests/tools/docker/README.md | 11 +- .../wpt/web-platform-tests/tools/lint/lint.py | 3 +- .../web-platform-tests/tools/lint/rules.py | 8 + .../wptrunner/formatters/chromium.py | 10 +- .../formatters/tests/test_chromium.py | 64 +- .../tools/wptrunner/wptrunner/wpttest.py | 3 + .../vibration/idlharness.window.js | 1 + .../error-interfaces-no-symbol-tostringtag.js | 13 + .../wasm/jsapi/global/toString.any.js | 10 + .../wasm/jsapi/instance/toString.any.js | 10 + .../wasm/jsapi/memory/toString.any.js | 10 + .../wasm/jsapi/module/toString.any.js | 10 + .../wasm/jsapi/proto-from-ctor-realm.html | 95 + .../wasm/jsapi/table/toString.any.js | 10 + .../interfaces/Animation/pending.html | 20 + .../setting-the-timeline-of-an-animation.html | 4 +- .../idlharness.tentative.https.any.js | 1 + .../hit-test/idlharness.https.html | 0 .../WorkerNavigator_userAgentData.http.html | 2 +- .../WorkerNavigator_userAgentData.https.html | 8 +- .../dedicated-worker-parse-error-failure.html | 2 +- .../workers/support/WorkerNavigator.js | 4 +- .../xhr/send-redirect-to-cors.htm | 27 +- .../rendering/draw-buffers.html.ini | 3 + 366 files changed, 10291 insertions(+), 2008 deletions(-) create mode 100644 tests/wpt/metadata-layout-2020/2dcontext/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html.ini create mode 100644 tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-interface.any.js.ini create mode 100644 tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-iterator-prototype-object.any.js.ini create mode 100644 tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js.ini create mode 100644 tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-iframe-root.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-root.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-transformed-root.html.ini rename tests/wpt/{metadata/css/css-transforms/transform-box/fill-box.html.ini => metadata-layout-2020/css/css-flexbox/gap-011.html.ini} (51%) create mode 100644 tests/wpt/metadata-layout-2020/css/css-flexbox/gap-012.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-flexbox/gap-013.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-flexbox/gap-014.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-flexbox/gap-015.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-flexbox/gap-016.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-transforms/backface-visibility-hidden-animated.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-transforms/transform-box/fill-box-001.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-transforms/transform-box/fill-box-002.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-transforms/transform-percent-010.html.ini create mode 100644 tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-inherit-002.html.ini delete mode 100644 tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini rename tests/wpt/{metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini => metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini} (71%) rename tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/{traverse_the_history_5.html.ini => traverse_the_history_3.html.ini} (71%) create mode 100644 tests/wpt/metadata-layout-2020/html/dom/idlharness.https.html.ini create mode 100644 tests/wpt/metadata-layout-2020/wasm/jsapi/proto-from-ctor-realm.html.ini create mode 100644 tests/wpt/metadata-layout-2020/webxr/hit-test/idlharness.https.html.ini delete mode 100644 tests/wpt/metadata-layout-2020/workers/WorkerGlobalScope-close.html.ini create mode 100644 tests/wpt/metadata-layout-2020/workers/constructors/Worker/Worker-constructor.html.ini create mode 100644 tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html.ini create mode 100644 tests/wpt/metadata/WebIDL/ecmascript-binding/class-string-interface.any.js.ini create mode 100644 tests/wpt/metadata/WebIDL/ecmascript-binding/class-string-iterator-prototype-object.any.js.ini create mode 100644 tests/wpt/metadata/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js.ini create mode 100644 tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini create mode 100644 tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini create mode 100644 tests/wpt/metadata/css/css-backgrounds/background-margin-iframe-root.html.ini create mode 100644 tests/wpt/metadata/css/css-backgrounds/background-margin-root.html.ini create mode 100644 tests/wpt/metadata/css/css-backgrounds/background-margin-transformed-root.html.ini create mode 100644 tests/wpt/metadata/css/css-flexbox/gap-011.html.ini create mode 100644 tests/wpt/metadata/css/css-flexbox/gap-012.html.ini create mode 100644 tests/wpt/metadata/css/css-flexbox/gap-013.html.ini create mode 100644 tests/wpt/metadata/css/css-flexbox/gap-014.html.ini create mode 100644 tests/wpt/metadata/css/css-flexbox/gap-015.html.ini create mode 100644 tests/wpt/metadata/css/css-flexbox/gap-016.html.ini create mode 100644 tests/wpt/metadata/css/css-transforms/backface-visibility-hidden-animated.html.ini create mode 100644 tests/wpt/metadata/css/css-transforms/transform-box/fill-box-001.html.ini create mode 100644 tests/wpt/metadata/css/css-transforms/transform-box/fill-box-002.html.ini create mode 100644 tests/wpt/metadata/css/css-transforms/transform-percent-010.html.ini delete mode 100644 tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini create mode 100644 tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini create mode 100644 tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini create mode 100644 tests/wpt/metadata/wasm/jsapi/proto-from-ctor-realm.html.ini create mode 100644 tests/wpt/metadata/webxr/hit-test/idlharness.https.html.ini delete mode 100644 tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini create mode 100644 tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini create mode 100644 tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html create mode 100644 tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/image-orientation/reference/drawImage-from-blob-ref.html create mode 100644 tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-interface.any.js create mode 100644 tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-iterator-prototype-object.any.js create mode 100644 tests/wpt/web-platform-tests/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js create mode 100644 tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-fake-devices.js delete mode 100644 tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js create mode 100644 tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-test.js create mode 100644 tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-and-redir-to-do-not-expect.py create mode 100644 tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/accept-ch-and-redir-to-expect.py create mode 100644 tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/do-not-expect-received.py create mode 100644 tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/resources/expect-received.py create mode 100644 tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-navigation-redirect.https.html create mode 100644 tests/wpt/web-platform-tests/client-hints/accept-ch-stickiness/same-origin-subresource-redirect.https.html create mode 100644 tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-iframe-root-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-iframe-root.html create mode 100644 tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-root-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-root.html create mode 100644 tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-transformed-root-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-transformed-root.html create mode 100644 tests/wpt/web-platform-tests/css/css-flexbox/gap-011.html create mode 100644 tests/wpt/web-platform-tests/css/css-flexbox/gap-012.html create mode 100644 tests/wpt/web-platform-tests/css/css-flexbox/gap-013.html create mode 100644 tests/wpt/web-platform-tests/css/css-flexbox/gap-014.html create mode 100644 tests/wpt/web-platform-tests/css/css-flexbox/gap-015.html create mode 100644 tests/wpt/web-platform-tests/css/css-flexbox/gap-016.html create mode 100644 tests/wpt/web-platform-tests/css/css-properties-values-api/at-property-typedom.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms/backface-visibility-hidden-animated-ref.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms/backface-visibility-hidden-animated.html rename tests/wpt/web-platform-tests/css/css-transforms/transform-box/{fill-box.html => fill-box-001.html} (100%) create mode 100644 tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-002.html create mode 100644 tests/wpt/web-platform-tests/css/css-transforms/transform-percent-010.html create mode 100644 tests/wpt/web-platform-tests/event-timing/buffered-and-duration-threshold.html create mode 100644 tests/wpt/web-platform-tests/event-timing/large-duration-threshold.html create mode 100644 tests/wpt/web-platform-tests/event-timing/medium-duration-threshold.html create mode 100644 tests/wpt/web-platform-tests/event-timing/min-duration-threshold.html create mode 100644 tests/wpt/web-platform-tests/layout-instability/sources.html create mode 100644 tests/wpt/web-platform-tests/scroll-animations/scroll-animation-inactive-timeline.html create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/cookie.py create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/navigation-preload-worker.js create mode 100644 tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/samesite-cookies.https.html create mode 100644 tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom-attachment.tentative.html rename tests/wpt/web-platform-tests/shadow-dom/declarative/{declarative-shadow-dom.tentative.html => declarative-shadow-dom-basic.tentative.html} (86%) create mode 100644 tests/wpt/web-platform-tests/svg/linking/reftests/url-reference-local-textpath.svg create mode 100644 tests/wpt/web-platform-tests/wasm/jsapi/error-interfaces-no-symbol-tostringtag.js create mode 100644 tests/wpt/web-platform-tests/wasm/jsapi/proto-from-ctor-realm.html rename tests/wpt/web-platform-tests/{ => webxr}/hit-test/idlharness.https.html (100%) diff --git a/tests/wpt/metadata-layout-2020/2dcontext/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html.ini b/tests/wpt/metadata-layout-2020/2dcontext/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html.ini new file mode 100644 index 00000000000..3ba71c8de11 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/2dcontext/drawing-images-to-the-canvas/image-orientation/drawImage-from-blob.tentative.html.ini @@ -0,0 +1,2 @@ +[drawImage-from-blob.tentative.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini index 3605e8f3fc9..76b44d9e9cf 100644 --- a/tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini +++ b/tests/wpt/metadata-layout-2020/FileAPI/url/url-in-tags-revoke.window.js.ini @@ -4,7 +4,7 @@ expected: TIMEOUT [Opening a blob URL in a new window immediately before revoking it works.] - expected: TIMEOUT + expected: FAIL [Fetching a blob URL immediately before revoking it works in an iframe.] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-interface.any.js.ini b/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-interface.any.js.ini new file mode 100644 index 00000000000..ff201e24186 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-interface.any.js.ini @@ -0,0 +1,33 @@ +[class-string-interface.any.html] + [Object.prototype.toString applied to the prototype] + expected: FAIL + + [Object.prototype.toString applied to a null-prototype instance] + expected: FAIL + + [Object.prototype.toString applied after modifying the prototype's @@toStringTag] + expected: FAIL + + [Object.prototype.toString applied after deleting @@toStringTag] + expected: FAIL + + [@@toStringTag exists on the prototype with the appropriate descriptor] + expected: FAIL + + +[class-string-interface.any.worker.html] + [Object.prototype.toString applied to the prototype] + expected: FAIL + + [Object.prototype.toString applied to a null-prototype instance] + expected: FAIL + + [Object.prototype.toString applied after modifying the prototype's @@toStringTag] + expected: FAIL + + [Object.prototype.toString applied after deleting @@toStringTag] + expected: FAIL + + [@@toStringTag exists on the prototype with the appropriate descriptor] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-iterator-prototype-object.any.js.ini b/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-iterator-prototype-object.any.js.ini new file mode 100644 index 00000000000..0d1aec4f066 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-iterator-prototype-object.any.js.ini @@ -0,0 +1,33 @@ +[class-string-iterator-prototype-object.any.html] + [Object.prototype.toString] + expected: FAIL + + [Object.prototype.toString applied after deleting @@toStringTag] + expected: FAIL + + [@@toStringTag exists with the appropriate descriptor] + expected: FAIL + + [Object.prototype.toString applied after modifying @@toStringTag] + expected: FAIL + + [Object.prototype.toString applied after nulling the prototype] + expected: FAIL + + +[class-string-iterator-prototype-object.any.worker.html] + [Object.prototype.toString] + expected: FAIL + + [Object.prototype.toString applied after deleting @@toStringTag] + expected: FAIL + + [@@toStringTag exists with the appropriate descriptor] + expected: FAIL + + [Object.prototype.toString applied after modifying @@toStringTag] + expected: FAIL + + [Object.prototype.toString applied after nulling the prototype] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js.ini b/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js.ini new file mode 100644 index 00000000000..353805a5a06 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js.ini @@ -0,0 +1,13 @@ +[class-string-named-properties-object.window.html] + [Object.prototype.toString applied after modifying @@toStringTag] + expected: FAIL + + [Object.prototype.toString applied after deleting @@toStringTag] + expected: FAIL + + [@@toStringTag exists with the appropriate descriptor] + expected: FAIL + + [Object.prototype.toString] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini new file mode 100644 index 00000000000..f64b45fea6b --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-002.html] + [Hit test float] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini new file mode 100644 index 00000000000..f29da48a2a0 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-003.html] + [Miss float below something else] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-iframe-root.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-iframe-root.html.ini new file mode 100644 index 00000000000..d0b3bc98be7 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-iframe-root.html.ini @@ -0,0 +1,2 @@ +[background-margin-iframe-root.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-root.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-root.html.ini new file mode 100644 index 00000000000..c69b7cbb3b0 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-root.html.ini @@ -0,0 +1,2 @@ +[background-margin-root.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-transformed-root.html.ini b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-transformed-root.html.ini new file mode 100644 index 00000000000..25f76c60b9b --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-backgrounds/background-margin-transformed-root.html.ini @@ -0,0 +1,2 @@ +[background-margin-transformed-root.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-box/fill-box.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-011.html.ini similarity index 51% rename from tests/wpt/metadata/css/css-transforms/transform-box/fill-box.html.ini rename to tests/wpt/metadata-layout-2020/css/css-flexbox/gap-011.html.ini index 536029e626b..20e1b790822 100644 --- a/tests/wpt/metadata/css/css-transforms/transform-box/fill-box.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-011.html.ini @@ -1,2 +1,2 @@ -[fill-box.html] +[gap-011.html] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-012.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-012.html.ini new file mode 100644 index 00000000000..9f3e416efc5 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-012.html.ini @@ -0,0 +1,2 @@ +[gap-012.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-013.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-013.html.ini new file mode 100644 index 00000000000..856975d6f05 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-013.html.ini @@ -0,0 +1,2 @@ +[gap-013.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-014.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-014.html.ini new file mode 100644 index 00000000000..f5e7fbecd47 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-014.html.ini @@ -0,0 +1,2 @@ +[gap-014.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-015.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-015.html.ini new file mode 100644 index 00000000000..660a042cb7f --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-015.html.ini @@ -0,0 +1,2 @@ +[gap-015.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-016.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-016.html.ini new file mode 100644 index 00000000000..d1071378ed9 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/gap-016.html.ini @@ -0,0 +1,2 @@ +[gap-016.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/backface-visibility-hidden-animated.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/backface-visibility-hidden-animated.html.ini new file mode 100644 index 00000000000..1569c50b18c --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/backface-visibility-hidden-animated.html.ini @@ -0,0 +1,2 @@ +[backface-visibility-hidden-animated.html] + expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-box/fill-box-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-box/fill-box-001.html.ini new file mode 100644 index 00000000000..8e9e7b13e49 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-box/fill-box-001.html.ini @@ -0,0 +1,2 @@ +[fill-box-001.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-box/fill-box-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-box/fill-box-002.html.ini new file mode 100644 index 00000000000..3f1877d85ad --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-box/fill-box-002.html.ini @@ -0,0 +1,2 @@ +[fill-box-002.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-percent-010.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-percent-010.html.ini new file mode 100644 index 00000000000..d48f67c6c1f --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-percent-010.html.ini @@ -0,0 +1,2 @@ +[transform-percent-010.html] + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini index f8e7e539aae..4a1e8110f6f 100644 --- a/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini +++ b/tests/wpt/metadata-layout-2020/css/css-transforms/transform-scale-hittest.html.ini @@ -2,6 +2,3 @@ [Hit test intersecting scaled box] expected: FAIL - [Hit test within unscaled box] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-inherit-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-inherit-002.html.ini new file mode 100644 index 00000000000..338baf702a2 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-transitions/properties-value-inherit-002.html.ini @@ -0,0 +1,547 @@ +[properties-value-inherit-002.html] + [outline-width length(px) / values] + expected: FAIL + + [border-left-width length(em) / values] + expected: FAIL + + [background-position length(pt) / values] + expected: FAIL + + [background-position length(pt) / events] + expected: FAIL + + [border-bottom-width length(px) / values] + expected: FAIL + + [border-top-width length(em) / values] + expected: FAIL + + [line-height number(decimal) / values] + expected: FAIL + + [word-spacing length(mm) / values] + expected: FAIL + + [text-indent length(pc) / values] + expected: FAIL + + [opacity number[0,1\](zero-to-one) / values] + expected: FAIL + + [line-height number(integer) / values] + expected: FAIL + + [outline-offset length(px) / values] + expected: FAIL + + [font-size length(pt) / values] + expected: FAIL + + [max-height length(px) / values] + expected: FAIL + + [vertical-align length(in) / values] + expected: FAIL + + [right length(pc) / values] + expected: FAIL + + [top length(pt) / values] + expected: FAIL + + [max-height percentage(%) / values] + expected: FAIL + + [background-position length(px) / values] + expected: FAIL + + [min-width length(px) / values] + expected: FAIL + + [border-top-color color(rgba) / values] + expected: FAIL + + [background-position length(cm) / events] + expected: FAIL + + [border-right-color color(rgba) / values] + expected: FAIL + + [top length(pc) / values] + expected: FAIL + + [font-size length(ex) / values] + expected: FAIL + + [min-height length(pc) / values] + expected: FAIL + + [background-position length(mm) / values] + expected: FAIL + + [line-height length(px) / values] + expected: FAIL + + [word-spacing length(px) / values] + expected: FAIL + + [vertical-align percentage(%) / values] + expected: FAIL + + [background-position length(in) / events] + expected: FAIL + + [border-right-width length(pc) / values] + expected: FAIL + + [line-height length(ex) / values] + expected: FAIL + + [color color(rgba) / values] + expected: FAIL + + [font-size length(in) / values] + expected: FAIL + + [text-indent length(ex) / values] + expected: FAIL + + [font-size length(em) / values] + expected: FAIL + + [border-left-width length(mm) / values] + expected: FAIL + + [vertical-align length(em) / values] + expected: FAIL + + [text-indent length(px) / values] + expected: FAIL + + [clip rectangle(rectangle) / values] + expected: FAIL + + [word-spacing length(em) / values] + expected: FAIL + + [border-right-width length(ex) / values] + expected: FAIL + + [border-top-width length(cm) / values] + expected: FAIL + + [right length(px) / values] + expected: FAIL + + [max-width length(em) / values] + expected: FAIL + + [background-position length(em) / events] + expected: FAIL + + [font-size length(cm) / values] + expected: FAIL + + [border-right-width length(cm) / values] + expected: FAIL + + [top length(px) / values] + expected: FAIL + + [outline-offset length(ex) / values] + expected: FAIL + + [min-width length(cm) / values] + expected: FAIL + + [min-height length(px) / values] + expected: FAIL + + [min-width length(mm) / values] + expected: FAIL + + [border-bottom-width length(in) / values] + expected: FAIL + + [vertical-align length(pc) / values] + expected: FAIL + + [vertical-align length(cm) / values] + expected: FAIL + + [max-height length(ex) / values] + expected: FAIL + + [vertical-align length(ex) / values] + expected: FAIL + + [min-height percentage(%) / values] + expected: FAIL + + [top percentage(%) / values] + expected: FAIL + + [max-height length(pt) / values] + expected: FAIL + + [outline-offset length(mm) / values] + expected: FAIL + + [font-weight font-weight(keyword) / values] + expected: FAIL + + [max-height length(mm) / values] + expected: FAIL + + [outline-offset length(pt) / values] + expected: FAIL + + [line-height length(mm) / values] + expected: FAIL + + [line-height length(cm) / values] + expected: FAIL + + [border-top-width length(mm) / values] + expected: FAIL + + [letter-spacing length(in) / values] + expected: FAIL + + [border-bottom-color color(rgba) / values] + expected: FAIL + + [min-width percentage(%) / values] + expected: FAIL + + [min-height length(cm) / values] + expected: FAIL + + [letter-spacing length(mm) / values] + expected: FAIL + + [font-size percentage(%) / values] + expected: FAIL + + [letter-spacing length(cm) / values] + expected: FAIL + + [vertical-align length(pt) / values] + expected: FAIL + + [border-left-color color(rgba) / values] + expected: FAIL + + [letter-spacing length(pc) / values] + expected: FAIL + + [letter-spacing length(pt) / values] + expected: FAIL + + [word-spacing length(ex) / values] + expected: FAIL + + [line-height length(pt) / values] + expected: FAIL + + [top length(em) / values] + expected: FAIL + + [border-top-width length(px) / values] + expected: FAIL + + [min-width length(pt) / values] + expected: FAIL + + [border-bottom-width length(mm) / values] + expected: FAIL + + [border-bottom-width length(cm) / values] + expected: FAIL + + [min-width length(em) / values] + expected: FAIL + + [min-height length(em) / values] + expected: FAIL + + [max-width length(mm) / values] + expected: FAIL + + [min-height length(ex) / values] + expected: FAIL + + [background-position length(ex) / values] + expected: FAIL + + [max-width length(px) / values] + expected: FAIL + + [text-indent length(mm) / values] + expected: FAIL + + [font-size length(mm) / values] + expected: FAIL + + [min-width length(pc) / values] + expected: FAIL + + [letter-spacing length(em) / values] + expected: FAIL + + [background-position length(cm) / values] + expected: FAIL + + [top length(in) / values] + expected: FAIL + + [line-height length(em) / values] + expected: FAIL + + [border-bottom-width length(pt) / values] + expected: FAIL + + [word-spacing length(pc) / values] + expected: FAIL + + [outline-offset length(in) / values] + expected: FAIL + + [word-spacing length(in) / values] + expected: FAIL + + [outline-width length(pt) / values] + expected: FAIL + + [border-top-width length(pc) / values] + expected: FAIL + + [border-left-width length(px) / values] + expected: FAIL + + [font-size length(px) / values] + expected: FAIL + + [border-left-width length(cm) / values] + expected: FAIL + + [border-right-width length(px) / values] + expected: FAIL + + [outline-width length(in) / values] + expected: FAIL + + [word-spacing length(pt) / values] + expected: FAIL + + [text-indent length(cm) / values] + expected: FAIL + + [border-right-width length(mm) / values] + expected: FAIL + + [max-width length(in) / values] + expected: FAIL + + [outline-color color(rgba) / values] + expected: FAIL + + [background-position length(ex) / events] + expected: FAIL + + [text-indent length(pt) / values] + expected: FAIL + + [border-right-width length(pt) / values] + expected: FAIL + + [border-left-width length(in) / values] + expected: FAIL + + [text-shadow shadow(shadow) / values] + expected: FAIL + + [background-position length(pc) / events] + expected: FAIL + + [max-height length(in) / values] + expected: FAIL + + [line-height length(in) / values] + expected: FAIL + + [border-bottom-width length(em) / values] + expected: FAIL + + [outline-width length(ex) / values] + expected: FAIL + + [font-size length(pc) / values] + expected: FAIL + + [background-position length(in) / values] + expected: FAIL + + [min-width length(in) / values] + expected: FAIL + + [top length(cm) / values] + expected: FAIL + + [outline-width length(cm) / values] + expected: FAIL + + [max-width percentage(%) / values] + expected: FAIL + + [max-width length(ex) / values] + expected: FAIL + + [top length(mm) / values] + expected: FAIL + + [letter-spacing length(ex) / values] + expected: FAIL + + [border-left-width length(ex) / values] + expected: FAIL + + [outline-width length(mm) / values] + expected: FAIL + + [border-left-width length(pc) / values] + expected: FAIL + + [outline-width length(pc) / values] + expected: FAIL + + [word-spacing percentage(%) / values] + expected: FAIL + + [font-weight font-weight(numeric) / values] + expected: FAIL + + [vertical-align length(px) / values] + expected: FAIL + + [letter-spacing length(px) / values] + expected: FAIL + + [max-width length(pt) / values] + expected: FAIL + + [line-height percentage(%) / values] + expected: FAIL + + [text-indent length(in) / values] + expected: FAIL + + [text-indent length(em) / values] + expected: FAIL + + [border-top-width length(pt) / values] + expected: FAIL + + [min-height length(mm) / values] + expected: FAIL + + [background-position length(pc) / values] + expected: FAIL + + [background-position percentage(%) / values] + expected: FAIL + + [max-height length(cm) / values] + expected: FAIL + + [top length(ex) / values] + expected: FAIL + + [outline-width length(em) / values] + expected: FAIL + + [border-right-width length(em) / values] + expected: FAIL + + [max-height length(em) / values] + expected: FAIL + + [max-width length(cm) / values] + expected: FAIL + + [outline-offset length(em) / values] + expected: FAIL + + [outline-offset length(cm) / values] + expected: FAIL + + [background-position length(mm) / events] + expected: FAIL + + [border-top-width length(ex) / values] + expected: FAIL + + [border-right-width length(in) / values] + expected: FAIL + + [z-index integer(integer) / values] + expected: FAIL + + [border-left-width length(pt) / values] + expected: FAIL + + [vertical-align length(mm) / values] + expected: FAIL + + [border-bottom-width length(pc) / values] + expected: FAIL + + [text-indent percentage(%) / values] + expected: FAIL + + [line-height length(pc) / values] + expected: FAIL + + [right length(pt) / values] + expected: FAIL + + [background-position length(em) / values] + expected: FAIL + + [border-top-width length(in) / values] + expected: FAIL + + [border-bottom-width length(ex) / values] + expected: FAIL + + [min-height length(in) / values] + expected: FAIL + + [outline-offset length(pc) / values] + expected: FAIL + + [max-height length(pc) / values] + expected: FAIL + + [background-color color(rgba) / values] + expected: FAIL + + [min-height length(pt) / values] + expected: FAIL + + [word-spacing length(cm) / values] + expected: FAIL + + [background-position percentage(%) / events] + expected: FAIL + + [max-width length(pc) / values] + expected: FAIL + + [background-position length(px) / events] + expected: FAIL + + [min-width length(ex) / values] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini index 628b1fab770..c884dc82eab 100644 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini @@ -2,3 +2,6 @@ [listeners are called when diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-iframe-root.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-iframe-root.html new file mode 100644 index 00000000000..08464fc9eb4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-iframe-root.html @@ -0,0 +1,15 @@ + +Backgrounds on the root element of an iframe should extend to cover the entire canvas of the iframe in the presence of margin + + + + diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-root-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-root-ref.html new file mode 100644 index 00000000000..2e5ec36ec08 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-root-ref.html @@ -0,0 +1,14 @@ + + +
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-root.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-root.html new file mode 100644 index 00000000000..cbba6c012d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-root.html @@ -0,0 +1,12 @@ + +Backgrounds on the root element should extend to cover the entire canvas in the presence of margin + + + + diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-transformed-root-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-transformed-root-ref.html new file mode 100644 index 00000000000..2e5ec36ec08 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-transformed-root-ref.html @@ -0,0 +1,14 @@ + + +
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-transformed-root.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-transformed-root.html new file mode 100644 index 00000000000..87129f38184 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-margin-transformed-root.html @@ -0,0 +1,13 @@ + +Backgrounds on the root element should extend to cover the entire canvas in the presence of margin and transform + + + + diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-lr-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-lr-ref.html index d772748564f..25c0c5cb357 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-lr-ref.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-lr-ref.html @@ -11,7 +11,6 @@ background-color: green; block-size: 100px; display: flex; - gap: 20px; } section > div{ background-color: grey; diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-rl-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-rl-ref.html index 66d104a86d1..5aac91817f3 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-rl-ref.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-rl-ref.html @@ -11,7 +11,6 @@ background-color: green; block-size: 100px; display: flex; - gap: 20px; } section > div{ background-color: grey; diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-rtl-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-rtl-ref.html index 7556857e052..bb0cf3c0eb0 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-rtl-ref.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-001-rtl-ref.html @@ -11,7 +11,6 @@ background-color: green; block-size: 100px; display: flex; - gap: 20px; } section > div{ background-color: grey; diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-002-lr-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-002-lr-ref.html index f9c0c55eaaf..8d761c6dfbc 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/gap-002-lr-ref.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-002-lr-ref.html @@ -12,7 +12,6 @@ block-size: 200px; display: flex; flex-direction: column; - gap: 20px; } section > div{ background-color: gray; diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-002-rl-ref.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-002-rl-ref.html index c9148e2976a..9310e9ae488 100644 --- a/tests/wpt/web-platform-tests/css/css-flexbox/gap-002-rl-ref.html +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-002-rl-ref.html @@ -12,7 +12,6 @@ block-size: 200px; display: flex; flex-direction: column; - gap: 20px; } section > div{ background-color: grey; diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-011.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-011.html new file mode 100644 index 00000000000..d1d579e30b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-011.html @@ -0,0 +1,32 @@ + +Flex gaps + + + + + + + + +

Test passes if there is a filled green square and no red.

+ +
+ +
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-012.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-012.html new file mode 100644 index 00000000000..19b39b9a783 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-012.html @@ -0,0 +1,32 @@ + +Flex gaps + + + + + + + + +

Test passes if there is a filled green square and no red.

+ +
+ +
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-013.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-013.html new file mode 100644 index 00000000000..30e4c43e719 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-013.html @@ -0,0 +1,29 @@ + +Flex gaps + + + + + + + + +

Test passes if there is a filled green square and no red.

+ +
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-014.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-014.html new file mode 100644 index 00000000000..c600478c73c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-014.html @@ -0,0 +1,31 @@ + +Flex gaps + + + + + + + + +

Test passes if there is a filled green square and no red.

+ +
+ +
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-015.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-015.html new file mode 100644 index 00000000000..e54598e2000 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-015.html @@ -0,0 +1,38 @@ + +Flex gaps + + + + + + + + +

Test passes if there is a filled green square and no red.

+ +
+ +
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/gap-016.html b/tests/wpt/web-platform-tests/css/css-flexbox/gap-016.html new file mode 100644 index 00000000000..a5441772567 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/gap-016.html @@ -0,0 +1,38 @@ + +Flex gaps + + + + + + + + +

Test passes if there is a filled green square and no red.

+ +
+ +
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property-animation.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property-animation.html index c0688870818..89ed671fdf1 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property-animation.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property-animation.html @@ -187,4 +187,112 @@ test_with_at_property({ } }, 'Ongoing animation picks up redeclared meaning of \'unset\''); +test_with_at_property({ + syntax: '""', + inherits: false, + initialValue: 'red' +}, (name) => { + try { + assert_equals(getComputedStyle(div).getPropertyValue(name), 'rgb(255, 0, 0)'); + div.style = `transition: ${name} steps(2, start) 100s; ${name}: blue`; + assert_equals(getComputedStyle(div).getPropertyValue(name), 'rgb(128, 0, 128)'); + } finally { + div.style = ''; + } +}, 'Transitioning from initial value'); + +test_with_at_property({ + syntax: '""', + inherits: false, + initialValue: 'red' +}, (name) => { + try { + div.style = `${name}: blue;`; + assert_equals(getComputedStyle(div).getPropertyValue(name), 'rgb(0, 0, 255)'); + div.style = `transition: ${name} steps(2, start) 100s; ${name}: green`; + assert_equals(getComputedStyle(div).getPropertyValue(name), 'rgb(0, 64, 128)'); + } finally { + div.style = ''; + } +}, 'Transitioning from specified value'); + +test_with_at_property({ + syntax: '""', + inherits: false, + initialValue: '100px' +}, (name) => { + with_style_node(`div { transition: ${name} steps(2, start) 100s; }`, () => { + assert_equals(getComputedStyle(div).getPropertyValue(name), '100px'); + // Re-declaring the property with a different initial value effectively + // means the computed value has changed. This means we should transition + // from the old initial value to the new initial value. + with_at_property({ + name: name, + syntax: '""', + inherits: false, + initialValue: '200px' + }, () => { + assert_equals(getComputedStyle(div).getPropertyValue(name), '150px'); + }); + }); +}, 'Transition triggered by initial value change'); + +test_with_at_property({ + syntax: '""', + inherits: false, + initialValue: '100px' +}, (name) => { + with_style_node(`div { transition: ${name} steps(2, start) 100s; }`, () => { + assert_equals(getComputedStyle(div).getPropertyValue(name), '100px'); + with_at_property({ + name: name, + syntax: '""', + inherits: false, + initialValue: 'green' + }, () => { + assert_equals(getComputedStyle(div).getPropertyValue(name), 'rgb(0, 128, 0)'); + }); + }); +}, 'No transition when changing types'); + +test(() => { + let name = generate_name(); + with_style_node(`div { ${name}: 100px; transition: ${name} steps(2, start) 100s; }`, () => { + assert_equals(getComputedStyle(div).getPropertyValue(name), ' 100px'); + + let style1 = document.createElement('style'); + style1.textContent = ` + @property ${name} { + syntax: ""; + inherits: false; + initial-value: 200px; + } + `; + + let style2 = document.createElement('style'); + style2.textContent = `div { ${name}: 400px; }`; + + try { + // Register the property: + document.body.append(style1); + // The token sequence ' 100px' is now interpreted as a length '100px'. + assert_equals(getComputedStyle(div).getPropertyValue(name), '100px'); + + // Change the computed value: + document.body.append(style2); + // This should cause an interpolation between 100px and 400px: + assert_equals(getComputedStyle(div).getPropertyValue(name), '250px'); + + // In the middle of the transition above, remove the @property rule + // (making the computed value a token sequence again). We should snap + // to the new token sequence. + style1.remove(); + assert_equals(getComputedStyle(div).getPropertyValue(name), ' 400px'); + } finally { + style1.remove(); + style2.remove(); + } + }); +}, 'No transition when removing @property rule'); + diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property-typedom.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property-typedom.html new file mode 100644 index 00000000000..04c40c8be0f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/at-property-typedom.html @@ -0,0 +1,64 @@ + + + + + +
+ diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/determine-registration.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/determine-registration.html index 9a68be51d79..e6bbbec9640 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/determine-registration.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/determine-registration.html @@ -3,132 +3,230 @@ - -
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/backface-visibility-hidden-animated-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/backface-visibility-hidden-animated-ref.html new file mode 100644 index 00000000000..3441050a59d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/backface-visibility-hidden-animated-ref.html @@ -0,0 +1,36 @@ + + + + + +
+
+ Text +
+
+ diff --git a/tests/wpt/web-platform-tests/css/css-transforms/backface-visibility-hidden-animated.html b/tests/wpt/web-platform-tests/css/css-transforms/backface-visibility-hidden-animated.html new file mode 100644 index 00000000000..6cdefad6620 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/backface-visibility-hidden-animated.html @@ -0,0 +1,51 @@ + + + + + + +
+
+ Text +
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-001.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box.html rename to tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-001.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-002.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-002.html new file mode 100644 index 00000000000..9044048e387 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-002.html @@ -0,0 +1,18 @@ + +transform-box: fill-box on an SVG container element + + + +

There should be a green 200x200 rectangle below, and no red.

+ + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-percent-010.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-percent-010.html new file mode 100644 index 00000000000..92ebe78c1d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-percent-010.html @@ -0,0 +1,28 @@ + + +CSS Transforms: 'transform' resolved percentage values in SVG after mutation + + + + + +

There should be a green 200x200 rectangle below, and no red.

+
+ + + + + + +
+ diff --git a/tests/wpt/web-platform-tests/event-timing/buffered-and-duration-threshold.html b/tests/wpt/web-platform-tests/event-timing/buffered-and-duration-threshold.html new file mode 100644 index 00000000000..cf5d63b02a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/buffered-and-duration-threshold.html @@ -0,0 +1,38 @@ + + + +Event Timing: PerformanceObserver with buffered flag and durationThreshold + + + + + +
Click me
+ + diff --git a/tests/wpt/web-platform-tests/event-timing/large-duration-threshold.html b/tests/wpt/web-platform-tests/event-timing/large-duration-threshold.html new file mode 100644 index 00000000000..5665d42d334 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/large-duration-threshold.html @@ -0,0 +1,16 @@ + + + +Event Timing: PerformanceObserver with a durationThreshold of 125 + + + + + +
Click me
+ + diff --git a/tests/wpt/web-platform-tests/event-timing/medium-duration-threshold.html b/tests/wpt/web-platform-tests/event-timing/medium-duration-threshold.html new file mode 100644 index 00000000000..a827f2211b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/medium-duration-threshold.html @@ -0,0 +1,16 @@ + + + +Event Timing: PerformanceObserver with a durationThreshold of 50 + + + + + +
Click me
+ + diff --git a/tests/wpt/web-platform-tests/event-timing/min-duration-threshold.html b/tests/wpt/web-platform-tests/event-timing/min-duration-threshold.html new file mode 100644 index 00000000000..443b38a2783 --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/min-duration-threshold.html @@ -0,0 +1,16 @@ + + + +Event Timing: PerformanceObserver with a durationThreshold less than 16 + + + + + +
Click me
+ + diff --git a/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js b/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js index cc824d9cba6..bceaa5053d5 100644 --- a/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js +++ b/tests/wpt/web-platform-tests/event-timing/resources/event-timing-test-utils.js @@ -1,16 +1,16 @@ -// Clicks on the element with the given ID. It adds an event handler to the element -// which ensures that the events have a long duration and reported by EventTiming -// where appropriate. Calls |callback| during event handler. -function clickOnElement(id, callback) { +// Clicks on the element with the given ID. It adds an event handler to the element which +// ensures that the events have a duration of at least |delay|. Calls |callback| during +// event handler if |callback| is provided. +async function clickOnElementAndDelay(id, delay, callback) { const element = document.getElementById(id); const clickHandler = () => { - mainThreadBusy(120); + mainThreadBusy(delay); if (callback) callback(); element.removeEventListener("mousedown", clickHandler); }; element.addEventListener("mousedown", clickHandler); - test_driver.click(element); + await test_driver.click(element); } function mainThreadBusy(duration) { @@ -18,15 +18,16 @@ function mainThreadBusy(duration) { while (performance.now() < now + duration); } -// This method should receive an entry of type 'event'. |is_first| is true only -// when the event also happens to correspond to the first event. In this case, -// the timings of the 'first-input' entry should be equal to those of this entry. -function verifyClickEvent(entry, targetId, is_first=false) { +// This method should receive an entry of type 'event'. |isFirst| is true only when we want +// to check that the event also happens to correspond to the first event. In this case, the +// timings of the 'first-input' entry should be equal to those of this entry. |minDuration| +// is used to compared against entry.duration. +function verifyClickEvent(entry, targetId, isFirst=false, minDuration=104) { assert_true(entry.cancelable); assert_equals(entry.name, 'mousedown'); assert_equals(entry.entryType, 'event'); - assert_greater_than_equal(entry.duration, 104, - "The entry's duration should be greater than or equal to 104 ms."); + assert_greater_than_equal(entry.duration, minDuration, + "The entry's duration should be greater than or equal to " + minDuration + " ms."); assert_greater_than(entry.processingStart, entry.startTime, "The entry's processingStart should be greater than startTime."); assert_greater_than_equal(entry.processingEnd, entry.processingStart, @@ -35,7 +36,7 @@ function verifyClickEvent(entry, targetId, is_first=false) { // on the actual duration. assert_greater_than_equal(entry.duration + 4, entry.processingEnd - entry.startTime, "The entry's duration must be at least as large as processingEnd - startTime."); - if (is_first) { + if (isFirst) { let firstInputs = performance.getEntriesByType('first-input'); assert_equals(firstInputs.length, 1, 'There should be a single first-input entry'); let firstInput = firstInputs[0]; @@ -61,6 +62,58 @@ function wait() { function clickAndBlockMain(id) { return new Promise((resolve, reject) => { - clickOnElement(id, resolve); + clickOnElementAndDelay(id, 120, resolve); }); } + + // Add a PerformanceObserver and observe with a durationThreshold of |dur|. This test will + // attempt to check that the duration is appropriately checked by: + // * Asserting that entries received have a duration which is the smallest multiple of 8 + // that is greater than or equal to |dur|. + // * Issuing |numEntries| entries that are fast, of duration |slowDur|. + // * Issuing |numEntries| entries that are slow, of duration |fastDur|. + // * Asserting that at least |numEntries| entries are received (at least the slow ones). + // Parameters: + // |t| - the test harness. + // |dur| - the durationThreshold for the PerformanceObserver. + // |id| - the ID of the element to be clicked. + // |numEntries| - the number of slow and number of fast entries. + // |slowDur| - the min duration of a slow entry. + // |fastDur| - the min duration of a fast entry. +async function testDuration(t, id, numEntries, dur, fastDur, slowDur) { + assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.'); + const observerPromise = new Promise(async resolve => { + let minDuration = Math.ceil(dur / 8) * 8; + // Exposed events must always have a minimum duration of 16. + minDuration = Math.max(minDuration, 16); + let numEntriesReceived = 0; + new PerformanceObserver(list => { + const mouseDowns = list.getEntriesByName('mousedown'); + mouseDowns.forEach(e => { + t.step(() => { + verifyClickEvent(e, id, false /* isFirst */, minDuration); + }); + }); + numEntriesReceived += mouseDowns.length; + // Note that we may receive more entries if the 'fast' click events turn out slower + // than expected. + if (numEntriesReceived >= numEntries) + resolve(); + }).observe({type: "event", durationThreshold: dur}); + }); + const clicksPromise = new Promise(async resolve => { + for (let index = 0; index < numEntries; index++) { + // Add some fast click events. + await clickOnElementAndDelay(id, slowDur); + // Add some slow click events. + if (fastDur > 0) { + await clickOnElementAndDelay(id, fastDur); + } else { + // We can just directly call test_driver when |fastDur| is 0. + await test_driver.click(document.getElementById(id)); + } + } + resolve(); + }); + return Promise.all([observerPromise, clicksPromise]); +} \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/event-timing/timingconditions.html b/tests/wpt/web-platform-tests/event-timing/timingconditions.html index 12280cb894a..e7763c40dc0 100644 --- a/tests/wpt/web-platform-tests/event-timing/timingconditions.html +++ b/tests/wpt/web-platform-tests/event-timing/timingconditions.html @@ -15,10 +15,8 @@ diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html index a10ea1d2858..35f151b12d6 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html @@ -53,6 +53,11 @@ // We have no test cases using valid colors other than "#000000". return "#000000"; } + function browserSupportsInputTypeOf(inputType) { + var inputTest = document.createElement("input"); + inputTest.type = inputType; + return (inputTest.type === inputType); + } var types = [ @@ -99,6 +104,8 @@ for (var j = 0; j < types.length; j++) { if (types[i] != types[j]) { test(function() { + assert_implements(browserSupportsInputTypeOf(types[i].type), "Support for input type " + types[i].type + " is required for this test."); + assert_implements(browserSupportsInputTypeOf(types[j].type), "Support for input type " + types[j].type + " is required for this test."); var input = document.createElement("input"); var expected = INITIAL_VALUE; input.type = types[i].type; diff --git a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html b/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html index 9409dd08e4d..9a22728ec7e 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html +++ b/tests/wpt/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html @@ -10,9 +10,9 @@ promise_test(async t => { const uaData = navigator.userAgentData; - for (ua of uaData.uaList) { - assert_equals(typeof ua.brand, "string", "brand should be a string"); - assert_equals(typeof ua.version, "string", "version should be a string"); + for (brandVersionPair of uaData.brands) { + assert_equals(typeof brandVersionPair.brand, "string", "brand should be a string"); + assert_equals(typeof brandVersionPair.version, "string", "version should be a string"); } assert_equals(typeof uaData.mobile, "boolean", "mobile should be a boolean"); const highEntropyData = await uaData.getHighEntropyValues(["platform", "platformVersion", "architecture", "model"]); diff --git a/tests/wpt/web-platform-tests/interfaces/cssom.idl b/tests/wpt/web-platform-tests/interfaces/cssom.idl index f102510db47..b7d9c33d596 100644 --- a/tests/wpt/web-platform-tests/interfaces/cssom.idl +++ b/tests/wpt/web-platform-tests/interfaces/cssom.idl @@ -14,7 +14,7 @@ typedef DOMString CSSOMString; [Exposed=Window] interface MediaList { - stringifier attribute [TreatNullAs=EmptyString] CSSOMString mediaText; + stringifier attribute [LegacyNullToEmptyString] CSSOMString mediaText; readonly attribute unsigned long length; getter CSSOMString? item(unsigned long index); void appendMedium(CSSOMString medium); @@ -130,10 +130,10 @@ interface CSSStyleDeclaration { getter CSSOMString item(unsigned long index); CSSOMString getPropertyValue(CSSOMString property); CSSOMString getPropertyPriority(CSSOMString property); - [CEReactions] void setProperty(CSSOMString property, [TreatNullAs=EmptyString] CSSOMString value, optional [TreatNullAs=EmptyString] CSSOMString priority = ""); + [CEReactions] void setProperty(CSSOMString property, [LegacyNullToEmptyString] CSSOMString value, optional [LegacyNullToEmptyString] CSSOMString priority = ""); [CEReactions] CSSOMString removeProperty(CSSOMString property); readonly attribute CSSRule? parentRule; - [CEReactions] attribute [TreatNullAs=EmptyString] CSSOMString cssFloat; + [CEReactions] attribute [LegacyNullToEmptyString] CSSOMString cssFloat; }; interface mixin ElementCSSInlineStyle { diff --git a/tests/wpt/web-platform-tests/interfaces/html.idl b/tests/wpt/web-platform-tests/interfaces/html.idl index a8b9b423301..c9018f1b63d 100644 --- a/tests/wpt/web-platform-tests/interfaces/html.idl +++ b/tests/wpt/web-platform-tests/interfaces/html.idl @@ -45,10 +45,10 @@ interface DOMStringList { enum DocumentReadyState { "loading", "interactive", "complete" }; typedef (HTMLScriptElement or SVGScriptElement) HTMLOrSVGScriptElement; -[OverrideBuiltins] +[LegacyOverrideBuiltIns] partial interface Document { // resource metadata management - [PutForwards=href, Unforgeable] readonly attribute Location? location; + [PutForwards=href, LegacyUnforgeable] readonly attribute Location? location; attribute USVString domain; readonly attribute USVString referrer; attribute USVString cookie; @@ -89,7 +89,7 @@ partial interface Document { DOMString queryCommandValue(DOMString commandId); // special event handler IDL attributes that only apply to Document objects - [LenientThis] attribute EventHandler onreadystatechange; + [LegacyLenientThis] attribute EventHandler onreadystatechange; // also has obsolete members }; @@ -119,7 +119,7 @@ interface HTMLElement : Element { [CEReactions] attribute boolean spellcheck; [CEReactions] attribute DOMString autocapitalize; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString innerText; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString innerText; ElementInternals attachInternals(); }; @@ -145,7 +145,7 @@ interface mixin HTMLOrSVGElement { }; [Exposed=Window, - OverrideBuiltins] + LegacyOverrideBuiltIns] interface DOMStringMap { getter DOMString (DOMString name); [CEReactions] setter void (DOMString name, DOMString value); @@ -365,7 +365,7 @@ interface HTMLSourceElement : HTMLElement { }; [Exposed=Window, - NamedConstructor=Image(optional unsigned long width, optional unsigned long height)] + LegacyFactoryFunction=Image(optional unsigned long width, optional unsigned long height)] interface HTMLImageElement : HTMLElement { [HTMLConstructor] constructor(); @@ -463,7 +463,7 @@ interface HTMLVideoElement : HTMLMediaElement { }; [Exposed=Window, - NamedConstructor=Audio(optional DOMString src)] + LegacyFactoryFunction=Audio(optional DOMString src)] interface HTMLAudioElement : HTMLMediaElement { [HTMLConstructor] constructor(); }; @@ -766,7 +766,7 @@ interface HTMLTableCellElement : HTMLElement { }; [Exposed=Window, - OverrideBuiltins, + LegacyOverrideBuiltIns, LegacyUnenumerableNamedProperties] interface HTMLFormElement : HTMLElement { [HTMLConstructor] constructor(); @@ -840,7 +840,7 @@ interface HTMLInputElement : HTMLElement { [CEReactions] attribute DOMString step; [CEReactions] attribute DOMString type; [CEReactions] attribute DOMString defaultValue; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString value; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString value; attribute object? valueAsDate; attribute unrestricted double valueAsNumber; [CEReactions] attribute unsigned long width; @@ -944,7 +944,7 @@ interface HTMLOptGroupElement : HTMLElement { }; [Exposed=Window, - NamedConstructor=Option(optional DOMString text = "", optional DOMString value, optional boolean defaultSelected = false, optional boolean selected = false)] + LegacyFactoryFunction=Option(optional DOMString text = "", optional DOMString value, optional boolean defaultSelected = false, optional boolean selected = false)] interface HTMLOptionElement : HTMLElement { [HTMLConstructor] constructor(); @@ -979,7 +979,7 @@ interface HTMLTextAreaElement : HTMLElement { readonly attribute DOMString type; [CEReactions] attribute DOMString defaultValue; - attribute [TreatNullAs=EmptyString] DOMString value; + attribute [LegacyNullToEmptyString] DOMString value; readonly attribute unsigned long textLength; readonly attribute boolean willValidate; @@ -1269,7 +1269,7 @@ interface mixin CanvasFillStrokeStyles { attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black) CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1); CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1); - CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition); + CanvasPattern? createPattern(CanvasImageSource image, [LegacyNullToEmptyString] DOMString repetition); }; @@ -1593,11 +1593,11 @@ dictionary DragEventInit : MouseEventInit { LegacyUnenumerableNamedProperties] interface Window : EventTarget { // the current browsing context - [Unforgeable] readonly attribute WindowProxy window; + [LegacyUnforgeable] readonly attribute WindowProxy window; [Replaceable] readonly attribute WindowProxy self; - [Unforgeable] readonly attribute Document document; + [LegacyUnforgeable] readonly attribute Document document; attribute DOMString name; - [PutForwards=href, Unforgeable] readonly attribute Location location; + [PutForwards=href, LegacyUnforgeable] readonly attribute Location location; readonly attribute History history; readonly attribute CustomElementRegistry customElements; [Replaceable] readonly attribute BarProp locationbar; @@ -1616,11 +1616,11 @@ interface Window : EventTarget { // other browsing contexts [Replaceable] readonly attribute WindowProxy frames; [Replaceable] readonly attribute unsigned long length; - [Unforgeable] readonly attribute WindowProxy? top; + [LegacyUnforgeable] readonly attribute WindowProxy? top; attribute any opener; [Replaceable] readonly attribute WindowProxy? parent; readonly attribute Element? frameElement; - WindowProxy? open(optional USVString url = "", optional DOMString target = "_blank", optional [TreatNullAs=EmptyString] DOMString features = ""); + WindowProxy? open(optional USVString url = "", optional DOMString target = "_blank", optional [LegacyNullToEmptyString] DOMString features = ""); getter object (DOMString name); // Since this is the global object, the IDL named getter adds a NamedPropertiesObject exotic // object on the prototype chain. Indeed, this does not make the global object an exotic object. @@ -1668,21 +1668,21 @@ interface History { [Exposed=Window] interface Location { // but see also additional creation steps and overridden internal methods - [Unforgeable] stringifier attribute USVString href; - [Unforgeable] readonly attribute USVString origin; - [Unforgeable] attribute USVString protocol; - [Unforgeable] attribute USVString host; - [Unforgeable] attribute USVString hostname; - [Unforgeable] attribute USVString port; - [Unforgeable] attribute USVString pathname; - [Unforgeable] attribute USVString search; - [Unforgeable] attribute USVString hash; + [LegacyUnforgeable] stringifier attribute USVString href; + [LegacyUnforgeable] readonly attribute USVString origin; + [LegacyUnforgeable] attribute USVString protocol; + [LegacyUnforgeable] attribute USVString host; + [LegacyUnforgeable] attribute USVString hostname; + [LegacyUnforgeable] attribute USVString port; + [LegacyUnforgeable] attribute USVString pathname; + [LegacyUnforgeable] attribute USVString search; + [LegacyUnforgeable] attribute USVString hash; - [Unforgeable] void assign(USVString url); - [Unforgeable] void replace(USVString url); - [Unforgeable] void reload(); + [LegacyUnforgeable] void assign(USVString url); + [LegacyUnforgeable] void replace(USVString url); + [LegacyUnforgeable] void reload(); - [Unforgeable, SameObject] readonly attribute DOMStringList ancestorOrigins; + [LegacyUnforgeable, SameObject] readonly attribute DOMStringList ancestorOrigins; }; [Exposed=Window, @@ -1787,15 +1787,15 @@ dictionary PromiseRejectionEventInit : EventInit { any reason; }; -[TreatNonObjectAsNull] +[LegacyTreatNonObjectAsNull] callback EventHandlerNonNull = any (Event event); typedef EventHandlerNonNull? EventHandler; -[TreatNonObjectAsNull] +[LegacyTreatNonObjectAsNull] callback OnErrorEventHandlerNonNull = any ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long colno, optional any error); typedef OnErrorEventHandlerNonNull? OnErrorEventHandler; -[TreatNonObjectAsNull] +[LegacyTreatNonObjectAsNull] callback OnBeforeUnloadEventHandlerNonNull = DOMString? (Event event); typedef OnBeforeUnloadEventHandlerNonNull? OnBeforeUnloadEventHandler; @@ -1836,8 +1836,8 @@ interface mixin GlobalEventHandlers { attribute EventHandler onloadedmetadata; attribute EventHandler onloadstart; attribute EventHandler onmousedown; - [LenientThis] attribute EventHandler onmouseenter; - [LenientThis] attribute EventHandler onmouseleave; + [LegacyLenientThis] attribute EventHandler onmouseenter; + [LegacyLenientThis] attribute EventHandler onmouseleave; attribute EventHandler onmousemove; attribute EventHandler onmouseout; attribute EventHandler onmouseover; @@ -1969,7 +1969,7 @@ interface mixin NavigatorLanguage { }; interface mixin NavigatorContentUtils { - [SecureContext] void registerProtocolHandler(DOMString scheme, USVString url, DOMString title); + [SecureContext] void registerProtocolHandler(DOMString scheme, USVString url); [SecureContext] void unregisterProtocolHandler(DOMString scheme, USVString url); }; @@ -2361,8 +2361,8 @@ interface HTMLFrameElement : HTMLElement { readonly attribute Document? contentDocument; readonly attribute WindowProxy? contentWindow; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString marginHeight; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString marginWidth; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString marginHeight; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString marginWidth; }; partial interface HTMLAnchorElement { @@ -2378,11 +2378,11 @@ partial interface HTMLAreaElement { }; partial interface HTMLBodyElement { - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString text; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString link; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString vLink; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString aLink; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString bgColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString text; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString link; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString vLink; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString aLink; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString bgColor; [CEReactions] attribute DOMString background; }; @@ -2426,7 +2426,7 @@ partial interface HTMLEmbedElement { interface HTMLFontElement : HTMLElement { [HTMLConstructor] constructor(); - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString color; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString color; [CEReactions] attribute DOMString face; [CEReactions] attribute DOMString size; }; @@ -2453,8 +2453,8 @@ partial interface HTMLIFrameElement { [CEReactions] attribute DOMString frameBorder; [CEReactions] attribute USVString longDesc; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString marginHeight; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString marginWidth; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString marginHeight; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString marginWidth; }; partial interface HTMLImageElement { @@ -2465,7 +2465,7 @@ partial interface HTMLImageElement { [CEReactions] attribute unsigned long vspace; [CEReactions] attribute USVString longDesc; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString border; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString border; }; partial interface HTMLInputElement { @@ -2506,7 +2506,7 @@ partial interface HTMLObjectElement { [CEReactions] attribute DOMString codeBase; [CEReactions] attribute DOMString codeType; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString border; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString border; }; partial interface HTMLOListElement { @@ -2544,9 +2544,9 @@ partial interface HTMLTableElement { [CEReactions] attribute DOMString summary; [CEReactions] attribute DOMString width; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString bgColor; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString cellPadding; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString cellSpacing; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString bgColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString cellPadding; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString cellSpacing; }; partial interface HTMLTableSectionElement { @@ -2567,7 +2567,7 @@ partial interface HTMLTableCellElement { [CEReactions] attribute boolean noWrap; [CEReactions] attribute DOMString vAlign; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString bgColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString bgColor; }; partial interface HTMLTableRowElement { @@ -2576,7 +2576,7 @@ partial interface HTMLTableRowElement { [CEReactions] attribute DOMString chOff; [CEReactions] attribute DOMString vAlign; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString bgColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString bgColor; }; partial interface HTMLUListElement { @@ -2585,11 +2585,11 @@ partial interface HTMLUListElement { }; partial interface Document { - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString fgColor; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString linkColor; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString vlinkColor; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString alinkColor; - [CEReactions] attribute [TreatNullAs=EmptyString] DOMString bgColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString fgColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString linkColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString vlinkColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString alinkColor; + [CEReactions] attribute [LegacyNullToEmptyString] DOMString bgColor; [SameObject] readonly attribute HTMLCollection anchors; [SameObject] readonly attribute HTMLCollection applets; diff --git a/tests/wpt/web-platform-tests/interfaces/pointerevents.idl b/tests/wpt/web-platform-tests/interfaces/pointerevents.idl index 728fff98d91..8a42b5a8446 100644 --- a/tests/wpt/web-platform-tests/interfaces/pointerevents.idl +++ b/tests/wpt/web-platform-tests/interfaces/pointerevents.idl @@ -12,6 +12,8 @@ dictionary PointerEventInit : MouseEventInit { long tiltX = 0; long tiltY = 0; long twist = 0; + double altitudeAngle = 0; + double azimuthAngle = 0; DOMString pointerType = ""; boolean isPrimary = false; sequence coalescedEvents = []; @@ -29,6 +31,8 @@ interface PointerEvent : MouseEvent { readonly attribute long tiltX; readonly attribute long tiltY; readonly attribute long twist; + readonly attribute double altitudeAngle; + readonly attribute double azimuthAngle; readonly attribute DOMString pointerType; readonly attribute boolean isPrimary; [SecureContext] sequence getCoalescedEvents(); diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl index e3c2da8d2ab..24b76ad0fe6 100644 --- a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl +++ b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl @@ -28,17 +28,17 @@ enum RTCStatsType { }; dictionary RTCRtpStreamStats : RTCStats { - unsigned long ssrc; - DOMString kind; + required unsigned long ssrc; + required DOMString kind; DOMString transportId; DOMString codecId; }; dictionary RTCCodecStats : RTCStats { - unsigned long payloadType; + required unsigned long payloadType; RTCCodecType codecType; - DOMString transportId; - DOMString mimeType; + required DOMString transportId; + required DOMString mimeType; unsigned long clockRate; unsigned long channels; DOMString sdpFmtpLine; @@ -70,8 +70,7 @@ dictionary RTCReceivedRtpStreamStats : RTCRtpStreamStats { }; dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats { - DOMString trackId; - DOMString receiverId; + required DOMString receiverId; DOMString remoteId; unsigned long framesDecoded; unsigned long keyFramesDecoded; @@ -131,7 +130,6 @@ dictionary RTCSentRtpStreamStats : RTCRtpStreamStats { dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats { unsigned long rtxSsrc; - DOMString trackId; DOMString mediaSourceId; DOMString senderId; DOMString remoteId; @@ -187,8 +185,8 @@ dictionary RTCRemoteOutboundRtpStreamStats : RTCSentRtpStreamStats { }; dictionary RTCMediaSourceStats : RTCStats { - DOMString trackIdentifier; - DOMString kind; + required DOMString trackIdentifier; + required DOMString kind; boolean relayedSource; }; @@ -209,8 +207,8 @@ dictionary RTCVideoSourceStats : RTCMediaSourceStats { }; dictionary RTCRtpContributingSourceStats : RTCStats { - unsigned long contributorSsrc; - DOMString inboundRtpStreamId; + required unsigned long contributorSsrc; + required DOMString inboundRtpStreamId; unsigned long packetsContributedTo; double audioLevel; }; @@ -223,15 +221,15 @@ dictionary RTCPeerConnectionStats : RTCStats { }; dictionary RTCRtpTransceiverStats : RTCStats { - DOMString senderId; - DOMString receiverId; + required DOMString senderId; + required DOMString receiverId; DOMString mid; }; dictionary RTCMediaHandlerStats : RTCStats { DOMString trackIdentifier; boolean ended; - DOMString kind; + required DOMString kind; }; dictionary RTCVideoHandlerStats : RTCMediaHandlerStats { @@ -258,8 +256,8 @@ dictionary RTCDataChannelStats : RTCStats { DOMString label; DOMString protocol; unsigned short dataChannelIdentifier; - DOMString transportId; - RTCDataChannelState state; + required DOMString transportId; + required RTCDataChannelState state; unsigned long messagesSent; unsigned long long bytesSent; unsigned long messagesReceived; @@ -274,7 +272,7 @@ dictionary RTCTransportStats : RTCStats { DOMString rtcpTransportStatsId; RTCIceRole iceRole; DOMString iceLocalUsernameFragment; - RTCDtlsTransportState dtlsState; + required RTCDtlsTransportState dtlsState; RTCIceTransportState iceState; DOMString selectedCandidatePairId; DOMString localCertificateId; @@ -295,21 +293,21 @@ dictionary RTCSctpTransportStats : RTCStats { }; dictionary RTCIceCandidateStats : RTCStats { - DOMString transportId; + required DOMString transportId; DOMString? address; long port; DOMString protocol; - RTCIceCandidateType candidateType; + required RTCIceCandidateType candidateType; long priority; DOMString url; DOMString relayProtocol; }; dictionary RTCIceCandidatePairStats : RTCStats { - DOMString transportId; - DOMString localCandidateId; - DOMString remoteCandidateId; - RTCStatsIceCandidatePairState state; + required DOMString transportId; + required DOMString localCandidateId; + required DOMString remoteCandidateId; + required RTCStatsIceCandidatePairState state; boolean nominated; unsigned long long packetsSent; unsigned long long packetsReceived; @@ -349,14 +347,14 @@ enum RTCStatsIceCandidatePairState { }; dictionary RTCCertificateStats : RTCStats { - DOMString fingerprint; - DOMString fingerprintAlgorithm; - DOMString base64Certificate; + required DOMString fingerprint; + required DOMString fingerprintAlgorithm; + required DOMString base64Certificate; DOMString issuerCertificateId; }; dictionary RTCIceServerStats : RTCStats { - DOMString url; + required DOMString url; long port; DOMString protocol; unsigned long totalRequestsSent; diff --git a/tests/wpt/web-platform-tests/interfaces/webxr.idl b/tests/wpt/web-platform-tests/interfaces/webxr.idl index 5f5320c2055..2d83277526d 100644 --- a/tests/wpt/web-platform-tests/interfaces/webxr.idl +++ b/tests/wpt/web-platform-tests/interfaces/webxr.idl @@ -65,6 +65,7 @@ dictionary XRRenderStateInit { double depthFar; double inlineVerticalFieldOfView; XRWebGLLayer? baseLayer; + sequence? layers; }; [SecureContext, Exposed=Window] interface XRRenderState { @@ -172,6 +173,9 @@ interface XRInputSourceArray { getter XRInputSource(unsigned long index); }; +[SecureContext, Exposed=Window] +interface XRLayer {}; + typedef (WebGLRenderingContext or WebGL2RenderingContext) XRWebGLRenderingContext; @@ -185,7 +189,7 @@ dictionary XRWebGLLayerInit { }; [SecureContext, Exposed=Window] -interface XRWebGLLayer { +interface XRWebGLLayer: XRLayer { constructor(XRSession session, XRWebGLRenderingContext context, optional XRWebGLLayerInit layerInit = {}); diff --git a/tests/wpt/web-platform-tests/layout-instability/resources/util.js b/tests/wpt/web-platform-tests/layout-instability/resources/util.js index 515914e11fa..2ef971ddb79 100644 --- a/tests/wpt/web-platform-tests/layout-instability/resources/util.js +++ b/tests/wpt/web-platform-tests/layout-instability/resources/util.js @@ -59,6 +59,7 @@ ScoreWatcher = function() { resetPromise(); const observer = new PerformanceObserver(list => { list.getEntries().forEach(entry => { + this.lastEntry = entry; this.score += entry.value; if (!entry.hadRecentInput) this.scoreWithInputExclusion += entry.value; diff --git a/tests/wpt/web-platform-tests/layout-instability/sources.html b/tests/wpt/web-platform-tests/layout-instability/sources.html new file mode 100644 index 00000000000..599a5c471b3 --- /dev/null +++ b/tests/wpt/web-platform-tests/layout-instability/sources.html @@ -0,0 +1,38 @@ + +Layout Instability: sources attribute + + +
+ + + + diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 42102299396..726b64c56ac 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -756,3 +756,12 @@ TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-circul TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-under-clip-path-crash.html TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-under-defs-crash.html TESTHARNESS-IN-OTHER-TYPE: svg/svg-in-svg/svg-in-svg-circular-filter-reference-crash.html + +# TODO: Temporary inclusions while we deprecate assert_precondition +# https://github.com/web-platform-tests/wpt/issues/21971 +ASSERT-PRECONDITION: infrastructure/expected-fail/precondition.html +ASSERT-PRECONDITION: infrastructure/expected-fail/precondition-in-setup.html +ASSERT-PRECONDITION: infrastructure/expected-fail/precondition-in-promise.html +ASSERT-PRECONDITION: resources/testharness.js +ASSERT-PRECONDITION: webrtc/protocol/crypto-suite.https.html +ASSERT-PRECONDITION: webrtc-extensions/RTCRtpSynchronizationSource-captureTimestamp.html diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-enumerateDevices.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-enumerateDevices.https.html index efb46073169..92512eef012 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-enumerateDevices.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaDevices-enumerateDevices.https.html @@ -15,18 +15,33 @@ diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js index d01da49c2d5..a5e2ca0b25a 100644 --- a/tests/wpt/web-platform-tests/resources/idlharness.js +++ b/tests/wpt/web-platform-tests/resources/idlharness.js @@ -1333,7 +1333,8 @@ function IdlInterface(obj, is_callback, is_mixin) /** An array of IdlInterfaceMembers. */ this.members = obj.members.map(function(m){return new IdlInterfaceMember(m); }); - if (this.has_extended_attribute("Unforgeable")) { + if (this.has_extended_attribute("Unforgeable") || + this.has_extended_attribute("LegacyUnforgeable")) { this.members .filter(function(m) { return m.special !== "static" && (m.type == "attribute" || m.type == "operation"); }) .forEach(function(m) { return m.isUnforgeable = true; }); @@ -1795,11 +1796,12 @@ IdlInterface.prototype.test_self = function() }.bind(this), this.name + " interface: legacy window alias"); } - if (this.has_extended_attribute("NamedConstructor")) { + if (this.has_extended_attribute("NamedConstructor") || + this.has_extended_attribute("LegacyFactoryFunction")) { var constructors = this.extAttrs - .filter(function(attr) { return attr.name == "NamedConstructor"; }); + .filter(function(attr) { return attr.name == "NamedConstructor" || attr.name == "LegacyFactoryFunction"; }); if (constructors.length !== 1) { - throw new IdlHarnessError("Internal error: missing support for multiple NamedConstructor extended attributes"); + throw new IdlHarnessError("Internal error: missing support for multiple LegacyFactoryFunction extended attributes"); } var constructor = constructors[0]; var min_length = minOverloadLength([constructor]); @@ -1808,10 +1810,10 @@ IdlInterface.prototype.test_self = function() { // This function tests WebIDL as of 2019-01-14. - // "for every [NamedConstructor] extended attribute on an exposed + // "for every [LegacyFactoryFunction] extended attribute on an exposed // interface, a corresponding property must exist on the ECMAScript // global object. The name of the property is the - // [NamedConstructor]'s identifier, and its value is an object + // [LegacyFactoryFunction]'s identifier, and its value is an object // called a named constructor, ... . The property has the attributes // { [[Writable]]: true, [[Enumerable]]: false, // [[Configurable]]: true }." @@ -2371,7 +2373,8 @@ IdlInterface.prototype.test_member_attribute = function(member) "The prototype object must have a property " + format_value(member.name)); - if (!member.has_extended_attribute("LenientThis")) { + if (!member.has_extended_attribute("LenientThis") && + !member.has_extended_attribute("LegacyLenientThis")) { if (member.idlType.generic !== "Promise") { // this.get_interface_object() returns a thing in our global assert_throws_js(TypeError, function() { @@ -3027,7 +3030,7 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_ // "The property has attributes { [[Get]]: G, [[Set]]: S, [[Enumerable]]: // true, [[Configurable]]: configurable }, where: // "configurable is false if the attribute was declared with the - // [Unforgeable] extended attribute and true otherwise; + // [LegacyUnforgeable] extended attribute and true otherwise; // "G is the attribute getter, defined below; and // "S is the attribute setter, also defined below." var desc = Object.getOwnPropertyDescriptor(obj, member.name); @@ -3036,7 +3039,7 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_ assert_true(desc.enumerable, "property should be enumerable"); if (member.isUnforgeable) { - assert_false(desc.configurable, "[Unforgeable] property must not be configurable"); + assert_false(desc.configurable, "[LegacyUnforgeable] property must not be configurable"); } else { @@ -3051,10 +3054,11 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_ // "If the attribute is a regular attribute, then:" if (member.special !== "static") { // "If O is not a platform object that implements I, then: - // "If the attribute was specified with the [LenientThis] extended + // "If the attribute was specified with the [LegacyLenientThis] extended // attribute, then return undefined. // "Otherwise, throw a TypeError." - if (!member.has_extended_attribute("LenientThis")) { + if (!member.has_extended_attribute("LenientThis") && + !member.has_extended_attribute("LegacyLenientThis")) { if (member.idlType.generic !== "Promise") { assert_throws_js(globalOf(desc.get).TypeError, function() { desc.get.call({}); @@ -3101,12 +3105,13 @@ IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member, a_ // "If the attribute is a regular attribute, then:" if (member.special !== "static") { // "If /validThis/ is false and the attribute was not specified - // with the [LenientThis] extended attribute, then throw a + // with the [LegacyLenientThis] extended attribute, then throw a // TypeError." // "If the attribute is declared with a [Replaceable] extended // attribute, then: ..." // "If validThis is false, then return." - if (!member.has_extended_attribute("LenientThis")) { + if (!member.has_extended_attribute("LenientThis") && + !member.has_extended_attribute("LegacyLenientThis")) { assert_throws_js(globalOf(desc.set).TypeError, function() { desc.set.call({}); }.bind(this), "calling setter on wrong object type must throw TypeError"); @@ -3146,7 +3151,8 @@ function IdlInterfaceMember(obj) this.extAttrs = []; } - this.isUnforgeable = this.has_extended_attribute("Unforgeable"); + this.isUnforgeable = this.has_extended_attribute("Unforgeable") || + this.has_extended_attribute("LegacyUnforgeable"); this.isUnscopable = this.has_extended_attribute("Unscopable"); } diff --git a/tests/wpt/web-platform-tests/scroll-animations/element-based-offset.html b/tests/wpt/web-platform-tests/scroll-animations/element-based-offset.html index 1c7d9982285..064ab4c5f3a 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/element-based-offset.html +++ b/tests/wpt/web-platform-tests/scroll-animations/element-based-offset.html @@ -89,6 +89,10 @@ endScrollOffset: {target: end, ...config.end } }); + // Wait for new animation frame which allows the timeline to compute new + // current time. + await waitForNextFrame(); + const animation = createScrollLinkedAnimation(t, timeline); const scrollRange = end.offsetTop - start.offsetTop; const timeRange = animation.timeline.timeRange; @@ -100,11 +104,12 @@ "The start time is null in Idle state."); animation.play(); + assert_true(animation.pending, "Animation is in pending state."); // Verify initial start and current times in Pending state. assert_times_equal(animation.currentTime, 0, - "The current time is a hold time in Pending state."); - assert_equals(animation.startTime, null, - "The start time is null in Pending state."); + "The current time is zero in Pending state."); + assert_equals(animation.startTime, 0, + "The start time is zero in Pending state."); await animation.ready; // Verify initial start and current times in Playing state. diff --git a/tests/wpt/web-platform-tests/scroll-animations/scroll-animation-inactive-timeline.html b/tests/wpt/web-platform-tests/scroll-animations/scroll-animation-inactive-timeline.html new file mode 100644 index 00000000000..07dae95692e --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-animations/scroll-animation-inactive-timeline.html @@ -0,0 +1,144 @@ + + +Test basic functionality of scroll linked animation. + + + + + +
+ \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/scroll-animations/scroll-animation.html b/tests/wpt/web-platform-tests/scroll-animations/scroll-animation.html index 901549e7a44..cb270d52f7c 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/scroll-animation.html +++ b/tests/wpt/web-platform-tests/scroll-animations/scroll-animation.html @@ -23,7 +23,10 @@ const animation = createScrollLinkedAnimation(t); const scroller = animation.timeline.scrollSource; const maxScroll = scroller.scrollHeight - scroller.clientHeight; - const timeRange = animation.timeline.timeRange; + + // Wait for new animation frame which allows the timeline to compute new + // current time. + await waitForNextFrame(); // Verify initial start and current times in Idle state. assert_equals(animation.currentTime, null, @@ -31,11 +34,12 @@ assert_equals(animation.startTime, null, "The start time is null in Idle state."); animation.play(); + assert_true(animation.pending, "Animation is in pending state."); // Verify initial start and current times in Pending state. assert_equals(animation.currentTime, 0, - "The current time is a hold time in Pending state."); - assert_equals(animation.startTime, null, - "The start time is null in Pending state."); + "The current time is zero in Pending state."); + assert_equals(animation.startTime, 0, + "The start time is zero in Pending state."); await animation.ready; // Verify initial start and current times in Playing state. @@ -62,7 +66,7 @@ promise_test(async t => { const animation = createScrollLinkedAnimation(t); const scroller = animation.timeline.scrollSource; const maxScroll = scroller.scrollHeight - scroller.clientHeight; - const timeRange = animation.timeline.timeRange; + // Advance the scroller. scroller.scrollTop = 0.2 * maxScroll; // Wait for new animation frame which allows the timeline to compute new @@ -78,8 +82,8 @@ promise_test(async t => { // Verify initial start and current times in Pending state. assert_equals(animation.currentTime, animation.timeline.currentTime, "The current time is a hold time in Pending state."); - assert_equals(animation.startTime, null, - "The start time is null in Pending state."); + assert_equals(animation.startTime, 0, + "The start time is zero in Pending state."); await animation.ready; // Verify initial start and current times in Playing state. @@ -96,7 +100,7 @@ promise_test(async t => { const animation2 = createScrollLinkedAnimation(t, timeline); const scroller = timeline.scrollSource; const maxScroll = scroller.scrollHeight - scroller.clientHeight; - const timeRange = timeline.timeRange; + // Advance the scroller. scroller.scrollTop = 0.2 * maxScroll; // Wait for new animation frame which allows the timeline to compute new @@ -118,13 +122,13 @@ promise_test(async t => { assert_equals(animation1.currentTime, timeline.currentTime, "The current time corresponds to the scroll position of the scroller" + " in Pending state."); - assert_equals(animation1.startTime, null, - "The start time is null in Pending state."); + assert_equals(animation1.startTime, 0, + "The start time is zero in Pending state."); assert_equals(animation2.currentTime, timeline.currentTime, "The current time corresponds to the scroll position of the scroller" + " in Pending state."); - assert_equals(animation2.startTime, null, - "The start time is null in Pending state."); + assert_equals(animation2.startTime, 0, + "The start time is zero in Pending state."); await animation1.ready; await animation2.ready; @@ -140,30 +144,6 @@ promise_test(async t => { }, 'Animation start and current times are correct when multiple animations' + ' are attached to the same timeline.'); -promise_test(async t => { - const animation = createScrollLinkedAnimation(t); - const scroller = animation.timeline.scrollSource; - // Make the scroll timeline inactive. - scroller.style.overflow = "visible"; - // Trigger layout; - scroller.scrollTop; - assert_equals(animation.timeline.currentTime, null, - "Timeline current time is null in inactive state."); - // Play the animation when the timeline is inactive. - animation.play(); - // Make the scroll timeline active. - scroller.style.overflow = "auto"; - await animation.ready; - // Ready promise is resolved as a result of the timeline becoming active. - assert_equals(animation.timeline.currentTime, 0, - "Timeline current time is resolved in active state."); - assert_equals(animation.currentTime, 0, - "Animation current time is resolved when the animation is ready."); - assert_equals(animation.startTime, 0, - "Animation start time is resolved when the animation is ready."); -}, 'Animation start and current times are correct if scroll timeline is ' + - 'activated after animation.play call.'); - promise_test(async t => { const animation = createScrollLinkedAnimation(t); const scroller = animation.timeline.scrollSource; diff --git a/tests/wpt/web-platform-tests/scroll-animations/setting-current-time.html b/tests/wpt/web-platform-tests/scroll-animations/setting-current-time.html index 0b7dcc60034..d46206d8257 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/setting-current-time.html +++ b/tests/wpt/web-platform-tests/scroll-animations/setting-current-time.html @@ -223,5 +223,71 @@ " source has been scrolled." ); }, 'Set Animation current time then scroll.'); + + promise_test(async t => { + const animation = createScrollLinkedAnimation(t); + const scroller = animation.timeline.scrollSource; + + // Wait for new animation frame which allows the timeline to compute new + // current time. + await waitForNextFrame(); + animation.play(); + await animation.ready; + + // Make the timeline inactive. + scroller.style.overflow = 'visible'; + scroller.scrollTop; + await waitForNextFrame(); + + assert_equals(animation.currentTime, null, + 'Current time is unresolved when the timeline is inactive.'); + + animation.currentTime = 300; + assert_equals(animation.currentTime, 300, + 'Animation current time should be equal to the set value.'); + assert_equals(animation.playState, 'paused', + 'Animation play state is \'paused\' when current time is set and ' + + 'timeline is inactive.'); +}, 'Animation current time and play state are correct when current time is ' + + 'set while the timeline is inactive.'); + +promise_test(async t => { + const animation = createScrollLinkedAnimation(t); + const scroller = animation.timeline.scrollSource; + + // Wait for new animation frame which allows the timeline to compute new + // current time. + await waitForNextFrame(); + animation.play(); + await animation.ready; + + // Make the timeline inactive. + scroller.style.overflow = 'visible'; + scroller.scrollTop; + await waitForNextFrame(); + + assert_equals(animation.timeline.currentTime, null, + 'Current time is unresolved when the timeline is inactive.'); + + animation.currentTime = 300; + assert_equals(animation.currentTime, 300, + 'Animation current time should be equal to the set value.'); + assert_equals(animation.playState, 'paused', + 'Animation play state is \'paused\' when current time is set and ' + + 'timeline is inactive.'); + + // Make the timeline active. + scroller.style.overflow = 'auto'; + scroller.scrollTop; + await waitForNextFrame(); + + assert_equals(animation.timeline.currentTime, 0, + 'Current time is resolved when the timeline is active.'); + assert_equals(animation.currentTime, 300, + 'Animation current time holds the set value.'); + assert_equals(animation.playState, 'paused', + 'Animation holds \'paused\' state.'); +}, 'Animation current time set while the timeline is inactive holds when the ' + + 'timeline becomes active again.'); diff --git a/tests/wpt/web-platform-tests/scroll-animations/testcommon.js b/tests/wpt/web-platform-tests/scroll-animations/testcommon.js index 2a89d8e022f..733b5f9f643 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/testcommon.js +++ b/tests/wpt/web-platform-tests/scroll-animations/testcommon.js @@ -27,7 +27,7 @@ function createScrollLinkedAnimation(test, timeline) { if (timeline === undefined) timeline = createScrollTimeline(test); const DURATION = 1000; // ms - const KEYFRAMES = { opacity: [1, 0] }; + const KEYFRAMES = { opacity: [0, 1] }; return new Animation( new KeyframeEffect(createDiv(test), KEYFRAMES, DURATION), timeline); } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/cookie.py b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/cookie.py new file mode 100644 index 00000000000..60688d94382 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/cookie.py @@ -0,0 +1,20 @@ +def main(request, response): + """ + Returns a response with a Set-Cookie header based on the query params. + The body will be "1" if the cookie is present in the request and `drop` parameter is "0", + otherwise the body will be "0". + """ + same_site = request.GET.first("same-site") + cookie_name = request.GET.first("cookie-name") + drop = request.GET.first("drop") + cookie_in_request = "0" + cookie = "%s=1; Secure; SameSite=%s" % (cookie_name, same_site) + + if drop == "1": + cookie += "; Max-Age=0" + + if request.cookies.get(cookie_name): + cookie_in_request = request.cookies[cookie_name].value + + headers = [('Content-Type', 'text/html'), ('Set-Cookie', cookie)] + return (200, headers, cookie_in_request) diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/navigation-preload-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/navigation-preload-worker.js new file mode 100644 index 00000000000..6e1ab232907 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/resources/navigation-preload-worker.js @@ -0,0 +1,3 @@ +self.addEventListener('fetch', event => { + event.respondWith(event.preloadResponse); +}); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/samesite-cookies.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/samesite-cookies.https.html new file mode 100644 index 00000000000..a860d954566 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-preload/samesite-cookies.https.html @@ -0,0 +1,61 @@ + + + +Navigation Preload: SameSite cookies + + + + + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom-attachment.tentative.html b/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom-attachment.tentative.html new file mode 100644 index 00000000000..0acdeb812ec --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom-attachment.tentative.html @@ -0,0 +1,93 @@ + +Declarative Shadow DOM Element Attachment + + + + + + + diff --git a/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom.tentative.html b/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom-basic.tentative.html similarity index 86% rename from tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom.tentative.html rename to tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom-basic.tentative.html index 792d4bf4b3e..c8a00f59bc8 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom.tentative.html +++ b/tests/wpt/web-platform-tests/shadow-dom/declarative/declarative-shadow-dom-basic.tentative.html @@ -113,5 +113,24 @@ test(() => { assert_true(!!host.shadowRoot,"No shadow root found"); assert_false(host.shadowRoot.delegatesFocus,"delegatesFocus should be false without the shadowrootdelegatesfocus attribute"); }, 'Declarative Shadow DOM: delegates focus attribute'); + + +
+ + +
+ + diff --git a/tests/wpt/web-platform-tests/storage/idlharness.https.any.js b/tests/wpt/web-platform-tests/storage/idlharness.https.any.js index 0ce4d5a0c8f..773fac4e4a8 100644 --- a/tests/wpt/web-platform-tests/storage/idlharness.https.any.js +++ b/tests/wpt/web-platform-tests/storage/idlharness.https.any.js @@ -1,5 +1,6 @@ // META: script=/resources/WebIDLParser.js // META: script=/resources/idlharness.js +// META: timeout=long 'use strict'; diff --git a/tests/wpt/web-platform-tests/svg/linking/reftests/url-reference-local-textpath.svg b/tests/wpt/web-platform-tests/svg/linking/reftests/url-reference-local-textpath.svg new file mode 100644 index 00000000000..c90cfb317f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/linking/reftests/url-reference-local-textpath.svg @@ -0,0 +1,10 @@ + + Local URL reference on <textPath> with base URL different from document URL + + + + + + + X + 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 e8dfa6163e5..a5a8ca7db29 100755 --- a/tests/wpt/web-platform-tests/tools/ci/run_tc.py +++ b/tests/wpt/web-platform-tests/tools/ci/run_tc.py @@ -174,13 +174,13 @@ def install_webkitgtk_from_apt_repository(channel): run(["sudo", "apt-get", "-qqy", "-t", "bionic-wpt-webkit-updates", "install", "webkit2gtk-driver"]) -def download_url_to_descriptor(fd, url, max_retries=3): +def download_url_to_descriptor(fd, url, max_retries=5): """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.""" if max_retries < 1: max_retries = 1 - wait = 1 + wait = 2 for current_retry in range(1, max_retries+1): try: print("INFO: Downloading %s Try %d/%d" % (url, current_retry, max_retries)) 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 562239c31e3..d2d76df13a7 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 @@ -4,7 +4,7 @@ components: workerType: ci schedulerId: taskcluster-github deadline: "24 hours" - image: harjgam/web-platform-tests:0.34 + image: webplatformtests/wpt:0.36 maxRunTime: 7200 artifacts: public/results: @@ -103,8 +103,6 @@ components: env: TOXENV: py36 PY_COLORS: 0 - install: - - python3-pip tox-python38: env: diff --git a/tests/wpt/web-platform-tests/tools/docker/Dockerfile b/tests/wpt/web-platform-tests/tools/docker/Dockerfile index 0a842de1ab8..f3927fd0d71 100644 --- a/tests/wpt/web-platform-tests/tools/docker/Dockerfile +++ b/tests/wpt/web-platform-tests/tools/docker/Dockerfile @@ -25,6 +25,8 @@ RUN apt-get -qqy update \ pulseaudio \ python \ python-pip \ + python3 \ + python3-pip \ qemu-kvm \ tzdata \ sudo \ diff --git a/tests/wpt/web-platform-tests/tools/docker/README.md b/tests/wpt/web-platform-tests/tools/docker/README.md index 8b0737359ea..9342aded298 100644 --- a/tests/wpt/web-platform-tests/tools/docker/README.md +++ b/tests/wpt/web-platform-tests/tools/docker/README.md @@ -1,11 +1,18 @@ This docker images is used for testing Chrome, Firefox, WebKitGTK and running other tasks on Taskcluster. When any of the files in this directory change, the -images must be updated as well. To do this, assuming you have docker installed: +images must be updated as well. Doing this requires you be part of the +'webplatformtests' organization on Docker Hub; ping @Hexcles or @stephenmcgruer +if you are not a member. + +In this directory, run the following, where `` is of the form +`webplatformtests/wpt:{current-version + 0.01}`: -In this directory, run ```sh # --pull forces Docker to get the newest base image. docker build --pull -t . docker push ``` +Then update the following Taskcluster configurations to use the new image: +* `.taskcluster.yml` (the decision task) +* `tools/ci/tc/tasks/test.yml` (all the other tasks) diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 2cfd41e967e..1762049d198 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -392,7 +392,8 @@ regexps = [item() for item in # type: ignore rules.MissingDepsRegexp, rules.SpecialPowersRegexp, rules.AssertThrowsRegexp, - rules.PromiseRejectsRegexp]] + rules.PromiseRejectsRegexp, + rules.AssertPreconditionRegexp]] def check_regexp_line(repo_root, path, f): diff --git a/tests/wpt/web-platform-tests/tools/lint/rules.py b/tests/wpt/web-platform-tests/tools/lint/rules.py index b36681d092a..6fbdc1c360d 100644 --- a/tests/wpt/web-platform-tests/tools/lint/rules.py +++ b/tests/wpt/web-platform-tests/tools/lint/rules.py @@ -478,3 +478,11 @@ class PromiseRejectsRegexp(Regexp): file_extensions = [".html", ".htm", ".js", ".xht", ".xhtml", ".svg"] description = "Test-file line has a `promise_rejects(...)` call" to_fix = """Replace with promise_rejects_dom or promise_rejects_js or `promise_rejects_exactly`""" + + +class AssertPreconditionRegexp(Regexp): + pattern = br"[^.]assert_precondition\(" + name = "ASSERT-PRECONDITION" + file_extensions = [".html", ".htm", ".js", ".xht", ".xhtml", ".svg"] + description = "Test-file line has an `assert_precondition(...)` call" + to_fix = """Replace with `assert_implements` or `assert_implements_optional`""" diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py index 62ed53865d7..086560b6a87 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py @@ -64,7 +64,9 @@ class ChromiumFormatter(base.BaseFormatter): """ if "artifacts" not in cur_dict.keys(): cur_dict["artifacts"] = {} - cur_dict["artifacts"][artifact_name] = artifact_value + # Artifacts are all expected to be lists, so even though we only have a + # single |artifact_value| we still put it in a list. + cur_dict["artifacts"][artifact_name] = [artifact_value] def _store_test_result(self, name, actual, expected, message, wpt_actual, subtest_failure): """ @@ -151,13 +153,15 @@ class ChromiumFormatter(base.BaseFormatter): :return str: the expected statuses as a string """ expected_statuses = self._map_status_name(data["expected"]) if "expected" in data else actual_status - if "known_intermittent" in data: + if data.get("known_intermittent"): expected_statuses += " " + " ".join( [self._map_status_name(other_status) for other_status in data["known_intermittent"]]) return expected_statuses def suite_start(self, data): - self.start_timestamp_seconds = (data["time"] if "time" in data + # |data| contains a timestamp in microseconds, while time.time() gives + # it in seconds. + self.start_timestamp_seconds = (float(data["time"]) / 1000 if "time" in data else time.time()) def test_status(self, data): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py index cb6f1ad370f..2a5d3e79280 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py @@ -157,11 +157,11 @@ def test_subtest_messages(capfd): output_json = json.load(output) t1_artifacts = output_json["tests"]["t1"]["artifacts"] - assert t1_artifacts["log"] == "[FAIL expected PASS] t1_a: t1_a_message\n" \ - "[PASS] t1_b: t1_b_message\n" - assert t1_artifacts["wpt_subtest_failure"] == "true" + assert t1_artifacts["log"] == ["[FAIL expected PASS] t1_a: t1_a_message\n" + "[PASS] t1_b: t1_b_message\n"] + assert t1_artifacts["wpt_subtest_failure"] == ["true"] t2_artifacts = output_json["tests"]["t2"]["artifacts"] - assert t2_artifacts["log"] == "[TIMEOUT expected PASS] t2_message\n" + assert t2_artifacts["log"] == ["[TIMEOUT expected PASS] t2_message\n"] assert "wpt_subtest_failure" not in t2_artifacts.keys() @@ -204,14 +204,14 @@ def test_subtest_failure(capfd): test_obj = output_json["tests"]["t1"] t1_artifacts = test_obj["artifacts"] - assert t1_artifacts["log"] == "[FAIL expected PASS] t1_a: t1_a_message\n" \ - "[PASS] t1_b: t1_b_message\n" \ - "[TIMEOUT expected PASS] t1_c: t1_c_message\n" - assert t1_artifacts["wpt_subtest_failure"] == "true" + assert t1_artifacts["log"] == ["[FAIL expected PASS] t1_a: t1_a_message\n" + "[PASS] t1_b: t1_b_message\n" + "[TIMEOUT expected PASS] t1_c: t1_c_message\n"] + assert t1_artifacts["wpt_subtest_failure"] == ["true"] # The status of the test in the output is a failure because subtests failed, # despite the harness reporting that the test passed. But the harness status # is logged as an artifact. - assert t1_artifacts["wpt_actual_status"] == "PASS" + assert t1_artifacts["wpt_actual_status"] == ["PASS"] assert test_obj["actual"] == "FAIL" assert test_obj["expected"] == "PASS" # Also ensure that the formatter cleaned up its internal state @@ -258,9 +258,9 @@ def test_expected_subtest_failure(capfd): test_obj = output_json["tests"]["t1"] t1_log = test_obj["artifacts"]["log"] - assert t1_log == "[FAIL] t1_a: t1_a_message\n" \ - "[PASS] t1_b: t1_b_message\n" \ - "[TIMEOUT] t1_c: t1_c_message\n" + assert t1_log == ["[FAIL] t1_a: t1_a_message\n" + "[PASS] t1_b: t1_b_message\n" + "[TIMEOUT] t1_c: t1_c_message\n"] # The status of the test in the output is a pass because the subtest # failures were all expected. assert test_obj["actual"] == "PASS" @@ -303,11 +303,11 @@ def test_unexpected_subtest_pass(capfd): test_obj = output_json["tests"]["t1"] t1_artifacts = test_obj["artifacts"] - assert t1_artifacts["log"] == "[PASS expected FAIL] t1_a: t1_a_message\n" - assert t1_artifacts["wpt_subtest_failure"] == "true" + assert t1_artifacts["log"] == ["[PASS expected FAIL] t1_a: t1_a_message\n"] + assert t1_artifacts["wpt_subtest_failure"] == ["true"] # Since the subtest status is unexpected, we fail the test. But we report # wpt_actual_status as an artifact - assert t1_artifacts["wpt_actual_status"] == "PASS" + assert t1_artifacts["wpt_actual_status"] == ["PASS"] assert test_obj["actual"] == "FAIL" assert test_obj["expected"] == "PASS" # Also ensure that the formatter cleaned up its internal state @@ -482,7 +482,39 @@ def test_precondition_failed(capfd): # The precondition failure should map to FAIL status, but we should also # have an artifact containing the original PRECONDITION_FAILED status. assert test_obj["actual"] == "FAIL" - assert test_obj["artifacts"]["wpt_actual_status"] == "PRECONDITION_FAILED" + assert test_obj["artifacts"]["wpt_actual_status"] == ["PRECONDITION_FAILED"] # ...this is an unexpected regression because we expected a pass but failed assert test_obj["is_regression"] is True assert test_obj["is_unexpected"] is True + + +def test_known_intermittent_empty(capfd): + # If the known_intermittent list is empty, we want to ensure we don't append + # any extraneous characters to the output. + + # set up the handler. + output = StringIO() + logger = structuredlog.StructuredLogger("test_a") + logger.add_handler(handlers.StreamHandler(output, ChromiumFormatter())) + + # Run a test and include an empty known_intermittent list + logger.suite_start(["t1"], run_info={}, time=123) + logger.test_start("t1") + logger.test_end("t1", status="OK", expected="OK", known_intermittent=[]) + logger.suite_end() + + # check nothing got output to stdout/stderr + # (note that mozlog outputs exceptions during handling to stderr!) + captured = capfd.readouterr() + assert captured.out == "" + assert captured.err == "" + + # check the actual output of the formatter + output.seek(0) + output_json = json.load(output) + + test_obj = output_json["tests"]["t1"] + # Both actual and expected statuses get mapped to Pass. No extra whitespace + # anywhere. + assert test_obj["actual"] == "PASS" + assert test_obj["expected"] == "PASS" diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py index 1e27f90d91a..8f828ff43ab 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wpttest.py @@ -349,6 +349,9 @@ class Test(object): if implementation_status: return implementation_status + # assuming no specific case, we are implementing it + return "implementing" + def known_intermittent(self, subtest=None): metadata = self._get_metadata(subtest) if metadata is None: diff --git a/tests/wpt/web-platform-tests/vibration/idlharness.window.js b/tests/wpt/web-platform-tests/vibration/idlharness.window.js index fbe14daa611..a3cfbc11e03 100644 --- a/tests/wpt/web-platform-tests/vibration/idlharness.window.js +++ b/tests/wpt/web-platform-tests/vibration/idlharness.window.js @@ -1,5 +1,6 @@ // META: script=/resources/WebIDLParser.js // META: script=/resources/idlharness.js +// META: timeout=long 'use strict'; diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/error-interfaces-no-symbol-tostringtag.js b/tests/wpt/web-platform-tests/wasm/jsapi/error-interfaces-no-symbol-tostringtag.js new file mode 100644 index 00000000000..572db0c01b6 --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/error-interfaces-no-symbol-tostringtag.js @@ -0,0 +1,13 @@ +// META: global=jsshell + +test(() => { + assert_not_own_property(WebAssembly.CompileError.prototype, Symbol.toStringTag); +}, "WebAssembly.CompileError"); + +test(() => { + assert_not_own_property(WebAssembly.LinkError.prototype, Symbol.toStringTag); +}, "WebAssembly.LinkError"); + +test(() => { + assert_not_own_property(WebAssembly.RuntimeError.prototype, Symbol.toStringTag); +}, "WebAssembly.RuntimeError"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js index ca025576c2b..5f64d72de9d 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js @@ -5,3 +5,13 @@ test(() => { const global = new WebAssembly.Global(argument); assert_class_string(global, "WebAssembly.Global"); }, "Object.prototype.toString on an Global"); + +test(() => { + assert_own_property(WebAssembly.Global.prototype, Symbol.toStringTag); + + const propDesc = Object.getOwnPropertyDescriptor(WebAssembly.Global.prototype, Symbol.toStringTag); + assert_equals(propDesc.value, "WebAssembly.Global", "value"); + assert_equals(propDesc.configurable, true, "configurable"); + assert_equals(propDesc.enumerable, false, "enumerable"); + assert_equals(propDesc.writable, false, "writable"); +}, "@@toStringTag exists on the prototype with the appropriate descriptor"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js index ccd665eb285..701ec8f9bad 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js @@ -7,3 +7,13 @@ test(() => { const instance = new WebAssembly.Instance(module); assert_class_string(instance, "WebAssembly.Instance"); }, "Object.prototype.toString on an Instance"); + +test(() => { + assert_own_property(WebAssembly.Instance.prototype, Symbol.toStringTag); + + const propDesc = Object.getOwnPropertyDescriptor(WebAssembly.Instance.prototype, Symbol.toStringTag); + assert_equals(propDesc.value, "WebAssembly.Instance", "value"); + assert_equals(propDesc.configurable, true, "configurable"); + assert_equals(propDesc.enumerable, false, "enumerable"); + assert_equals(propDesc.writable, false, "writable"); +}, "@@toStringTag exists on the prototype with the appropriate descriptor"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js index 4e15d75ea20..bb9081d1861 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js @@ -5,3 +5,13 @@ test(() => { const memory = new WebAssembly.Memory(argument); assert_class_string(memory, "WebAssembly.Memory"); }, "Object.prototype.toString on an Memory"); + +test(() => { + assert_own_property(WebAssembly.Memory.prototype, Symbol.toStringTag); + + const propDesc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, Symbol.toStringTag); + assert_equals(propDesc.value, "WebAssembly.Memory", "value"); + assert_equals(propDesc.configurable, true, "configurable"); + assert_equals(propDesc.enumerable, false, "enumerable"); + assert_equals(propDesc.writable, false, "writable"); +}, "@@toStringTag exists on the prototype with the appropriate descriptor"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js index 2db2002ffd2..7dd85a1c4ac 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js @@ -6,3 +6,13 @@ test(() => { const module = new WebAssembly.Module(emptyModuleBinary); assert_class_string(module, "WebAssembly.Module"); }, "Object.prototype.toString on an Module"); + +test(() => { + assert_own_property(WebAssembly.Module.prototype, Symbol.toStringTag); + + const propDesc = Object.getOwnPropertyDescriptor(WebAssembly.Module.prototype, Symbol.toStringTag); + assert_equals(propDesc.value, "WebAssembly.Module", "value"); + assert_equals(propDesc.configurable, true, "configurable"); + assert_equals(propDesc.enumerable, false, "enumerable"); + assert_equals(propDesc.writable, false, "writable"); +}, "@@toStringTag exists on the prototype with the appropriate descriptor"); diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/proto-from-ctor-realm.html b/tests/wpt/web-platform-tests/wasm/jsapi/proto-from-ctor-realm.html new file mode 100644 index 00000000000..72931cca77c --- /dev/null +++ b/tests/wpt/web-platform-tests/wasm/jsapi/proto-from-ctor-realm.html @@ -0,0 +1,95 @@ + + +WebAssembly JS API: Default [[Prototype]] value is from NewTarget's Realm + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js index e576477910a..708c17b3aca 100644 --- a/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js +++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js @@ -5,3 +5,13 @@ test(() => { const table = new WebAssembly.Table(argument); assert_class_string(table, "WebAssembly.Table"); }, "Object.prototype.toString on an Table"); + +test(() => { + assert_own_property(WebAssembly.Table.prototype, Symbol.toStringTag); + + const propDesc = Object.getOwnPropertyDescriptor(WebAssembly.Table.prototype, Symbol.toStringTag); + assert_equals(propDesc.value, "WebAssembly.Table", "value"); + assert_equals(propDesc.configurable, true, "configurable"); + assert_equals(propDesc.enumerable, false, "enumerable"); + assert_equals(propDesc.writable, false, "writable"); +}, "@@toStringTag exists on the prototype with the appropriate descriptor"); diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pending.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pending.html index fe7efe05aaf..c200f9e9773 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pending.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animation/pending.html @@ -31,5 +31,25 @@ promise_test(t => { }); }, 'reports true -> false when paused'); +promise_test(async t => { + const animation = + new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC), + null); + animation.play(); + assert_true(animation.pending); + await waitForAnimationFrames(2); + assert_true(animation.pending); +}, 'reports true -> true when played without a timeline'); + +promise_test(async t => { + const animation = + new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC), + null); + animation.pause(); + assert_true(animation.pending); + await waitForAnimationFrames(2); + assert_true(animation.pending); +}, 'reports true -> true when paused without a timeline'); + diff --git a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html index dd861750395..7e98ef4260f 100644 --- a/tests/wpt/web-platform-tests/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html +++ b/tests/wpt/web-platform-tests/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html @@ -60,7 +60,7 @@ test(t => { new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC), null); animation.startTime = document.timeline.currentTime; - assert_equals(animation.playState, 'idle'); + assert_equals(animation.playState, 'running'); animation.timeline = document.timeline; @@ -73,7 +73,7 @@ test(t => { new Animation(new KeyframeEffect(createDiv(t), null, 100 * MS_PER_SEC), null); animation.startTime = document.timeline.currentTime - 200 * MS_PER_SEC; - assert_equals(animation.playState, 'idle'); + assert_equals(animation.playState, 'running'); animation.timeline = document.timeline; diff --git a/tests/wpt/web-platform-tests/web-locks/idlharness.tentative.https.any.js b/tests/wpt/web-platform-tests/web-locks/idlharness.tentative.https.any.js index 1ad570370e5..2df7831c340 100644 --- a/tests/wpt/web-platform-tests/web-locks/idlharness.tentative.https.any.js +++ b/tests/wpt/web-platform-tests/web-locks/idlharness.tentative.https.any.js @@ -1,6 +1,7 @@ // META: script=/resources/WebIDLParser.js // META: script=/resources/idlharness.js // META: global=window,dedicatedworker,sharedworker,serviceworker +// META: timeout=long 'use strict'; diff --git a/tests/wpt/web-platform-tests/hit-test/idlharness.https.html b/tests/wpt/web-platform-tests/webxr/hit-test/idlharness.https.html similarity index 100% rename from tests/wpt/web-platform-tests/hit-test/idlharness.https.html rename to tests/wpt/web-platform-tests/webxr/hit-test/idlharness.https.html diff --git a/tests/wpt/web-platform-tests/workers/WorkerNavigator_userAgentData.http.html b/tests/wpt/web-platform-tests/workers/WorkerNavigator_userAgentData.http.html index e47e7e7ceba..4e8ca34eebc 100644 --- a/tests/wpt/web-platform-tests/workers/WorkerNavigator_userAgentData.http.html +++ b/tests/wpt/web-platform-tests/workers/WorkerNavigator_userAgentData.http.html @@ -10,7 +10,7 @@ worker.onmessage = resolve; }); - assert_equals(e.data.uaList, undefined); + assert_equals(e.data.brands, undefined); assert_equals(e.data.mobile, undefined); assert_equals(e.data.getHighEntropyValues, undefined); }, "Test that userAgentData is not available in workers in non-secure contexts"); diff --git a/tests/wpt/web-platform-tests/workers/WorkerNavigator_userAgentData.https.html b/tests/wpt/web-platform-tests/workers/WorkerNavigator_userAgentData.https.html index 91a63966c01..c93cd1ed345 100644 --- a/tests/wpt/web-platform-tests/workers/WorkerNavigator_userAgentData.https.html +++ b/tests/wpt/web-platform-tests/workers/WorkerNavigator_userAgentData.https.html @@ -10,10 +10,10 @@ worker.onmessage = resolve; }); - assert_equals(e.data.uaList.length, navigator.userAgentData.uaList.length); - for (let i = 0; i < e.data.uaList.length; ++i) { - const workerUA = e.data.uaList[i]; - const windowUA = navigator.userAgentData.uaList[i]; + assert_equals(e.data.brands.length, navigator.userAgentData.brands.length); + for (let i = 0; i < e.data.brands.length; ++i) { + const workerUA = e.data.brands[i]; + const windowUA = navigator.userAgentData.brands[i]; assert_equals(workerUA.brand, windowUA.brand); assert_equals(workerUA.version, windowUA.version); } diff --git a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-parse-error-failure.html b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-parse-error-failure.html index e7cb1c47623..343bfe289f3 100644 --- a/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-parse-error-failure.html +++ b/tests/wpt/web-platform-tests/workers/modules/dedicated-worker-parse-error-failure.html @@ -24,7 +24,7 @@ promise_setup(async () => { }; worker.onerror = () => resolve(false); }); - assert_precondition( + assert_implements( supportsModuleWorkers, "Static import must be supported on module dedicated worker to run this test." ); diff --git a/tests/wpt/web-platform-tests/workers/support/WorkerNavigator.js b/tests/wpt/web-platform-tests/workers/support/WorkerNavigator.js index eec2f6884a1..88e994959b3 100644 --- a/tests/wpt/web-platform-tests/workers/support/WorkerNavigator.js +++ b/tests/wpt/web-platform-tests/workers/support/WorkerNavigator.js @@ -6,8 +6,8 @@ obj.userAgent = navigator.userAgent; obj.onLine = navigator.onLine; if (navigator.userAgentData) { - obj.uaList = navigator.userAgentData.uaList; - obj.mobile = navigator.userAgentData.mobile; + obj.brands = navigator.userAgentData.brands; + obj.mobile = navigator.userAgentData.mobile; const highEntropyValues = await navigator.userAgentData.getHighEntropyValues(["platform", "platformVersion", "architecture", "model", "uaFullVersion"]); obj.platform = highEntropyValues.platform; obj.platformVersion = highEntropyValues.platformVersion; diff --git a/tests/wpt/web-platform-tests/xhr/send-redirect-to-cors.htm b/tests/wpt/web-platform-tests/xhr/send-redirect-to-cors.htm index 43bbe4b6d79..54d7eb550df 100644 --- a/tests/wpt/web-platform-tests/xhr/send-redirect-to-cors.htm +++ b/tests/wpt/web-platform-tests/xhr/send-redirect-to-cors.htm @@ -24,20 +24,20 @@ function redirect(code, name = code, method = "GET", body = null, explicitType = null, safelistContentType = false) { async_test(t => { - var client = new XMLHttpRequest() + let { body: expectedBody, type: expectedType } = extractBody(body); + if (explicitType !== null) { + expectedType = explicitType; + } + let expectedMethod = method; + if (((code === "301" || code === "302") && method === "POST") || (code === "303" && method !== "GET" && method !== "HEAD")) { + expectedMethod = "GET"; + expectedBody = ""; + expectedType = "NO"; + } + const client = new XMLHttpRequest(); client.onreadystatechange = t.step_func(() => { if (client.readyState === 4) { - if (explicitType !== "application/x-pony" || safelistContentType) { - let { body: expectedBody, type: expectedType } = extractBody(body); - if (explicitType !== null) { - expectedType = explicitType - } - let expectedMethod = method; - if (((code === "301" || code === "302") && method === "POST") || code === "303") { - expectedMethod = "GET"; - expectedBody = ""; - expectedType = "NO"; - } + if ((expectedMethod === "GET" && expectedType === "NO") || explicitType !== "application/x-pony" || safelistContentType) { assert_equals(client.status, 200); assert_equals(client.getResponseHeader("x-request-method"), expectedMethod); assert_equals(client.getResponseHeader("x-request-content-type"), expectedType); @@ -51,7 +51,7 @@ } t.done(); } - }) + }); let safelist = ""; if (safelistContentType) { safelist = "?safelist_content_type"; @@ -67,6 +67,7 @@ redirect("301") redirect("301", "301 GET with explicit Content-Type", "GET", null, "application/x-pony") redirect("301", "301 GET with explicit Content-Type safelisted", "GET", null, "application/x-pony", true) + redirect("303", "303 GET with explicit Content-Type safelisted", "GET", null, "application/x-pony", true) redirect("302") redirect("303") redirect("302", "302 FOO with string and explicit Content-Type safelisted", "FOO", "test", "application/x-pony", true) diff --git a/tests/wpt/webgl/meta/conformance2/rendering/draw-buffers.html.ini b/tests/wpt/webgl/meta/conformance2/rendering/draw-buffers.html.ini index 4c7e8ccd177..2a86fa51b59 100644 --- a/tests/wpt/webgl/meta/conformance2/rendering/draw-buffers.html.ini +++ b/tests/wpt/webgl/meta/conformance2/rendering/draw-buffers.html.ini @@ -107,3 +107,6 @@ [WebGL test #52: attachment 7 should be 0,255,0,255\nat (4, 0) expected: 0,255,0,255 was 255,255,0,0] expected: FAIL + [WebGL test #52: attachment 7 should be 0,255,0,255\nat (0, 0) expected: 0,255,0,255 was 0,0,255,255] + expected: FAIL +