From 43edab336af15fd0828c9eddea24ff48f3878006 Mon Sep 17 00:00:00 2001 From: Servo WPT Sync <32481905+servo-wpt-sync@users.noreply.github.com> Date: Sun, 4 May 2025 03:43:02 +0200 Subject: [PATCH] Sync WPT with upstream (04-05-2025) (#36829) Automated downstream sync of changes from upstream as of 04-05-2025 [no-wpt-sync] Signed-off-by: WPT Sync Bot --- .../url/url-in-tags-revoke.window.js.ini | 3 - .../FileAPI/url/url-with-fetch.any.js.ini | 3 - tests/wpt/meta/MANIFEST.json | 1618 +++++++++++------ .../multicol-gap-decorations-001.html.ini | 0 .../multicol-gap-decorations-002.html.ini | 0 .../multicol-gap-decorations-003.html.ini | 0 .../multicol-gap-decorations-004.html.ini | 0 .../multicol-gap-decorations-005.html.ini | 0 .../multicol-gap-decorations-006.html.ini | 0 .../multicol-gap-decorations-007.html.ini | 0 .../multicol-gap-decorations-008.html.ini | 0 .../multicol-gap-decorations-009.html.ini | 0 .../multicol-gap-decorations-010.html.ini | 0 .../multicol-gap-decorations-011.html.ini | 0 .../multicol-gap-decorations-012.html.ini | 0 .../multicol-gap-decorations-013.html.ini | 0 .../multicol-gap-decorations-014.html.ini | 0 .../multicol-gap-decorations-015.html.ini | 2 + .../multicol-gap-decorations-016.html.ini | 2 + .../css-grid/subgrid/line-names-015.html.ini | 2 + .../line-clamp-auto-025.tentative.html.ini | 2 - .../line-clamp-with-abspos-001.html.ini | 2 + ...e-clamp-with-abspos-001.tentative.html.ini | 2 - .../line-clamp-with-abspos-002.html.ini | 2 + ...e-clamp-with-abspos-002.tentative.html.ini | 2 - .../line-clamp-with-abspos-003.html.ini | 2 + ...e-clamp-with-abspos-003.tentative.html.ini | 2 - .../line-clamp-with-abspos-004.html.ini | 2 + ...e-clamp-with-abspos-004.tentative.html.ini | 2 - .../line-clamp-with-abspos-005.html.ini | 2 + ...e-clamp-with-abspos-005.tentative.html.ini | 2 - .../line-clamp-with-abspos-006.html.ini | 2 + ...e-clamp-with-abspos-006.tentative.html.ini | 2 - .../line-clamp-with-abspos-007.html.ini | 2 + ...e-clamp-with-abspos-007.tentative.html.ini | 2 - .../line-clamp-with-abspos-008.html.ini | 2 + ...e-clamp-with-abspos-008.tentative.html.ini | 2 - .../line-clamp-with-abspos-009.html.ini | 2 + ...e-clamp-with-abspos-009.tentative.html.ini | 2 - .../line-clamp-with-abspos-010.html.ini | 2 + ...e-clamp-with-abspos-010.tentative.html.ini | 2 - .../line-clamp-with-abspos-011.html.ini | 2 + ...e-clamp-with-abspos-011.tentative.html.ini | 2 - .../line-clamp-with-abspos-012.html.ini | 2 + ...e-clamp-with-abspos-012.tentative.html.ini | 2 - .../line-clamp-with-abspos-013.html.ini | 2 + ...e-clamp-with-abspos-013.tentative.html.ini | 2 - .../line-clamp-with-abspos-014.html.ini | 2 + ...e-clamp-with-abspos-014.tentative.html.ini | 2 - .../line-clamp-with-abspos-015.html.ini | 2 + .../line-clamp-with-abspos-016.html.ini | 2 + ...e-clamp-with-abspos-017.tentative.html.ini | 2 + .../line-clamp-with-abspos-018.html.ini | 2 + .../line-clamp-with-abspos-019.html.ini | 2 + .../line-clamp-with-abspos-020.html.ini | 2 + .../line-clamp-with-abspos-021.html.ini | 2 + .../line-clamp-with-abspos-022.html.ini | 2 + .../line-clamp-with-fixed-pos-001.html.ini | 2 + .../line-clamp-with-fixed-pos-002.html.ini | 2 + .../line-clamp-with-fixed-pos-003.html.ini | 2 + .../line-clamp-with-fixed-pos-004.html.ini | 2 + .../line-clamp-with-fixed-pos-005.html.ini | 2 + .../line-clamp-with-fixed-pos-006.html.ini | 2 + .../line-clamp-with-fixed-pos-007.html.ini | 2 + .../line-clamp-with-fixed-pos-008.html.ini | 2 + .../line-clamp-with-fixed-pos-009.html.ini | 2 + .../line-clamp-with-fixed-pos-010.html.ini | 2 + .../line-clamp-with-fixed-pos-011.html.ini | 2 + .../line-clamp-with-fixed-pos-012.html.ini | 2 + .../line-clamp-with-fixed-pos-013.html.ini | 2 + .../line-clamp-with-fixed-pos-014.html.ini | 2 + .../line-clamp-with-fixed-pos-015.html.ini | 2 + .../line-clamp-with-fixed-pos-016.html.ini | 2 + .../line-clamp-with-fixed-pos-017.html.ini | 2 + .../dynamic-available-size-iframe.html.ini | 2 - .../parsing/transform-valid.html.ini | 30 + ...lc-sibling-function-in-shadow-dom.html.ini | 3 + .../navigating-across-documents/008.html.ini | 3 + .../iframe-nosrc.html.ini | 3 + ...avigation-unload-same-origin.window.js.ini | 3 + .../traverse_the_history_3.html.ini | 3 + .../createImageBitmap-invalid-args.html.ini | 2 +- .../createImageBitmap-transfer.html.ini | 2 +- ...nitiator-is-not-opener.https.window.js.ini | 1 - .../supported-elements.html.ini | 7 +- .../iframe_sandbox_popups_escaping-3.html.ini | 3 +- ...rame_sandbox_popups_nonescaping-2.html.ini | 2 +- ...rame_sandbox_popups_nonescaping-3.html.ini | 1 + .../text-plain.window.js.ini | 3 - .../select-parsing.tentative.html.ini | 3 + .../module/dynamic-import/blob-url.any.js.ini | 6 +- .../sub-sample-buffer-stitching.html.ini | 12 + .../detector-iframe.https.html | 40 +- .../detector.https.window.js | 5 + .../resources/iframe-helper.html | 34 +- ...ummarizer-abort.tentative.https.window.js} | 0 ...ility-available.tentative.https.window.js} | 0 ...er-availability.tentative.https.window.js} | 0 ...reate-available.tentative.https.window.js} | 0 ...mmarizer-create.tentative.https.window.js} | 0 ...asureInputUsage.tentative.https.window.js} | 0 ...arize-streaming.tentative.https.window.js} | 0 ...rizer-summarize.tentative.https.window.js} | 0 ..._eventhandler_already_expired.https.any.js | 86 + ...change_eventhandler_no_change.https.any.js | 128 ++ ...oned-cookies-samesite-attribute.https.html | 59 + ...ned-cookies-samesite-attributes-embed.html | 31 + .../align-self-static-position-005-ref.html | 2 +- .../align-self-static-position-005.html | 2 +- .../nested-fixedpos-in-inline-003-crash.html | 13 + .../multicol-gap-decorations-001-ref.html | 0 .../multicol-gap-decorations-001.html | 0 .../multicol-gap-decorations-002-ref.html | 0 .../multicol-gap-decorations-002.html | 0 .../multicol-gap-decorations-003-ref.html | 0 .../multicol-gap-decorations-003.html | 0 .../multicol-gap-decorations-004-ref.html | 0 .../multicol-gap-decorations-004.html | 0 .../multicol-gap-decorations-005-ref.html | 0 .../multicol-gap-decorations-005.html | 0 .../multicol-gap-decorations-006-ref.html | 0 .../multicol-gap-decorations-006.html | 0 .../multicol-gap-decorations-007-ref.html | 0 .../multicol-gap-decorations-007.html | 0 .../multicol-gap-decorations-008-ref.html | 0 .../multicol-gap-decorations-008.html | 0 .../multicol-gap-decorations-009-ref.html | 0 .../multicol-gap-decorations-009.html | 0 .../multicol-gap-decorations-010-ref.html | 0 .../multicol-gap-decorations-010.html | 0 .../multicol-gap-decorations-011-ref.html | 0 .../multicol-gap-decorations-011.html | 0 .../multicol-gap-decorations-012-ref.html | 0 .../multicol-gap-decorations-012.html | 0 .../multicol-gap-decorations-013-ref.html | 0 .../multicol-gap-decorations-013.html | 0 .../multicol-gap-decorations-014-ref.html | 0 .../multicol-gap-decorations-014.html | 0 .../multicol-gap-decorations-015-ref.html | 70 + .../multicol-gap-decorations-015.html | 55 + .../multicol-gap-decorations-016-ref.html | 70 + .../multicol-gap-decorations-016.html | 55 + .../grid-auto-fit-with-calc.html | 23 + .../css/css-grid/subgrid/line-names-015.html | 34 + .../line-clamp-auto-031.tentative.html | 8 +- ...e.html => line-clamp-with-abspos-001.html} | 12 +- ...e.html => line-clamp-with-abspos-002.html} | 12 +- .../line-clamp-with-abspos-003.html | 29 + .../line-clamp-with-abspos-003.tentative.html | 29 - .../line-clamp-with-abspos-004.html | 34 + .../line-clamp-with-abspos-004.tentative.html | 34 - ...e.html => line-clamp-with-abspos-005.html} | 17 +- .../line-clamp-with-abspos-005.tentative.html | 29 - .../line-clamp-with-abspos-006.html | 35 + .../line-clamp-with-abspos-006.tentative.html | 34 - .../line-clamp-with-abspos-007.html | 30 + .../line-clamp-with-abspos-007.tentative.html | 30 - .../line-clamp-with-abspos-008.html | 35 + .../line-clamp-with-abspos-009.html | 31 + .../line-clamp-with-abspos-010.html | 36 + ...e.html => line-clamp-with-abspos-011.html} | 18 +- .../line-clamp-with-abspos-012.html | 37 + .../line-clamp-with-abspos-013.html | 32 + .../line-clamp-with-abspos-014.html | 36 + .../line-clamp-with-abspos-015.html | 32 + .../line-clamp-with-abspos-016.html | 32 + .../line-clamp-with-abspos-017.tentative.html | 37 + ...e.html => line-clamp-with-abspos-018.html} | 2 +- ...e.html => line-clamp-with-abspos-019.html} | 24 +- ...e.html => line-clamp-with-abspos-020.html} | 22 +- ...e.html => line-clamp-with-abspos-021.html} | 10 +- ...e.html => line-clamp-with-abspos-022.html} | 7 +- .../line-clamp-with-fixed-pos-001.html | 29 + .../line-clamp-with-fixed-pos-002.html | 34 + .../line-clamp-with-fixed-pos-003.html | 29 + .../line-clamp-with-fixed-pos-004.html | 34 + .../line-clamp-with-fixed-pos-005.html | 30 + .../line-clamp-with-fixed-pos-006.html | 35 + .../line-clamp-with-fixed-pos-007.html | 30 + .../line-clamp-with-fixed-pos-008.html | 35 + .../line-clamp-with-fixed-pos-009.html | 31 + .../line-clamp-with-fixed-pos-010.html | 36 + .../line-clamp-with-fixed-pos-011.html | 33 + .../line-clamp-with-fixed-pos-012.html | 37 + .../line-clamp-with-fixed-pos-013.html | 32 + .../line-clamp-with-fixed-pos-014.html | 36 + .../line-clamp-with-fixed-pos-015.html | 37 + ...tml => line-clamp-with-fixed-pos-016.html} | 18 +- .../line-clamp-with-fixed-pos-017.html | 33 + .../line-clamp-with-abspos-001-ref.html | 8 +- .../line-clamp-with-abspos-005-ref.html | 13 +- ...ml => line-clamp-with-abspos-009-ref.html} | 25 +- ...ml => line-clamp-with-abspos-013-ref.html} | 17 +- ...ml => line-clamp-with-abspos-016-ref.html} | 16 +- ...ml => line-clamp-with-abspos-018-ref.html} | 0 ...ml => line-clamp-with-abspos-019-ref.html} | 17 +- ...html => webkit-line-clamp-abspos-001.html} | 0 ...scroll-marker-active-unreached-target.html | 113 ++ .../parsing/transform-valid.html | 20 +- .../calc-sibling-function-in-shadow-dom.html | 10 +- .../sibling-function-invalidation.html | 52 - .../scoped/auto-name-on-descendant.html | 110 ++ .../scoped/auto-name.html | 81 + .../display-none-during-transition.html | 74 + ...ocument-element-start-view-transition.html | 91 + ...ot-containing-block-static-iframe-ref.html | 27 + ...apshot-containing-block-static-iframe.html | 55 + ...nsition-name-stacking-context-dynamic.html | 22 + ...mutable-no-document-element-crashtest.html | 9 + ...resize-aborts-transition-before-ready.html | 8 +- .../window-resize-aborts-transition.html | 8 +- .../orthogonal-dynamic-size-001.html | 18 + .../allow-attribute-with-create.https.html | 138 ++ ...ml => allow-attribute-with-get.https.html} | 2 +- ...abled-by-permissions-policy.https.sub.html | 49 + ...-permissions-policy.https.sub.html.headers | 1 + .../create.tentative.https.html | 198 +- .../wpt/tests/digital-credentials/dc-types.ts | 25 +- .../default-permissions-policy.https.sub.html | 42 +- ...-permissions-policy.https.sub.html.headers | 1 - ...rigin-by-permissions-policy.https.sub.html | 57 +- ...-permissions-policy.https.sub.html.headers | 2 +- ...bled-by-permissions-policy.https.sub.html} | 0 ...-permissions-policy.https.sub.html.headers | 1 + .../get.tentative.https.html | 2 +- .../digital-credentials/support/helper.js | 160 +- ....https.html => user-activation.https.html} | 29 +- .../interactionid-orphan-pointerup.html | 11 +- .../resources/event-timing-test-utils.js | 15 +- tests/wpt/tests/fonts/math/css-units.woff | Bin 0 -> 1236 bytes .../interaction/focus/tab-table-caption.html | 57 + ...t-in-page-keyboard-behavior.tentative.html | 21 + .../select-parsing.tentative.html | 8 + .../dialog-closedby-bounds-clicking.html | 100 + .../dialog-closedby-corner-cases.html | 16 +- .../the-dialog-element/dialog-closedby.html | 18 +- .../relations/css-styling/lengths-1-ref.html | 7 +- .../relations/css-styling/lengths-1.html | 77 +- .../relations/css-styling/lengths-2.html | 57 +- .../css-styling/lengths-vi-vb-units.html | 50 + tests/wpt/tests/mathml/tools/css-units.py | 19 + .../resources/digital-credentials-create.html | 35 + .../property-reflection-idl-setters.html | 30 + .../resources/property-reflection-helper.js | 87 +- ...tion-with-paint-before-back.tentative.html | 7 +- .../resources/soft-navigation-helper.js | 6 +- .../prefetch/resources/authenticate.py | 1 + .../resources/basic-service-worker.js | 21 + .../prefetch/resources/cookies.py | 1 + .../prefetch/resources/prefetch_nvs_hint.py | 1 + .../prefetch/resources/utils.sub.js | 22 + .../service-worker/basic.sub.https.html | 31 +- tests/wpt/tests/streams/WEB_FEATURES.yml | 5 + .../wpt/tests/streams/piping/WEB_FEATURES.yml | 3 + .../streams/readable-streams/WEB_FEATURES.yml | 14 + .../crashtests/WEB_FEATURES.yml | 7 + .../transform-streams/WEB_FEATURES.yml | 8 + .../streams/writable-streams/WEB_FEATURES.yml | 3 + .../ci/requirements_macos_color_profile.txt | 18 +- ...viewport-segments-env-variables.https.html | 18 +- ...port-segments-segments-property.https.html | 23 +- .../bidi/web_extension/uninstall/invalid.py | 15 +- .../dequantizeLinear.https.any.js | 9 +- .../depth-sensing/matchDepthViewValues.js | 4 +- 264 files changed, 4939 insertions(+), 1194 deletions(-) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-001.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-002.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-003.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-004.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-005.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-006.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-007.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-008.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-009.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-010.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-011.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-012.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-013.html.ini (100%) rename tests/wpt/meta/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-014.html.ini (100%) create mode 100644 tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-015.html.ini create mode 100644 tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-016.html.ini create mode 100644 tests/wpt/meta/css/css-grid/subgrid/line-names-015.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html.ini delete mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-019.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-020.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-021.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-022.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-016.html.ini create mode 100644 tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html.ini delete mode 100644 tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini create mode 100644 tests/wpt/meta/css/css-transforms/parsing/transform-valid.html.ini create mode 100644 tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini create mode 100644 tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini create mode 100644 tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini rename tests/wpt/tests/ai/summarizer/{summarizer-abort.tentative.https.any.js => summarizer-abort.tentative.https.window.js} (100%) rename tests/wpt/tests/ai/summarizer/{summarizer-availability-available.tentative.https.any.js => summarizer-availability-available.tentative.https.window.js} (100%) rename tests/wpt/tests/ai/summarizer/{summarizer-availability.tentative.https.any.js => summarizer-availability.tentative.https.window.js} (100%) rename tests/wpt/tests/ai/summarizer/{summarizer-create-available.tentative.https.any.js => summarizer-create-available.tentative.https.window.js} (100%) rename tests/wpt/tests/ai/summarizer/{summarizer-create.tentative.https.any.js => summarizer-create.tentative.https.window.js} (100%) rename tests/wpt/tests/ai/summarizer/{summarizer-measureInputUsage.tentative.https.any.js => summarizer-measureInputUsage.tentative.https.window.js} (100%) rename tests/wpt/tests/ai/summarizer/{summarizer-summarize-streaming.tentative.https.any.js => summarizer-summarize-streaming.tentative.https.window.js} (100%) rename tests/wpt/tests/ai/summarizer/{summarizer-summarize.tentative.https.any.js => summarizer-summarize.tentative.https.window.js} (100%) create mode 100644 tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_already_expired.https.any.js create mode 100644 tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_no_change.https.any.js create mode 100644 tests/wpt/tests/cookies/partitioned-cookies/partitioned-cookies-samesite-attribute.https.html create mode 100644 tests/wpt/tests/cookies/partitioned-cookies/resources/partitioned-cookies-samesite-attributes-embed.html create mode 100644 tests/wpt/tests/css/css-break/nested-fixedpos-in-inline-003-crash.html rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-001-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-001.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-002-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-002.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-003-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-003.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-004-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-004.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-005-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-005.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-006-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-006.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-007-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-007.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-008-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-008.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-009-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-009.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-010-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-010.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-011-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-011.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-012-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-012.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-013-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-013.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-014-ref.html (100%) rename tests/wpt/tests/css/css-gaps/{tentative => }/multicol/multicol-gap-decorations-014.html (100%) create mode 100644 tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015-ref.html create mode 100644 tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015.html create mode 100644 tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016-ref.html create mode 100644 tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016.html create mode 100644 tests/wpt/tests/css/css-grid/grid-definition/grid-auto-fit-with-calc.html create mode 100644 tests/wpt/tests/css/css-grid/subgrid/line-names-015.html rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-001.tentative.html => line-clamp-with-abspos-001.html} (56%) rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-002.tentative.html => line-clamp-with-abspos-002.html} (58%) create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html delete mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html delete mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-008.tentative.html => line-clamp-with-abspos-005.html} (51%) delete mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html delete mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html delete mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-009.tentative.html => line-clamp-with-abspos-011.html} (52%) create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-010.tentative.html => line-clamp-with-abspos-018.html} (92%) rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-011.tentative.html => line-clamp-with-abspos-019.html} (75%) rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-012.tentative.html => line-clamp-with-abspos-020.html} (63%) rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-013.tentative.html => line-clamp-with-abspos-021.html} (73%) rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-with-abspos-014.tentative.html => line-clamp-with-abspos-022.html} (63%) create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html rename tests/wpt/tests/css/css-overflow/line-clamp/{line-clamp-auto-025.tentative.html => line-clamp-with-fixed-pos-016.html} (51%) create mode 100644 tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html rename tests/wpt/tests/css/css-overflow/line-clamp/reference/{line-clamp-with-abspos-006-ref.html => line-clamp-with-abspos-009-ref.html} (56%) rename tests/wpt/tests/css/css-overflow/line-clamp/reference/{line-clamp-with-abspos-008-ref.html => line-clamp-with-abspos-013-ref.html} (65%) rename tests/wpt/tests/css/css-overflow/line-clamp/reference/{line-clamp-with-abspos-007-ref.html => line-clamp-with-abspos-016-ref.html} (60%) rename tests/wpt/tests/css/css-overflow/line-clamp/reference/{line-clamp-with-abspos-010-ref.html => line-clamp-with-abspos-018-ref.html} (100%) rename tests/wpt/tests/css/css-overflow/line-clamp/reference/{line-clamp-with-abspos-011-ref.html => line-clamp-with-abspos-019-ref.html} (74%) rename tests/wpt/tests/css/css-overflow/line-clamp/{webkit-line-clamp-abspos-001.tentative.html => webkit-line-clamp-abspos-001.html} (100%) create mode 100644 tests/wpt/tests/css/css-overflow/scroll-marker-active-unreached-target.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/auto-name-on-descendant.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/auto-name.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/display-none-during-transition.html create mode 100644 tests/wpt/tests/css/css-view-transitions/scoped/document-element-start-view-transition.html create mode 100644 tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe-ref.html create mode 100644 tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe.html create mode 100644 tests/wpt/tests/css/css-view-transitions/view-transition-name-stacking-context-dynamic.html create mode 100644 tests/wpt/tests/css/css-writing-modes/orthogonal-dynamic-size-001.html create mode 100644 tests/wpt/tests/digital-credentials/allow-attribute-with-create.https.html rename tests/wpt/tests/digital-credentials/{allow-attribute.https.html => allow-attribute-with-get.https.html} (97%) create mode 100644 tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html create mode 100644 tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html.headers delete mode 100644 tests/wpt/tests/digital-credentials/disabled-by-permissions-policy.https.sub.html.headers rename tests/wpt/tests/digital-credentials/{disabled-by-permissions-policy.https.sub.html => get.disabled-by-permissions-policy.https.sub.html} (100%) create mode 100644 tests/wpt/tests/digital-credentials/get.disabled-by-permissions-policy.https.sub.html.headers rename tests/wpt/tests/digital-credentials/{get-user-activation.https.html => user-activation.https.html} (56%) create mode 100644 tests/wpt/tests/fonts/math/css-units.woff create mode 100644 tests/wpt/tests/html/interaction/focus/tab-table-caption.html create mode 100644 tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-bounds-clicking.html create mode 100644 tests/wpt/tests/mathml/relations/css-styling/lengths-vi-vb-units.html create mode 100644 tests/wpt/tests/mathml/tools/css-units.py create mode 100644 tests/wpt/tests/permissions-policy/resources/digital-credentials-create.html create mode 100644 tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection-idl-setters.html create mode 100644 tests/wpt/tests/streams/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/streams/piping/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/streams/readable-streams/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/streams/readable-streams/crashtests/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/streams/transform-streams/WEB_FEATURES.yml create mode 100644 tests/wpt/tests/streams/writable-streams/WEB_FEATURES.yml diff --git a/tests/wpt/meta/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/meta/FileAPI/url/url-in-tags-revoke.window.js.ini index 745f3e84edb..62c2d998e8f 100644 --- a/tests/wpt/meta/FileAPI/url/url-in-tags-revoke.window.js.ini +++ b/tests/wpt/meta/FileAPI/url/url-in-tags-revoke.window.js.ini @@ -14,6 +14,3 @@ [Opening a blob URL in a new window by clicking an tag works immediately before revoking the URL.] expected: TIMEOUT - - [Fetching a blob URL immediately before revoking it works in + @@ -10,11 +13,21 @@ const { HTTPS_ORIGIN, HTTPS_NOTSAMESITE_ORIGIN } = get_host_info(); const PATH = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); const IFRAME_PATH = PATH + 'resources/iframe-helper.html'; +const getId = (() => { + let idCount = 0; + return () => idCount++; +})(); + function run_iframe_test(iframe, test_name) { - iframe.contentWindow.postMessage({type: test_name}, '*'); + const id = getId(); + iframe.contentWindow.postMessage({id, type: test_name}, '*'); const {promise, resolve, reject} = Promise.withResolvers(); window.onmessage = message => { + if (message.data.id !== id){ + return; + } + if (message.data.success) { resolve(message.data.success); } else { @@ -27,19 +40,18 @@ function run_iframe_test(iframe, test_name) { function load_iframe(src, permission_policy) { let iframe = document.createElement('iframe'); - return new Promise((resolve, reject) => { - iframe.onload = () => { - resolve(iframe); - } - iframe.src = src; - iframe.allow = permission_policy; - document.body.appendChild(iframe); - }); + const {promise, resolve} = Promise.withResolvers(); + + iframe.onload = () => { + resolve(iframe); + } + iframe.src = src; + iframe.allow = permission_policy; + document.body.appendChild(iframe); + + return promise; } -// TODO(crbug.com/414428433): Tests in this file intermittently crash. -// Re-enable once potential causes in Permissions Policy implementation -// and test setup are addressed. promise_test(async t => { const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; const iframe = await load_iframe(src, /*permission_policy=*/""); @@ -49,7 +61,7 @@ promise_test(async t => { promise_test(async t => { const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; - const iframe = await load_iframe(src, "languageDetector"); + const iframe = await load_iframe(src, "language-detector"); assert_equals( await run_iframe_test(iframe, "LanguageDetectorCreate"), 'Success'); @@ -73,7 +85,7 @@ promise_test(async t => { promise_test(async t => { const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH; - const iframe = await load_iframe(src, "languageDetector"); + const iframe = await load_iframe(src, "language-detector"); assert_in_array( await run_iframe_test(iframe, "LanguageDetectorAvailability"), diff --git a/tests/wpt/tests/ai/language_detection/detector.https.window.js b/tests/wpt/tests/ai/language_detection/detector.https.window.js index b0255bc552b..379b8741534 100644 --- a/tests/wpt/tests/ai/language_detection/detector.https.window.js +++ b/tests/wpt/tests/ai/language_detection/detector.https.window.js @@ -184,6 +184,11 @@ promise_test(async t => { }); }, 'Aborting LanguageDetector.measureInputUsage().'); +promise_test(async () => { + const detector = await createLanguageDetector({expectedInputLanguages: []}); + assert_equals(detector.expectedInputLanguages, null); +}, 'Creating LanguageDetector with empty expectedInputLanguages array'); + promise_test(async () => { const detector = await createLanguageDetector(); assert_equals(detector.expectedInputLanguages, null); diff --git a/tests/wpt/tests/ai/language_detection/resources/iframe-helper.html b/tests/wpt/tests/ai/language_detection/resources/iframe-helper.html index fe07de3f8ab..35ba8525587 100644 --- a/tests/wpt/tests/ai/language_detection/resources/iframe-helper.html +++ b/tests/wpt/tests/ai/language_detection/resources/iframe-helper.html @@ -1,18 +1,28 @@ + + + diff --git a/tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.window.js similarity index 100% rename from tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.any.js rename to tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.window.js diff --git a/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.window.js similarity index 100% rename from tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.any.js rename to tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.window.js diff --git a/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.window.js similarity index 100% rename from tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.any.js rename to tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.window.js diff --git a/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.window.js similarity index 100% rename from tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.any.js rename to tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.window.js diff --git a/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js similarity index 100% rename from tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.any.js rename to tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js diff --git a/tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.window.js similarity index 100% rename from tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.any.js rename to tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.window.js diff --git a/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js similarity index 100% rename from tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.any.js rename to tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js diff --git a/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.any.js b/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.window.js similarity index 100% rename from tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.any.js rename to tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.window.js diff --git a/tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_already_expired.https.any.js b/tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_already_expired.https.any.js new file mode 100644 index 00000000000..c40fdbeb6f1 --- /dev/null +++ b/tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_already_expired.https.any.js @@ -0,0 +1,86 @@ +// META: title=Cookie Store API: cookiechange event in ServiceWorker with already-expired cookie. +// META: global=serviceworker + +'use strict'; + +const kScope = '/cookie-store/does/not/exist'; + +function WorkerActivationPromise() { + return new Promise((resolve) => { + if (registration.active) { + resolve(); + return; + } + self.addEventListener('activate', () => { resolve(); }); + }); +} + +function RunOnceCookieChangeReceivedPromise() { + return new Promise(resolve => { + const listener = ev => { + resolve(ev); + self.removeEventListener('cookiechange', listener); + }; + self.addEventListener('cookiechange', listener); + }); +} + +promise_test(async t => { + await WorkerActivationPromise(); + + const subscriptions = [{url: `${kScope}/path`}]; + await registration.cookies.subscribe(subscriptions); + t.add_cleanup(() => registration.cookies.unsubscribe(subscriptions)); + + const eventPromise = RunOnceCookieChangeReceivedPromise(); + + await cookieStore.set({ + name: 'cookie-name', + value: 'already-expired', + expires: new Date(new Date() - 10_000), + }); + + await cookieStore.set('another-cookie-name', 'ignore'); + t.add_cleanup(() => cookieStore.delete('another-cookie-name')); + + const event = await eventPromise; + assert_equals(event.type, 'cookiechange'); + assert_equals(event.changed.length, 1); + assert_equals(event.changed[0].name, 'another-cookie-name'); + assert_equals(event.changed[0].value, 'ignore'); + assert_equals(event.deleted.length, 0); +}); + +promise_test(async t => { + await WorkerActivationPromise(); + + const subscriptions = [{url: `${kScope}/path`}]; + await registration.cookies.subscribe(subscriptions); + t.add_cleanup(() => registration.cookies.unsubscribe(subscriptions)); + + const eventPromise = RunOnceCookieChangeReceivedPromise(); + + await cookieStore.set({ + name: 'cookie-name', + value: 'already-expired', + expires: new Date(new Date() - 10_000), + partitioned: true, + }); + + await cookieStore.set({ + name: 'another-cookie-name', + value: 'ignore', + partitioned: true, + }); + t.add_cleanup(() => cookieStore.delete({ + name: 'another-cookie-name', + partitioned: true, + })); + + const event = await eventPromise; + assert_equals(event.type, 'cookiechange'); + assert_equals(event.changed.length, 1); + assert_equals(event.changed[0].name, 'another-cookie-name'); + assert_equals(event.changed[0].value, 'ignore'); + assert_equals(event.deleted.length, 0); +}); diff --git a/tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_no_change.https.any.js b/tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_no_change.https.any.js new file mode 100644 index 00000000000..fb2e2db7381 --- /dev/null +++ b/tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_no_change.https.any.js @@ -0,0 +1,128 @@ +// META: title=Cookie Store API: cookiechange event in ServiceWorker with already-expired cookie. +// META: global=serviceworker + +'use strict'; + +const kScope = '/cookie-store/does/not/exist'; + +// Resolves when the service worker receives the 'activate' event. +function WorkerActivationPromise() { + return new Promise((resolve) => { + if (registration.active) { + resolve(); + return; + } + self.addEventListener('activate', () => { resolve(); }); + }); +} + +// Resolves when a cookiechange event is received. +function RunOnceCookieChangeReceivedPromise() { + return new Promise(resolve => { + const listener = ev => { + resolve(ev); + self.removeEventListener('cookiechange', listener); + }; + self.addEventListener('cookiechange', listener); + }); +} + +promise_test(async t => { + await WorkerActivationPromise(); + + const subscriptions = [{url: `${kScope}/path`}]; + await registration.cookies.subscribe(subscriptions); + t.add_cleanup(() => registration.cookies.unsubscribe(subscriptions)); + + let cookie_change_promise = RunOnceCookieChangeReceivedPromise(); + + await cookieStore.set('cookie-name', 'value'); + t.add_cleanup(async () => { + await cookieStore.delete('cookie-name'); + }); + + // Observes original cookie. + let event = await cookie_change_promise; + assert_equals(event.type, 'cookiechange'); + assert_equals(event.changed.length, 1); + assert_equals(event.changed[0].name, 'cookie-name'); + assert_equals(event.changed[0].value, 'value'); + assert_equals(event.deleted.length, 0); + + cookie_change_promise = RunOnceCookieChangeReceivedPromise(); + + // Duplicate overwrite should not be observed. + await cookieStore.set('cookie-name', 'value'); + + // This cookie should be observed instead. + await cookieStore.set('alternate-cookie-name', 'ignore'); + t.add_cleanup(async () => { + await cookieStore.delete('alternate-cookie-name'); + }); + + event = await cookie_change_promise; + assert_equals(event.type, 'cookiechange'); + assert_equals(event.changed.length, 1); + assert_equals(event.changed[0].name, 'alternate-cookie-name'); + assert_equals(event.changed[0].value, 'ignore'); + assert_equals(event.deleted.length, 0); +}); + +promise_test(async t => { + await WorkerActivationPromise(); + + const subscriptions = [{url: `${kScope}/path`}]; + await registration.cookies.subscribe(subscriptions); + t.add_cleanup(() => registration.cookies.unsubscribe(subscriptions)); + + let cookie_change_promise = RunOnceCookieChangeReceivedPromise(); + + await cookieStore.set({ + name: 'cookie-name', + value: 'value', + partitioned: true, + }); + t.add_cleanup(async () => { + await cookieStore.delete({ + name: 'cookie-name', + partitioned: true, + }); + }); + + // Observes original cookie. + let event = await cookie_change_promise; + assert_equals(event.type, 'cookiechange'); + assert_equals(event.changed.length, 1); + assert_equals(event.changed[0].name, 'cookie-name'); + assert_equals(event.changed[0].value, 'value'); + assert_equals(event.deleted.length, 0); + + cookie_change_promise = RunOnceCookieChangeReceivedPromise(); + + // Duplicate overwrite should not be observed. + await cookieStore.set({ + name: 'cookie-name', + value: 'value', + partitioned: true, + }); + + // This cookie should instead. + await cookieStore.set({ + name: 'alternate-cookie-name', + value: 'ignore', + partitioned: true, + }); + t.add_cleanup(async () => { + await cookieStore.delete({ + name: 'alternate-cookie-name', + partitioned: true, + }); + }); + + event = await cookie_change_promise; + assert_equals(event.type, 'cookiechange'); + assert_equals(event.changed.length, 1); + assert_equals(event.changed[0].name, 'alternate-cookie-name'); + assert_equals(event.changed[0].value, 'ignore'); + assert_equals(event.deleted.length, 0); +}); diff --git a/tests/wpt/tests/cookies/partitioned-cookies/partitioned-cookies-samesite-attribute.https.html b/tests/wpt/tests/cookies/partitioned-cookies/partitioned-cookies-samesite-attribute.https.html new file mode 100644 index 00000000000..323fb08236e --- /dev/null +++ b/tests/wpt/tests/cookies/partitioned-cookies/partitioned-cookies-samesite-attribute.https.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + Test SameSite attribute behavior for partitioned cookies + + + + diff --git a/tests/wpt/tests/cookies/partitioned-cookies/resources/partitioned-cookies-samesite-attributes-embed.html b/tests/wpt/tests/cookies/partitioned-cookies/resources/partitioned-cookies-samesite-attributes-embed.html new file mode 100644 index 00000000000..c6f64639eac --- /dev/null +++ b/tests/wpt/tests/cookies/partitioned-cookies/resources/partitioned-cookies-samesite-attributes-embed.html @@ -0,0 +1,31 @@ + + + +Partitioned cookie SameSite test site embedded in a cross-site context + + + + + + + diff --git a/tests/wpt/tests/css/css-align/abspos/align-self-static-position-005-ref.html b/tests/wpt/tests/css/css-align/abspos/align-self-static-position-005-ref.html index 947bd270448..62597fba605 100644 --- a/tests/wpt/tests/css/css-align/abspos/align-self-static-position-005-ref.html +++ b/tests/wpt/tests/css/css-align/abspos/align-self-static-position-005-ref.html @@ -14,7 +14,7 @@ }
- hello + hello hello world diff --git a/tests/wpt/tests/css/css-align/abspos/align-self-static-position-005.html b/tests/wpt/tests/css/css-align/abspos/align-self-static-position-005.html index e148f0ebda3..207a5443331 100644 --- a/tests/wpt/tests/css/css-align/abspos/align-self-static-position-005.html +++ b/tests/wpt/tests/css/css-align/abspos/align-self-static-position-005.html @@ -22,7 +22,7 @@ }
- hello + hello hello world diff --git a/tests/wpt/tests/css/css-break/nested-fixedpos-in-inline-003-crash.html b/tests/wpt/tests/css/css-break/nested-fixedpos-in-inline-003-crash.html new file mode 100644 index 00000000000..88a04288464 --- /dev/null +++ b/tests/wpt/tests/css/css-break/nested-fixedpos-in-inline-003-crash.html @@ -0,0 +1,13 @@ + + +
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-001-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-001-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-001-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-001-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-001.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-001.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-001.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-001.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-002-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-002-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-002-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-002-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-002.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-002.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-002.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-002.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-003-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-003-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-003-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-003-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-003.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-003.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-003.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-003.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-004-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-004-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-004-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-004-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-004.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-004.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-004.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-004.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-005-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-005-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-005-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-005-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-005.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-005.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-005.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-005.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-006-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-006-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-006-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-006-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-006.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-006.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-006.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-006.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-007-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-007-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-007-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-007-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-007.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-007.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-007.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-007.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-008-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-008-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-008-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-008-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-008.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-008.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-008.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-008.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-009-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-009-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-009-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-009-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-009.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-009.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-009.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-009.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-010-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-010-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-010-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-010-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-010.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-010.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-010.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-010.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-011-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-011-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-011-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-011-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-011.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-011.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-011.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-011.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-012-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-012-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-012-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-012-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-012.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-012.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-012.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-012.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-013-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-013-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-013-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-013-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-013.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-013.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-013.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-013.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-014-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-014-ref.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-014-ref.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-014-ref.html diff --git a/tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-014.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-014.html similarity index 100% rename from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-014.html rename to tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-014.html diff --git a/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015-ref.html new file mode 100644 index 00000000000..2fee77be84c --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015-ref.html @@ -0,0 +1,70 @@ + + + + +
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
diff --git a/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015.html new file mode 100644 index 00000000000..65af5112097 --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015.html @@ -0,0 +1,55 @@ + + + CSS Gap Decorations: Multicolumn gap decorations painted with different num of columns per row. + + + + + +
+
+
+ +
+
+
+ +
+
+
+
+
diff --git a/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016-ref.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016-ref.html new file mode 100644 index 00000000000..8b2458fccce --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016-ref.html @@ -0,0 +1,70 @@ + + + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
diff --git a/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016.html b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016.html new file mode 100644 index 00000000000..da205e0b88b --- /dev/null +++ b/tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016.html @@ -0,0 +1,55 @@ + + + CSS Gap Decorations: Multicolumn gap decorations painted with different num of columns per row. + + + + + +
+
+
+
+
+ +
+
+
+ +
+
+
diff --git a/tests/wpt/tests/css/css-grid/grid-definition/grid-auto-fit-with-calc.html b/tests/wpt/tests/css/css-grid/grid-definition/grid-auto-fit-with-calc.html new file mode 100644 index 00000000000..4b655c1e121 --- /dev/null +++ b/tests/wpt/tests/css/css-grid/grid-definition/grid-auto-fit-with-calc.html @@ -0,0 +1,23 @@ + + + + + + + + + +

Test passes if there is a filled green square.

+
+
+
+
+ + diff --git a/tests/wpt/tests/css/css-grid/subgrid/line-names-015.html b/tests/wpt/tests/css/css-grid/subgrid/line-names-015.html new file mode 100644 index 00000000000..6f5479abf89 --- /dev/null +++ b/tests/wpt/tests/css/css-grid/subgrid/line-names-015.html @@ -0,0 +1,34 @@ + + +CSS Grid Test: Clamping a nested subgrid's grid-template-areas in one dimension + + + + +

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

+
+
+
+
+
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-031.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-031.tentative.html index a723430c83e..737caff7775 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-031.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-031.tentative.html @@ -20,6 +20,9 @@ .collapse-through { margin: 10px; } +.rel { + position: relative; +} .abspos { position: absolute; right: 0; @@ -32,7 +35,8 @@
@@ -41,7 +45,7 @@ Line 2 Line 3 Line 4
-
+
Line 5 Line 6 Line 7 diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html similarity index 56% rename from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html rename to tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html index 79667f23fbd..fd261493f06 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html @@ -1,10 +1,10 @@ -CSS Overflow: abspos at the start of a line-clamp +CSS Overflow: abspos whose containing block is outside the line-clamp container gets painted - + diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html similarity index 58% rename from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html rename to tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html index cecb9d52bc6..233a345c927 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html @@ -1,10 +1,10 @@ -CSS Overflow: abspos at the start of a line-clamp +CSS Overflow: abspos whose containing block is outside the line-clamp container gets painted - + +
Line 1 +Line 2 +Line 3 +Line 4 +
Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html deleted file mode 100644 index e4bd1de222e..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html +++ /dev/null @@ -1,29 +0,0 @@ - - -CSS Overflow: abspos in line-clamp after clamp point - - - - - -
Line 1 -Line 2 -Line 3 -Line 4 -
Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html new file mode 100644 index 00000000000..c079974ac5c --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html @@ -0,0 +1,34 @@ + + +CSS Overflow: abspos whose containing block is outside the line-clamp container gets painted + + + + + +
+
Line 1 +Line 2 +Line 3 +Line 4
+
+
Line 5
+
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html deleted file mode 100644 index 483e6d1da6d..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html +++ /dev/null @@ -1,34 +0,0 @@ - - -CSS Overflow: abspos in line-clamp after clamp point - - - - - -
-
Line 1 -Line 2 -Line 3 -Line 4
-
-
Line 5
-
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html similarity index 51% rename from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html rename to tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html index 9c62e44f389..58656135cf0 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html @@ -1,26 +1,25 @@ -CSS Overflow: bottom: 0 abspos in line-clamp before clamp point +CSS Overflow: abspos whose containing block is the line-clamp container gets painted - - + + diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html deleted file mode 100644 index 3dc77831a06..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html +++ /dev/null @@ -1,29 +0,0 @@ - - -CSS Overflow: abspos in line-clamp before clamp point which overflows - - - - - -
Line 1 -Line 2 -Line 3 -Line 4
-Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html new file mode 100644 index 00000000000..39f1758fa18 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html @@ -0,0 +1,35 @@ + + +CSS Overflow: abspos whose containing block is the line-clamp container gets painted + + + + + +
+
+
Line 1 +Line 2 +Line 3 +Line 4 +Line 5
+
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html deleted file mode 100644 index f18fed6c2da..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html +++ /dev/null @@ -1,34 +0,0 @@ - - -CSS Overflow: abspos in line-clamp before clamp point which overflows - - - - - -
-
Line 1 -Line 2 -Line 3
-
-
Line 4 -Line 5
-
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html new file mode 100644 index 00000000000..f5b4e6ce291 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html @@ -0,0 +1,30 @@ + + +CSS Overflow: abspos whose containing block is the line-clamp container gets painted + + + + + +
Line 1 +Line 2 +Line 3 +Line 4 +
Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html deleted file mode 100644 index f0a1f58c8d3..00000000000 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html +++ /dev/null @@ -1,30 +0,0 @@ - - -CSS Overflow: abspos in line-clamp before clamp point positioned after it - - - - - -
Line 1 -Line 2 -Line 3 -Line 4 -Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html new file mode 100644 index 00000000000..cd619d51538 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html @@ -0,0 +1,35 @@ + + +CSS Overflow: abspos whose containing block is the line-clamp container gets painted + + + + + +
+
Line 1 +Line 2 +Line 3 +Line 4
+
+
Line 5
+
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html new file mode 100644 index 00000000000..b3d332811d6 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html @@ -0,0 +1,31 @@ + + +CSS Overflow: abspos whose containing block is fully before the clamp point gets painted + + + + + +
Line 1 +
Line 2 +Line 3
Line 4 +Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html new file mode 100644 index 00000000000..8a7c2790d6c --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html @@ -0,0 +1,36 @@ + + +CSS Overflow: abspos whose containing block is fully before the clamp point gets painted + + + + + +
+
Line 1
+
+
+
Line 2
+
Line 3
+
+
Line 4
+
Line 5
+
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html similarity index 52% rename from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html rename to tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html index dce04d720cf..cb4ab051480 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html @@ -1,26 +1,27 @@ -CSS Overflow: abspos in line-clamp after clamp point positioned before it +CSS Overflow: abspos whose containing block is fully after the clamp point is hidden - + @@ -28,4 +29,5 @@ Line 2 Line 3 Line 4 -Line 5
+
Line 5 +Line 6
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html new file mode 100644 index 00000000000..ae2f0364f39 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html @@ -0,0 +1,37 @@ + + +CSS Overflow: abspos whose containing block is fully after the clamp point gets painted + + + + + +
+
Line 1
+
Line 2
+
Line 3
+
Line 4
+
+
+
Line 5
+
Line 6
+
+
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html new file mode 100644 index 00000000000..66a615ddd1c --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html @@ -0,0 +1,32 @@ + + +CSS Overflow: abspos whose containing block contains the clamp point gets painted + + + + + +
Line 1 +Line 2 +Line 3 +
Line 4 +Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html new file mode 100644 index 00000000000..e8257d1d402 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html @@ -0,0 +1,36 @@ + + +CSS Overflow: abspos whose containing block contains the clamp point gets painted + + + + + +
+
Line 1
+
Line 2
+
Line 3
+
+
Line 4
+
Line 5
+
+
+
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html new file mode 100644 index 00000000000..273610e071d --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html @@ -0,0 +1,32 @@ + + +CSS Overflow: abspos whose containing block is an inline fully after the clamp point is hidden + + + + + +
Line 1 +Line 2 +Line 3 +Line 4 +
Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html new file mode 100644 index 00000000000..0b329a7d734 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html @@ -0,0 +1,32 @@ + + +CSS Overflow: abspos whose containing block is an inline that contains the clamp point gets painted + + + + + +
Line 1 +Line 2 +Line 3 +Line 4 +
Line 5
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html new file mode 100644 index 00000000000..8ae9cc949c6 --- /dev/null +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html @@ -0,0 +1,37 @@ + + +CSS Overflow: abspos whose containing block is an inline that gets displaced by the ellipsis + + + + + +
+
Line 1 +Line 2 +Line 3 hidden +fdgdgjldsfg +
+
+

Following content.

diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html similarity index 92% rename from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html rename to tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html index 325278b3a0b..27139b18b8d 100644 --- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html +++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html @@ -3,7 +3,7 @@ CSS Overflow: line-clamp doesn't propagate to abspos - +
-
Line 1 -Line 2 -Line 3 -Line 4
-Line 5 -Line 6
+
+
Line 1
+
Line 2
+
Line 3
+
Line 4
+
Line 5
+
Line 6
+
+ + + + + + + + + +
+ +
+ + + + diff --git a/tests/wpt/tests/css/css-transforms/parsing/transform-valid.html b/tests/wpt/tests/css/css-transforms/parsing/transform-valid.html index 89a8b519b1b..b436fbdea30 100644 --- a/tests/wpt/tests/css/css-transforms/parsing/transform-valid.html +++ b/tests/wpt/tests/css/css-transforms/parsing/transform-valid.html @@ -38,14 +38,14 @@ test_valid_value("transform", "scale(1, 200%)", "scale(1, 2)"); test_valid_value("transform", "scale(-250%)", "scale(-2.5)"); test_valid_value("transform", "scale(-500%, -620%)", "scale(-5, -6.2)"); -test_valid_value("transform", "scaleX(7)"); -test_valid_value("transform", "scaleX(720%)", "scaleX(7.2)"); +test_valid_value("transform", "scaleX(7)", "scalex(7)"); +test_valid_value("transform", "scaleX(720%)", "scalex(7.2)"); -test_valid_value("transform", "scaleY(-8)"); -test_valid_value("transform", "scaleY(-85%)", "scaleY(-0.85)"); +test_valid_value("transform", "scaleY(-8)", "scaley(-8)"); +test_valid_value("transform", "scaleY(-85%)", "scaley(-0.85)"); -test_valid_value("transform", "scaleZ(4)"); -test_valid_value("transform", "scaleZ(25%)", "scaleZ(0.25)"); +test_valid_value("transform", "scaleZ(4)", "scalez(4)"); +test_valid_value("transform", "scaleZ(25%)", "scalez(0.25)"); test_valid_value("transform", "scale3d(0.5, 2.5, 3)"); test_valid_value("transform", "scale3d(50%, 250%, 300%)", "scale3d(0.5, 2.5, 3)"); @@ -62,11 +62,11 @@ test_valid_value("transform", "skew(90deg)"); test_valid_value("transform", "skew(0, -90deg)", "skew(0deg, -90deg)"); test_valid_value("transform", "skew(90deg, 0)", ["skew(90deg)", "skew(90deg, 0deg)"]); -test_valid_value("transform", "skewX(0)", "skewX(0deg)"); -test_valid_value("transform", "skewX(90deg)"); +test_valid_value("transform", "skewX(0)", "skewx(0deg)"); +test_valid_value("transform", "skewX(90deg)", "skewx(90deg)"); -test_valid_value("transform", "skewY(0)", "skewY(0deg)"); -test_valid_value("transform", "skewY(-90deg)"); +test_valid_value("transform", "skewY(0)", "skewy(0deg)"); +test_valid_value("transform", "skewY(-90deg)", "skewy(-90deg)"); test_valid_value("transform", "perspective(10px)"); test_valid_value("transform", "perspective(none)"); diff --git a/tests/wpt/tests/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html b/tests/wpt/tests/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html index 92fb6ce3351..ca8eb560ba1 100644 --- a/tests/wpt/tests/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html +++ b/tests/wpt/tests/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html @@ -33,9 +33,9 @@
`; - assert_equals(getComputedStyle(target).zIndex, '3'); - assert_equals(getComputedStyle(target).order, '3'); - assert_equals(getComputedStyle(target).orphans, '3'); - assert_equals(getComputedStyle(target).widows, '3'); - }, 'Host children have sibling-index() and sibling-count() based on assignedNodes order'); + assert_equals(getComputedStyle(target).zIndex, '4'); + assert_equals(getComputedStyle(target).order, '4'); + assert_equals(getComputedStyle(target).orphans, '4'); + assert_equals(getComputedStyle(target).widows, '4'); + }, 'Host children have sibling-index() and sibling-count() based on the DOM tree order'); diff --git a/tests/wpt/tests/css/css-values/tree-counting/sibling-function-invalidation.html b/tests/wpt/tests/css/css-values/tree-counting/sibling-function-invalidation.html index 3c75c78530d..74f4995f5f7 100644 --- a/tests/wpt/tests/css/css-values/tree-counting/sibling-function-invalidation.html +++ b/tests/wpt/tests/css/css-values/tree-counting/sibling-function-invalidation.html @@ -48,55 +48,3 @@ assert_equals(t2.offsetHeight, 50); }, "5 siblings after removal"); - - -
- -
-
-
-
-
-
-
- - - -
- -
-
-
-
-
-
-
- diff --git a/tests/wpt/tests/css/css-view-transitions/scoped/auto-name-on-descendant.html b/tests/wpt/tests/css/css-view-transitions/scoped/auto-name-on-descendant.html new file mode 100644 index 00000000000..01d570e8bfc --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/scoped/auto-name-on-descendant.html @@ -0,0 +1,110 @@ + + + + + + + + Scoped element with name auto on descendant + + + + + +
+
A
+
B
+
C
+
+ + + diff --git a/tests/wpt/tests/css/css-view-transitions/scoped/auto-name.html b/tests/wpt/tests/css/css-view-transitions/scoped/auto-name.html new file mode 100644 index 00000000000..2d11985b398 --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/scoped/auto-name.html @@ -0,0 +1,81 @@ + + + + + + + + Scoped element with name auto + + + + + +
+
A
+
B
+
C
+
+ + + diff --git a/tests/wpt/tests/css/css-view-transitions/scoped/display-none-during-transition.html b/tests/wpt/tests/css/css-view-transitions/scoped/display-none-during-transition.html new file mode 100644 index 00000000000..f94d6f7fd76 --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/scoped/display-none-during-transition.html @@ -0,0 +1,74 @@ + + + + + + + + Display none during transition + + + + + +
+ + + diff --git a/tests/wpt/tests/css/css-view-transitions/scoped/document-element-start-view-transition.html b/tests/wpt/tests/css/css-view-transitions/scoped/document-element-start-view-transition.html new file mode 100644 index 00000000000..42f87f93a07 --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/scoped/document-element-start-view-transition.html @@ -0,0 +1,91 @@ + + + + + + + + startViewTransition on document.documentElement + + + + + + + + + +
+ + + diff --git a/tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe-ref.html b/tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe-ref.html new file mode 100644 index 00000000000..188cefecd3d --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe-ref.html @@ -0,0 +1,27 @@ + + +View transitions: use snapshot containing block for static position in iframe (ref) + + + + + + diff --git a/tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe.html b/tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe.html new file mode 100644 index 00000000000..1903b9cacbd --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe.html @@ -0,0 +1,55 @@ + + +View transitions: use snapshot containing block for static position in iframe + + + + + + + + + diff --git a/tests/wpt/tests/css/css-view-transitions/view-transition-name-stacking-context-dynamic.html b/tests/wpt/tests/css/css-view-transitions/view-transition-name-stacking-context-dynamic.html new file mode 100644 index 00000000000..1a908e6f659 --- /dev/null +++ b/tests/wpt/tests/css/css-view-transitions/view-transition-name-stacking-context-dynamic.html @@ -0,0 +1,22 @@ + + + +CSS will-change: 'will-change: view-transition-name' creates a stacking context dynamically + + + + +

Test passes if there is a filled green square.

+
+
+
+ diff --git a/tests/wpt/tests/css/css-view-transitions/view-transition-types-mutable-no-document-element-crashtest.html b/tests/wpt/tests/css/css-view-transitions/view-transition-types-mutable-no-document-element-crashtest.html index f1940c39869..d5c0abd652c 100644 --- a/tests/wpt/tests/css/css-view-transitions/view-transition-types-mutable-no-document-element-crashtest.html +++ b/tests/wpt/tests/css/css-view-transitions/view-transition-types-mutable-no-document-element-crashtest.html @@ -3,6 +3,15 @@ + + diff --git a/tests/wpt/tests/digital-credentials/allow-attribute-with-create.https.html b/tests/wpt/tests/digital-credentials/allow-attribute-with-create.https.html new file mode 100644 index 00000000000..4b1e96fec4c --- /dev/null +++ b/tests/wpt/tests/digital-credentials/allow-attribute-with-create.https.html @@ -0,0 +1,138 @@ + + + + + Test allow attribute with "digital-credentials-create" and + CredentialsContainer's .create() method + + + + + + + + + + diff --git a/tests/wpt/tests/digital-credentials/allow-attribute.https.html b/tests/wpt/tests/digital-credentials/allow-attribute-with-get.https.html similarity index 97% rename from tests/wpt/tests/digital-credentials/allow-attribute.https.html rename to tests/wpt/tests/digital-credentials/allow-attribute-with-get.https.html index 667b84bc704..15601d891f2 100644 --- a/tests/wpt/tests/digital-credentials/allow-attribute.https.html +++ b/tests/wpt/tests/digital-credentials/allow-attribute-with-get.https.html @@ -129,7 +129,7 @@ assert_equals(name, "NotAllowedError", fullMessage); } iframe.remove(); - }, `Policy to use: ${details.policy}, is cross-origin: ${details.crossOrigin}, is allowed by policy: ${details.expectIsAllowed}`); + }, `With Get: Policy to use: ${details.policy}, is cross-origin: ${details.crossOrigin}, is allowed by policy: ${details.expectIsAllowed}`); } } diff --git a/tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html b/tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html new file mode 100644 index 00000000000..52db2373f09 --- /dev/null +++ b/tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html @@ -0,0 +1,49 @@ + + + + + + + + + + diff --git a/tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html.headers b/tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html.headers new file mode 100644 index 00000000000..9847d173eb6 --- /dev/null +++ b/tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: digital-credentials-create=() diff --git a/tests/wpt/tests/digital-credentials/create.tentative.https.html b/tests/wpt/tests/digital-credentials/create.tentative.https.html index 299a240ced1..3e17d5b0853 100644 --- a/tests/wpt/tests/digital-credentials/create.tentative.https.html +++ b/tests/wpt/tests/digital-credentials/create.tentative.https.html @@ -13,7 +13,7 @@ diff --git a/tests/wpt/tests/digital-credentials/dc-types.ts b/tests/wpt/tests/digital-credentials/dc-types.ts index 30284e7fad6..83168f8a343 100644 --- a/tests/wpt/tests/digital-credentials/dc-types.ts +++ b/tests/wpt/tests/digital-credentials/dc-types.ts @@ -1,4 +1,6 @@ -export type Protocol = "default" | "openid4vp"; +export type GetProtocol = "default" | "openid4vp"; +export type CreateProtocol = "default" | "openid4vci"; + export type CredentialMediationRequirement = | "conditional" | "optional" @@ -8,7 +10,7 @@ export type CredentialMediationRequirement = /** * @see https://wicg.github.io/digital-credentials/#dom-digitalcredentialrequest */ -export interface DigitalCredentialRequest { +export interface DigitalCredentialGetRequest { protocol: string; data: object; } @@ -20,7 +22,7 @@ export interface DigitalCredentialRequestOptions { /** * The list of credential requests. */ - requests: DigitalCredentialRequest[] | any; + requests: DigitalCredentialGetRequest[] | any; } /** @@ -31,6 +33,23 @@ export interface CredentialRequestOptions { mediation: CredentialMediationRequirement; } +export interface DigitalCredentialCreateRequest { + protocol: string; + data: object; +} + +export interface DigitalCredentialCreationOptions { + /** + * The list of credential requests. + */ + requests: DigitalCredentialCreateRequest[] | any; +} + +export interface CredentialCreationOptions { + digital: DigitalCredentialCreationOptions; + mediation: CredentialMediationRequirement; +} + /** * The actions that can be performed on the API via the iframe. */ diff --git a/tests/wpt/tests/digital-credentials/default-permissions-policy.https.sub.html b/tests/wpt/tests/digital-credentials/default-permissions-policy.https.sub.html index 742a94ec4eb..8041e25d33b 100644 --- a/tests/wpt/tests/digital-credentials/default-permissions-policy.https.sub.html +++ b/tests/wpt/tests/digital-credentials/default-permissions-policy.https.sub.html @@ -8,11 +8,15 @@ diff --git a/tests/wpt/tests/digital-credentials/disabled-by-permissions-policy.https.sub.html.headers b/tests/wpt/tests/digital-credentials/disabled-by-permissions-policy.https.sub.html.headers deleted file mode 100644 index 02a76b7c3f2..00000000000 --- a/tests/wpt/tests/digital-credentials/disabled-by-permissions-policy.https.sub.html.headers +++ /dev/null @@ -1 +0,0 @@ -Permissions-Policy: digital-credentials-get=() diff --git a/tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html b/tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html index d530f4920a3..261ebb0ce70 100644 --- a/tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html +++ b/tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html @@ -10,9 +10,13 @@ diff --git a/tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html.headers b/tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html.headers index 1207d9e29a1..4de358e6a44 100644 --- a/tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html.headers +++ b/tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html.headers @@ -1 +1 @@ -Permissions-Policy: digital-credentials-get=(self) +Permissions-Policy: digital-credentials-get=(self), digital-credentials-create=(self) diff --git a/tests/wpt/tests/digital-credentials/disabled-by-permissions-policy.https.sub.html b/tests/wpt/tests/digital-credentials/get.disabled-by-permissions-policy.https.sub.html similarity index 100% rename from tests/wpt/tests/digital-credentials/disabled-by-permissions-policy.https.sub.html rename to tests/wpt/tests/digital-credentials/get.disabled-by-permissions-policy.https.sub.html diff --git a/tests/wpt/tests/digital-credentials/get.disabled-by-permissions-policy.https.sub.html.headers b/tests/wpt/tests/digital-credentials/get.disabled-by-permissions-policy.https.sub.html.headers new file mode 100644 index 00000000000..5672154a423 --- /dev/null +++ b/tests/wpt/tests/digital-credentials/get.disabled-by-permissions-policy.https.sub.html.headers @@ -0,0 +1 @@ +Permissions-Policy: digital-credentials-get=() \ No newline at end of file diff --git a/tests/wpt/tests/digital-credentials/get.tentative.https.html b/tests/wpt/tests/digital-credentials/get.tentative.https.html index a090e1b1432..b04a6e3a713 100644 --- a/tests/wpt/tests/digital-credentials/get.tentative.https.html +++ b/tests/wpt/tests/digital-credentials/get.tentative.https.html @@ -83,7 +83,7 @@ global.navigator.credentials.get({ signal, mediation: "required" }) ); } - }, "Calling navigator.credentials.get() without an digital member same origin."); + }, "Calling navigator.credentials.get() without a digital member same origin."); promise_test(async (t) => { for (const request of [undefined, []]) { diff --git a/tests/wpt/tests/digital-credentials/support/helper.js b/tests/wpt/tests/digital-credentials/support/helper.js index 71022432652..5a9cda34788 100644 --- a/tests/wpt/tests/digital-credentials/support/helper.js +++ b/tests/wpt/tests/digital-credentials/support/helper.js @@ -1,49 +1,129 @@ // @ts-check // Import the types from the TypeScript file /** - * @typedef {import('../dc-types').Protocol} protocol - * @typedef {import('../dc-types').DigitalCredentialRequest} DigitalCredentialRequest + * @typedef {import('../dc-types').GetProtocol} GetProtocol + * @typedef {import('../dc-types').DigitalCredentialGetRequest} DigitalCredentialGetRequest * @typedef {import('../dc-types').DigitalCredentialRequestOptions} DigitalCredentialRequestOptions * @typedef {import('../dc-types').CredentialRequestOptions} CredentialRequestOptions + * @typedef {import('../dc-types').CreateProtocol} CreateProtocol + * @typedef {import('../dc-types').DigitalCredentialCreateRequest} DigitalCredentialCreateRequest + * @typedef {import('../dc-types').CredentialCreationOptions} CredentialCreationOptions + * @typedef {import('../dc-types').DigitalCredentialCreationOptions} DigitalCredentialCreationOptions * @typedef {import('../dc-types').SendMessageData} SendMessageData */ /** - * @param {protocol | protocol[]} [requestsToUse=["default"]] - * @param {CredentialMediationRequirement} [mediation="required"] - * @returns {CredentialRequestOptions} + * Internal helper to build the request array from validated input. + * Assumes requestsInputArray is a non-empty array of strings. + * @private + * @param {string[]} requestsInputArray - An array of request type strings. + * @param {string} mediation - The mediation requirement. + * @param {object} requestMapping - The specific mapping object for the operation type. + * @returns {{ digital: { requests: any[] }, mediation: string }} - The final options structure. + * @throws {Error} If an unknown request type string is encountered within the array. */ -export function makeGetOptions(requestsToUse, mediation = "required") { - if (typeof requestsToUse === "string") { - if (requestsToUse === "default" || requestsToUse === "openid4vp") { - return makeGetOptions([requestsToUse], mediation); - } - } - if (!Array.isArray(requestsToUse) || !requestsToUse?.length) { - return { digital: { requests: requestsToUse }, mediation }; - } +function _makeOptionsInternal(requestsInputArray, mediation, requestMapping) { const requests = []; - for (const request of requestsToUse) { - switch (request) { - case "openid4vp": - requests.push(makeOID4VPDict()); - break; - case "default": - requests.push(makeDigitalCredentialRequest(undefined, undefined)); - break; - default: - throw new Error(`Unknown request type: ${request}`); + for (const request of requestsInputArray) { + const factoryFunction = requestMapping[request]; + if (factoryFunction) { + requests.push(factoryFunction()); // Call the mapped function + } else { + // This error means a string *within the array* was unknown + throw new Error(`Unknown request type within array: ${request}`); } } return { digital: { requests }, mediation }; } + +const allMappings = { + get: { + "openid4vp": () => makeOID4VPDict(), + "default": () => makeDigitalCredentialGetRequest(undefined, undefined), + }, + create: { + "openid4vci": () => makeOID4VCIDict(), + "default": () => makeDigitalCredentialCreateRequest(), + }, +}; + +/** + * Internal unified function to handle option creation logic. + * Routes calls from specific public functions. + * @private + * @param {'get' | 'create'} type - The type of operation. + * @param {string | string[]} [requestsToUse] - Raw input for request types from public function. + * @param {string} mediation - Mediation requirement (default handled by public function). + * @returns {{ digital: { requests: any[] }, mediation: string }} + * @throws {Error} If type is invalid internally, or input strings are invalid. + */ +function _makeOptionsUnified(type, requestsToUse, mediation) { + // 1. Get mapping (Type validation primarily happens via caller) + const mapping = allMappings[type]; + // Added safety check, though public functions should prevent this. + if (!mapping) { + throw new Error(`Internal error: Invalid options type specified: ${type}`); + } + + // 2. Handle default for requestsToUse + const actualRequestsToUse = requestsToUse === undefined ? ["default"] : requestsToUse; + + // 3. Handle single string input + if (typeof actualRequestsToUse === 'string') { + if (mapping[actualRequestsToUse]) { + // Valid single string: Pass as array to the core array helper + return _makeOptionsInternal([actualRequestsToUse], mediation, mapping); + } else { + // Invalid single string for this type + throw new Error(`Unknown request type string '${actualRequestsToUse}' provided for operation type '${type}'`); + } + } + + // 4. Handle array input + if (Array.isArray(actualRequestsToUse)) { + if (actualRequestsToUse.length === 0) { + // Handle empty array explicitly + return { digital: { requests: [] }, mediation }; + } + // Pass valid non-empty array to the core array helper + return _makeOptionsInternal(actualRequestsToUse, mediation, mapping); + } + + // 5. Handle invalid input types (neither string nor array) + return { digital: { requests: [] }, mediation }; +} + +/** + * Creates options for getting credentials. + * @export + * @param {string | string[]} [requestsToUse] - Request types ('default', 'openid4vp', or an array). Defaults to ['default']. + * @param {string} [mediation="required"] - Credential mediation requirement ("required", "optional", "silent"). + * @returns {{ digital: { requests: any[] }, mediation: string }} + */ +export function makeGetOptions(requestsToUse, mediation = "required") { + // Pass type 'get', the user's input, and the final mediation value + return _makeOptionsUnified('get', requestsToUse, mediation); +} + +/** + * Creates options for creating credentials. + * @export + * @param {string | string[]} [requestsToUse] - Request types ('default', 'openid4vci', or an array). Defaults to ['default']. + * @param {string} [mediation="required"] - Credential mediation requirement ("required", "optional", "silent"). + * @returns {{ digital: { requests: any[] }, mediation: string }} // Adjust inner array type if known + */ +export function makeCreateOptions(requestsToUse, mediation = "required") { + // Pass type 'create', the user's input, and the final mediation value + return _makeOptionsUnified('create', requestsToUse, mediation); +} + /** * * @param {string} protocol * @param {object} data - * @returns {DigitalCredentialRequest} + * @returns {DigitalCredentialGetRequest} */ -function makeDigitalCredentialRequest(protocol = "protocol", data = {}) { +function makeDigitalCredentialGetRequest(protocol = "protocol", data = {}) { return { protocol, data, @@ -53,14 +133,38 @@ function makeDigitalCredentialRequest(protocol = "protocol", data = {}) { /** * Representation of an OpenID4VP request. * - * @returns {DigitalCredentialRequest} + * @returns {DigitalCredentialGetRequest} **/ function makeOID4VPDict() { - return makeDigitalCredentialRequest("openid4vp", { + return makeDigitalCredentialGetRequest("openid4vp", { // Canonical example of an OpenID4VP request coming soon. }); } +/** + * + * @param {string} protocol + * @param {object} data + * @returns {DigitalCredentialCreateRequest} + */ +function makeDigitalCredentialCreateRequest(protocol = "protocol", data = {}) { + return { + protocol, + data, + }; +} + +/** + * Representation of an OpenID4VCI request. + * + * @returns {DigitalCredentialCreateRequest} + **/ +function makeOID4VCIDict() { + return makeDigitalCredentialCreateRequest("openid4vci", { + // Canonical example of an OpenID4VCI request coming soon. + }); +} + /** * Sends a message to an iframe and return the response. * diff --git a/tests/wpt/tests/digital-credentials/get-user-activation.https.html b/tests/wpt/tests/digital-credentials/user-activation.https.html similarity index 56% rename from tests/wpt/tests/digital-credentials/get-user-activation.https.html rename to tests/wpt/tests/digital-credentials/user-activation.https.html index fbf2099dad3..facaf7bddbb 100644 --- a/tests/wpt/tests/digital-credentials/get-user-activation.https.html +++ b/tests/wpt/tests/digital-credentials/user-activation.https.html @@ -7,7 +7,7 @@ diff --git a/tests/wpt/tests/event-timing/interactionid-orphan-pointerup.html b/tests/wpt/tests/event-timing/interactionid-orphan-pointerup.html index 9c4a0ecf584..e08142f11bc 100644 --- a/tests/wpt/tests/event-timing/interactionid-orphan-pointerup.html +++ b/tests/wpt/tests/event-timing/interactionid-orphan-pointerup.html @@ -13,7 +13,8 @@ - \ No newline at end of file + diff --git a/tests/wpt/tests/event-timing/resources/event-timing-test-utils.js b/tests/wpt/tests/event-timing/resources/event-timing-test-utils.js index 7bd9782000f..59c78ebf39c 100644 --- a/tests/wpt/tests/event-timing/resources/event-timing-test-utils.js +++ b/tests/wpt/tests/event-timing/resources/event-timing-test-utils.js @@ -357,13 +357,20 @@ async function pointerdown(target) { .send(); } -async function pointerup(target) { +async function orphanPointerup(target) { const actions = new test_driver.Actions(); - return actions.addPointer("mousePointer", "mouse") + await actions.addPointer("mousePointer", "mouse") .pointerMove(0, 0, { origin: target }) .pointerUp() .send(); + + // Orphan pointerup doesn't get triggered in some browsers. Sending a + // non-pointer related event to make sure that at least an event gets handled. + // If a browsers sends an orphan pointerup, it will always be before the + // keydown, so the test will correctly handle it. + await pressKey(target, 'a'); } + async function auxPointerdown(target) { const actions = new test_driver.Actions(); return actions.addPointer("mousePointer", "mouse") @@ -525,8 +532,8 @@ async function interactAndObserve(interactionType, target, observerPromise, key break; } case 'orphan-pointerup': { - addListeners(target, ['pointerup']); - interactionPromise = pointerup(target); + addListeners(target, ['pointerup', 'keydown']); + interactionPromise = orphanPointerup(target); break; } case 'space-key-simulated-click': { diff --git a/tests/wpt/tests/fonts/math/css-units.woff b/tests/wpt/tests/fonts/math/css-units.woff new file mode 100644 index 0000000000000000000000000000000000000000..0957a2fc973700ac5bff6586bc60721b7d4142da GIT binary patch literal 1236 zcmZWoeN0nV6u*y_wm_j3ki9|~1sOvq@Pv-ZgvrM!8!2g(5(OuHrH@*+f(WQM3{XJm zANWB81ZAX3G7z@OaEdaN_u39oKwWW07BLQFV`>QC7YtZ;EBkLJ`Q_g8JLjHX&b{{> zl#0btxm*eW{T^@v(3m3tv915N1hH5E08IoVe*=I779xWju~?o0&tj1Cgy45hPn}7L zlYa_13G@%Zyq$IoUXwI6EZnw-TpR@MK~}q}a+Uc2*qNaZc_a(mI?$xaRuXW}f}9W{ zGFYh4C^5>=ri7eAp?2J+-%6TKmD7q;PQY z{(1>%nW8z~C_K7l*fBIy_y!}-On;m=mou*G3Ju}ppPdcioZoseH7ZomJ8_|Ly|}pN zp^29n@@BsL;IK={bs9y`H>wH;4V`O+V@7fVzeOA|`S4neupr!Yka;_xkmb9DSL*%PdNjE^2Ijm;~w?=kB>e3jAL&j0=|!#VXw3gh_c zpH@P9Tf1*}{#JiP0{ ztE&c;)?K{Xa`z21`1gck$g{U^OW;Z+P7qI$LqqR}j1CJos&OI{uRKwwTnsalb`~RL7&P3$5s`Uh{DC=Y zz|a#I5!3cb+=ld2YKR7!)s|RS)~)V)`e)JsB=2G z+(sM9UP^n>Hl=X(>U(*?vo7zK*;yZNf%*QZ=~Y+t@(yQC*j<&;fd5WE#OpZj1^SHy zZS7yUR;`ped#uhhM>-1OOd_HS`5z6Z;A&>}`jF sVn<8@vw#xRjHPiK{9@M!;T}E@KGz4 + + + +Tab navigation around table with caption + + + + + + +First tabbable span + + + + + + + +
Tabbable in cell
Tabbable in caption
+Last tabbable span diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/customizable-select-in-page-keyboard-behavior.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/customizable-select-in-page-keyboard-behavior.tentative.html index 24e6e39ea48..7040105c096 100644 --- a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/customizable-select-in-page-keyboard-behavior.tentative.html +++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/customizable-select-in-page-keyboard-behavior.tentative.html @@ -27,6 +27,15 @@ select { + + + + + + + + + + + + +
+
+ + + + diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-corner-cases.html b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-corner-cases.html index e25b9533b90..06a90844154 100644 --- a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-corner-cases.html +++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-corner-cases.html @@ -14,7 +14,7 @@ @@ -15,14 +16,20 @@ + + + + +
+ + + + diff --git a/tests/wpt/tests/mathml/tools/css-units.py b/tests/wpt/tests/mathml/tools/css-units.py new file mode 100644 index 00000000000..cdf06bb7744 --- /dev/null +++ b/tests/wpt/tests/mathml/tools/css-units.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +from utils import mathfont + +# Create a font with glyphs for all the font-relative CSS units +# (so that they all have length 1em). +# See https://drafts.csswg.org/css-values-4/#lengths +f = mathfont.create("css-units", + "Copyright (c) 2025 Igalia S.L.") + +mathfont.drawRectangleGlyph(f.createChar(ord("x")), mathfont.em, mathfont.em // 2) # ex = 0.5em +mathfont.createSquareGlyph(f, ord("O")) # cap = 1em +mathfont.createSquareGlyph(f, ord("0")) # ch = 1em +mathfont.createSquareGlyph(f, ord("水")) # ic = 1em + +assert f.capHeight == 1000 +assert f.xHeight == 500 + +mathfont.save(f) diff --git a/tests/wpt/tests/permissions-policy/resources/digital-credentials-create.html b/tests/wpt/tests/permissions-policy/resources/digital-credentials-create.html new file mode 100644 index 00000000000..aafd436282e --- /dev/null +++ b/tests/wpt/tests/permissions-policy/resources/digital-credentials-create.html @@ -0,0 +1,35 @@ + + + + + + +

Digital Credentials iframe

+ diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection-idl-setters.html b/tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection-idl-setters.html new file mode 100644 index 00000000000..74f2e670915 --- /dev/null +++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection-idl-setters.html @@ -0,0 +1,30 @@ + + + + + + + + + + + + + +
+ + + diff --git a/tests/wpt/tests/shadow-dom/reference-target/tentative/resources/property-reflection-helper.js b/tests/wpt/tests/shadow-dom/reference-target/tentative/resources/property-reflection-helper.js index 79f1bd7f748..88b7f743831 100644 --- a/tests/wpt/tests/shadow-dom/reference-target/tentative/resources/property-reflection-helper.js +++ b/tests/wpt/tests/shadow-dom/reference-target/tentative/resources/property-reflection-helper.js @@ -1,5 +1,6 @@ const Behavior = Object.freeze({ ReflectsHost: 'ReflectsHost', + ReflectsHostReadOnly: 'ReflectsHostReadOnly', ReflectsHostInArray: 'ReflectsHostInArray', IsNull: 'IsNull', ReflectsHostID: 'ReflectsHostID', @@ -30,7 +31,7 @@ function test_property_reflection(element_creation_method, test_name_suffix, ref referencing_element.setAttribute(attribute, "host-id"); const host_container = document.querySelector("#host-container"); const host = element_creation_method(host_container, referenced_element_type); - if (expected_behavior === Behavior.ReflectsHost) { + if (expected_behavior === Behavior.ReflectsHost || expected_behavior === Behavior.ReflectsHostReadOnly) { assert_equals(referencing_element[reflected_property], host); } else if (expected_behavior === Behavior.ReflectsHostInArray) { assert_array_equals(referencing_element[reflected_property], [host]); @@ -47,6 +48,82 @@ function test_property_reflection(element_creation_method, test_name_suffix, ref }, `${referencing_element_type}.${reflected_property} has reflection behavior ${expected_behavior} when pointing to ${referenced_element_type} with reference target${test_name_suffix}`); } +function test_idl_setter(element_creation_method, test_name_suffix, referencing_element_type, referenced_element_type, attribute, reflected_property, expected_behavior) { + // There's nothing to test if the referencing element type doesn't have the reflecting + // property. + if (!(reflected_property in document.createElement(referencing_element_type))) { + return; + } + + test(function () { + const referencing_element = document.createElement(referencing_element_type); + document.body.appendChild(referencing_element); + const host_container = document.querySelector("#host-container"); + const host = element_creation_method(host_container, referenced_element_type); + + if (reflected_property === "ariaOwnsElements") { + // It's undetermined whether reference target should work with aria-owns or not; see + // https://github.com/WICG/webcomponents/issues/1091 and + // https://github.com/w3c/aria/issues/2266 + return; + } + + if (expected_behavior === Behavior.ReflectsHost) { + referencing_element[reflected_property] = host; + // For element reflecting properties, the IDL getter should return null when the explicitly + // set element has an invalid reference target. + assert_equals(referencing_element[reflected_property], null); + } else if (expected_behavior === Behavior.ReflectsHostReadOnly) { + referencing_element[reflected_property] = host; + // Setting a read-only property has no effect. + assert_equals(referencing_element[reflected_property], null); + } else if (expected_behavior === Behavior.ReflectsHostInArray) { + referencing_element[reflected_property] = [ host ]; + // For element reflecting properties, the IDL getter should not return explicitly set elements + // if they have an invalid reference target. + assert_array_equals(referencing_element[reflected_property], []); + } else if (expected_behavior === Behavior.IsNull) { + referencing_element[reflected_property] = host; + assert_equals(referencing_element[reflected_property], null); + } else if (expected_behavior === Behavior.ReflectsHostID) { + referencing_element[reflected_property] = "host-id"; + // Properties reflecting the host ID return the ID even if it points to an element with + // an invalid reference target. + assert_equals(referencing_element[reflected_property], "host-id"); + } else if (expected_behavior === Behavior.ReflectsHostIDInDOMTokenList) { + // Properties reflecting a DOMTokenList of IDs returns the IDs even if they point to an + // element with an invalid reference target. + referencing_element[reflected_property] = [ "host-id" ]; + assert_true(referencing_element[reflected_property] instanceof DOMTokenList); + assert_array_equals(Array.from(referencing_element[reflected_property]), [ "host-id" ]); + } + + // Set the reference target to a valid value. + host.shadowRoot.referenceTarget = host.shadowRoot.querySelector(referenced_element_type).id; + + if (expected_behavior === Behavior.ReflectsHost) { + // For element reflecting properties, if the reference target becomes valid for the explicitly + // set element, we should start returning that element. + assert_equals(referencing_element[reflected_property], host); + } else if (expected_behavior === Behavior.ReflectsHostReadOnly) { + assert_equals(referencing_element[reflected_property], null); + } else if (expected_behavior === Behavior.ReflectsHostInArray) { + // For element reflecting properties, if the reference target becomes valid for any of the + // explicitly set elements, we should start returning that element. + assert_array_equals(referencing_element[reflected_property], [host]); + } else if (expected_behavior === Behavior.IsNull) { + assert_equals(referencing_element[reflected_property], null); + } else if (expected_behavior === Behavior.ReflectsHostID) { + assert_equals(referencing_element[reflected_property], "host-id"); + } else if (expected_behavior === Behavior.ReflectsHostIDInDOMTokenList) { + assert_array_equals(Array.from(referencing_element[reflected_property]), [ "host-id" ]); + } + + referencing_element.remove(); + host_container.setHTMLUnsafe(""); + }, `${referencing_element_type}.${reflected_property} has IDL setter behavior ${expected_behavior} when pointing to ${referenced_element_type} with reference target${test_name_suffix}`); +} + function run_test_for_all_reflecting_properties(setup_function, test_function, test_name_suffix) { for(let referencing_element_type of element_types) { for(let referenced_element_type of element_types) { @@ -73,13 +150,13 @@ function run_test_for_all_reflecting_properties(setup_function, test_function, t const expected_form_property_behavior = (referenced_element_type == 'form' && referencing_element_type != "label" && referencing_element_type != "legend" && - referencing_element_type != "option") ? Behavior.ReflectsHost : Behavior.IsNull; - test_function(setup_function, test_name_suffix, referencing_element_type, referenced_element_type, "form", "form", expected_form_property_behavior); + referencing_element_type != "option") ? Behavior.ReflectsHostReadOnly : Behavior.IsNull; + test_function(setup_function, test_name_suffix, referencing_element_type, referenced_element_type, "form", "form", expected_form_property_behavior); - const expected_list_property_behavior = (referenced_element_type == 'datalist') ? Behavior.ReflectsHost : Behavior.IsNull; + const expected_list_property_behavior = (referenced_element_type == 'datalist') ? Behavior.ReflectsHostReadOnly : Behavior.IsNull; test_function(setup_function, test_name_suffix, referencing_element_type, referenced_element_type, "list", "list", expected_list_property_behavior); - const expected_control_property_behavior = HTML5_LABELABLE_ELEMENTS.includes(referenced_element_type) ? Behavior.ReflectsHost : Behavior.IsNull; + const expected_control_property_behavior = HTML5_LABELABLE_ELEMENTS.includes(referenced_element_type) ? Behavior.ReflectsHostReadOnly : Behavior.IsNull; test_function(setup_function, test_name_suffix, referencing_element_type, referenced_element_type, "for", "control", expected_control_property_behavior); } } diff --git a/tests/wpt/tests/soft-navigation-heuristics/interaction-with-paint-before-back.tentative.html b/tests/wpt/tests/soft-navigation-heuristics/interaction-with-paint-before-back.tentative.html index b5874119913..7b884f2bdb3 100644 --- a/tests/wpt/tests/soft-navigation-heuristics/interaction-with-paint-before-back.tentative.html +++ b/tests/wpt/tests/soft-navigation-heuristics/interaction-with-paint-before-back.tentative.html @@ -47,10 +47,11 @@ history.back(); }); promise_test(async t => { + const soft_nav_promise = waitOnSoftNav(); if (test_driver) { test_driver.click(link); } - await waitOnSoftNav(); + await soft_nav_promise; assert_equals( document.softNavigations, 1, 'Single Soft Navigation detected'); @@ -70,7 +71,3 @@ - - - - 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 d405adb4e7e..a29978c8760 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 @@ -33,9 +33,10 @@ const testSoftNavigation = let paint_entries_promise = waitOnPaintEntriesPromise(firstClick); interacted = false; + const soft_nav_promise = waitOnSoftNav(); interact(link, interactionFunc); - const navigation_id = await waitOnSoftNav(); + const navigation_id = await soft_nav_promise; if (!first_navigation_id) { first_navigation_id = navigation_id; } @@ -63,8 +64,9 @@ const testNavigationApi = (testName, navigateEventHandler, link) => { await waitInitialLCP(); const preClickLcp = await getLcpEntries(); let paint_entries_promise = waitOnPaintEntriesPromise(); + const soft_nav_promise = waitOnSoftNav(); interact(link); - const first_navigation_id = await waitOnSoftNav(); + const first_navigation_id = await soft_nav_promise; await navigated; await paint_entries_promise; assert_equals(document.softNavigations, 1, 'Soft Navigation detected'); diff --git a/tests/wpt/tests/speculation-rules/prefetch/resources/authenticate.py b/tests/wpt/tests/speculation-rules/prefetch/resources/authenticate.py index ea0c546afff..b2ca9c450e0 100644 --- a/tests/wpt/tests/speculation-rules/prefetch/resources/authenticate.py +++ b/tests/wpt/tests/speculation-rules/prefetch/resources/authenticate.py @@ -1,3 +1,4 @@ +# TODO(https://crbug.com/406819294): Simplify relative import for util. import importlib util = importlib.import_module("speculation-rules.prefetch.resources.util") diff --git a/tests/wpt/tests/speculation-rules/prefetch/resources/basic-service-worker.js b/tests/wpt/tests/speculation-rules/prefetch/resources/basic-service-worker.js index 18432ed62ed..17fccd448d2 100644 --- a/tests/wpt/tests/speculation-rules/prefetch/resources/basic-service-worker.js +++ b/tests/wpt/tests/speculation-rules/prefetch/resources/basic-service-worker.js @@ -1,5 +1,13 @@ const swOption = new URL(location.href).searchParams.get('sw'); +const interceptedRequests = []; + +self.addEventListener('message', event => { + if (event.data === 'getInterceptedRequests') { + event.source.postMessage(interceptedRequests); + } +}); + if (swOption !== 'no-fetch-handler') { self.addEventListener('fetch', event => { @@ -9,6 +17,19 @@ if (swOption !== 'no-fetch-handler') { return; } + const headers = {}; + event.request.headers.forEach((value, key) => { + headers[key] = value; + }); + interceptedRequests.push({ + request: { + url: event.request.url, + headers: headers, + }, + clientId: event.clientId, + resultingClientId: event.resultingClientId + }); + if (swOption === 'fetch-handler') { event.respondWith(fetch(event.request)); } else if (swOption === 'fetch-handler-modify-url') { diff --git a/tests/wpt/tests/speculation-rules/prefetch/resources/cookies.py b/tests/wpt/tests/speculation-rules/prefetch/resources/cookies.py index 54aaabee70e..1b56c674c0b 100644 --- a/tests/wpt/tests/speculation-rules/prefetch/resources/cookies.py +++ b/tests/wpt/tests/speculation-rules/prefetch/resources/cookies.py @@ -1,5 +1,6 @@ import json +# TODO(https://crbug.com/406819294): Simplify relative import for util. import importlib util = importlib.import_module("speculation-rules.prefetch.resources.util") diff --git a/tests/wpt/tests/speculation-rules/prefetch/resources/prefetch_nvs_hint.py b/tests/wpt/tests/speculation-rules/prefetch/resources/prefetch_nvs_hint.py index 223135dc8b8..f4ecb004bc1 100644 --- a/tests/wpt/tests/speculation-rules/prefetch/resources/prefetch_nvs_hint.py +++ b/tests/wpt/tests/speculation-rules/prefetch/resources/prefetch_nvs_hint.py @@ -1,5 +1,6 @@ import time +# TODO(https://crbug.com/406819294): Simplify relative import for util. import importlib util = importlib.import_module("speculation-rules.prefetch.resources.util") diff --git a/tests/wpt/tests/speculation-rules/prefetch/resources/utils.sub.js b/tests/wpt/tests/speculation-rules/prefetch/resources/utils.sub.js index a90459fdf03..d4efc2dc7dc 100644 --- a/tests/wpt/tests/speculation-rules/prefetch/resources/utils.sub.js +++ b/tests/wpt/tests/speculation-rules/prefetch/resources/utils.sub.js @@ -216,6 +216,28 @@ function assert_prefetched_without_sec_purpose(requestHeaders, description) { assert_equals(requestHeaders['sec-purpose'], undefined, description); } +// For ServiceWorker tests. +// `interceptedRequest` is an element of `interceptedRequests` in +// `resources/basic-service-worker.js`. + +// The ServiceWorker fetch handler intercepted a prefetching request. +function assert_intercept_prefetch(interceptedRequest, expectedUrl) { + assert_equals(interceptedRequest.request.url, expectedUrl.toString(), + "intercepted request URL."); + + assert_prefetched(interceptedRequest.request.headers, + "Prefetch request should be intercepted."); +} + +// The ServiceWorker fetch handler intercepted a non-prefetching request. +function assert_intercept_non_prefetch(interceptedRequest, expectedUrl) { + assert_equals(interceptedRequest.request.url, expectedUrl.toString(), + "intercepted request URL."); + + assert_not_prefetched(interceptedRequest.request.headers, + "Non-prefetch request should be intercepted."); +} + // Use nvs_header query parameter to ask the wpt server // to populate No-Vary-Search response header. function addNoVarySearchHeaderUsingQueryParam(url, value){ diff --git a/tests/wpt/tests/speculation-rules/prefetch/tentative/service-worker/basic.sub.https.html b/tests/wpt/tests/speculation-rules/prefetch/tentative/service-worker/basic.sub.https.html index bee8e2ff1f4..98e089bcc66 100644 --- a/tests/wpt/tests/speculation-rules/prefetch/tentative/service-worker/basic.sub.https.html +++ b/tests/wpt/tests/speculation-rules/prefetch/tentative/service-worker/basic.sub.https.html @@ -47,8 +47,8 @@ promise_test(async t => { if (swOption !== 'no-controller') { const reg = await service_worker_unregister_and_register( t, swUrl, nextUrl); - await wait_for_state(t, reg.installing, 'activated'); sw = reg.installing; + await wait_for_state(t, sw, 'activated'); } // Start speculation rules prefetch and navigate to the URL. @@ -74,6 +74,17 @@ promise_test(async t => { assert_equals(controllerUrl, swUrl); } + let interceptedRequests = []; + if (sw) { + const messagePromise = new Promise(resolve => { + navigator.serviceWorker.addEventListener('message', (event) => { + resolve(event.data); + }, {once: true}); + }); + sw.postMessage('getInterceptedRequests'); + interceptedRequests = await messagePromise; + } + // Current Chromium's expected behavior: // prefetch works when // - there are no controlling service worker, or @@ -89,6 +100,13 @@ promise_test(async t => { assert_equals(requestCount.nonPrefetch, 0, 'non-prefetch requests should not be sent to the server.'); assert_prefetched(headers, "Prefetched result should be served."); + + if (swOption === 'no-controller' || swOption === 'no-fetch-handler') { + assert_equals(interceptedRequests.length, 0); + } else { + assert_equals(interceptedRequests.length, 1); + assert_intercept_prefetch(interceptedRequests[0], nextUrl); + } } else if (originOption === 'same-site' && (swOption === 'fetch-handler-modify-url' || swOption === 'fetch-handler-modify-referrer')) { @@ -119,12 +137,23 @@ promise_test(async t => { new URL('/intercepted', location.href).href, 'Referrer should be modified by ServiceWorker'); } + + assert_equals(interceptedRequests.length, 1); + assert_intercept_prefetch(interceptedRequests[0], nextUrl); } else { assert_not_prefetched(headers, "Prefetched result should not be served."); assert_equals(requestCount.nonPrefetch, 1, 'a non-prefetch request should be sent to the server.'); assert_equals(requestCount.prefetch, 0, 'prefetch requests should not be sent to the server.'); + + if (swOption === 'no-fetch-handler') { + assert_equals(interceptedRequests.length, 0); + } else { + assert_equals(interceptedRequests.length, 1); + assert_intercept_non_prefetch(interceptedRequests[0], nextUrl); + } } + }, "Prefetch with ServiceWorker (" + swOption + ")"); diff --git a/tests/wpt/tests/streams/WEB_FEATURES.yml b/tests/wpt/tests/streams/WEB_FEATURES.yml new file mode 100644 index 00000000000..d10bbe4a7d7 --- /dev/null +++ b/tests/wpt/tests/streams/WEB_FEATURES.yml @@ -0,0 +1,5 @@ +features: +- name: streams + files: + # Top-level only. Subdirectories have their own mapping. + - "*" diff --git a/tests/wpt/tests/streams/piping/WEB_FEATURES.yml b/tests/wpt/tests/streams/piping/WEB_FEATURES.yml new file mode 100644 index 00000000000..8cf3517baf0 --- /dev/null +++ b/tests/wpt/tests/streams/piping/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: streams + files: "**" diff --git a/tests/wpt/tests/streams/readable-streams/WEB_FEATURES.yml b/tests/wpt/tests/streams/readable-streams/WEB_FEATURES.yml new file mode 100644 index 00000000000..ad2cb549631 --- /dev/null +++ b/tests/wpt/tests/streams/readable-streams/WEB_FEATURES.yml @@ -0,0 +1,14 @@ +features: +- name: streams + files: + - "*" + - "!async-iterator.any.js" + - "!from.any.js" + # 'owning' type is not yet standardized + - "!owning-type*" +- name: async-iterable-streams + files: + - async-iterator.any.js +- name: readablestream-from + files: + - from.any.js diff --git a/tests/wpt/tests/streams/readable-streams/crashtests/WEB_FEATURES.yml b/tests/wpt/tests/streams/readable-streams/crashtests/WEB_FEATURES.yml new file mode 100644 index 00000000000..b5dbd1ff419 --- /dev/null +++ b/tests/wpt/tests/streams/readable-streams/crashtests/WEB_FEATURES.yml @@ -0,0 +1,7 @@ +features: +- name: streams + files: + - strategy-worker.js +- name: readablestream-from + files: + - from-cross-realm.https.html diff --git a/tests/wpt/tests/streams/transform-streams/WEB_FEATURES.yml b/tests/wpt/tests/streams/transform-streams/WEB_FEATURES.yml new file mode 100644 index 00000000000..f39dc16de4c --- /dev/null +++ b/tests/wpt/tests/streams/transform-streams/WEB_FEATURES.yml @@ -0,0 +1,8 @@ +features: +- name: streams + files: + - "*" + - "!cancel.any.js" +- name: transformstream-transformer-cancel + files: + - cancel.any.js diff --git a/tests/wpt/tests/streams/writable-streams/WEB_FEATURES.yml b/tests/wpt/tests/streams/writable-streams/WEB_FEATURES.yml new file mode 100644 index 00000000000..8cf3517baf0 --- /dev/null +++ b/tests/wpt/tests/streams/writable-streams/WEB_FEATURES.yml @@ -0,0 +1,3 @@ +features: +- name: streams + files: "**" diff --git a/tests/wpt/tests/tools/ci/requirements_macos_color_profile.txt b/tests/wpt/tests/tools/ci/requirements_macos_color_profile.txt index cd3e785aa47..5b95e3357b8 100644 --- a/tests/wpt/tests/tools/ci/requirements_macos_color_profile.txt +++ b/tests/wpt/tests/tools/ci/requirements_macos_color_profile.txt @@ -1,4 +1,14 @@ -pyobjc-core==10.3.1 -pyobjc-framework-Cocoa==9.2 -pyobjc-framework-ColorSync==9.2 -pyobjc-framework-Quartz==9.2 +--only-binary pyobjc-core +--only-binary pyobjc-framework-cocoa +--only-binary pyobjc-framework-colorsync +--only-binary pyobjc-framework-quartz + +pyobjc-core==10.3.2 ; python_full_version < '3.9' +pyobjc-framework-cocoa==10.3.2 ; python_full_version < '3.9' +pyobjc-framework-colorsync==10.3.2 ; python_full_version < '3.9' +pyobjc-framework-quartz==10.3.2 ; python_full_version < '3.9' + +pyobjc-core==11.0 ; python_full_version >= '3.9' +pyobjc-framework-cocoa==11.0 ; python_full_version >= '3.9' +pyobjc-framework-colorsync==11.0 ; python_full_version >= '3.9' +pyobjc-framework-quartz==11.0 ; python_full_version >= '3.9' diff --git a/tests/wpt/tests/viewport-segments/viewport-segments-env-variables.https.html b/tests/wpt/tests/viewport-segments/viewport-segments-env-variables.https.html index 6004398b2ce..dce6757d49a 100644 --- a/tests/wpt/tests/viewport-segments/viewport-segments-env-variables.https.html +++ b/tests/wpt/tests/viewport-segments/viewport-segments-env-variables.https.html @@ -77,18 +77,19 @@ promise_test(async (t) => { { once: true } ); }); + const leftOffset = + Math.round(window.innerWidth / 2 - displayFeatureLength / 2); await test_driver.set_display_features([{ orientation: 'vertical', maskLength: displayFeatureLength, - offset: window.innerWidth / 2 - displayFeatureLength / 2 + offset: leftOffset }]); assert_true(await promise); assert_equals(targetComputedStyle.marginTop, '0px'); assert_equals(targetComputedStyle.marginRight, - window.innerWidth / 2 + displayFeatureLength / 2 + 'px'); + Math.round(window.innerWidth / 2 + displayFeatureLength / 2) + 'px'); assert_equals(targetComputedStyle.marginBottom, window.innerHeight + 'px'); - assert_equals(targetComputedStyle.marginLeft, - window.innerWidth / 2 - displayFeatureLength / 2 + 'px'); + assert_equals(targetComputedStyle.marginLeft, leftOffset + 'px'); assert_equals(targetComputedStyle.width, displayFeatureLength + 'px'); assert_equals(targetComputedStyle.height, window.innerHeight + 'px'); assert_equals(targetComputedStyle.opacity, '0.2'); @@ -102,17 +103,18 @@ promise_test(async (t) => { { once: true } ); }); + const topOffset = + Math.round(window.innerHeight / 2 - displayFeatureLength / 2); await test_driver.set_display_features([{ orientation: 'horizontal', maskLength: displayFeatureLength, - offset: window.innerHeight / 2 - displayFeatureLength / 2 + offset: topOffset }]); assert_true(await promise); - assert_equals(targetComputedStyle.marginTop, - window.innerHeight / 2 - displayFeatureLength / 2 + 'px'); + assert_equals(targetComputedStyle.marginTop, topOffset + 'px'); assert_equals(targetComputedStyle.marginRight, window.innerWidth + 'px'); assert_equals(targetComputedStyle.marginBottom, - window.innerHeight / 2 + displayFeatureLength / 2 + 'px'); + Math.round(window.innerHeight / 2 + displayFeatureLength / 2) + 'px'); assert_equals(targetComputedStyle.marginLeft, '0px'); assert_equals(targetComputedStyle.width, window.innerWidth + 'px'); assert_equals(targetComputedStyle.height, displayFeatureLength + 'px'); diff --git a/tests/wpt/tests/viewport-segments/viewport-segments-segments-property.https.html b/tests/wpt/tests/viewport-segments/viewport-segments-segments-property.https.html index e6c9d8b4e16..653e2bcb253 100644 --- a/tests/wpt/tests/viewport-segments/viewport-segments-segments-property.https.html +++ b/tests/wpt/tests/viewport-segments/viewport-segments-segments-property.https.html @@ -35,22 +35,26 @@ promise_test(async (t) => { { once: true } ); }); + const leftOffset = + Math.round(window.innerWidth / 2 - displayFeatureLength / 2); await test_driver.set_display_features([{ orientation: 'vertical', maskLength: displayFeatureLength, - offset: window.innerWidth / 2 - displayFeatureLength / 2 + offset: leftOffset }]); assert_true(await promise); assert_equals(viewport.segments.length, 2); const segmentLeft = viewport.segments[0]; + const epsilon = 1; assert_equals(segmentLeft.x, 0); assert_equals(segmentLeft.y, 0); - assert_equals(segmentLeft.width, window.innerWidth / 2 - displayFeatureLength / 2); + assert_approx_equals(segmentLeft.width, leftOffset, epsilon); assert_equals(segmentLeft.height, window.innerHeight); const segmentRight = viewport.segments[1]; - assert_equals(segmentRight.x, window.innerWidth / 2 + displayFeatureLength / 2); + assert_approx_equals(segmentRight.x, + Math.round(window.innerWidth / 2 + displayFeatureLength / 2), epsilon); assert_equals(segmentRight.y, 0); - assert_equals(segmentRight.width, window.innerWidth / 2 - displayFeatureLength / 2); + assert_approx_equals(segmentRight.width, leftOffset, epsilon); assert_equals(segmentRight.height, window.innerHeight); // iframes do not receive segments information. assert_equals(window.frames[0].viewport.segments, null); @@ -64,10 +68,12 @@ promise_test(async (t) => { { once: true } ); }); + const topOffset = + Math.round(window.innerHeight / 2 - displayFeatureLength / 2); await test_driver.set_display_features([{ orientation: 'horizontal', maskLength: displayFeatureLength, - offset: window.innerHeight / 2 - displayFeatureLength / 2 + offset: topOffset }]); assert_true(await promise); assert_equals(viewport.segments.length, 2); @@ -75,12 +81,13 @@ promise_test(async (t) => { assert_equals(segmentTop.x, 0); assert_equals(segmentTop.y, 0); assert_equals(segmentTop.width, window.innerWidth); - assert_equals(segmentTop.height, window.innerHeight / 2 - displayFeatureLength / 2); + assert_approx_equals(segmentTop.height, topOffset, epsilon); const segmentBottom = viewport.segments[1]; assert_equals(segmentBottom.x, 0); - assert_equals(segmentBottom.y, window.innerHeight / 2 + displayFeatureLength / 2); + assert_approx_equals(segmentBottom.y, + Math.round(window.innerHeight / 2 + displayFeatureLength / 2), epsilon); assert_equals(segmentBottom.width, window.innerWidth); - assert_equals(segmentBottom.height, window.innerHeight / 2 - displayFeatureLength / 2); + assert_approx_equals(segmentBottom.height, topOffset, epsilon); // iframes do not receive segments information. assert_equals(window.frames[0].viewport.segments, null); diff --git a/tests/wpt/tests/webdriver/tests/bidi/web_extension/uninstall/invalid.py b/tests/wpt/tests/webdriver/tests/bidi/web_extension/uninstall/invalid.py index 54fbb22cf5e..228f0e57e52 100644 --- a/tests/wpt/tests/webdriver/tests/bidi/web_extension/uninstall/invalid.py +++ b/tests/wpt/tests/webdriver/tests/bidi/web_extension/uninstall/invalid.py @@ -6,21 +6,16 @@ pytestmark = pytest.mark.asyncio async def test_uninstall_missing_extension(bidi_session): with pytest.raises(error.NoSuchWebExtensionException): - await bidi_session.web_extension.uninstall( - extension="test" - ) + await bidi_session.web_extension.uninstall(extension="test") @pytest.mark.parametrize("value", [None, False, 42, {}, []]) async def test_params_extension_invalid_type(bidi_session, value): with pytest.raises(error.InvalidArgumentException): - await bidi_session.web_extension.uninstall( - extension=value - ) + await bidi_session.web_extension.uninstall(extension=value) -async def test_params_extension_invalid_value(bidi_session): +@pytest.mark.parametrize("value", ["", "unknown-ext"], ids=["empty", "unknown"]) +async def test_params_extension_invalid_value(bidi_session, value): with pytest.raises(error.NoSuchWebExtensionException): - await bidi_session.web_extension.uninstall( - extension="" - ) + await bidi_session.web_extension.uninstall(extension=value) diff --git a/tests/wpt/tests/webnn/conformance_tests/dequantizeLinear.https.any.js b/tests/wpt/tests/webnn/conformance_tests/dequantizeLinear.https.any.js index 900bb57bacf..7f1ed15cc4a 100644 --- a/tests/wpt/tests/webnn/conformance_tests/dequantizeLinear.https.any.js +++ b/tests/wpt/tests/webnn/conformance_tests/dequantizeLinear.https.any.js @@ -688,10 +688,15 @@ const dequantizeLinearTests = [ ], 'outputs': 'transposeOutput' }, + { + 'name': 'reshape', + 'arguments': [{'input': 'transposeOutput'}, {'newShape': [1, 1, 2]}], + 'outputs': 'reshapeOutput' + }, { 'name': 'dequantizeLinear', 'arguments': [ - {'input': 'transposeOutput'}, {'scale': 'dequantizeLinearScale'}, + {'input': 'reshapeOutput'}, {'scale': 'dequantizeLinearScale'}, {'zeroPoint': 'dequantizeLinearZeroPoint'} ], 'outputs': 'dequantizeLinearOutput' @@ -700,7 +705,7 @@ const dequantizeLinearTests = [ 'expectedOutputs': { 'dequantizeLinearOutput': { 'data': [-1.1202747821807861, 13.163229942321777], - 'descriptor': {shape: [1, 2], dataType: 'float32'} + 'descriptor': {shape: [1, 1, 2], dataType: 'float32'} } } } diff --git a/tests/wpt/tests/webxr/depth-sensing/matchDepthViewValues.js b/tests/wpt/tests/webxr/depth-sensing/matchDepthViewValues.js index 597f9734d3f..697f4deb8ff 100644 --- a/tests/wpt/tests/webxr/depth-sensing/matchDepthViewValues.js +++ b/tests/wpt/tests/webxr/depth-sensing/matchDepthViewValues.js @@ -18,8 +18,8 @@ const depthViewGeometryTestGenerator = function(isCpuOptimized) { const depthInformation = isCpuOptimized ? frame.getDepthInformation(view) : glBinding.getDepthInformation(view); t.step(()=> { - assert_matrix_approx_equals(IDENTITY_MATRIX, depthInformation.projectionMatrix); - assert_transform_approx_equals(IDENTITY_TRANSFORM, depthInformation.transform); + assert_matrix_approx_equals(view.projectionMatrix, depthInformation.projectionMatrix); + assert_transform_approx_equals(view.transform, depthInformation.transform); }); } resolve();