From a7e9df0fef3afb230b070cc69ef10df6a60e257b Mon Sep 17 00:00:00 2001 From: Servo WPT Sync <32481905+servo-wpt-sync@users.noreply.github.com> Date: Fri, 13 Jun 2025 16:15:36 +0200 Subject: [PATCH] Sync WPT with upstream (13-06-2025) (#37436) Automated downstream sync of changes from upstream as of 13-06-2025 [no-wpt-sync] --------- Signed-off-by: WPT Sync Bot Signed-off-by: Oriol Brufau Co-authored-by: Oriol Brufau --- tests/wpt/meta/MANIFEST.json | 1898 ++++++++++++++--- .../corner-shape-render-fuzzy.html.ini | 3 + .../generic-family-keywords-001.html.ini | 12 + .../generic-family-keywords-002.html.ini | 12 + .../grid/grid-gap-decorations-047.html.ini | 2 + ...content-alignment-with-abspos-001.html.ini | 3 - .../parsing/item-tolerance-computed.html.ini | 18 + .../parsing/item-tolerance-valid.html.ini | 18 + .../parsing/masonry-slack-computed.html.ini | 36 - .../parsing/masonry-slack-valid.html.ini | 36 - .../css-mixins/at-function-parsing.html.ini | 3 + .../line-clamp-021.tentative.html.ini | 2 + ...e-clamp-with-floats-010.tentative.html.ini | 2 + .../margin-block-end-scroll-area-001.html.ini | 2 + .../sticky/position-sticky-left-002.html.ini | 2 - .../sticky/position-sticky-top-002.html.ini | 2 - ...t-line-child-display-none-dynamic.html.ini | 2 + .../first-line-child-display-none.html.ini | 2 + .../dynamic-available-size-iframe.html.ini | 2 + ...ntrinsic-percent-non-replaced-001.html.ini | 2 - ...ntrinsic-percent-non-replaced-004.html.ini | 2 - ...keyword-sizes-on-replaced-element.html.ini | 24 + .../stretch/cache-miss-001.html.ini | 2 + .../stretch/cache-miss-002.html.ini | 2 + ...table-cell-overflow-auto-scrolled.html.ini | 2 - .../calc-min-height-block-1.html.ini | 2 - .../calc-min-width-block-intrinsic-1.html.ini | 2 - ...omputedStyle-calc-mixed-units-003.html.ini | 3 + .../css/css-values/if-conditionals.html.ini | 9 + ...crollIntoView-scrolling-container.html.ini | 3 + .../font-family-serialization-001.html.ini | 6 + ...ionary-compressed.tentative.https.html.ini | 15 + ...ary-fetch-no-cors.tentative.https.html.ini | 3 + ...nary-registration.tentative.https.html.ini | 6 + .../meta/focus/focus-sync-when-blur.html.ini | 3 + .../empty-iframe-load-event.html.ini | 6 - ...c-aboutblank-navigate-immediately.html.ini | 3 + .../refresh/same-document-refresh.html.ini | 3 - ...nitiator-is-not-opener.https.window.js.ini | 1 + .../update-the-rendering.html.ini | 3 +- .../iframe_sandbox_popups_escaping-2.html.ini | 2 +- ...rame_sandbox_popups_nonescaping-2.html.ini | 3 +- .../tentative/button-invoke-menulist.html.ini | 6 + .../menu/tentative/checkable.html.ini | 24 + .../menu-elements-default-style.html.ini | 2 + .../menubar-invoke-menulist.html.ini | 9 + .../menulist-popover-attribute.html.ini | 3 + .../test-navigation-type-reload.html.ini | 3 + .../meta/preload/preload-error.sub.html.ini | 3 - .../integrity-policy/script.https.html.ini | 21 + .../script-enforcement-010.html.ini | 6 + .../script-enforcement-011.html.ini | 6 + .../sub-sample-buffer-stitching.html.ini | 9 + .../stream/tentative/write.any.js.ini | 18 + tests/wpt/tests/.azure-pipelines.yml | 69 - .../workflows/pull_request_test_jobs.yml | 12 +- .../.github/workflows/safari-wptrunner.yml | 78 +- .../tests/.github/workflows/safari_stable.yml | 14 +- .../workflows/safari_technology_preview.yml | 14 +- .../.github/workflows/wpt_fyi_notify.yml | 2 + .../idbindex_getAll-options.tentative.any.js | 120 ++ ...bindex_getAllKeys-options.tentative.any.js | 119 ++ ...bjectstore_getAll-options.tentative.any.js | 115 + ...tstore_getAllKeys-options.tentative.any.js | 111 + .../key-conversion-exceptions.any.js | 57 +- .../IndexedDB/resources/support-get-all.js | 131 +- ...-user-activation.tentative.https.window.js | 22 + .../rewriter-create.tentative.https.window.js | 14 +- ...ewrite-streaming.tentative.https.window.js | 14 + ...-user-activation.tentative.https.window.js | 22 + ...ummarizer-create.tentative.https.window.js | 14 +- ...marize-streaming.tentative.https.window.js | 14 + .../translator.optional.https.window.js | 15 + ...-user-activation.tentative.https.window.js | 22 + .../writer-create.tentative.https.window.js | 14 +- ...-write-streaming.tentative.https.window.js | 14 + ...-bfcache-partitioning.tentative.https.html | 61 + .../clear-cache-bfcache.https.html | 63 + .../clear-cache-bfcache.sub.https.html | 115 - .../support/clear-cache-helper.sub.js | 55 + .../tests/contenteditable/WEB_FEATURES.yml | 4 + ...nction-pseudo-element-implicit-anchor.html | 53 + ...hored-child-transition-with-selection.html | 30 + .../popover-implicit-anchor.html | 4 +- ...n-area-pseudo-element-implicit-anchor.html | 51 + .../position-try-transition-basic.html | 2 + .../position-try-transition-flip.html | 2 + .../corner-shape-render-fuzzy.html | 1 + .../corner-shape-render-precise.html | 1 - .../css-color-adjust/parsing/WEB_FEATURES.yml | 4 + .../color-computed-relative-color.html | 1 + .../tests/css/css-contain/WEB_FEATURES.yml | 4 + .../css-fonts/support/font-family-keywords.js | 10 +- .../agnostic/gap-decorations-009-crash.html | 19 + .../agnostic/gap-decorations-010-crash.html | 49 + .../flex/flex-gap-decorations-026-crash.html | 13 + .../grid/grid-gap-decorations-047.html | 58 + .../anonymous-grid-items-002-ref.html | 6 + .../css-grid/anonymous-grid-items-002.html | 12 + .../alignment/masonry-align-content-001.html | 1 + .../alignment/masonry-align-content-002.html | 1 + .../alignment/masonry-align-content-003.html | 2 + .../alignment/masonry-align-content-004.html | 2 + .../masonry-justify-content-001.html | 1 + .../masonry-justify-content-002.html | 1 + .../masonry-justify-content-003.html | 2 + .../masonry-justify-content-004.html | 2 + ...asonry-grid-item-content-baseline-001.html | 2 + .../masonry-grid-item-self-baseline-001.html | 2 + .../masonry-grid-item-self-baseline-002a.html | 6 +- .../masonry-grid-item-self-baseline-002b.html | 6 +- .../masonry-fragmentation-001.html | 1 + .../masonry-fragmentation-002.html | 1 + .../masonry-fragmentation-003.html | 2 + .../tentative/gap/masonry-gap-001.html | 1 + .../tentative/gap/masonry-gap-002.html | 1 + ...asonry-grid-placement-named-lines-001.html | 1 + ...asonry-grid-placement-named-lines-002.html | 1 + ...asonry-intrinsic-sizing-cols-001-auto.html | 1 + .../masonry-intrinsic-sizing-cols-001-fr.html | 1 + ...asonry-intrinsic-sizing-cols-001-mix1.html | 1 + ...asonry-intrinsic-sizing-cols-001-mix2.html | 1 + ...asonry-intrinsic-sizing-cols-002-auto.html | 1 + .../masonry-intrinsic-sizing-cols-002-fr.html | 1 + ...asonry-intrinsic-sizing-cols-002-mix1.html | 1 + ...asonry-intrinsic-sizing-cols-002-mix2.html | 1 + ...asonry-intrinsic-sizing-cols-003-auto.html | 1 + .../masonry-intrinsic-sizing-cols-003-fr.html | 1 + ...asonry-intrinsic-sizing-cols-003-mix1.html | 1 + ...asonry-intrinsic-sizing-cols-003-mix2.html | 1 + ...asonry-intrinsic-sizing-cols-004-auto.html | 1 + .../masonry-intrinsic-sizing-cols-004-fr.html | 1 + ...asonry-intrinsic-sizing-cols-004-mix1.html | 1 + ...asonry-intrinsic-sizing-cols-004-mix2.html | 1 + .../masonry-intrinsic-sizing-cols-005.html | 1 + .../masonry-intrinsic-sizing-cols-006.html | 1 + .../masonry-intrinsic-sizing-cols-007.html | 1 + ...asonry-intrinsic-sizing-rows-001-auto.html | 2 + .../masonry-intrinsic-sizing-rows-001-fr.html | 2 + ...asonry-intrinsic-sizing-rows-001-mix1.html | 2 + ...asonry-intrinsic-sizing-rows-001-mix2.html | 2 + ...asonry-intrinsic-sizing-rows-002-auto.html | 2 + .../masonry-intrinsic-sizing-rows-002-fr.html | 2 + ...asonry-intrinsic-sizing-rows-002-mix1.html | 2 + ...asonry-intrinsic-sizing-rows-002-mix2.html | 2 + ...asonry-intrinsic-sizing-rows-003-auto.html | 2 + .../masonry-intrinsic-sizing-rows-003-fr.html | 2 + ...asonry-intrinsic-sizing-rows-003-mix1.html | 2 + ...asonry-intrinsic-sizing-rows-003-mix2.html | 2 + ...asonry-intrinsic-sizing-rows-004-auto.html | 2 + .../masonry-intrinsic-sizing-rows-004-fr.html | 2 + ...asonry-intrinsic-sizing-rows-004-mix1.html | 2 + ...asonry-intrinsic-sizing-rows-004-mix2.html | 2 + .../masonry-intrinsic-sizing-rows-005.html | 2 + .../masonry-intrinsic-sizing-rows-006.html | 2 + .../masonry-intrinsic-sizing-rows-007.html | 2 + .../masonry-item-placement-001.html | 1 + .../masonry-item-placement-002.html | 1 + .../masonry-item-placement-003.html | 1 + .../masonry-item-placement-004.html | 1 + .../masonry-item-placement-005.html | 1 + .../masonry-item-placement-006.html | 1 + .../masonry-item-placement-007.html | 1 + .../masonry-item-placement-008.html | 1 + .../masonry-rows-with-grid-width-changed.html | 1 + ...ontaining-block-is-grid-content-width.html | 2 + ...template-columns-computed-withcontent.html | 1 + .../tentative/masonry-not-inhibited-001.html | 1 + .../tentative/order/masonry-order-001.html | 1 + .../subgrid/masonry-subgrid-001.html | 2 + .../subgrid/masonry-subgrid-002.html | 3 + .../track-sizing/masonry-subgrid-flex.html | 3 +- .../masonry-subgrid-intrinsic-sizing.html | 3 +- .../subgrid/track-sizing/masonry-subgrid.html | 3 +- ...ck-sizing-check-grid-height-on-resize.html | 1 + .../masonry-track-sizing-explicit-block.html | 1 + ...sonry-track-sizing-overflow-left-side.html | 1 + ...onry-track-sizing-overflow-right-side.html | 1 + .../masonry-track-sizing-span-row.html | 1 + .../css-masking/clip-path/WEB_FEATURES.yml | 2 + ...uted.html => item-tolerance-computed.html} | 0 ...valid.html => item-tolerance-invalid.html} | 0 ...k-valid.html => item-tolerance-valid.html} | 0 .../css/css-mixins/at-function-parsing.html | 10 +- .../float-becomes-spanner-remove-child.html | 15 + .../css-multicol/multicol-span-float-004.html | 18 + .../scroll-marker-scroll-container.html | 84 + ...first-line-child-display-none-dynamic.html | 18 + .../first-line-child-display-none-ref.html | 8 + .../first-line-child-display-none.html | 15 + .../scroll-snap-root-002-ref.html | 1 + .../css-scroll-snap/scroll-snap-root-002.html | 1 + .../contain-intrinsic-size-009.html | 6 +- ...ntrinsic-percent-non-replaced-001-ref.html | 4 +- ...ntrinsic-percent-non-replaced-004-ref.html | 2 +- .../keyword-sizes-on-replaced-element.html | 30 +- .../css-sizing/stretch/cache-miss-001.html | 30 + .../css-sizing/stretch/cache-miss-002.html | 32 + ...n-first-line-child-display-none-crash.html | 15 + .../preserve3d-backface-hit-test-1.html | 67 + .../preserve3d-backface-hit-test-2.html | 74 + .../calc-min-height-block-1-ref.html | 29 + .../css-values/calc-min-height-block-1.html | 2 +- .../calc-min-width-block-intrinsic-1-ref.html | 2 +- .../chrome-interpolation-crash.html | 14 + ...getComputedStyle-calc-mixed-units-003.html | 7 + .../tests/css/css-values/if-conditionals.html | 3 + .../css/css-view-transitions/WEB_FEATURES.yml | 3 + .../nested-position-with-border-ref.html | 35 + .../nested/nested-position-with-border.html | 65 + .../scoped/callback-order.tentative.html | 49 + .../scoped/empty-ref.html | 9 + .../scoped/fill-forwards.html | 49 + .../scoped/from-scale-zero-ref.html | 23 + .../scoped/from-scale-zero.html | 53 + .../scoped/negative-playback-rate.html | 52 + .../scoped/to-scale-zero.html | 51 + .../css-view-transitions/small-scale-ref.html | 17 + .../css/css-view-transitions/small-scale.html | 44 + .../scrollIntoView-scrolling-container.html | 52 + .../debug-header.https.html | 79 + .../redirect.py | 8 + .../reflect_headers.py | 19 + .../refresh_session.py | 4 + .../session_manager.py | 8 + .../tests/docs/writing-tests/testdriver.md | 10 +- .../fetch/compression-dictionary/README.md | 3 + ...clear-site-data-cache.tentative.https.html | 2 +- ...ear-site-data-cookies.tentative.https.html | 2 +- ...ear-site-data-storage.tentative.https.html | 2 +- ...dictionary-compressed.tentative.https.html | 105 + ...tionary-decompression.tentative.https.html | 2 +- ...tionary-fetch-no-cors.tentative.https.html | 42 + ...tch-with-link-element.tentative.https.html | 2 +- ...etch-with-link-header.tentative.https.html | 2 +- ...ctionary-registration.tentative.https.html | 54 +- ....js => compression-dictionary-util.sub.js} | 59 +- .../resources/echo-headers.py | 13 +- .../resources/echo-headers2.py | 7 + .../resources/handler_utils.py | 16 + .../resources/register-dictionary.py | 49 +- .../wpt/tests/focus/focus-sync-when-blur.html | 33 + .../support/iframe_sandbox_download_helper.js | 2 +- .../input-valueasdate-typeerror.html | 35 + .../input-valueasnumber-typeerror.html | 37 + .../select-in-page-typeahead.tentative.html | 65 + .../select-multiple-popup-appearance-ref.html | 15 + ...t-multiple-popup-appearance.tentative.html | 27 + ...ple-popup-keyboard-behavior.tentative.html | 101 + ...ltiple-popup-mouse-behavior.tentative.html | 87 + .../the-dialog-element/WEB_FEATURES.yml | 4 + .../tentative/button-invoke-menulist.html | 43 + .../semantics/menu/tentative/checkable.html | 209 ++ .../focus-menu-elements-arrowoperations.html | 67 + .../menu-elements-default-style-ref.html | 36 + .../menu-elements-default-style.html | 24 + .../tentative/menubar-invoke-menulist.html | 104 + .../tentative/menulist-popover-attribute.html | 37 + ...resttarget-input-modalities.tentative.html | 146 ++ ...esttarget-keyboard-behavior.tentative.html | 59 +- .../resources/invoker-utils.js | 17 + ...te_gatt_connection_response.https.html.ini | 3 + ...simulate_gatt_disconnection.https.html.ini | 3 + .../handle_request_device_prompt.https.html | 16 +- .../resources/bidi-bluetooth-helper.js | 52 +- .../bluetooth/simulate_adapter.https.html | 3 + ...mulate_gatt_connection_response.https.html | 34 + .../simulate_gatt_disconnection.https.html | 29 + ...imulate_preconnected_peripheral.https.html | 8 +- tests/wpt/tests/interfaces/dom.idl | 2 +- tests/wpt/tests/interfaces/html.idl | 2 +- .../tests/interfaces/pointer-animations.idl | 23 + .../secure-payment-confirmation.idl | 21 +- .../tests/js-self-profiling/WEB_FEATURES.yml | 3 + tests/wpt/tests/lint.ignore | 1 + .../navigate-form-userInitiated.html | 3 +- tests/wpt/tests/resources/testdriver.js | 156 ++ .../tests/screen-wake-lock/WEB_FEATURES.yml | 3 + .../menu/tentative/focus-menu-elements.html | 35 + .../tentative/distant-leaf-image.window.js | 55 + ....window.js => distant-leaf-text.window.js} | 8 +- .../insert-image-div-before.window.js | 47 - ...d-by-two-image-softnavs-lcp.tentative.html | 2 - .../resources/soft-navigation-helper.js | 50 - .../resources/soft-navigation-test-helper.js | 27 + .../tentative/almost-soft-navigation.html | 51 +- .../smoke/tentative/dom.html | 19 +- .../smoke/tentative/lcp-unbuffered.html | 105 + .../smoke/tentative/lcp.html | 4 +- ...ncurrentMediaStreamTrack-manual.https.html | 4 +- ...gnition-mediaStreamTrack-manual.https.html | 2 +- .../integrity-policy/script.https.html | 118 +- .../empty-values-list-paced-animation.html | 6 + .../image-embedding-nesteder-data-url.html | 9 - .../svg/embedded/image-modify-href-4.svg | 8 +- .../reftests/sync-svg-attributes-ref.svg | 4 + .../struct/reftests/sync-svg-attributes.svg | 17 + ...e-event-handler-no-loss-of-events-ref.html | 0 .../use-event-handler-no-loss-of-events.html | 38 + tests/wpt/tests/tools/certs/cacert.key | 56 +- tests/wpt/tests/tools/certs/cacert.pem | 186 +- .../tests/tools/certs/web-platform.test.key | 52 +- .../tests/tools/certs/web-platform.test.pem | 184 +- .../tests/tools/ci/azure/affected_tests.yml | 27 - .../com.apple.SafariTechnologyPreview.plist | 8 - .../tests/tools/ci/azure/install_fonts.yml | 7 - .../tests/tools/ci/azure/install_safari.yml | 29 - tests/wpt/tests/tools/ci/ci_tools_unittest.sh | 17 +- .../webdriver/bidi/modules/bluetooth.py | 43 +- .../webtransport/h3/webtransport_h3_server.py | 6 +- .../wptrunner/browsers/chrome_spki_certs.py | 2 +- .../wptrunner/wptrunner/browsers/firefox.py | 2 + .../wptrunner/executors/asyncactions.py | 86 +- .../executors/executorservodriver.py | 3 + .../wptrunner/executors/executorwebdriver.py | 25 +- .../wptrunner/wptrunner/executors/protocol.py | 36 +- .../wptrunner/wptrunner/testdriver-extra.js | 44 + .../trusted-types/script-enforcement-010.html | 47 + .../trusted-types/script-enforcement-011.html | 47 + .../tests/bidi/external/bluetooth/__init__.py | 117 + .../bluetooth/disable_simulation/__init__.py | 0 .../bluetooth/disable_simulation/context.py | 25 + .../disable_simulation/disable_simulation.py | 20 + .../bluetooth/simulate_adapter/__init__.py | 9 - .../bluetooth/simulate_adapter/context.py | 3 +- .../bluetooth/simulate_adapter/invalid.py | 8 +- .../bluetooth/simulate_adapter/state.py | 3 +- .../__init__.py | 0 .../invalid.py | 36 + .../simulate_gatt_connection_response.py | 50 + .../simulate_gatt_disconnection/__init__.py | 0 .../simulate_gatt_disconnection/invalid.py | 28 + .../simulate_gatt_disconnection.py | 33 + .../__init__.py | 14 - .../simulate_preconnected_peripheral.py | 6 +- .../qdq_subgraph.https.any.js | 155 ++ .../webrtc/RTCRtpReceiver-getParameters.html | 10 + .../webrtc/RTCRtpSender-getParameters.html | 4 + .../websockets/stream/tentative/write.any.js | 15 + 339 files changed, 7696 insertions(+), 1370 deletions(-) create mode 100644 tests/wpt/meta/css/css-fonts/generic-family-keywords-002.html.ini create mode 100644 tests/wpt/meta/css/css-gaps/grid/grid-gap-decorations-047.html.ini delete mode 100644 tests/wpt/meta/css/css-grid/alignment/grid-content-alignment-with-abspos-001.html.ini create mode 100644 tests/wpt/meta/css/css-masonry/tentative/parsing/item-tolerance-computed.html.ini create mode 100644 tests/wpt/meta/css/css-masonry/tentative/parsing/item-tolerance-valid.html.ini delete mode 100644 tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-slack-computed.html.ini delete mode 100644 tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-slack-valid.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-021.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-floats-010.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/margin-block-end-scroll-area-001.html.ini delete mode 100644 tests/wpt/meta/css/css-position/sticky/position-sticky-left-002.html.ini delete mode 100644 tests/wpt/meta/css/css-position/sticky/position-sticky-top-002.html.ini create mode 100644 tests/wpt/meta/css/css-pseudo/first-line-child-display-none-dynamic.html.ini create mode 100644 tests/wpt/meta/css/css-pseudo/first-line-child-display-none.html.ini create mode 100644 tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini delete mode 100644 tests/wpt/meta/css/css-sizing/intrinsic-percent-non-replaced-001.html.ini delete mode 100644 tests/wpt/meta/css/css-sizing/intrinsic-percent-non-replaced-004.html.ini create mode 100644 tests/wpt/meta/css/css-sizing/keyword-sizes-on-replaced-element.html.ini create mode 100644 tests/wpt/meta/css/css-sizing/stretch/cache-miss-001.html.ini create mode 100644 tests/wpt/meta/css/css-sizing/stretch/cache-miss-002.html.ini delete mode 100644 tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini delete mode 100644 tests/wpt/meta/css/css-values/calc-min-height-block-1.html.ini delete mode 100644 tests/wpt/meta/css/css-values/calc-min-width-block-intrinsic-1.html.ini create mode 100644 tests/wpt/meta/css/cssom-view/scrollIntoView-scrolling-container.html.ini create mode 100644 tests/wpt/meta/css/cssom/font-family-serialization-001.html.ini create mode 100644 tests/wpt/meta/fetch/compression-dictionary/dictionary-compressed.tentative.https.html.ini create mode 100644 tests/wpt/meta/fetch/compression-dictionary/dictionary-fetch-no-cors.tentative.https.html.ini create mode 100644 tests/wpt/meta/focus/focus-sync-when-blur.html.ini delete mode 100644 tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini delete mode 100644 tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/refresh/same-document-refresh.html.ini create mode 100644 tests/wpt/meta/html/semantics/menu/tentative/button-invoke-menulist.html.ini create mode 100644 tests/wpt/meta/html/semantics/menu/tentative/checkable.html.ini create mode 100644 tests/wpt/meta/html/semantics/menu/tentative/menu-elements-default-style.html.ini create mode 100644 tests/wpt/meta/html/semantics/menu/tentative/menubar-invoke-menulist.html.ini create mode 100644 tests/wpt/meta/html/semantics/menu/tentative/menulist-popover-attribute.html.ini create mode 100644 tests/wpt/meta/trusted-types/script-enforcement-010.html.ini create mode 100644 tests/wpt/meta/trusted-types/script-enforcement-011.html.ini create mode 100644 tests/wpt/tests/IndexedDB/idbindex_getAll-options.tentative.any.js create mode 100644 tests/wpt/tests/IndexedDB/idbindex_getAllKeys-options.tentative.any.js create mode 100644 tests/wpt/tests/IndexedDB/idbobjectstore_getAll-options.tentative.any.js create mode 100644 tests/wpt/tests/IndexedDB/idbobjectstore_getAllKeys-options.tentative.any.js create mode 100644 tests/wpt/tests/ai/rewriter/rewriter-create-user-activation.tentative.https.window.js create mode 100644 tests/wpt/tests/ai/summarizer/summarizer-create-user-activation.tentative.https.window.js create mode 100644 tests/wpt/tests/ai/writer/writer-create-user-activation.tentative.https.window.js create mode 100644 tests/wpt/tests/clear-site-data/clear-cache-bfcache-partitioning.tentative.https.html create mode 100644 tests/wpt/tests/clear-site-data/clear-cache-bfcache.https.html delete mode 100644 tests/wpt/tests/clear-site-data/clear-cache-bfcache.sub.https.html create mode 100644 tests/wpt/tests/contenteditable/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html create mode 100644 tests/wpt/tests/css/css-anchor-position/anchored-child-transition-with-selection.html create mode 100644 tests/wpt/tests/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html create mode 100644 tests/wpt/tests/css/css-color-adjust/parsing/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-contain/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/css/css-gaps/agnostic/gap-decorations-009-crash.html create mode 100644 tests/wpt/tests/css/css-gaps/agnostic/gap-decorations-010-crash.html create mode 100644 tests/wpt/tests/css/css-gaps/flex/flex-gap-decorations-026-crash.html create mode 100644 tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-047.html create mode 100644 tests/wpt/tests/css/css-grid/anonymous-grid-items-002-ref.html create mode 100644 tests/wpt/tests/css/css-grid/anonymous-grid-items-002.html rename tests/wpt/tests/css/css-masonry/tentative/parsing/{masonry-slack-computed.html => item-tolerance-computed.html} (100%) rename tests/wpt/tests/css/css-masonry/tentative/parsing/{masonry-slack-invalid.html => item-tolerance-invalid.html} (100%) rename tests/wpt/tests/css/css-masonry/tentative/parsing/{masonry-slack-valid.html => item-tolerance-valid.html} (100%) create mode 100644 tests/wpt/tests/css/css-multicol/crashtests/float-becomes-spanner-remove-child.html create mode 100644 tests/wpt/tests/css/css-multicol/multicol-span-float-004.html create mode 100644 tests/wpt/tests/css/css-overflow/scroll-marker-scroll-container.html create mode 100644 tests/wpt/tests/css/css-pseudo/first-line-child-display-none-dynamic.html create mode 100644 tests/wpt/tests/css/css-pseudo/first-line-child-display-none-ref.html create mode 100644 tests/wpt/tests/css/css-pseudo/first-line-child-display-none.html create mode 100644 tests/wpt/tests/css/css-sizing/stretch/cache-miss-001.html create mode 100644 tests/wpt/tests/css/css-sizing/stretch/cache-miss-002.html create mode 100644 tests/wpt/tests/css/css-text-decor/crashtests/text-decoration-first-line-child-display-none-crash.html create mode 100644 tests/wpt/tests/css/css-transforms/preserve3d-backface-hit-test-1.html create mode 100644 tests/wpt/tests/css/css-transforms/preserve3d-backface-hit-test-2.html create mode 100644 tests/wpt/tests/css/css-values/calc-min-height-block-1-ref.html create mode 100644 tests/wpt/tests/css/css-values/chrome-interpolation-crash.html create mode 100644 tests/wpt/tests/css/css-view-transitions/nested/nested-position-with-border-ref.html create mode 100644 tests/wpt/tests/css/css-view-transitions/nested/nested-position-with-border.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/callback-order.tentative.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/empty-ref.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/fill-forwards.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/from-scale-zero-ref.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/from-scale-zero.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/negative-playback-rate.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/to-scale-zero.html create mode 100644 tests/wpt/tests/css/css-view-transitions/small-scale-ref.html create mode 100644 tests/wpt/tests/css/css-view-transitions/small-scale.html create mode 100644 tests/wpt/tests/css/cssom-view/scrollIntoView-scrolling-container.html create mode 100644 tests/wpt/tests/device-bound-session-credentials/debug-header.https.html create mode 100644 tests/wpt/tests/device-bound-session-credentials/redirect.py create mode 100644 tests/wpt/tests/device-bound-session-credentials/reflect_headers.py create mode 100644 tests/wpt/tests/fetch/compression-dictionary/README.md create mode 100644 tests/wpt/tests/fetch/compression-dictionary/dictionary-compressed.tentative.https.html create mode 100644 tests/wpt/tests/fetch/compression-dictionary/dictionary-fetch-no-cors.tentative.https.html rename tests/wpt/tests/fetch/compression-dictionary/resources/{compression-dictionary-util.js => compression-dictionary-util.sub.js} (69%) create mode 100644 tests/wpt/tests/fetch/compression-dictionary/resources/echo-headers2.py create mode 100644 tests/wpt/tests/fetch/compression-dictionary/resources/handler_utils.py create mode 100644 tests/wpt/tests/focus/focus-sync-when-blur.html create mode 100644 tests/wpt/tests/html/semantics/forms/the-input-element/input-valueasdate-typeerror.html create mode 100644 tests/wpt/tests/html/semantics/forms/the-input-element/input-valueasnumber-typeerror.html create mode 100644 tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/select-in-page-typeahead.tentative.html create mode 100644 tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance-ref.html create mode 100644 tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance.tentative.html create mode 100644 tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-keyboard-behavior.tentative.html create mode 100644 tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-mouse-behavior.tentative.html create mode 100644 tests/wpt/tests/html/semantics/menu/tentative/button-invoke-menulist.html create mode 100644 tests/wpt/tests/html/semantics/menu/tentative/checkable.html create mode 100644 tests/wpt/tests/html/semantics/menu/tentative/focus-menu-elements-arrowoperations.html create mode 100644 tests/wpt/tests/html/semantics/menu/tentative/menu-elements-default-style-ref.html create mode 100644 tests/wpt/tests/html/semantics/menu/tentative/menu-elements-default-style.html create mode 100644 tests/wpt/tests/html/semantics/menu/tentative/menubar-invoke-menulist.html create mode 100644 tests/wpt/tests/html/semantics/menu/tentative/menulist-popover-attribute.html create mode 100644 tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-input-modalities.tentative.html create mode 100644 tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_connection_response.https.html.ini create mode 100644 tests/wpt/tests/infrastructure/metadata/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_disconnection.https.html.ini create mode 100644 tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_connection_response.https.html create mode 100644 tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_disconnection.https.html create mode 100644 tests/wpt/tests/interfaces/pointer-animations.idl create mode 100644 tests/wpt/tests/js-self-profiling/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/screen-wake-lock/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/shadow-dom/focus-navigation/menu/tentative/focus-menu-elements.html create mode 100644 tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf-image.window.js rename tests/wpt/tests/soft-navigation-heuristics/dom/tentative/{distant-leaf.window.js => distant-leaf-text.window.js} (87%) delete mode 100644 tests/wpt/tests/soft-navigation-heuristics/dom/tentative/insert-image-div-before.window.js create mode 100644 tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/lcp-unbuffered.html create mode 100644 tests/wpt/tests/svg/animations/crashtests/empty-values-list-paced-animation.html create mode 100644 tests/wpt/tests/svg/struct/reftests/sync-svg-attributes-ref.svg create mode 100644 tests/wpt/tests/svg/struct/reftests/sync-svg-attributes.svg create mode 100644 tests/wpt/tests/svg/struct/reftests/use-event-handler-no-loss-of-events-ref.html create mode 100644 tests/wpt/tests/svg/struct/reftests/use-event-handler-no-loss-of-events.html delete mode 100644 tests/wpt/tests/tools/ci/azure/affected_tests.yml delete mode 100644 tests/wpt/tests/tools/ci/azure/com.apple.SafariTechnologyPreview.plist delete mode 100644 tests/wpt/tests/tools/ci/azure/install_fonts.yml delete mode 100644 tests/wpt/tests/tools/ci/azure/install_safari.yml create mode 100644 tests/wpt/tests/trusted-types/script-enforcement-010.html create mode 100644 tests/wpt/tests/trusted-types/script-enforcement-011.html create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/__init__.py create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/context.py create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/disable_simulation.py create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/__init__.py create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/invalid.py create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/simulate_gatt_connection_response.py create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/__init__.py create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/invalid.py create mode 100644 tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/simulate_gatt_disconnection.py diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index 0f678875523..02330f7982a 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -2870,6 +2870,29 @@ null, {} ] + ], + "gap-decorations-009-crash.html": [ + "0b2762bf8a076ef6619f93464963c9b5182e3435", + [ + null, + {} + ] + ], + "gap-decorations-010-crash.html": [ + "ef134d1274fe8b987b4c0dc304ff6ef50d3386f5", + [ + null, + {} + ] + ] + }, + "flex": { + "flex-gap-decorations-026-crash.html": [ + "82dcc4c76c5f0f6236752e114cda8b7f56170d5b", + [ + null, + {} + ] ] }, "grid": { @@ -3459,6 +3482,13 @@ {} ] ], + "float-becomes-spanner-remove-child.html": [ + "db485e191fa858b3a1ee0ede27318e0459e5f90f", + [ + null, + {} + ] + ], "float-becomes-spanner.html": [ "90a4c9079c4fa6c64c094c56e36efbfe413b850c", [ @@ -5532,6 +5562,13 @@ {} ] ], + "text-decoration-first-line-child-display-none-crash.html": [ + "1d40753e3e94ce4284730223f307774cefb3157b", + [ + null, + {} + ] + ], "text-decoration-first-line-layer-crash.html": [ "5f5b7e7b9e4774d74224000271e2115ef9792540", [ @@ -5869,6 +5906,13 @@ ] ] }, + "chrome-interpolation-crash.html": [ + "4b424c9b5ecc792a4a6d29bf519ac216b2bd75ee", + [ + null, + {} + ] + ], "crashtests": { "chrome-405422528-crash.html": [ "fcf7407b5f754aa236ddd053f67fb3a15fc6e1d9", @@ -10002,6 +10046,13 @@ ] ], "crashtests": { + "empty-values-list-paced-animation.html": [ + "16d450e98b9f79f11ffb7229ba5e7f1051237a0e", + [ + null, + {} + ] + ], "firefox-bug-1930221.html": [ "52e3d7fb8abbd7a9a94f13dfbb78d4e2946f951f", [ @@ -26602,14 +26653,14 @@ ] ], "SpeechRecognition-concurrentMediaStreamTrack-manual.https.html": [ - "9da5cc6347830d76febcb516776e4b2fcbc7d9f4", + "c3bdd703172058a139420dab2fc9943707681b92", [ null, {} ] ], "SpeechRecognition-mediaStreamTrack-manual.https.html": [ - "01a5cd0825e7bf50b009928e26c2d32ab67398d9", + "212ccb7fd5c8e42a84a449c831da4111c3307bf8", [ null, {} @@ -137639,7 +137690,7 @@ ] ], "corner-shape-render-fuzzy.html": [ - "2d4b56f831b91eb70fd44abc02000213664a480b", + "53301d8e782e7e5e477552bb424c74d9059c2753", [ "css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html?border-radius=30%&corner-shape=superellipse(-1.5)&box-shadow=10px%2010px%200%2010px%20black", [ @@ -137692,6 +137743,32 @@ ] } ], + [ + "css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html?border-radius=50%&corner-shape=bevel&box-shadow=10px%2010px%200%2010px%20black", + [ + [ + "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?border-radius=50%&corner-shape=bevel&box-shadow=10px%2010px%200%2010px%20black", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 200 + ], + [ + 0, + 550 + ] + ] + ] + ] + } + ], [ "css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html?border-radius=50%&corner-top-left-shape=scoop&corner-bottom-right-shape=scoop&corner-top-right-shape=notch&corner-bottom-left-shape=notch&border-width=10px", [ @@ -138136,33 +138213,7 @@ ] ], "corner-shape-render-precise.html": [ - "4a0c575b3b7cef4cbfb1dea4efc53ec40e01ef13", - [ - "css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?border-radius=50%&corner-shape=bevel&box-shadow=10px%2010px%200%2010px%20black", - [ - [ - "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?border-radius=50%&corner-shape=bevel&box-shadow=10px%2010px%200%2010px%20black", - "==" - ] - ], - { - "fuzzy": [ - [ - null, - [ - [ - 0, - 180 - ], - [ - 0, - 350 - ] - ] - ] - ] - } - ], + "68f2555eafad97a26eca0ea0d5f0b4db4f0f91f3", [ "css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?border-top-left-radius=50%&corner-shape=superellipse(0.7)&border-left-width=30px&border-top-width=30px", [ @@ -188127,6 +188178,19 @@ {} ] ], + "grid-gap-decorations-047.html": [ + "5064d08eab314df96cfe49861cb10db1463c517f", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "grid-gap-decorations-38.html": [ "8b87bcd4860ac50a1c2f3de98cec9599bebb77a3", [ @@ -191978,6 +192042,19 @@ {} ] ], + "anonymous-grid-items-002.html": [ + "5463b7254c3426dfdd1a12bc3a88139cd5778c7c", + [ + null, + [ + [ + "/css/css-grid/anonymous-grid-items-002-ref.html", + "==" + ] + ], + {} + ] + ], "child-border-box-and-max-content-001.html": [ "8d3cda88b44e9bc60ee3a8e344b05f80aabcbe3f", [ @@ -195690,7 +195767,7 @@ "tentative": { "alignment": { "masonry-align-content-001.html": [ - "387ee9da5ebbbc523fda88e7f03e85055e4a8de0", + "73609582fdb7fac847274dc9f7635eaa1bdaf3d9", [ null, [ @@ -195703,7 +195780,7 @@ ] ], "masonry-align-content-002.html": [ - "be7e7a813eb8e45add2a97b8680b8f64036eb7f4", + "b53c930edc98a44d5a10be940a7eaf630810c0d1", [ null, [ @@ -195716,7 +195793,7 @@ ] ], "masonry-align-content-003.html": [ - "818d7e2d84b50c8e15428e59e560a8afb725d4eb", + "6edb208709c28711b523c46bdc035683345ae94b", [ null, [ @@ -195729,7 +195806,7 @@ ] ], "masonry-align-content-004.html": [ - "747420ba465916276aeb245a2121d241d8cbf866", + "c56c1131c5d9385eb71ede946546358c721a4e1c", [ null, [ @@ -195742,7 +195819,7 @@ ] ], "masonry-justify-content-001.html": [ - "36ecd4f3b30ed86572ddf3e4a835cbfcdaa8fb6f", + "8140d55beaf60f6a4de46f327285b0c7121e5612", [ null, [ @@ -195755,7 +195832,7 @@ ] ], "masonry-justify-content-002.html": [ - "fc3696282c13002fa76fc8d6ccd8875c1a329541", + "d6e593b805df97eba3ba87a11091be1461684912", [ null, [ @@ -195768,7 +195845,7 @@ ] ], "masonry-justify-content-003.html": [ - "e2e6ead819ad49de0d9ca0f2d644a32e544ed0c8", + "03604ef0dc60013f87dcae90281ebe91ac4188aa", [ null, [ @@ -195781,7 +195858,7 @@ ] ], "masonry-justify-content-004.html": [ - "e309ef8870890db60dd556e85cc894400a96694e", + "1f04a5a22d3d4f7e37fd4f945a6eb39eb522e686", [ null, [ @@ -195796,7 +195873,7 @@ }, "baseline": { "masonry-grid-item-content-baseline-001.html": [ - "60d11653b3f231a07ad7aa493a0effeae7720671", + "dc03179884401bad3e4cb5b16a47b375e0c7cb3e", [ null, [ @@ -195809,7 +195886,7 @@ ] ], "masonry-grid-item-self-baseline-001.html": [ - "bb486d983d966476f24d142675c77f7907300705", + "b363d8ebc194e72ad6f9b759c103688508928df4", [ null, [ @@ -195822,7 +195899,7 @@ ] ], "masonry-grid-item-self-baseline-002a.html": [ - "4ece8d754d3d686e4691f5140af9b7f14503e036", + "ee57fa387b59aa6d5a549d110407b0e792efa942", [ null, [ @@ -195835,7 +195912,7 @@ ] ], "masonry-grid-item-self-baseline-002b.html": [ - "cc0eaaa9cc27dc3e54f660314d63f155a838212e", + "ebdda34300579139cfe3189dd658465fb7b16ff5", [ null, [ @@ -195850,7 +195927,7 @@ }, "fragmentation": { "masonry-fragmentation-001.html": [ - "24a5b290610ba71c084dfbab1370d119b00a569a", + "ed035e4a2a7a26ce19820da1c66b515fac889163", [ null, [ @@ -195863,7 +195940,7 @@ ] ], "masonry-fragmentation-002.html": [ - "76a0540fa92f1715de1a1ff5a67671548d4f15b1", + "02c7f34ccfcb570a6463cfbbb3404e8cf0ca275a", [ null, [ @@ -195876,7 +195953,7 @@ ] ], "masonry-fragmentation-003.html": [ - "7252fc169e2eca745eaad2b91bdb8a9801da242a", + "8bfaec32771da381e367cc1069565f285db458f3", [ null, [ @@ -195891,7 +195968,7 @@ }, "gap": { "masonry-gap-001.html": [ - "628c00135d867debb9d1d904a1426a42be7329e4", + "e527ae3ef8282024fa0cd4dbbe887fbb39b44047", [ null, [ @@ -195904,7 +195981,7 @@ ] ], "masonry-gap-002.html": [ - "2c87c4eeda7fec8fcfa7c0762340ffb68f8841ed", + "aac7101ef9a8c354a3761337c202fda7f036b637", [ null, [ @@ -195919,7 +195996,7 @@ }, "grid-placement": { "masonry-grid-placement-named-lines-001.html": [ - "8bb78e307d39219b11677f029bf75ca7dde4cd07", + "6c24618e3f5047213915acb72ed3785242001f7f", [ null, [ @@ -195932,7 +196009,7 @@ ] ], "masonry-grid-placement-named-lines-002.html": [ - "4e51f09f94dd20d5d4902ea3c4848b9b905ed946", + "13b5777b2fb2cdb1096a9527376b445607da6aaf", [ null, [ @@ -195947,7 +196024,7 @@ }, "intrinsic-sizing": { "masonry-intrinsic-sizing-cols-001-auto.html": [ - "6ea41862232872b2b20559f850f593848945c7bb", + "50a986b1fa8d0662952b4fceb3cc97b7aabb094f", [ null, [ @@ -195960,7 +196037,7 @@ ] ], "masonry-intrinsic-sizing-cols-001-fr.html": [ - "314ce6d6fc1d6bde0cb682b4d11fbc942eeb6cb3", + "5da4059e139799f9c41e6005a3e47df68943a66c", [ null, [ @@ -195973,7 +196050,7 @@ ] ], "masonry-intrinsic-sizing-cols-001-mix1.html": [ - "048b0d2165b65765e1f322d62cc8f2c4e4392f8f", + "4fc437e10509638d25b919b238620b371b1cf837", [ null, [ @@ -195986,7 +196063,7 @@ ] ], "masonry-intrinsic-sizing-cols-001-mix2.html": [ - "e2db2700b2e4a5916237b86a721034bc22a614b5", + "f4ccd1fc76909163bebb8f2e0225abd3cc47210a", [ null, [ @@ -195999,7 +196076,7 @@ ] ], "masonry-intrinsic-sizing-cols-002-auto.html": [ - "8c88f2fd4a26b6dfe3b393504d0d5665713229db", + "d2b0984a9f4ba6a37c80c6657b547d3d2bcfab76", [ null, [ @@ -196012,7 +196089,7 @@ ] ], "masonry-intrinsic-sizing-cols-002-fr.html": [ - "80e25cbc8abfcd275fb755f421e87cfc967d9472", + "edf5bd1cf6b28b419496237155e65d92429c960f", [ null, [ @@ -196025,7 +196102,7 @@ ] ], "masonry-intrinsic-sizing-cols-002-mix1.html": [ - "584041cebf8e4caa327687bc332e69bbea12dc51", + "1342367dbc4eb3fa5eb0495c8332d2c8838b50e2", [ null, [ @@ -196038,7 +196115,7 @@ ] ], "masonry-intrinsic-sizing-cols-002-mix2.html": [ - "a726bf192abd31da921cf74efee020e809989598", + "e275999acafbd68729857bf04d2aab29530f9a76", [ null, [ @@ -196051,7 +196128,7 @@ ] ], "masonry-intrinsic-sizing-cols-003-auto.html": [ - "2b781d1db2df621c8f926aaf54567a6c0fd1ecae", + "4e270382b7b3a1f8cf5921a706a285b7abd574d6", [ null, [ @@ -196064,7 +196141,7 @@ ] ], "masonry-intrinsic-sizing-cols-003-fr.html": [ - "830a22a4ec847e9a79a93382f6b382c8b757f800", + "e6009008c5183eead2a4782fc18423aa8b1a73b5", [ null, [ @@ -196077,7 +196154,7 @@ ] ], "masonry-intrinsic-sizing-cols-003-mix1.html": [ - "15876a47430c1036257d5ab8e1cdd4cd7eee9c77", + "e2802b82833a7c1acd0adfb512c5e1cb93b45243", [ null, [ @@ -196090,7 +196167,7 @@ ] ], "masonry-intrinsic-sizing-cols-003-mix2.html": [ - "053b7a2ebde0b8e9214bccf74a7576165dbf0892", + "aeccea1c1dd1ad17424dee140421ce366ec176fb", [ null, [ @@ -196103,7 +196180,7 @@ ] ], "masonry-intrinsic-sizing-cols-004-auto.html": [ - "a92c3d774f69e562580cbfe88d14b78dc835d942", + "71dd2f5357bfa0abc9de5d0100e46714cb9b13b0", [ null, [ @@ -196116,7 +196193,7 @@ ] ], "masonry-intrinsic-sizing-cols-004-fr.html": [ - "db8f9c0ec1c1b46c2e37b09cee06b32d36cf20b7", + "30c066a412baab53bed217e4472bd98dbae281c8", [ null, [ @@ -196129,7 +196206,7 @@ ] ], "masonry-intrinsic-sizing-cols-004-mix1.html": [ - "9a399db534e99a8c3daae2aa7e61a8bbd688ebb3", + "a2cdb2ca7eab823f5c7b783792fd4371e315f04e", [ null, [ @@ -196142,7 +196219,7 @@ ] ], "masonry-intrinsic-sizing-cols-004-mix2.html": [ - "a63d43c051ceb875dd016d8526e1030a9ce63c7c", + "9784824c36cb1db14b89fae33006ba72c0b25743", [ null, [ @@ -196155,7 +196232,7 @@ ] ], "masonry-intrinsic-sizing-cols-005.html": [ - "a4edd6151f654b2c72955469f5075589f29da3ee", + "5d15869b12029eabd7d4e7d35059e4ef46e82e27", [ null, [ @@ -196168,7 +196245,7 @@ ] ], "masonry-intrinsic-sizing-cols-006.html": [ - "e980d84b8e92d180cd21752d416fba6f0e227963", + "e28ad246129dce0794b8015668456d7a7085b32b", [ null, [ @@ -196181,7 +196258,7 @@ ] ], "masonry-intrinsic-sizing-cols-007.html": [ - "e00273f6ed866859e840424e55b2a57ab446b6a5", + "2f6550a102dae6b5803f95b53dfed477e91205a1", [ null, [ @@ -196194,7 +196271,7 @@ ] ], "masonry-intrinsic-sizing-rows-001-auto.html": [ - "e38cf2bec84514090ffbc59022b5f7a59a18d8b2", + "505e040306bb2ccb0017f6f74d2dedf05847e7b8", [ null, [ @@ -196207,7 +196284,7 @@ ] ], "masonry-intrinsic-sizing-rows-001-fr.html": [ - "9ca29ead0132d8a7835cd62ad1bca7ec45207775", + "d9fc78532e21b3087f010ff48a0c3aebb3dbbf1e", [ null, [ @@ -196220,7 +196297,7 @@ ] ], "masonry-intrinsic-sizing-rows-001-mix1.html": [ - "e8bdf15453717608672c797bfa7246d8f220463c", + "9b6bae39a6921c2694c970503669d5d2428630bf", [ null, [ @@ -196233,7 +196310,7 @@ ] ], "masonry-intrinsic-sizing-rows-001-mix2.html": [ - "dd557f6d76fcc36410d2931532c361e21e12b3e7", + "3276adec58e35e56a46a91584618a10a212cdb71", [ null, [ @@ -196246,7 +196323,7 @@ ] ], "masonry-intrinsic-sizing-rows-002-auto.html": [ - "d6f3346f844309e6215e6ac1dc1f06c86b327b37", + "f2031e38baae22c9f88b58b43a49d959f9e9d433", [ null, [ @@ -196259,7 +196336,7 @@ ] ], "masonry-intrinsic-sizing-rows-002-fr.html": [ - "e0c501828edc4858bfc3f37cf9f08f612f807780", + "d37fd70841a200725f6f88a66c31eb13dc5e99e0", [ null, [ @@ -196272,7 +196349,7 @@ ] ], "masonry-intrinsic-sizing-rows-002-mix1.html": [ - "d60a77f70b6d7f21bde80b3df7e45746e3e9c703", + "6b126ed1e9ef7c52f48470b0ce0df0c01481b542", [ null, [ @@ -196285,7 +196362,7 @@ ] ], "masonry-intrinsic-sizing-rows-002-mix2.html": [ - "c31a079286b7007630a29d24306b1be0af075971", + "557c9a2edf315a4f9b2da7b24d8b54493bb1df1b", [ null, [ @@ -196298,7 +196375,7 @@ ] ], "masonry-intrinsic-sizing-rows-003-auto.html": [ - "a643ee11653b7572656df91af3931e44593f8526", + "eaf5efb6d4b16934d54f09038b071a6b22158800", [ null, [ @@ -196311,7 +196388,7 @@ ] ], "masonry-intrinsic-sizing-rows-003-fr.html": [ - "f1999a8e2c61e7f6680e5f298b7e039fd8c5a801", + "6eb528ab1a7b49f8d51d5b4269ce2e3d4e8bca3e", [ null, [ @@ -196324,7 +196401,7 @@ ] ], "masonry-intrinsic-sizing-rows-003-mix1.html": [ - "3103ba4147e4e358149097fbc171be7132170c8c", + "2161777ccc7f51c5e7b5d05f4ce39ca2b8c32280", [ null, [ @@ -196337,7 +196414,7 @@ ] ], "masonry-intrinsic-sizing-rows-003-mix2.html": [ - "5763288870617b823538c9a81e74ceea9402b865", + "3a742fb8831e56f43398e6a7e8ebe5e26e86d9c6", [ null, [ @@ -196350,7 +196427,7 @@ ] ], "masonry-intrinsic-sizing-rows-004-auto.html": [ - "51fa2ed51d66ece54c5d03e6f380c3417aa2c1fc", + "4caf2493e5e09a2a4b248cc63502695f33031ede", [ null, [ @@ -196363,7 +196440,7 @@ ] ], "masonry-intrinsic-sizing-rows-004-fr.html": [ - "779b30cf60edec4e62718678b6f5966089167daa", + "ce993120161d8b1afa074d54af7f127819bd81f7", [ null, [ @@ -196376,7 +196453,7 @@ ] ], "masonry-intrinsic-sizing-rows-004-mix1.html": [ - "68a8b93e9354a218413e519890eaac29ac64a64e", + "80d8b78c9b0b682480b921329bd4194d6c462300", [ null, [ @@ -196389,7 +196466,7 @@ ] ], "masonry-intrinsic-sizing-rows-004-mix2.html": [ - "75b7f879798607e60e836f956ea7d95853fbabfe", + "20e5881684a6a671cbbe4c97acd7746cc62163b7", [ null, [ @@ -196402,7 +196479,7 @@ ] ], "masonry-intrinsic-sizing-rows-005.html": [ - "13d54a4388ba8abf58925fe25bba0cf7b23348ac", + "54a9515069ac79d7b3730516be16bc32cb8e0bb9", [ null, [ @@ -196415,7 +196492,7 @@ ] ], "masonry-intrinsic-sizing-rows-006.html": [ - "0639e395eaef2f759fef77be8148d40a9dcf3bcd", + "8c1b3925a6a21f7d8eb6b338c6cd19b12b0cad39", [ null, [ @@ -196441,7 +196518,7 @@ ] ], "masonry-intrinsic-sizing-rows-007.html": [ - "95a8e93467cd9eef8062d74d3213475ded0fb2ef", + "6df944bce5b83ad8dde097c62a7aee1af78caffd", [ null, [ @@ -196456,7 +196533,7 @@ }, "item-placement": { "masonry-item-placement-001.html": [ - "2438df8bac8f31bbf259b83f745d9049b979744a", + "20cd4e8c8c5531f1bc3fa9bff76a6663d4d54b0e", [ null, [ @@ -196469,7 +196546,7 @@ ] ], "masonry-item-placement-002.html": [ - "8833cdfcfc5e894c17cb67a5aad7a0fc6fecb47b", + "9d00a1302c5f038ed8b0f399ee520e4b06f66e71", [ null, [ @@ -196482,7 +196559,7 @@ ] ], "masonry-item-placement-003.html": [ - "bde2fa0e664055066effe3a536d1515db04f185a", + "a5ba0c7331c12ff83b65c2ef7ae2fd9157f56749", [ null, [ @@ -196495,7 +196572,7 @@ ] ], "masonry-item-placement-004.html": [ - "92741f4b1153ff7487a84e4f053c1288bcd2fa0f", + "04b4c08dc04f2e2973c85fa2fc42ea01a1842b31", [ null, [ @@ -196508,7 +196585,7 @@ ] ], "masonry-item-placement-005.html": [ - "f879ddce562b40133ac6e5522b86c4bd177c85ef", + "a571f3590986ff7dc51af036add337d0cb4a1ce9", [ null, [ @@ -196521,7 +196598,7 @@ ] ], "masonry-item-placement-006.html": [ - "0f963762af5a71a73ddbbaa1a6f01ab0396d875a", + "35e5b476892200a070be8451a4c31f9378305e2c", [ null, [ @@ -196534,7 +196611,7 @@ ] ], "masonry-item-placement-007.html": [ - "ebbed114a1171a3218be7e1378c199cb82c0fe97", + "bd596ac8906adbdd28093de14156c3a2a81c1227", [ null, [ @@ -196547,7 +196624,7 @@ ] ], "masonry-item-placement-008.html": [ - "bdf651d77b4ba77e9393492e9546e2a163a1c288", + "648563ef99c428a45b970eedf175b277352255ac", [ null, [ @@ -196560,7 +196637,7 @@ ] ], "masonry-rows-with-grid-width-changed.html": [ - "3a1c4cfa9c065425d8de17dba157663f6024711c", + "eccb312df88e3db9cf4ff3a0a5115fae07b987c2", [ null, [ @@ -196574,7 +196651,7 @@ ] }, "masonry-columns-item-containing-block-is-grid-content-width.html": [ - "b5eb7f4984833c9003a527126015d53c084fc239", + "1f474148fdb73bbf7fbdcb2b95c9e204c105cc69", [ null, [ @@ -196587,7 +196664,7 @@ ] ], "masonry-not-inhibited-001.html": [ - "1c912feb1fa2509fb620371188c46a68d88c2bda", + "33b0c5027a13db3c6a6331887d94f966313bb0c5", [ null, [ @@ -196601,7 +196678,7 @@ ], "order": { "masonry-order-001.html": [ - "37b3d01fb413354e77acb25b7d65530055c949e4", + "d62e94707cf29a4ae5078f981eb41f2a8537fa62", [ null, [ @@ -196616,7 +196693,7 @@ }, "subgrid": { "masonry-subgrid-001.html": [ - "c71ba68612e381c26f38bb5b76274c9536823514", + "572d433ced9336db13f9e695adf0c57d551d1172", [ null, [ @@ -196629,7 +196706,7 @@ ] ], "masonry-subgrid-002.html": [ - "167f2d4496da2ed304cf6049cbbb4bf937b2c5d4", + "c41b8251aaf4050b801112370b3d2cc482c8b046", [ null, [ @@ -196643,7 +196720,7 @@ ], "track-sizing": { "masonry-subgrid-flex.html": [ - "c42ccb146435822dd58abec4f65d574bbac2464d", + "85e179c1222b3e2c1d7cc9e4bb0d52a75971af87", [ null, [ @@ -196656,7 +196733,7 @@ ] ], "masonry-subgrid-intrinsic-sizing.html": [ - "91215be2028a0d50d91f32d8f195244b53570a46", + "53d6cdb9b28bcf259d1a3f6c4b4c17a944ad443a", [ null, [ @@ -196669,7 +196746,7 @@ ] ], "masonry-subgrid.html": [ - "392f2afcca624a211e57840aaaaa55896e20034b", + "1d2eb07d1d2e74840973bcc4ffa1eb0d5ed255db", [ null, [ @@ -196685,7 +196762,7 @@ }, "track-sizing": { "masonry-track-sizing-check-grid-height-on-resize.html": [ - "dbff19f28e1b00a18c7a34678b444a43e162d0c8", + "e93a59a4a58eb926f3236e3203bae5b1f0e0e703", [ null, [ @@ -196698,7 +196775,7 @@ ] ], "masonry-track-sizing-explicit-block.html": [ - "3cc98708fe9aec94293eb5bcb296f01d3a4a7508", + "341bf26e2369f80fd4192b46906eecfe6c325e82", [ null, [ @@ -196711,7 +196788,7 @@ ] ], "masonry-track-sizing-overflow-left-side.html": [ - "cd1b78a47b6d2f9feed861a75ba19b4331c748a1", + "418f1e43f02ba847597f73b5f48c6bce38953412", [ null, [ @@ -196724,7 +196801,7 @@ ] ], "masonry-track-sizing-overflow-right-side.html": [ - "e4c17fd7b7793b23a80d15c4fa1440da21b5ecfb", + "c736ff54752cf3d3b55425ba3bc69806e5e3e557", [ null, [ @@ -196737,7 +196814,7 @@ ] ], "masonry-track-sizing-span-row.html": [ - "475c27f1ebea5598c6e3fcec0e21d13b08bc9499", + "527c7b0d890ef98e28176b630208de5eddf2e5de", [ null, [ @@ -224266,6 +224343,19 @@ {} ] ], + "multicol-span-float-004.html": [ + "aa74e436fed4ebc29184a67bf811a5fd705a3384", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "multicol-span-none-001.xht": [ "a2be00b0ccd287effdc446cb18baacdc88fbbe9e", [ @@ -236593,6 +236683,32 @@ {} ] ], + "first-line-child-display-none-dynamic.html": [ + "35fdf0a5c5ce455a55f526be4626daae317ecc13", + [ + null, + [ + [ + "/css/css-pseudo/first-line-child-display-none-ref.html", + "==" + ] + ], + {} + ] + ], + "first-line-child-display-none.html": [ + "3ec50d5b01a874a527d98537cec4b2160d0b8a26", + [ + null, + [ + [ + "/css/css-pseudo/first-line-child-display-none-ref.html", + "==" + ] + ], + {} + ] + ], "first-line-inherited-no-transition.html": [ "e5253daa63fc7cb074901dd086864e27426cd152", [ @@ -242250,7 +242366,7 @@ ] ], "scroll-snap-root-002.html": [ - "302c75634133de666d4262d1a94c9c9ae9bd7b7e", + "7a2106c05c2deda23dd3bf64b118a72885a183a5", [ null, [ @@ -252906,6 +253022,32 @@ {} ] ], + "cache-miss-001.html": [ + "e28eb753f34c1e08adb1c27b13055ef69c12e4f2", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "cache-miss-002.html": [ + "d352a7f2e0ef4638b2b2649ad05dd1bed8678835", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "fixed-table-1.html": [ "ba2df83eac4496e3673b67eee85996880b2438ab", [ @@ -303726,12 +303868,12 @@ ] ], "calc-min-height-block-1.html": [ - "60ce599afc62ea37d0805ebe7ba0e9d1459bb364", + "3945d041b050c1eb942c860c6fe0ad711723cf4e", [ null, [ [ - "/css/css-values/calc-height-block-1-ref.html", + "/css/css-values/calc-min-height-block-1-ref.html", "==" ] ], @@ -310792,6 +310934,19 @@ } ] ], + "nested-position-with-border.html": [ + "cabd94afbe165546b8451f802afaf20357ba1924", + [ + null, + [ + [ + "/css/css-view-transitions/nested/nested-position-with-border-ref.html", + "==" + ] + ], + {} + ] + ], "nested-root-capture-with-clip.html": [ "4a063b57ba1fbe3d821850195fcf8adb9fc75565", [ @@ -312543,6 +312698,35 @@ ] ], "scoped": { + "from-scale-zero.html": [ + "029b8301512e3fc94fc8b428186e811cd376edc7", + [ + null, + [ + [ + "/css/css-view-transitions/scoped/from-scale-zero-ref.html", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 1 + ], + [ + 0, + 10000 + ] + ] + ] + ] + } + ] + ], "nested-scope.html": [ "b9cc25c3338912ae91da453c20924dd5cc90e294", [ @@ -312581,6 +312765,19 @@ ], {} ] + ], + "to-scale-zero.html": [ + "531cb089373805320b3afd8ba4da9aff62f706ee", + [ + null, + [ + [ + "/css/css-view-transitions/scoped/empty-ref.html", + "==" + ] + ], + {} + ] ] }, "scroller-child-abspos.html": [ @@ -312816,6 +313013,19 @@ {} ] ], + "small-scale.html": [ + "39529782ade128d9eaa67f543d55095806d3a638", + [ + null, + [ + [ + "/css/css-view-transitions/small-scale-ref.html", + "==" + ] + ], + {} + ] + ], "snapshot-containing-block-absolute.html": [ "a8a03b62e19bd5be73b077cc4c785bd1ac2abc76", [ @@ -356933,6 +357143,38 @@ ] ] }, + "customizable-select-multiple-popup": { + "select-multiple-popup-appearance.tentative.html": [ + "7034850071dc6d9c189235429a309f395c5d3e52", + [ + null, + [ + [ + "/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance-ref.html", + "==" + ] + ], + { + "fuzzy": [ + [ + null, + [ + [ + 0, + 16 + ], + [ + 0, + 9 + ] + ] + ] + ], + "testdriver": true + } + ] + ] + }, "list-box-important-colors.html": [ "c05d595c30c0c0ce0369100c904295478910f068", [ @@ -358116,6 +358358,23 @@ } } }, + "menu": { + "tentative": { + "menu-elements-default-style.html": [ + "c409f0329f6063e17f1f3b9c9d56c892f20c1148", + [ + null, + [ + [ + "/html/semantics/menu/tentative/menu-elements-default-style-ref.html", + "==" + ] + ], + {} + ] + ] + } + }, "permission-element": { "bounded-css-properties-reftest.tentative.html": [ "4d27b23eb517cee863997d5e765923e040b46ad4", @@ -366062,7 +366321,7 @@ ] ], "image-embedding-nesteder-data-url.html": [ - "4f8335dcd19f3b592ec3e5da6a208da3b3694a2a", + "48fb4fa48b7439dde62fbe82a0ff20ff5d64e550", [ null, [ @@ -366218,7 +366477,7 @@ ] ], "image-modify-href-4.svg": [ - "e900ee7138700d81fd74c5e0822c9c3a820a5d15", + "f7e550e5defb0b1eba85edad430b0cef760223e6", [ null, [ @@ -369555,6 +369814,19 @@ {} ] ], + "sync-svg-attributes.svg": [ + "ef780dd52807143ea6f2b635ea3d0b9d2e67a9bf", + [ + null, + [ + [ + "/svg/struct/reftests/sync-svg-attributes-ref.svg", + "==" + ] + ], + {} + ] + ], "use-a.svg": [ "40d4c83f21faccfddb50c683c2a0b0c42a585935", [ @@ -369646,6 +369918,21 @@ {} ] ], + "use-event-handler-no-loss-of-events.html": [ + "e56e320d26b21a79354493f07caad57a2b056bf5", + [ + null, + [ + [ + "/svg/struct/reftests/reference/green-100x100.html", + "==" + ] + ], + { + "testdriver": true + } + ] + ], "use-external-html-resource-with-content-type-svg.html": [ "bc2ac83978ba30925b0be630a88cd027b4b1d441", [ @@ -374291,7 +374578,7 @@ }, "support": { ".azure-pipelines.yml": [ - "5e37bc4d3f4498b707a6a6f05b3a74af9ce258e2", + "480e89a5e27f2613886759a2a61fd93b164c72f8", [] ], ".gitattributes": [ @@ -374333,7 +374620,7 @@ [] ], "pull_request_test_jobs.yml": [ - "4a4f623e84bf746dad558b1f7e6a688bad13a450", + "8597948a72d0aef87ab625476e0b364d44509db4", [] ], "regen_certs.yml": [ @@ -374341,15 +374628,15 @@ [] ], "safari-wptrunner.yml": [ - "d90414d524193ff1b6dce932b1d8ce6707e0c897", + "cff55aa213a4758320b03099dff09be376013217", [] ], "safari_stable.yml": [ - "4c2acce5c273ea0d90ebb721c0786293523a6c1d", + "96cfef35de6485c3c79e7ef1cc8415070218ae02", [] ], "safari_technology_preview.yml": [ - "e2f4c64f46054411458b3a5d21f8cf08b24a8b66", + "a56c1de00b295f399fd19c7fc8e958d95b5b9ab4", [] ], "update-wasm-tests.yml": [ @@ -374361,7 +374648,7 @@ [] ], "wpt_fyi_notify.yml": [ - "8e9a043f2c363e9bb661a9afa1a9fabebfe1fe98", + "ab6560892dc447ef44d494300a59b9d0a0c0d095", [] ] } @@ -374661,7 +374948,7 @@ [] ], "support-get-all.js": [ - "3b70b828b1375d4946b45941de0b3a115deaec5b", + "57cc59e462bfd39275984ed52a3da8ad5adb39a5", [] ], "support-promises.js": [ @@ -377715,7 +378002,7 @@ ], "support": { "clear-cache-helper.sub.js": [ - "5db0caf834cbf6a598f02761beda267dc8f1bcf8", + "1e9f2c2c33a7c1394c9c813579bd41d4d6a51f38", [] ], "clear-site-data-cache.py": [ @@ -399259,6 +399546,10 @@ "3618b8d29d08c2315f6480c0e02578bb4784b344", [] ], + "WEB_FEATURES.yml": [ + "426cd2fe31668848744acc0ca9cc796305a30844", + [] + ], "synthetic-height-ref.html": [ "a64b545f03c369a900ad6fee1971b60a176c6508", [] @@ -421580,6 +421871,12 @@ "e72f837c95c06189d2945adedaa02351989590ab", [] ], + "parsing": { + "WEB_FEATURES.yml": [ + "9c2d5830e46c0741a074c38ebe154296e77964ed", + [] + ] + }, "rendering": { "dark-color-scheme": { "WEB_FEATURES.yml": [ @@ -421820,6 +422117,10 @@ "259c00b2a587c9aa2d07de97fb547b32f9772b92", [] ], + "WEB_FEATURES.yml": [ + "620243de1d3fdc2e4e779baeb8eb38a06df63752", + [] + ], "contain-inline-size-bfc-floats-001-ref.html": [ "383920cc99e2b4184bde5634143d291bf62579df", [] @@ -427930,7 +428231,7 @@ [] ], "font-family-keywords.js": [ - "09bcf85c9fa5ef4f151785cdb5f477eb16040af8", + "db30af841097d2b7fe5dcb5e9337c9b8b2444052", [] ], "font-weight-bolder-001-ref.png": [ @@ -435296,6 +435597,10 @@ [] ] }, + "anonymous-grid-items-002-ref.html": [ + "0a14a1f9c5534e9775495e322a1bc95b3eb6a6c8", + [] + ], "child-border-box-and-max-content-001-ref.html": [ "df8393a1f0310b7b524d49b05962600602c1500e", [] @@ -439080,7 +439385,7 @@ }, "clip-path": { "WEB_FEATURES.yml": [ - "b098d35ca731931d2cce2450f70e69e5f9dde900", + "dfd5ee78995b24edb05c4054010c0bf784986fcf", [] ], "animations": { @@ -443952,6 +444257,10 @@ "84becd9a78d186ba3c0e658746fd56aef8039b74", [] ], + "first-line-child-display-none-ref.html": [ + "6808b87159a0c0b18ea53a1627265e2b47fccfb9", + [] + ], "first-line-green-ref.html": [ "99e9c334bf2c856535c7643911a3050390658a6f", [] @@ -445161,7 +445470,7 @@ [] ], "scroll-snap-root-002-ref.html": [ - "663b02b8c420593deda9634d47d44aa45a8596e2", + "8edbbfd8acd39435e53626ed5a19fd7f68225047", [] ], "scroll-start": { @@ -446687,7 +446996,7 @@ [] ], "intrinsic-percent-non-replaced-001-ref.html": [ - "295decdf8937b934562148f7b4aa4d7b1a450743", + "1e4ad90b996f519b61e068c59cece02c416529bf", [] ], "intrinsic-percent-non-replaced-002-ref.html": [ @@ -446695,7 +447004,7 @@ [] ], "intrinsic-percent-non-replaced-004-ref.html": [ - "aa735cffdbbdbeeefb624919336d881a6955cd83", + "9e5502b95aa0577aa9b4aa4c7e155f38d884fa16", [] ], "intrinsic-percent-non-replaced-005-ref.html": [ @@ -455494,8 +455803,12 @@ "6aea315fe482683ec574af3b8b924369368302e3", [] ], + "calc-min-height-block-1-ref.html": [ + "ee8dc4e848cf035e75e9c2390d4c15d71daf00be", + [] + ], "calc-min-width-block-intrinsic-1-ref.html": [ - "38019288560a06696e30e92ff69a43e44126401a", + "88dfccc7db43150a8c647b4a47ec9383b78733a9", [] ], "calc-offsets-absolute-top-1-ref.html": [ @@ -456139,7 +456452,7 @@ [] ], "WEB_FEATURES.yml": [ - "cbdc654b1d6280d3eeb3d49e440b69c71eb00463", + "b3d63413d47a0c782cd3151c830ef5b72bfddd4d", [] ], "animating-new-content-ref.html": [ @@ -456641,6 +456954,10 @@ "7db20046e030aaa08582d44e3024cafe93f3fb2a", [] ], + "nested-position-with-border-ref.html": [ + "da7b4d61dff5b81de9a86a44da8ec6295dca0a6b", + [] + ], "nested-ref-100.html": [ "dde4f026c36a11a40aef594ccfdc89d6f573120b", [] @@ -456935,6 +457252,14 @@ "1216fdfa85051ce2d19e97853b63f8ba70348209", [] ], + "empty-ref.html": [ + "a8b9d0e6b24602b1242d806a322b55d80a1b8fd0", + [] + ], + "from-scale-zero-ref.html": [ + "ce087d8846316fb1e4f5c0b2d1087bf73763ec0f", + [] + ], "nested-scope-ref.html": [ "951c0928687dcd6edb32e8e3aa7307bf3d6b3923", [] @@ -456968,6 +457293,10 @@ "437c730b9e9416e26995f929cef856c2386c57db", [] ], + "small-scale-ref.html": [ + "f4dc329c9e6fb10c90a3ac72537c28b438b2d4ce", + [] + ], "snapshot-containing-block-absolute-ref.html": [ "5f2e780c58f488d924b3043519c9711143de64e7", [] @@ -462843,8 +463172,16 @@ "6870ed5291f043c35a85669c2d69dace00f9ceaa", [] ], + "redirect.py": [ + "82ca58826e53ddf06e13c788c670e2775fed1c35", + [] + ], + "reflect_headers.py": [ + "a4ddcb5a568af75e84dfd0d0610ed62495990602", + [] + ], "refresh_session.py": [ - "ab491e30104202d61857d976eb49d927a8a96a7c", + "ff804f63c0ab3dbda74dbf426c8b7692b397aec1", [] ], "request_early_challenge.py": [ @@ -462852,7 +463189,7 @@ [] ], "session_manager.py": [ - "1095c94d7688f86a088d13d38e7160fc70ff3e29", + "87fdcafb9f4062eccc6d267411a5e9ffb2c29238", [] ], "set_cookie.py": [ @@ -463279,7 +463616,7 @@ [] ], "testdriver.md": [ - "e0fae529875ee89d5e8a2457cdab35e1866f663b", + "b939f85da12c483e9af60a0f4eb7979b0c7495a2", [] ], "testharness-api.md": [ @@ -467664,6 +468001,10 @@ } }, "compression-dictionary": { + "README.md": [ + "c7da1b85968ab1760cb22306946d02b35ad60207", + [] + ], "resources": { "clear-site-data.py": [ "0db51bf797f7e7efb0d16671dcdaa4afe0129b71", @@ -467673,20 +468014,28 @@ "bb9d7fe8466887a2233d760b18ac4e6af0b1e732", [] ], - "compression-dictionary-util.js": [ - "7d86f594a802c221077ce471393f6c9fabba7f2e", + "compression-dictionary-util.sub.js": [ + "e36834733b855b8cd3dedd3330d4cdc2c102dcbd", [] ], "echo-headers.py": [ - "aabd99eb10143a0eafb976d48d502a572dfb6a7f", + "657bd31c069189f7452b5981ea0293160df74aeb", + [] + ], + "echo-headers2.py": [ + "657bd31c069189f7452b5981ea0293160df74aeb", [] ], "empty.html": [ "0e76edd65b7baf5316fc9d0c4da59a3502e4c27a", [] ], + "handler_utils.py": [ + "4078bd9841971c929dcb5300099f90e2fff24abc", + [] + ], "register-dictionary.py": [ - "0bd57225ef1355360d6e16fb1243c8f1a465d6d9", + "ea1fff9ad088ae7b978662d89e6b1a6ca4ab0cbd", [] ] } @@ -483116,7 +483465,7 @@ [] ], "iframe_sandbox_download_helper.js": [ - "7090e7662ca8e2f5cd0e732a8ea3c386abc273b1", + "92d0e8b460529c03a6980084e43938e28ff19b8c", [] ], "iframe_sandbox_iframe_pdf_viewer.html": [ @@ -483960,6 +484309,12 @@ ] } }, + "customizable-select-multiple-popup": { + "select-multiple-popup-appearance-ref.html": [ + "233ddbcc2059ebd9b7256f2d11a2bc1910542cc9", + [] + ] + }, "list-box-important-colors-ref.html": [ "8e75a4e21e8966713245299f515608aa4666843e", [] @@ -484165,7 +484520,7 @@ }, "the-dialog-element": { "WEB_FEATURES.yml": [ - "bf15e99b65bd44ddbc05e305a39cc0a18fff7b0f", + "449caa2da3e6d0b394a396b7076247ee34ad336e", [] ], "backdrop-descendant-selector-ref.html": [ @@ -484430,6 +484785,14 @@ ] } }, + "menu": { + "tentative": { + "menu-elements-default-style-ref.html": [ + "40e2ca8b39ae40f1f0297810c44db354a8454c83", + [] + ] + } + }, "permission-element": { "bounded-css-properties-reftest-ref.html": [ "2fb0c1f4e951cc09468238a94272d10aef61ce4c", @@ -486160,7 +486523,7 @@ ], "resources": { "invoker-utils.js": [ - "bc43e738c34e58f450874d8ccc99e110e07e7800", + "b12190c7b040552fc974f07a38bf117ebda70fc9", [] ] } @@ -488972,6 +489335,14 @@ "feaf5ceae7a8828a6020a0c89730ed0e17a6d4f2", [] ], + "simulate_gatt_connection_response.https.html.ini": [ + "15e36e89896f44ed13dcd473ec0b7e35933e61e6", + [] + ], + "simulate_gatt_disconnection.https.html.ini": [ + "28b1484c55d5b33fb68d8d88e879df817806b605", + [] + ], "simulate_preconnected_peripheral.https.html.ini": [ "b2c823097f63695eb3567355bcd65bea7df2be7b", [] @@ -489168,7 +489539,7 @@ "bluetooth": { "resources": { "bidi-bluetooth-helper.js": [ - "7f6962d1c85496ca85867b6814b88bf6464275f1", + "87a2a55fa0ecb40549af833d1b5a051453852c75", [] ] } @@ -489742,7 +490113,7 @@ [] ], "dom.idl": [ - "253e7bf913eba90db9dc6c2e7e7412dda6f2d493", + "d2129285383a34e28ea3b04989273b7e76f6d0dd", [] ], "edit-context.idl": [ @@ -489862,7 +490233,7 @@ [] ], "html.idl": [ - "3a7dce9693ef3ecaaf1ea274029663b8068c4222", + "a7a03c97ad07a65cb672ba280864882d1de0fb99", [] ], "idle-detection.idl": [ @@ -490101,6 +490472,10 @@ "516fb59d8d41489b405264289a4a0fd814f79fa8", [] ], + "pointer-animations.idl": [ + "e1b03197514cf0fffd78c3de17ec84ef94eace21", + [] + ], "pointerevents.idl": [ "0356e845058a5c97d27f96c5bc41e8ea74bd9cbc", [] @@ -490222,7 +490597,7 @@ [] ], "secure-payment-confirmation.idl": [ - "0a2207684ec71074ffea786bf459b6073799e8d3", + "c0cbc41e99cf5b053a742495cda7474e66299779", [] ], "selection-api.idl": [ @@ -490797,6 +491172,10 @@ "84e5177d5e5e4c0b689038b80f9baaad5baa7f88", [] ], + "WEB_FEATURES.yml": [ + "1d2e9bdb5652cdc112afd6a6d45d329d07ac1aaf", + [] + ], "__dir__.headers": [ "93537b44ded3365d48cce9649697e2823f1a2482", [] @@ -490935,7 +491314,7 @@ } }, "lint.ignore": [ - "cf83e458213668188c73dc0b98048be24c31ffe4", + "7273ff2c0597d2a377de936cfed64a7b145a5d84", [] ], "loading": { @@ -498794,7 +499173,7 @@ [] ], "testdriver.js": [ - "992b9e3ab2ce0b63b94be2a5aa671b321f65e334", + "40e62676bdc68e0345f6b806e8cf34868a0b1f01", [] ], "testdriver.js.headers": [ @@ -498963,6 +499342,10 @@ "78d6dfcbd49952e62960dec17884a68580188df7", [] ], + "WEB_FEATURES.yml": [ + "a609b1b3bb5de02fc3951a77fe7c1e82ad9139a3", + [] + ], "resources": { "page1.html": [ "7fc080d380c4bd46dfb011910e570ee412561b92", @@ -503057,11 +503440,11 @@ [] ], "soft-navigation-helper.js": [ - "4bc16b44e00097ce2e3ee63ac7d64c14db565b7a", + "9ee79d36f76fdd6e8f6324fe0425f80825d2670d", [] ], "soft-navigation-test-helper.js": [ - "a572f55e66dbce825d399f61c4a2dfa34df9b4ca", + "d4b6ad04a78605852bf2eee63a073c0e0d127e71", [] ] }, @@ -505176,7 +505559,15 @@ "f73b8851913f402aa41adac40360b15acbad1119", [] ] - } + }, + "sync-svg-attributes-ref.svg": [ + "f68db2a3065edac301b0a98510416f2e1b9c46c2", + [] + ], + "use-event-handler-no-loss-of-events-ref.html": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + [] + ] }, "scripted": { "support": { @@ -505519,11 +505910,11 @@ [] ], "cacert.key": [ - "26e5b3577da799fdeb8fdd5b7d645fcf1925d40a", + "bb982867aa6a8103a6908bb5ccffb361d09c878d", [] ], "cacert.pem": [ - "18255d049619f0c68037c521077619c588482786", + "e2ff4894e9e1fbedf8aa9e81fd6e6cf7e0068484", [] ], "config.json": [ @@ -505531,11 +505922,11 @@ [] ], "web-platform.test.key": [ - "2516ae7459387b16b6075b177c3bbbdd77679f9a", + "f11ffba2589fb7b941f581aac1a598cf4e125451", [] ], "web-platform.test.pem": [ - "ad77f3e9e14a4c542b04495535c40555f8474fc7", + "b6f1c1c1cae0743cc69836acc365afe9542cc72f", [] ] }, @@ -505549,10 +505940,6 @@ "afe5021efcad78a13d1767fb423d846557b92ee0", [] ], - "affected_tests.yml": [ - "566021d249687d87f7fc5c9f23110173709e29d2", - [] - ], "checkout.yml": [ "618c571465963a478a308899328d5fa5851d491e", [] @@ -505561,10 +505948,6 @@ "d90c6ca429d55c1e7beee3a25d713970e085688c", [] ], - "com.apple.SafariTechnologyPreview.plist": [ - "122080972c9f63410062ee8d33d0ed0286af8f11", - [] - ], "fyi_hook.yml": [ "8e541e14d86726d9c8ca8579b763a4190493e603", [] @@ -505585,14 +505968,6 @@ "d43e28b274f1cf44d75a742c1786b380906e3cdc", [] ], - "install_fonts.yml": [ - "279c262c7efab0711f2300054047a3d5c794cff0", - [] - ], - "install_safari.yml": [ - "1a398532dacd6203a738c93600025c4ffe746d7f", - [] - ], "pip_install.yml": [ "18d1879e971613532fac5673d9a804acc1bc8673", [] @@ -505639,7 +506014,7 @@ [] ], "ci_tools_unittest.sh": [ - "8e16ee18decf024dae9e1e728d775ff99e8ae35f", + "9767e95984ec2febfacb0dcc350190a9b31f4140", [] ], "ci_wptrunner_infrastructure.sh": [ @@ -516594,7 +516969,7 @@ [] ], "bluetooth.py": [ - "d18fafa1a911226ed876846d2ba48c3052dd0150", + "d574b6f391d36cba456a9a39103416039b37dc77", [] ], "browser.py": [ @@ -516700,7 +517075,7 @@ [] ], "webtransport_h3_server.py": [ - "d2a31a93c9e8a6e5be2685710e509ed2862d8c8c", + "eca779a3f58995ea712bfd7e69bee706f0c884ee", [] ] }, @@ -516989,7 +517364,7 @@ [] ], "chrome_spki_certs.py": [ - "f1e7df1d4c7d2cbbf6987eff133f1851c44a147f", + "abbe55d4da3047dc73a7c40b13b456dd2bf84189", [] ], "chromium.py": [ @@ -517005,7 +517380,7 @@ [] ], "firefox.py": [ - "e5635c361cc75fff518233421cdd9ace8eba167c", + "2f7b0e8195790e9004319ae801184cf0063cd3f8", [] ], "firefox_android.py": [ @@ -517081,7 +517456,7 @@ [] ], "asyncactions.py": [ - "9f7f313f203541d09e9e1ad7b2e7e25380c1b02d", + "7255f04ac3648823eff5f434e4740a363175c038", [] ], "base.py": [ @@ -517109,11 +517484,11 @@ [] ], "executorservodriver.py": [ - "8176d15ea2a5bbc201618076d58c76b59bc42c47", + "e27b111ee8b7c4cdff4a0aee5c010d402efff263", [] ], "executorwebdriver.py": [ - "6bed90369b17bfc9d6ecb6a09110f7ac7833acbd", + "0bb8d854d41398e0d62f05e509367713a785bb78", [] ], "executorwktr.py": [ @@ -517129,7 +517504,7 @@ [] ], "protocol.py": [ - "af32f487c953f01fa9fd8d812111506000140819", + "8614dc4f7b51126e533701d4e644c905ad979971", [] ], "pytestrunner": { @@ -517236,7 +517611,7 @@ [] ], "testdriver-extra.js": [ - "2a5bb3937fdd57b7223b09c9b881e17527e023a1", + "66c31612bd50400ea86ccd350f12f7790b0a1edb", [] ], "testdriver-vendor.js": [ @@ -521946,18 +522321,36 @@ ], "bluetooth": { "__init__.py": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "81a5939346058cef4f32b5322b60f35d33f0b12a", [] ], + "disable_simulation": { + "__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + [] + ] + }, "simulate_adapter": { "__init__.py": [ - "1e1fcc05ef5b0964f649e48304b1ed2f5e7eced5", + "aa2f04dff9bab01e2d29a5db75bf975dfb9d406d", + [] + ] + }, + "simulate_gatt_connection_response": { + "__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + [] + ] + }, + "simulate_gatt_disconnection": { + "__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", [] ] }, "simulate_preconnected_peripheral": { "__init__.py": [ - "846c103d5da7b307f8cf61eca12fde929f290ed0", + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", [] ] } @@ -535552,6 +535945,153 @@ } ] ], + "idbindex_getAll-options.tentative.any.js": [ + "908fcecbd1a4b5715aac459b29626d445d44f4ce", + [ + "IndexedDB/idbindex_getAll-options.tentative.any.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBIndex.getAll with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbindex_getAll-options.tentative.any.serviceworker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBIndex.getAll with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbindex_getAll-options.tentative.any.sharedworker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBIndex.getAll with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbindex_getAll-options.tentative.any.worker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBIndex.getAll with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], "idbindex_getAll.any.js": [ "f817758e60342482daefe0dfa589a60bb41a365f", [ @@ -535699,6 +536239,153 @@ } ] ], + "idbindex_getAllKeys-options.tentative.any.js": [ + "f7f180e16ea601a128798d1967333858cdfc9da3", + [ + "IndexedDB/idbindex_getAllKeys-options.tentative.any.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBIndex.getAllKeys with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbindex_getAllKeys-options.tentative.any.serviceworker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBIndex.getAllKeys with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbindex_getAllKeys-options.tentative.any.sharedworker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBIndex.getAllKeys with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbindex_getAllKeys-options.tentative.any.worker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBIndex.getAllKeys with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], "idbindex_getAllKeys.any.js": [ "34bab09d158d2020a7c6f85ca76f2eaa32946841", [ @@ -538232,6 +538919,153 @@ } ] ], + "idbobjectstore_getAll-options.tentative.any.js": [ + "21ca6dd1a1f49ea462fd974e3b2d07b8498a8836", + [ + "IndexedDB/idbobjectstore_getAll-options.tentative.any.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBObjectStore.getAll with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbobjectstore_getAll-options.tentative.any.serviceworker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBObjectStore.getAll with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbobjectstore_getAll-options.tentative.any.sharedworker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBObjectStore.getAll with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbobjectstore_getAll-options.tentative.any.worker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBObjectStore.getAll with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], "idbobjectstore_getAll.any.js": [ "6082163d3d24100994ce30d22797e72ee63386cf", [ @@ -538379,6 +539213,153 @@ } ] ], + "idbobjectstore_getAllKeys-options.tentative.any.js": [ + "7b810efa5989b77f8560fee44ba883b1052d16f6", + [ + "IndexedDB/idbobjectstore_getAllKeys-options.tentative.any.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBObjectStore.getAllKeys with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbobjectstore_getAllKeys-options.tentative.any.serviceworker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBObjectStore.getAllKeys with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbobjectstore_getAllKeys-options.tentative.any.sharedworker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBObjectStore.getAllKeys with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "IndexedDB/idbobjectstore_getAllKeys-options.tentative.any.worker.html", + { + "script_metadata": [ + [ + "title", + "IndexedDB: Test IDBObjectStore.getAllKeys with options dictionary." + ], + [ + "global", + "window,worker" + ], + [ + "script", + "resources/nested-cloning-common.js" + ], + [ + "script", + "resources/support.js" + ], + [ + "script", + "resources/support-get-all.js" + ], + [ + "script", + "resources/support-promises.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], "idbobjectstore_getAllKeys.any.js": [ "17244f6e49cad5811e860de12e7a17dd0b7a524a", [ @@ -540396,7 +541377,7 @@ ] ], "key-conversion-exceptions.any.js": [ - "08b99946c01f57a5875d31ad79d0051c57736555", + "ba0da849fe9df00654447c6a34b5e1de606c7db5", [ "IndexedDB/key-conversion-exceptions.any.html", { @@ -554793,8 +555774,35 @@ } ] ], + "rewriter-create-user-activation.tentative.https.window.js": [ + "119b0aaa7a23b4f1d15a517569890a071c895ed2", + [ + "ai/rewriter/rewriter-create-user-activation.tentative.https.window.html", + { + "script_metadata": [ + [ + "title", + "Rewriter Create User Activation" + ], + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], "rewriter-create.tentative.https.window.js": [ - "4494f5912261b909873e1db424a27122f309feb4", + "dc7d0a7b2f52831ad7805284b169823a804ce2b9", [ "ai/rewriter/rewriter-create.tentative.https.window.html", { @@ -554885,7 +555893,7 @@ ] ], "rewriter-rewrite-streaming.tentative.https.window.js": [ - "81b73fbdabd0d8f631cc6db62fc9a72c28287793", + "d275ba514db2d2e1f25a84c4e7bc1c7dce048b3f", [ "ai/rewriter/rewriter-rewrite-streaming.tentative.https.window.html", { @@ -555048,8 +556056,35 @@ } ] ], + "summarizer-create-user-activation.tentative.https.window.js": [ + "3d96829329520ce576320c21c0a9a10792cba78b", + [ + "ai/summarizer/summarizer-create-user-activation.tentative.https.window.html", + { + "script_metadata": [ + [ + "title", + "Summarizer Create User Activation" + ], + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], "summarizer-create.tentative.https.window.js": [ - "ff5d42b100f067d8b85d91be43949e0c83ab0a5e", + "7811d44f8ed41826b43fe04ee7effc08460d4fbc", [ "ai/summarizer/summarizer-create.tentative.https.window.html", { @@ -555140,7 +556175,7 @@ ] ], "summarizer-summarize-streaming.tentative.https.window.js": [ - "8d85dc7b836eb8416182acceb57c16940399e63f", + "09a8fb0d97eb4629d6cdc81d1fe34d02e9ebbbb7", [ "ai/summarizer/summarizer-summarize-streaming.tentative.https.window.html", { @@ -555293,7 +556328,7 @@ ] ], "translator.optional.https.window.js": [ - "ce01efed14399414c3617e0677c1f720b4cc872a", + "94be911afb5e823fbcde961753eb86bbc0e5d75f", [ "ai/translator/translator.optional.https.window.html", { @@ -555429,8 +556464,35 @@ } ] ], + "writer-create-user-activation.tentative.https.window.js": [ + "734a2a507f4d0d16ee405080c62e69397be5556e", + [ + "ai/writer/writer-create-user-activation.tentative.https.window.html", + { + "script_metadata": [ + [ + "title", + "Writer Create User Activation" + ], + [ + "script", + "/resources/testdriver.js" + ], + [ + "script", + "../resources/util.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], "writer-create.tentative.https.window.js": [ - "2f328c8d7cc67fd6ed18d7f3b68d5551dc1dfd36", + "18444a4a95389c809400a5185515ed0fd1667d99", [ "ai/writer/writer-create.tentative.https.window.html", { @@ -555521,7 +556583,7 @@ ] ], "writer-write-streaming.tentative.https.window.js": [ - "52992ad21394102fece8feec286eca4b50e19fa2", + "67286a7ede95578dc6ef12eae43d3a08a58ff9d6", [ "ai/writer/writer-write-streaming.tentative.https.window.html", { @@ -563442,8 +564504,18 @@ ] }, "clear-site-data": { - "clear-cache-bfcache.sub.https.html": [ - "61d810f453b827946cb6ef943b4509b24e5f3246", + "clear-cache-bfcache-partitioning.tentative.https.html": [ + "02a2f020cbca1a14088f60db27de61b61aae2cf8", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], + "clear-cache-bfcache.https.html": [ + "b9967c541f1d89f6343ea47df38b3cbdb722ecc1", [ null, { @@ -581423,6 +582495,13 @@ {} ] ], + "anchor-function-pseudo-element-implicit-anchor.html": [ + "443093eb79670cb5059c2303192ac089f7799ab8", + [ + null, + {} + ] + ], "anchor-getComputedStyle-001.html": [ "7c2cbbb67955db11eef9874744d333e07bc45172", [ @@ -582109,6 +583188,13 @@ {} ] ], + "anchored-child-transition-with-selection.html": [ + "d18cb07993f9c5c3e790825c467c57fdd16cd637", + [ + null, + {} + ] + ], "at-position-try-allowed-declarations.html": [ "3d2a70390a4ab0e3a0d7e3c9418fb6fdef5f7fdc", [ @@ -582280,7 +583366,7 @@ ] ], "popover-implicit-anchor.html": [ - "b6bba4534c0ed30c314101c788d9ca414dff1102", + "ca0ef30359fb0967bc0e5c98c00347e9a0d40709", [ null, { @@ -582379,6 +583465,13 @@ {} ] ], + "position-area-pseudo-element-implicit-anchor.html": [ + "3b876cbd8aff4c392e324f08cf2fc1f8511a877f", + [ + null, + {} + ] + ], "position-area-scrolling-001.tentative.html": [ "7abe8e62580ade8d48cdf95eecd061c3bc6c744b", [ @@ -582583,14 +583676,14 @@ ] ], "position-try-transition-basic.html": [ - "eb4222090bd1584d31cc15f59f4a6bff9808c0e7", + "f1b16576346f3ae0b47e0accbaa2202e63c80cfa", [ null, {} ] ], "position-try-transition-flip.html": [ - "e8e692a7295b9c9c3900764952058c8745da673e", + "24c9af2bcbaf745ff1a8137f787820e3ffb51f0a", [ null, {} @@ -586507,7 +587600,7 @@ ] ], "color-computed-relative-color.html": [ - "a5c489e40a6cffd28709757b1645db319a2a70b9", + "83259ebe2df69cf55c61d275ae88cf912621590f", [ null, {} @@ -596455,7 +597548,7 @@ "masonry": { "tentative": { "masonry-grid-template-columns-computed-withcontent.html": [ - "0ee2ee78c06c997c5292b336df127c6594349285", + "da13a8fd44e2ae2db24af57c9ead58ebd3331aec", [ null, {} @@ -599043,6 +600136,27 @@ "css-masonry": { "tentative": { "parsing": { + "item-tolerance-computed.html": [ + "57f36c9f4a1a8ba728729ab2de1b0025cc81d47a", + [ + null, + {} + ] + ], + "item-tolerance-invalid.html": [ + "6cdd0bd270c3119492b883ca22eee445a45ec4d4", + [ + null, + {} + ] + ], + "item-tolerance-valid.html": [ + "9dc6721541e79bb4b0d5c4b934c1650716f3cf6a", + [ + null, + {} + ] + ], "masonry-auto-tracks-computed.html": [ "2581a35292f65cba7bd4d74cecad454ce349ce54", [ @@ -599127,27 +600241,6 @@ {} ] ], - "masonry-slack-computed.html": [ - "57f36c9f4a1a8ba728729ab2de1b0025cc81d47a", - [ - null, - {} - ] - ], - "masonry-slack-invalid.html": [ - "6cdd0bd270c3119492b883ca22eee445a45ec4d4", - [ - null, - {} - ] - ], - "masonry-slack-valid.html": [ - "9dc6721541e79bb4b0d5c4b934c1650716f3cf6a", - [ - null, - {} - ] - ], "masonry-template-tracks-invalid.html": [ "7fed500c28ebcf3a117eccc8faedad901527e347", [ @@ -599195,7 +600288,7 @@ ] ], "at-function-parsing.html": [ - "60a84422af8f2a06fb5998dff43cc8ecd48cf6bd", + "e945b397950f878e5a29a26ffcb123c53bcbcd85", [ null, {} @@ -600833,6 +601926,15 @@ } ] ], + "scroll-marker-scroll-container.html": [ + "3892fc977d958fe8100ccfb90a10835eb0b8d3f4", + [ + null, + { + "testdriver": true + } + ] + ], "scroll-marker-selection-in-padded-scroller.html": [ "94e84d278f2b53b475e6d072cb6f520916bdb283", [ @@ -607281,7 +608383,7 @@ ] ], "contain-intrinsic-size-009.html": [ - "0aa62eaaeff5d6cc2fd499b1bf6907e11cbe0e37", + "23e14a7597eccd10fc8cf6b159ab71dd3c4b5b75", [ null, {} @@ -607466,7 +608568,7 @@ ] ], "keyword-sizes-on-replaced-element.html": [ - "39b2e591d5396587377dbdcd3ff78529157e0de0", + "d3507b5da6e1366ffd869e0b287378a8c06d4b79", [ null, {} @@ -612468,6 +613570,20 @@ {} ] ], + "preserve3d-backface-hit-test-1.html": [ + "5161d5678c878c410d86f88d6ec67af5bb1fad18", + [ + null, + {} + ] + ], + "preserve3d-backface-hit-test-2.html": [ + "96b482c88fc7f80392874eba6942975c8bc19a41", + [ + null, + {} + ] + ], "scroll-preserve-3d.html": [ "ffedc2f5cd3f59d575e7d1dbf54ef4cfc5352c5a", [ @@ -617370,7 +618486,7 @@ ] ], "getComputedStyle-calc-mixed-units-003.html": [ - "fae9682b2c0088fa2de10254bf352450a5fe0b68", + "7fa4eeee642b25fe762ba9650e22dfd86c232dbd", [ null, {} @@ -617412,7 +618528,7 @@ ] ], "if-conditionals.html": [ - "f6d981798ae7a03f97b4fd089ee02141c7f90813", + "bc25196e615139e43082c00d6bb066709754ad02", [ null, {} @@ -619034,6 +620150,13 @@ {} ] ], + "callback-order.tentative.html": [ + "f803cc7084f31381b57710cd8b36ce206abb0269", + [ + null, + {} + ] + ], "capture.html": [ "06f848d2de16d7a26defcc3279d24622ceb32f54", [ @@ -619062,6 +620185,20 @@ {} ] ], + "fill-forwards.html": [ + "17f9d2f64c6e3dad271b701a074fe5abd04ca46e", + [ + null, + {} + ] + ], + "negative-playback-rate.html": [ + "c347f04f7775bf384f2d81c2e557d78973520d19", + [ + null, + {} + ] + ], "run_in_parallel.html": [ "1afdae2be9d8092953746d360d2a77ea1a538ba1", [ @@ -622076,6 +623213,13 @@ {} ] ], + "scrollIntoView-scrolling-container.html": [ + "9f7c88aaeb39610d5adffd046f72bb3a10491fb4", + [ + null, + {} + ] + ], "scrollIntoView-shadow.html": [ "3b19e1ef5ac1e496e26f92e90b89cf9fed68efe5", [ @@ -626552,6 +627696,13 @@ {} ] ], + "debug-header.https.html": [ + "631151bcbcfb7c6004e022b5b2a28f0c902998fc", + [ + null, + {} + ] + ], "fetch-no-credentials.https.html": [ "4cac685727ad29cd96be041753623cbc4fdd1be6", [ @@ -663584,7 +664735,7 @@ }, "compression-dictionary": { "dictionary-clear-site-data-cache.tentative.https.html": [ - "c8bcf7fdf1299519e51f84568b984310706710f2", + "b9764291bbb1c3edd73aceaa6cab2203762e85c4", [ null, { @@ -663593,7 +664744,7 @@ ] ], "dictionary-clear-site-data-cookies.tentative.https.html": [ - "aa1673e88c80922553ff59cb2114d35d6ff37942", + "e09114c28eccda992b13004cfc7261d9a4a24a7b", [ null, { @@ -663602,7 +664753,16 @@ ] ], "dictionary-clear-site-data-storage.tentative.https.html": [ - "22747eb65657e53a4900769fa77d9f35c70093a7", + "873c915a315226b1bbbcda1829d39018f8f95a1a", + [ + null, + { + "timeout": "long" + } + ] + ], + "dictionary-compressed.tentative.https.html": [ + "abd15a6f09837d36330a9f0cfc4e50501b25703e", [ null, { @@ -663611,7 +664771,16 @@ ] ], "dictionary-decompression.tentative.https.html": [ - "33aeb4466bae82e70757f6f86e83602b103bdb50", + "0a661a013d150cb2e9d809374151a0a98f4aacff", + [ + null, + { + "timeout": "long" + } + ] + ], + "dictionary-fetch-no-cors.tentative.https.html": [ + "173f61a7f1b7304ae04f283b1ff9ea747af31f64", [ null, { @@ -663620,7 +664789,7 @@ ] ], "dictionary-fetch-with-link-element.tentative.https.html": [ - "d465ceb3d85357c80fd92edf61328e88fb9acf0b", + "2b49aae307be3a9fa191d2af884c2dc6ad63fa77", [ null, { @@ -663629,7 +664798,7 @@ ] ], "dictionary-fetch-with-link-header.tentative.https.html": [ - "007067d71ad43a5b05eb25f53badd080bd85f4e1", + "d82de8a4d70e9703be3ae37d5800513d18504ffc", [ null, { @@ -663638,7 +664807,7 @@ ] ], "dictionary-registration.tentative.https.html": [ - "f0782aff3bd3e640e62463f2aa8154f993b73d35", + "18a3a11cef16f8d64c21ad3837eb407bc9271ad0", [ null, { @@ -684884,6 +686053,13 @@ {} ] ], + "focus-sync-when-blur.html": [ + "d71ed6d8e684d90a2faa85e2d3472bb36fb2f6d8", + [ + null, + {} + ] + ], "hasfocus-different-site.html": [ "4495778c81b5c3396be8fbca741ab74f06a6d799", [ @@ -737434,6 +738610,13 @@ {} ] ], + "input-valueasdate-typeerror.html": [ + "6fa57d51ee6d2e1b54ad166ac83bd50bed2f9461", + [ + null, + {} + ] + ], "input-valueasdate.html": [ "894983add277e59d017325d847622ae2e6270efd", [ @@ -737455,6 +738638,13 @@ {} ] ], + "input-valueasnumber-typeerror.html": [ + "78b37bad4a3f71aac6818580b074b468f48a0039", + [ + null, + {} + ] + ], "input-valueasnumber.html": [ "47e66c5e3bd76b3a590547d3f7fcfefe48674870", [ @@ -738473,6 +739663,35 @@ "testdriver": true } ] + ], + "select-in-page-typeahead.tentative.html": [ + "c31087ec5c2dd94c22fe7414d81e26d7f4c4e128", + [ + null, + { + "testdriver": true + } + ] + ] + }, + "customizable-select-multiple-popup": { + "select-multiple-popup-keyboard-behavior.tentative.html": [ + "e73abb299f0f66fa91f7d08978ec5bd796c02b91", + [ + null, + { + "testdriver": true + } + ] + ], + "select-multiple-popup-mouse-behavior.tentative.html": [ + "6942d0e7982856770b03deebe0ac8ecbb5a8172b", + [ + null, + { + "testdriver": true + } + ] ] }, "inserted-or-removed.html": [ @@ -739893,6 +741112,47 @@ ] } }, + "menu": { + "tentative": { + "button-invoke-menulist.html": [ + "f5ac3dd7e6d09abe5e2fc88ef6cb477b2ca73dbe", + [ + null, + {} + ] + ], + "checkable.html": [ + "d801fa1b6ff95ab1cc70ea37f4a561bde8a32018", + [ + null, + {} + ] + ], + "focus-menu-elements-arrowoperations.html": [ + "d41799f85048308de2ebc1dddcb8123269887814", + [ + null, + { + "testdriver": true + } + ] + ], + "menubar-invoke-menulist.html": [ + "3fe0caf62c7612d69a9f657fdf2171b6abf15687", + [ + null, + {} + ] + ], + "menulist-popover-attribute.html": [ + "2ccd0a3c1bd4c32459d35d1a3898955beeea38cb", + [ + null, + {} + ] + ] + } + }, "permission-element": { "bounded-css-properties.tentative.html": [ "1455ba98bb31a5a07b701b9861ce8149dd5b3fe8", @@ -745251,6 +746511,23 @@ } ] ], + "interesttarget-input-modalities.tentative.html": [ + "ce2962bfa84f487c3a826e02b8fc3aafeeb74355", + [ + "html/semantics/the-button-element/interest-target/interesttarget-input-modalities.tentative.html?method=focus", + { + "testdriver": true, + "timeout": "long" + } + ], + [ + "html/semantics/the-button-element/interest-target/interesttarget-input-modalities.tentative.html?method=hover", + { + "testdriver": true, + "timeout": "long" + } + ] + ], "interesttarget-invoker-descendants.tentative.html": [ "d976c0eb011d4240d162418df077c412db5fb9b1", [ @@ -745261,7 +746538,7 @@ ] ], "interesttarget-keyboard-behavior.tentative.html": [ - "997c2b9382508902ae2025bb4f71d6f2de0f56f5", + "53be20b348a1e17e023ad5b977baad3eef39adb4", [ null, { @@ -752889,7 +754166,7 @@ "bidi": { "bluetooth": { "handle_request_device_prompt.https.html": [ - "3d1b9176003388e40be27f8a7582ad1a3240a860", + "5d95fe8c3f707804ae47b861b05e9a221d7f35dd", [ null, { @@ -752901,14 +754178,43 @@ ] ], "simulate_adapter.https.html": [ - "ed60285c41fabe6665ed81e720932428afab1d63", + "b8497088b19031a478ecc4d9ae09b9f2b1e050ab", [ null, - {} + { + "testdriver": true, + "testdriver_features": [ + "bidi" + ] + } + ] + ], + "simulate_gatt_connection_response.https.html": [ + "449b28461144c32804063c354642b311fc9b4735", + [ + null, + { + "testdriver": true, + "testdriver_features": [ + "bidi" + ] + } + ] + ], + "simulate_gatt_disconnection.https.html": [ + "0b8a8df93a641192f019cd57783164bbb8281f8c", + [ + null, + { + "testdriver": true, + "testdriver_features": [ + "bidi" + ] + } ] ], "simulate_preconnected_peripheral.https.html": [ - "318bd29cf4ee77dd34bb0a2f5fc91e54d29fc189", + "54f5aece12ba4224811c6f884c3f62468f7c720b", [ null, { @@ -764374,7 +765680,7 @@ ] ], "navigate-form-userInitiated.html": [ - "246e028a0dbf241f1667c380a0255396d13b1553", + "d237b52ac1ee07d8c455792f39e81a46e68d44a8", [ null, { @@ -799270,6 +800576,19 @@ } ] ], + "menu": { + "tentative": { + "focus-menu-elements.html": [ + "fe72c069627643eb42392c8ef735a95902752c9c", + [ + null, + { + "testdriver": true + } + ] + ] + } + }, "reading-flow": { "tentative": { "carousel-grid-order.html": [ @@ -801701,10 +803020,10 @@ }, "dom": { "tentative": { - "distant-leaf.window.js": [ - "c599985a2a29de4fe9472dddfce9ce6c1d95116e", + "distant-leaf-image.window.js": [ + "96255d82f2d60ae1517f0eec4704ee361d6c965d", [ - "soft-navigation-heuristics/dom/tentative/distant-leaf.window.html", + "soft-navigation-heuristics/dom/tentative/distant-leaf-image.window.html", { "script_metadata": [ [ @@ -801723,10 +803042,10 @@ } ] ], - "insert-image-div-before.window.js": [ - "19e8a397c348be1f91b654ab48a93e4f2badfd93", + "distant-leaf-text.window.js": [ + "341b5aaed74bbd9d4c4520317eb72d87257644d7", [ - "soft-navigation-heuristics/dom/tentative/insert-image-div-before.window.html", + "soft-navigation-heuristics/dom/tentative/distant-leaf-text.window.html", { "script_metadata": [ [ @@ -801816,7 +803135,7 @@ ] ], "image-lcp-followed-by-two-image-softnavs-lcp.tentative.html": [ - "66a9e5136f6fed4dfb425acf50c0e8ad0ef7fbd0", + "4a394649c523061a43724f632598abcef5b6e1bf", [ null, { @@ -801990,7 +803309,7 @@ "smoke": { "tentative": { "almost-soft-navigation.html": [ - "aa5732f9fb7e735d72c732a8299f5832db410ce0", + "c66495be7d6c4d02166c6d4d02a3e1acdd7ecc5d", [ null, { @@ -802008,7 +803327,16 @@ ] ], "dom.html": [ - "2e3c3809df68ba4093247e2d4e3fe114f8c9f729", + "e663b79081e0a963a591217754e91ae0d5577d2e", + [ + null, + { + "testdriver": true + } + ] + ], + "lcp-unbuffered.html": [ + "cf6dd768313d8209fe15fc1fd8be6855e29c0559", [ null, { @@ -802017,7 +803345,7 @@ ] ], "lcp.html": [ - "eb19c01494dcdb99c5bedb78b5242059563436f1", + "cc582c6cbc3b8ae4b8d484bf0561a64b5cb39bbc", [ null, { @@ -818584,7 +819912,7 @@ ] ], "script.https.html": [ - "57b4d3e35823adbef985b403516a8c76bfe0e980", + "6b4d6ae2f89fe0fe1f8ccedd208e89d5e92dec45", [ null, { @@ -824017,6 +825345,20 @@ {} ] ], + "script-enforcement-010.html": [ + "e89d31517f6ea6b8d219485022e0d3571223120e", + [ + null, + {} + ] + ], + "script-enforcement-011.html": [ + "1054502a399f62ddcfddbcdb9e25003b3ef1d80f", + [ + null, + {} + ] + ], "set-attributes-mutations-in-callback.tentative.html": [ "76ea84cf2543a11269983c871be09c8ec1fb18ea", [ @@ -864023,7 +865365,7 @@ ] ], "qdq_subgraph.https.any.js": [ - "a6155fb25ce36b2dbee504e87a20ece86713adbc", + "b578270223928f89dc19c0819018465e37628ad0", [ "webnn/conformance_tests/qdq_subgraph.https.any.html?cpu", { @@ -885975,7 +887317,7 @@ ] ], "RTCRtpReceiver-getParameters.html": [ - "14ec74b66a0329479c83d074e9b97b90347c9a46", + "a55f766d03778c2eb0627da872d5bd382c006cf2", [ null, {} @@ -886046,7 +887388,7 @@ ] ], "RTCRtpSender-getParameters.html": [ - "6c47153c8365aff1a0c93740635ef87c6b589b26", + "3b48ee60da69d41ab89067e5fbf34460adcf8fac", [ null, {} @@ -900447,7 +901789,7 @@ ] ], "write.any.js": [ - "43af7da614c675fcc0571d7edff3515a92774caf", + "7f859e125790cb91bf71d1d9e47f93fceac33797", [ "websockets/stream/tentative/write.any.html?default", { @@ -933295,23 +934637,71 @@ }, "external": { "bluetooth": { + "disable_simulation": { + "context.py": [ + "55aa4e5962583d00db8d3da2c14ab78dc805cd44", + [ + null, + {} + ] + ], + "disable_simulation.py": [ + "4cbcd7806b317d547944c9ab1d3f9fe209a0de69", + [ + null, + {} + ] + ] + }, "simulate_adapter": { "context.py": [ - "ef56a33219ce0e1e4524cf14c8116b9d65ac97cf", + "f176269bfbe711ed63d1d8d973a44f1500b12e45", [ null, {} ] ], "invalid.py": [ - "3175e196e81b9475efc6e3ce10425c692ade57cf", + "8fe2538873b8baf2de8dc03c8299787c195baf21", [ null, {} ] ], "state.py": [ - "ad21326081e077c6cff4484dd75ab65f2c4cb28c", + "e2558f4509a234c1e6f7700bde08777bfb70b1a0", + [ + null, + {} + ] + ] + }, + "simulate_gatt_connection_response": { + "invalid.py": [ + "0bff922e6dbcaa0a85b6566a5ae605ff5789c123", + [ + null, + {} + ] + ], + "simulate_gatt_connection_response.py": [ + "1c0139c75b8332ec6623733688cc4c30823302ca", + [ + null, + {} + ] + ] + }, + "simulate_gatt_disconnection": { + "invalid.py": [ + "40ff1f199cfd17d621c0f754f58eaab212c77962", + [ + null, + {} + ] + ], + "simulate_gatt_disconnection.py": [ + "426c84eb0a4d44975ca967ddae82d94ec5581500", [ null, {} @@ -933327,7 +934717,7 @@ ] ], "simulate_preconnected_peripheral.py": [ - "aaba084dd67e5684037fe48e0d00bf413e84c8d7", + "057f9fac07d98b58f632ce558c245bd54aa99b5b", [ null, {} diff --git a/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini index 34de05fc1cc..6aeeb907caf 100644 --- a/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini +++ b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini @@ -81,3 +81,6 @@ [corner-shape-render-fuzzy.html?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px] expected: FAIL + +[corner-shape-render-fuzzy.html?border-radius=50%&corner-shape=bevel&box-shadow=10px%2010px%200%2010px%20black] + expected: FAIL diff --git a/tests/wpt/meta/css/css-fonts/generic-family-keywords-001.html.ini b/tests/wpt/meta/css/css-fonts/generic-family-keywords-001.html.ini index 7267f59c275..cbda40931c3 100644 --- a/tests/wpt/meta/css/css-fonts/generic-family-keywords-001.html.ini +++ b/tests/wpt/meta/css/css-fonts/generic-family-keywords-001.html.ini @@ -37,3 +37,15 @@ [@font-face matching for quoted and unquoted math] expected: [FAIL, PASS] + + [@font-face matching for quoted and unquoted generic(fangsong)] + expected: FAIL + + [@font-face matching for quoted and unquoted generic(kai)] + expected: FAIL + + [@font-face matching for quoted and unquoted generic(khmer-mul)] + expected: FAIL + + [@font-face matching for quoted and unquoted generic(nastaliq)] + expected: FAIL diff --git a/tests/wpt/meta/css/css-fonts/generic-family-keywords-002.html.ini b/tests/wpt/meta/css/css-fonts/generic-family-keywords-002.html.ini new file mode 100644 index 00000000000..33242c2c360 --- /dev/null +++ b/tests/wpt/meta/css/css-fonts/generic-family-keywords-002.html.ini @@ -0,0 +1,12 @@ +[generic-family-keywords-002.html] + [font-family: -webkit-generic(fangsong) treated as , not ] + expected: FAIL + + [font-family: -webkit-generic(kai) treated as , not ] + expected: FAIL + + [font-family: -webkit-generic(khmer-mul) treated as , not ] + expected: FAIL + + [font-family: -webkit-generic(nastaliq) treated as , not ] + expected: FAIL diff --git a/tests/wpt/meta/css/css-gaps/grid/grid-gap-decorations-047.html.ini b/tests/wpt/meta/css/css-gaps/grid/grid-gap-decorations-047.html.ini new file mode 100644 index 00000000000..bd8fe233603 --- /dev/null +++ b/tests/wpt/meta/css/css-gaps/grid/grid-gap-decorations-047.html.ini @@ -0,0 +1,2 @@ +[grid-gap-decorations-047.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-grid/alignment/grid-content-alignment-with-abspos-001.html.ini b/tests/wpt/meta/css/css-grid/alignment/grid-content-alignment-with-abspos-001.html.ini deleted file mode 100644 index efff2a2620a..00000000000 --- a/tests/wpt/meta/css/css-grid/alignment/grid-content-alignment-with-abspos-001.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[grid-content-alignment-with-abspos-001.html] - [.grid 1] - expected: FAIL diff --git a/tests/wpt/meta/css/css-masonry/tentative/parsing/item-tolerance-computed.html.ini b/tests/wpt/meta/css/css-masonry/tentative/parsing/item-tolerance-computed.html.ini new file mode 100644 index 00000000000..68539b425a9 --- /dev/null +++ b/tests/wpt/meta/css/css-masonry/tentative/parsing/item-tolerance-computed.html.ini @@ -0,0 +1,18 @@ +[item-tolerance-computed.html] + [Property item-tolerance value 'normal'] + expected: FAIL + + [Property item-tolerance value '10px'] + expected: FAIL + + [Property item-tolerance value '20%'] + expected: FAIL + + [Property item-tolerance value 'calc(20% + 10px)'] + expected: FAIL + + [Property item-tolerance value 'calc(-0.5em + 10px)'] + expected: FAIL + + [Property item-tolerance value 'calc(0.5em + 10px)'] + expected: FAIL diff --git a/tests/wpt/meta/css/css-masonry/tentative/parsing/item-tolerance-valid.html.ini b/tests/wpt/meta/css/css-masonry/tentative/parsing/item-tolerance-valid.html.ini new file mode 100644 index 00000000000..892f7750e41 --- /dev/null +++ b/tests/wpt/meta/css/css-masonry/tentative/parsing/item-tolerance-valid.html.ini @@ -0,0 +1,18 @@ +[item-tolerance-valid.html] + [e.style['item-tolerance'\] = "normal" should set the property value] + expected: FAIL + + [e.style['item-tolerance'\] = "0" should set the property value] + expected: FAIL + + [e.style['item-tolerance'\] = "1px" should set the property value] + expected: FAIL + + [e.style['item-tolerance'\] = "calc(2em + 3ex)" should set the property value] + expected: FAIL + + [e.style['item-tolerance'\] = "4%" should set the property value] + expected: FAIL + + [e.style['item-tolerance'\] = "5vmin" should set the property value] + expected: FAIL diff --git a/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-slack-computed.html.ini b/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-slack-computed.html.ini deleted file mode 100644 index 38931f721ec..00000000000 --- a/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-slack-computed.html.ini +++ /dev/null @@ -1,36 +0,0 @@ -[masonry-slack-computed.html] - [Property masonry-slack value 'normal'] - expected: FAIL - - [Property masonry-slack value '10px'] - expected: FAIL - - [Property masonry-slack value '20%'] - expected: FAIL - - [Property masonry-slack value 'calc(20% + 10px)'] - expected: FAIL - - [Property masonry-slack value 'calc(-0.5em + 10px)'] - expected: FAIL - - [Property masonry-slack value 'calc(0.5em + 10px)'] - expected: FAIL - - [Property item-tolerance value 'normal'] - expected: FAIL - - [Property item-tolerance value '10px'] - expected: FAIL - - [Property item-tolerance value '20%'] - expected: FAIL - - [Property item-tolerance value 'calc(20% + 10px)'] - expected: FAIL - - [Property item-tolerance value 'calc(-0.5em + 10px)'] - expected: FAIL - - [Property item-tolerance value 'calc(0.5em + 10px)'] - expected: FAIL diff --git a/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-slack-valid.html.ini b/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-slack-valid.html.ini deleted file mode 100644 index 9487a73f212..00000000000 --- a/tests/wpt/meta/css/css-masonry/tentative/parsing/masonry-slack-valid.html.ini +++ /dev/null @@ -1,36 +0,0 @@ -[masonry-slack-valid.html] - [e.style['masonry-slack'\] = "normal" should set the property value] - expected: FAIL - - [e.style['masonry-slack'\] = "0" should set the property value] - expected: FAIL - - [e.style['masonry-slack'\] = "1px" should set the property value] - expected: FAIL - - [e.style['masonry-slack'\] = "calc(2em + 3ex)" should set the property value] - expected: FAIL - - [e.style['masonry-slack'\] = "4%" should set the property value] - expected: FAIL - - [e.style['masonry-slack'\] = "5vmin" should set the property value] - expected: FAIL - - [e.style['item-tolerance'\] = "normal" should set the property value] - expected: FAIL - - [e.style['item-tolerance'\] = "0" should set the property value] - expected: FAIL - - [e.style['item-tolerance'\] = "1px" should set the property value] - expected: FAIL - - [e.style['item-tolerance'\] = "calc(2em + 3ex)" should set the property value] - expected: FAIL - - [e.style['item-tolerance'\] = "4%" should set the property value] - expected: FAIL - - [e.style['item-tolerance'\] = "5vmin" should set the property value] - expected: FAIL diff --git a/tests/wpt/meta/css/css-mixins/at-function-parsing.html.ini b/tests/wpt/meta/css/css-mixins/at-function-parsing.html.ini index 439bfaf373b..e33ce04a9bf 100644 --- a/tests/wpt/meta/css/css-mixins/at-function-parsing.html.ini +++ b/tests/wpt/meta/css/css-mixins/at-function-parsing.html.ini @@ -142,3 +142,6 @@ [@function --foo(--x:1px, --y, --z:2px) is valid] expected: FAIL + + [@function --foo(--x type(*): 10px) is valid] + expected: FAIL diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-021.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-021.tentative.html.ini new file mode 100644 index 00000000000..82000c76c6e --- /dev/null +++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-021.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-021.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-floats-010.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-floats-010.tentative.html.ini new file mode 100644 index 00000000000..a47629e1f4c --- /dev/null +++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-floats-010.tentative.html.ini @@ -0,0 +1,2 @@ +[line-clamp-with-floats-010.tentative.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-overflow/margin-block-end-scroll-area-001.html.ini b/tests/wpt/meta/css/css-overflow/margin-block-end-scroll-area-001.html.ini new file mode 100644 index 00000000000..95f2fa562b4 --- /dev/null +++ b/tests/wpt/meta/css/css-overflow/margin-block-end-scroll-area-001.html.ini @@ -0,0 +1,2 @@ +[margin-block-end-scroll-area-001.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-position/sticky/position-sticky-left-002.html.ini b/tests/wpt/meta/css/css-position/sticky/position-sticky-left-002.html.ini deleted file mode 100644 index b599499e58a..00000000000 --- a/tests/wpt/meta/css/css-position/sticky/position-sticky-left-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[position-sticky-left-002.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-position/sticky/position-sticky-top-002.html.ini b/tests/wpt/meta/css/css-position/sticky/position-sticky-top-002.html.ini deleted file mode 100644 index b9bbb318328..00000000000 --- a/tests/wpt/meta/css/css-position/sticky/position-sticky-top-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[position-sticky-top-002.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-pseudo/first-line-child-display-none-dynamic.html.ini b/tests/wpt/meta/css/css-pseudo/first-line-child-display-none-dynamic.html.ini new file mode 100644 index 00000000000..066338b575a --- /dev/null +++ b/tests/wpt/meta/css/css-pseudo/first-line-child-display-none-dynamic.html.ini @@ -0,0 +1,2 @@ +[first-line-child-display-none-dynamic.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-pseudo/first-line-child-display-none.html.ini b/tests/wpt/meta/css/css-pseudo/first-line-child-display-none.html.ini new file mode 100644 index 00000000000..61f85c28aec --- /dev/null +++ b/tests/wpt/meta/css/css-pseudo/first-line-child-display-none.html.ini @@ -0,0 +1,2 @@ +[first-line-child-display-none.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini b/tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini new file mode 100644 index 00000000000..35256741d38 --- /dev/null +++ b/tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini @@ -0,0 +1,2 @@ +[dynamic-available-size-iframe.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/intrinsic-percent-non-replaced-001.html.ini b/tests/wpt/meta/css/css-sizing/intrinsic-percent-non-replaced-001.html.ini deleted file mode 100644 index 0806d5709ef..00000000000 --- a/tests/wpt/meta/css/css-sizing/intrinsic-percent-non-replaced-001.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[intrinsic-percent-non-replaced-001.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/intrinsic-percent-non-replaced-004.html.ini b/tests/wpt/meta/css/css-sizing/intrinsic-percent-non-replaced-004.html.ini deleted file mode 100644 index e9c61516b84..00000000000 --- a/tests/wpt/meta/css/css-sizing/intrinsic-percent-non-replaced-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[intrinsic-percent-non-replaced-004.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/keyword-sizes-on-replaced-element.html.ini b/tests/wpt/meta/css/css-sizing/keyword-sizes-on-replaced-element.html.ini new file mode 100644 index 00000000000..331df3de9be --- /dev/null +++ b/tests/wpt/meta/css/css-sizing/keyword-sizes-on-replaced-element.html.ini @@ -0,0 +1,24 @@ +[keyword-sizes-on-replaced-element.html] + [.test 68] + expected: FAIL + + [.test 69] + expected: FAIL + + [.test 71] + expected: FAIL + + [.test 75] + expected: FAIL + + [.test 77] + expected: FAIL + + [.test 78] + expected: FAIL + + [.test 80] + expected: FAIL + + [.test 84] + expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/stretch/cache-miss-001.html.ini b/tests/wpt/meta/css/css-sizing/stretch/cache-miss-001.html.ini new file mode 100644 index 00000000000..4b4572f4183 --- /dev/null +++ b/tests/wpt/meta/css/css-sizing/stretch/cache-miss-001.html.ini @@ -0,0 +1,2 @@ +[cache-miss-001.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/stretch/cache-miss-002.html.ini b/tests/wpt/meta/css/css-sizing/stretch/cache-miss-002.html.ini new file mode 100644 index 00000000000..adec20739eb --- /dev/null +++ b/tests/wpt/meta/css/css-sizing/stretch/cache-miss-002.html.ini @@ -0,0 +1,2 @@ +[cache-miss-002.html] + expected: FAIL diff --git a/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini b/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini deleted file mode 100644 index 55805c45ee2..00000000000 --- a/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[table-cell-overflow-auto-scrolled.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-values/calc-min-height-block-1.html.ini b/tests/wpt/meta/css/css-values/calc-min-height-block-1.html.ini deleted file mode 100644 index 91612d997a9..00000000000 --- a/tests/wpt/meta/css/css-values/calc-min-height-block-1.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[calc-min-height-block-1.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-values/calc-min-width-block-intrinsic-1.html.ini b/tests/wpt/meta/css/css-values/calc-min-width-block-intrinsic-1.html.ini deleted file mode 100644 index c0c74a33167..00000000000 --- a/tests/wpt/meta/css/css-values/calc-min-width-block-intrinsic-1.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[calc-min-width-block-intrinsic-1.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-values/getComputedStyle-calc-mixed-units-003.html.ini b/tests/wpt/meta/css/css-values/getComputedStyle-calc-mixed-units-003.html.ini index a1653531ac4..45e8b5dbe39 100644 --- a/tests/wpt/meta/css/css-values/getComputedStyle-calc-mixed-units-003.html.ini +++ b/tests/wpt/meta/css/css-values/getComputedStyle-calc-mixed-units-003.html.ini @@ -13,3 +13,6 @@ [testing width: calc(20% / 0.5em * 1px)] expected: FAIL + + [testing width: calc(52px * 1px / 10%)] + expected: FAIL diff --git a/tests/wpt/meta/css/css-values/if-conditionals.html.ini b/tests/wpt/meta/css/css-values/if-conditionals.html.ini index 25afac97880..fa3931fce40 100644 --- a/tests/wpt/meta/css/css-values/if-conditionals.html.ini +++ b/tests/wpt/meta/css/css-values/if-conditionals.html.ini @@ -565,3 +565,12 @@ [CSS Values and Units Test: CSS inline if() function 188] expected: FAIL + + [CSS Values and Units Test: CSS inline if() function 189] + expected: FAIL + + [CSS Values and Units Test: CSS inline if() function 190] + expected: FAIL + + [CSS Values and Units Test: CSS inline if() function 191] + expected: FAIL diff --git a/tests/wpt/meta/css/cssom-view/scrollIntoView-scrolling-container.html.ini b/tests/wpt/meta/css/cssom-view/scrollIntoView-scrolling-container.html.ini new file mode 100644 index 00000000000..06f44237739 --- /dev/null +++ b/tests/wpt/meta/css/cssom-view/scrollIntoView-scrolling-container.html.ini @@ -0,0 +1,3 @@ +[scrollIntoView-scrolling-container.html] + [scrollIntoView on a scrolling container should scroll its outer scrollers into view but not scroll itself.] + expected: FAIL diff --git a/tests/wpt/meta/css/cssom/font-family-serialization-001.html.ini b/tests/wpt/meta/css/cssom/font-family-serialization-001.html.ini new file mode 100644 index 00000000000..452b58a5b00 --- /dev/null +++ b/tests/wpt/meta/css/cssom/font-family-serialization-001.html.ini @@ -0,0 +1,6 @@ +[font-family-serialization-001.html] + [Serialization of ] + expected: FAIL + + [Serialization of prefixed -webkit-] + expected: FAIL diff --git a/tests/wpt/meta/fetch/compression-dictionary/dictionary-compressed.tentative.https.html.ini b/tests/wpt/meta/fetch/compression-dictionary/dictionary-compressed.tentative.https.html.ini new file mode 100644 index 00000000000..47c7a6cb4e3 --- /dev/null +++ b/tests/wpt/meta/fetch/compression-dictionary/dictionary-compressed.tentative.https.html.ini @@ -0,0 +1,15 @@ +[dictionary-compressed.tentative.https.html] + [Decompresion using gzip-encoded dictionary works as expected] + expected: FAIL + + [Decompresion using Brotli-encoded dictionary works as expected] + expected: FAIL + + [Decompresion using Zstandard-encoded dictionary works as expected] + expected: FAIL + + [A dcb dictionary-compressed dictionary can be used as a dictionary for future requests.] + expected: FAIL + + [A dcz dictionary-compressed dictionary can be used as a dictionary for future requests.] + expected: FAIL diff --git a/tests/wpt/meta/fetch/compression-dictionary/dictionary-fetch-no-cors.tentative.https.html.ini b/tests/wpt/meta/fetch/compression-dictionary/dictionary-fetch-no-cors.tentative.https.html.ini new file mode 100644 index 00000000000..160ecbce80e --- /dev/null +++ b/tests/wpt/meta/fetch/compression-dictionary/dictionary-fetch-no-cors.tentative.https.html.ini @@ -0,0 +1,3 @@ +[dictionary-fetch-no-cors.tentative.https.html] + [Fetch cross-origin no-cors request does not include Available-Dictionary header] + expected: FAIL diff --git a/tests/wpt/meta/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini b/tests/wpt/meta/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini index 27ecd816f20..67066ebce7f 100644 --- a/tests/wpt/meta/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini +++ b/tests/wpt/meta/fetch/compression-dictionary/dictionary-registration.tentative.https.html.ini @@ -7,3 +7,9 @@ [New dictionary registration overrides the existing one] expected: FAIL + + [Dictionary registration does not invalidate cache entry] + expected: FAIL + + [Expired dictionary is not used] + expected: FAIL diff --git a/tests/wpt/meta/focus/focus-sync-when-blur.html.ini b/tests/wpt/meta/focus/focus-sync-when-blur.html.ini new file mode 100644 index 00000000000..63fd9e2c8c2 --- /dev/null +++ b/tests/wpt/meta/focus/focus-sync-when-blur.html.ini @@ -0,0 +1,3 @@ +[focus-sync-when-blur.html] + [Element.focus() in blur listener when focus has moved away] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini deleted file mode 100644 index 3e07e6b7d1f..00000000000 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/empty-iframe-load-event.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[empty-iframe-load-event.html] - [Check execution order from nested timeout] - expected: FAIL - - [Check execution order on load handler] - expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index 277436ffad2..5f9a07f92f0 100644 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -1,3 +1,6 @@ [iframe-src-aboutblank-navigate-immediately.html] [Navigating to a different document with window.open] expected: FAIL + + [Navigating to a different document with form submission] + expected: FAIL diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/refresh/same-document-refresh.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/refresh/same-document-refresh.html.ini deleted file mode 100644 index d55bacae6b4..00000000000 --- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/refresh/same-document-refresh.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[same-document-refresh.html] - [Same-Document Referrer from Refresh] - expected: FAIL diff --git a/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini b/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini index 8b8af2b9c2e..2ef0896e3b3 100644 --- a/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini +++ b/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini @@ -1,3 +1,4 @@ [document-base-url-window-initiator-is-not-opener.https.window.html] + expected: TIMEOUT [window.open() gets base url from initiator not opener.] expected: [FAIL, PASS, TIMEOUT] diff --git a/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html.ini b/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html.ini index d30d032e7b5..865b8601bae 100644 --- a/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html.ini +++ b/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html.ini @@ -1,4 +1,3 @@ [update-the-rendering.html] - expected: TIMEOUT ["Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini index 26704422bbe..4b77e7d8e61 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini @@ -1,4 +1,4 @@ [iframe_sandbox_popups_escaping-2.html] expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini index 4034793cc72..c6f1e5d7d84 100644 --- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini +++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_nonescaping-2.html] + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: FAIL + expected: NOTRUN diff --git a/tests/wpt/meta/html/semantics/menu/tentative/button-invoke-menulist.html.ini b/tests/wpt/meta/html/semantics/menu/tentative/button-invoke-menulist.html.ini new file mode 100644 index 00000000000..cce07b2cb2c --- /dev/null +++ b/tests/wpt/meta/html/semantics/menu/tentative/button-invoke-menulist.html.ini @@ -0,0 +1,6 @@ +[button-invoke-menulist.html] + [Button with command=toggle-popover can invoke menulist popover.] + expected: FAIL + + [Button with command=toggle-menu can invoke menulist popover.] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/menu/tentative/checkable.html.ini b/tests/wpt/meta/html/semantics/menu/tentative/checkable.html.ini new file mode 100644 index 00000000000..3a09407b5a5 --- /dev/null +++ b/tests/wpt/meta/html/semantics/menu/tentative/checkable.html.ini @@ -0,0 +1,24 @@ +[checkable.html] + [menuitem is not checkable on its own] + expected: FAIL + + [menuitem in menubar is not checkable] + expected: FAIL + + [menuitem in menulist] + expected: FAIL + + [checkable menuitem exclusivity] + expected: FAIL + + [checkable multiple] + expected: FAIL + + [checkable menuitem exclusivity when disconnected] + expected: FAIL + + [when fieldset becomes uncheckable, so do its menuitems] + expected: FAIL + + [fieldset multiple => single; all but the first checked menuitem gets reset] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/menu/tentative/menu-elements-default-style.html.ini b/tests/wpt/meta/html/semantics/menu/tentative/menu-elements-default-style.html.ini new file mode 100644 index 00000000000..72f990c6f0b --- /dev/null +++ b/tests/wpt/meta/html/semantics/menu/tentative/menu-elements-default-style.html.ini @@ -0,0 +1,2 @@ +[menu-elements-default-style.html] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/menu/tentative/menubar-invoke-menulist.html.ini b/tests/wpt/meta/html/semantics/menu/tentative/menubar-invoke-menulist.html.ini new file mode 100644 index 00000000000..7d7cfffbfca --- /dev/null +++ b/tests/wpt/meta/html/semantics/menu/tentative/menubar-invoke-menulist.html.ini @@ -0,0 +1,9 @@ +[menubar-invoke-menulist.html] + [Menu elements are HTML elements.] + expected: FAIL + + [Menuitem with valid command/commandfor can invoke menulist popover.] + expected: FAIL + + [Checkable menuitems can still invoke menulist popovers] + expected: FAIL diff --git a/tests/wpt/meta/html/semantics/menu/tentative/menulist-popover-attribute.html.ini b/tests/wpt/meta/html/semantics/menu/tentative/menulist-popover-attribute.html.ini new file mode 100644 index 00000000000..d9df2db477d --- /dev/null +++ b/tests/wpt/meta/html/semantics/menu/tentative/menulist-popover-attribute.html.ini @@ -0,0 +1,3 @@ +[menulist-popover-attribute.html] + [menulist is a popover by default.] + expected: FAIL diff --git a/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini b/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini index 4c0e53577a5..97c76fe9560 100644 --- a/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini +++ b/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini @@ -7,3 +7,6 @@ [Reload navigationStart > Original navigationStart] expected: FAIL + + [Reload domInteractive > Original domInteractive] + expected: FAIL diff --git a/tests/wpt/meta/preload/preload-error.sub.html.ini b/tests/wpt/meta/preload/preload-error.sub.html.ini index a1e25cb7fcd..f0d465d0d34 100644 --- a/tests/wpt/meta/preload/preload-error.sub.html.ini +++ b/tests/wpt/meta/preload/preload-error.sub.html.ini @@ -62,9 +62,6 @@ [success (style): main] expected: FAIL - [404 (style): main] - expected: FAIL - [CORS (style): main] expected: FAIL diff --git a/tests/wpt/meta/subresource-integrity/integrity-policy/script.https.html.ini b/tests/wpt/meta/subresource-integrity/integrity-policy/script.https.html.ini index 3563393c660..60838485220 100644 --- a/tests/wpt/meta/subresource-integrity/integrity-policy/script.https.html.ini +++ b/tests/wpt/meta/subresource-integrity/integrity-policy/script.https.html.ini @@ -13,3 +13,24 @@ [Ensure that ReportingObserver gets called without endpoints] expected: FAIL + + [Ensure that a script with integrity runs] + expected: FAIL + + [Ensure that a data URI script with no integrity runs] + expected: FAIL + + [Ensure that a no-CORS data URI script with no integrity runs] + expected: FAIL + + [Ensure that a blob URL script with no integrity runs] + expected: FAIL + + [Ensure that a no-CORS blob URL script with no integrity runs] + expected: FAIL + + [Ensure that an about:blank URL script with no integrity does not trigger a report] + expected: FAIL + + [Ensure that a no-CORS about:blank URL script with no integrity does not trigger a report] + expected: FAIL diff --git a/tests/wpt/meta/trusted-types/script-enforcement-010.html.ini b/tests/wpt/meta/trusted-types/script-enforcement-010.html.ini new file mode 100644 index 00000000000..cdbdc47d13e --- /dev/null +++ b/tests/wpt/meta/trusted-types/script-enforcement-010.html.ini @@ -0,0 +1,6 @@ +[script-enforcement-010.html] + [Changing script's type from classic to module in the default policy works.] + expected: FAIL + + [Changing script's type from module to classic in the default policy works.] + expected: FAIL diff --git a/tests/wpt/meta/trusted-types/script-enforcement-011.html.ini b/tests/wpt/meta/trusted-types/script-enforcement-011.html.ini new file mode 100644 index 00000000000..81deb71ca20 --- /dev/null +++ b/tests/wpt/meta/trusted-types/script-enforcement-011.html.ini @@ -0,0 +1,6 @@ +[script-enforcement-011.html] + [Changing script's type from classic to module in the default policy works.] + expected: FAIL + + [Changing script's type from module to classic in the default policy works.] + expected: FAIL diff --git a/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini index 9cb03196441..71ca80fe23f 100644 --- a/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini +++ b/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini @@ -823,3 +823,12 @@ [X SNR (-105.9343049040375 dB) is not greater than or equal to 65.737. Got -105.9343049040375.] expected: FAIL + + [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14650\]\t2.9399906000000000e+7\t8.6956524848937988e-1\t2.9399905130434752e+7\t3.3809889690864086e+7\t3.8985999999999999e-3\n\t[14651\]\t3.0547976493835449e-1\t8.9879405498504639e-1\t5.9331429004669189e-1\t6.6012262403823208e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.9399905130434752e+7 at index of 14650.\n\tMax RelError of 3.3809889690864086e+7 at index of 14650.\n] + expected: FAIL + + [X SNR (-105.93283263603922 dB) is not greater than or equal to 65.737. Got -105.93283263603922.] + expected: FAIL + + [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14650\]\t3.7113974459152624e-22\t8.6956524848937988e-1\t8.6956524848937988e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[14651\]\t3.0547976493835449e-1\t8.9879405498504639e-1\t5.9331429004669189e-1\t6.6012262403823208e-1\t3.8985999999999999e-3\n\tMax AbsError of 8.6956524848937988e-1 at index of 14650.\n\tMax RelError of 1.0000000000000000e+0 at index of 14650.\n] + expected: FAIL diff --git a/tests/wpt/meta/websockets/stream/tentative/write.any.js.ini b/tests/wpt/meta/websockets/stream/tentative/write.any.js.ini index 491b41e2c47..84350f62006 100644 --- a/tests/wpt/meta/websockets/stream/tentative/write.any.js.ini +++ b/tests/wpt/meta/websockets/stream/tentative/write.any.js.ini @@ -20,6 +20,9 @@ [writing a view on a shared buffer should be rejected] expected: FAIL + [Garbage collecting a WebSocket stream doesn't crash while write promise is pending] + expected: FAIL + [write.any.sharedworker.html?wss] expected: ERROR @@ -40,6 +43,9 @@ [writing a view on a shared buffer should be rejected] expected: FAIL + [Garbage collecting a WebSocket stream doesn't crash while write promise is pending] + expected: FAIL + [write.any.worker.html?wss] [a write that was incomplete at close time should reject] @@ -57,6 +63,9 @@ [writing a view on a shared buffer should be rejected] expected: FAIL + [Garbage collecting a WebSocket stream doesn't crash while write promise is pending] + expected: FAIL + [write.any.serviceworker.html?wpt_flags=h2] expected: ERROR @@ -77,6 +86,9 @@ [writing a view on a shared buffer should be rejected] expected: FAIL + [Garbage collecting a WebSocket stream doesn't crash while write promise is pending] + expected: FAIL + [write.any.serviceworker.html?wss] expected: ERROR @@ -100,6 +112,9 @@ [writing a view on a shared buffer should be rejected] expected: FAIL + [Garbage collecting a WebSocket stream doesn't crash while write promise is pending] + expected: FAIL + [write.any.html?wss] [a write that was incomplete at close time should reject] @@ -116,3 +131,6 @@ [writing a view on a shared buffer should be rejected] expected: FAIL + + [Garbage collecting a WebSocket stream doesn't crash while write promise is pending] + expected: FAIL diff --git a/tests/wpt/tests/.azure-pipelines.yml b/tests/wpt/tests/.azure-pipelines.yml index 5e37bc4d3f4..480e89a5e27 100644 --- a/tests/wpt/tests/.azure-pipelines.yml +++ b/tests/wpt/tests/.azure-pipelines.yml @@ -27,44 +27,6 @@ variables: safaridriver_diagnose: false jobs: -# The affected tests jobs are unconditional for speed, as most PRs have one or -# more affected tests: https://github.com/web-platform-tests/wpt/issues/13936. -- job: affected_safari_preview - displayName: 'affected tests: Safari Technology Preview' - condition: eq(variables['Build.Reason'], 'PullRequest') - pool: - vmImage: 'macOS-14' - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.12' - - template: tools/ci/azure/affected_tests.yml - parameters: - artifactName: 'safari-preview-affected-tests' -- template: tools/ci/azure/fyi_hook.yml - parameters: - dependsOn: affected_safari_preview - artifactName: safari-preview-affected-tests - -- job: affected_without_changes_safari_preview - displayName: 'affected tests without changes: Safari Technology Preview' - condition: eq(variables['Build.Reason'], 'PullRequest') - pool: - vmImage: 'macOS-14' - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.13' - - template: tools/ci/azure/affected_tests.yml - parameters: - checkoutCommit: 'HEAD^1' - affectedRange: 'HEAD@{1}' - artifactName: 'safari-preview-affected-tests-without-changes' -- template: tools/ci/azure/fyi_hook.yml - parameters: - dependsOn: affected_without_changes_safari_preview - artifactName: safari-preview-affected-tests-without-changes - # The decision jobs runs `./wpt test-jobs` to determine which jobs to run, # and all following jobs wait for it to finish and depend on its output. - job: decision @@ -87,37 +49,6 @@ jobs: name: test_jobs displayName: 'Run ./wpt test-jobs' -- job: infrastructure_mac - displayName: 'infrastructure/ tests: macOS' - dependsOn: decision - condition: dependencies.decision.outputs['test_jobs.wptrunner_infrastructure'] - pool: - vmImage: 'macOS-14' - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.13' - - template: tools/ci/azure/checkout.yml - - template: tools/ci/azure/install_fonts.yml - - template: tools/ci/azure/install_certs.yml - - template: tools/ci/azure/color_profile.yml - - template: tools/ci/azure/install_safari.yml - - template: tools/ci/azure/update_hosts.yml - - template: tools/ci/azure/update_manifest.yml - - script: | - set -eux -o pipefail - export SYSTEM_VERSION_COMPAT=0 - ./wpt run --yes --no-manifest-update --manifest MANIFEST.json --metadata infrastructure/metadata/ --log-mach - --log-mach-level info --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_macos_safari.json --channel preview safari infrastructure/ - condition: succeededOrFailed() - displayName: 'Run tests (Safari Technology Preview)' - - task: PublishBuildArtifacts@1 - condition: succeededOrFailed() - displayName: 'Publish results' - inputs: - artifactName: 'infrastructure-results' - - template: tools/ci/azure/publish_logs.yml - - template: tools/ci/azure/sysdiagnose.yml - - job: tools_unittest_mac_py38 displayName: 'tools/ unittests: macOS + Python 3.8' dependsOn: decision diff --git a/tests/wpt/tests/.github/workflows/pull_request_test_jobs.yml b/tests/wpt/tests/.github/workflows/pull_request_test_jobs.yml index 4a4f623e84b..8597948a72d 100644 --- a/tests/wpt/tests/.github/workflows/pull_request_test_jobs.yml +++ b/tests/wpt/tests/.github/workflows/pull_request_test_jobs.yml @@ -1,4 +1,4 @@ -name: "test-jobs" +name: test-jobs on: pull_request: @@ -25,11 +25,12 @@ jobs: if: contains(fromJSON(needs.decision.outputs.test_jobs), 'affected_tests') uses: ./.github/workflows/safari-wptrunner.yml with: - artifact-name: "safari-preview-affected-tests" + artifact-name: safari-preview-affected-tests-with-changes + merged-artifact-name: safari-preview-affected-tests safari-technology-preview: true safaridriver-diagnose: false fetch-depth: 2 - extra-options: "--affected ${{ github.sha }}^1" + extra-options: --affected ${{ github.sha }}^1 affected_without_changes_safari_preview: name: "affected tests without changes: Safari Technology Preview" @@ -38,11 +39,12 @@ jobs: uses: ./.github/workflows/safari-wptrunner.yml with: artifact-name: safari-preview-affected-tests-without-changes + merged-artifact-name: safari-preview-affected-tests-without-changes safari-technology-preview: true safaridriver-diagnose: false fetch-depth: 2 - test-rev: "HEAD^1" - extra-options: "--affected ${{ github.sha }}" + test-rev: HEAD^1 + extra-options: --affected ${{ github.sha }} infrastructure_mac: name: "infrastructure/ tests: macOS" diff --git a/tests/wpt/tests/.github/workflows/safari-wptrunner.yml b/tests/wpt/tests/.github/workflows/safari-wptrunner.yml index d90414d5241..cff55aa213a 100644 --- a/tests/wpt/tests/.github/workflows/safari-wptrunner.yml +++ b/tests/wpt/tests/.github/workflows/safari-wptrunner.yml @@ -4,35 +4,39 @@ on: workflow_call: inputs: artifact-name: - description: "Prefix for the artifact uploaded" + description: Prefix for the artifact uploaded required: true type: string + merged-artifact-name: + description: Merge the uploaded artifacts into a singular artifact + required: false + type: string safari-technology-preview: - description: "Run Safari Technology Preview rather than the system Safari" + description: Run Safari Technology Preview rather than the system Safari required: true type: boolean safaridriver-diagnose: - description: "Run safaridriver capturing diagnostics" + description: Run safaridriver capturing diagnostics required: true type: boolean fetch-ref: - description: "The ref to fetch and initially checkout" + description: The ref to fetch and initially checkout required: false type: string fetch-depth: - description: "The fetch-depth to checkout" + description: The fetch-depth to checkout required: false type: number test-rev: - description: "The rev to checkout before running the tests" + description: The rev to checkout before running the tests required: false type: string - matrix-include: - description: "Extra items to include in the matrix, to override test-type/current-chunk/total-chunks" + matrix: + description: Test matrix, to override test-type/current-chunk/total-chunks required: false type: string extra-options: - description: "Extra options to pass to wpt run" + description: Extra options to pass to wpt run required: false type: string @@ -41,19 +45,17 @@ on: permissions: {} jobs: - safari-results: - name: ${{ matrix.current-chunk }} (of ${{ matrix.total-chunks }}) + results: + name: ${{ matrix.current-chunk || 1 }} (of ${{ matrix.total-chunks || 1 }}) + env: + CURRENT_CHUNK: ${{ matrix.current-chunk || 1 }} + TOTAL_CHUNKS: ${{ matrix.total-chunks || 1 }} runs-on: - self-hosted - webkit-ews timeout-minutes: 180 strategy: - matrix: - current-chunk: - - 1 - total-chunks: - - 1 - include: ${{ fromJSON(inputs.matrix-include || '[]') }} + matrix: "${{ fromJSON(inputs.matrix || '{\"pointless-matrix-item\": [0]}') }}" steps: - name: checkout uses: actions/checkout@v4.1.0 @@ -102,11 +104,11 @@ jobs: --no-restart-on-unexpected \ --no-fail-on-unexpected \ --no-pause \ - --this-chunk ${{ matrix.current-chunk }} \ - --total-chunks ${{ matrix.total-chunks }} \ + --this-chunk "$CURRENT_CHUNK" \ + --total-chunks "$TOTAL_CHUNKS" \ --chunk-type hash \ - --log-wptreport ${{ runner.temp }}/wpt_report_${{ matrix.current-chunk }}.json \ - --log-wptscreenshot ${{ runner.temp }}/wpt_screenshot_${{ matrix.current-chunk }}.txt \ + --log-wptreport ${{ runner.temp }}/wpt_report_"$CURRENT_CHUNK".json \ + --log-wptscreenshot ${{ runner.temp }}/wpt_screenshot_"$CURRENT_CHUNK".txt \ --log-mach - \ --log-mach-level info \ --channel ${{ inputs.safari-technology-preview && 'preview' || 'stable' }} \ @@ -118,16 +120,16 @@ jobs: - name: Publish results uses: actions/upload-artifact@v4.1.0 with: - name: ${{ inputs.artifact-name }}-${{ matrix.current-chunk }} + name: ${{ inputs.artifact-name }}-${{ env.CURRENT_CHUNK }} path: | ${{ runner.temp }}/wpt_report_*.json ${{ runner.temp }}/wpt_screenshot_*.txt - if-no-files-found: "error" + if-no-files-found: error - name: Publish safaridriver logs if: inputs.safaridriver-diagnose uses: actions/upload-artifact@v4.1.0 with: - name: ${{ inputs.artifact-name }}-safaridriver-logs-${{ matrix.current-chunk }} + name: ${{ inputs.artifact-name }}-safaridriver-logs-${{ env.CURRENT_CHUNK }} path: ~/Library/Logs/com.apple.WebDriver/ if-no-files-found: warn - name: Disable safaridriver diagnostics @@ -141,8 +143,30 @@ jobs: set -ux sudo sed -i '' '/^# Start web-platform-tests hosts$/,/^# End web-platform-tests hosts$/d' /etc/hosts - safari-notify: - needs: safari-results + notify-unmerged: + name: Notify (unmerged results) + needs: results + if: "! inputs.merged-artifact-name" uses: ./.github/workflows/wpt_fyi_notify.yml with: - artifact-name: "${{ inputs.artifact-name }}-*" + artifact-name: ${{ inputs.artifact-name }}-* + + merge-results: + name: Merge results artifacts + runs-on: ubuntu-24.04 + needs: results + if: inputs.merged-artifact-name + steps: + - name: Merge Artifacts + uses: actions/upload-artifact/merge@v4 + with: + name: ${{ inputs.merged-artifact-name }} + pattern: ${{ inputs.artifact-name }}-* + + notify-merged: + name: Notify (merged results) + needs: merge-results + if: inputs.merged-artifact-name + uses: ./.github/workflows/wpt_fyi_notify.yml + with: + artifact-name: ${{ inputs.merged-artifact-name }} diff --git a/tests/wpt/tests/.github/workflows/safari_stable.yml b/tests/wpt/tests/.github/workflows/safari_stable.yml index 4c2acce5c27..96cfef35de6 100644 --- a/tests/wpt/tests/.github/workflows/safari_stable.yml +++ b/tests/wpt/tests/.github/workflows/safari_stable.yml @@ -18,7 +18,7 @@ on: jobs: check-workflow-run: - name: "Check for appropriate epochs" + name: Check for appropriate epochs uses: ./.github/workflows/check-workflow-run.yml with: check-refs: '["refs/heads/epochs/daily"]' @@ -32,15 +32,7 @@ jobs: github.event_name != 'workflow_run' || fromJSON(needs.check-workflow-run.outputs.updated-refs)[0] != null uses: ./.github/workflows/safari-wptrunner.yml with: - artifact-name: "safari-results" + artifact-name: safari-results safari-technology-preview: false safaridriver-diagnose: false - matrix-include: >- - [{"current-chunk": 1, "total-chunks": 8}, - {"current-chunk": 2, "total-chunks": 8}, - {"current-chunk": 3, "total-chunks": 8}, - {"current-chunk": 4, "total-chunks": 8}, - {"current-chunk": 5, "total-chunks": 8}, - {"current-chunk": 6, "total-chunks": 8}, - {"current-chunk": 7, "total-chunks": 8}, - {"current-chunk": 8, "total-chunks": 8}] + matrix: '{"current-chunk": [1, 2, 3, 4, 5, 6, 7, 8], "total-chunks": [8]}' diff --git a/tests/wpt/tests/.github/workflows/safari_technology_preview.yml b/tests/wpt/tests/.github/workflows/safari_technology_preview.yml index e2f4c64f460..a56c1de00b2 100644 --- a/tests/wpt/tests/.github/workflows/safari_technology_preview.yml +++ b/tests/wpt/tests/.github/workflows/safari_technology_preview.yml @@ -18,7 +18,7 @@ on: jobs: check-workflow-run: - name: "Check for appropriate epochs" + name: Check for appropriate epochs uses: ./.github/workflows/check-workflow-run.yml with: check-refs: '["refs/heads/epochs/three_hourly"]' @@ -32,15 +32,7 @@ jobs: github.event_name != 'workflow_run' || fromJSON(needs.check-workflow-run.outputs.updated-refs)[0] != null uses: ./.github/workflows/safari-wptrunner.yml with: - artifact-name: "safari-technology-preview-results" + artifact-name: safari-technology-preview-results safari-technology-preview: true safaridriver-diagnose: false - matrix-include: >- - [{"current-chunk": 1, "total-chunks": 8}, - {"current-chunk": 2, "total-chunks": 8}, - {"current-chunk": 3, "total-chunks": 8}, - {"current-chunk": 4, "total-chunks": 8}, - {"current-chunk": 5, "total-chunks": 8}, - {"current-chunk": 6, "total-chunks": 8}, - {"current-chunk": 7, "total-chunks": 8}, - {"current-chunk": 8, "total-chunks": 8}] + matrix: '{"current-chunk": [1, 2, 3, 4, 5, 6, 7, 8], "total-chunks": [8]}' diff --git a/tests/wpt/tests/.github/workflows/wpt_fyi_notify.yml b/tests/wpt/tests/.github/workflows/wpt_fyi_notify.yml index 8e9a043f2c3..ab6560892dc 100644 --- a/tests/wpt/tests/.github/workflows/wpt_fyi_notify.yml +++ b/tests/wpt/tests/.github/workflows/wpt_fyi_notify.yml @@ -11,6 +11,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: "wpt.fyi" + if: ${{ !cancelled() }} uses: fjogeleit/http-request-action@v1 with: url: 'https://wpt.fyi/api/checks/github-actions/' @@ -26,6 +27,7 @@ jobs: ) }} - name: "staging.wpt.fyi" + if: ${{ !cancelled() }} uses: fjogeleit/http-request-action@v1 with: url: 'https://staging.wpt.fyi/api/checks/github-actions/' diff --git a/tests/wpt/tests/IndexedDB/idbindex_getAll-options.tentative.any.js b/tests/wpt/tests/IndexedDB/idbindex_getAll-options.tentative.any.js new file mode 100644 index 00000000000..908fcecbd1a --- /dev/null +++ b/tests/wpt/tests/IndexedDB/idbindex_getAll-options.tentative.any.js @@ -0,0 +1,120 @@ +// META: title=IndexedDB: Test IDBIndex.getAll with options dictionary. +// META: global=window,worker +// META: script=resources/nested-cloning-common.js +// META: script=resources/support.js +// META: script=resources/support-get-all.js +// META: script=resources/support-promises.js +// META: timeout=long + +'use_strict'; + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {query: 'C'}, 'Single item get'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'empty', /*options=*/ {}, 'Empty object store'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {}, 'Get all'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'generated', /*options=*/ {}, 'Get all with generated keys'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'large-values', /*options=*/ {}, + 'Get all with large values'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {count: 10}, 'maxCount=10'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.bound('G', 'M')}, 'Get bound range'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.bound('G', 'M'), count: 3}, + 'Get bound range with maxCount'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + query: + IDBKeyRange.bound('G', 'K', /*lowerOpen=*/ false, /*upperOpen=*/ true) + }, + 'Get upper excluded'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + query: + IDBKeyRange.bound('G', 'K', /*lowerOpen=*/ true, /*upperOpen=*/ false) + }, + 'Get lower excluded'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'generated', + /*options=*/ {query: IDBKeyRange.bound(4, 15), count: 3}, + 'Get bound range (generated) with maxCount'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {query: 'Doesn\'t exist'}, + 'Non existent key'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {count: 0}, 'maxCount=0'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {count: 4294967295}, + 'Max value count'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.upperBound('0')}, + 'Query with empty range where first key < upperBound'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.lowerBound('ZZ')}, + 'Query with empty range where lowerBound < last key'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line-not-unique', /*options=*/ {query: 'first'}, + 'Retrieve multiEntry key'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line-multi', /*options=*/ {query: 'vowel'}, + 'Retrieve one key multiple values'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'next'}, + 'Direction: next'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prev'}, + 'Direction: prev'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'nextunique'}, + 'Direction: nextunique'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prevunique'}, + 'Direction: prevunique'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + direction: 'prev', + query: IDBKeyRange.bound('b', 'x'), + }, + 'Direction and query'); + +index_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + direction: 'prev', + query: IDBKeyRange.bound('b', 'x'), + count: 4 + }, + 'Direction, query and count'); + +get_all_with_options_and_count_test( + 'getAll', /*storeName=*/ 'out-of-line', /*indexName=*/ 'test_idx', + 'Get all values with both options and count'); diff --git a/tests/wpt/tests/IndexedDB/idbindex_getAllKeys-options.tentative.any.js b/tests/wpt/tests/IndexedDB/idbindex_getAllKeys-options.tentative.any.js new file mode 100644 index 00000000000..f7f180e16ea --- /dev/null +++ b/tests/wpt/tests/IndexedDB/idbindex_getAllKeys-options.tentative.any.js @@ -0,0 +1,119 @@ +// META: title=IndexedDB: Test IDBIndex.getAllKeys with options dictionary. +// META: global=window,worker +// META: script=resources/nested-cloning-common.js +// META: script=resources/support.js +// META: script=resources/support-get-all.js +// META: script=resources/support-promises.js +// META: timeout=long + +'use_strict'; + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {query: 'C'}, 'Single item get'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'empty', /*options=*/ {}, 'Empty object store'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {}, 'Get all keys'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'generated', /*options=*/ {}, 'Get all generated keys'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {count: 10}, 'maxCount=10'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.bound('G', 'M')}, 'Get bound range'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.bound('G', 'M'), count: 3}, + 'Get bound range with maxCount'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ { + query: + IDBKeyRange.bound('G', 'K', /*lowerOpen=*/ false, /*upperOpen=*/ true) + }, + 'Get upper excluded'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ { + query: + IDBKeyRange.bound('G', 'K', /*lowerOpen=*/ true, /*upperOpen=*/ false) + }, + 'Get lower excluded'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'generated', + /*options=*/ {query: IDBKeyRange.bound(4, 15), count: 3}, + 'Get bound range (generated) with maxCount'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: 'Doesn\'t exist'}, 'Non existent key'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {count: 0}, 'maxCount=0'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: 4294967295}, 'Max value count'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.upperBound('0')}, + 'Query with empty range where first key < upperBound'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.lowerBound('ZZ')}, + 'Query with empty range where lowerBound < last key'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line-not-unique', /*options=*/ {query: 'first'}, + 'Retrieve multiEntry key'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line-multi', + /*options=*/ {query: 'vowel'}, 'Retrieve one key multiple values'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'next'}, + 'Direction: next'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prev'}, + 'Direction: prev'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'nextunique'}, + 'Direction: nextunique'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prevunique'}, + 'Direction: prevunique'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + direction: 'prev', + query: IDBKeyRange.bound('b', 'x'), + }, + 'Direction and query'); + +index_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + direction: 'prev', + query: IDBKeyRange.bound('b', 'x'), + count: 4 + }, + 'Direction, query and count'); + +get_all_with_options_and_count_test( + 'getAllKeys', /*storeName=*/ 'out-of-line', /*indexName=*/ 'test_idx', + 'Get all keys with both options and count'); diff --git a/tests/wpt/tests/IndexedDB/idbobjectstore_getAll-options.tentative.any.js b/tests/wpt/tests/IndexedDB/idbobjectstore_getAll-options.tentative.any.js new file mode 100644 index 00000000000..21ca6dd1a1f --- /dev/null +++ b/tests/wpt/tests/IndexedDB/idbobjectstore_getAll-options.tentative.any.js @@ -0,0 +1,115 @@ +// META: title=IndexedDB: Test IDBObjectStore.getAll with options dictionary. +// META: global=window,worker +// META: script=resources/nested-cloning-common.js +// META: script=resources/support.js +// META: script=resources/support-get-all.js +// META: script=resources/support-promises.js +// META: timeout=long + +'use strict'; + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {query: 'c'}, 'Single item get'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'generated', /*options=*/ {query: 3}, + 'Single item get (generated key)'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'empty', /*options=*/ {}, 'getAll on empty object store'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {}, 'Get all values'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'large-values', /*options=*/ {}, + 'Get all with large values'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {count: 10}, 'Test maxCount'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.bound('g', 'm')}, 'Get bound range'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.bound('g', 'm'), count: 3}, + 'Get bound range with maxCount'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ { + query: + IDBKeyRange.bound('g', 'k', /*lowerOpen=*/ false, /*upperOpen=*/ true) + }, + 'Get upper excluded'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ { + query: + IDBKeyRange.bound('g', 'k', /*lowerOpen=*/ true, /*upperOpen=*/ false) + }, + 'Get lower excluded'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'generated', + /*options=*/ {query: IDBKeyRange.bound(4, 15), count: 3}, + 'Get bound range (generated) with maxCount'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: 'Doesn\'t exist'}, 'Non existent key'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {count: 0}, 'zero maxCount'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {count: 4294967295}, + 'Max value count'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.upperBound('0')}, + 'Query with empty range where first key < upperBound'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.lowerBound('zz')}, + 'Query with empty range where lowerBound < last key'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'next'}, + 'Direction: next'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prev'}, + 'Direction: prev'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'nextunique'}, + 'Direction: nextunique'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prevunique'}, + 'Direction: prevunique'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + direction: 'prev', + query: IDBKeyRange.bound('b', 'x'), + }, + 'Direction and query'); + +object_store_get_all_values_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + direction: 'prev', + query: IDBKeyRange.bound('b', 'x'), + count: 4 + }, + 'Direction, query and count'); + +get_all_with_options_and_count_test( + 'getAll', /*storeName=*/ 'out-of-line', /*indexName=*/ undefined, + 'Get all values with both options and count'); diff --git a/tests/wpt/tests/IndexedDB/idbobjectstore_getAllKeys-options.tentative.any.js b/tests/wpt/tests/IndexedDB/idbobjectstore_getAllKeys-options.tentative.any.js new file mode 100644 index 00000000000..7b810efa598 --- /dev/null +++ b/tests/wpt/tests/IndexedDB/idbobjectstore_getAllKeys-options.tentative.any.js @@ -0,0 +1,111 @@ +// META: title=IndexedDB: Test IDBObjectStore.getAllKeys with options dictionary. +// META: global=window,worker +// META: script=resources/nested-cloning-common.js +// META: script=resources/support.js +// META: script=resources/support-get-all.js +// META: script=resources/support-promises.js +// META: timeout=long + +'use strict'; + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {query: 'c'}, 'Single item get'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'generated', /*options=*/ {query: 3}, + 'Single item get (generated key)'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'empty', /*options=*/ undefined, + 'getAllKeys on empty object store'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ undefined, 'Get all keys'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {count: 10}, 'Test maxCount'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.bound('g', 'm')}, 'Get bound range'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.bound('g', 'm'), count: 3}, + 'Get bound range with maxCount'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + query: + IDBKeyRange.bound('g', 'k', /*lowerOpen=*/ false, /*upperOpen=*/ true) + }, + 'Get upper excluded'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + query: + IDBKeyRange.bound('g', 'k', /*lowerOpen=*/ true, /*upperOpen=*/ false) + }, + 'Get lower excluded'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'generated', + /*options=*/ {query: IDBKeyRange.bound(4, 15), count: 3}, + 'Get bound range (generated) with maxCount'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: 'Doesn\'t exist'}, 'Non existent key'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {count: 0}, 'zero maxCount'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {count: 4294967295}, 'Max value count'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.upperBound('0')}, + 'Query with empty range where first key < upperBound'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', + /*options=*/ {query: IDBKeyRange.lowerBound('zz')}, + 'Query with empty range where lowerBound < last key'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'next'}, + 'Direction: next'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prev'}, + 'Direction: prev'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'nextunique'}, + 'Direction: nextunique'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ {direction: 'prevunique'}, + 'Direction: prevunique'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + direction: 'prev', + query: IDBKeyRange.bound('b', 'x'), + }, + 'Direction and query'); + +object_store_get_all_keys_with_options_test( + /*storeName=*/ 'out-of-line', /*options=*/ { + direction: 'prev', + query: IDBKeyRange.bound('b', 'x'), + count: 4 + }, + 'Direction, query and count'); + +get_all_with_options_and_count_test( + 'getAllKeys', /*storeName=*/ 'out-of-line', /*indexName=*/ undefined, + 'Get all keys with both options and count'); diff --git a/tests/wpt/tests/IndexedDB/key-conversion-exceptions.any.js b/tests/wpt/tests/IndexedDB/key-conversion-exceptions.any.js index 08b99946c01..ba0da849fe9 100644 --- a/tests/wpt/tests/IndexedDB/key-conversion-exceptions.any.js +++ b/tests/wpt/tests/IndexedDB/key-conversion-exceptions.any.js @@ -65,6 +65,29 @@ function check_method(receiver, method, args) { } } +// Verifies that invalid keys throw when used with the `IDBGetAllOptions` +// dictionary. `getAllRecords()` added `IDBGetAllOptions`, which `getAll()` and +// `getAllKeys()` also support. +function check_method_with_get_all_options(receiver, method) { + assert_throws_dom('DataError', () => { + receiver[method]({query: invalid_key}); + }, 'options query key conversion with invalid key should throw DataError'); + + const [key, err] = throwing_key('getter'); + assert_throws_exactly(err, () => { + receiver[method]({query: key}); + }, 'options query key conversion with throwing getter should rethrow'); + + // Verify `getAll()` and `getAllKeys()` throw when given an invalid key range + // directly without the options dictionary. `getAllRecords()` only supports + // the options dictionary. + if (method !== 'getAllRecords') { + assert_throws_exactly(err, () => { + receiver[method](key); + }, 'query key conversion with throwing getter should rethrow'); + } +} + // Static key comparison utility on IDBFactory. test( t => check_method(indexedDB, 'cmp', 2), @@ -176,8 +199,6 @@ test( ['delete', 'get', 'getKey', - 'getAll', - 'getAllKeys', 'count', 'openCursor', 'openKeyCursor', @@ -192,8 +213,6 @@ test( // Generic (key-or-key-path) methods on IDBIndex. ['get', 'getKey', - 'getAll', - 'getAllKeys', 'count', 'openCursor', 'openKeyCursor', @@ -205,3 +224,33 @@ test( check_method(index, method); }, `IDBIndex ${method}() method with throwing/invalid keys`); }); + +// Verify methods that take `IDBGetAllOptions` on `IDBObjectStore`. +['getAll', + 'getAllKeys', + 'getAllRecords', +].forEach(method => { + indexeddb_upgrade_only_test((t, db) => { + const store = db.createObjectStore('store'); + if ('getAllRecords' in store) { + check_method_with_get_all_options(store, method); + } else if (method !== 'getAllRecords') { + // This browser does not support `getAllRecords()` or the + // `IDBGetAllOptions` dictionary. + check_method(store, method); + } + }, `IDBObjectStore ${method}() method with throwing/invalid keys`); +}); + +// Verify methods that take `IDBGetAllOptions` on `IDBIndex`. +['getAll', 'getAllKeys', 'getAllRecords'].forEach(method => { + indexeddb_upgrade_only_test((t, db) => { + const store = db.createObjectStore('store'); + const index = store.createIndex('index', 'keyPath'); + if ('getAllRecords' in index) { + check_method_with_get_all_options(index, method); + } else if (method !== 'getAllRecords') { + check_method(store, method); + } + }, `IDBIndex ${method}() method with throwing/invalid keys`); +}); diff --git a/tests/wpt/tests/IndexedDB/resources/support-get-all.js b/tests/wpt/tests/IndexedDB/resources/support-get-all.js index 3b70b828b13..57cc59e462b 100644 --- a/tests/wpt/tests/IndexedDB/resources/support-get-all.js +++ b/tests/wpt/tests/IndexedDB/resources/support-get-all.js @@ -197,15 +197,19 @@ function index_get_all_test_setup(storeName, callback, testDescription) { // Test `getAll()`, `getAllKeys()` or `getAllRecords()` on either `storeName` or // `optionalIndexName` with the given `options`. +// // - `getAllFunctionName` is name of the function to test, which must be // `getAll`, `getAllKeys` or `getAllRecords`. -// - `options` is an `IDBGetAllRecordsOptions ` dictionary that may contain a -// `query`, `direction` and `count`. Use `direction` to test -// `getAllRecords()` only. `getAll()` and `getAllKeys()` do not support -// `direction`. +// +// - `options` is an `IDBGetAllOptions` dictionary that may contain a `query`, +// `direction` and `count`. +// +// - `shouldUseDictionaryArgument` is true when testing the get all function +// overloads that takes an `IDBGetAllOptions` dictionary. False tests the +// overloads that take two optional arguments: `query` and `count`. function get_all_test( getAllFunctionName, storeName, optionalIndexName, options, - testDescription) { + shouldUseDictionaryArgument, testDescription) { const testGetAllCallback = (test, connection, expectedRecords) => { // Create a transaction and a get all request. const transaction = connection.transaction(storeName, 'readonly'); @@ -213,8 +217,8 @@ function get_all_test( if (optionalIndexName) { queryTarget = queryTarget.index(optionalIndexName); } - const request = - createGetAllRequest(getAllFunctionName, queryTarget, options); + const request = createGetAllRequest( + getAllFunctionName, queryTarget, options, shouldUseDictionaryArgument); request.onerror = test.unreached_func('The get all request must succeed'); // Verify the results after the get all request completes. @@ -238,51 +242,86 @@ function get_all_test( function object_store_get_all_keys_test(storeName, options, testDescription) { get_all_test( 'getAllKeys', storeName, /*indexName=*/ undefined, options, - testDescription); + /*shouldUseDictionaryArgument=*/ false, testDescription); } function object_store_get_all_values_test(storeName, options, testDescription) { get_all_test( - 'getAll', storeName, /*indexName=*/ undefined, options, testDescription); + 'getAll', storeName, /*indexName=*/ undefined, options, + /*shouldUseDictionaryArgument=*/ false, testDescription); +} + +function object_store_get_all_values_with_options_test( + storeName, options, testDescription) { + get_all_test( + 'getAll', storeName, /*indexName=*/ undefined, options, + /*shouldUseDictionaryArgument=*/ true, testDescription); +} + +function object_store_get_all_keys_with_options_test( + storeName, options, testDescription) { + get_all_test( + 'getAllKeys', storeName, /*indexName=*/ undefined, options, + /*shouldUseDictionaryArgument=*/ true, testDescription); } function object_store_get_all_records_test( storeName, options, testDescription) { get_all_test( 'getAllRecords', storeName, /*indexName=*/ undefined, options, - testDescription); + /*shouldUseDictionaryArgument=*/ true, testDescription); } function index_get_all_keys_test(storeName, options, testDescription) { - get_all_test('getAllKeys', storeName, 'test_idx', options, testDescription); + get_all_test( + 'getAllKeys', storeName, 'test_idx', options, + /*shouldUseDictionaryArgument=*/ false, testDescription); +} + +function index_get_all_keys_with_options_test( + storeName, options, testDescription) { + get_all_test( + 'getAllKeys', storeName, 'test_idx', options, + /*shouldUseDictionaryArgument=*/ true, testDescription); } function index_get_all_values_test(storeName, options, testDescription) { - get_all_test('getAll', storeName, 'test_idx', options, testDescription); + get_all_test( + 'getAll', storeName, 'test_idx', options, + /*shouldUseDictionaryArgument=*/ false, testDescription); +} + +function index_get_all_values_with_options_test( + storeName, options, testDescription) { + get_all_test( + 'getAll', storeName, 'test_idx', options, + /*shouldUseDictionaryArgument=*/ true, testDescription); } function index_get_all_records_test(storeName, options, testDescription) { get_all_test( - 'getAllRecords', storeName, 'test_idx', options, testDescription); + 'getAllRecords', storeName, 'test_idx', options, + /*shouldUseDictionaryArgument=*/ true, testDescription); } -function createGetAllRequest(getAllFunctionName, queryTarget, options) { - switch (getAllFunctionName) { - case 'getAll': - case 'getAllKeys': - // `getAll()` and `getAllKeys()` use optional arguments. Omit the - // optional arguments when undefined. - if (options && options.count) { - return queryTarget[getAllFunctionName](options.query, options.count); - } - if (options && options.query) { - return queryTarget[getAllFunctionName](options.query); - } - return queryTarget[getAllFunctionName](); - case 'getAllRecords': - return queryTarget.getAllRecords(options); +function createGetAllRequest( + getAllFunctionName, queryTarget, options, shouldUseDictionaryArgument) { + if (options && shouldUseDictionaryArgument) { + assert_true( + 'getAllRecords' in queryTarget, + `"${queryTarget}" must support "getAllRecords()" to use an "IDBGetAllOptions" dictionary with "${ + getAllFunctionName}".`); + return queryTarget[getAllFunctionName](options); } - assert_unreached(`Unknown getAllFunctionName: "${getAllFunctionName}"`); + // `getAll()` and `getAllKeys()` use optional arguments. Omit the + // optional arguments when undefined. + if (options && options.count) { + return queryTarget[getAllFunctionName](options.query, options.count); + } + if (options && options.query) { + return queryTarget[getAllFunctionName](options.query); + } + return queryTarget[getAllFunctionName](); } // Returns the expected results when `getAllFunctionName` is called with @@ -486,3 +525,37 @@ function assert_idb_values_equals(actual_values, expected_values) { assert_idb_value_equals(actual_values[i], expected_values[i]); } } + +// Test passing both an options dictionary and a count to `getAll()` and +// `getAllKeys()`. The get all request must ignore the `count` argument, using +// count from the options dictionary instead. +function get_all_with_options_and_count_test( + getAllFunctionName, storeName, optionalIndexName, testDescription) { + // Set up the object store or index to query. + const setupFunction = optionalIndexName ? index_get_all_test_setup : + object_store_get_all_test_setup; + + setupFunction(storeName, (test, connection, expectedRecords) => { + const transaction = connection.transaction(storeName, 'readonly'); + let queryTarget = transaction.objectStore(storeName); + if (optionalIndexName) { + queryTarget = queryTarget.index(optionalIndexName); + } + + const options = {count: 10}; + const request = queryTarget[getAllFunctionName](options, /*count=*/ 17); + + request.onerror = + test.unreached_func(`"${getAllFunctionName}()" request must succeed.`); + + request.onsuccess = test.step_func(event => { + const expectedResults = calculateExpectedGetAllResults( + getAllFunctionName, expectedRecords, options); + + const actualResults = event.target.result; + verifyGetAllResults(getAllFunctionName, actualResults, expectedResults); + + test.done(); + }); + }, testDescription); +} diff --git a/tests/wpt/tests/ai/rewriter/rewriter-create-user-activation.tentative.https.window.js b/tests/wpt/tests/ai/rewriter/rewriter-create-user-activation.tentative.https.window.js new file mode 100644 index 00000000000..119b0aaa7a2 --- /dev/null +++ b/tests/wpt/tests/ai/rewriter/rewriter-create-user-activation.tentative.https.window.js @@ -0,0 +1,22 @@ +// META: title=Rewriter Create User Activation +// META: script=/resources/testdriver.js +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +// Model download state is shared between test cases of the same file when run +// with `EchoAIManagerImpl`, so this test case needs to be on its own file. +promise_test(async t => { + // Creating Rewriter without user activation rejects with NotAllowedError. + await promise_rejects_dom(t, 'NotAllowedError', Rewriter.create()); + + // Creating Rewriter with user activation succeeds. + await createRewriter(); + + // Expect available after create. + assert_equals(await Rewriter.availability(), 'available'); + + // Now that it is available, we should no longer need user activation. + await Rewriter.create(); +}, 'Rewriter.create() requires user activation when availability is "downloadable"'); diff --git a/tests/wpt/tests/ai/rewriter/rewriter-create.tentative.https.window.js b/tests/wpt/tests/ai/rewriter/rewriter-create.tentative.https.window.js index 4494f591226..dc7d0a7b2f5 100644 --- a/tests/wpt/tests/ai/rewriter/rewriter-create.tentative.https.window.js +++ b/tests/wpt/tests/ai/rewriter/rewriter-create.tentative.https.window.js @@ -10,15 +10,5 @@ promise_test(async () => { }, 'Rewriter must be defined.'); promise_test(async t => { - // Creating Rewriter without user activation rejects with NotAllowedError. - await promise_rejects_dom(t, 'NotAllowedError', Rewriter.create()); - - // Creating Rewriter with user activation succeeds. - await createRewriter(); - - // Expect available after create. - assert_equals(await Rewriter.availability(), 'available'); - - // Now that it is available, we should no longer need user activation. - await Rewriter.create(); -}, 'Rewriter.create() requires user activation when availability is "downloadable"'); + await testCreateMonitorCallbackThrowsError(t, createRewriter); +}, 'If monitor throws an error, Rewriter.create() rejects with that error'); diff --git a/tests/wpt/tests/ai/rewriter/rewriter-rewrite-streaming.tentative.https.window.js b/tests/wpt/tests/ai/rewriter/rewriter-rewrite-streaming.tentative.https.window.js index 81b73fbdabd..d275ba514db 100644 --- a/tests/wpt/tests/ai/rewriter/rewriter-rewrite-streaming.tentative.https.window.js +++ b/tests/wpt/tests/ai/rewriter/rewriter-rewrite-streaming.tentative.https.window.js @@ -44,3 +44,17 @@ promise_test(async () => { rewriter.rewriteStreaming(kTestPrompt) ]); }, 'Multiple Rewriter.rewriteStreaming() calls are resolved successfully'); + +promise_test(async () => { + const rewriter = await createRewriter(); + const streamingResponse = rewriter.rewriteStreaming(kTestPrompt); + gc(); + assert_equals(Object.prototype.toString.call(streamingResponse), + '[object ReadableStream]'); + let result = ''; + for await (const value of streamingResponse) { + result += value; + gc(); + } +assert_greater_than(result.length, 0, 'The result should not be empty.'); +}, 'Rewrite Streaming API must continue even after GC has been performed.'); diff --git a/tests/wpt/tests/ai/summarizer/summarizer-create-user-activation.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-create-user-activation.tentative.https.window.js new file mode 100644 index 00000000000..3d968293295 --- /dev/null +++ b/tests/wpt/tests/ai/summarizer/summarizer-create-user-activation.tentative.https.window.js @@ -0,0 +1,22 @@ +// META: title=Summarizer Create User Activation +// META: script=/resources/testdriver.js +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +// Model download state is shared between test cases of the same file when run +// with `EchoAIManagerImpl`, so this test case needs to be on its own file. +promise_test(async t => { + // Creating Summarizer without user activation rejects with NotAllowedError. + await promise_rejects_dom(t, 'NotAllowedError', Summarizer.create()); + + // Creating Summarizer with user activation succeeds. + await createSummarizer(); + + // Expect available after create. + assert_equals(await Summarizer.availability(), 'available'); + + // Now that it is available, we should no longer need user activation. + await Summarizer.create(); +}, 'Summarizer.create() requires user activation when availability is "downloadable"'); diff --git a/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js index ff5d42b100f..7811d44f8ed 100644 --- a/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js +++ b/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js @@ -11,15 +11,5 @@ promise_test(async () => { }, 'Summarizer.create() is defined'); promise_test(async t => { - // Creating Summarizer without user activation rejects with NotAllowedError. - await promise_rejects_dom(t, 'NotAllowedError', Summarizer.create()); - - // Creating Summarizer with user activation succeeds. - await createSummarizer(); - - // Expect available after create. - assert_equals(await Summarizer.availability(), 'available'); - - // Now that it is available, we should no longer need user activation. - await Summarizer.create(); -}, 'Summarizer.create() requires user activation when availability is "downloadable"'); + await testCreateMonitorCallbackThrowsError(t, createSummarizer); +}, 'If monitor throws an error, Summarizer.create() rejects with that error'); \ No newline at end of file diff --git a/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js b/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js index 8d85dc7b836..09a8fb0d97e 100644 --- a/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js +++ b/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js @@ -43,3 +43,17 @@ promise_test(async () => { summarizer.summarizeStreaming(kTestPrompt) ]); }, 'Multiple Summarizer.summarizeStreaming() calls are resolved successfully'); + +promise_test(async t => { + const summarizer = await createSummarizer(); + const streamingResponse = summarizer.summarizeStreaming(kTestPrompt); + gc(); + assert_equals(Object.prototype.toString.call(streamingResponse), + '[object ReadableStream]'); + let result = ''; + for await (const value of streamingResponse) { + result += value; + gc(); + } +assert_greater_than(result.length, 0, 'The result should not be empty.'); +}, 'Summarize Streaming API must continue even after GC has been performed.'); diff --git a/tests/wpt/tests/ai/translator/translator.optional.https.window.js b/tests/wpt/tests/ai/translator/translator.optional.https.window.js index ce01efed143..94be911afb5 100644 --- a/tests/wpt/tests/ai/translator/translator.optional.https.window.js +++ b/tests/wpt/tests/ai/translator/translator.optional.https.window.js @@ -49,6 +49,21 @@ promise_test(async () => { assert_equals(await translator.translate('hello'), 'こんにちは'); }, 'Simple Translator.translateStreaming() call'); +promise_test(async () => { + const translator = + await createTranslator({sourceLanguage: 'en', targetLanguage: 'ja'}); + const streamingResponse = translator.translateStreaming('hello'); + gc(); + assert_equals(Object.prototype.toString.call(streamingResponse), + '[object ReadableStream]'); + let result = ''; + for await (const value of streamingResponse) { + result += value; + gc(); + } +assert_greater_than(result.length, 0, 'The result should not be empty.'); +}, 'Translate Streaming API must continue even after GC has been performed.'); + promise_test(async t => { const translator = await createTranslator({sourceLanguage: 'en', targetLanguage: 'ja'}); diff --git a/tests/wpt/tests/ai/writer/writer-create-user-activation.tentative.https.window.js b/tests/wpt/tests/ai/writer/writer-create-user-activation.tentative.https.window.js new file mode 100644 index 00000000000..734a2a507f4 --- /dev/null +++ b/tests/wpt/tests/ai/writer/writer-create-user-activation.tentative.https.window.js @@ -0,0 +1,22 @@ +// META: title=Writer Create User Activation +// META: script=/resources/testdriver.js +// META: script=../resources/util.js +// META: timeout=long + +'use strict'; + +// Model download state is shared between test cases of the same file when run +// with `EchoAIManagerImpl`, so this test case needs to be on its own file. +promise_test(async t => { + // Creating Writer without user activation rejects with NotAllowedError. + await promise_rejects_dom(t, 'NotAllowedError', Writer.create()); + + // Creating Writer with user activation succeeds. + await createWriter(); + + // Expect available after create. + assert_equals(await Writer.availability(), 'available'); + + // Now that it is available, we should no longer need user activation. + await Writer.create(); +}, 'Writer.create() requires user activation when availability is "downloadable"'); diff --git a/tests/wpt/tests/ai/writer/writer-create.tentative.https.window.js b/tests/wpt/tests/ai/writer/writer-create.tentative.https.window.js index 2f328c8d7cc..18444a4a953 100644 --- a/tests/wpt/tests/ai/writer/writer-create.tentative.https.window.js +++ b/tests/wpt/tests/ai/writer/writer-create.tentative.https.window.js @@ -10,15 +10,5 @@ promise_test(async () => { }, 'Writer must be defined.'); promise_test(async t => { - // Creating Writer without user activation rejects with NotAllowedError. - await promise_rejects_dom(t, 'NotAllowedError', Writer.create()); - - // Creating Writer with user activation succeeds. - await createWriter(); - - // Expect available after create. - assert_equals(await Writer.availability(), 'available'); - - // Now that it is available, we should no longer need user activation. - await Writer.create(); -}, 'Writer.create() requires user activation when availability is "downloadable"'); + await testCreateMonitorCallbackThrowsError(t, createWriter); +}, 'If monitor throws an error, Writer.create() rejects with that error'); diff --git a/tests/wpt/tests/ai/writer/writer-write-streaming.tentative.https.window.js b/tests/wpt/tests/ai/writer/writer-write-streaming.tentative.https.window.js index 52992ad2139..67286a7ede9 100644 --- a/tests/wpt/tests/ai/writer/writer-write-streaming.tentative.https.window.js +++ b/tests/wpt/tests/ai/writer/writer-write-streaming.tentative.https.window.js @@ -43,3 +43,17 @@ promise_test(async () => { writer.writeStreaming(kTestPrompt) ]); }, 'Multiple Writer.writeStreaming() calls are resolved successfully'); + +promise_test(async () => { + const writer = await createWriter(); + const streamingResponse = writer.writeStreaming(kTestPrompt); + gc(); + assert_equals(Object.prototype.toString.call(streamingResponse), + '[object ReadableStream]'); + let result = ''; + for await (const value of streamingResponse) { + result += value; + gc(); + } +assert_greater_than(result.length, 0, 'The result should not be empty.'); +}, 'Write Streaming API must continue even after GC has been performed.'); diff --git a/tests/wpt/tests/clear-site-data/clear-cache-bfcache-partitioning.tentative.https.html b/tests/wpt/tests/clear-site-data/clear-cache-bfcache-partitioning.tentative.https.html new file mode 100644 index 00000000000..02a2f020cbc --- /dev/null +++ b/tests/wpt/tests/clear-site-data/clear-cache-bfcache-partitioning.tentative.https.html @@ -0,0 +1,61 @@ + + + +Clear-Site-Data: cache for bfcache + + + + + + + + + diff --git a/tests/wpt/tests/clear-site-data/clear-cache-bfcache.https.html b/tests/wpt/tests/clear-site-data/clear-cache-bfcache.https.html new file mode 100644 index 00000000000..b9967c541f1 --- /dev/null +++ b/tests/wpt/tests/clear-site-data/clear-cache-bfcache.https.html @@ -0,0 +1,63 @@ + + + +Clear-Site-Data: cache for bfcache + + + + + + + + + diff --git a/tests/wpt/tests/clear-site-data/clear-cache-bfcache.sub.https.html b/tests/wpt/tests/clear-site-data/clear-cache-bfcache.sub.https.html deleted file mode 100644 index 61d810f453b..00000000000 --- a/tests/wpt/tests/clear-site-data/clear-cache-bfcache.sub.https.html +++ /dev/null @@ -1,115 +0,0 @@ - - - -Clear-Site-Data: cache for bfcache - - - - - - - - - diff --git a/tests/wpt/tests/clear-site-data/support/clear-cache-helper.sub.js b/tests/wpt/tests/clear-site-data/support/clear-cache-helper.sub.js index 5db0caf834c..1e9f2c2c33a 100644 --- a/tests/wpt/tests/clear-site-data/support/clear-cache-helper.sub.js +++ b/tests/wpt/tests/clear-site-data/support/clear-cache-helper.sub.js @@ -3,6 +3,15 @@ "use strict" +const sameOrigin = + 'https://{{host}}:{{ports[https][0]}}'; +const subdomainOrigin = + 'https://{{hosts[][www2]}}:{{ports[https][0]}}'; +const crossSiteOrigin = + 'https://{{hosts[alt][]}}:{{ports[https][0]}}'; +const subomdainCrossSiteOrigin = + 'https://{{hosts[alt][www2]}}:{{ports[https][0]}}'; + /** * Constructs a url for an intermediate "bounce" hop which represents a tracker. * @param {string} cacheHelper - Unique uuid for this test @@ -130,3 +139,49 @@ function testCacheClear(test, params, assert) { openTestPageHelper(test, null, testUrls, 0, assert, resolve) }); } + +// The tests are built on top of the back-forward-cache test harness. +// Here is the steps for the tests: +// 1. Open a new window and navigate to a test URL. +// 2. Navigate the window to a second page. +// 3. Trigger the clear-site-data header either by window.open() or loading an +// iframe from the second page. +// 4. Navigate back to the first page. +// 5. Assert that the first page is or is not cached. + +function runBfCacheClearTest(params, description) { + runBfcacheTest( + { + targetOrigin: sameOrigin, + scripts: ["/clear-site-data/support/clear-cache-helper.sub.js"], + funcBeforeBackNavigation: async (getUrlParams, mode) => { + + const cacheHelper = self.crypto.randomUUID(); + const testUrl = getUrl(cacheHelper, getUrlParams); + + let clearingPromise; + if (mode === "window") { + clearingPromise = new Promise(resolve => { + window.addEventListener("message", resolve, {once: true}); + window.open(testUrl); + }); + } else if (mode === "iframe") { + clearingPromise = new Promise(resolve => { + const iframe = document.createElement("iframe"); + iframe.src = testUrl; + document.body.appendChild(iframe); + iframe.onload = resolve; + }); + } else { + throw new Error("Unsupported mode"); + } + + await clearingPromise; + }, + argsBeforeBackNavigation: [params.getUrlParams, params.mode], + ...params, + }, + description + ); +} + diff --git a/tests/wpt/tests/contenteditable/WEB_FEATURES.yml b/tests/wpt/tests/contenteditable/WEB_FEATURES.yml new file mode 100644 index 00000000000..426cd2fe316 --- /dev/null +++ b/tests/wpt/tests/contenteditable/WEB_FEATURES.yml @@ -0,0 +1,4 @@ +features: +- name: contenteditable-plaintextonly + files: + - plaintext-only.html diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html b/tests/wpt/tests/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html new file mode 100644 index 00000000000..443093eb796 --- /dev/null +++ b/tests/wpt/tests/css/css-anchor-position/anchor-function-pseudo-element-implicit-anchor.html @@ -0,0 +1,53 @@ + +Implicit anchor element for pseudo-elements using anchor functions + + + + +
+ diff --git a/tests/wpt/tests/css/css-anchor-position/anchored-child-transition-with-selection.html b/tests/wpt/tests/css/css-anchor-position/anchored-child-transition-with-selection.html new file mode 100644 index 00000000000..d18cb07993f --- /dev/null +++ b/tests/wpt/tests/css/css-anchor-position/anchored-child-transition-with-selection.html @@ -0,0 +1,30 @@ + +CSS Anchor Positioning Test: Transition on anchored element child with ::selection + + + + +
+
FAIL
+
+ diff --git a/tests/wpt/tests/css/css-anchor-position/popover-implicit-anchor.html b/tests/wpt/tests/css/css-anchor-position/popover-implicit-anchor.html index b6bba4534c0..ca0ef30359f 100644 --- a/tests/wpt/tests/css/css-anchor-position/popover-implicit-anchor.html +++ b/tests/wpt/tests/css/css-anchor-position/popover-implicit-anchor.html @@ -34,7 +34,7 @@ promise_test(async (t) => { await clickOn(button); assert_true(popover.matches(':popover-open')); // Popover should be anchored to the button. - assert_equals(popover.offsetLeft + popover.offsetWidth, 100); - assert_equals(popover.offsetTop + popover.offsetHeight, 100); + assert_equals(popover.offsetLeft + popover.offsetWidth, button.offsetLeft); + assert_equals(popover.offsetTop + popover.offsetHeight, button.offsetTop); }, 'Popover invokers form an implicit anchor reference'); diff --git a/tests/wpt/tests/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html b/tests/wpt/tests/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html new file mode 100644 index 00000000000..3b876cbd8af --- /dev/null +++ b/tests/wpt/tests/css/css-anchor-position/position-area-pseudo-element-implicit-anchor.html @@ -0,0 +1,51 @@ + +Implicit anchor element for pseudo-elements using anchor functions + + + + +
+ diff --git a/tests/wpt/tests/css/css-anchor-position/position-try-transition-basic.html b/tests/wpt/tests/css/css-anchor-position/position-try-transition-basic.html index eb4222090bd..f1b16576346 100644 --- a/tests/wpt/tests/css/css-anchor-position/position-try-transition-basic.html +++ b/tests/wpt/tests/css/css-anchor-position/position-try-transition-basic.html @@ -36,6 +36,8 @@ function cleanup() { target.className = ''; cb.className = ''; + // Clean up running transition + target.getAnimations().forEach(a => a.cancel()); } test((t) => { diff --git a/tests/wpt/tests/css/css-anchor-position/position-try-transition-flip.html b/tests/wpt/tests/css/css-anchor-position/position-try-transition-flip.html index e8e692a7295..24c9af2bcba 100644 --- a/tests/wpt/tests/css/css-anchor-position/position-try-transition-flip.html +++ b/tests/wpt/tests/css/css-anchor-position/position-try-transition-flip.html @@ -46,6 +46,8 @@ function cleanup() { target.className = ''; cb.className = ''; + // Clean up running transition + target.getAnimations().forEach(a => a.cancel()); } test((t) => { diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html index 2d4b56f831b..53301d8e782 100644 --- a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html +++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html @@ -23,6 +23,7 @@ + +

This is a very long string like the one the fuzzer used

+ + diff --git a/tests/wpt/tests/css/css-gaps/agnostic/gap-decorations-010-crash.html b/tests/wpt/tests/css/css-gaps/agnostic/gap-decorations-010-crash.html new file mode 100644 index 00000000000..ef134d1274f --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/agnostic/gap-decorations-010-crash.html @@ -0,0 +1,49 @@ + + + Make sure we don't crash while attempting to animate. + + + + + + +
+
+
+
+ + + + diff --git a/tests/wpt/tests/css/css-gaps/flex/flex-gap-decorations-026-crash.html b/tests/wpt/tests/css/css-gaps/flex/flex-gap-decorations-026-crash.html new file mode 100644 index 00000000000..82dcc4c76c5 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/flex/flex-gap-decorations-026-crash.html @@ -0,0 +1,13 @@ + + + CSS Gap Decorations: Empty flex container should not crash. + + + + +
diff --git a/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-047.html b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-047.html new file mode 100644 index 00000000000..5064d08eab3 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-047.html @@ -0,0 +1,58 @@ + + + + + CSS Gap Decorations: Gap decorations are painted on dynamic grid change. + + + + + + + +

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

+
+
+
+
+
+
+ + + diff --git a/tests/wpt/tests/css/css-grid/anonymous-grid-items-002-ref.html b/tests/wpt/tests/css/css-grid/anonymous-grid-items-002-ref.html new file mode 100644 index 00000000000..0a14a1f9c55 --- /dev/null +++ b/tests/wpt/tests/css/css-grid/anonymous-grid-items-002-ref.html @@ -0,0 +1,6 @@ + +

Test passes if there are two lines below:

+
+
+ line one line two +
diff --git a/tests/wpt/tests/css/css-grid/anonymous-grid-items-002.html b/tests/wpt/tests/css/css-grid/anonymous-grid-items-002.html new file mode 100644 index 00000000000..5463b7254c3 --- /dev/null +++ b/tests/wpt/tests/css/css-grid/anonymous-grid-items-002.html @@ -0,0 +1,12 @@ + + + +

Test passes if there are two lines below:

+
+
+ line one line two +
+ diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-001.html index 387ee9da5eb..73609582fdb 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-001.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-001.html @@ -20,6 +20,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,20px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-002.html b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-002.html index be7e7a813eb..b53c930edc9 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-002.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-002.html @@ -19,6 +19,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,20px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-003.html b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-003.html index 818d7e2d84b..6edb208709c 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-003.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-003.html @@ -20,6 +20,8 @@ html,body { grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,auto); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-004.html b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-004.html index 747420ba465..c56c1131c5d 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-004.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-align-content-004.html @@ -19,6 +19,8 @@ html,body { grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,20px); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-001.html index 36ecd4f3b30..8140d55beaf 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-001.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-001.html @@ -19,6 +19,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,20px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-002.html b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-002.html index fc3696282c1..d6e593b805d 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-002.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-002.html @@ -19,6 +19,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,20px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-003.html b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-003.html index e2e6ead819a..03604ef0dc6 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-003.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-003.html @@ -19,6 +19,8 @@ html,body { grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,20px); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-004.html b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-004.html index e309ef88708..1f04a5a22d3 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-004.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/alignment/masonry-justify-content-004.html @@ -19,6 +19,8 @@ html,body { grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,20px); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-content-baseline-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-content-baseline-001.html index 60d11653b3f..dc031798844 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-content-baseline-001.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-content-baseline-001.html @@ -18,6 +18,7 @@ html,body { .grid { float: left; display: grid; + display: masonry; grid: masonry / repeat(4, auto); border: 2px solid; padding: 1px; @@ -25,6 +26,7 @@ html,body { } .c { grid: repeat(4, auto) / masonry; + masonry-direction: row; } span { diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-001.html index bb486d983d9..b363d8ebc19 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-001.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-001.html @@ -18,6 +18,7 @@ body { width:600px; height:600px; border:1px solid; box-sizing:border-box; } .grid { float: left; display: grid; + display: masonry; grid: masonry / repeat(4, auto); place-items: start; padding-block-start: 1px; @@ -26,6 +27,7 @@ body { width:600px; height:600px; border:1px solid; box-sizing:border-box; } } .c { grid: repeat(4, auto) / masonry; + masonry-direction: row; } span { diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-002a.html b/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-002a.html index 4ece8d754d3..ee57fa387b5 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-002a.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-002a.html @@ -18,6 +18,7 @@ body { width:600px; height:600px; border:1px solid; box-sizing:border-box; } .grid { float: left; display: grid; + display: masonry; grid: masonry / repeat(4, auto); place-items: start; padding-block-start: 1px; @@ -26,7 +27,10 @@ body { width:600px; height:600px; border:1px solid; box-sizing:border-box; } height: 100px; width: 100px; } -.c { grid: repeat(4, auto) / masonry; } +.c { + grid: repeat(4, auto) / masonry; + masonry-direction: row; +} .ae { align-content: end; } .je { justify-content: end; } diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-002b.html b/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-002b.html index cc0eaaa9cc2..ebdda343005 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-002b.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/baseline/masonry-grid-item-self-baseline-002b.html @@ -18,6 +18,7 @@ body { width:600px; height:600px; border:1px solid; box-sizing:border-box; } .grid { float: left; display: grid; + display: masonry; grid: masonry / repeat(4, auto); place-items: start; padding-block-start: 1px; @@ -26,7 +27,10 @@ body { width:600px; height:600px; border:1px solid; box-sizing:border-box; } height: 100px; width: 100px; } -.c { grid: repeat(4, auto) / masonry; } +.c { + grid: repeat(4, auto) / masonry; + masonry-direction: row; +} .ae { align-content: end; } .je { justify-content: end; } diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-001.html index 24a5b290610..ed035e4a2a7 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-001.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-001.html @@ -32,6 +32,7 @@ wrapper { } .grid { display: grid; + display: masonry; grid-template-columns: 10px 15px 20px; grid-template-rows: masonry; border: 1px solid; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-002.html b/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-002.html index 76a0540fa92..02c7f34ccfc 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-002.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-002.html @@ -32,6 +32,7 @@ wrapper { } .grid { display: grid; + display: masonry; grid-template-columns: 10px 15px 20px; grid-template-rows: masonry; border: 1px solid; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-003.html b/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-003.html index 7252fc169e2..8bfaec32771 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-003.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/fragmentation/masonry-fragmentation-003.html @@ -29,6 +29,8 @@ wrapper { .grid { display: grid; + display: masonry; + masonry-direction: row; grid: 20px auto 30px / masonry; border: solid; border-width: 3px 1px 7px 5px; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/gap/masonry-gap-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/gap/masonry-gap-001.html index 628c00135d8..e527ae3ef82 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/gap/masonry-gap-001.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/gap/masonry-gap-001.html @@ -16,6 +16,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 10px 20px; grid-template-columns: repeat(4,auto); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/gap/masonry-gap-002.html b/tests/wpt/tests/css/css-grid/masonry/tentative/gap/masonry-gap-002.html index 2c87c4eeda7..aac7101ef9a 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/gap/masonry-gap-002.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/gap/masonry-gap-002.html @@ -23,6 +23,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; grid-template-columns: repeat(4,auto); grid-template-rows: masonry; color: #444; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/grid-placement/masonry-grid-placement-named-lines-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/grid-placement/masonry-grid-placement-named-lines-001.html index 8bb78e307d3..6c24618e3f5 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/grid-placement/masonry-grid-placement-named-lines-001.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/grid-placement/masonry-grid-placement-named-lines-001.html @@ -15,6 +15,7 @@ body,html { color:black; background:white; font-size:15px/1 monospace; padding:0 .grid { display: grid; + display: masonry; position: relative; border: 1px solid; grid-template-columns: [A-start] 60px 60px 60px; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/grid-placement/masonry-grid-placement-named-lines-002.html b/tests/wpt/tests/css/css-grid/masonry/tentative/grid-placement/masonry-grid-placement-named-lines-002.html index 4e51f09f94d..13b5777b2fb 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/grid-placement/masonry-grid-placement-named-lines-002.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/grid-placement/masonry-grid-placement-named-lines-002.html @@ -15,6 +15,7 @@ body,html { color:black; background:white; font:15px/1 monospace; padding:0; mar .grid { display: grid; + display: masonry; position: relative; border: 1px solid; grid-template-columns: [A-start] 60px 60px 60px; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-auto.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-auto.html index 6ea41862232..50a986b1fa8 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-auto.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-auto.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,auto); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-fr.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-fr.html index 314ce6d6fc1..5da4059e139 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-fr.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-fr.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: 1fr 2fr 1fr 1fr; grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix1.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix1.html index 048b0d2165b..4fc437e1050 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix1.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix1.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: 1fr 2fr min-content max-content; grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix2.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix2.html index e2db2700b2e..f4ccd1fc769 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix2.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix2.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; /* keep fixed values small enough for spanners to have an effect */ grid-template-columns: 1.1ch auto 1.4ch 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-auto.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-auto.html index 8c88f2fd4a2..d2b0984a9f4 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-auto.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-auto.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,auto); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-fr.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-fr.html index 80e25cbc8ab..edf5bd1cf6b 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-fr.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-fr.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: 1fr 2fr 1fr 1fr; grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix1.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix1.html index 584041cebf8..1342367dbc4 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix1.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix1.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: 1fr 2fr min-content max-content; grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix2.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix2.html index a726bf192ab..e275999acaf 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix2.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix2.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; /* keep fixed values small enough for spanners to have an effect */ grid-template-columns: 1.1ch auto 1.4ch 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-auto.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-auto.html index 2b781d1db2d..4e270382b7b 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-auto.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-auto.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,auto); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-fr.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-fr.html index 830a22a4ec8..e6009008c51 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-fr.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-fr.html @@ -14,6 +14,7 @@ @import "support/masonry-intrinsic-sizing-visual.css"; grid { + display: inline-grid; display: inline-grid; gap: 1px 2px; grid-template-columns: 1fr 2fr 1fr 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix1.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix1.html index 15876a47430..e2802b82833 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix1.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix1.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: 1fr 2fr min-content max-content; grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix2.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix2.html index 053b7a2ebde..aeccea1c1dd 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix2.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix2.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; /* keep fixed values small enough for spanners to have an effect */ grid-template-columns: 1.1ch auto 1.4ch 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-auto.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-auto.html index a92c3d774f6..71dd2f5357b 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-auto.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-auto.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,auto); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-fr.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-fr.html index db8f9c0ec1c..30c066a412b 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-fr.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-fr.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: 1fr 2fr 1fr 1fr; grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix1.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix1.html index 9a399db534e..a2cdb2ca7ea 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix1.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix1.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: 1fr 2fr min-content max-content; grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix2.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix2.html index a63d43c051c..9784824c36c 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix2.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix2.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; /* keep fixed values small enough for spanners to have an effect */ grid-template-columns: 1.1ch auto 1.4ch 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-005.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-005.html index a4edd6151f6..5d15869b120 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-005.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-005.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,auto); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-006.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-006.html index e980d84b8e9..e28ad246129 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-006.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-006.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-rows: masonry; border: 1px solid; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-007.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-007.html index e00273f6ed8..2f6550a102d 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-007.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-007.html @@ -15,6 +15,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-rows: masonry; border: 1px solid; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-auto.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-auto.html index e38cf2bec84..505e040306b 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-auto.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-auto.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,auto); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-fr.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-fr.html index 9ca29ead013..d9fc78532e2 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-fr.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-fr.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: 1fr 2fr 1fr 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix1.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix1.html index e8bdf154537..9b6bae39a69 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix1.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix1.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: 1fr 2fr min-content max-content; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix2.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix2.html index dd557f6d76f..3276adec58e 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix2.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix2.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; /* keep fixed values small enough for spanners to have an effect */ diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-auto.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-auto.html index d6f3346f844..f2031e38baa 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-auto.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-auto.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,auto); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-fr.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-fr.html index e0c501828ed..d37fd70841a 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-fr.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-fr.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: 1fr 2fr 1fr 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix1.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix1.html index d60a77f70b6..6b126ed1e9e 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix1.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix1.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: 1fr 2fr min-content max-content; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix2.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix2.html index c31a079286b..557c9a2edf3 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix2.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix2.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; /* keep fixed values small enough for spanners to have an effect */ diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-auto.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-auto.html index a643ee11653..eaf5efb6d4b 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-auto.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-auto.html @@ -16,6 +16,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,auto); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-fr.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-fr.html index f1999a8e2c6..6eb528ab1a7 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-fr.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-fr.html @@ -16,6 +16,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: 1fr 2fr 1fr 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix1.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix1.html index 3103ba4147e..2161777ccc7 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix1.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix1.html @@ -16,6 +16,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: 1fr 2fr min-content max-content; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix2.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix2.html index 57632888706..3a742fb8831 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix2.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix2.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; /* keep fixed values small enough for spanners to have an effect */ diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-auto.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-auto.html index 51fa2ed51d6..4caf2493e5e 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-auto.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-auto.html @@ -16,6 +16,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,auto); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-fr.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-fr.html index 779b30cf60e..ce993120161 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-fr.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-fr.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: 1fr 2fr 1fr 1fr; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix1.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix1.html index 68a8b93e935..80d8b78c9b0 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix1.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix1.html @@ -16,6 +16,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: 1fr 2fr min-content max-content; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix2.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix2.html index 75b7f879798..20e5881684a 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix2.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix2.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; /* keep fixed values small enough for spanners to have an effect */ diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-005.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-005.html index 13d54a4388b..54a9515069a 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-005.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-005.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,auto); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-006.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-006.html index 0639e395eae..8c1b3925a6a 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-006.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-006.html @@ -15,6 +15,8 @@ grid { display: inline-grid; + display: inline-masonry; + masonry-direction: row; gap: 1px 2px; grid-template-columns: masonry; grid-template-rows: repeat(4,auto); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-007.html b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-007.html index 95a8e93467c..6df944bce5b 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-007.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-007.html @@ -15,6 +15,8 @@ grid { display: grid; + display: masonry; + masonry-direction: row; gap: 1rem 1rem; grid-template-columns: masonry; grid-template-rows: repeat(4,100px); diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-001.html b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-001.html index 2438df8bac8..20cd4e8c8c5 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-001.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-001.html @@ -16,6 +16,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 10px 20px; grid-template-columns: repeat(4,80px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-002.html b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-002.html index 8833cdfcfc5..9d00a1302c5 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-002.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-002.html @@ -16,6 +16,7 @@ grid { display: inline-grid; + disaply: inline-masonry; gap: 10px 20px; grid-auto-columns: 80px; grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-003.html b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-003.html index bde2fa0e664..a5ba0c7331c 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-003.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-003.html @@ -16,6 +16,7 @@ grid { display: inline-grid; + display: inline-masonry; gap: 10px 20px; grid-auto-flow: dense; grid-auto-columns: 80px; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-004.html b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-004.html index 92741f4b115..04b4c08dc04 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-004.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-004.html @@ -16,6 +16,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,20px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-005.html b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-005.html index f879ddce562..a571f359098 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-005.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-005.html @@ -16,6 +16,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,20px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-006.html b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-006.html index 0f963762af5..35e5b476892 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-006.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-006.html @@ -16,6 +16,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,20px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-007.html b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-007.html index ebbed114a11..bd596ac8906 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-007.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-007.html @@ -16,6 +16,7 @@ html,body { grid { display: inline-grid; + display: inline-masonry; gap: 1px 2px; grid-template-columns: repeat(4,20px); grid-template-rows: masonry; diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-008.html b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-008.html index bdf651d77b4..648563ef99c 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-008.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-008.html @@ -11,6 +11,7 @@ diff --git a/tests/wpt/tests/css/css-grid/masonry/tentative/masonry-grid-template-columns-computed-withcontent.html b/tests/wpt/tests/css/css-grid/masonry/tentative/masonry-grid-template-columns-computed-withcontent.html index 0ee2ee78c06..da13a8fd44e 100644 --- a/tests/wpt/tests/css/css-grid/masonry/tentative/masonry-grid-template-columns-computed-withcontent.html +++ b/tests/wpt/tests/css/css-grid/masonry/tentative/masonry-grid-template-columns-computed-withcontent.html @@ -11,6 +11,7 @@ +
+
1
+
2
+
3
+
+ diff --git a/tests/wpt/tests/css/css-pseudo/first-line-child-display-none-dynamic.html b/tests/wpt/tests/css/css-pseudo/first-line-child-display-none-dynamic.html new file mode 100644 index 00000000000..35fdf0a5c5c --- /dev/null +++ b/tests/wpt/tests/css/css-pseudo/first-line-child-display-none-dynamic.html @@ -0,0 +1,18 @@ + + + + +

The text below should be green.

+
+
+
+ Here's a line of text. +
+
+ diff --git a/tests/wpt/tests/css/css-pseudo/first-line-child-display-none-ref.html b/tests/wpt/tests/css/css-pseudo/first-line-child-display-none-ref.html new file mode 100644 index 00000000000..6808b87159a --- /dev/null +++ b/tests/wpt/tests/css/css-pseudo/first-line-child-display-none-ref.html @@ -0,0 +1,8 @@ + + +

The text below should be green.

+
+ Here's a line of text. +
diff --git a/tests/wpt/tests/css/css-pseudo/first-line-child-display-none.html b/tests/wpt/tests/css/css-pseudo/first-line-child-display-none.html new file mode 100644 index 00000000000..3ec50d5b01a --- /dev/null +++ b/tests/wpt/tests/css/css-pseudo/first-line-child-display-none.html @@ -0,0 +1,15 @@ + + + + +

The text below should be green.

+
+
+
+ Here's a line of text. +
+
diff --git a/tests/wpt/tests/css/css-scroll-snap/scroll-snap-root-002-ref.html b/tests/wpt/tests/css/css-scroll-snap/scroll-snap-root-002-ref.html index 663b02b8c42..8edbbfd8acd 100644 --- a/tests/wpt/tests/css/css-scroll-snap/scroll-snap-root-002-ref.html +++ b/tests/wpt/tests/css/css-scroll-snap/scroll-snap-root-002-ref.html @@ -10,6 +10,7 @@ html, body { margin: 0; padding: 0; } position: absolute; bottom: 0; width: 100%; + height: 20px; /* Avoid subpixel sizes depending on fonts */ } diff --git a/tests/wpt/tests/css/css-scroll-snap/scroll-snap-root-002.html b/tests/wpt/tests/css/css-scroll-snap/scroll-snap-root-002.html index 302c7563413..7a2106c05c2 100644 --- a/tests/wpt/tests/css/css-scroll-snap/scroll-snap-root-002.html +++ b/tests/wpt/tests/css/css-scroll-snap/scroll-snap-root-002.html @@ -30,6 +30,7 @@ body { margin: 120vh 0; scroll-snap-align: end; border-bottom: solid orange thick; + height: 20px; /* Avoid subpixel sizes depending on fonts */ } diff --git a/tests/wpt/tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-009.html b/tests/wpt/tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-009.html index 0aa62eaaeff..23e14a7597e 100644 --- a/tests/wpt/tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-009.html +++ b/tests/wpt/tests/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-009.html @@ -31,7 +31,7 @@ select { - + @@ -40,9 +40,9 @@ data-expected-client-width="55"> - - + + + diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_download_helper.js b/tests/wpt/tests/html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_download_helper.js index 7090e7662ca..92d0e8b4605 100644 --- a/tests/wpt/tests/html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_download_helper.js +++ b/tests/wpt/tests/html/semantics/embedded-content/the-iframe-element/support/iframe_sandbox_download_helper.js @@ -1,5 +1,5 @@ function StreamDownloadFinishDelay() { - return 1000; + return 2000; } function DownloadVerifyDelay() { diff --git a/tests/wpt/tests/html/semantics/forms/the-input-element/input-valueasdate-typeerror.html b/tests/wpt/tests/html/semantics/forms/the-input-element/input-valueasdate-typeerror.html new file mode 100644 index 00000000000..6fa57d51ee6 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-input-element/input-valueasdate-typeerror.html @@ -0,0 +1,35 @@ + + + + Forms + + + + +

input_valueAsDate_TypeError

+
+
+ + + + + + + + + diff --git a/tests/wpt/tests/html/semantics/forms/the-input-element/input-valueasnumber-typeerror.html b/tests/wpt/tests/html/semantics/forms/the-input-element/input-valueasnumber-typeerror.html new file mode 100644 index 00000000000..78b37bad4a3 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-input-element/input-valueasnumber-typeerror.html @@ -0,0 +1,37 @@ + + + + Forms + + + + +

input_valueAsNumber_TypeError

+
+
+ + + + + + + + diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/select-in-page-typeahead.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/select-in-page-typeahead.tentative.html new file mode 100644 index 00000000000..c31087ec5c2 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/select-in-page-typeahead.tentative.html @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance-ref.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance-ref.html new file mode 100644 index 00000000000..233ddbcc205 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance-ref.html @@ -0,0 +1,15 @@ + + + +
+ 2 selected +
+
+
one
+
two
+
three
+
+ + diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance.tentative.html new file mode 100644 index 00000000000..7034850071d --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-appearance.tentative.html @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-keyboard-behavior.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-keyboard-behavior.tentative.html new file mode 100644 index 00000000000..e73abb299f0 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-keyboard-behavior.tentative.html @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-mouse-behavior.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-mouse-behavior.tentative.html new file mode 100644 index 00000000000..6942d0e7982 --- /dev/null +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-multiple-popup/select-multiple-popup-mouse-behavior.tentative.html @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/WEB_FEATURES.yml b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/WEB_FEATURES.yml index bf15e99b65b..449caa2da3e 100644 --- a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/WEB_FEATURES.yml +++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/WEB_FEATURES.yml @@ -5,3 +5,7 @@ features: files: - "dialog-cancel-events.html" - "dialog-canceling.html" +- name: requestclose + files: + - dialog-requestclose.html + - dialog-requestclose-* diff --git a/tests/wpt/tests/html/semantics/menu/tentative/button-invoke-menulist.html b/tests/wpt/tests/html/semantics/menu/tentative/button-invoke-menulist.html new file mode 100644 index 00000000000..f5ac3dd7e6d --- /dev/null +++ b/tests/wpt/tests/html/semantics/menu/tentative/button-invoke-menulist.html @@ -0,0 +1,43 @@ + + + + + + + + Action 1 + Action 2 + + + diff --git a/tests/wpt/tests/html/semantics/menu/tentative/checkable.html b/tests/wpt/tests/html/semantics/menu/tentative/checkable.html new file mode 100644 index 00000000000..d801fa1b6ff --- /dev/null +++ b/tests/wpt/tests/html/semantics/menu/tentative/checkable.html @@ -0,0 +1,209 @@ + + + + + + + + +
+ +
+
+ + + +
+ +
+
+ + + +
+
+ + + +
+
+ + diff --git a/tests/wpt/tests/html/semantics/menu/tentative/focus-menu-elements-arrowoperations.html b/tests/wpt/tests/html/semantics/menu/tentative/focus-menu-elements-arrowoperations.html new file mode 100644 index 00000000000..d41799f8504 --- /dev/null +++ b/tests/wpt/tests/html/semantics/menu/tentative/focus-menu-elements-arrowoperations.html @@ -0,0 +1,67 @@ + + + + + + + + + + Open + + + + Command A1 + Command A2 + + + + Command B1 + Command B2 + + + + diff --git a/tests/wpt/tests/html/semantics/menu/tentative/menu-elements-default-style-ref.html b/tests/wpt/tests/html/semantics/menu/tentative/menu-elements-default-style-ref.html new file mode 100644 index 00000000000..40e2ca8b39a --- /dev/null +++ b/tests/wpt/tests/html/semantics/menu/tentative/menu-elements-default-style-ref.html @@ -0,0 +1,36 @@ + + + + + +
+ + diff --git a/tests/wpt/tests/html/semantics/menu/tentative/menu-elements-default-style.html b/tests/wpt/tests/html/semantics/menu/tentative/menu-elements-default-style.html new file mode 100644 index 00000000000..c409f0329f6 --- /dev/null +++ b/tests/wpt/tests/html/semantics/menu/tentative/menu-elements-default-style.html @@ -0,0 +1,24 @@ + + + + + + + + Item A + Item B + Item C + + +
+ + + Item A + Item B + Item C + + + \ No newline at end of file diff --git a/tests/wpt/tests/html/semantics/menu/tentative/menubar-invoke-menulist.html b/tests/wpt/tests/html/semantics/menu/tentative/menubar-invoke-menulist.html new file mode 100644 index 00000000000..3fe0caf62c7 --- /dev/null +++ b/tests/wpt/tests/html/semantics/menu/tentative/menubar-invoke-menulist.html @@ -0,0 +1,104 @@ + + + + + + + + More commands + Command 2 + Command 3 + + + + Command 1 + Command 2 + + + +
+ Show menu +
+
+ + diff --git a/tests/wpt/tests/html/semantics/menu/tentative/menulist-popover-attribute.html b/tests/wpt/tests/html/semantics/menu/tentative/menulist-popover-attribute.html new file mode 100644 index 00000000000..2ccd0a3c1bd --- /dev/null +++ b/tests/wpt/tests/html/semantics/menu/tentative/menulist-popover-attribute.html @@ -0,0 +1,37 @@ + + + + + + + + Command 1 + Command 2 + + + \ No newline at end of file diff --git a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-input-modalities.tentative.html b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-input-modalities.tentative.html new file mode 100644 index 00000000000..ce2962bfa84 --- /dev/null +++ b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-input-modalities.tentative.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + +Link + + + + + + + + + SVG A + + + +
Target
+ + + + + diff --git a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-behavior.tentative.html b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-behavior.tentative.html index 997c2b93825..53be20b348a 100644 --- a/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-behavior.tentative.html +++ b/tests/wpt/tests/html/semantics/the-button-element/interest-target/interesttarget-keyboard-behavior.tentative.html @@ -11,19 +11,20 @@ -
- - Link - - - - - - - SVG A - - -
+ + +Link + + + + + + + + + SVG A + +
Popover
@@ -40,29 +41,31 @@ diff --git a/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_connection_response.https.html b/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_connection_response.https.html new file mode 100644 index 00000000000..449b2846114 --- /dev/null +++ b/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_connection_response.https.html @@ -0,0 +1,34 @@ + + +TestDriver bidi.bluetooth.simulate_gatt_connection_response method + + + + + + + \ No newline at end of file diff --git a/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_disconnection.https.html b/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_disconnection.https.html new file mode 100644 index 00000000000..0b8a8df93a6 --- /dev/null +++ b/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_gatt_disconnection.https.html @@ -0,0 +1,29 @@ + + +TestDriver bidi.bluetooth.simulate_gatt_disconnection method + + + + + + + \ No newline at end of file diff --git a/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_preconnected_peripheral.https.html b/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_preconnected_peripheral.https.html index 318bd29cf4e..54f5aece12b 100644 --- a/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_preconnected_peripheral.https.html +++ b/tests/wpt/tests/infrastructure/testdriver/bidi/bluetooth/simulate_preconnected_peripheral.https.html @@ -16,10 +16,9 @@ }); promise_test(async (t) => { - const name = 'LE Device'; await test_driver.bidi.bluetooth.simulate_preconnected_peripheral({ - address: "09:09:09:09:09:09", - name: name, + address: DEVICE_ADDRESS, + name: DEVICE_NAME, manufacturerData: [], knownServiceUuids: [] }); @@ -27,7 +26,8 @@ const [device] = await Promise.all([requestDeviceWithTrustedClick({ acceptAllDevices: true }), handle_prompt_promise]); - assert_equals(device.name, name); + assert_equals(device.name, DEVICE_NAME); + await test_driver.bidi.bluetooth.disable_simulation(); }, "simulate a preconnected peripheral."); diff --git a/tests/wpt/tests/interfaces/dom.idl b/tests/wpt/tests/interfaces/dom.idl index 253e7bf913e..d2129285383 100644 --- a/tests/wpt/tests/interfaces/dom.idl +++ b/tests/wpt/tests/interfaces/dom.idl @@ -324,7 +324,7 @@ dictionary ImportNodeOptions { [Exposed=Window] interface DOMImplementation { - [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId); + [NewObject] DocumentType createDocumentType(DOMString name, DOMString publicId, DOMString systemId); [NewObject] XMLDocument createDocument(DOMString? namespace, [LegacyNullToEmptyString] DOMString qualifiedName, optional DocumentType? doctype = null); [NewObject] Document createHTMLDocument(optional DOMString title); diff --git a/tests/wpt/tests/interfaces/html.idl b/tests/wpt/tests/interfaces/html.idl index 3a7dce9693e..a7a03c97ad0 100644 --- a/tests/wpt/tests/interfaces/html.idl +++ b/tests/wpt/tests/interfaces/html.idl @@ -1695,7 +1695,7 @@ interface ToggleEvent : Event { constructor(DOMString type, optional ToggleEventInit eventInitDict = {}); readonly attribute DOMString oldState; readonly attribute DOMString newState; - readonly attribute Element source; + readonly attribute Element? source; }; dictionary ToggleEventInit : EventInit { diff --git a/tests/wpt/tests/interfaces/pointer-animations.idl b/tests/wpt/tests/interfaces/pointer-animations.idl new file mode 100644 index 00000000000..e1b03197514 --- /dev/null +++ b/tests/wpt/tests/interfaces/pointer-animations.idl @@ -0,0 +1,23 @@ +// GENERATED CONTENT - DO NOT EDIT +// Content was automatically extracted by Reffy into webref +// (https://github.com/w3c/webref) +// Source: Pointer-driven Animations (https://drafts.csswg.org/pointer-animations-1/) + +enum PointerAxis { + "block", + "inline", + "x", + "y" +}; + +dictionary PointerTimelineOptions { + Element? source; + PointerAxis axis = "block"; +}; + +[Exposed=Window] +interface PointerTimeline : AnimationTimeline { + constructor(optional PointerTimelineOptions options = {}); + readonly attribute Element? source; + readonly attribute PointerAxis axis; +}; diff --git a/tests/wpt/tests/interfaces/secure-payment-confirmation.idl b/tests/wpt/tests/interfaces/secure-payment-confirmation.idl index 0a2207684ec..c0cbc41e99c 100644 --- a/tests/wpt/tests/interfaces/secure-payment-confirmation.idl +++ b/tests/wpt/tests/interfaces/secure-payment-confirmation.idl @@ -13,6 +13,7 @@ dictionary SecurePaymentConfirmationRequest { USVString payeeOrigin; sequence paymentEntitiesLogos; AuthenticationExtensionsClientInputs extensions; + sequence browserBoundPubKeyCredParams; sequence locale; boolean showOptOut; }; @@ -35,6 +36,7 @@ partial dictionary AuthenticationExtensionsClientInputs { dictionary AuthenticationExtensionsPaymentInputs { boolean isPayment; + sequence browserBoundPubKeyCredParams; // Only used for authentication. USVString rpId; @@ -46,8 +48,20 @@ dictionary AuthenticationExtensionsPaymentInputs { PaymentCredentialInstrument instrument; }; +partial dictionary AuthenticationExtensionsClientOutputs { + AuthenticationExtensionsPaymentOutputs payment; +}; + +dictionary AuthenticationExtensionsPaymentOutputs { + BrowserBoundSignature browserBoundSignature; +}; + +dictionary BrowserBoundSignature { + required ArrayBuffer signature; +}; + dictionary CollectedClientPaymentData : CollectedClientData { - required CollectedClientAdditionalPaymentData payment; + required (CollectedClientAdditionalPaymentData or CollectedClientAdditionalPaymentRegistrationData) payment; }; dictionary CollectedClientAdditionalPaymentData { @@ -58,6 +72,11 @@ dictionary CollectedClientAdditionalPaymentData { sequence paymentEntitiesLogos; required PaymentCurrencyAmount total; required PaymentCredentialInstrument instrument; + USVString browserBoundPublicKey; +}; + +dictionary CollectedClientAdditionalPaymentRegistrationData { + USVString browserBoundPublicKey; }; dictionary PaymentCredentialInstrument { diff --git a/tests/wpt/tests/js-self-profiling/WEB_FEATURES.yml b/tests/wpt/tests/js-self-profiling/WEB_FEATURES.yml new file mode 100644 index 00000000000..1d2e9bdb565 --- /dev/null +++ b/tests/wpt/tests/js-self-profiling/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: profiler + files: "**" diff --git a/tests/wpt/tests/lint.ignore b/tests/wpt/tests/lint.ignore index cf83e458213..7273ff2c059 100644 --- a/tests/wpt/tests/lint.ignore +++ b/tests/wpt/tests/lint.ignore @@ -289,6 +289,7 @@ SET TIMEOUT: soft-navigation-heuristics/smoke/tentative/task-attribution.html SET TIMEOUT: shadow-dom/Document-prototype-currentScript.html SET TIMEOUT: shadow-dom/scroll-to-the-fragment-in-shadow-tree.html SET TIMEOUT: shadow-dom/slotchange-event.html +SET TIMEOUT: subresource-integrity/integrity-policy/script.https.html SET TIMEOUT: trusted-types/support/block-string-assignment-to-DOMWindowTimers-setTimeout-setInterval.js SET TIMEOUT: trusted-types/support/DOMWindowTimers-setTimeout-setInterval.js SET TIMEOUT: trusted-types/support/should-sink-type-mismatch-violation-be-blocked-by-csp-002-worker-multiple-violations.js diff --git a/tests/wpt/tests/navigation-api/navigate-event/navigate-form-userInitiated.html b/tests/wpt/tests/navigation-api/navigate-event/navigate-form-userInitiated.html index 246e028a0db..d237b52ac1e 100644 --- a/tests/wpt/tests/navigation-api/navigate-event/navigate-form-userInitiated.html +++ b/tests/wpt/tests/navigation-api/navigate-event/navigate-form-userInitiated.html @@ -5,7 +5,7 @@
- +
+ + + + + + + + + More commands + Command B + Command C + + + + Command A1 + Command A2 + + + diff --git a/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf-image.window.js b/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf-image.window.js new file mode 100644 index 00000000000..96255d82f2d --- /dev/null +++ b/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf-image.window.js @@ -0,0 +1,55 @@ +// META: script=/resources/testdriver.js +// META: script=/resources/testdriver-vendor.js +// META: script=../../resources/soft-navigation-test-helper.js + +// This test is very similar to distant-leaf-text.window.js, but the leaf +// node is an image instead of text. +// +// This test is intended to verify that when a distant leaf of a +// deeply nested div element is attached to the DOM, its painting can +// trigger a soft navigation. +// +// To show this, we create a button that, when clicked, creates a deeply +// nested div element and attaches it to the DOM - only the leaf, an image, +// 10 levels below the attachment point actually gets painted. +// +// An earlier version of this test was based on +// https://g-issues.chromium.org/issues/419822831#comment5 + +function clickHandler() { + let div = document.createElement("div"); + const img = new Image(); // The leaf node that gets painted. + img.src = "/images/lcp-256x256.png" + div.appendChild(img); + for (let i = 0; i < 10; i++) { + const tmp = document.createElement('div'); + tmp.appendChild(div); + div = tmp; + } + document.body.appendChild(div); + history.pushState({}, '', '/leaf-image'); +} + +const button = document.createElement('div'); +button.textContent = 'Click here!'; +button.onclick = clickHandler; +document.body.appendChild(button); + +promise_test(async (t) => { + if (test_driver) { + test_driver.click(button); + } + const helper = new SoftNavigationTestHelper(t); + const entries = await helper.getBufferedPerformanceEntriesWithTimeout( + /*type=*/ 'soft-navigation', + /*includeSoftNavigationObservations=*/ false, + /*minNumEntries=*/ 1, + /*timeout=*/ 3000 + ); + assert_equals(entries.length, 1, 'Expected exactly one soft navigation.'); + assert_equals( + entries[0].name.replace(/.*\//, ''), + 'leaf-image', + 'URL ends with \'leaf-image\'.', + ); +}, 'DOM: Distant leaf (image) satisfies Soft Navigation paint criterion.'); diff --git a/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf.window.js b/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf-text.window.js similarity index 87% rename from tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf.window.js rename to tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf-text.window.js index c599985a2a2..341b5aaed74 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf.window.js +++ b/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/distant-leaf-text.window.js @@ -2,6 +2,9 @@ // META: script=/resources/testdriver-vendor.js // META: script=../../resources/soft-navigation-test-helper.js +// This test is very similar to distant-leaf-text.window.js, but the leaf +// node is text instead of an image. +// // This test is intended to verify that when a distant leaf of a // deeply nested div element is attached to the DOM, its painting can // trigger a soft navigation. @@ -37,11 +40,12 @@ promise_test(async (t) => { /*type=*/ 'soft-navigation', /*includeSoftNavigationObservations=*/ false, /*minNumEntries=*/ 1, - ); + /*timeout=*/ 3000 + ); assert_equals(entries.length, 1, 'Expected exactly one soft navigation.'); assert_equals( entries[0].name.replace(/.*\//, ''), 'greeting', 'URL ends with \'greeting\'.', ); -}, 'DOM: Distant leaf satisfies Soft Navigation paint criterion.'); +}, 'DOM: Distant leaf (text) satisfies Soft Navigation paint criterion.'); diff --git a/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/insert-image-div-before.window.js b/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/insert-image-div-before.window.js deleted file mode 100644 index 19e8a397c34..00000000000 --- a/tests/wpt/tests/soft-navigation-heuristics/dom/tentative/insert-image-div-before.window.js +++ /dev/null @@ -1,47 +0,0 @@ -// META: script=/resources/testdriver.js -// META: script=/resources/testdriver-vendor.js -// META: script=../../resources/soft-navigation-test-helper.js - -// This test shows a relatively simple case where a div with an image inside -// is inserted before another element, and the image is painted, and yet -// we don't detect a soft navigation. -// https://g-issues.chromium.org/issues/419822831#comment5 - -function clickHandler() { - const div = document.createElement("div"); - const img = new Image(); - img.src = "/images/lcp-256x256.png" - // Uncomment the following line => test passes (image should work too though). - // div.textContent = "Hello, World."; - div.appendChild(img); - document.body.insertBefore(div, document.getElementById("insert-before")); - history.pushState({}, '', '/test'); -} - -const div = document.createElement('div'); -div.id = 'insert-before'; -document.body.appendChild(div); - -const button = document.createElement('div'); -button.textContent = 'Click here!'; -button.onclick = clickHandler; -document.body.appendChild(button); - -promise_test(async (t) => { - if (test_driver) { - test_driver.click(button); - } - const helper = new SoftNavigationTestHelper(t); - const entries = await helper.getBufferedPerformanceEntriesWithTimeout( - /*type=*/ 'soft-navigation', - /*includeSoftNavigationObservations=*/ false, - /*minNumEntries=*/ 1, - /*timeout=*/ 3000, - ); - assert_equals(entries.length, 1, 'Expected exactly one soft navigation.'); - assert_equals( - entries[0].name.replace(/.*\//, ''), - 'test', - 'URL ends with \'test\'.', - ); -}, 'DOM: Insert image div satisfies Soft Navigation paint criterion.'); diff --git a/tests/wpt/tests/soft-navigation-heuristics/image-lcp-followed-by-two-image-softnavs-lcp.tentative.html b/tests/wpt/tests/soft-navigation-heuristics/image-lcp-followed-by-two-image-softnavs-lcp.tentative.html index 66a9e5136f6..4a394649c52 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/image-lcp-followed-by-two-image-softnavs-lcp.tentative.html +++ b/tests/wpt/tests/soft-navigation-heuristics/image-lcp-followed-by-two-image-softnavs-lcp.tentative.html @@ -19,8 +19,6 @@ const link = document.getElementById("link"); promise_test(async t => { - validatePaintEntries('first-contentful-paint', 1); - validatePaintEntries('first-paint', 1); const preClickLcp = await getLcpEntries(); setEvent(t, link, /*pushState=*/url=>history.pushState({}, '', url), /*addContent=*/async () => await addImageToMain(), /*pushUrl=*/true, diff --git a/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js b/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js index 4bc16b44e00..9ee79d36f76 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js +++ b/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js @@ -2,8 +2,6 @@ var counter = 0; var interacted; var timestamps = []; const MAX_CLICKS = 50; -// Entries for one hard navigation + 50 soft navigations. -const MAX_PAINT_ENTRIES = 51; const URL = 'foobar.html'; const readValue = (value, defaultValue) => { return value !== undefined ? value : defaultValue; @@ -116,10 +114,6 @@ const testNavigationApi = (testName, navigateEventHandler, link) => { const runEntryValidations = async ( preClickLcp, first_navigation_id, entries_expected_number = 2, validate = null) => { - await validatePaintEntries( - 'first-contentful-paint', entries_expected_number, first_navigation_id); - await validatePaintEntries( - 'first-paint', entries_expected_number, first_navigation_id); const postClickLcp = await getLcpEntries(); const postClickLcpWithoutSoftNavs = await getLcpEntriesWithoutSoftNavs(); assert_greater_than( @@ -236,50 +230,6 @@ const validateSoftNavigationEntry = await extraValidations(entries, options); }; -const validatePaintEntries = - async (type, entries_number, first_navigation_id) => { - if (!performance.softNavPaintMetricsSupported) { - return; - } - const expected_entries_number = Math.min(entries_number, MAX_PAINT_ENTRIES); - const entries = await new Promise(resolve => { - const entries = []; - new PerformanceObserver(list => { - entries.push(...list.getEntriesByName(type)); - if (entries.length >= expected_entries_number) { - resolve(entries); - } - }).observe({ - type: 'paint', - buffered: true, - includeSoftNavigationObservations: true - }); - }); - const entries_without_softnavs = await new Promise(resolve => { - new PerformanceObserver(list => { - resolve(list.getEntriesByName(type)); - }).observe({type: 'paint', buffered: true}); - }); - assert_equals( - entries.length, expected_entries_number, - `There are ${entries_number} entries for ${type}`); - assert_equals( - entries_without_softnavs.length, 1, - `There is one non-softnav entry for ${type}`); - if (entries_number > 1) { - assert_not_equals( - entries[0].startTime, entries[1].startTime, - 'Entries have different timestamps for ' + type); - } - if (expected_entries_number > entries_without_softnavs.length) { - assert_equals( - entries[entries_without_softnavs.length].navigationId, - first_navigation_id, - 'First paint entry should have the same navigation ID as the last soft ' + - 'navigation entry'); - } -}; - const waitInitialLCP = () => { return new Promise(resolve => { diff --git a/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-test-helper.js b/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-test-helper.js index a572f55e66d..d4b6ad04a78 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-test-helper.js +++ b/tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-test-helper.js @@ -89,4 +89,31 @@ class SoftNavigationTestHelper { observer.disconnect(); }); } + + /** + * Waits for a number of performance entries of a given type, + * optionally including soft navigation observations. + * @param {string} type The type of the entries to wait for. + * @param {boolean} includeSoftNavigationObservations Whether to include + * soft navigation observations. + * @param {number} minNumEntries The minimum number of entries to wait for. + * @return {!Promise} The promise, which resolves with the entries. + */ + static getPerformanceEntries( + type, includeSoftNavigationObservations, minNumEntries) { + return new Promise((resolve) => { + const entries = []; + const observer = new PerformanceObserver((list) => { + entries.push(...list.getEntries()); + if (entries.length >= minNumEntries) { + resolve(entries); + observer.disconnect(); + } + }) + observer.observe({ + type: type, + includeSoftNavigationObservations: includeSoftNavigationObservations, + }); + }); + } } diff --git a/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/almost-soft-navigation.html b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/almost-soft-navigation.html index aa5732f9fb7..c66495be7d6 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/almost-soft-navigation.html +++ b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/almost-soft-navigation.html @@ -7,6 +7,7 @@ + + + + + + + +
Click here!
+ + diff --git a/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/lcp.html b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/lcp.html index eb19c01494d..cc582c6cbc3 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/lcp.html +++ b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/lcp.html @@ -143,8 +143,8 @@ "Soft nav LCP entries have have different navigation IDs.", ); assert_equals( - lcp_including_soft_nav[1].navigationID, - soft_navs[0].navigationID, + lcp_including_soft_nav[1].navigationId, + soft_navs[0].navigationId, "Second soft nav LCP entry has the same navigation ID as the soft nav entry.", ); }, "Detect soft navigation and LCP after a click."); diff --git a/tests/wpt/tests/speech-api/SpeechRecognition-concurrentMediaStreamTrack-manual.https.html b/tests/wpt/tests/speech-api/SpeechRecognition-concurrentMediaStreamTrack-manual.https.html index 9da5cc63478..c3bdd703172 100644 --- a/tests/wpt/tests/speech-api/SpeechRecognition-concurrentMediaStreamTrack-manual.https.html +++ b/tests/wpt/tests/speech-api/SpeechRecognition-concurrentMediaStreamTrack-manual.https.html @@ -27,10 +27,10 @@ promise_test(async (t) => { // Create two SpeechRecognition instances const speechRecognition1 = new SpeechRecognition(); - speechRecognition1.mode = 'cloud-only'; + speechRecognition1.processLocally = false; speechRecognition1.lang = lang; const speechRecognition2 = new SpeechRecognition(); - speechRecognition2.mode = 'cloud-only'; + speechRecognition2.processLocally = false; speechRecognition2.lang = lang; const audioTrack1 = await getAudioTrackFromFile("/media/speech.wav"); diff --git a/tests/wpt/tests/speech-api/SpeechRecognition-mediaStreamTrack-manual.https.html b/tests/wpt/tests/speech-api/SpeechRecognition-mediaStreamTrack-manual.https.html index 01a5cd0825e..212ccb7fd5c 100644 --- a/tests/wpt/tests/speech-api/SpeechRecognition-mediaStreamTrack-manual.https.html +++ b/tests/wpt/tests/speech-api/SpeechRecognition-mediaStreamTrack-manual.https.html @@ -25,7 +25,7 @@ promise_test(async (t) => { const lang = "en-US"; window.SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; const speechRecognition = new SpeechRecognition(); - speechRecognition.mode = 'cloud-only'; + speechRecognition.processLocally = false; speechRecognition.lang = lang; const audioTrack = await getAudioTrackFromFile("/media/speech.wav"); diff --git a/tests/wpt/tests/subresource-integrity/integrity-policy/script.https.html b/tests/wpt/tests/subresource-integrity/integrity-policy/script.https.html index 57b4d3e3582..6b4d6ae2f89 100644 --- a/tests/wpt/tests/subresource-integrity/integrity-policy/script.https.html +++ b/tests/wpt/tests/subresource-integrity/integrity-policy/script.https.html @@ -38,9 +38,9 @@ cross_origin: true, integrity: "", policy_violation: true, - block: true, + add_blocking_header: true, endpoints: true, - expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: false }, + expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: false}, }, { description: "Ensure that a script with unknown integrity algorithm did not run", @@ -48,9 +48,9 @@ cross_origin: true, integrity: "foobar-AAAAAAAAAAAAAAAAAAAa", policy_violation: true, - block: true, + add_blocking_header: true, endpoints: true, - expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: false }, + expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: false}, }, { description: "Ensure that a script without integrity algorithm runs and gets reported in report-only mode", @@ -58,9 +58,9 @@ cross_origin: true, integrity: "", policy_violation: true, - block: false, + add_blocking_header: false, endpoints: true, - expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: true }, + expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: true}, }, { description: "Ensure that a no-cors script gets blocked", @@ -68,9 +68,9 @@ cross_origin: false, integrity: "sha384-tqyFpeo21WFM8HDeUtLqH20GUq/q3D1R6mqTzW3RtyTZ3dAYZJhC1wUcnkgOE2ak", policy_violation: true, - block: true, + add_blocking_header: true, endpoints: true, - expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: false }, + expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: false}, }, { description: "Ensure that ReportingObserver gets called without endpoints", @@ -78,9 +78,9 @@ cross_origin: false, integrity: "sha384-tqyFpeo21WFM8HDeUtLqH20GUq/q3D1R6mqTzW3RtyTZ3dAYZJhC1wUcnkgOE2ak", policy_violation: true, - block: true, + add_blocking_header: true, endpoints: false, - expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: false }, + expected: {blocked: ORIGIN + "/content-security-policy/resources/ran.js", ran: false}, }, { description: "Ensure that a script with integrity runs", @@ -88,9 +88,9 @@ cross_origin: true, integrity: "sha384-tqyFpeo21WFM8HDeUtLqH20GUq/q3D1R6mqTzW3RtyTZ3dAYZJhC1wUcnkgOE2ak", policy_violation: false, - block: true, + add_blocking_header: true, endpoints: true, - expected: {blocked: "", ran: true }, + expected: {blocked: "", ran: true}, }, { description: "Ensure that a data URI script with no integrity runs", @@ -98,9 +98,9 @@ cross_origin: true, integrity: "", policy_violation: false, - block: true, + add_blocking_header: true, endpoints: true, - expected: {blocked: "", ran: true }, + expected: {blocked: "", ran: true}, }, { description: "Ensure that a no-CORS data URI script with no integrity runs", @@ -108,9 +108,9 @@ cross_origin: false, integrity: "", policy_violation: false, - block: true, + add_blocking_header: true, endpoints: true, - expected: {blocked: "", ran: true }, + expected: {blocked: "", ran: true}, }, { description: "Ensure that a blob URL script with no integrity runs", @@ -118,9 +118,9 @@ cross_origin: true, integrity: "", policy_violation: false, - block: true, + add_blocking_header: true, endpoints: true, - expected: {blocked: "", ran: true }, + expected: {blocked: "", ran: true}, }, { description: "Ensure that a no-CORS blob URL script with no integrity runs", @@ -128,9 +128,29 @@ cross_origin: false, integrity: "", policy_violation: false, - block: true, + add_blocking_header: true, endpoints: true, - expected: {blocked: "", ran: true }, + expected: {blocked: "", ran: true}, + }, + { + description: "Ensure that an about:blank URL script with no integrity does not trigger a report", + url: "about:blank", + cross_origin: true, + integrity: "", + policy_violation: false, + add_blocking_header: true, + endpoints: false, + expected: {blocked: "", ran: false}, + }, + { + description: "Ensure that a no-CORS about:blank URL script with no integrity does not trigger a report", + url: "about:blank", + cross_origin: false, + integrity: "", + policy_violation: false, + add_blocking_header: true, + endpoints: false, + expected: {blocked: "", ran: false}, } ]; test_cases.map(test_case => { @@ -151,7 +171,7 @@ const reporting_uuid_3 = token(); const reporting_endpoint = `${ORIGIN}/reporting/resources/report.py`; let header = ""; - if (test_case.block) { + if (test_case.add_blocking_header) { header += `header(Integrity-Policy,blocked-destinations=\\(script\\)\\, endpoints=\\(integrity-endpoint-1 integrity-endpoint-2\\))`; } @@ -173,19 +193,24 @@ const ctx = new RemoteContext(iframe_uuid); const result = await ctx.execute_script(async (test_case) => { window.ran = false; - let report_observed_promise; - if (test_case.policy_violation) { - report_observed_promise = new Promise(r => { - (new ReportingObserver((reports, observer) => { - reports.forEach(report => { - if (report.body.blockedURL.endsWith(test_case.url)) { - r(report.body); - observer.disconnect(); - } - }); - })).observe('integrity-violation'); - }); - } + + // Always set up report observer to catch any unexpected reports + const report_observed_promise = new Promise(r => { + (new ReportingObserver((reports, observer) => { + reports.forEach(report => { + // Match the tested URL against the stripped one: + // https://www.w3.org/TR/reporting-1/#strip-url-for-use-in-reports + // 1. If url’s scheme is not an HTTP(S) scheme, then return url’s scheme. + const test_url = test_case.url.startsWith("http") ? + test_case.url : + test_case.url.split(":")[0]; + if (report.body.blockedURL.endsWith(test_url)) { + r(report.body); + observer.disconnect(); + } + }); + })).observe('integrity-violation'); + }); // Load the script await new Promise(resolve => { @@ -201,20 +226,33 @@ script.src = test_case.url; document.body.appendChild(script); }); - const report_body = await report_observed_promise; + + let report_body = null; + if (test_case.policy_violation) { + report_body = await report_observed_promise; + } else { + const timeout_promise = new Promise(r => setTimeout(() => r('timeout'), 100)); + const race_result = await Promise.race([report_observed_promise, timeout_promise]); + if (race_result !== 'timeout') { + report_body = race_result; + } + } return { body: report_body, ran: window.ran }; }, [test_case]); - assert_equals(result.ran, test_case.expected.ran); + assert_equals(result.ran, test_case.expected.ran, "Ran"); if (test_case.policy_violation) { + assert_not_equals(result.body, null, "Expected a policy violation report"); assert_equals(result.body.blockedURL, test_case.expected.blocked); assert_true(result.body.documentURL.endsWith(iframe_url)); assert_equals(result.body.destination, "script"); - assert_equals(result.body.reportOnly, !test_case.block); + assert_equals(result.body.reportOnly, !test_case.add_blocking_header); + } else { + assert_equals(result.body, null, "No policy violation report should be observed"); } if (test_case.endpoints && test_case.policy_violation) { - if (test_case.block) { - await check_report(reporting_endpoint, reporting_uuid_1, iframe_url, test_case.url, !test_case.block); - await check_report(reporting_endpoint, reporting_uuid_2, iframe_url, test_case.url, !test_case.block); + if (test_case.add_blocking_header) { + await check_report(reporting_endpoint, reporting_uuid_1, iframe_url, test_case.url, !test_case.add_blocking_header); + await check_report(reporting_endpoint, reporting_uuid_2, iframe_url, test_case.url, !test_case.add_blocking_header); } await check_report(reporting_endpoint, reporting_uuid_3, iframe_url, test_case.url, true); } diff --git a/tests/wpt/tests/svg/animations/crashtests/empty-values-list-paced-animation.html b/tests/wpt/tests/svg/animations/crashtests/empty-values-list-paced-animation.html new file mode 100644 index 00000000000..16d450e98b9 --- /dev/null +++ b/tests/wpt/tests/svg/animations/crashtests/empty-values-list-paced-animation.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/tests/wpt/tests/svg/embedded/image-embedding-nesteder-data-url.html b/tests/wpt/tests/svg/embedded/image-embedding-nesteder-data-url.html index 4f8335dcd19..48fb4fa48b7 100644 --- a/tests/wpt/tests/svg/embedded/image-embedding-nesteder-data-url.html +++ b/tests/wpt/tests/svg/embedded/image-embedding-nesteder-data-url.html @@ -1,9 +1,6 @@ - SVG image that uses a data: URL and then again - - - - diff --git a/tests/wpt/tests/svg/embedded/image-modify-href-4.svg b/tests/wpt/tests/svg/embedded/image-modify-href-4.svg index e900ee71387..f7e550e5def 100644 --- a/tests/wpt/tests/svg/embedded/image-modify-href-4.svg +++ b/tests/wpt/tests/svg/embedded/image-modify-href-4.svg @@ -16,17 +16,15 @@ const doc = document.implementation.createDocument(SVG_NS, "svg"); const image = doc.createElementNS(SVG_NS, "image"); - image.addEventListener('load', function() { - waitForAtLeastOneFrame().then(() => { - takeScreenshot(); - }); - }); image.setAttribute("width", 100); image.setAttribute("height", 100); image.setAttribute("href", "reference/green-rect-100x100.svg"); doc.documentElement.appendChild(image); document.documentElement.appendChild(document.adoptNode(image)); + + await waitForAtLeastOneFrame(); + takeScreenshot(); } diff --git a/tests/wpt/tests/svg/struct/reftests/sync-svg-attributes-ref.svg b/tests/wpt/tests/svg/struct/reftests/sync-svg-attributes-ref.svg new file mode 100644 index 00000000000..f68db2a3065 --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/sync-svg-attributes-ref.svg @@ -0,0 +1,4 @@ + + The two texts should be on top of each other + The two texts should be on top of each other + diff --git a/tests/wpt/tests/svg/struct/reftests/sync-svg-attributes.svg b/tests/wpt/tests/svg/struct/reftests/sync-svg-attributes.svg new file mode 100644 index 00000000000..ef780dd5280 --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/sync-svg-attributes.svg @@ -0,0 +1,17 @@ + + + SVG attributes gets synced properly on use shadow dom + + + + The two texts should be on top of each other + + + + diff --git a/tests/wpt/tests/svg/struct/reftests/use-event-handler-no-loss-of-events-ref.html b/tests/wpt/tests/svg/struct/reftests/use-event-handler-no-loss-of-events-ref.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/tests/svg/struct/reftests/use-event-handler-no-loss-of-events.html b/tests/wpt/tests/svg/struct/reftests/use-event-handler-no-loss-of-events.html new file mode 100644 index 00000000000..e56e320d26b --- /dev/null +++ b/tests/wpt/tests/svg/struct/reftests/use-event-handler-no-loss-of-events.html @@ -0,0 +1,38 @@ + + + +No loss of events when use instances copies event handlers + + + + + + + + + + + + + + + + diff --git a/tests/wpt/tests/tools/certs/cacert.key b/tests/wpt/tests/tools/certs/cacert.key index 26e5b3577da..bb982867aa6 100644 --- a/tests/wpt/tests/tools/certs/cacert.key +++ b/tests/wpt/tests/tools/certs/cacert.key @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIpUw2O6vqIOICAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECC/kCOUsjFG4BIIEyNaOHDPpzWlg -eUKbue3TpEf8QbSVYwfviTNTCV+cOPzoY3FndudWC4TNyJDZkzj4x1CAWhk6tsE2 -hrP2XqDsdzeVgHpP8x3728N0PWZWvh8dSZ9cnTnQ235J89ji85yGgXzMcFULi70z -DsusD5MZcV8l58zQCoREOeQMiyLX8qN+QvYjgtGkuSAtcFnOrlMMnW+TI0UTYXnQ -ifN2KoyQ9HX2S4P/vV1x0SAtwYoS1+T8l0PElrjAYGKyKWS/O0dgEx82vuX9Xfbg -kHELMtEWl6bplfKfXoKDNg5wSc46giKa5VsyZ+qTRHoeUiTsX6YQtRMB7iaHyQlt -lja0FAm2QQqC9oXfW+a+vGD4O/RvBkfuHyRbXfjdcwlKT9FgczEY8iDTCNXeYTwM -pBosgMvKAuIDvplQlyrmbRpCFdIqg6LvWW2IJ7a42DtvbKGeV/iyvMbj4XLFyKov -2RG51rFBXXejFRspn+10YuV9X9Q3YeJwB9riLAF3oy/rYeFCVwM8k3fjWRgop2/W -XzD1Us0/GuDr7Fe1mABWgawCc/a6Hp5tmLG60ly08lw3A9DGuqIHXxexyD749xMa -baT99DlCjmRsr3i8XVBCvblj03rXIdLwVzqWM2+a6Rkp3DDqrY2Vk8Q4zIryRo3w -5U+u7pqiyTEzy+SFRCuEIUncg+HeOsnvYIUGo4FAY7tmzTh2s1GBUK/+pSI5tJUa -57/trW6nazO2ry0e1V54RKn2OZQau8RYlFQMDuMdpSwEa/jp7Xh9XQS2vstf8Ed5 -J8YFJIsrkE17xX+tiIUis3ZIO4SGZNH8w+Mdt693c2mnbaVeqKxjoV7i0YhDbXz8 -NdYGLrmRaMqB8r6BzsMJn8/D2fuVbuOFQn+gg8iRYyVmqsbih4IpD1GO/bQr9H8A -re2MR7Mohh4KJKfsykvtWs7wxdd0vWkNqXo6QdNrayy9H1qlpC7NxUYH7DvjZCgh -k7XPaZnfmCcOmGJ/hnUHUZynzKlZbz5lvVKuAUJ5bLvQyfpgdJYOm3tXp4bwpM2I -AhLqUISPQwpdpi9EFQrbyRCAPrYDcdWSGiEwAMKt5cILwW2gsqhnc6MQn0EQA/uT -NZwSD/Q3q4lqWOqWiezQ0zupt4eq7aOgYtvO4qfscTDSSUiO/LRvZ0vaqmjPE1Ix -5fJ1zY2DVp/NFRTRgjzjPyZXjVI1xIx9NgBRlzBMXVrbcMN4kgLoRwt7DSrH1UjU -rwKuFHbQj75lG/EQ2L4mEqPCQywkIoZYzGGsQ5TqFH9KZyOkUUEbfQXs9hvw2+E5 -qC+2zxF9yp7Fj0+lhlE6P/zHcx5TNfmPL/lXr36jsqlOHl5YAGPvJiR19MqH893o -p1J0wRIRGgPPe9zKGkyyH3KrathyvpbtxRHxzZnWnk0FE+rWp67YG2pg0vrRItY6 -jy9KW+U+0bBZWkxVJ9c26LYFb+g5jkvMHiJTFIluXIcjU0Eysvh8iOMwuUVLIEQ5 -8CgOwhHv9+Ct7nGC0tOOP5oZMvnKfbuuLpDU22zbksVcEBWoHDOTlDObnveQR0Lg -trcoyMDQyJnlufs1I67cIcEMBzx8j3wxsvVf7whWm9mGpdE6DHdnLOKOdvF+A45N -eofAWq/S0TFkNBX7I6FZUw== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIQ5xxSiiavZsCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECFKM9TnbYM+OBIIEyMH5TkEN57pt +EZk850JRFQJAl1FNOpQwTIY1KysKZenigkLMaavObLdAheJVNSGWx+Wua7cgKWbc +5GBVZn+NN4CRAtPlL+xKWf0HYwr3brJn3mMWrJbfMgugB2yG9UvAL4jBmsz9eWB1 +ZuoUnBa9oZPtjcROq5CnZJXdrHqHPaG5CswoSBOXn0p/nv6KSeV8BRgdj1EvAGKh +sOav2PbsaTESESnR4RP91k6hu24ZRUkfxA16L+BKb0/94ie4DErFKcZbilfI41Qv +FQTpbPLZwOywCz/VD6kjYcRAr1q26Zhv4O80/0ZL7m/OBzu38PCUKwBAduZZyCCf +1sqDyNWyPHTa9sPSY3pocpIvtzQ0UFNOhlMicHztNpNAtugJk8mPtvLyMqg02sys +GK4PZtENPPcaWCy8hBxRN5+fVXjx4RpeJJQjqwnzuQiVOKkGrDw3MxLvIh6JCV4h +RvZW25wd3Tbs2KzotKNXFZDNHRSQRJRG+j7rTVr/F92YKC2KOPWcFU/J6quLqR9d +jTpvWej3SAvBkCqPZatuOPqxnctRU4/EZdg/N7eZBRmWdXLKvD5nwgHQoPdOiywT +/eu2JuQzXQuVzVRnCAdDCvxl7/UkSkepEJbq1VAXo1rp4UTdVp6/xGOLJVdG4Yzc +Y13Zx7Y5r0rh5QUI96jogFfor57uvtiMqnxT+QpRtGxJUaRs/6svLHwDHAZhbf2f +jtn+St/c+Il1Xjpm7shQvo+pOUBG0DzcSyUXsQB58K+3Yj79M0Ff54unJQ3SCAbV +zbq9OS69VRhkMveN3RGvgQDMIlgdH9DeDdB4YGEVEvujnqOBgcnrDmLE8e8tPAjZ +90Uh1oqXdJgM5whaK3LbNs41kz482Orkv/P9L8e3MOjSuymdkgg3yJIx6ZuHNNKL +BTQTRJELyaje+px2oyaIfvzGQ0Jjnv+jTEwphbIAapCtJy61/HDvbS3F4tZ1atIh +wWjKpPRklDYD1bM1oGBUx5d24tNlTGLlhyrrV0gBteMvwPpsT3SuWPKGfSRAwygk +v4papFqnGPG+7W394x9S4NhRwlaHeG/L6qA0YNGrpeSoZSGB6k1DpInW9wylngEu +DM3j6perxmR+ZrPJo87/S2nPb3ylmZmAc6mHt0JQTKtR4s2kMoodHmqo9UIJJjnf +Z7cwPOerrsy5xwAm7nlP3ghb0Cu13VQz/QC6023TsN+O/DrUsvhFtNiQWdVwZndz +d17Vgmas+eLM3n82Xqbyxs5hoae63JSz85M/LUiT121eC1MhOUrswCyw6KKVwYoW +JmkYaGWbuJHMOPUuRpThrJdO3QzGneMCu8CNxsyJJDLUrhtXkyX/23tRhOCnOYGc +QSfxsqRoL8IodF/gDEpuugf09wKUpdwK5q7N70YdBCpgMq3jjI/4ElmkPRRUfhp1 +rcNl/PtkJcUNkHwnIK3QWHhdKD56tjwBvpTNK9X1/QUqvU5stPlf4ZQM0zOsffPm ++jpauKaEzYsGSWcbhJib5WDA+j9l1EHIwVRrAiVcYi/IrYzvCVZYtC4+qrxGLxIW +3CfND5oUMsa/6sv3CWlqH6frYwLwGsy3kQLxhX56sgsvLJ9lgZBuuLlWBWptCIir +VCzo24f1epTgccd9RsHscA== -----END ENCRYPTED PRIVATE KEY----- diff --git a/tests/wpt/tests/tools/certs/cacert.pem b/tests/wpt/tests/tools/certs/cacert.pem index 18255d04961..e2ff4894e9e 100644 --- a/tests/wpt/tests/tools/certs/cacert.pem +++ b/tests/wpt/tests/tools/certs/cacert.pem @@ -1,125 +1,125 @@ -----BEGIN CERTIFICATE----- -MIIW5zCCFc+gAwIBAgIDASwmMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl -Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNTA0MTIwMTExNTlaFw0yNjA0MTIwMTExNTla +MIIW5zCCFc+gAwIBAgIDCvpqMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl +Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNTA2MTIwMTE4MzhaFw0yNjA2MTIwMTE4Mzha MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAJvUl2G2W4ugGe6jB1pcU00qxeDvhVEbty5zTYUsl/ME -9hgeLJkmmlyt2ldMxFLeBrpIqs67Sv0q4jS06ZDn3oycWOkcxGMuADOsFXzPGEFy -AXAF/bT5+dVjX2H7KehAK8C0wZvpzPUroz2NDyi1aTKQJ09qkBZDKL9tzK+597fB -Ae9hUih3JwCkNJjmTR8PRQ45UdNeX6Uk1doy5FWM+FKp4EWq2N/eLdHnO6NOpeke -hV/Npet1iI+zuEbgH/CbTQ/ZugsRW9ClaDrxAVu6UE5KY1FlOXgXV0GRpbBYFsTu -Oi2ipbAlCh7xIhkmc1OeEAVWPKZLCHm2ueCoqRAh/wUCAwEAAaOCFC4wghQqMAwG -A1UdEwQFMAMBAf8wHQYDVR0OBBYEFEEdWMtu+JqcUoL0qryS5lajMQyrMEcGA1Ud -IwRAMD6AFEEdWMtu+JqcUoL0qryS5lajMQyroSGkHzAdMRswGQYDVQQDDBJ3ZWIt -cGxhdGZvcm0tdGVzdHOCAwEsJjALBgNVHQ8EBAMCAgQwggoFBgNVHR4Eggn8MIIJ +BQADggEPADCCAQoCggEBANYTmhz+LpdYvW+1B8BrpydNlFJO+uwlDs5mbNwP1sCP +sYeJQ6RbxFRMcJdHKL37lWzwmJR31roS7amfvl/lcanLNHslAAo0QuY8hjKm/dts +imMradgmOI7+bIx7PkeqpRnsruFSuysmRqYjMdGkV0Kod4EAUR7mskPcqGY/cabq +RFbb7Qir78j1TAlmEVIpM91DKbiymSXp9QXJd4vjGm6PpvR4x3EDic1fmLnS4AcY +la3b/vHXowIbA1AYNppWwKGyJZsUvjKm6DjzDS3VGwsz/etZHOOptprdxdfXP92Y +eHMql3oxsWUVbw2Vr+enWmUA1wmz/vb+xBH2qnb0YZECAwEAAaOCFC4wghQqMAwG +A1UdEwQFMAMBAf8wHQYDVR0OBBYEFEqAvGRgOzi2DQTi1IhLYHYa2aT7MEcGA1Ud +IwRAMD6AFEqAvGRgOzi2DQTi1IhLYHYa2aT7oSGkHzAdMRswGQYDVQQDDBJ3ZWIt +cGxhdGZvcm0tdGVzdHOCAwr6ajALBgNVHQ8EBAMCAgQwggoFBgNVHR4Eggn8MIIJ +KCCCfQwE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVbm90LXdlYi1wbGF0Zm9ybS50 ZXN0MBeCFXd3dy53ZWItcGxhdGZvcm0udGVzdDAYghZ3d3cxLndlYi1wbGF0Zm9y -bS50ZXN0MBiCFnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwG4IZd3d3Lm5vdC13ZWIt -cGxhdGZvcm0udGVzdDAbghl3d3cud3d3LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3 -dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEubm90LXdlYi1wbGF0Zm9y -bS50ZXN0MByCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dy53d3cy -LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0 -MByCGnd3dzIud3d3LndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3Mi53ZWIt -cGxhdGZvcm0udGVzdDAdght3d3cxLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwHYIb -d3d3MS53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3MS53ZWItcGxh -dGZvcm0udGVzdDAfgh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdDAggh54 -bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzIubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0MCCCHnd3dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz -dDAggh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3MS53d3cu -bm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRm -b3JtLnRlc3QwIYIfd3d3Mi53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDAhgh93 -d3cyLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3Mi5ub3Qt -d2ViLXBsYXRmb3JtLnRlc3QwJIIieG4tLWx2ZS02bGFkLnd3dy53ZWItcGxhdGZv -cm0udGVzdDAkgiJ3d3cueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0MCSC -InhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02 +bS50ZXN0MBiCFnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwG4IZd3d3Lnd3dy53ZWIt +cGxhdGZvcm0udGVzdDAbghl3d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3 +dzIud3d3LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEud3d3LndlYi1wbGF0Zm9y +bS50ZXN0MByCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEubm90 +LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0 +MByCGnd3dy53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3MS53ZWIt +cGxhdGZvcm0udGVzdDAdght3d3cxLnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwHYIb +d3d3MS53d3cxLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3Mi53ZWItcGxh +dGZvcm0udGVzdDAfgh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdDAggh53 +d3cyLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzEubm90LXdl +Yi1wbGF0Zm9ybS50ZXN0MCCCHnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVz +dDAggh53d3cxLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzIu +bm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRm +b3JtLnRlc3QwIYIfd3d3MS53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdDAhgh93 +d3cyLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzIud3d3MS5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3QwJIIid3d3LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZv +cm0udGVzdDAkgiJ4bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCSC +InhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02 bGFkLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3MS54bi0tbHZlLTZsYWQu d2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRm b3JtLnRlc3QwJYIjeG4tLWx2ZS02bGFkLnd3dzIud2ViLXBsYXRmb3JtLnRlc3Qw -KIImeG4tLWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKIImd3d3 -LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02 -bGFkLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3huLS1sdmUtNmxhZC53 -d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid3d3cxLnhuLS1sdmUtNmxhZC5u -b3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYInd3d3Mi54bi0tbHZlLTZsYWQubm90LXdl +KIImd3d3LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKIImeG4t +LWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02 +bGFkLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3d3dzEueG4tLWx2ZS02 +bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid3d3cyLnhuLS1sdmUtNmxhZC5u +b3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02bGFkLnd3dzEubm90LXdl Yi1wbGF0Zm9ybS50ZXN0MCuCKXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w bGF0Zm9ybS50ZXN0MC2CK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBs -YXRmb3JtLnRlc3QwL4Itd3d3LnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w -bGF0Zm9ybS50ZXN0MC+CLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53ZWIt -cGxhdGZvcm0udGVzdDAvgi14bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2Vi +YXRmb3JtLnRlc3QwL4IteG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3LndlYi1w +bGF0Zm9ybS50ZXN0MC+CLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWIt +cGxhdGZvcm0udGVzdDAvgi13d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi LXBsYXRmb3JtLnRlc3QwMIIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi53 -ZWItcGxhdGZvcm0udGVzdDAwgi53d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh -LndlYi1wbGF0Zm9ybS50ZXN0MDCCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3 -dzEud2ViLXBsYXRmb3JtLnRlc3QwMIIud3d3MS54bi0tbjhqNmRzNTNsd3drcnFo +ZWItcGxhdGZvcm0udGVzdDAwgi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cx +LndlYi1wbGF0Zm9ybS50ZXN0MDCCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYy +OGEud2ViLXBsYXRmb3JtLnRlc3QwMIIud3d3MS54bi0tbjhqNmRzNTNsd3drcnFo djI4YS53ZWItcGxhdGZvcm0udGVzdDAxgi94bi0tbHZlLTZsYWQueG4tLWx2ZS02 -bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDAzgjF4bi0tbjhqNmRzNTNsd3drcnFo -djI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDOCMXd3dy54bi0tbjhqNmRz -NTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyeG4tLW44ajZk -czUzbHd3a3JxaHYyOGEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3 +bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDAzgjF3d3cueG4tLW44ajZkczUzbHd3 +a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDOCMXhuLS1uOGo2ZHM1M2x3 +d2tycWh2MjhhLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3Mi54bi0t +bjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3 MS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3Qw NIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi5ub3Qtd2ViLXBsYXRmb3Jt -LnRlc3QwNIIyd3d3Mi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBs -YXRmb3JtLnRlc3QwOII2eG4tLWx2ZS02bGFkLnhuLS1uOGo2ZHM1M2x3d2tycWh2 -MjhhLndlYi1wbGF0Zm9ybS50ZXN0MDiCNnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh -LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdDA8gjp4bi0tbjhqNmRzNTNs -d3drcnFodjI4YS54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDyC -OnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBs +LnRlc3QwNIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3MS5ub3Qtd2ViLXBs +YXRmb3JtLnRlc3QwOII2eG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLWx2ZS02 +bGFkLndlYi1wbGF0Zm9ybS50ZXN0MDiCNnhuLS1sdmUtNmxhZC54bi0tbjhqNmRz +NTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdDA8gjp4bi0tbHZlLTZsYWQu +eG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDyC +OnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs YXRmb3JtLnRlc3QwQ4JBeG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLW44ajZk czUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3QwR4JFeG4tLW44ajZkczUz bHd3a3JxaHYyOGEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0 Zm9ybS50ZXN0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiC EXdlYi1wbGF0Zm9ybS50ZXN0ghVub3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53 ZWItcGxhdGZvcm0udGVzdIIWd3d3MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53 -ZWItcGxhdGZvcm0udGVzdIIZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3 -Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzEud2ViLXBsYXRmb3JtLnRl -c3SCGnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxh -dGZvcm0udGVzdIIad3d3Lnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3 -LndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLnd3dy53ZWItcGxhdGZvcm0udGVzdIIb -d3d3Mi53d3cyLndlYi1wbGF0Zm9ybS50ZXN0ght3d3cxLnd3dzEud2ViLXBsYXRm -b3JtLnRlc3SCG3d3dzEud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cx +ZWItcGxhdGZvcm0udGVzdIIZd3d3Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIZd3d3 +Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3Mi53d3cud2ViLXBsYXRmb3JtLnRl +c3SCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxh +dGZvcm0udGVzdIIad3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCGnd3dy53d3cx +LndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIb +d3d3Mi53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ght3d3cxLnd3dzIud2ViLXBsYXRm +b3JtLnRlc3SCG3d3dzEud3d3MS53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cy LndlYi1wbGF0Zm9ybS50ZXN0gh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz -dIIeeG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qt -d2ViLXBsYXRmb3JtLnRlc3SCHnd3dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz -dIIed3d3Lnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cxLnd3dy5ub3Qt -d2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRl -c3SCH3d3dzIud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5u -b3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3Jt -LnRlc3SCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3SCInd3dy54 -bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qt +dIIed3d3Mi53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3MS5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCHnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVz +dIIed3d3MS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRl +c3SCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5u +b3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3Jt +LnRlc3SCInd3dy54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1s +dmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC53d3cu d2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9y bS50ZXN0giN3d3cxLnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3 Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53 -d3cyLndlYi1wbGF0Zm9ybS50ZXN0giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWIt -cGxhdGZvcm0udGVzdIImd3d3LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3Jt -LnRlc3SCJ3huLS1sdmUtNmxhZC53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIn -eG4tLWx2ZS02bGFkLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhu -LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3d3dzIueG4tLWx2ZS02 -bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYy +d3cyLndlYi1wbGF0Zm9ybS50ZXN0giZ3d3cueG4tLWx2ZS02bGFkLm5vdC13ZWIt +cGxhdGZvcm0udGVzdIImeG4tLWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3Jt +LnRlc3SCJ3huLS1sdmUtNmxhZC53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIn +d3d3MS54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cyLnhu +LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53 +d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYy OGEud2ViLXBsYXRmb3JtLnRlc3SCK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQu -d2ViLXBsYXRmb3JtLnRlc3SCLXd3dy54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53 -ZWItcGxhdGZvcm0udGVzdIIteG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Lndl -Yi1wbGF0Zm9ybS50ZXN0gi14bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2Vi +d2ViLXBsYXRmb3JtLnRlc3SCLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53 +ZWItcGxhdGZvcm0udGVzdIIteG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdl +Yi1wbGF0Zm9ybS50ZXN0gi13d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2Vi -LXBsYXRmb3JtLnRlc3SCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2Vi +LXBsYXRmb3JtLnRlc3SCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi LXBsYXRmb3JtLnRlc3SCLnd3dzEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi LXBsYXRmb3JtLnRlc3SCL3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdl -Yi1wbGF0Zm9ybS50ZXN0gjF4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90 -LXdlYi1wbGF0Zm9ybS50ZXN0gjF3d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEu -bm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53 -d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIyd3d3MS54bi0tbjhqNmRzNTNsd3dr +Yi1wbGF0Zm9ybS50ZXN0gjF3d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90 +LXdlYi1wbGF0Zm9ybS50ZXN0gjF4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cu +bm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2 +MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdIIyd3d3MS54bi0tbjhqNmRzNTNsd3dr cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2ty -cWh2MjhhLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2 -ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02 -bGFkLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gjZ4 -bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3Jt -LnRlc3SCOnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qt -d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3dr -cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty +cWh2MjhhLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNs +d3drcnFodjI4YS53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdII2eG4tLW44ajZk +czUzbHd3a3JxaHYyOGEueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gjZ4 +bi0tbHZlLTZsYWQueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3Jt +LnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1s +dmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty cWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0 gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4 -YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAGScyqdj -uxMwU2CgtFG8+oQK0sWMb2yQibpyvfhZ2PSnfsTNNNyfQRSK2mnPWizjE2Ocx63S -TEIjsA/veH/kfWdxxXie93VFyacy/LTyETEb40a5UMJA6Im9LkT2Fpp/SLSxAapA -Hj7fCIaVBpuCVbPDkKxa+zZj9mc7p6Z6o1dwtbzkR4NqoCElcHwjwYo0zlqNq1jc -BLHeoDASFi0RD1x0mNlVmDIg/hJqdN8jbPm+LOxKVgey1Fq7tsz29MJR6Hbf9kYT -A6kIiYuDODSXWIxWYRlWgJaaI35FJqWeRtpBZaDLSontIN4X3cnTChYJREVNmFGx -xmf4NMjFPYpIFUE= +YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAGevd/IN +6PpofThgH2cAwCPr13Cc+QyPXucqpv9Y01H1Yf9ZHalX6o+9OD9m3XoQqSKqnlV9 +Kk/FIL9Ihb4I4QxVNeWWYJfQ1a6VZDsHFAEJCLI1gLPd09A0gh2f2d9DirDbE4OT +wKICpj+pOnJ/4UiqS1h3YjbyUNVCgJTNSUqsCUKM2OmOd6mejwRUsnP+tSU2JhfD +O6ZwV3Rq+wvgGl+bOV6UE/zng9K0YGgjVwISE4sLtq744DaXeRCqlkvC4D9dqph6 +P37T/XA7oofDR7La+7gi9sHAWQmNvmF++wBIBRkIHxY9OpP+bjc/yp6u0hde6Z2z +EFlk8xJ53JMsp8Y= -----END CERTIFICATE----- diff --git a/tests/wpt/tests/tools/certs/web-platform.test.key b/tests/wpt/tests/tools/certs/web-platform.test.key index 2516ae74593..f11ffba2589 100644 --- a/tests/wpt/tests/tools/certs/web-platform.test.key +++ b/tests/wpt/tests/tools/certs/web-platform.test.key @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCt6FXDpHkmyFOj -ZJkJRgmCvTwlEb01AE7qLz0+ScHH3d1a2HJMAkz/rEkZ/XYtdpXNclkuF5pFvzg3 -99C3sa42K6SK5u2VLURaC5L7a4laIYJC/FHmQhupw4CP9oSw+lr/4AY0gadIw1p7 -nzHJmC7zj67bcwKXVGlznBfQkRwTDrfynHjq3e/oqveTamzW2ifxfggcOJcNPZ90 -F7jkPgP2HoJWM8TLP0EPvOtKoyaJET1+qtxAg2IN96o/8bQo/RYJm4U8RZ7vabXy -44+KFhNOIzmF3iMRESUAPyaOV1T5rgNguHQ2eztudw0A1N3WpA1bp/AE+0zh0T0t -AikZSBPbAgMBAAECggEAKZLYJdwExluveukKmKfwkBuS7D2wYKJBO0StvF0/gPst -9pC1yivmolxaYWcxQC8QIrwKS7WCwNe0pdSNRcypG/QU8su/0iCvLWOE8KvFexF1 -pXPSVFxLZqsA6emB0RkYdgDlGto/1mo1EEZ/TXUfDES2BWoaHXkleGjBXK/D6V3/ -cCk3IV5g0wQVpN2V+vmCFAJEJ2Y379CEyBja9i3/mor4uLrsib5mi5o0jDMtEPgE -qHu0Zy48GtNhAoTBf2TdxGJJt1nqErc11s3ItVcitEKlxmkXrKFXH4uCGBEC204z -x7p1B4YlNl2E8KJddmE+auYD18o5bPsYElgtIYf5qQKBgQDbV1BTERBH4sT/3O9E -kwYgTHOz7aLXr/PPCI0vr+0F4TECTVKJgjf8TV7R9nj4zyYnHxsBwfZt9kDvTXrT -X1/9DToYNNm4VkomDZ4CGo6uI0OAvcX+hNdivLtWIz0ywjaBZ1oMJf9by/gI/AP0 -bMzIcBQcz+mxmZ1H+hXA2lXD/wKBgQDK+RyLYOURinNUyWYt3EXviN1K/Ove3hb4 -bUd1f2ZR4ZPrZNTK2shrgGPyPJctzjpHCszNyJwYmGqrfbflHX9nsSI0WeVZgfLM -LIVFOhETcbwuem6c8ivO9jt7hbO3Hl4UxkT8PIza79Jgtqw+OP0mGbso6gi2y54i -gLbrGh1AJQKBgQC2XKnT5mP64HeZoz7rbLGzON0Zw4GYghnbD+kStNoEAW6V02PE -IBgcFNe5CYsakl/ONvZlR7ZzRkJGs8xi4PEVm2Gproc108hiSwAMD7iA36DH8QAk -1J2e4ft/alz/TqmyfRNI9m6RC8x069L97Vd1bnnKWrKZjnZN2YcsiFq2UQKBgDk6 -T5AEu9FcRfRL7KFVj+pfnnU8Jozp9XQJ67H3P7Qqc/hUr6KaWRPmWUe9SarCkK/j -HaePvmM45iqAAc95p6hmywwTpJS+DOUAUHsaSiI/WR2Jq5JYvX1W86J6KhehWkll -NaIguF4qbBiUqK/KhaWub5Szl81iT63OuMRE0qZ5AoGAX0M1yGNcCgJ0V7gDSjXG -JNq5AH9Qo/aF7EAz9oLZBs3NRsuz61x40fVNurc7BoRTnjKSM9GF/U0i+0j2sWth -Pw7Zl0bfJK3oslO8qqqt730X6KjGXNlqoalWfsMTcBTvO8kzJhyF6zcKyGAJISuW -W6PveJHKQ5L8SwwxyN4LkoQ= +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCyoagpfWeBqUrn +aTFYZUuc8DZqDqmpB+jvGNj9vU/XOctNG+0XWI/uCa9p8kS1ugu0eo+85hvqHQpL +laxI3avZp/l5HhQIUC+TjxtXNbO6bhkbhSb082qG/8zhCY08mJyob8z5ED+p7FBY +YbHmqx1yySEo6urLin49MxRnswp46Jzx2S3Oc2BmltX6dvsgPrdxxDjCXH+BD+Y/ +dl5p03OxoLjkxMZHR3Qt3JLu+MpoAEteyDNqO5dIDXK9yQePhxMnf4Fg1MANhCjS +2PTu7f5VTFmoLTsCaZiZum3zNkT/UOnIhz8knUAqhtXZ2PbCiEKmVqK3k/Pj8YOS +R9lCCEa9AgMBAAECggEAGKn9wYjJTLEBdh/jSny7VXZ3VOp5s4HeQCZyo4pK5qva +AxIQM5EsrPsVB3Bbhf9OVBjjatDCLu+GjIwkccUlpWkDfEfSZUQeZZCJ/7RwVeqT +YzuIdvl7DnEYVUQP27uIpIXB9pZZ6/jZ2RzYHEIpJUBZveq9s4/c6/n3CcsXRD1C +l+rem/LDIFaO/WyDPMpK4CQ+ChgjxtAS4CkS1RsgRjyqr9chvDpm/lB8V6Kxbofh +7wR9rgm+TgzuvomY1cnWEaSgIJ8LaljSxr/cmWrzVM9LIoOKZy7uyuNxCGtToyEE +Z7Hm0etfHP0SkmWocJtwk7vWgcKmpOkqQkWFeordswKBgQDsGJY+665Y0U6WNjsK +5qgDm3/NbWnbtgq54Z8FVsuca9crRQBfNlCwWRrc/BLDn4i3/eb2KU3CpfKv498S +M5BMgaPUvrMxZIagn5ydjoMAEoP8y4om7NcSlUY5lnemPLbX/tsoBsypPrDkXFPW +592UgaQNbDzwLoQzv7TnqACtPwKBgQDBsN9aXkXNm4F2g8S4c0JISApohYEPYBqC +Pxv3wzflfiAsPK7tecv8zYsHg0yZHcie7b4YqccFFlhk39EqP2d1RjhEhTjpD+pc +hruF1isLPmdJ5fL/fKGntlYFNImobW/glqtMOAowYBBUU1iK4qv3jHieH307yMiM +zP4lK2cBAwKBgGFqL6wckJ6DFlryW2A/FboPUidP6urF7R0PVA7e5jpPYMOwv9uJ +TLfGvEfMFm3zCHVqZP7Swgv7buxWKHeZIQQARboFSWiq4sWptfRolfLUsPMAhKtU +89TuFMC0LgBAcu0icgjM7Wszu8cttUYp+4pIB4mmTGqJtvCnPByNfGH/AoGAKPxw +hwLj6no5jwabHhzlrb3w1eVKRiKj+WO5W1hn/5wM2s+MhJv9WmV0Qga6srvmtBrC +2x0yDBWKZu4lqLb6AYr2ZSl7vXWsth+cltmXCi4OVUjffsi0vHSNB1TyvD1MK042 +uU4yecIaMn3ggqMsmJmU/IDVU01Ngt3t+ZeRmFkCgYEA5xVDH5MSYPqOiOS6wePf +TU9j7XHQUlrT7xyZCn3hAVg1ZhuVtukxSj1Wu8dpJjccEjb2MBMgWw2TJsiKaHBT +sFCevu+56UNq/YFm+8QP4ifGIeV/FCdUsgrhO6+TdRgFLrWcFjXi3CbGjb+PYhza +gfmGAxeKXDS6s73sJbHEyZo= -----END PRIVATE KEY----- diff --git a/tests/wpt/tests/tools/certs/web-platform.test.pem b/tests/wpt/tests/tools/certs/web-platform.test.pem index ad77f3e9e14..b6f1c1c1cae 100644 --- a/tests/wpt/tests/tools/certs/web-platform.test.pem +++ b/tests/wpt/tests/tools/certs/web-platform.test.pem @@ -1,133 +1,133 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 76839 (0x12c27) + Serial Number: 719467 (0xafa6b) Signature Algorithm: sha256WithRSAEncryption Issuer: CN=web-platform-tests Validity - Not Before: Apr 12 01:11:59 2025 GMT - Not After : Apr 12 01:11:59 2026 GMT + Not Before: Jun 12 01:18:38 2025 GMT + Not After : Jun 12 01:18:38 2026 GMT Subject: CN=web-platform.test Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: - 00:ad:e8:55:c3:a4:79:26:c8:53:a3:64:99:09:46: - 09:82:bd:3c:25:11:bd:35:00:4e:ea:2f:3d:3e:49: - c1:c7:dd:dd:5a:d8:72:4c:02:4c:ff:ac:49:19:fd: - 76:2d:76:95:cd:72:59:2e:17:9a:45:bf:38:37:f7: - d0:b7:b1:ae:36:2b:a4:8a:e6:ed:95:2d:44:5a:0b: - 92:fb:6b:89:5a:21:82:42:fc:51:e6:42:1b:a9:c3: - 80:8f:f6:84:b0:fa:5a:ff:e0:06:34:81:a7:48:c3: - 5a:7b:9f:31:c9:98:2e:f3:8f:ae:db:73:02:97:54: - 69:73:9c:17:d0:91:1c:13:0e:b7:f2:9c:78:ea:dd: - ef:e8:aa:f7:93:6a:6c:d6:da:27:f1:7e:08:1c:38: - 97:0d:3d:9f:74:17:b8:e4:3e:03:f6:1e:82:56:33: - c4:cb:3f:41:0f:bc:eb:4a:a3:26:89:11:3d:7e:aa: - dc:40:83:62:0d:f7:aa:3f:f1:b4:28:fd:16:09:9b: - 85:3c:45:9e:ef:69:b5:f2:e3:8f:8a:16:13:4e:23: - 39:85:de:23:11:11:25:00:3f:26:8e:57:54:f9:ae: - 03:60:b8:74:36:7b:3b:6e:77:0d:00:d4:dd:d6:a4: - 0d:5b:a7:f0:04:fb:4c:e1:d1:3d:2d:02:29:19:48: - 13:db + 00:b2:a1:a8:29:7d:67:81:a9:4a:e7:69:31:58:65: + 4b:9c:f0:36:6a:0e:a9:a9:07:e8:ef:18:d8:fd:bd: + 4f:d7:39:cb:4d:1b:ed:17:58:8f:ee:09:af:69:f2: + 44:b5:ba:0b:b4:7a:8f:bc:e6:1b:ea:1d:0a:4b:95: + ac:48:dd:ab:d9:a7:f9:79:1e:14:08:50:2f:93:8f: + 1b:57:35:b3:ba:6e:19:1b:85:26:f4:f3:6a:86:ff: + cc:e1:09:8d:3c:98:9c:a8:6f:cc:f9:10:3f:a9:ec: + 50:58:61:b1:e6:ab:1d:72:c9:21:28:ea:ea:cb:8a: + 7e:3d:33:14:67:b3:0a:78:e8:9c:f1:d9:2d:ce:73: + 60:66:96:d5:fa:76:fb:20:3e:b7:71:c4:38:c2:5c: + 7f:81:0f:e6:3f:76:5e:69:d3:73:b1:a0:b8:e4:c4: + c6:47:47:74:2d:dc:92:ee:f8:ca:68:00:4b:5e:c8: + 33:6a:3b:97:48:0d:72:bd:c9:07:8f:87:13:27:7f: + 81:60:d4:c0:0d:84:28:d2:d8:f4:ee:ed:fe:55:4c: + 59:a8:2d:3b:02:69:98:99:ba:6d:f3:36:44:ff:50: + e9:c8:87:3f:24:9d:40:2a:86:d5:d9:d8:f6:c2:88: + 42:a6:56:a2:b7:93:f3:e3:f1:83:92:47:d9:42:08: + 46:bd Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Subject Key Identifier: - 7C:BC:FA:E4:3E:89:B6:48:D0:26:6C:18:26:E2:CC:74:5E:76:5E:C3 + D6:4A:B3:AC:80:DE:98:80:19:04:63:9C:B3:6A:0C:66:CF:B9:5F:D2 X509v3 Authority Key Identifier: - 41:1D:58:CB:6E:F8:9A:9C:52:82:F4:AA:BC:92:E6:56:A3:31:0C:AB + 4A:80:BC:64:60:3B:38:B6:0D:04:E2:D4:88:4B:60:76:1A:D9:A4:FB X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Alternative Name: - DNS:web-platform.test, DNS:not-web-platform.test, DNS:www.web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.not-web-platform.test, DNS:www.www.web-platform.test, DNS:www.www1.web-platform.test, DNS:www1.not-web-platform.test, DNS:www2.not-web-platform.test, DNS:www.www2.web-platform.test, DNS:www1.www.web-platform.test, DNS:www2.www.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www1.www2.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www.www.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:www1.www.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test + DNS:web-platform.test, DNS:not-web-platform.test, DNS:www.web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.www.web-platform.test, DNS:www.not-web-platform.test, DNS:www2.www.web-platform.test, DNS:www1.www.web-platform.test, DNS:www2.not-web-platform.test, DNS:www1.not-web-platform.test, DNS:www.www1.web-platform.test, DNS:www.www2.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www1.www2.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www.www.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www1.www.not-web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test Signature Algorithm: sha256WithRSAEncryption Signature Value: - 62:c7:66:39:0f:01:0e:9e:52:15:2f:74:09:4a:d8:33:d4:21: - 64:69:d7:4a:68:9e:84:39:be:d1:f7:4d:73:aa:62:06:b1:30: - 2b:4b:a0:9c:56:8d:a2:18:62:d6:5a:03:12:1a:ac:ed:c5:be: - 01:5b:d7:1a:e3:5c:46:35:47:88:95:af:a9:53:69:94:c8:0e: - 09:df:79:d8:6e:ce:44:27:df:b6:70:76:7f:ab:20:0b:fd:ef: - 23:9a:b2:19:3f:ae:1e:74:79:17:ed:bf:1a:14:44:43:f9:6a: - ad:f7:c6:e7:bb:16:3a:1f:70:a9:e6:22:c8:29:89:cf:05:ef: - 95:32:f9:a2:fe:55:3f:59:da:b8:d6:84:81:e8:86:e2:7a:2d: - 37:ac:89:46:cc:08:82:9e:27:2d:ac:92:0e:27:63:69:77:f6: - 42:e3:bd:87:f8:ef:72:e3:87:43:e5:ea:e3:e8:57:b0:f6:c2: - 08:e4:e7:b4:27:59:c9:6c:4c:96:b0:a6:02:27:82:24:ce:58: - c8:aa:50:48:de:dd:3e:8e:da:ec:42:94:55:37:68:8e:8a:5a: - f4:44:8e:f8:8e:81:51:31:c8:eb:04:43:78:b6:89:a4:76:09: - c1:7b:53:58:41:96:c6:ae:91:ca:a8:45:02:d9:e4:bc:eb:d4: - b0:5b:a3:be + ad:fd:86:c0:90:e1:59:8a:1b:7d:50:fe:c8:cd:6a:26:ee:b6: + 64:0b:46:92:88:10:2e:bc:8d:fd:9f:e9:72:95:56:3e:bc:4b: + a5:11:9b:ab:ec:d8:68:bc:0e:f3:0b:d0:ef:89:b3:d9:47:8a: + 2f:dc:fa:84:0b:74:0e:64:e6:ae:2a:4e:46:76:0c:9c:04:86: + eb:ed:1b:d6:ca:0c:58:7b:82:a8:95:df:63:3d:0c:1b:89:91: + af:02:4c:d0:c9:4c:5d:96:e1:4a:8d:37:a8:81:54:9f:75:1c: + 7d:f6:19:83:fe:b4:1c:1f:f3:5f:ae:5a:45:1c:30:99:04:14: + 5f:10:55:50:8c:0a:da:61:ff:2b:f4:c7:18:fd:22:6f:3d:7d: + b8:1f:6c:de:1d:e6:be:ec:2d:72:48:4f:f5:5c:9d:eb:3b:b9: + c9:bb:55:d8:1a:c7:52:fd:9d:33:7d:74:29:7d:22:66:bf:76: + 5e:dd:3d:9e:3b:a8:5d:f7:80:8a:37:d4:2e:6a:88:1e:41:ed: + a0:6e:e4:1d:d1:47:85:07:cf:ab:9f:66:b3:a6:35:5d:84:e3: + 70:ac:95:f9:7a:48:fb:af:b9:93:72:5e:81:41:c0:c0:08:db: + eb:31:f7:3f:64:d2:5c:75:60:f7:8a:5c:f3:06:a8:42:e8:3c: + 3d:c6:81:9b -----BEGIN CERTIFICATE----- -MIIMsjCCC5qgAwIBAgIDASwnMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl -Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNTA0MTIwMTExNTlaFw0yNjA0MTIwMTExNTla +MIIMsjCCC5qgAwIBAgIDCvprMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl +Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNTA2MTIwMTE4MzhaFw0yNjA2MTIwMTE4Mzha MBwxGjAYBgNVBAMMEXdlYi1wbGF0Zm9ybS50ZXN0MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArehVw6R5JshTo2SZCUYJgr08JRG9NQBO6i89PknBx93d -WthyTAJM/6xJGf12LXaVzXJZLheaRb84N/fQt7GuNiukiubtlS1EWguS+2uJWiGC -QvxR5kIbqcOAj/aEsPpa/+AGNIGnSMNae58xyZgu84+u23MCl1Rpc5wX0JEcEw63 -8px46t3v6Kr3k2ps1ton8X4IHDiXDT2fdBe45D4D9h6CVjPEyz9BD7zrSqMmiRE9 -fqrcQINiDfeqP/G0KP0WCZuFPEWe72m18uOPihYTTiM5hd4jERElAD8mjldU+a4D -YLh0Nns7bncNANTd1qQNW6fwBPtM4dE9LQIpGUgT2wIDAQABo4IJ+jCCCfYwCQYD -VR0TBAIwADAdBgNVHQ4EFgQUfLz65D6JtkjQJmwYJuLMdF52XsMwHwYDVR0jBBgw -FoAUQR1Yy274mpxSgvSqvJLmVqMxDKswCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG +AAOCAQ8AMIIBCgKCAQEAsqGoKX1ngalK52kxWGVLnPA2ag6pqQfo7xjY/b1P1znL +TRvtF1iP7gmvafJEtboLtHqPvOYb6h0KS5WsSN2r2af5eR4UCFAvk48bVzWzum4Z +G4Um9PNqhv/M4QmNPJicqG/M+RA/qexQWGGx5qsdcskhKOrqy4p+PTMUZ7MKeOic +8dktznNgZpbV+nb7ID63ccQ4wlx/gQ/mP3ZeadNzsaC45MTGR0d0LdyS7vjKaABL +XsgzajuXSA1yvckHj4cTJ3+BYNTADYQo0tj07u3+VUxZqC07AmmYmbpt8zZE/1Dp +yIc/JJ1AKobV2dj2wohCplait5Pz4/GDkkfZQghGvQIDAQABo4IJ+jCCCfYwCQYD +VR0TBAIwADAdBgNVHQ4EFgQU1kqzrIDemIAZBGOcs2oMZs+5X9IwHwYDVR0jBBgw +FoAUSoC8ZGA7OLYNBOLUiEtgdhrZpPswCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG CCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiCEXdlYi1wbGF0Zm9ybS50ZXN0ghVu b3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53ZWItcGxhdGZvcm0udGVzdIIWd3d3 MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53ZWItcGxhdGZvcm0udGVzdIIZd3d3 -Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3Lnd3dy53ZWItcGxhdGZvcm0udGVz -dIIad3d3Lnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEubm90LXdlYi1wbGF0 -Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzIu -d2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0ghp3 -d3cyLnd3dy53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cyLndlYi1wbGF0Zm9y -bS50ZXN0ght3d3cxLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzEud3d3Mi53 -ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cxLndlYi1wbGF0Zm9ybS50ZXN0gh13 -d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIeeG4tLWx2ZS02bGFkLndlYi1w -bGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCHnd3 -dzIud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Lnd3dzEubm90LXdlYi1w -bGF0Zm9ybS50ZXN0gh53d3cxLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3 -dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5ub3Qtd2Vi -LXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC -H3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC53 -d3cud2ViLXBsYXRmb3JtLnRlc3SCInd3dy54bi0tbHZlLTZsYWQud2ViLXBsYXRm -b3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCI3hu +Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz +dIIad3d3Mi53d3cud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3LndlYi1wbGF0 +Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3MS5ub3Qt +d2ViLXBsYXRmb3JtLnRlc3SCGnd3dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ghp3 +d3cud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cxLndlYi1wbGF0Zm9y +bS50ZXN0ght3d3cxLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzEud3d3MS53 +ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cyLndlYi1wbGF0Zm9ybS50ZXN0gh13 +d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Mi53d3cubm90LXdlYi1w +bGF0Zm9ybS50ZXN0gh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCHnhu +LS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIed3d3MS53d3cubm90LXdlYi1w +bGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3 +dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3MS5ub3Qtd2Vi +LXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC +H3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInd3dy54bi0tbHZlLTZs +YWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRm +b3JtLnRlc3SCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3SCI3hu LS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9ybS50ZXN0giN3d3cxLnhuLS1sdmUt NmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBs YXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9ybS50ZXN0 -giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIImd3d3Lnhu -LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53 -d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIneG4tLWx2ZS02bGFkLnd3dzIubm90 -LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs -YXRmb3JtLnRlc3SCJ3d3dzIueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0u +giZ3d3cueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIImeG4tLWx2 +ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53 +d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIInd3d3MS54bi0tbHZlLTZsYWQubm90 +LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cyLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs +YXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53d3cxLm5vdC13ZWItcGxhdGZvcm0u dGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SC -K3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCLXd3 -dy54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdIIteG4t -LW44ajZkczUzbHd3a3JxaHYyOGEud3d3LndlYi1wbGF0Zm9ybS50ZXN0gi14bi0t -bjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u -OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzIu +K3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCLXhu +LS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53ZWItcGxhdGZvcm0udGVzdIIteG4t +LW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gi13d3cu eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u -OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzEu +OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u +OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzIu +eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzEu eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCL3huLS1s -dmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF4bi0t -bjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF3 -d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0 -gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cxLm5vdC13ZWItcGxhdGZvcm0u +dmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF3d3cu +eG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF4 +bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0 +gjJ3d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0u dGVzdIIyd3d3MS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRm b3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIubm90LXdlYi1w -bGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13 -ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02bGFkLnhuLS1uOGo2ZHM1M2x3d2ty -cWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gjZ4bi0tbjhqNmRzNTNsd3drcnFodjI4 -YS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1uOGo2ZHM1M2x3 -d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCOnhu -LS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRm +bGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cxLm5vdC13 +ZWItcGxhdGZvcm0udGVzdII2eG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLWx2 +ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gjZ4bi0tbHZlLTZsYWQueG4tLW44ajZk +czUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54 +bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCOnhu +LS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRm b3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1uOGo2ZHM1M2x3 d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gkV4bi0tbjhqNmRzNTNsd3drcnFo djI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRl -c3QwDQYJKoZIhvcNAQELBQADggEBAGLHZjkPAQ6eUhUvdAlK2DPUIWRp10ponoQ5 -vtH3TXOqYgaxMCtLoJxWjaIYYtZaAxIarO3FvgFb1xrjXEY1R4iVr6lTaZTIDgnf -edhuzkQn37Zwdn+rIAv97yOashk/rh50eRftvxoUREP5aq33xue7FjofcKnmIsgp -ic8F75Uy+aL+VT9Z2rjWhIHohuJ6LTesiUbMCIKeJy2skg4nY2l39kLjvYf473Lj -h0Pl6uPoV7D2wgjk57QnWclsTJawpgIngiTOWMiqUEje3T6O2uxClFU3aI6KWvRE -jviOgVExyOsEQ3i2iaR2CcF7U1hBlsaukcqoRQLZ5Lzr1LBbo74= +c3QwDQYJKoZIhvcNAQELBQADggEBAK39hsCQ4VmKG31Q/sjNaibutmQLRpKIEC68 +jf2f6XKVVj68S6URm6vs2Gi8DvML0O+Js9lHii/c+oQLdA5k5q4qTkZ2DJwEhuvt +G9bKDFh7gqiV32M9DBuJka8CTNDJTF2W4UqNN6iBVJ91HH32GYP+tBwf81+uWkUc +MJkEFF8QVVCMCtph/yv0xxj9Im89fbgfbN4d5r7sLXJIT/Vcnes7ucm7Vdgax1L9 +nTN9dCl9Ima/dl7dPZ47qF33gIo31C5qiB5B7aBu5B3RR4UHz6ufZrOmNV2E43Cs +lfl6SPuvuZNyXoFBwMAI2+sx9z9k0lx1YPeKXPMGqELoPD3GgZs= -----END CERTIFICATE----- diff --git a/tests/wpt/tests/tools/ci/azure/affected_tests.yml b/tests/wpt/tests/tools/ci/azure/affected_tests.yml deleted file mode 100644 index 566021d2496..00000000000 --- a/tests/wpt/tests/tools/ci/azure/affected_tests.yml +++ /dev/null @@ -1,27 +0,0 @@ -parameters: - checkoutCommit: '' - affectedRange: 'HEAD^1' - artifactName: '' - -steps: -- template: checkout.yml -- ${{ if ne(parameters.checkoutCommit, '') }}: - - script: | - set -eux -o pipefail - git checkout ${{ parameters.checkoutCommit }} - displayName: 'Checkout ${{ parameters.checkoutCommit }}' -- template: install_certs.yml -- template: color_profile.yml -- template: install_safari.yml -- template: update_hosts.yml -- template: update_manifest.yml -- script: | - set -eux -o pipefail - export SYSTEM_VERSION_COMPAT=0 - ./wpt run --yes --no-pause --no-fail-on-unexpected --no-restart-on-unexpected --affected ${{ parameters.affectedRange }} --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report.json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot.txt --channel preview --kill-safari safari - displayName: 'Run tests' -- task: PublishBuildArtifacts@1 - displayName: 'Publish results' - inputs: - artifactName: '${{ parameters.artifactName }}' - condition: succeededOrFailed() diff --git a/tests/wpt/tests/tools/ci/azure/com.apple.SafariTechnologyPreview.plist b/tests/wpt/tests/tools/ci/azure/com.apple.SafariTechnologyPreview.plist deleted file mode 100644 index 122080972c9..00000000000 --- a/tests/wpt/tests/tools/ci/azure/com.apple.SafariTechnologyPreview.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - AllowRemoteAutomation - - - diff --git a/tests/wpt/tests/tools/ci/azure/install_fonts.yml b/tests/wpt/tests/tools/ci/azure/install_fonts.yml deleted file mode 100644 index 279c262c7ef..00000000000 --- a/tests/wpt/tests/tools/ci/azure/install_fonts.yml +++ /dev/null @@ -1,7 +0,0 @@ -steps: -# Installig Ahem in /Library/Fonts instead of using --install-fonts is a -# workaround for https://github.com/web-platform-tests/wpt/issues/13803. -- script: | - set -eux -o pipefail - sudo cp fonts/Ahem.ttf /Library/Fonts - displayName: 'Install Ahem font' diff --git a/tests/wpt/tests/tools/ci/azure/install_safari.yml b/tests/wpt/tests/tools/ci/azure/install_safari.yml deleted file mode 100644 index 1a398532dac..00000000000 --- a/tests/wpt/tests/tools/ci/azure/install_safari.yml +++ /dev/null @@ -1,29 +0,0 @@ -parameters: - channel: preview - -# Should match https://web-platform-tests.org/running-tests/safari.html -steps: -- script: defaults write com.apple.WebDriver DiagnosticsEnabled 1 - displayName: 'Enable safaridriver diagnostics' - condition: eq(variables['safaridriver_diagnose'], true) -- ${{ if eq(parameters.channel, 'preview') }}: - - script: | - set -eux -o pipefail - export SYSTEM_VERSION_COMPAT=0 - ./wpt install --channel preview --download-only -d . --rename STP safari browser - sudo installer -pkg STP.pkg -target LocalSystem - # Workaround for `sudo safardriver --enable` not working on Catalina: - # https://github.com/web-platform-tests/wpt/issues/21751 - mkdir -p ~/Library/WebDriver/ - cp tools/ci/azure/com.apple.SafariTechnologyPreview.plist ~/Library/WebDriver/ - defaults write com.apple.SafariTechnologyPreview WebKitJavaScriptCanOpenWindowsAutomatically 1 - defaults write com.apple.SafariTechnologyPreview ExperimentalServerTimingEnabled 1 - displayName: 'Install Safari Technology Preview' -- ${{ if eq(parameters.channel, 'stable') }}: - - script: | - set -eux -o pipefail - export SYSTEM_VERSION_COMPAT=0 - sudo softwareupdate --install $( softwareupdate -l | grep -o '\* Label: \(Safari.*\)' | sed -e 's/* Label: //' ) - sudo safaridriver --enable - defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically 1 - displayName: 'Configure Safari' diff --git a/tests/wpt/tests/tools/ci/ci_tools_unittest.sh b/tests/wpt/tests/tools/ci/ci_tools_unittest.sh index 8e16ee18dec..9767e95984e 100755 --- a/tests/wpt/tests/tools/ci/ci_tools_unittest.sh +++ b/tests/wpt/tests/tools/ci/ci_tools_unittest.sh @@ -5,23 +5,10 @@ SCRIPT_DIR=$(cd $(dirname "$0") && pwd -P) WPT_ROOT=$SCRIPT_DIR/../.. cd $WPT_ROOT -run_applicable_tox () { - # instead of just running TOXENV (e.g., py38) - # run all environments that start with TOXENV - # (e.g., py38-firefox as well as py38) - local OLD_TOXENV="$TOXENV" - unset TOXENV - local RUN_ENVS=$(tox -l | grep "^${OLD_TOXENV}\(\-\|\$\)" | tr "\n" ",") - if [[ -n "$RUN_ENVS" ]]; then - tox -e "$RUN_ENVS" - fi - export TOXENV="$OLD_TOXENV" -} - if ./wpt test-jobs --includes tools_unittest; then pip install --user -U tox cd tools - run_applicable_tox + tox -f "$TOXENV" cd $WPT_ROOT else echo "Skipping tools unittest" @@ -29,7 +16,7 @@ fi if ./wpt test-jobs --includes wptrunner_unittest; then cd tools/wptrunner - run_applicable_tox + tox -f "$TOXENV" cd $WPT_ROOT else echo "Skipping wptrunner unittest" diff --git a/tests/wpt/tests/tools/webdriver/webdriver/bidi/modules/bluetooth.py b/tests/wpt/tests/tools/webdriver/webdriver/bidi/modules/bluetooth.py index d18fafa1a91..d574b6f391d 100644 --- a/tests/wpt/tests/tools/webdriver/webdriver/bidi/modules/bluetooth.py +++ b/tests/wpt/tests/tools/webdriver/webdriver/bidi/modules/bluetooth.py @@ -23,15 +23,24 @@ class Bluetooth(BidiModule): } @command - def simulate_adapter(self, context: str, state: str, type_: str) -> Mapping[str, Any]: + def simulate_adapter(self, context: str, state: str) -> Mapping[str, Any]: """ Represents a command `bluetooth.simulateAdapter` specified in https://webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulateAdapter-command """ return { "context": context, - "state": state, - "type": type_ + "state": state + } + + @command + def disable_simulation(self, context: str) -> Mapping[str, Any]: + """ + Represents a command `bluetooth.disableSimulation` specified in + https://webbluetoothcg.github.io/web-bluetooth/#bluetooth-disableSimulation-command + """ + return { + "context": context, } @command @@ -52,3 +61,31 @@ class Bluetooth(BidiModule): "manufacturerData": manufacturer_data, "knownServiceUuids": known_service_uuids } + + @command + def simulate_gatt_connection_response(self, + context: str, + address: str, + code: int) -> Mapping[str, Any]: + """ + Represents a command `bluetooth.simulate_gatt_connection_response` specified in + https://webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulategattconnectionresponse-command + """ + return { + "context": context, + "address": address, + "code": code, + } + + @command + def simulate_gatt_disconnection(self, + context: str, + address: str) -> Mapping[str, Any]: + """ + Represents a command `bluetooth.simulate_gatt_disconnection` specified in + https://webbluetoothcg.github.io/web-bluetooth/#bluetooth-simulategattdisconnection-command + """ + return { + "context": context, + "address": address + } diff --git a/tests/wpt/tests/tools/webtransport/h3/webtransport_h3_server.py b/tests/wpt/tests/tools/webtransport/h3/webtransport_h3_server.py index d2a31a93c9e..eca779a3f58 100644 --- a/tests/wpt/tests/tools/webtransport/h3/webtransport_h3_server.py +++ b/tests/wpt/tests/tools/webtransport/h3/webtransport_h3_server.py @@ -411,7 +411,7 @@ class WebTransportSession: :param data: The data to send. """ if not self._protocol._allow_datagrams: - _logger.warn( + _logger.warning( "Sending a datagram while that's not allowed - discarding it") return stream_id = self.session_id @@ -453,7 +453,7 @@ class WebTransportEventHandler: try: self._callbacks[callback_name](*args, **kwargs) except Exception as e: - _logger.warn(str(e)) + _logger.warning(str(e)) traceback.print_exc() def connect_received(self, response_headers: List[Tuple[bytes, @@ -538,7 +538,7 @@ class WebTransportH3Server: try: secrets_log_file = open(os.environ["SSLKEYLOGFILE"], "a") except Exception as e: - _logger.warn(str(e)) + _logger.warning(str(e)) # Workaround https://github.com/aiortc/aioquic/issues/567 with if/else if secrets_log_file is not None: diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py index f1e7df1d4c7..abbe55d4da3 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py @@ -2,7 +2,7 @@ # DO NOT EDIT MANUALLY. # tools/certs/web-platform.test.pem -WPT_FINGERPRINT = 'w8nmBfff+kNkigb6RX+eQYKYR50daj4tOqmfn3haN6o=' +WPT_FINGERPRINT = '0BFjPjhH1jzif+9C8nnl+d94xL0i/PK6o1CJnqnHKps=' # signed-exchange/resources/127.0.0.1.sxg.pem SXG_WPT_FINGERPRINT = '0Rt4mT6SJXojEMHTnKnlJ/hBKMBcI4kteBlhR1eTTdk=' diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py index e5635c361cc..2f7b0e81957 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox.py @@ -231,6 +231,7 @@ def run_info_extras(logger, default_prefs=None, **kwargs): "swgl": bool_pref("gfx.webrender.software"), "privateBrowsing": bool_pref("browser.privatebrowsing.autostart"), "remoteAsyncEvents": bool_pref("remote.events.async.wheel.enabled"), + "remoteCNM": not bool_pref("remote.parent-navigation.enabled"), "incOriginInit": os.environ.get("MOZ_ENABLE_INC_ORIGIN_INIT") == "1", } rv.update(run_info_browser_version(**kwargs)) @@ -263,6 +264,7 @@ def update_properties(): "asan", "tsan", "remoteAsyncEvents", + "remoteCNM" "sessionHistoryInParent", "subsuite"], { "os": ["version"], diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/asyncactions.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/asyncactions.py index 9f7f313f203..7255f04ac36 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/asyncactions.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/asyncactions.py @@ -1,5 +1,6 @@ # mypy: allow-untyped-defs +from typing import Any, Mapping webdriver = None @@ -22,8 +23,30 @@ def get_browsing_context_id(context): return context.browsing_context raise ValueError("Unexpected context type: %s" % context) +class BidiBluetoothAction: + def __init__(self, logger, protocol): + do_delayed_imports() + self.logger = logger + self.protocol = protocol -class BidiBluetoothHandleRequestDevicePrompt: + async def __call__(self, payload): + if "context" not in payload: + raise ValueError("Missing required parameter: context") + + context = get_browsing_context_id(payload["context"]) + if isinstance(context, str): + pass + elif isinstance(context, webdriver.bidi.protocol.BidiWindow): + # Context can be a serialized WindowProxy. + context = context.browsing_context + else: + raise ValueError("Unexpected context type: %s" % context) + return await self.execute(context, payload) + + async def execute(self, context: str, payload: Mapping[str, Any]) -> Any: + raise NotImplementedError + +class BidiBluetoothHandleRequestDevicePrompt(BidiBluetoothAction): name = "bidi.bluetooth.handle_request_device_prompt" def __init__(self, logger, protocol): @@ -31,48 +54,30 @@ class BidiBluetoothHandleRequestDevicePrompt: self.logger = logger self.protocol = protocol - async def __call__(self, payload): - if "context" not in payload: - raise ValueError("Missing required parameter: context") - - context = get_browsing_context_id(payload["context"]) + async def execute(self, context: str, payload: Mapping[str, Any]) -> Any: prompt = payload["prompt"] accept = payload["accept"] device = payload["device"] return await self.protocol.bidi_bluetooth.handle_request_device_prompt(context, prompt, accept, device) -class BidiBluetoothSimulateAdapterAction: +class BidiBluetoothSimulateAdapterAction(BidiBluetoothAction): name = "bidi.bluetooth.simulate_adapter" - def __init__(self, logger, protocol): - do_delayed_imports() - self.logger = logger - self.protocol = protocol - - async def __call__(self, payload): - if "context" not in payload: - raise ValueError("Missing required parameter: context") - - context = get_browsing_context_id(payload["context"]) - + async def execute(self, context: str, payload: Mapping[str, Any]) -> Any: state = payload["state"] return await self.protocol.bidi_bluetooth.simulate_adapter(context, - state, - type_="create") + state) -class BidiBluetoothSimulatePreconnectedPeripheralAction: +class BidiBluetoothDisableSimulationAction(BidiBluetoothAction): + name = "bidi.bluetooth.disable_simulation" + + async def execute(self, context: str, payload: Mapping[str, Any]) -> Any: + return await self.protocol.bidi_bluetooth.disable_simulation(context) + +class BidiBluetoothSimulatePreconnectedPeripheralAction(BidiBluetoothAction): name = "bidi.bluetooth.simulate_preconnected_peripheral" - def __init__(self, logger, protocol): - do_delayed_imports() - self.logger = logger - self.protocol = protocol - - async def __call__(self, payload): - if "context" not in payload: - raise ValueError("Missing required parameter: context") - context = get_browsing_context_id(payload["context"]) - + async def execute(self, context: str, payload: Mapping[str, Any]) -> Any: address = payload["address"] name = payload["name"] manufacturer_data = payload["manufacturerData"] @@ -80,6 +85,22 @@ class BidiBluetoothSimulatePreconnectedPeripheralAction: return await self.protocol.bidi_bluetooth.simulate_preconnected_peripheral( context, address, name, manufacturer_data, known_service_uuids) +class BidiBluetoothSimulateGattConnectionResponseAction(BidiBluetoothAction): + name = "bidi.bluetooth.simulate_gatt_connection_response" + + async def execute(self, context: str, payload: Mapping[str, Any]) -> Any: + address = payload["address"] + code = payload["code"] + return await self.protocol.bidi_bluetooth.simulate_gatt_connection_response( + context, address, code) + +class BidiBluetoothSimulateGattDisconnectionAction(BidiBluetoothAction): + name = "bidi.bluetooth.simulate_gatt_disconnection" + + async def execute(self, context: str, payload: Mapping[str, Any]) -> Any: + address = payload["address"] + return await self.protocol.bidi_bluetooth.simulate_gatt_disconnection( + context, address) class BidiEmulationSetGeolocationOverrideAction: name = "bidi.emulation.set_geolocation_override" @@ -153,7 +174,10 @@ class BidiPermissionsSetPermissionAction: async_actions = [ BidiBluetoothHandleRequestDevicePrompt, BidiBluetoothSimulateAdapterAction, + BidiBluetoothDisableSimulationAction, BidiBluetoothSimulatePreconnectedPeripheralAction, + BidiBluetoothSimulateGattConnectionResponseAction, + BidiBluetoothSimulateGattDisconnectionAction, BidiEmulationSetGeolocationOverrideAction, BidiPermissionsSetPermissionAction, BidiSessionSubscribeAction] diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorservodriver.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorservodriver.py index 8176d15ea2a..e27b111ee8b 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorservodriver.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorservodriver.py @@ -20,14 +20,17 @@ def do_delayed_imports(): def __init__(self, session): self.session = session + @webdriver.client.command def get_prefs(self, *prefs): body = {"prefs": list(prefs)} return self.session.send_session_command("POST", "servo/prefs/get", body) + @webdriver.client.command def set_prefs(self, prefs): body = {"prefs": prefs} return self.session.send_session_command("POST", "servo/prefs/set", body) + @webdriver.client.command def reset_prefs(self, *prefs): body = {"prefs": list(prefs)} return self.session.send_session_command("POST", "servo/prefs/reset", body) diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py index 6bed90369b1..0bb8d854d41 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorwebdriver.py @@ -141,10 +141,14 @@ class WebDriverBidiBluetoothProtocolPart(BidiBluetoothProtocolPart): async def simulate_adapter(self, context: str, - state: str, - type_: str) -> None: + state: str) -> None: await self.webdriver.bidi_session.bluetooth.simulate_adapter( - context=context, state=state, type_=type_) + context=context, state=state) + + async def disable_simulation(self, + context: str) -> None: + await self.webdriver.bidi_session.bluetooth.disable_simulation( + context=context) async def simulate_preconnected_peripheral(self, context: str, @@ -159,6 +163,21 @@ class WebDriverBidiBluetoothProtocolPart(BidiBluetoothProtocolPart): manufacturer_data=manufacturer_data, known_service_uuids=known_service_uuids) + async def simulate_gatt_connection_response(self, + context: str, + address: str, + code: int) -> None: + await self.webdriver.bidi_session.bluetooth.simulate_gatt_connection_response( + context=context, + address=address, + code=code) + + async def simulate_gatt_disconnection(self, + context: str, + address: str) -> None: + await self.webdriver.bidi_session.bluetooth.simulate_gatt_disconnection( + context=context, + address=address) class WebDriverBidiBrowsingContextProtocolPart(BidiBrowsingContextProtocolPart): def __init__(self, parent): diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/protocol.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/protocol.py index af32f487c95..8614dc4f7b5 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/protocol.py +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/protocol.py @@ -374,8 +374,7 @@ class BidiBluetoothProtocolPart(ProtocolPart): @abstractmethod async def simulate_adapter(self, context: str, - state: str, - type_: str) -> None: + state: str) -> None: """ Creates a simulated bluetooth adapter. :param context: Browsing context to set the simulated adapter to. @@ -383,6 +382,15 @@ class BidiBluetoothProtocolPart(ProtocolPart): """ pass + @abstractmethod + async def disable_simulation(self, + context: str) -> None: + """ + Disables bluetooth simulation. + :param context: Browsing context to disable the simulation for. + """ + pass + @abstractmethod async def simulate_preconnected_peripheral(self, context: str, @@ -400,6 +408,30 @@ class BidiBluetoothProtocolPart(ProtocolPart): """ pass + @abstractmethod + async def simulate_gatt_connection_response(self, + context: str, + address: str, + code: int) -> None: + """ + Simulates a GATT connection response from simulated bluetooth peripheral. + :param context: Browsing context to set the simulated peripheral to. + :param address: The address of the simulated bluetooth peripheral. + :param code: The GATT connection response code of the simulated bluetooth peripheral. + """ + pass + + @abstractmethod + async def simulate_gatt_disconnection(self, + context: str, + address: str) -> None: + """ + Simulates a GATT disconnection from simulated bluetooth peripheral. + :param context: Browsing context to set the simulated peripheral to. + :param address: The address of the simulated bluetooth peripheral. + """ + pass + class BidiBrowsingContextProtocolPart(ProtocolPart): """Protocol part for managing BiDi events""" __metaclass__ = ABCMeta diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js b/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js index 2a5bb3937fd..66c31612bd5 100644 --- a/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js +++ b/tests/wpt/tests/tools/wptrunner/wptrunner/testdriver-extra.js @@ -235,6 +235,15 @@ }); } + window.test_driver_internal.bidi.bluetooth.disable_simulation = + function(params) { + return create_action('bidi.bluetooth.disable_simulation', { + // Default to the current window. + context: window, + ...params + }); + } + window.test_driver_internal.bidi.bluetooth.simulate_preconnected_peripheral = function(params) { return create_action('bidi.bluetooth.simulate_preconnected_peripheral', { @@ -244,6 +253,24 @@ }); } + window.test_driver_internal.bidi.bluetooth.simulate_gatt_connection_response = + function(params) { + return create_action('bidi.bluetooth.simulate_gatt_connection_response', { + // Default to the current window. + context: window, + ...params + }); + } + + window.test_driver_internal.bidi.bluetooth.simulate_gatt_disconnection = + function(params) { + return create_action('bidi.bluetooth.simulate_gatt_disconnection', { + // Default to the current window. + context: window, + ...params + }); + } + window.test_driver_internal.bidi.bluetooth.request_device_prompt_updated.subscribe = function(params) { return subscribe( @@ -261,6 +288,23 @@ 'bluetooth.requestDevicePromptUpdated', on_event); }; + window.test_driver_internal.bidi.bluetooth.gatt_connection_attempted.subscribe = + function(params) { + return subscribe( + {params, events: ['bluetooth.gattConnectionAttempted']}) + }; + + window.test_driver_internal.bidi.bluetooth.gatt_connection_attempted.on = + function(callback) { + const on_event = (event) => { + callback(event.payload); + }; + event_target.addEventListener( + 'bluetooth.gattConnectionAttempted', on_event); + return () => event_target.removeEventListener( + 'bluetooth.gattConnectionAttempted', on_event); + }; + window.test_driver_internal.bidi.emulation.set_geolocation_override = function (params) { if ('coordinates' in params && 'error' in params) { diff --git a/tests/wpt/tests/trusted-types/script-enforcement-010.html b/tests/wpt/tests/trusted-types/script-enforcement-010.html new file mode 100644 index 00000000000..e89d31517f6 --- /dev/null +++ b/tests/wpt/tests/trusted-types/script-enforcement-010.html @@ -0,0 +1,47 @@ + + + + + + + + + +
+ diff --git a/tests/wpt/tests/trusted-types/script-enforcement-011.html b/tests/wpt/tests/trusted-types/script-enforcement-011.html new file mode 100644 index 00000000000..1054502a399 --- /dev/null +++ b/tests/wpt/tests/trusted-types/script-enforcement-011.html @@ -0,0 +1,47 @@ + + + + + + + + + +
+ diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/__init__.py index e69de29bb2d..81a59393460 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/__init__.py +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/__init__.py @@ -0,0 +1,117 @@ +import pytest, asyncio + +from webdriver.bidi.modules.script import ContextTarget + +TEST_DEVICE_NAME = 'SOME_BL_DEVICE' +TEST_DEVICE_ADDRESS = '09:09:09:09:09:09' +BLUETOOTH_REQUEST_DEVICE_PROMPT_UPDATED_EVENT = 'bluetooth.requestDevicePromptUpdated' +BLUETOOTH_GATT_CONNECTION_ATTEMPTED_EVENT = 'bluetooth.gattConnectionAttempted' + + +async def set_simulate_adapter(bidi_session, context, test_page, state): + # Navigate to a page, as bluetooth is not guaranteed to work on + # `about:blank`. + await bidi_session.browsing_context.navigate(context=context['context'], + url=test_page, wait="complete") + + await bidi_session.bluetooth.simulate_adapter(context=context["context"], + state=state) + + +async def set_simulate_preconnected_peripheral(bidi_session, context, test_page, + address, name, manufacturer_data, + known_service_uuids): + # Navigate to a page, as bluetooth is not guaranteed to work on + # `about:blank`. + await bidi_session.browsing_context.navigate(context=context['context'], + url=test_page, wait="complete") + await bidi_session.bluetooth.simulate_adapter(context=context["context"], + state="powered-on") + await bidi_session.bluetooth.simulate_preconnected_peripheral( + context=context["context"], + address=address, name=name, + manufacturer_data=manufacturer_data, + known_service_uuids=known_service_uuids) + + +def request_device(context, bidi_session): + return asyncio.create_task( + bidi_session.script.call_function( + function_declaration="""async (device_name)=>{ + const device = await navigator.bluetooth.requestDevice({ + filters: [{name:device_name}] + }); + return { + id: device.id, + name: device.name, + } + } + """, + arguments=[{"type": "string", "value": TEST_DEVICE_NAME}], + target=ContextTarget(context["context"]), + await_promise=True, + # Required to emulate user activated the request. + user_activation=True + )) + + +async def setup_granted_device(bidi_session, context, test_page, subscribe_events, wait_for_event): + await set_simulate_preconnected_peripheral( + bidi_session, + context, + test_page, + TEST_DEVICE_ADDRESS, + TEST_DEVICE_NAME, + [{"key": 17, "data": "AP8BAX8="}], + ["12345678-1234-5678-9abc-def123456789"], + ) + + await subscribe_events( + events=[BLUETOOTH_REQUEST_DEVICE_PROMPT_UPDATED_EVENT]) + + # Set prompt listener. + bluetooth_prompt_future = wait_for_event( + BLUETOOTH_REQUEST_DEVICE_PROMPT_UPDATED_EVENT) + + # Schedule requesting device via WEB API. It will be blocked on the prompt + # and resolved after the prompt is addressed. + request_device_future = request_device(context, bidi_session) + + # Wait for the prompt. + bluetooth_prompt = await bluetooth_prompt_future + + # Accept the prompt. + await bidi_session.bluetooth.handle_request_device_prompt( + context=context["context"], + prompt=bluetooth_prompt["prompt"], + accept=True, + device=bluetooth_prompt['devices'][0]['id'] + ) + + # Wait for the script to finish. + await request_device_future + return TEST_DEVICE_ADDRESS + + +async def create_gatt_connection(bidi_session, context, subscribe_events, wait_for_event): + await subscribe_events( + events=[BLUETOOTH_GATT_CONNECTION_ATTEMPTED_EVENT]) + gatt_connect_future = asyncio.create_task( + bidi_session.script.call_function( + function_declaration="""async ()=>{ + const devices = await navigator.bluetooth.getDevices(); + const device = devices[0]; + await device.gatt.connect(); + } + """, + target=ContextTarget(context["context"]), + await_promise=True, + )) + + gatt_connection_attempted_event = await wait_for_event( + BLUETOOTH_GATT_CONNECTION_ATTEMPTED_EVENT) + + await bidi_session.bluetooth.simulate_gatt_connection_response( + context=context["context"], + address=gatt_connection_attempted_event["address"], code=0x0) + await gatt_connect_future diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/context.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/context.py new file mode 100644 index 00000000000..55aa4e59625 --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/context.py @@ -0,0 +1,25 @@ +import pytest +import webdriver.bidi.error as error + +from .. import TEST_DEVICE_ADDRESS, TEST_DEVICE_NAME, set_simulate_adapter + + +pytestmark = pytest.mark.asyncio + + +async def test_contexts_are_isolated(bidi_session, top_context, test_page): + another_browsing_context = await bidi_session.browsing_context.create( + type_hint="tab") + await set_simulate_adapter(bidi_session, top_context, test_page, + "powered-on") + + await set_simulate_adapter(bidi_session, another_browsing_context, + test_page, "powered-on") + await bidi_session.bluetooth.disable_simulation(context=another_browsing_context["context"]) + # Simulation commands should still work after simulation is disabled in another + # context. + await bidi_session.bluetooth.simulate_preconnected_peripheral( + context=top_context["context"], + address=TEST_DEVICE_ADDRESS, name=TEST_DEVICE_NAME, + manufacturer_data=[], + known_service_uuids=[]) diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/disable_simulation.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/disable_simulation.py new file mode 100644 index 00000000000..4cbcd7806b3 --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/disable_simulation/disable_simulation.py @@ -0,0 +1,20 @@ +import pytest +import webdriver.bidi.error as error + +from .. import TEST_DEVICE_ADDRESS, TEST_DEVICE_NAME, set_simulate_adapter + + +pytestmark = pytest.mark.asyncio + + +async def test_disable_simulation(bidi_session, top_context, test_page): + await set_simulate_adapter(bidi_session, top_context, test_page, + "powered-on") + await bidi_session.bluetooth.disable_simulation(context=top_context["context"]) + # Creating a fake BT device while simulation disabled would fail. + with pytest.raises(error.UnknownErrorException): + await bidi_session.bluetooth.simulate_preconnected_peripheral( + context=top_context["context"], + address=TEST_DEVICE_ADDRESS, name=TEST_DEVICE_NAME, + manufacturer_data=[], + known_service_uuids=[]) diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/__init__.py index 1e1fcc05ef5..aa2f04dff9b 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/__init__.py +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/__init__.py @@ -7,12 +7,3 @@ async def get_bluetooth_availability(bidi_session, context): target=ContextTarget(context["context"]), await_promise=True, ) return result['value'] - -async def set_simulate_adapter(bidi_session, context, test_page, state): - # Navigate to a page, as bluetooth is not guaranteed to work on - # `about:blank`. - await bidi_session.browsing_context.navigate(context=context['context'], - url=test_page, wait="complete") - - await bidi_session.bluetooth.simulate_adapter(context=context["context"], - state=state, type_="create") diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/context.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/context.py index ef56a33219c..f176269bfbe 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/context.py +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/context.py @@ -1,6 +1,7 @@ import pytest -from . import get_bluetooth_availability, set_simulate_adapter +from .. import set_simulate_adapter +from . import get_bluetooth_availability pytestmark = pytest.mark.asyncio diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/invalid.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/invalid.py index 3175e196e81..8fe2538873b 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/invalid.py +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/invalid.py @@ -8,24 +8,24 @@ pytestmark = pytest.mark.asyncio async def test_state_invalid_type(bidi_session, top_context, state): with pytest.raises(error.InvalidArgumentException): await bidi_session.bluetooth.simulate_adapter( - context=top_context["context"], state=state, type_="create") + context=top_context["context"], state=state) @pytest.mark.parametrize("state", ["", "invalid"]) async def test_state_invalid_value(bidi_session, top_context, state): with pytest.raises(error.InvalidArgumentException): await bidi_session.bluetooth.simulate_adapter( - context=top_context["context"], state=state, type_="create") + context=top_context["context"], state=state) @pytest.mark.parametrize("context", [None, False, 42, {}, []]) async def test_context_invalid_type(bidi_session, context): with pytest.raises(error.InvalidArgumentException): await bidi_session.bluetooth.simulate_adapter( - context=context, state="powered-on", type_="create") + context=context, state="powered-on") async def test_context_unknown_value(bidi_session): with pytest.raises(error.NoSuchFrameException): await bidi_session.bluetooth.simulate_adapter( - context="UNKNOWN_CONTEXT", state="powered-on", type_="create") + context="UNKNOWN_CONTEXT", state="powered-on") diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/state.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/state.py index ad21326081e..e2558f4509a 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/state.py +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_adapter/state.py @@ -1,6 +1,7 @@ import pytest -from . import get_bluetooth_availability, set_simulate_adapter +from .. import set_simulate_adapter +from . import get_bluetooth_availability pytestmark = pytest.mark.asyncio diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/invalid.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/invalid.py new file mode 100644 index 00000000000..0bff922e6db --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/invalid.py @@ -0,0 +1,36 @@ +import pytest +import webdriver.bidi.error as error +from .. import TEST_DEVICE_ADDRESS + +pytestmark = pytest.mark.asyncio + + +@pytest.mark.parametrize("context", [None, False, 42, {}, []]) +async def test_context_invalid_type(bidi_session, context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.bluetooth.simulate_gatt_connection_response( + context=context, + address=TEST_DEVICE_ADDRESS, code=0x0) + + +async def test_context_unknown_value(bidi_session): + with pytest.raises(error.NoSuchFrameException): + await bidi_session.bluetooth.simulate_gatt_connection_response( + context="UNKNOWN_CONTEXT", + address=TEST_DEVICE_ADDRESS, code=0x0) + + +@pytest.mark.parametrize("address", [None, False, 42, {}, []]) +async def test_address_invalid_type(bidi_session, top_context, address): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.bluetooth.simulate_gatt_connection_response( + context=top_context, + address=address, code=0x0) + + +@pytest.mark.parametrize("code", ["0", None, False, {}, []]) +async def test_code_invalid_type(bidi_session, top_context, code): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.bluetooth.simulate_gatt_connection_response( + context=top_context, + address=TEST_DEVICE_ADDRESS, code=code) diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/simulate_gatt_connection_response.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/simulate_gatt_connection_response.py new file mode 100644 index 00000000000..1c0139c75b8 --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_connection_response/simulate_gatt_connection_response.py @@ -0,0 +1,50 @@ +import pytest, asyncio + +from webdriver.bidi.modules.script import ContextTarget +from .. import BLUETOOTH_GATT_CONNECTION_ATTEMPTED_EVENT, setup_granted_device +from .... import recursive_compare + +pytestmark = pytest.mark.asyncio + + +@pytest.mark.parametrize('code', [0x0, 0x1, 0x2]) +async def test_simulate_gatt_connection_response(bidi_session, top_context, + test_page, subscribe_events, wait_for_event, code): + device_address = await setup_granted_device(bidi_session, top_context, test_page, subscribe_events, wait_for_event) + await subscribe_events( + events=[BLUETOOTH_GATT_CONNECTION_ATTEMPTED_EVENT]) + + # Schedule device gatt connect via WEB API. It will be blocked on the gatt response simulation + # and resolved after the gatt response code is simulated. + gatt_connect_future = asyncio.create_task( + bidi_session.script.call_function( + function_declaration="""async ()=>{ + const devices = await navigator.bluetooth.getDevices(); + const device = devices[0]; + try { + await device.gatt.connect(); + } finally { + return device.gatt.connected; + } + } + """, + target=ContextTarget(top_context["context"]), + await_promise=True, + )) + + gatt_connection_attempted_event = await wait_for_event( + BLUETOOTH_GATT_CONNECTION_ATTEMPTED_EVENT) + recursive_compare({ + "context": top_context["context"], + "address": device_address, + }, gatt_connection_attempted_event) + + await bidi_session.bluetooth.simulate_gatt_connection_response( + context=top_context["context"], + address=device_address, code=code) + + gatt_connect = await gatt_connect_future + recursive_compare({ + "type": "boolean", + "value": True if code == 0x0 else False + }, gatt_connect) diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/invalid.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/invalid.py new file mode 100644 index 00000000000..40ff1f199cf --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/invalid.py @@ -0,0 +1,28 @@ +import pytest +import webdriver.bidi.error as error +from .. import TEST_DEVICE_ADDRESS + +pytestmark = pytest.mark.asyncio + + +@pytest.mark.parametrize("context", [None, False, 42, {}, []]) +async def test_context_invalid_type(bidi_session, context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.bluetooth.simulate_gatt_disconnection( + context=context, + address=TEST_DEVICE_ADDRESS) + + +async def test_context_unknown_value(bidi_session): + with pytest.raises(error.NoSuchFrameException): + await bidi_session.bluetooth.simulate_gatt_disconnection( + context="UNKNOWN_CONTEXT", + address=TEST_DEVICE_ADDRESS) + + +@pytest.mark.parametrize("address", [None, False, 42, {}, []]) +async def test_address_invalid_type(bidi_session, top_context, address): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.bluetooth.simulate_gatt_disconnection( + context=top_context, + address=address) diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/simulate_gatt_disconnection.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/simulate_gatt_disconnection.py new file mode 100644 index 00000000000..426c84eb0a4 --- /dev/null +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_gatt_disconnection/simulate_gatt_disconnection.py @@ -0,0 +1,33 @@ +import pytest, asyncio + +from webdriver.bidi.modules.script import ContextTarget +from .. import setup_granted_device, create_gatt_connection +from .... import recursive_compare + +pytestmark = pytest.mark.asyncio + + +async def test_simulate_gatt_disconnection(bidi_session, top_context, + test_page, subscribe_events, wait_for_event): + device_address = await setup_granted_device(bidi_session, top_context, test_page, subscribe_events, wait_for_event) + await create_gatt_connection(bidi_session, top_context, subscribe_events, wait_for_event) + + await bidi_session.bluetooth.simulate_gatt_disconnection( + context=top_context["context"], + address=device_address) + + gatt_connected = await asyncio.create_task( + bidi_session.script.call_function( + function_declaration="""async ()=>{ + const devices = await navigator.bluetooth.getDevices(); + const device = devices[0]; + return device.gatt.connected; + } + """, + target=ContextTarget(top_context["context"]), + await_promise=True, + )) + recursive_compare({ + "type": "boolean", + "value": False + }, gatt_connected) diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_preconnected_peripheral/__init__.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_preconnected_peripheral/__init__.py index 846c103d5da..e69de29bb2d 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_preconnected_peripheral/__init__.py +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_preconnected_peripheral/__init__.py @@ -1,14 +0,0 @@ -async def set_simulate_preconnected_peripheral(bidi_session, context, test_page, - address, name, manufacturer_data, - known_service_uuids): - # Navigate to a page, as bluetooth is not guaranteed to work on - # `about:blank`. - await bidi_session.browsing_context.navigate(context=context['context'], - url=test_page, wait="complete") - await bidi_session.bluetooth.simulate_adapter(context=context["context"], - state="powered-on", type_="create") - await bidi_session.bluetooth.simulate_preconnected_peripheral( - context=context["context"], - address=address, name=name, - manufacturer_data=manufacturer_data, - known_service_uuids=known_service_uuids) diff --git a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_preconnected_peripheral/simulate_preconnected_peripheral.py b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_preconnected_peripheral/simulate_preconnected_peripheral.py index aaba084dd67..057f9fac07d 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_preconnected_peripheral/simulate_preconnected_peripheral.py +++ b/tests/wpt/tests/webdriver/tests/bidi/external/bluetooth/simulate_preconnected_peripheral/simulate_preconnected_peripheral.py @@ -1,15 +1,11 @@ import pytest, asyncio from webdriver.bidi.modules.script import ContextTarget -from . import set_simulate_preconnected_peripheral +from .. import BLUETOOTH_REQUEST_DEVICE_PROMPT_UPDATED_EVENT, TEST_DEVICE_ADDRESS, TEST_DEVICE_NAME, set_simulate_preconnected_peripheral from .... import any_string, recursive_compare pytestmark = pytest.mark.asyncio -TEST_DEVICE_NAME = 'SOME_BL_DEVICE' -TEST_DEVICE_ADDRESS = '09:09:09:09:09:09' -BLUETOOTH_REQUEST_DEVICE_PROMPT_UPDATED_EVENT = 'bluetooth.requestDevicePromptUpdated' - async def test_simulate_preconnected_peripheral(bidi_session, top_context, test_page, subscribe_events, wait_for_event, wait_for_future_safe): diff --git a/tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js b/tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js index a6155fb25ce..b5782702239 100644 --- a/tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js +++ b/tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js @@ -527,6 +527,161 @@ const subgraphTests = [ } } }, + { + 'name': 'quantized conv2d with padding', + 'graph': { + 'inputs': { + 'input': { + 'data': [ + 0.6124474406242371, 0.8857858777046204, 0.13667134940624237, + 0.5645291209220886, 0.8965172171592712, 0.36792829632759094, + 0.6811466217041016, 0.0479511022567749, 0.33355462551116943, + 0.19882695376873016, 0.41167140007019043, 0.07934240251779556, + 0.4272463321685791, 0.535800576210022, 0.5910806059837341, + 0.28415432572364807, 0.4147258698940277, 0.026906268671154976, + 0.3621256649494171, 0.9945681691169739, 0.07184549421072006, + 0.12204372137784958, 0.8422137498855591, 0.4537501037120819, + 0.21529443562030792 + ], + 'descriptor': {shape: [1, 5, 5, 1], dataType: 'float32'}, + 'constant': false + }, + 'inputScale': { + 'data': [0.003921568859368563], + 'descriptor': {shape: [1], dataType: 'float32'}, + 'constant': true + }, + 'inputZeroPoint': { + 'data': [-128], + 'descriptor': {shape: [1], dataType: 'int8'}, + 'constant': true + }, + 'filter': { + 'data': [2, 3, 4, 5, 6, 7, 8, 9, 3], + 'descriptor': {shape: [1, 3, 3, 1], dataType: 'int8'}, + 'constant': true + }, + 'filterScale': { + 'data': [0.023458752938762234], + 'descriptor': {shape: [1], dataType: 'float32'}, + 'constant': true + }, + 'filterZeroPoint': { + 'data': [0], + 'descriptor': {shape: [1], dataType: 'int8'}, + 'constant': true + }, + 'bias': { + 'data': [1], + 'descriptor': {shape: [1], dataType: 'int32'}, + 'constant': true + }, + 'biasScale': { + 'data': [0.000091995115004270], + 'descriptor': {shape: [1], dataType: 'float32'}, + 'constant': true + }, + 'biasZeroPoint': { + 'data': [0], + 'descriptor': {shape: [1], dataType: 'int32'}, + 'constant': true + }, + 'outputScale': { + 'data': [0.003921568859368563], + 'descriptor': {shape: [1], dataType: 'float32'}, + 'constant': true + }, + 'outputZeroPoint': { + 'data': [0], + 'descriptor': {shape: [1], dataType: 'int8'}, + 'constant': true + }, + }, + 'operators': [ + { + 'name': 'quantizeLinear', + 'arguments': [ + {'input': 'input'}, + {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'} + ], + 'outputs': 'quantizedInput' + }, + { + 'name': 'dequantizeLinear', + 'arguments': [ + {'input': 'quantizedInput'}, + {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'} + ], + 'outputs': 'dequantizedInput' + }, + { + 'name': 'dequantizeLinear', + 'arguments': [ + {'input': 'filter'}, + {'scale': 'filterScale', 'zeroPoint': 'filterZeroPoint'} + ], + 'outputs': 'dequantizedFilter' + }, + { + 'name': 'dequantizeLinear', + 'arguments': [ + {'input': 'bias'}, + {'scale': 'biasScale', 'zeroPoint': 'biasZeroPoint'} + ], + 'outputs': 'dequantizedBias' + }, + { + 'name': 'conv2d', + 'arguments': [ + {'input': 'dequantizedInput'}, {'filter': 'dequantizedFilter'}, { + 'options': { + 'inputLayout': 'nhwc', + 'bias': 'dequantizedBias', + 'filterLayout': 'ohwi', + 'padding': [2, 1, 2, 1] + } + } + ], + 'outputs': 'conv2dOutput' + }, + { + 'name': 'quantizeLinear', + 'arguments': [ + {'input': 'conv2dOutput'}, + {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'} + ], + 'outputs': 'quantizedConv2dOutput' + }, + { + 'name': 'dequantizeLinear', + 'arguments': [ + {'input': 'quantizedConv2dOutput'}, + {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'} + ], + 'outputs': 'output' + } + ], + 'expectedOutputs': { + 'output': { + 'data': [ + 0.04313725605607033, 0.19215688109397888, 0.30980393290519714, + 0.2352941334247589, 0.20784315466880798, 0.29411765933036804, + 0.125490203499794, 0.35686275362968445, 0.43529415130615234, + 0.3764706254005432, 0.33725491166114807, 0.2980392277240753, + 0.14509804546833038, 0.38431376218795776, 0.3764706254005432, + 0.38823533058166504, 0.45098042488098145, 0.38431376218795776, + 0.12156863510608673, 0.250980406999588, 0.34117648005485535, + 0.3333333432674408, 0.41960787773132324, 0.4549019932746887, + 0.09019608050584793, 0.16862745583057404, 0.25882354378700256, + 0.4274510145187378, 0.49803924560546875, 0.3803921937942505, + 0.03921568766236305, 0.09019608050584793, 0.20784315466880798, + 0.26274511218070984, 0.3176470696926117, 0.1725490242242813 + ], + 'descriptor': {shape: [1, 6, 6, 1], dataType: 'float32'} + } + } + } + }, { 'name': 'quantized element-wise binary sub', 'graph': { diff --git a/tests/wpt/tests/webrtc/RTCRtpReceiver-getParameters.html b/tests/wpt/tests/webrtc/RTCRtpReceiver-getParameters.html index 14ec74b66a0..a55f766d037 100644 --- a/tests/wpt/tests/webrtc/RTCRtpReceiver-getParameters.html +++ b/tests/wpt/tests/webrtc/RTCRtpReceiver-getParameters.html @@ -84,10 +84,16 @@ callee.addTrack(track); var callerReceiver = caller.getTransceivers()[0].receiver; assert_equals(callerReceiver.getParameters().codecs.length, 0); + assert_equals(callerReceiver.getParameters().headerExtensions.length, 0, + "no caller header extensions before offer"); const offer = await caller.createOffer(); await caller.setLocalDescription(offer); await callee.setRemoteDescription(offer); var calleeReceiver = callee.getTransceivers()[0].receiver; + // Callee transceiver exists only after offer - population of parameters + // should only occur after answer. + assert_equals(calleeReceiver.getParameters().headerExtensions.length, 0, + "no callee header extensions before answer"); assert_equals(calleeReceiver.getParameters().codecs.length, 0); const answer = await callee.createAnswer(); await callee.setLocalDescription(answer); @@ -96,6 +102,10 @@ await caller.setRemoteDescription(answer); assert_greater_than(callerReceiver.getParameters().codecs.length, 0, "caller codecs after answer"); + assert_greater_than(callerReceiver.getParameters().headerExtensions.length, 0, + "caller header extensions after O/A"); + assert_greater_than(calleeReceiver.getParameters().headerExtensions.length, 0, + "callee header extensions after O/A"); }, 'getParameters() surfaces codecs on two-way receiver at the right time'); diff --git a/tests/wpt/tests/webrtc/RTCRtpSender-getParameters.html b/tests/wpt/tests/webrtc/RTCRtpSender-getParameters.html index 6c47153c836..3b48ee60da6 100644 --- a/tests/wpt/tests/webrtc/RTCRtpSender-getParameters.html +++ b/tests/wpt/tests/webrtc/RTCRtpSender-getParameters.html @@ -21,6 +21,8 @@ promise_test(async t => { callee.addTrack(track); var callerSender = caller.getTransceivers()[0].sender; assert_equals(callerSender.getParameters().codecs.length, 0); + assert_equals(callerSender.getParameters().headerExtensions.length, 0, + "caller header extensions before offer"); const offer = await caller.createOffer(); await caller.setLocalDescription(offer); await callee.setRemoteDescription(offer); @@ -35,6 +37,8 @@ promise_test(async t => { await caller.setRemoteDescription(answer); assert_greater_than(callerSender.getParameters().codecs.length, 0, "caller codecs after answer"); + assert_greater_than(callerSender.getParameters().headerExtensions.length, 0, + "caller header extensions after answer"); }, 'getParameters() surfaces codecs on two-way sender with addTrack at the right time'); diff --git a/tests/wpt/tests/websockets/stream/tentative/write.any.js b/tests/wpt/tests/websockets/stream/tentative/write.any.js index 43af7da614c..7f859e12579 100644 --- a/tests/wpt/tests/websockets/stream/tentative/write.any.js +++ b/tests/wpt/tests/websockets/stream/tentative/write.any.js @@ -94,3 +94,18 @@ promise_test(async t => { await promise_rejects_js( t, TypeError, writer.write(view), 'write() should reject'); }, 'writing a view on a shared buffer should be rejected'); + +promise_test(async () => { + let wss = new WebSocketStream(ECHOURL); + let { writable } = await wss.opened; + let writer = writable.getWriter(); + wss = writable = null; + const promises = []; + for (let i = 0; i < 20; ++i) { + promises.push(writer.write(new Uint8Array(100000))); + } + writer = null; + for (let i = 0; i < 5; ++i) { + await garbageCollect(); + } +}, 'Garbage collecting a WebSocket stream doesn\'t crash while write promise is pending');