aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/meta/FileAPI/url/url-in-tags-revoke.window.js.ini3
-rw-r--r--tests/wpt/meta/FileAPI/url/url-with-fetch.any.js.ini3
-rw-r--r--tests/wpt/meta/MANIFEST.json1504
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-001.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-001.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-002.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-002.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-003.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-003.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-004.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-004.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-005.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-005.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-006.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-006.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-007.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-007.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-008.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-008.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-009.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-009.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-010.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-010.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-011.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-011.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-012.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-012.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-013.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-013.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-014.html.ini (renamed from tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-014.html.ini)0
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-015.html.ini2
-rw-r--r--tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-016.html.ini2
-rw-r--r--tests/wpt/meta/css/css-grid/subgrid/line-names-015.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-019.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-020.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-021.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-022.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-016.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini2
-rw-r--r--tests/wpt/meta/css/css-transforms/parsing/transform-valid.html.ini30
-rw-r--r--tests/wpt/meta/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html.ini3
-rw-r--r--tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini3
-rw-r--r--tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini3
-rw-r--r--tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini3
-rw-r--r--tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini3
-rw-r--r--tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini2
-rw-r--r--tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini2
-rw-r--r--tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini1
-rw-r--r--tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini7
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini1
-rw-r--r--tests/wpt/meta/html/semantics/forms/form-submission-0/text-plain.window.js.ini3
-rw-r--r--tests/wpt/meta/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.js.ini6
-rw-r--r--tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini12
-rw-r--r--tests/wpt/tests/ai/language_detection/detector-iframe.https.html40
-rw-r--r--tests/wpt/tests/ai/language_detection/detector.https.window.js5
-rw-r--r--tests/wpt/tests/ai/language_detection/resources/iframe-helper.html34
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.window.js (renamed from tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.any.js)0
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.window.js (renamed from tests/wpt/tests/ai/summarizer/summarizer-availability-available.tentative.https.any.js)0
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.window.js (renamed from tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.any.js)0
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.window.js (renamed from tests/wpt/tests/ai/summarizer/summarizer-create-available.tentative.https.any.js)0
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.window.js (renamed from tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.any.js)0
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.window.js (renamed from tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.any.js)0
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.window.js (renamed from tests/wpt/tests/ai/summarizer/summarizer-summarize-streaming.tentative.https.any.js)0
-rw-r--r--tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.window.js (renamed from tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.any.js)0
-rw-r--r--tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_already_expired.https.any.js86
-rw-r--r--tests/wpt/tests/cookie-store/serviceworker_cookiechange_eventhandler_no_change.https.any.js128
-rw-r--r--tests/wpt/tests/cookies/partitioned-cookies/partitioned-cookies-samesite-attribute.https.html59
-rw-r--r--tests/wpt/tests/cookies/partitioned-cookies/resources/partitioned-cookies-samesite-attributes-embed.html31
-rw-r--r--tests/wpt/tests/css/css-align/abspos/align-self-static-position-005-ref.html2
-rw-r--r--tests/wpt/tests/css/css-align/abspos/align-self-static-position-005.html2
-rw-r--r--tests/wpt/tests/css/css-break/nested-fixedpos-in-inline-003-crash.html13
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-001-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-001-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-001.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-001.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-002-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-002-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-002.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-002.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-003-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-003-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-003.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-003.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-004-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-004-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-004.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-004.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-005-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-005-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-005.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-005.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-006-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-006-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-006.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-006.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-007-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-007-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-007.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-007.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-008-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-008-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-008.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-008.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-009-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-009-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-009.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-009.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-010-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-010-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-010.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-010.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-011-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-011-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-011.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-011.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-012-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-012-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-012.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-012.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-013-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-013-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-013.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-013.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-014-ref.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-014-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-014.html (renamed from tests/wpt/tests/css/css-gaps/tentative/multicol/multicol-gap-decorations-014.html)0
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015-ref.html70
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-015.html55
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016-ref.html70
-rw-r--r--tests/wpt/tests/css/css-gaps/multicol/multicol-gap-decorations-016.html55
-rw-r--r--tests/wpt/tests/css/css-grid/grid-definition/grid-auto-fit-with-calc.html23
-rw-r--r--tests/wpt/tests/css/css-grid/subgrid/line-names-015.html34
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-031.tentative.html8
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html)12
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html)12
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html29
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html29
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html34
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html34
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html)17
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html29
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html35
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html34
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html30
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html30
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html35
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html31
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html36
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html)18
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html37
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html32
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html36
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html32
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html32
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html37
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html)2
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-019.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-011.tentative.html)24
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-020.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-012.tentative.html)22
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-021.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-013.tentative.html)10
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-022.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-014.tentative.html)7
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html29
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html34
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html29
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html34
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html30
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html35
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html30
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html35
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html31
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html36
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html33
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html37
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html32
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html36
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html37
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-016.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html)18
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html33
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html8
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html13
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-009-ref.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-006-ref.html)25
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-013-ref.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-008-ref.html)17
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-016-ref.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-007-ref.html)16
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-018-ref.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-010-ref.html)0
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-019-ref.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-011-ref.html)17
-rw-r--r--tests/wpt/tests/css/css-overflow/line-clamp/webkit-line-clamp-abspos-001.html (renamed from tests/wpt/tests/css/css-overflow/line-clamp/webkit-line-clamp-abspos-001.tentative.html)0
-rw-r--r--tests/wpt/tests/css/css-overflow/scroll-marker-active-unreached-target.html113
-rw-r--r--tests/wpt/tests/css/css-transforms/parsing/transform-valid.html20
-rw-r--r--tests/wpt/tests/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html10
-rw-r--r--tests/wpt/tests/css/css-values/tree-counting/sibling-function-invalidation.html52
-rw-r--r--tests/wpt/tests/css/css-view-transitions/scoped/auto-name-on-descendant.html110
-rw-r--r--tests/wpt/tests/css/css-view-transitions/scoped/auto-name.html81
-rw-r--r--tests/wpt/tests/css/css-view-transitions/scoped/display-none-during-transition.html74
-rw-r--r--tests/wpt/tests/css/css-view-transitions/scoped/document-element-start-view-transition.html91
-rw-r--r--tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe-ref.html27
-rw-r--r--tests/wpt/tests/css/css-view-transitions/snapshot-containing-block-static-iframe.html55
-rw-r--r--tests/wpt/tests/css/css-view-transitions/view-transition-name-stacking-context-dynamic.html22
-rw-r--r--tests/wpt/tests/css/css-view-transitions/view-transition-types-mutable-no-document-element-crashtest.html9
-rw-r--r--tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html8
-rw-r--r--tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition.html8
-rw-r--r--tests/wpt/tests/css/css-writing-modes/orthogonal-dynamic-size-001.html18
-rw-r--r--tests/wpt/tests/digital-credentials/allow-attribute-with-create.https.html138
-rw-r--r--tests/wpt/tests/digital-credentials/allow-attribute-with-get.https.html (renamed from tests/wpt/tests/digital-credentials/allow-attribute.https.html)2
-rw-r--r--tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html49
-rw-r--r--tests/wpt/tests/digital-credentials/create.disabled-by-permissions-policy.https.sub.html.headers1
-rw-r--r--tests/wpt/tests/digital-credentials/create.tentative.https.html188
-rw-r--r--tests/wpt/tests/digital-credentials/dc-types.ts25
-rw-r--r--tests/wpt/tests/digital-credentials/default-permissions-policy.https.sub.html42
-rw-r--r--tests/wpt/tests/digital-credentials/disabled-by-permissions-policy.https.sub.html.headers1
-rw-r--r--tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html57
-rw-r--r--tests/wpt/tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub.html.headers2
-rw-r--r--tests/wpt/tests/digital-credentials/get.disabled-by-permissions-policy.https.sub.html (renamed from tests/wpt/tests/digital-credentials/disabled-by-permissions-policy.https.sub.html)0
-rw-r--r--tests/wpt/tests/digital-credentials/get.disabled-by-permissions-policy.https.sub.html.headers1
-rw-r--r--tests/wpt/tests/digital-credentials/get.tentative.https.html2
-rw-r--r--tests/wpt/tests/digital-credentials/support/helper.js158
-rw-r--r--tests/wpt/tests/digital-credentials/user-activation.https.html (renamed from tests/wpt/tests/digital-credentials/get-user-activation.https.html)29
-rw-r--r--tests/wpt/tests/event-timing/interactionid-orphan-pointerup.html11
-rw-r--r--tests/wpt/tests/event-timing/resources/event-timing-test-utils.js15
-rw-r--r--tests/wpt/tests/fonts/math/css-units.woffbin0 -> 1236 bytes
-rw-r--r--tests/wpt/tests/html/interaction/focus/tab-table-caption.html57
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select-in-page/customizable-select-in-page-keyboard-behavior.tentative.html21
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html8
-rw-r--r--tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-bounds-clicking.html100
-rw-r--r--tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-corner-cases.html16
-rw-r--r--tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.html18
-rw-r--r--tests/wpt/tests/mathml/relations/css-styling/lengths-1-ref.html7
-rw-r--r--tests/wpt/tests/mathml/relations/css-styling/lengths-1.html77
-rw-r--r--tests/wpt/tests/mathml/relations/css-styling/lengths-2.html57
-rw-r--r--tests/wpt/tests/mathml/relations/css-styling/lengths-vi-vb-units.html50
-rw-r--r--tests/wpt/tests/mathml/tools/css-units.py19
-rw-r--r--tests/wpt/tests/permissions-policy/resources/digital-credentials-create.html35
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/property-reflection-idl-setters.html30
-rw-r--r--tests/wpt/tests/shadow-dom/reference-target/tentative/resources/property-reflection-helper.js87
-rw-r--r--tests/wpt/tests/soft-navigation-heuristics/interaction-with-paint-before-back.tentative.html7
-rw-r--r--tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js6
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/resources/authenticate.py1
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/resources/basic-service-worker.js21
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/resources/cookies.py1
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/resources/prefetch_nvs_hint.py1
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/resources/utils.sub.js22
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/tentative/service-worker/basic.sub.https.html31
-rw-r--r--tests/wpt/tests/streams/WEB_FEATURES.yml5
-rw-r--r--tests/wpt/tests/streams/piping/WEB_FEATURES.yml3
-rw-r--r--tests/wpt/tests/streams/readable-streams/WEB_FEATURES.yml14
-rw-r--r--tests/wpt/tests/streams/readable-streams/crashtests/WEB_FEATURES.yml7
-rw-r--r--tests/wpt/tests/streams/transform-streams/WEB_FEATURES.yml8
-rw-r--r--tests/wpt/tests/streams/writable-streams/WEB_FEATURES.yml3
-rw-r--r--tests/wpt/tests/tools/ci/requirements_macos_color_profile.txt18
-rw-r--r--tests/wpt/tests/viewport-segments/viewport-segments-env-variables.https.html18
-rw-r--r--tests/wpt/tests/viewport-segments/viewport-segments-segments-property.https.html23
-rw-r--r--tests/wpt/tests/webdriver/tests/bidi/web_extension/uninstall/invalid.py15
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/dequantizeLinear.https.any.js9
-rw-r--r--tests/wpt/tests/webxr/depth-sensing/matchDepthViewValues.js4
264 files changed, 4876 insertions, 1131 deletions
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 <a> tag works immediately before revoking the URL.]
expected: TIMEOUT
-
- [Fetching a blob URL immediately before revoking it works in <script> tags.]
- expected: TIMEOUT
diff --git a/tests/wpt/meta/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/meta/FileAPI/url/url-with-fetch.any.js.ini
index b275cb58343..292dc852b9f 100644
--- a/tests/wpt/meta/FileAPI/url/url-with-fetch.any.js.ini
+++ b/tests/wpt/meta/FileAPI/url/url-with-fetch.any.js.ini
@@ -12,6 +12,3 @@
[Revoke blob URL after creating Request, then clone Request, will fetch]
expected: FAIL
-
- [Revoke blob URL after calling fetch, fetch should succeed]
- expected: FAIL
diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json
index e786bb85e80..b0710945679 100644
--- a/tests/wpt/meta/MANIFEST.json
+++ b/tests/wpt/meta/MANIFEST.json
@@ -1363,6 +1363,13 @@
{}
]
],
+ "nested-fixedpos-in-inline-003-crash.html": [
+ "88a042884644feff5eac8a367fbdc36326d2d4ef",
+ [
+ null,
+ {}
+ ]
+ ],
"nested-float-in-multicol-crash.html": [
"6878d384e54b0f3262cbbfb0552b9d19e707140d",
[
@@ -124398,7 +124405,7 @@
]
],
"align-self-static-position-005.html": [
- "e148f0ebda37797d5573f4c3a2d4b7c52e5a2f2e",
+ "207a5443331e2f04f0d3b6e9e4fd8c55716af8de",
[
null,
[
@@ -186832,191 +186839,215 @@
]
]
},
- "tentative": {
- "multicol": {
- "multicol-gap-decorations-001.html": [
- "c3752156c7d54f6620ade9715b4562582c6135f6",
+ "multicol": {
+ "multicol-gap-decorations-001.html": [
+ "c3752156c7d54f6620ade9715b4562582c6135f6",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-001-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-002.html": [
- "0b632fa94ace20a253f5f56079d29adbb7997135",
+ "/css/css-gaps/multicol/multicol-gap-decorations-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-002.html": [
+ "0b632fa94ace20a253f5f56079d29adbb7997135",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-002-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-003.html": [
- "2f2473fd04686283e120abd29b5f273da40c3ef3",
+ "/css/css-gaps/multicol/multicol-gap-decorations-002-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-003.html": [
+ "2f2473fd04686283e120abd29b5f273da40c3ef3",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-003-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-004.html": [
- "0dcbeef4df82f4d9dc6e2ed2215ee2fa39773052",
+ "/css/css-gaps/multicol/multicol-gap-decorations-003-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-004.html": [
+ "0dcbeef4df82f4d9dc6e2ed2215ee2fa39773052",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-004-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-005.html": [
- "daa65e904e71ee62c83ba2a16933d13311328539",
+ "/css/css-gaps/multicol/multicol-gap-decorations-004-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-005.html": [
+ "daa65e904e71ee62c83ba2a16933d13311328539",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-005-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-006.html": [
- "64b3b007ab5f6282c95bb79a39a3bcf89d10de88",
+ "/css/css-gaps/multicol/multicol-gap-decorations-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-006.html": [
+ "64b3b007ab5f6282c95bb79a39a3bcf89d10de88",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-006-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-007.html": [
- "1f23ed7f7ca34602f4310627edb5ae96885028b8",
+ "/css/css-gaps/multicol/multicol-gap-decorations-006-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-007.html": [
+ "1f23ed7f7ca34602f4310627edb5ae96885028b8",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-007-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-008.html": [
- "ed299b5d9f68e8560d99cdd58fcc9b3830929117",
+ "/css/css-gaps/multicol/multicol-gap-decorations-007-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-008.html": [
+ "ed299b5d9f68e8560d99cdd58fcc9b3830929117",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-008-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-009.html": [
- "b00c6a70f8abf9894e548d9e40882e396ed5b1f0",
+ "/css/css-gaps/multicol/multicol-gap-decorations-008-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-009.html": [
+ "b00c6a70f8abf9894e548d9e40882e396ed5b1f0",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-009-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-010.html": [
- "61bb4a9b93314bb7d96a90b98f67b175a4cf86c6",
+ "/css/css-gaps/multicol/multicol-gap-decorations-009-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-010.html": [
+ "61bb4a9b93314bb7d96a90b98f67b175a4cf86c6",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-010-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-011.html": [
- "cf588ded41ea3e811c241984ec8909e5fbcf14be",
+ "/css/css-gaps/multicol/multicol-gap-decorations-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-011.html": [
+ "cf588ded41ea3e811c241984ec8909e5fbcf14be",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-011-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-012.html": [
- "078b810cf8e608b16dd2a898136f4ce757325ed9",
+ "/css/css-gaps/multicol/multicol-gap-decorations-011-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-012.html": [
+ "078b810cf8e608b16dd2a898136f4ce757325ed9",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-012-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-013.html": [
- "d4170084f066688fd136b2abeb40da03b1243816",
+ "/css/css-gaps/multicol/multicol-gap-decorations-012-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-013.html": [
+ "d4170084f066688fd136b2abeb40da03b1243816",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-013-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "multicol-gap-decorations-014.html": [
- "1dcd393d99aa19021684e42e9f835e17281fc6a4",
+ "/css/css-gaps/multicol/multicol-gap-decorations-013-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-014.html": [
+ "1dcd393d99aa19021684e42e9f835e17281fc6a4",
+ [
+ null,
[
- null,
[
- [
- "/css/css-gaps/tentative/multicol/multicol-gap-decorations-014-ref.html",
- "=="
- ]
- ],
- {}
- ]
+ "/css/css-gaps/multicol/multicol-gap-decorations-014-ref.html",
+ "=="
+ ]
+ ],
+ {}
]
- }
+ ],
+ "multicol-gap-decorations-015.html": [
+ "65af5112097f1a2d2d80ee5779fe5e5adc8b58a6",
+ [
+ null,
+ [
+ [
+ "/css/css-gaps/multicol/multicol-gap-decorations-015-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "multicol-gap-decorations-016.html": [
+ "da205e0b88bf7f8d8ca0988a54f6ac1237bc1669",
+ [
+ null,
+ [
+ [
+ "/css/css-gaps/multicol/multicol-gap-decorations-016-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ]
}
},
"css-grid": {
@@ -190828,6 +190859,19 @@
{}
]
],
+ "grid-auto-fit-with-calc.html": [
+ "4b655c1e1218923f2ddeb75293dfc87f5ce1c8a8",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"grid-auto-repeat-aspect-ratio-001.html": [
"bd744cf0cb30fd3349dfa85460ec1dd9ff962c40",
[
@@ -196254,6 +196298,19 @@
{}
]
],
+ "line-names-015.html": [
+ "6f5479abf8932d1e8da9950c339b3c8a2314960b",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"orthogonal-writing-mode-001.html": [
"1cf99a73e2ef7b0e3fe42bbf8c188fa4d2733979",
[
@@ -225556,19 +225613,6 @@
{}
]
],
- "line-clamp-auto-025.tentative.html": [
- "ab741d3df4d9ba823897ee1bcff1de9118353ada",
- [
- null,
- [
- [
- "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
"line-clamp-auto-027.tentative.html": [
"9ed461d8cfb4c2ee035987148e15b6dcce3cdffa",
[
@@ -225622,7 +225666,7 @@
]
],
"line-clamp-auto-031.tentative.html": [
- "a723430c83ed7f0ea8ae8f2966d971c5c56d3cff",
+ "737caff7775d59ba02320bf942d479f083a0041c",
[
null,
[
@@ -225790,8 +225834,21 @@
{}
]
],
- "line-clamp-with-abspos-001.tentative.html": [
- "79667f23fbdc3d941484c343b2cf0a04ec34363f",
+ "line-clamp-with-abspos-001.html": [
+ "fd261493f0653a2cceaac302ca74640b3ce91db3",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-002.html": [
+ "233a345c927e7af439943144a0ee6c989835744e",
[
null,
[
@@ -225803,8 +225860,8 @@
{}
]
],
- "line-clamp-with-abspos-002.tentative.html": [
- "cecb9d52bc63ec161dd96dfadcef166edd9334ed",
+ "line-clamp-with-abspos-003.html": [
+ "8b5d681d97c24b180f5dea407b1b94747c1b393a",
[
null,
[
@@ -225816,8 +225873,112 @@
{}
]
],
- "line-clamp-with-abspos-003.tentative.html": [
- "e4bd1de222e2b75455ae50d4c8bfa5c62b0c47c2",
+ "line-clamp-with-abspos-004.html": [
+ "c079974ac5c134474e9d16cd0317f29957a773fa",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-005.html": [
+ "58656135cf00e70846cb057a03414879f9bd25f2",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-006.html": [
+ "39f1758fa18f30c72db2c27fb442041e8bc4fdd0",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-007.html": [
+ "f5b4e6ce291681dd7adfa87302bb2e61ca693a1c",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-008.html": [
+ "cd619d515383e2dc418b7e6ab1b1da30c076a3b4",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-009.html": [
+ "b3d332811d6a6539ab9524c47b9eae3ffc09ea57",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-009-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-010.html": [
+ "8a7c2790d6c997b62ccc1bdf7d2e051822798e8a",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-009-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-011.html": [
+ "cb4ab0514809e8ce7b6569f922a985f2e429414c",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-012.html": [
+ "ae2f0364f39550edbc1e2ccfe094167bd1551f79",
[
null,
[
@@ -225829,8 +225990,34 @@
{}
]
],
- "line-clamp-with-abspos-004.tentative.html": [
- "483e6d1da6dc739599e25f3172b0ad248ac23c1b",
+ "line-clamp-with-abspos-013.html": [
+ "66a615ddd1c9b32903447a3aa8332ad87d5536cb",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-013-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-014.html": [
+ "e8257d1d40297ba0603d4c20d8fd79a97e08b714",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-013-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-015.html": [
+ "273610e071dbc2e355b8dc03ba96fae3882a4801",
[
null,
[
@@ -225842,8 +226029,164 @@
{}
]
],
- "line-clamp-with-abspos-005.tentative.html": [
- "3dc77831a06ffd28df3a5a4dca6045cba30fe1dd",
+ "line-clamp-with-abspos-016.html": [
+ "0b329a7d734b048e563faf8dbcfe6fdc35b9e8ed",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-016-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-017.tentative.html": [
+ "8ae9cc949c69b20a4227d66348c6a7c552de8748",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/webkit-line-clamp-030-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-018.html": [
+ "27139b18b8dec8f18efee3fa6bb9dc198d61c122",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-018-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-019.html": [
+ "237ed69b67d29458ebbf9881b97bc6f5c0abbea4",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-019-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-020.html": [
+ "55fb07c2061593aa17f0404c1eedfaf550ce1dae",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-021.html": [
+ "21a0e96eee3fef22f8c44ba418e438db6ea2f0cc",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-abspos-022.html": [
+ "6599365883b6d0a8507c4de31d033caa153dc114",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-fixed-pos-001.html": [
+ "7f69c970baa5d81de1f0cf005e073481d44a41d7",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-fixed-pos-002.html": [
+ "90eecbd6af6a9b0e58413843ab9962ef194be16e",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-fixed-pos-003.html": [
+ "c4bc8a64784fac808edc4e1249d9a0e3c0a7b19f",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-fixed-pos-004.html": [
+ "673b7d8c9d811c31e0d8ef383c56512977d6be89",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-fixed-pos-005.html": [
+ "22cf7e0c132c0159a256a9a503962ac23068ae5e",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-fixed-pos-006.html": [
+ "46f2e0b2b3976325e178f545ba2e00d004faa111",
[
null,
[
@@ -225855,47 +226198,60 @@
{}
]
],
- "line-clamp-with-abspos-006.tentative.html": [
- "f18fed6c2daea0ab6e1ab715c1257407067fa97b",
+ "line-clamp-with-fixed-pos-007.html": [
+ "0197ecb6d4a40c2cecc5461667d77bccc653ef8f",
[
null,
[
[
- "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-006-ref.html",
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html",
"=="
]
],
{}
]
],
- "line-clamp-with-abspos-007.tentative.html": [
- "f0a1f58c8d304aead5490db007f763d437e9c5ad",
+ "line-clamp-with-fixed-pos-008.html": [
+ "b14856a417f3e621085eefa7d2fe1d6a72cc87b4",
[
null,
[
[
- "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-007-ref.html",
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html",
"=="
]
],
{}
]
],
- "line-clamp-with-abspos-008.tentative.html": [
- "9c62e44f3897b5868dde26a6d6c203c7ddea4b8a",
+ "line-clamp-with-fixed-pos-009.html": [
+ "93faeed3bb10e75fa5357d164bdf4e8f199203b9",
[
null,
[
[
- "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-008-ref.html",
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-009-ref.html",
"=="
]
],
{}
]
],
- "line-clamp-with-abspos-009.tentative.html": [
- "dce04d720cfc83d82e2228204b7f6d41e244aabf",
+ "line-clamp-with-fixed-pos-010.html": [
+ "8bd64fee61575251b6682ce7e6ccb14d4e4e18d0",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-009-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-fixed-pos-011.html": [
+ "70273b36cda05e585483c0f690e58c38504d00d0",
[
null,
[
@@ -225907,34 +226263,47 @@
{}
]
],
- "line-clamp-with-abspos-010.tentative.html": [
- "325278b3a0b44f480ea020c575b9427b33f2ec4e",
+ "line-clamp-with-fixed-pos-012.html": [
+ "0e5584db10ba179821e784ce8709beb8188edf0d",
[
null,
[
[
- "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-010-ref.html",
+ "/css/css-overflow/line-clamp/reference/webkit-line-clamp-005-ref.html",
"=="
]
],
{}
]
],
- "line-clamp-with-abspos-011.tentative.html": [
- "ab5102a7cf2ea75cdb4729092d7618882e9c6ddf",
+ "line-clamp-with-fixed-pos-013.html": [
+ "580619be41e76bd45fbcde4f5ddbcf64f909ad3d",
[
null,
[
[
- "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-011-ref.html",
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-013-ref.html",
"=="
]
],
{}
]
],
- "line-clamp-with-abspos-012.tentative.html": [
- "bed065f38381a9b151cee045b37b45de8f7cd0fb",
+ "line-clamp-with-fixed-pos-014.html": [
+ "371fb5957024db34777a4383bb7d981715d51ecd",
+ [
+ null,
+ [
+ [
+ "/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-013-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "line-clamp-with-fixed-pos-015.html": [
+ "a458c11c04ea4599982047c8c403eca1212ee955",
[
null,
[
@@ -225946,8 +226315,8 @@
{}
]
],
- "line-clamp-with-abspos-013.tentative.html": [
- "ccea125f7246cf526da15a469261c3e90d4d2609",
+ "line-clamp-with-fixed-pos-016.html": [
+ "07a6f4e4f0d518a270e51a5ee7343677c43f28e3",
[
null,
[
@@ -225959,8 +226328,8 @@
{}
]
],
- "line-clamp-with-abspos-014.tentative.html": [
- "ea2f531207084097c4ab0406a270b045894a0d5d",
+ "line-clamp-with-fixed-pos-017.html": [
+ "97c77429ee49e9d00f9e6b12b852ec22866b1c7d",
[
null,
[
@@ -226752,7 +227121,7 @@
{}
]
],
- "webkit-line-clamp-abspos-001.tentative.html": [
+ "webkit-line-clamp-abspos-001.html": [
"fb8e027740d7991015313d62df86fbd147aa2f8b",
[
null,
@@ -310367,6 +310736,19 @@
}
]
],
+ "snapshot-containing-block-static-iframe.html": [
+ "1903b9cacbd334c3d0d6be4e7083cb1ced9d9b92",
+ [
+ null,
+ [
+ [
+ "/css/css-view-transitions/snapshot-containing-block-static-iframe-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"snapshot-containing-block-static.html": [
"fcea95e6efdb5d156a3c940faeef3928a3640910",
[
@@ -310619,6 +311001,19 @@
{}
]
],
+ "view-transition-name-stacking-context-dynamic.html": [
+ "1a908e6f65949a0874bb8dc107156c0db22f783a",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"view-transition-types-match-early-mutation.html": [
"24737d9050ef6d53be5a44c553faa2901d014928",
[
@@ -322318,6 +322713,19 @@
{}
]
],
+ "orthogonal-dynamic-size-001.html": [
+ "add7f1fc2aa8ac0ecaa6452c6a171c9781e9fd83",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"orthogonal-root-resize-icb-001.html": [
"5e7ff7aef51344e8fa6fafed85318da33a33397b",
[
@@ -360147,7 +360555,7 @@
]
],
"lengths-1.html": [
- "896f08d111907e62a23a146299ab20a8a5260c09",
+ "224bedc1efc1149ad0cad381fbd3a43e398d4e06",
[
null,
[
@@ -371995,7 +372403,7 @@
"language_detection": {
"resources": {
"iframe-helper.html": [
- "fe07de3f8abac59ddbd6ccfd706a5e69c5b8b4c4",
+ "35ba852558725ecf4adb9af92e4bc0abb1cf8c38",
[]
],
"util.js": [
@@ -396326,6 +396734,10 @@
"67ce1b2759ef661b04d267b748bef435fc33aaf0",
[]
],
+ "partitioned-cookies-samesite-attributes-embed.html": [
+ "c6f64639eac8b432677933d4e9a5c36f4259548b",
+ []
+ ],
"partitioned-cookies-top-level-redirect.html": [
"c94beff5285578dab643c2c330e864135742291b",
[]
@@ -414287,7 +414699,7 @@
[]
],
"align-self-static-position-005-ref.html": [
- "947bd2704481f757f3d1f4bf51105483978cc7ff",
+ "62597fba605b06b5b0240f808d85b633d763bbe3",
[]
],
"align-self-static-position-006-ref.html": [
@@ -431259,65 +431671,71 @@
[]
]
},
- "tentative": {
- "multicol": {
- "multicol-gap-decorations-001-ref.html": [
- "834c96ccd397fbc41abcfb80dbd298094cb929b1",
- []
- ],
- "multicol-gap-decorations-002-ref.html": [
- "d132f0ca6770be13d87ee66fb033f2f498d0e37b",
- []
- ],
- "multicol-gap-decorations-003-ref.html": [
- "cd26da243891f05c83c5d1eea17c747dcf390f05",
- []
- ],
- "multicol-gap-decorations-004-ref.html": [
- "002b1f2b594cf791b6d66613f48128e915517e01",
- []
- ],
- "multicol-gap-decorations-005-ref.html": [
- "6543021c97934a217568e567ac005166f7a9c0a0",
- []
- ],
- "multicol-gap-decorations-006-ref.html": [
- "4cb56d207fef4f801ec2063828103712267c030e",
- []
- ],
- "multicol-gap-decorations-007-ref.html": [
- "09973ddc690a899be9fb321e603b7831bfeb22a7",
- []
- ],
- "multicol-gap-decorations-008-ref.html": [
- "d49c2f50f1909d5b04be07798e62448d9b82ab72",
- []
- ],
- "multicol-gap-decorations-009-ref.html": [
- "124bf7eaeb1779d067d84f1c30560f45763add7c",
- []
- ],
- "multicol-gap-decorations-010-ref.html": [
- "9582ab4103d197d25823ed75dc8cafa83e0b1a7c",
- []
- ],
- "multicol-gap-decorations-011-ref.html": [
- "3387918d399cdbd3b39364ebe954a2a204a5145c",
- []
- ],
- "multicol-gap-decorations-012-ref.html": [
- "9fb5e85e920812d259e057c7538d35db56659b05",
- []
- ],
- "multicol-gap-decorations-013-ref.html": [
- "8e426d8ed32b25248e602e063e69678ca94b5e09",
- []
- ],
- "multicol-gap-decorations-014-ref.html": [
- "9d9674bd476896f0f1b03ec6835b069c97d9c8e5",
- []
- ]
- }
+ "multicol": {
+ "multicol-gap-decorations-001-ref.html": [
+ "834c96ccd397fbc41abcfb80dbd298094cb929b1",
+ []
+ ],
+ "multicol-gap-decorations-002-ref.html": [
+ "d132f0ca6770be13d87ee66fb033f2f498d0e37b",
+ []
+ ],
+ "multicol-gap-decorations-003-ref.html": [
+ "cd26da243891f05c83c5d1eea17c747dcf390f05",
+ []
+ ],
+ "multicol-gap-decorations-004-ref.html": [
+ "002b1f2b594cf791b6d66613f48128e915517e01",
+ []
+ ],
+ "multicol-gap-decorations-005-ref.html": [
+ "6543021c97934a217568e567ac005166f7a9c0a0",
+ []
+ ],
+ "multicol-gap-decorations-006-ref.html": [
+ "4cb56d207fef4f801ec2063828103712267c030e",
+ []
+ ],
+ "multicol-gap-decorations-007-ref.html": [
+ "09973ddc690a899be9fb321e603b7831bfeb22a7",
+ []
+ ],
+ "multicol-gap-decorations-008-ref.html": [
+ "d49c2f50f1909d5b04be07798e62448d9b82ab72",
+ []
+ ],
+ "multicol-gap-decorations-009-ref.html": [
+ "124bf7eaeb1779d067d84f1c30560f45763add7c",
+ []
+ ],
+ "multicol-gap-decorations-010-ref.html": [
+ "9582ab4103d197d25823ed75dc8cafa83e0b1a7c",
+ []
+ ],
+ "multicol-gap-decorations-011-ref.html": [
+ "3387918d399cdbd3b39364ebe954a2a204a5145c",
+ []
+ ],
+ "multicol-gap-decorations-012-ref.html": [
+ "9fb5e85e920812d259e057c7538d35db56659b05",
+ []
+ ],
+ "multicol-gap-decorations-013-ref.html": [
+ "8e426d8ed32b25248e602e063e69678ca94b5e09",
+ []
+ ],
+ "multicol-gap-decorations-014-ref.html": [
+ "9d9674bd476896f0f1b03ec6835b069c97d9c8e5",
+ []
+ ],
+ "multicol-gap-decorations-015-ref.html": [
+ "2fee77be84c105e2f1001d13152883c5a7dea6e4",
+ []
+ ],
+ "multicol-gap-decorations-016-ref.html": [
+ "8b2458fccce5a190c2c804b7e552dc0d85a8849a",
+ []
+ ]
}
},
"css-gcpm": {
@@ -438070,31 +438488,31 @@
[]
],
"line-clamp-with-abspos-001-ref.html": [
- "d756162dde0c54bd52646597b01bbff8a80f5fd8",
+ "ffa463369c1bcd592661c7d1bb8f8a9eed57a536",
[]
],
"line-clamp-with-abspos-005-ref.html": [
- "3b1f9218e887a7e50745f0c5e540c099475a59df",
+ "9825838e7b434d38c53cc49f830c7c9120a995ab",
[]
],
- "line-clamp-with-abspos-006-ref.html": [
- "4b55c37a033ea4d4a9d97b5fdf8035a60aace4bd",
+ "line-clamp-with-abspos-009-ref.html": [
+ "cc3a43df2386b26f6d3ff2de67961503c7700389",
[]
],
- "line-clamp-with-abspos-007-ref.html": [
- "e3dcc696e39684b47e1785968f29ec9adf8f9c0b",
+ "line-clamp-with-abspos-013-ref.html": [
+ "cae83ecc37c713b710c688d39c528cb2108bf48e",
[]
],
- "line-clamp-with-abspos-008-ref.html": [
- "373b2755c1d617e1716afe8060c28b246d52c33e",
+ "line-clamp-with-abspos-016-ref.html": [
+ "3c8011394d295ce65eca946b4c88255eefb24631",
[]
],
- "line-clamp-with-abspos-010-ref.html": [
+ "line-clamp-with-abspos-018-ref.html": [
"ecc2fcee1b5219b310ef15b28f0684b07d84baf6",
[]
],
- "line-clamp-with-abspos-011-ref.html": [
- "f08b0270e8d7aa8a389910319617528dac6a4240",
+ "line-clamp-with-abspos-019-ref.html": [
+ "f97a972532556b347c95cf5b10bdbd649b5335be",
[]
],
"line-clamp-with-floats-001-ref.html": [
@@ -453607,6 +454025,10 @@
"c219fb1edd4c24f29760aef7e18332f7362accf7",
[]
],
+ "snapshot-containing-block-static-iframe-ref.html": [
+ "188cefecd3d9b225b594e5604aeb68774762d442",
+ []
+ ],
"snapshot-containing-block-static-ref.html": [
"0bff68efb23da1a7bf2189f8bcea4a936faeba94",
[]
@@ -459508,21 +459930,25 @@
"d062affc1848e3f315ef4f7e1d30319545bc7992",
[]
],
- "dc-types.ts": [
- "30284e7fad68ea31854bef5e1a47364b11e46d19",
+ "create.disabled-by-permissions-policy.https.sub.html.headers": [
+ "9847d173eb6278152c83f719914f604375b4d151",
[]
],
- "disabled-by-permissions-policy.https.sub.html.headers": [
- "02a76b7c3f289bed45a44e7c949b4792fd798dbc",
+ "dc-types.ts": [
+ "83168f8a343469d479c5a11736e6e1e5ae35f6b1",
[]
],
"enabled-on-self-origin-by-permissions-policy.https.sub.html.headers": [
- "1207d9e29a111a46b920d27dd3188bae1e6cf8f4",
+ "4de358e6a4404c94768441ee20cfc9e7f6191b06",
+ []
+ ],
+ "get.disabled-by-permissions-policy.https.sub.html.headers": [
+ "5672154a42328b467a7cbf9e1ad94f3b2e7842d8",
[]
],
"support": {
"helper.js": [
- "71022432652c19ccb7272b02f723dcf748d9e7b3",
+ "5a9cda347888a2527ac059e332d6ad14331dc7ef",
[]
],
"iframe.html": [
@@ -462230,7 +462656,7 @@
[]
],
"event-timing-test-utils.js": [
- "7bd9782000f40d9f96d8c7074337e6dbaa7aaeeb",
+ "59c78ebf39c8a8e0f31aafa1eccd0809bea54376",
[]
],
"slow-image.py": [
@@ -466343,6 +466769,10 @@
"70f366a3d0b7ec891fc4041584a1ddea55b0bc42",
[]
],
+ "css-units.woff": [
+ "0957a2fc973700ac5bff6586bc60721b7d4142da",
+ []
+ ],
"fraction-axisheight7000-rulethickness1000.woff": [
"2a9d78cc9d430e9987e977ef83f4e47dfee6a99f",
[]
@@ -488507,7 +488937,7 @@
[]
],
"lengths-1-ref.html": [
- "9fca6f49632ca080ee1b2a32a9ce2d251241dfcc",
+ "74c1397ce62593293b1444dfd52c959856a9060e",
[]
],
"mathbackground-001-notref.html": [
@@ -488825,6 +489255,10 @@
"7640c4f789cc0248f450b2491b70da3510167c1f",
[]
],
+ "css-units.py": [
+ "cdf06bb77445c9b8fd2c2464d9725513b4eb3e35",
+ []
+ ],
"fractions.py": [
"bd39fc2fdbede519138e577269c6aacf802b303e",
[]
@@ -491391,6 +491825,10 @@
"56780cf6dc05879731bff0bbb1486c51b0b4141b",
[]
],
+ "digital-credentials-create.html": [
+ "aafd436282e8b740c713aaeeb6d28c0ab60cc324",
+ []
+ ],
"digital-credentials-get.html": [
"543417f230a59b3d09705b20775a38cbabaf7a22",
[]
@@ -498568,7 +499006,7 @@
],
"resources": {
"property-reflection-helper.js": [
- "79f1bd7f7483fd53d80fe4e0c824a80987656dfe",
+ "88b7f743831acbfd41ed4ae6a782733bde9875a6",
[]
]
}
@@ -499410,7 +499848,7 @@
[]
],
"soft-navigation-helper.js": [
- "d405adb4e7eb7690fe73f31db523d357a38734ee",
+ "a29978c8760495ffccbd6fc56d62f4625d89334d",
[]
]
}
@@ -499441,11 +499879,11 @@
},
"resources": {
"authenticate.py": [
- "ea0c546afffb5ab7701557ce9d7bf54aa8fbc95a",
+ "b2ca9c450e07278f654a54c868d42c90520451c1",
[]
],
"basic-service-worker.js": [
- "18432ed62eddb209488a5dd00f39e9c77e071498",
+ "17fccd448d2412287515f6176b0731189eb8eede",
[]
],
"conditional-status.py": [
@@ -499453,7 +499891,7 @@
[]
],
"cookies.py": [
- "54aaabee70e697283fddd5016358b0775bf9d0a6",
+ "1b56c674c0b6643ab1485500276582805ac8ec62",
[]
],
"counting-executor.py": [
@@ -499473,7 +499911,7 @@
[]
],
"prefetch_nvs_hint.py": [
- "223135dc8b82ea8f32b7abab8e1e3ed0d77d0bbd",
+ "f4ecb004bc1d6ec9e1eaa3199cd6d0bc54734afd",
[]
],
"random_redirect.py": [
@@ -499501,7 +499939,7 @@
[]
],
"utils.sub.js": [
- "a90459fdf03822446dc445b294e974587e507717",
+ "d4efc2dc7dce21e1da25842aceda4c3fc50227da",
[]
]
},
@@ -500216,6 +500654,16 @@
"9ab6e1284ad50d2982ea1f6fc78d7a519e796460",
[]
],
+ "WEB_FEATURES.yml": [
+ "d10bbe4a7d7012c197805bc997044989779d23ea",
+ []
+ ],
+ "piping": {
+ "WEB_FEATURES.yml": [
+ "8cf3517baf08a4611d43a4b0c8d1763835ef19fa",
+ []
+ ]
+ },
"readable-byte-streams": {
"WEB_FEATURES.yml": [
"a35508fc0dc65d5fcbf785289c5bd05674de7b32",
@@ -500223,7 +500671,15 @@
]
},
"readable-streams": {
+ "WEB_FEATURES.yml": [
+ "ad2cb549631fd2b1ab480db217c345d79998c215",
+ []
+ ],
"crashtests": {
+ "WEB_FEATURES.yml": [
+ "b5dbd1ff4199707f1ef59f40a7f5194ec8e5fa4a",
+ []
+ ],
"empty.js": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
[]
@@ -500303,6 +500759,18 @@
[]
]
}
+ },
+ "transform-streams": {
+ "WEB_FEATURES.yml": [
+ "f39dc16de4c73144c772133264f2691855fa2e4e",
+ []
+ ]
+ },
+ "writable-streams": {
+ "WEB_FEATURES.yml": [
+ "8cf3517baf08a4611d43a4b0c8d1763835ef19fa",
+ []
+ ]
}
},
"subapps": {
@@ -501964,7 +502432,7 @@
[]
],
"requirements_macos_color_profile.txt": [
- "cd3e785aa47963c00137c5c94d55c8f3cb692d8e",
+ "5b95e3357b806cc6edfcbc9aff7b78c341dc8732",
[]
],
"requirements_tc.txt": [
@@ -522370,7 +522838,7 @@
[]
],
"matchDepthViewValues.js": [
- "597f9734d3fe66c2600c291a643a6d70ec908a25",
+ "697f4deb8ffce83d29dfc0dde36ee4e6c8ec1e87",
[]
],
"pauseResumeTests.js": [
@@ -550785,10 +551253,13 @@
"ai": {
"language_detection": {
"detector-iframe.https.html": [
- "ddcf82bec684024f855217c649bb2da6cbd1f577",
+ "9dc39d44a007934715b181c0025cc885db33264e",
[
null,
- {}
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
]
],
"detector-locale.https.window.js": [
@@ -550831,7 +551302,7 @@
]
],
"detector.https.window.js": [
- "b0255bc552b0d2f7c71f8567bab9e0102702cd4c",
+ "379b87415347a1980209fb471d9b1ccb78ccd032",
[
"ai/language_detection/detector.https.window.html",
{
@@ -550906,67 +551377,10 @@
]
},
"summarizer": {
- "summarizer-abort.tentative.https.any.js": [
+ "summarizer-abort.tentative.https.window.js": [
"64595ea930c9e21b8044a281c2f9f4d467478772",
[
- "ai/summarizer/summarizer-abort.tentative.https.any.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Abort"
- ],
- [
- "global",
- "window,worker"
- ],
- [
- "script",
- "../resources/util.js"
- ]
- ]
- }
- ],
- [
- "ai/summarizer/summarizer-abort.tentative.https.any.serviceworker.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Abort"
- ],
- [
- "global",
- "window,worker"
- ],
- [
- "script",
- "../resources/util.js"
- ]
- ]
- }
- ],
- [
- "ai/summarizer/summarizer-abort.tentative.https.any.sharedworker.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Abort"
- ],
- [
- "global",
- "window,worker"
- ],
- [
- "script",
- "../resources/util.js"
- ]
- ]
- }
- ],
- [
- "ai/summarizer/summarizer-abort.tentative.https.any.worker.html",
+ "ai/summarizer/summarizer-abort.tentative.https.window.html",
{
"script_metadata": [
[
@@ -550985,30 +551399,10 @@
}
]
],
- "summarizer-availability-available.tentative.https.any.js": [
+ "summarizer-availability-available.tentative.https.window.js": [
"31c21ca777fb09fc8058b57d5d8230d3f3798410",
[
- "ai/summarizer/summarizer-availability-available.tentative.https.any.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Availability Available"
- ],
- [
- "script",
- "../resources/util.js"
- ],
- [
- "timeout",
- "long"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "ai/summarizer/summarizer-availability-available.tentative.https.any.worker.html",
+ "ai/summarizer/summarizer-availability-available.tentative.https.window.html",
{
"script_metadata": [
[
@@ -551028,30 +551422,10 @@
}
]
],
- "summarizer-availability.tentative.https.any.js": [
+ "summarizer-availability.tentative.https.window.js": [
"8691765f6933a576711282750b0d7ebca99e98e8",
[
- "ai/summarizer/summarizer-availability.tentative.https.any.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Availability"
- ],
- [
- "script",
- "../resources/util.js"
- ],
- [
- "timeout",
- "long"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "ai/summarizer/summarizer-availability.tentative.https.any.worker.html",
+ "ai/summarizer/summarizer-availability.tentative.https.window.html",
{
"script_metadata": [
[
@@ -551071,30 +551445,10 @@
}
]
],
- "summarizer-create-available.tentative.https.any.js": [
+ "summarizer-create-available.tentative.https.window.js": [
"c7e27d9766bee9b62d7b8463654dfea7536cb338",
[
- "ai/summarizer/summarizer-create-available.tentative.https.any.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Create Available"
- ],
- [
- "script",
- "../resources/util.js"
- ],
- [
- "timeout",
- "long"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "ai/summarizer/summarizer-create-available.tentative.https.any.worker.html",
+ "ai/summarizer/summarizer-create-available.tentative.https.window.html",
{
"script_metadata": [
[
@@ -551114,30 +551468,10 @@
}
]
],
- "summarizer-create.tentative.https.any.js": [
+ "summarizer-create.tentative.https.window.js": [
"328cceefefb11dab0844cfee5773a5194aabd52e",
[
- "ai/summarizer/summarizer-create.tentative.https.any.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Create"
- ],
- [
- "script",
- "../resources/util.js"
- ],
- [
- "timeout",
- "long"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "ai/summarizer/summarizer-create.tentative.https.any.worker.html",
+ "ai/summarizer/summarizer-create.tentative.https.window.html",
{
"script_metadata": [
[
@@ -551164,30 +551498,10 @@
{}
]
],
- "summarizer-measureInputUsage.tentative.https.any.js": [
+ "summarizer-measureInputUsage.tentative.https.window.js": [
"ce9745acf173c8d94a52427446460a47c6fbb378",
[
- "ai/summarizer/summarizer-measureInputUsage.tentative.https.any.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer measureInputUsage"
- ],
- [
- "script",
- "../resources/util.js"
- ],
- [
- "timeout",
- "long"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "ai/summarizer/summarizer-measureInputUsage.tentative.https.any.worker.html",
+ "ai/summarizer/summarizer-measureInputUsage.tentative.https.window.html",
{
"script_metadata": [
[
@@ -551207,30 +551521,10 @@
}
]
],
- "summarizer-summarize-streaming.tentative.https.any.js": [
+ "summarizer-summarize-streaming.tentative.https.window.js": [
"dbf41cdadbc679e68279886506660262952f0b5e",
[
- "ai/summarizer/summarizer-summarize-streaming.tentative.https.any.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Summarize Streaming"
- ],
- [
- "script",
- "../resources/util.js"
- ],
- [
- "timeout",
- "long"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "ai/summarizer/summarizer-summarize-streaming.tentative.https.any.worker.html",
+ "ai/summarizer/summarizer-summarize-streaming.tentative.https.window.html",
{
"script_metadata": [
[
@@ -551250,30 +551544,10 @@
}
]
],
- "summarizer-summarize.tentative.https.any.js": [
+ "summarizer-summarize.tentative.https.window.js": [
"62a780a3fc7960f30b2f4ab6beab89f9e570699f",
[
- "ai/summarizer/summarizer-summarize.tentative.https.any.html",
- {
- "script_metadata": [
- [
- "title",
- "Summarizer Create Available"
- ],
- [
- "script",
- "../resources/util.js"
- ],
- [
- "timeout",
- "long"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "ai/summarizer/summarizer-summarize.tentative.https.any.worker.html",
+ "ai/summarizer/summarizer-summarize.tentative.https.window.html",
{
"script_metadata": [
[
@@ -573632,6 +573906,24 @@
{}
]
],
+ "serviceworker_cookiechange_eventhandler_already_expired.https.any.js": [
+ "c40fdbeb6f108db1ea6e100c833a03c3fedbfc19",
+ [
+ "cookie-store/serviceworker_cookiechange_eventhandler_already_expired.https.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "Cookie Store API: cookiechange event in ServiceWorker with already-expired cookie."
+ ],
+ [
+ "global",
+ "serviceworker"
+ ]
+ ]
+ }
+ ]
+ ],
"serviceworker_cookiechange_eventhandler_mismatched_subscription.https.any.js": [
"30d8d70940dae248b3b5cba030056daac78b32a6",
[
@@ -573668,6 +573960,24 @@
}
]
],
+ "serviceworker_cookiechange_eventhandler_no_change.https.any.js": [
+ "fb2e2db7381fea7cbd3463576e126e1581a32d97",
+ [
+ "cookie-store/serviceworker_cookiechange_eventhandler_no_change.https.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "title",
+ "Cookie Store API: cookiechange event in ServiceWorker with already-expired cookie."
+ ],
+ [
+ "global",
+ "serviceworker"
+ ]
+ ]
+ }
+ ]
+ ],
"serviceworker_cookiechange_eventhandler_overlapping_subscriptions.https.any.js": [
"f8b1c1b7aa96f13ec40df6dfdfef2c605c447468",
[
@@ -573959,6 +574269,16 @@
}
]
],
+ "partitioned-cookies-samesite-attribute.https.html": [
+ "323fb08236eb35b207ea72fa0db80fc6f20d7d6a",
+ [
+ null,
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
+ ]
+ ],
"partitioned-cookies-top-level-redirect.tentative.https.html": [
"e9dd82c1cec0d1bad55d4dbdd66ecdb01e9d2ed7",
[
@@ -596102,6 +596422,15 @@
}
]
],
+ "scroll-marker-active-unreached-target.html": [
+ "6a6bcc2891f56709aaaee6442f5abc6c0877c297",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"scroll-marker-controls-scroll-tracking-001.html": [
"42dff1a7800176a6d5de9ecbf07d59dd47350e76",
[
@@ -607759,7 +608088,7 @@
]
],
"transform-valid.html": [
- "89a8b519b1b9c702d7bdedd3895e90c057a34dcb",
+ "b436fbdea30ec14b989bef19a747c67255fa2935",
[
null,
{}
@@ -613161,7 +613490,7 @@
],
"tree-counting": {
"calc-sibling-function-in-shadow-dom.html": [
- "92fb6ce3351b9c37b3616445b4f83969a5f30b63",
+ "ca8eb560ba13c8849a468442cc242a68398bbb9f",
[
null,
{}
@@ -613196,7 +613525,7 @@
]
],
"sibling-function-invalidation.html": [
- "3c75c78530dca4cfb30dfc0c17c0ad2049cfb087",
+ "74f4995f5f72413330e577a3a4c72ce095479225",
[
null,
{}
@@ -614241,6 +614570,20 @@
]
],
"scoped": {
+ "auto-name-on-descendant.html": [
+ "01d570e8bfced7cd702f42ed4def947b5f74e007",
+ [
+ null,
+ {}
+ ]
+ ],
+ "auto-name.html": [
+ "2d11985b3986b479304d5de0195eea1840148868",
+ [
+ null,
+ {}
+ ]
+ ],
"capture.html": [
"06f848d2de16d7a26defcc3279d24622ceb32f54",
[
@@ -614248,6 +614591,20 @@
{}
]
],
+ "display-none-during-transition.html": [
+ "f94d6f7fd76af7a889e5a9a1cf6fc6538377eb0e",
+ [
+ null,
+ {}
+ ]
+ ],
+ "document-element-start-view-transition.html": [
+ "42f87f93a07fac6715d422dea4d1e5835437858e",
+ [
+ null,
+ {}
+ ]
+ ],
"run_in_parallel.html": [
"1afdae2be9d8092953746d360d2a77ea1a538ba1",
[
@@ -614339,7 +614696,7 @@
]
],
"view-transition-types-mutable-no-document-element-crashtest.html": [
- "f1940c398695989d6cc569ffb25a03a83be1d064",
+ "d5c0abd652cd3c673a71979a458df8183ab057ba",
[
null,
{}
@@ -614360,7 +614717,7 @@
]
],
"window-resize-aborts-transition-before-ready.html": [
- "3c4ba37b26b0dff7f4e0d79ef55dd95f1a375ce1",
+ "09e6e6cc1c9c003237c280bf2612109f3b7f379f",
[
null,
{
@@ -614369,7 +614726,7 @@
]
],
"window-resize-aborts-transition.html": [
- "8d61a3e3c53998cf612ff544895cd0f34f96a6e8",
+ "966f23c0fdf98ba31fbfa8ce627460a50fa10b0b",
[
null,
{
@@ -621932,8 +622289,8 @@
]
},
"digital-credentials": {
- "allow-attribute.https.html": [
- "667b84bc704c23602b481538ea16f6f77f801902",
+ "allow-attribute-with-create.https.html": [
+ "4b1e96fec4cb62d336d3c1358a7c9781e6657f8d",
[
null,
{
@@ -621941,8 +622298,8 @@
}
]
],
- "create.tentative.https.html": [
- "299a240ced17f11c8d5249d65b54e873fe3362b3",
+ "allow-attribute-with-get.https.html": [
+ "15601d891f25c4c2d75dad2260d1b45a26a9344d",
[
null,
{
@@ -621950,8 +622307,8 @@
}
]
],
- "default-permissions-policy.https.sub.html": [
- "742a94ec4eb8ff079b1b24f17179962818fb3868",
+ "create.disabled-by-permissions-policy.https.sub.html": [
+ "52db2373f09596b01e2df28fdf14e34e540d3777",
[
null,
{
@@ -621959,15 +622316,17 @@
}
]
],
- "digital-credentials-static-methods.tentative.https.html": [
- "5e00861124fd1755f90f4107824c4f3aae3bf5b0",
+ "create.tentative.https.html": [
+ "3e17d5b0853b38b36cb640ee665a12c398eb4ed3",
[
null,
- {}
+ {
+ "testdriver": true
+ }
]
],
- "disabled-by-permissions-policy.https.sub.html": [
- "c32f73aa309b64e5785d67b3565077a8ac6b8424",
+ "default-permissions-policy.https.sub.html": [
+ "8041e25d33bd302fb6bcbf37f7111a00f5907fe2",
[
null,
{
@@ -621975,8 +622334,15 @@
}
]
],
+ "digital-credentials-static-methods.tentative.https.html": [
+ "5e00861124fd1755f90f4107824c4f3aae3bf5b0",
+ [
+ null,
+ {}
+ ]
+ ],
"enabled-on-self-origin-by-permissions-policy.https.sub.html": [
- "d530f4920a395b0a612964a32b60fec65833054e",
+ "261ebb0ce705329cf7fe54fa50cbb6e20179fe0c",
[
null,
{
@@ -621984,8 +622350,8 @@
}
]
],
- "get-user-activation.https.html": [
- "fbf2099dad37443c4522e3a838ab962f2c260004",
+ "get.disabled-by-permissions-policy.https.sub.html": [
+ "c32f73aa309b64e5785d67b3565077a8ac6b8424",
[
null,
{
@@ -621994,7 +622360,7 @@
]
],
"get.tentative.https.html": [
- "a090e1b14321bd31ea3e1d5470bbe9442a99dd08",
+ "b04a6e3a713e26f759cc62d81a6a439ea69e189e",
[
null,
{
@@ -622021,6 +622387,15 @@
"testdriver": true
}
]
+ ],
+ "user-activation.https.html": [
+ "facaf7bddbbd419801a9ffa470f4bb5bbc1ab07c",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
]
},
"direct-sockets": {
@@ -646365,7 +646740,7 @@
]
],
"interactionid-orphan-pointerup.html": [
- "9c4a0ecf584e83f3efa531c19be82aecfaa42917",
+ "e08142f11bce202d852a93e88c4f33ac69c11e96",
[
null,
{
@@ -723855,6 +724230,21 @@
}
]
],
+ "tab-table-caption.html": [
+ "a26c8f0e7ed83827a385de5e351b2d90a4fad47b",
+ [
+ "html/interaction/focus/tab-table-caption.html?caption-side=bottom",
+ {
+ "testdriver": true
+ }
+ ],
+ [
+ "html/interaction/focus/tab-table-caption.html?caption-side=top",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"tabindex-focus-flag.html": [
"93fdb19a592ff632405c338256082043ae608002",
[
@@ -733388,7 +733778,7 @@
]
],
"select-parsing.tentative.html": [
- "cc6596b42fe80caa895e2997dcc86533558fb87a",
+ "0c6972bcab5b8d039bb1634d675276d2d7c8a28a",
[
null,
{}
@@ -733512,7 +733902,7 @@
},
"customizable-select-in-page": {
"customizable-select-in-page-keyboard-behavior.tentative.html": [
- "24e6e39ea48236fc7b72604860913247b5f5f05c",
+ "7040105c096d4b9f3512bf1cbbec7dfa05f5dd77",
[
null,
{
@@ -734192,8 +734582,18 @@
{}
]
],
+ "dialog-closedby-bounds-clicking.html": [
+ "584d4b306446c50c9d0c7c0a58849f9250b27956",
+ [
+ null,
+ {
+ "testdriver": true,
+ "timeout": "long"
+ }
+ ]
+ ],
"dialog-closedby-corner-cases.html": [
- "e25b9533b905f52decdcde07992ee587e41ca7c6",
+ "06a9084415410e208ea3d75bcf04547aad829072",
[
null,
{
@@ -734213,7 +734613,7 @@
]
],
"dialog-closedby.html": [
- "50d600219d202cb0e4df33fde899b287dc9a3edf",
+ "b67bc80765aded1bf376d967ebce989b2861cf12",
[
null,
{
@@ -753633,7 +754033,14 @@
]
],
"lengths-2.html": [
- "942611a8dada4dae5fcc133ff01993226c6941df",
+ "af5cae1368832d6f40d2cd68b73be1b0fb5e4385",
+ [
+ null,
+ {}
+ ]
+ ],
+ "lengths-vi-vb-units.html": [
+ "a01fd13b98fbc1c03ab087169d7f7c7919779ec6",
[
null,
{}
@@ -794574,6 +794981,15 @@
}
]
],
+ "property-reflection-idl-setters.html": [
+ "74f2e670915f894b2cc4d8b0443028900c0154c3",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"property-reflection-imperative-setup.html": [
"44039295169999ce58f0b8904da6c64e718704f2",
[
@@ -796652,7 +797068,7 @@
]
],
"interaction-with-paint-before-back.tentative.html": [
- "b587411991383e47381e14fc6e00c0bcfc2dc447",
+ "7b884f2bdb38945a346c3b5a8b178c04e88989ad",
[
null,
{
@@ -797825,7 +798241,7 @@
"tentative": {
"service-worker": {
"basic.sub.https.html": [
- "bee8e2ff1f4515afa805fa37e86f25effe66c22e",
+ "98e089bcc660f24ba3e82425e2b23ef928a0f08a",
[
"speculation-rules/prefetch/tentative/service-worker/basic.sub.https.html?origin=cross-site&sw=fetch-handler",
{
@@ -823425,7 +823841,7 @@
]
],
"viewport-segments-env-variables.https.html": [
- "6004398b2ce20ca0580380b6bc570f6bf8108683",
+ "dce6757d49a39059d67433e1663813ce56b093eb",
[
null,
{
@@ -823434,7 +823850,7 @@
]
],
"viewport-segments-segments-property.https.html": [
- "e6c9d8b4e169ad061ae7aef5ca270894dbb1db2c",
+ "653e2bcb2530ef0bd86712981726f2df71ac093f",
[
null,
{
@@ -851968,7 +852384,7 @@
]
],
"dequantizeLinear.https.any.js": [
- "900bb57bacfd379bc81a24b1ec622d914a3e5455",
+ "7f1ed15cc4a36aba360daebda56a44da32620a5b",
[
"webnn/conformance_tests/dequantizeLinear.https.any.html?cpu",
{
@@ -928423,7 +928839,7 @@
},
"uninstall": {
"invalid.py": [
- "54fbb22cf5ebeb1cc633835ae8a1bb5523313d3d",
+ "228f0e57e52f67cd777fa1c7df96a22df4880235",
[
null,
{}
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-001.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-001.html.ini
index 09b5c2407df..09b5c2407df 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-001.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-001.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-002.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-002.html.ini
index d3d6008a74d..d3d6008a74d 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-002.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-002.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-003.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-003.html.ini
index be28f9f62c3..be28f9f62c3 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-003.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-003.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-004.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-004.html.ini
index f2c19d9824a..f2c19d9824a 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-004.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-004.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-005.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-005.html.ini
index e63a9af4a63..e63a9af4a63 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-005.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-005.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-006.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-006.html.ini
index e9fd7c8f430..e9fd7c8f430 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-006.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-006.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-007.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-007.html.ini
index f0da110b11d..f0da110b11d 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-007.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-007.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-008.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-008.html.ini
index fecb739fed1..fecb739fed1 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-008.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-008.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-009.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-009.html.ini
index 15809ab6be8..15809ab6be8 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-009.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-009.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-010.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-010.html.ini
index 087a090d25e..087a090d25e 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-010.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-010.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-011.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-011.html.ini
index 39cd43f8d3f..39cd43f8d3f 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-011.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-011.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-012.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-012.html.ini
index c60637403c8..c60637403c8 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-012.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-012.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-013.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-013.html.ini
index 319ec1ea8c7..319ec1ea8c7 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-013.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-013.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-014.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-014.html.ini
index 7baae0182e4..7baae0182e4 100644
--- a/tests/wpt/meta/css/css-gaps/tentative/multicol/multicol-gap-decorations-014.html.ini
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-014.html.ini
diff --git a/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-015.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-015.html.ini
new file mode 100644
index 00000000000..c5f1c0f943e
--- /dev/null
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-015.html.ini
@@ -0,0 +1,2 @@
+[multicol-gap-decorations-015.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-016.html.ini b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-016.html.ini
new file mode 100644
index 00000000000..63d5d357009
--- /dev/null
+++ b/tests/wpt/meta/css/css-gaps/multicol/multicol-gap-decorations-016.html.ini
@@ -0,0 +1,2 @@
+[multicol-gap-decorations-016.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-grid/subgrid/line-names-015.html.ini b/tests/wpt/meta/css/css-grid/subgrid/line-names-015.html.ini
new file mode 100644
index 00000000000..d7cb6aaa099
--- /dev/null
+++ b/tests/wpt/meta/css/css-grid/subgrid/line-names-015.html.ini
@@ -0,0 +1,2 @@
+[line-names-015.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html.ini
deleted file mode 100644
index c1786082c26..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-auto-025.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html.ini
new file mode 100644
index 00000000000..40c36b3c6f0
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-001.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html.ini
deleted file mode 100644
index 96277819670..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-001.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-001.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html.ini
new file mode 100644
index 00000000000..4d369b695f3
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-002.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html.ini
deleted file mode 100644
index 21efb29c1f9..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-002.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-002.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html.ini
new file mode 100644
index 00000000000..000eb27ddfd
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-003.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html.ini
deleted file mode 100644
index 189ac0f3620..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-003.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-003.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html.ini
new file mode 100644
index 00000000000..db488a0f5ef
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-004.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html.ini
deleted file mode 100644
index 4e4d8534002..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-004.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-004.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html.ini
new file mode 100644
index 00000000000..e669d29133f
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-005.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html.ini
deleted file mode 100644
index 4a2b7b2ba98..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-005.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-005.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html.ini
new file mode 100644
index 00000000000..a2f619fdde4
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-006.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html.ini
deleted file mode 100644
index bd697fabf3f..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-006.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-006.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html.ini
new file mode 100644
index 00000000000..45df20f22d9
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-007.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html.ini
deleted file mode 100644
index b63c81cd54e..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-007.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-007.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html.ini
new file mode 100644
index 00000000000..039fa6a2145
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-008.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html.ini
deleted file mode 100644
index 834446721a7..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-008.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-008.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html.ini
new file mode 100644
index 00000000000..e4fd4f2a7f8
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-009.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html.ini
deleted file mode 100644
index 24f8b5bded3..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-009.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-009.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html.ini
new file mode 100644
index 00000000000..613c6b90cfd
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-010.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html.ini
deleted file mode 100644
index b4d85b57450..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-010.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-010.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html.ini
new file mode 100644
index 00000000000..26644e02bb8
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-011.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.tentative.html.ini
deleted file mode 100644
index b399afd2326..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-011.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-011.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html.ini
new file mode 100644
index 00000000000..4c8f049422c
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-012.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.tentative.html.ini
deleted file mode 100644
index 2f746ad56f3..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-012.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-012.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html.ini
new file mode 100644
index 00000000000..c541770ea3f
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-013.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.tentative.html.ini
deleted file mode 100644
index f710874fa75..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-013.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-013.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html.ini
new file mode 100644
index 00000000000..c97b27d5dab
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-014.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.tentative.html.ini
deleted file mode 100644
index a7e0e7a16ad..00000000000
--- a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-014.tentative.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[line-clamp-with-abspos-014.tentative.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html.ini
new file mode 100644
index 00000000000..5d9f5c960a0
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-015.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-015.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html.ini
new file mode 100644
index 00000000000..1c1e4761713
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-016.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-016.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html.ini
new file mode 100644
index 00000000000..39d8ecfca89
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-017.tentative.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-017.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html.ini
new file mode 100644
index 00000000000..9e1f2f984cc
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-018.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-018.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-019.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-019.html.ini
new file mode 100644
index 00000000000..93fb1dcbd7a
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-019.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-019.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-020.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-020.html.ini
new file mode 100644
index 00000000000..4196c262fb6
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-020.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-020.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-021.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-021.html.ini
new file mode 100644
index 00000000000..f49c1642115
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-021.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-021.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-022.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-022.html.ini
new file mode 100644
index 00000000000..2a41664d203
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-abspos-022.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-abspos-022.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html.ini
new file mode 100644
index 00000000000..4d8f7292069
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-001.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html.ini
new file mode 100644
index 00000000000..67cbf86b0b8
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-002.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html.ini
new file mode 100644
index 00000000000..3af9a89c950
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-003.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html.ini
new file mode 100644
index 00000000000..0d12a1bc36c
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-004.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html.ini
new file mode 100644
index 00000000000..31e359cfb5f
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-005.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html.ini
new file mode 100644
index 00000000000..807db673371
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-006.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html.ini
new file mode 100644
index 00000000000..4d4c697e1f5
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-007.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html.ini
new file mode 100644
index 00000000000..2934b89a2cf
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-008.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html.ini
new file mode 100644
index 00000000000..bc33c225d01
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-009.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html.ini
new file mode 100644
index 00000000000..2fc6d12eade
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-010.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html.ini
new file mode 100644
index 00000000000..097bc0d8876
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-011.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html.ini
new file mode 100644
index 00000000000..d9c19a6bbdb
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-012.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html.ini
new file mode 100644
index 00000000000..4565a34841e
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-013.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html.ini
new file mode 100644
index 00000000000..cabd27df9d6
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-014.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html.ini
new file mode 100644
index 00000000000..8577c169df2
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-015.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-016.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-016.html.ini
new file mode 100644
index 00000000000..55bcad299ec
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-016.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-016.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html.ini b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html.ini
new file mode 100644
index 00000000000..1ea3d4e7833
--- /dev/null
+++ b/tests/wpt/meta/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html.ini
@@ -0,0 +1,2 @@
+[line-clamp-with-fixed-pos-017.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini b/tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini
deleted file mode 100644
index 35256741d38..00000000000
--- a/tests/wpt/meta/css/css-sizing/dynamic-available-size-iframe.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[dynamic-available-size-iframe.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-transforms/parsing/transform-valid.html.ini b/tests/wpt/meta/css/css-transforms/parsing/transform-valid.html.ini
new file mode 100644
index 00000000000..b13de1bd254
--- /dev/null
+++ b/tests/wpt/meta/css/css-transforms/parsing/transform-valid.html.ini
@@ -0,0 +1,30 @@
+[transform-valid.html]
+ [e.style['transform'\] = "scaleX(7)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "scaleX(720%)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "scaleY(-8)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "scaleY(-85%)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "scaleZ(4)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "scaleZ(25%)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "skewX(0)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "skewX(90deg)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "skewY(0)" should set the property value]
+ expected: FAIL
+
+ [e.style['transform'\] = "skewY(-90deg)" should set the property value]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html.ini b/tests/wpt/meta/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html.ini
index 078fc209a02..4616880e9d8 100644
--- a/tests/wpt/meta/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html.ini
+++ b/tests/wpt/meta/css/css-values/tree-counting/calc-sibling-function-in-shadow-dom.html.ini
@@ -1,3 +1,6 @@
[calc-sibling-function-in-shadow-dom.html]
[Host children have sibling-index() and sibling-count() based on assignedNodes order]
expected: FAIL
+
+ [Host children have sibling-index() and sibling-count() based on the DOM tree order]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini
new file mode 100644
index 00000000000..c253f779d78
--- /dev/null
+++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini
@@ -0,0 +1,3 @@
+[008.html]
+ [Link with onclick form submit to javascript url and href navigation ]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini
index d5f4fa2f799..2241163d563 100644
--- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini
+++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini
@@ -4,3 +4,6 @@
[form submission]
expected: FAIL
+
+ [link click]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
new file mode 100644
index 00000000000..7dc346632a4
--- /dev/null
+++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini
@@ -0,0 +1,3 @@
+[navigation-unload-same-origin.window.html]
+ [Same-origin navigation started from unload handler must be ignored]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini b/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini
new file mode 100644
index 00000000000..a03a8322165
--- /dev/null
+++ b/tests/wpt/meta/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini
@@ -0,0 +1,3 @@
+[traverse_the_history_3.html]
+ [Multiple history traversals, last would be aborted]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini
index 673fc1e4ffd..8daf97ba765 100644
--- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini
+++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini
@@ -1,5 +1,5 @@
[createImageBitmap-invalid-args.html]
- expected: ERROR
+ expected: TIMEOUT
[createImageBitmap with a vector HTMLImageElement source and sw set to 0]
expected: FAIL
diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini
index 5d2657041d1..7e036a1c4e4 100644
--- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini
+++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini
@@ -1,5 +1,5 @@
[createImageBitmap-transfer.html]
- expected: ERROR
+ expected: TIMEOUT
[Transfer ImageBitmap created from a vector HTMLImageElement]
expected: FAIL
diff --git a/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini b/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini
index 2ef0896e3b3..8b8af2b9c2e 100644
--- a/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini
+++ b/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini
@@ -1,4 +1,3 @@
[document-base-url-window-initiator-is-not-opener.https.window.html]
- expected: TIMEOUT
[window.open() gets base url from initiator not opener.]
expected: [FAIL, PASS, TIMEOUT]
diff --git a/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini b/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
index ddd65fdcec8..2adc9aa86db 100644
--- a/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
+++ b/tests/wpt/meta/html/interaction/focus/the-autofocus-attribute/supported-elements.html.ini
@@ -1,15 +1,16 @@
[supported-elements.html]
+ expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
[Host element with delegatesFocus including no focusable descendants should be skipped]
- expected: FAIL
+ expected: NOTRUN
[Element with tabindex should support autofocus]
expected: FAIL
[Area element should support autofocus]
- expected: FAIL
+ expected: NOTRUN
[Host element with delegatesFocus should support autofocus]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index 7da2bc5ac80..6a420504feb 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,4 +1,3 @@
[iframe_sandbox_popups_escaping-3.html]
- expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: TIMEOUT
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
index a6591b318dc..c6f1e5d7d84 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html.ini
@@ -1,4 +1,4 @@
[iframe_sandbox_popups_nonescaping-2.html]
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: FAIL
+ expected: NOTRUN
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index ccdaf8d61b2..d5fd800f09d 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,3 +1,4 @@
[iframe_sandbox_popups_nonescaping-3.html]
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
diff --git a/tests/wpt/meta/html/semantics/forms/form-submission-0/text-plain.window.js.ini b/tests/wpt/meta/html/semantics/forms/form-submission-0/text-plain.window.js.ini
index 9158a253170..1abe0eb8b88 100644
--- a/tests/wpt/meta/html/semantics/forms/form-submission-0/text-plain.window.js.ini
+++ b/tests/wpt/meta/html/semantics/forms/form-submission-0/text-plain.window.js.ini
@@ -167,9 +167,6 @@
[text/plain: \\n in name (normal form)]
expected: FAIL
- [text/plain: 0x00 in name (normal form)]
- expected: FAIL
-
[text/plain: double quote in value (normal form)]
expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html.ini b/tests/wpt/meta/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html.ini
index 43a361b7721..85f3d8d4da6 100644
--- a/tests/wpt/meta/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html.ini
+++ b/tests/wpt/meta/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html.ini
@@ -43,3 +43,6 @@
[textarea tags should parse inside select instead of closing the select]
expected: FAIL
+
+ [Input tags should parse inside select if nested in another tag]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.js.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.js.ini
index bdba8dadafa..095b97aa5a0 100644
--- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.js.ini
+++ b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.js.ini
@@ -5,6 +5,9 @@
[Different blob URLs pointing to the same blob resolve to different modules]
expected: FAIL
+ [Revoking a blob URL immediately after calling import will not fail]
+ expected: FAIL
+
[blob-url.any.worker-module.html]
expected: TIMEOUT
@@ -15,6 +18,3 @@
[blob-url.any.html]
[Different blob URLs pointing to the same blob resolve to different modules]
expected: FAIL
-
- [Revoking a blob URL immediately after calling import will not fail]
- expected: FAIL
diff --git a/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini b/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
index 3bfb92e671a..590f4ee6a07 100644
--- a/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
+++ b/tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini
@@ -772,3 +772,15 @@
[X SNR (-349.0959218623025 dB) is not greater than or equal to 65.737. Got -349.0959218623025.]
expected: FAIL
+
+ [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14650\]\t-2.9403580000000000e+7\t8.6956524848937988e-1\t2.9403580869565248e+7\t3.3814116790712982e+7\t3.8985999999999999e-3\n\t[14651\]\t3.0547976493835449e-1\t8.9879405498504639e-1\t5.9331429004669189e-1\t6.6012262403823208e-1\t3.8985999999999999e-3\n\tMax AbsError of 2.9403580869565248e+7 at index of 14650.\n\tMax RelError of 3.3814116790712982e+7 at index of 14650.\n]
+ expected: FAIL
+
+ [X SNR (-105.93391852623517 dB) is not greater than or equal to 65.737. Got -105.93391852623517.]
+ expected: FAIL
+
+ [X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14650\]\t-2.5247278509648089e-39\t8.6956524848937988e-1\t8.6956524848937988e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[14651\]\t3.0547976493835449e-1\t8.9879405498504639e-1\t5.9331429004669189e-1\t6.6012262403823208e-1\t3.8985999999999999e-3\n\tMax AbsError of 8.6956524848937988e-1 at index of 14650.\n\tMax RelError of 1.0000000000000000e+0 at index of 14650.\n]
+ expected: FAIL
+
+ [X SNR (42.96525288004425 dB) is not greater than or equal to 65.737. Got 42.96525288004425.]
+ expected: FAIL
diff --git a/tests/wpt/tests/ai/language_detection/detector-iframe.https.html b/tests/wpt/tests/ai/language_detection/detector-iframe.https.html
index ddcf82bec68..9dc39d44a00 100644
--- a/tests/wpt/tests/ai/language_detection/detector-iframe.https.html
+++ b/tests/wpt/tests/ai/language_detection/detector-iframe.https.html
@@ -1,4 +1,7 @@
<!DOCTYPE html>
+<meta name="timeout" content="long">
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
@@ -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
@@ -185,6 +185,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);
}, 'Creating LanguageDetector without expectedInputLanguages');
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 @@
<!DOCTYPE HTML>
<meta charset="utf-8">
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<body></body>
<script>
+test_driver.set_test_context(parent);
+
window.onmessage = async message => {
- switch (message.data.type) {
- case 'LanguageDetectorCreate':
- LanguageDetector.create()
- .then(t => parent.postMessage({success: 'Success'}))
- .catch(err => parent.postMessage({err}));
- break;
- case 'LanguageDetectorAvailability':
- LanguageDetector.availability()
- .then(t => parent.postMessage({success: availability}))
- .catch(err => parent.postMessage({err}));
- break;
- };
+ const {id, type} = message.data;
+ try {
+ switch (type) {
+ case 'LanguageDetectorCreate':
+ await test_driver.bless("Create LanguageDetector", null, window);
+ await LanguageDetector.create();
+ parent.postMessage({id, success: 'Success'}, '*');
+ break;
+ case 'LanguageDetectorAvailability':
+ await test_driver.bless("Check LanguageDetector Availability", null, window);
+ const availability = await LanguageDetector.availability();
+ parent.postMessage({id, success: availability}, '*');
+ break;
+ }
+ } catch (err) {
+ parent.postMessage({id, err: err}, '*');
+ }
};
</script>
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
index 64595ea930c..64595ea930c 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-abort.tentative.https.any.js
+++ b/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
index 31c21ca777f..31c21ca777f 100644
--- 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
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
index 8691765f693..8691765f693 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-availability.tentative.https.any.js
+++ b/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
index c7e27d9766b..c7e27d9766b 100644
--- 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
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
index 328cceefefb..328cceefefb 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-create.tentative.https.any.js
+++ b/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
index ce9745acf17..ce9745acf17 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-measureInputUsage.tentative.https.any.js
+++ b/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
index dbf41cdadbc..dbf41cdadbc 100644
--- 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
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
index 62a780a3fc7..62a780a3fc7 100644
--- a/tests/wpt/tests/ai/summarizer/summarizer-summarize.tentative.https.any.js
+++ b/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 @@
+<!doctype html>
+<head>
+ <meta charset="utf-8" />
+ <meta name="timeout" content="long" />
+ <meta
+ name="help"
+ href="https://github.com/WICG/CHIPS#chips-cookies-having-independent-partitioned-state"
+ />
+ <script src="/common/get-host-info.sub.js"></script>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/cookies/resources/testharness-helpers.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <title>Test SameSite attribute behavior for partitioned cookies</title>
+</head>
+<body>
+ <script>
+ document.body.onload = async () => {
+ const iframe = document.createElement("iframe");
+ iframe.src = new URL(
+ "resources/partitioned-cookies-samesite-attributes-embed.html",
+ get_host_info().HTTPS_NOTSAMESITE_ORIGIN + self.location.pathname,
+ );
+ document.body.appendChild(iframe);
+ await new Promise(r => iframe.onload = r);
+ await fetch_tests_from_window(iframe.contentWindow);
+ };
+
+ promise_test(async (t) => {
+ t.add_cleanup(test_driver.delete_all_cookies);
+
+ document.cookie = "testPartitioned=0; Secure; Partitioned;";
+ document.cookie = "testUnpartitioned=1; Secure;";
+ const partitionedCookie = await test_driver.get_named_cookie("testPartitioned");
+ const unpartitionedCookie = await test_driver.get_named_cookie("testUnpartitioned");
+
+ // Browsers have not aligned on a common SameSite attribute default yet.
+ assert_any(assert_equals, partitionedCookie["sameSite"], ["Strict", "Lax", "None"]);
+ assert_equals(partitionedCookie["sameSite"], unpartitionedCookie["sameSite"]);
+ }, "In top-level contexts, partitioned cookies default to the same SameSite attribute as unpartitioned cookies.");
+
+ promise_test(async (t) => {
+ t.add_cleanup(test_driver.delete_all_cookies);
+
+ document.cookie = "testStrict=0; Secure; Partitioned; SameSite=Strict;";
+ let cookie = await test_driver.get_named_cookie("testStrict");
+ assert_equals(cookie["sameSite"], "Strict");
+
+ document.cookie = "testLax=0; Secure; Partitioned; SameSite=Lax;";
+ cookie = await test_driver.get_named_cookie("testLax");
+ assert_equals(cookie["sameSite"], "Lax");
+
+ document.cookie = "testNone=0; Secure; Partitioned; SameSite=None;";
+ cookie = await test_driver.get_named_cookie("testNone");
+ assert_equals(cookie["sameSite"], "None");
+ }, "In top-level contexts, partitioned cookies can be set with all SameSite attributes.");
+ </script>
+</body>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8"/>
+<meta name="timeout" content="long" />
+<title>Partitioned cookie SameSite test site embedded in a cross-site context</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<body>
+<script>
+promise_test(async t => {
+ test_driver.set_test_context(window.top);
+ t.add_cleanup(test_driver.delete_all_cookies);
+
+ document.cookie = "testUnset=0; Secure; Partitioned;";
+ document.cookie = "testStrict=0; Secure; Partitioned; SameSite=Strict;";
+ document.cookie = "testLax=0; Secure; Partitioned; SameSite=Lax;";
+ let cookies = await test_driver.get_all_cookies();
+ assert_equals(cookies.length, 0);
+
+ document.cookie = "testNone=0; Secure; Partitioned; SameSite=None;";
+ cookies = await test_driver.get_all_cookies();
+ assert_equals(cookies.length, 1);
+ const cookie = cookies[0];
+ assert_equals(cookie["name"], "testNone");
+ assert_equals(cookie["value"], "0");
+ assert_equals(cookie["sameSite"], "None");
+
+}, "In embedded cross-site contexts, partitioned cookies can only be set with explicit SameSite=None");
+</script>
+</body>
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 @@
}
</style>
<div class="container">
- <span style="font: 20px Ahem;">hello
+ <span style="font: 20px/1 Ahem;">hello
<span class="abs">hello</span>
<span style="vertical-align: top; font-size: 50px;">world</span>
</span>
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 @@
}
</style>
<div class="container">
- <span style="font: 20px Ahem;">hello
+ <span style="font: 20px/1 Ahem;">hello
<span class="abs">hello</span>
<span style="vertical-align: top; font-size: 50px;">world</span>
</span>
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 @@
+<!DOCTYPE html>
+<link rel="help" href="https://issuetracker.google.com/issues/406053621">
+<div style="column-count: 1;">
+ <div style="filter: blur(0px); display: inline;">
+ <div style="filter: blur(0px); display: inline">
+ <div style="position: relative;">
+ <div style="position: absolute;">
+ <div style="position: fixed;"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
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
index 834c96ccd39..834c96ccd39 100644
--- 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
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
index c3752156c7d..c3752156c7d 100644
--- 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
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
index d132f0ca677..d132f0ca677 100644
--- 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
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
index 0b632fa94ac..0b632fa94ac 100644
--- 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
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
index cd26da24389..cd26da24389 100644
--- 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
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
index 2f2473fd046..2f2473fd046 100644
--- 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
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
index 002b1f2b594..002b1f2b594 100644
--- 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
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
index 0dcbeef4df8..0dcbeef4df8 100644
--- 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
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
index 6543021c979..6543021c979 100644
--- 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
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
index daa65e904e7..daa65e904e7 100644
--- 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
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
index 4cb56d207fe..4cb56d207fe 100644
--- 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
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
index 64b3b007ab5..64b3b007ab5 100644
--- 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
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
index 09973ddc690..09973ddc690 100644
--- 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
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
index 1f23ed7f7ca..1f23ed7f7ca 100644
--- 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
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
index d49c2f50f19..d49c2f50f19 100644
--- 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
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
index ed299b5d9f6..ed299b5d9f6 100644
--- 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
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
index 124bf7eaeb1..124bf7eaeb1 100644
--- 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
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
index b00c6a70f8a..b00c6a70f8a 100644
--- 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
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
index 9582ab4103d..9582ab4103d 100644
--- 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
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
index 61bb4a9b933..61bb4a9b933 100644
--- 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
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
index 3387918d399..3387918d399 100644
--- 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
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
index cf588ded41e..cf588ded41e 100644
--- 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
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
index 9fb5e85e920..9fb5e85e920 100644
--- 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
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
index 078b810cf8e..078b810cf8e 100644
--- 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
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
index 8e426d8ed32..8e426d8ed32 100644
--- 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
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
index d4170084f06..d4170084f06 100644
--- 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
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
index 9d9674bd476..9d9674bd476 100644
--- 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
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
index 1dcd393d99a..1dcd393d99a 100644
--- 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
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 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+ body {
+ margin: 0px;
+ }
+
+ .outer {
+ columns: 4;
+ orphans: 1;
+ widows: 1;
+ border: dotted 2px black;
+ width: 500px;
+ }
+
+ .col-box {
+ background: cyan;
+ height: 20px;
+ /* keep each box whole */
+ break-inside: avoid;
+ }
+
+ .spanner {
+ column-span: all;
+ background: grey;
+ opacity: 0.5;
+ height: 20px;
+ }
+
+ .pink-box {
+ column-span: all;
+ background: hotpink;
+ height: 20px;
+ width: 100px;
+ }
+
+ .first-column-gaps {
+ position: absolute;
+ top: 82px;
+ display: flex;
+ height: 20px;
+ left: 123px;
+ column-gap: 128px;
+ }
+
+ .column-gap {
+ background: black;
+ width: 1px;
+ }
+</style>
+<div class="first-column-gaps">
+ <div class="column-gap"></div>
+ <div class="column-gap"></div>
+ <div class="column-gap"></div>
+</div>
+<div class="column-gap" style="position: absolute; left: 123px; height: 20px; top:2px;"></div>
+<div class="outer">
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+
+ <div class="spanner"></div>
+ <div class="pink-box"></div>
+ <div class="spanner"></div>
+
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+</div>
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 @@
+<!DOCTYPE html>
+<title>
+ CSS Gap Decorations: Multicolumn gap decorations painted with different num of columns per row.
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="match" href="multicol-gap-decorations-015-ref.html">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+ body {
+ margin: 0px;
+ }
+
+ .outer {
+ columns: 4;
+ column-rule: solid 1px black;
+ orphans: 1;
+ widows: 1;
+ border: dotted 2px black;
+ width: 500px;
+ }
+
+ .col-box {
+ background: cyan;
+ height: 20px;
+ /* keep each box whole */
+ break-inside: avoid;
+ }
+
+ .spanner {
+ column-span: all;
+ background: grey;
+ opacity: 0.5;
+ height: 20px;
+ }
+
+ .pink-box {
+ column-span: all;
+ background: hotpink;
+ height: 20px;
+ width: 100px;
+ }
+</style>
+<div class="outer">
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+
+ <div class="spanner"></div>
+ <div class="pink-box"></div>
+ <div class="spanner"></div>
+
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+</div>
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 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+ body {
+ margin: 0px;
+ }
+
+ .outer {
+ columns: 4;
+ orphans: 1;
+ widows: 1;
+ border: dotted 2px black;
+ width: 500px;
+ }
+
+ .col-box {
+ background: cyan;
+ height: 20px;
+ /* keep each box whole */
+ break-inside: avoid;
+ }
+
+ .spanner {
+ column-span: all;
+ background: grey;
+ opacity: 0.5;
+ height: 20px;
+ }
+
+ .pink-box {
+ column-span: all;
+ background: hotpink;
+ height: 20px;
+ width: 100px;
+ }
+
+ .first-column-gaps {
+ position: absolute;
+ top: 2px;
+ display: flex;
+ height: 20px;
+ left: 123px;
+ column-gap: 128px;
+ }
+
+ .column-gap {
+ background: black;
+ width: 1px;
+ }
+</style>
+<div class="first-column-gaps">
+ <div class="column-gap"></div>
+ <div class="column-gap"></div>
+ <div class="column-gap"></div>
+</div>
+<div class="column-gap" style="position: absolute; left: 123px; height: 20px; top:82px;"></div>
+<div class="outer">
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+
+ <div class="spanner"></div>
+ <div class="pink-box"></div>
+ <div class="spanner"></div>
+
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+</div>
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 @@
+<!DOCTYPE html>
+<title>
+ CSS Gap Decorations: Multicolumn gap decorations painted with different num of columns per row.
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="match" href="multicol-gap-decorations-016-ref.html">
+<link rel="author" title="Javier Contreras" href="mailto:javiercon@microsoft.com">
+<style>
+ body {
+ margin: 0px;
+ }
+
+ .outer {
+ columns: 4;
+ column-rule: solid 1px black;
+ orphans: 1;
+ widows: 1;
+ border: dotted 2px black;
+ width: 500px;
+ }
+
+ .col-box {
+ background: cyan;
+ height: 20px;
+ /* keep each box whole */
+ break-inside: avoid;
+ }
+
+ .spanner {
+ column-span: all;
+ background: grey;
+ opacity: 0.5;
+ height: 20px;
+ }
+
+ .pink-box {
+ column-span: all;
+ background: hotpink;
+ height: 20px;
+ width: 100px;
+ }
+</style>
+<div class="outer">
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+
+ <div class="spanner"></div>
+ <div class="pink-box"></div>
+ <div class="spanner"></div>
+
+ <div class="col-box"></div>
+ <div class="col-box"></div>
+</div>
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 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/#auto-repeat">
+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html">
+<style>
+ .grid {
+ display: grid;
+ width: 100px;
+ grid-template-columns: repeat(auto-fit, minmax(calc(100% - 10px), calc(100% - 100px)));
+ background-color: green;
+ }
+</style>
+</head>
+<body>
+<p>Test passes if there is a filled green square.</p>
+<div class="grid">
+ <div style="height: 50px;"></div>
+ <div style="height: 50px;"></div>
+</div>
+</body>
+</html>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Test: Clamping a nested subgrid's grid-template-areas in one dimension</title>
+<link rel="author" title="Kurt Catti-Schmidt" href="mailto:kschmi@microsoft.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/#grid-template-areas-property">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<style>
+.grid {
+ background: green;
+ display: grid;
+ height: 100px;
+ width: 100px;
+ grid-template: 50px 50px / 50px 50px;
+ grid-template-areas: "item item"
+ "item item";
+}
+.subgrid {
+ display: grid;
+ grid-template-columns: subgrid;
+ grid-template-rows: 50px 50px;
+ grid-column: span 2;
+ grid-row: span 2;
+}
+.item {
+ background: red;
+ grid-area: item;
+}
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="grid">
+ <div class="subgrid">
+ <div class="item"></div>
+ </div>
+</div>
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 @@
<!--
The bottom margin of the first `.inner` ends at the clamp boundary, and the
bottom margin of `.collapse-through` ends after it. The clamp point therefore
- is before `.collapse-through`, and so `.abpos` won't be visible.
+ is before `.collapse-through`, so `.rel` will be after the clamp point and
+ `.abpos` won't be visible.
-->
<div class="clamp">
@@ -41,7 +45,7 @@ Line 2
Line 3
Line 4</div>
<div class="collapse-through"></div>
-<div class="abspos"></div>
+<div class="rel"><div class="abspos"></div></div>
<div class="inner">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
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 @@
<!DOCTYPE html>
<meta charset="utf-8">
-<title>CSS Overflow: abspos at the start of a line-clamp</title>
+<title>CSS Overflow: abspos whose containing block is outside the line-clamp container gets painted</title>
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
<link rel="match" href="reference/line-clamp-with-abspos-001-ref.html">
-<meta name="assert" content="Absolute positioned boxes in an inline formatting context inside a line-clamp container are not hidden if they are in the box tree before the clamp point.">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is the initial containing block, so the abspos gets shown.">
<style>
.clamp {
line-clamp: 4;
@@ -15,10 +15,10 @@
}
.abspos {
position: absolute;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
</style>
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
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 @@
<!DOCTYPE html>
<meta charset="utf-8">
-<title>CSS Overflow: abspos at the start of a line-clamp</title>
+<title>CSS Overflow: abspos whose containing block is outside the line-clamp container gets painted</title>
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
<link rel="match" href="reference/line-clamp-with-abspos-001-ref.html">
-<meta name="assert" content="Absolute positioned boxes in a block formatting context inside a line-clamp container are not hidden if they are in the box tree before the clamp point.">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is the initial containing block, so the abspos gets shown.">
<style>
.clamp {
line-clamp: 4;
@@ -14,10 +14,10 @@
}
.abspos {
position: absolute;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
.pre {
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html
new file mode 100644
index 00000000000..8b5d681d97c
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-003.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is outside the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-001-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is the initial containing block, so the abspos gets shown, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<div class="abspos"></div>Line 5</div>
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 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Overflow: abspos in line-clamp after clamp point</title>
-<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
-<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
-<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
-<meta name="assert" content="Absolute positioned boxes in an inline formatting context inside a line-clamp container are always hidden if they are in the box tree after the clamp point.">
-<style>
-.clamp {
- line-clamp: 4;
- font: 16px / 32px serif;
- padding: 0 4px;
- white-space: pre;
- background-color: yellow;
-}
-.abspos {
- position: absolute;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
- background-color: skyblue;
-}
-</style>
-<div class="clamp">Line 1
-Line 2
-Line 3
-Line 4
-<div class="abspos"></div>Line 5</div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is outside the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-001-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is the initial containing block, so the abspos gets shown, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+.pre {
+ white-space: pre;
+}
+</style>
+<div class="clamp">
+<div class="pre">Line 1
+Line 2
+Line 3
+Line 4</div>
+<div class="abspos"></div>
+<div>Line 5</div>
+</div>
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 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Overflow: abspos in line-clamp after clamp point</title>
-<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
-<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
-<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
-<meta name="assert" content="Absolute positioned boxes in a block formatting context inside a line-clamp container are always hidden if they are in the box tree after the clamp point.">
-<style>
-.clamp {
- line-clamp: 4;
- font: 16px / 32px serif;
- padding: 0 4px;
- background-color: yellow;
-}
-.abspos {
- position: absolute;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
- background-color: skyblue;
-}
-.pre {
- white-space: pre;
-}
-</style>
-<div class="clamp">
-<div class="pre">Line 1
-Line 2
-Line 3
-Line 4</div>
-<div class="abspos"></div>
-<div>Line 5</div>
-</div>
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
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 @@
<!DOCTYPE html>
<meta charset="utf-8">
-<title>CSS Overflow: bottom: 0 abspos in line-clamp before clamp point</title>
+<title>CSS Overflow: abspos whose containing block is the line-clamp container gets painted</title>
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
-<link rel="match" href="reference/line-clamp-with-abspos-008-ref.html">
-<meta name="assert" content="Absolute positioned boxes inside a line-clamp container are not hidden if they are in the box tree before the clamp point.">
+<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is the line-clamp container, so the abspos gets shown.">
<style>
.clamp {
line-clamp: 4;
- position: relative;
font: 16px / 32px serif;
padding: 0 4px;
white-space: pre;
background-color: yellow;
+ position: relative;
}
.abspos {
position: absolute;
- bottom: 0;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
</style>
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 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Overflow: abspos in line-clamp before clamp point which overflows</title>
-<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
-<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
-<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
-<meta name="assert" content="Absolute positioned boxes in an inline formatting context inside a line-clamp container are not hidden if they are in the box tree before the clamp point, even if they visually extend beyond that point">
-<style>
-.clamp {
- line-clamp: 4;
- font: 16px / 32px serif;
- padding: 0 4px;
- white-space: pre;
- background-color: yellow;
-}
-.abspos {
- position: absolute;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
- background-color: skyblue;
-}
-</style>
-<div class="clamp">Line 1
-Line 2
-Line 3
-Line 4<div class="abspos"></div>
-Line 5</div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is the line-clamp container, so the abspos gets shown.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+.pre {
+ white-space: pre;
+}
+</style>
+<div class="clamp">
+<div class="abspos"></div>
+<div class="pre">Line 1
+Line 2
+Line 3
+Line 4
+Line 5</div>
+</div>
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 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Overflow: abspos in line-clamp before clamp point which overflows</title>
-<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
-<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
-<link rel="match" href="reference/line-clamp-with-abspos-006-ref.html">
-<meta name="assert" content="Absolute positioned boxes in a block formatting context inside a line-clamp container are not hidden if they are in the box tree before the clamp point, even if they visually extend beyond that point">
-<style>
-.clamp {
- line-clamp: 4;
- font: 16px / 32px serif;
- padding: 0 4px;
- background-color: yellow;
-}
-.abspos {
- position: absolute;
- right: 0;
- width: 50px;
- height: 75px;
- margin: 4px;
- background-color: skyblue;
-}
-.pre {
- white-space: pre;
-}
-</style>
-<div class="clamp">
-<div class="pre">Line 1
-Line 2
-Line 3</div>
-<div class="abspos"></div>
-<div class="pre">Line 4
-Line 5</div>
-</div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is the line-clamp container, so the abspos gets shown, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<div class="abspos"></div>Line 5</div>
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 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>CSS Overflow: abspos in line-clamp before clamp point positioned after it</title>
-<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
-<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
-<link rel="match" href="reference/line-clamp-with-abspos-007-ref.html">
-<meta name="assert" content="Absolute positioned boxes inside a line-clamp container are not hidden if they are in the box tree before the clamp point, even if they are positioned after that point">
-<style>
-.clamp {
- line-clamp: 4;
- font: 16px / 32px serif;
- padding: 0 4px;
- white-space: pre;
- background-color: yellow;
-}
-.abspos {
- position: absolute;
- top: 148px;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
- background-color: skyblue;
-}
-</style>
-<div class="clamp"><div class="abspos"></div>Line 1
-Line 2
-Line 3
-Line 4
-Line 5</div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is the line-clamp container, so the abspos gets shown, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+.pre {
+ white-space: pre;
+}
+</style>
+<div class="clamp">
+<div class="pre">Line 1
+Line 2
+Line 3
+Line 4</div>
+<div class="abspos"></div>
+<div>Line 5</div>
+</div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is fully before the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-009-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is fully before the clamp point, so the abspos gets painted.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.rel {
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+<div class="rel"><div class="abspos"></div>Line 2
+Line 3</div>Line 4
+Line 5</div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is fully before the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-009-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is fully before the clamp point, so the abspos gets painted.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.rel {
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">
+ <div>Line 1</div>
+ <div class="rel">
+ <div class="abspos"></div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ </div>
+ <div>Line 4</div>
+ <div>Line 5</div>
+</div>
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
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 @@
<!DOCTYPE html>
<meta charset="utf-8">
-<title>CSS Overflow: abspos in line-clamp after clamp point positioned before it</title>
+<title>CSS Overflow: abspos whose containing block is fully after the clamp point is hidden</title>
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
-<meta name="assert" content="Absolute positioned boxes inside a line-clamp container are hidden if they are in the box tree after the clamp point, even if they are positioned before that point">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is fully after the clamp point, so the abspos is hidden.">
<style>
.clamp {
line-clamp: 4;
- position: relative;
font: 16px / 32px serif;
padding: 0 4px;
white-space: pre;
background-color: yellow;
}
+.rel {
+ position: relative;
+}
.abspos {
position: absolute;
top: 0;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
</style>
@@ -28,4 +29,5 @@
Line 2
Line 3
Line 4
-Line 5<div class="abspos"></div></div>
+<div class="rel"><div class="abspos"></div>Line 5
+Line 6</div></div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is fully after the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is fully after the clamp point, so the abspos is hidden.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.rel {
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">
+ <div>Line 1</div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ <div>Line 4</div>
+ <div class="rel">
+ <div class="abspos"></div>
+ <div>Line 5</div>
+ <div>Line 6</div>
+ </div>
+</div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block contains the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-013-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block contains the clamp point, so the abspos gets painted, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.rel {
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+<div class="rel">Line 4
+Line 5<div class="abspos"></div></div></div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block contains the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-013-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block contains the clamp point, so the abspos gets painted, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.rel {
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">
+ <div>Line 1</div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ <div class="rel">
+ <div>Line 4</div>
+ <div>Line 5</div>
+ <div class="abspos"></div>
+ </div>
+</div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is an inline fully after the clamp point is hidden</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is fully after the clamp point, so the abspos is hidden. This happens even when the containing block is an inline.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.rel {
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<span class="rel"><div class="abspos"></div>Line 5</span></div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is an inline that contains the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-016-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block contains the clamp point, so the abspos gets painted. This happens even when the containing block is an inline, and even when the static position of the abspos is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.rel {
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+<span class="rel">Line 4
+<div class="abspos"></div>Line 5</span></div>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: abspos whose containing block is an inline that gets displaced by the ellipsis</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-030-ref.html">
+<meta name="assert" content="Absolute positioned boxes in a line-clamp container are hidden if and only if their containing block precedes or contains the clamp point. In this case, the containing block is an inline whose start gets displaced by the ellipsis. Therefore, it counts as being all after the clamp point, and the abspos is hidden.">
+<style>
+.clamp {
+ line-clamp: 3;
+ background-color: yellow;
+}
+.child {
+ font: 16px / 32px monospace;
+ white-space: pre;
+ width: 7.1ch;
+}
+.rel {
+ position: relative;
+}
+.abspos {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">
+<div class="child">Line 1
+Line 2
+Line 3 <span class="rel">hidden
+fdgdgjldsfg
+<div class="abspos"></div></span></div>
+</div>
+<p>Following content.</p>
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
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 @@
<title>CSS Overflow: line-clamp doesn't propagate to abspos</title>
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
-<link rel="match" href="reference/line-clamp-with-abspos-010-ref.html">
+<link rel="match" href="reference/line-clamp-with-abspos-018-ref.html">
<meta name="assert" content="Absolute positioned boxes create a new BFC, and line-clamp does not propagate into independent BFCs">
<style>
.clamp {
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-011.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-019.html
index ab5102a7cf2..237ed69b67d 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-011.tentative.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-019.html
@@ -3,7 +3,7 @@
<title>CSS Overflow: line-clamp hidden abspos should count as ink overflow</title>
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
-<link rel="match" href="reference/line-clamp-with-abspos-011-ref.html">
+<link rel="match" href="reference/line-clamp-with-abspos-019-ref.html">
<meta name="assert" content="Any overflowing content hidden from paint by line-clamp is treated as ink overflow, including absolute positioned boxes, and therefore doesn't cause the scrollable overflow rectangle to grow. Meanwhile, non-hidden abspos count as scrollable overflow.">
<style>
#scrollContainer {
@@ -16,7 +16,6 @@
.clamp {
line-clamp: 4;
padding: 0 4px;
- white-space: pre;
background-color: yellow;
}
.abspos {
@@ -27,21 +26,26 @@
margin: 4px;
background-color: skyblue;
}
+.rel {
+ position: relative;
+}
#abspos1 {
- top: 4.5lh;
+ top: 1lh;
}
#abspos2 {
- top: 6lh;
+ top: 2lh;
}
</style>
<div id="scrollContainer">
-<div class="clamp">Line 1
-Line 2
-Line 3
-Line 4<div class="abspos" id="abspos1"></div>
-Line 5
-Line 6<div class="abspos" id="abspos2"></div></div>
+ <div class="clamp">
+ <div>Line 1</div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ <div class="rel">Line 4<div class="abspos" id="abspos1"></div></div>
+ <div>Line 5</div>
+ <div class="rel">Line 6<div class="abspos" id="abspos2"></div></div>
+ </div>
</div>
<script>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-012.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-020.html
index bed065f3838..55fb07c2061 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-012.tentative.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-020.html
@@ -4,7 +4,7 @@
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
-<meta name="assert" content="Block-level abspos should still be hidden if it is after the clamp point with line-clamp: auto">
+<meta name="assert" content="Block-level abspos should be hidden if its containing block is after the clamp point with line-clamp: auto">
<style>
.clamp {
line-clamp: auto;
@@ -13,8 +13,8 @@
padding: 0 4px;
background-color: yellow;
}
-.inner {
- white-space: pre;
+.rel {
+ position: relative;
}
.abspos {
position: absolute;
@@ -25,11 +25,13 @@
</style>
<div class="clamp">
-<div class="inner">Line 1
-Line 2
-Line 3
-Line 4
-Line 5</div>
-<div class="inner">Line 6</div>
-<div class="abspos"></div>
+ <div>Line 1</div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ <div>Line 4</div>
+ <div>Line 5</div>
+ <div class="rel">
+ <div>Line 6</div>
+ <div class="abspos"></div>
+ </div>
</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-013.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-021.html
index ccea125f724..21a0e96eee3 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-013.tentative.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-021.html
@@ -4,7 +4,7 @@
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
-<meta name="assert" content="Block-level abspos should still be hidden if it is after the clamp point with line-clamp: auto, even if it lies on the boundary because the automatic size of previous boxes was adjusted.">
+<meta name="assert" content="Block-level abspos should still be hidden if its containing block is after the clamp point with line-clamp: auto, even if it lies on the boundary because the automatic size of previous boxes was adjusted.">
<style>
.clamp {
line-clamp: auto;
@@ -16,6 +16,9 @@
.inner {
white-space: pre;
}
+.rel {
+ position: relative;
+}
.abspos {
position: absolute;
width: 100px;
@@ -30,7 +33,6 @@ Line 2
Line 3
Line 4
Line 5
-Line 6
-</div>
-<div class="abspos"></div>
+Line 6</div>
+<div class="rel"><div class="abspos"></div></div>
</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-014.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-022.html
index ea2f5312070..6599365883b 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-014.tentative.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-abspos-022.html
@@ -4,7 +4,7 @@
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
-<meta name="assert" content="Absolute positioned boxes in an inline formatting context inside a line-clamp container are always hidden if they are in the box tree after the clamp point. This test specifically tests that this is the case even when they don't have a set height.">
+<meta name="assert" content="Absolute positioned boxes inside a line-clamp container are always hidden if their containing block is after the clamp point. This test specifically tests that this is the case even when they don't have a set height.">
<style>
.clamp {
line-clamp: 4;
@@ -13,6 +13,9 @@
white-space: pre;
background-color: yellow;
}
+.rel {
+ position: relative;
+}
.abspos {
position: absolute;
right: 0;
@@ -27,4 +30,4 @@
Line 2
Line 3
Line 4
-<div class="abspos">This abspos shouldn't be visible</div>Line 5</div>
+<div class="rel"><div class="abspos">This abspos shouldn't be visible</div>Line 5</div></div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html
new file mode 100644
index 00000000000..7f69c970baa
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-001.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is outside the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-001-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is the layout viewport, so the fixed-pos gets shown.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp"><div class="fixed"></div>Line 1
+Line 2
+Line 3
+Line 4
+Line 5</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html
new file mode 100644
index 00000000000..90eecbd6af6
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-002.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is outside the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-001-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is the layout viewport, so the fixed-pos gets shown.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+.pre {
+ white-space: pre;
+}
+</style>
+<div class="clamp">
+<div class="fixed"></div>
+<div class="pre">Line 1
+Line 2
+Line 3
+Line 4
+Line 5</div>
+</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html
new file mode 100644
index 00000000000..c4bc8a64784
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-003.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is outside the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-001-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is the layout viewport, so the fixed-pos gets shown, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<div class="fixed"></div>Line 5</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html
new file mode 100644
index 00000000000..673b7d8c9d8
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-004.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is outside the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-001-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is the layout viewport, so the fixed-pos gets shown, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+.pre {
+ white-space: pre;
+}
+</style>
+<div class="clamp">
+<div class="pre">Line 1
+Line 2
+Line 3
+Line 4</div>
+<div class="fixed"></div>
+<div>Line 5</div>
+</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html
new file mode 100644
index 00000000000..22cf7e0c132
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-005.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is the line-clamp container, so the fixed-pos gets shown.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp"><div class="fixed"></div>Line 1
+Line 2
+Line 3
+Line 4
+Line 5</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html
new file mode 100644
index 00000000000..46f2e0b2b39
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-006.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is the line-clamp container, so the fixed-pos gets shown.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+.pre {
+ white-space: pre;
+}
+</style>
+<div class="clamp">
+<div class="fixed"></div>
+<div class="pre">Line 1
+Line 2
+Line 3
+Line 4
+Line 5</div>
+</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html
new file mode 100644
index 00000000000..0197ecb6d4a
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-007.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is the line-clamp container, so the fixed-pos gets shown, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<div class="fixed"></div>Line 5</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html
new file mode 100644
index 00000000000..b14856a417f
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-008.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is the line-clamp container gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-005-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is the line-clamp container, so the fixed-pos gets shown, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+.pre {
+ white-space: pre;
+}
+</style>
+<div class="clamp">
+<div class="pre">Line 1
+Line 2
+Line 3
+Line 4</div>
+<div class="fixed"></div>
+<div>Line 5</div>
+</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html
new file mode 100644
index 00000000000..93faeed3bb1
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-009.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is fully before the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-009-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is fully before the clamp point, so the fixed-pos gets painted.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+<div class="transformed"><div class="fixed"></div>Line 2
+Line 3</div>Line 4
+Line 5</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html
new file mode 100644
index 00000000000..8bd64fee615
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-010.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is fully before the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-009-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is fully before the clamp point, so the fixed-pos gets painted.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">
+ <div>Line 1</div>
+ <div class="transformed">
+ <div class="fixed"></div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ </div>
+ <div>Line 4</div>
+ <div>Line 5</div>
+</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html
new file mode 100644
index 00000000000..70273b36cda
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-011.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is fully after the clamp point is hidden</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is fully after the clamp point, so the fixed-pos is hidden.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<div class="transformed"><div class="fixed"></div>Line 5
+Line 6</div></div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html
new file mode 100644
index 00000000000..0e5584db10b
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-012.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block is fully after the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block is fully after the clamp point, so the fixed-pos is hidden.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">
+ <div>Line 1</div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ <div>Line 4</div>
+ <div class="transformed">
+ <div class="fixed"></div>
+ <div>Line 5</div>
+ <div>Line 6</div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html
new file mode 100644
index 00000000000..580619be41e
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-013.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block contains the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-013-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block contains the clamp point, so the fixed-pos gets painted, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+<div class="transformed">Line 4
+Line 5<div class="fixed"></div></div></div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html
new file mode 100644
index 00000000000..371fb595702
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-014.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos whose containing block contains the clamp point gets painted</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/line-clamp-with-abspos-013-ref.html">
+<meta name="assert" content="Fixed positioned boxes in a line-clamp container are hidden if and only if their fixed positioning containing block precedes or contains the clamp point. In this case, the containing block contains the clamp point, so the fixed-pos gets painted, even if its static position is after the clamp point.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ background-color: skyblue;
+}
+</style>
+<div class="clamp">
+ <div>Line 1</div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ <div class="transformed">
+ <div>Line 4</div>
+ <div>Line 5</div>
+ <div class="fixed"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html
new file mode 100644
index 00000000000..a458c11c04e
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-015.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: line-clamp: auto hidden block-level fixed pos</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
+<meta name="assert" content="Block-level fixed-pos should be hidden if its fixed positioning containing block is after the clamp point with line-clamp: auto">
+<style>
+.clamp {
+ line-clamp: auto;
+ max-height: 4lh;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ background-color: yellow;
+}
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ width: 100px;
+ height: 100px;
+ background-color: skyblue;
+}
+</style>
+
+<div class="clamp">
+ <div>Line 1</div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ <div>Line 4</div>
+ <div>Line 5</div>
+ <div class="transformed">
+ <div>Line 6</div>
+ <div class="fixed"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-016.html
index ab741d3df4d..07a6f4e4f0d 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-auto-025.tentative.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-016.html
@@ -1,10 +1,10 @@
<!DOCTYPE html>
<meta charset="utf-8">
-<title>CSS Overflow: abspos exactly at the clamp point is hidden</title>
+<title>CSS Overflow: line-clamp: auto hidden block-level fixed pos</title>
<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
-<meta name="assert" content="The chosen clamp point with line-clamp: auto is at the last line where the box size doesn't overflow. An immediately following box, even if it's an abspos that takes up no block size, should still be hidden.">
+<meta name="assert" content="Block-level fixed-pos should still be hidden if its fixed positioning containing block is after the clamp point with line-clamp: auto, even if it lies on the boundary because the automatic size of previous boxes was adjusted.">
<style>
.clamp {
line-clamp: auto;
@@ -14,10 +14,13 @@
background-color: yellow;
}
.inner {
- white-space: pre-wrap;
+ white-space: pre;
}
-.abspos {
- position: absolute;
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
width: 100px;
height: 100px;
background-color: skyblue;
@@ -29,8 +32,7 @@
Line 2
Line 3
Line 4
-</div>
-<div class="abspos"></div>
-<div class="inner">Line 5
+Line 5
Line 6</div>
+<div class="transformed"><div class="fixed"></div></div>
</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html
new file mode 100644
index 00000000000..97c77429ee4
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/line-clamp-with-fixed-pos-017.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Overflow: fixed pos in line-clamp after clamp point</title>
+<link rel="author" title="Andreu Botella" href="mailto:abotella@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-4/#line-clamp">
+<link rel="match" href="reference/webkit-line-clamp-005-ref.html">
+<meta name="assert" content="Fixed positioned boxes inside a line-clamp container are always hidden if their fixed positioning containing block is after the clamp point. This test specifically tests that this is the case even when they don't have a set height.">
+<style>
+.clamp {
+ line-clamp: 4;
+ font: 16px / 32px serif;
+ padding: 0 4px;
+ white-space: pre;
+ background-color: yellow;
+}
+.transformed {
+ transform: scale(1); /* Makes it a fixed-pos containing block */
+}
+.fixed {
+ position: fixed;
+ right: 0;
+ width: 100px;
+ /* No height! */
+ margin: 4px;
+ white-space: normal;
+ background-color: red;
+}
+</style>
+<div class="clamp">Line 1
+Line 2
+Line 3
+Line 4
+<div class="transformed"><div class="fixed">This fixed pos shouldn't be visible</div>Line 5</div></div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html
index d756162dde0..ffa463369c1 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-001-ref.html
@@ -10,10 +10,10 @@
}
.abspos {
position: absolute;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
</style>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html
index 3b1f9218e88..9825838e7b4 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-005-ref.html
@@ -7,17 +7,18 @@
padding: 0 4px;
white-space: pre;
background-color: yellow;
+ position: relative;
}
.abspos {
position: absolute;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
</style>
-<div class="clamp">Line 1
+<div class="clamp"><div class="abspos"></div>Line 1
Line 2
Line 3
-Line 4…<div class="abspos"></div></div>
+Line 4…</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-006-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-009-ref.html
index 4b55c37a033..cc3a43df238 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-006-ref.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-009-ref.html
@@ -5,24 +5,21 @@
.clamp {
font: 16px / 32px serif;
padding: 0 4px;
+ white-space: pre;
background-color: yellow;
}
+.rel {
+ position: relative;
+}
.abspos {
position: absolute;
- right: 0;
- width: 50px;
- height: 75px;
- margin: 4px;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
-.pre {
- white-space: pre;
-}
</style>
-<div class="clamp">
-<div class="pre">Line 1
-Line 2
-Line 3</div>
-<div class="abspos"></div>
-<div class="pre">Line 4…</div>
-</div>
+<div class="clamp">Line 1
+<div class="rel"><div class="abspos"></div>Line 2
+Line 3</div>Line 4…</div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-008-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-013-ref.html
index 373b2755c1d..cae83ecc37c 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-008-ref.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-013-ref.html
@@ -3,23 +3,24 @@
<title>CSS Reference</title>
<style>
.clamp {
- position: relative;
font: 16px / 32px serif;
padding: 0 4px;
white-space: pre;
background-color: yellow;
}
+.rel {
+ position: relative;
+}
.abspos {
position: absolute;
- bottom: 0;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
</style>
-<div class="clamp"><div class="abspos"></div>Line 1
+<div class="clamp">Line 1
Line 2
Line 3
-Line 4…</div>
+<div class="rel"><div class="abspos"></div>Line 4…</div></div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-007-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-016-ref.html
index e3dcc696e39..3c8011394d2 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-007-ref.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-016-ref.html
@@ -8,17 +8,19 @@
white-space: pre;
background-color: yellow;
}
+.rel {
+ position: relative;
+}
.abspos {
position: absolute;
- top: 148px;
- right: 0;
- width: 50px;
- height: 50px;
- margin: 4px;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
background-color: skyblue;
}
</style>
-<div class="clamp"><div class="abspos"></div>Line 1
+<div class="clamp">Line 1
Line 2
Line 3
-Line 4…</div>
+<span class="rel"><div class="abspos"></div>Line 4…</span></div>
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-010-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-018-ref.html
index ecc2fcee1b5..ecc2fcee1b5 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-010-ref.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-018-ref.html
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-011-ref.html b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-019-ref.html
index f08b0270e8d..f97a9725325 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-011-ref.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/reference/line-clamp-with-abspos-019-ref.html
@@ -11,25 +11,30 @@
}
.clamp {
padding: 0 4px;
- white-space: pre;
background-color: yellow;
}
.abspos {
position: absolute;
- top: 4.5lh;
+ top: 1lh;
right: 0;
width: 50px;
height: 50px;
margin: 4px;
background-color: skyblue;
}
+.rel {
+ position: relative;
+}
</style>
<div id="scrollContainer">
-<div class="clamp">Line 1
-Line 2
-Line 3
-Line 4…<div class="abspos"></div></div>
+ <div class="clamp">
+ <div>Line 1</div>
+ <div>Line 2</div>
+ <div>Line 3</div>
+ <div class="rel">Line 4…<div class="abspos"></div></div>
+ </div>
+</div>
<script>
window.addEventListener("load", () => {
diff --git a/tests/wpt/tests/css/css-overflow/line-clamp/webkit-line-clamp-abspos-001.tentative.html b/tests/wpt/tests/css/css-overflow/line-clamp/webkit-line-clamp-abspos-001.html
index fb8e027740d..fb8e027740d 100644
--- a/tests/wpt/tests/css/css-overflow/line-clamp/webkit-line-clamp-abspos-001.tentative.html
+++ b/tests/wpt/tests/css/css-overflow/line-clamp/webkit-line-clamp-abspos-001.html
diff --git a/tests/wpt/tests/css/css-overflow/scroll-marker-active-unreached-target.html b/tests/wpt/tests/css/css-overflow/scroll-marker-active-unreached-target.html
new file mode 100644
index 00000000000..6a6bcc2891f
--- /dev/null
+++ b/tests/wpt/tests/css/css-overflow/scroll-marker-active-unreached-target.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <meta charset="utf-8">
+ <title>CSS Test: test that the scroll-marker of a target whose target position
+ has not been reached only gets selected when it is within half a scroll
+ port's distance from the current scroll offset</title>
+ <link rel="help" href="https://drafts.csswg.org/css-overflow-5/#example-d2ca6884">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="support/scroll-marker-support.js"></script>
+ <script src="/dom/events/scrolling/scroll_support.js"></script>
+</head>
+
+<body>
+ <style>
+ .wrapper {
+ display: grid;
+ justify-content: center;
+ position: relative;
+ }
+
+ .carousel {
+ width: 600px;
+ height: 512px;
+ overflow-x: scroll;
+ scroll-snap-type: x mandatory;
+ list-style-type: none;
+ scroll-behavior: smooth;
+ border: solid 2px grey;
+ padding-left: 0px;
+ white-space: nowrap;
+ position: relative;
+
+ &>.item {
+ height: 80%;
+ width: 120px;
+ border: 1px solid;
+ place-content: center;
+ background-color: white;
+ margin-right: 1200px;
+ display: inline-block;
+
+ &::scroll-marker {
+ content: ' ';
+ width: 35px;
+ height: 35px;
+ border: 3px solid gray;
+ border-radius: 50%;
+ margin: 3px;
+ background-color:red;
+ }
+
+ &::scroll-marker:target-current {
+ background-color: green;
+ }
+ }
+
+ scroll-marker-group: after;
+ &::scroll-marker-group {
+ height: 45px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: solid 1px black;
+ border-radius: 30px;
+ }
+ }
+
+ </style>
+ <div id="wrapper" class="wrapper">
+ <div class="carousel" id="carousel">
+ <div class="item" id="item1" tabindex=0>1</div>
+ <div class="item" id="item2" tabindex=0>2</div>
+ </div>
+ </div>
+ <script>
+ RED = "rgb(255, 0, 0)";
+ GREEN = "rgb(0, 128, 0)";
+
+ promise_test(async (t) => {
+ await waitForCompositorCommit();
+ const items = carousel.querySelectorAll(".item");
+
+ assert_equals(carousel.scrollLeft, 0, "carousel is not scrolled");
+ verifySelectedMarker(0, items, GREEN, RED);
+
+ // Scroll a bit, but not enough to bring item2 into view. Item1 should
+ // still be selected.
+ let pos = item2.offsetLeft - carousel.clientWidth - 10;
+ await waitForScrollReset(t, carousel, pos);
+ verifySelectedMarker(0, items, GREEN, RED);
+
+ // Scroll a bit more; bring item2 into view but only into the second half
+ // of the scroll port. Item1 should still be selected.
+ pos = item2.offsetLeft - carousel.clientWidth + item2.offsetWidth;
+ await waitForScrollReset(t, carousel, pos);
+ verifySelectedMarker(0, items, GREEN, RED);
+
+ // Scroll to place item2 within the half a scroll port's width from the
+ // current scroll offset. Item2 should now be selected.
+ pos += carousel.clientWidth / 2;
+ await waitForScrollReset(t, carousel, pos);
+ verifySelectedMarker(1, items, GREEN, RED);
+ }, "target whose target position is not yet reached only get selected " +
+ "when its less than half a scroll port away.");
+ </script>
+</body>
+
+</html>
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 @@
<slot></slot>
</div>
`;
- 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');
</script>
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");
</script>
-
-<style>
- #t3 {
- width: calc(10px * sibling-index());
- height: 50px;
- background: teal;
- }
-</style>
-<div>
- <template shadowrootmode="open">
- <slot></slot>
- </template>
- <div id="rm3"></div>
- <div></div>
- <div></div>
- <div></div>
- <div></div>
- <div id="t3"></div>
-</div>
-<script>
- test(() => assert_equals(t3.offsetWidth, 60), "Initially 6th slotted sibling");
- test(() => {
- rm3.slot = "null";
- assert_equals(t3.offsetWidth, 50);
- }, "5th sibling after slot change");
-</script>
-
-<style>
- #t4 {
- width: 50px;
- height: calc(10px * sibling-count());
- background: teal;
- }
-</style>
-<div>
- <template shadowrootmode="open">
- <slot></slot>
- </template>
- <div id="t4"></div>
- <div></div>
- <div></div>
- <div></div>
- <div></div>
- <div id="rm4"></div>
-</div>
-<script>
- test(() => assert_equals(t4.offsetHeight, 60), "Initially 6 slotted siblings");
- test(() => {
- rm4.slot = "null";
- assert_equals(t4.offsetHeight, 50);
- }, "5 siblings after slot change");
-</script>
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 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <!-- TODO update link -->
+ <link rel="help" href="https://www.w3.org/TR/css-view-transitions-2/">
+ <title>Scoped element with name auto on descendant</title>
+</head>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ #container {
+ display: flex;
+ flex-direction: row;
+ position: relative;
+ /* Currently needed to force a stacking context in the absence of an
+ animation-name.
+ */
+ will-change: opacity;
+ }
+
+ .item {
+ background-color: teal;
+ color: white;
+ text-align: center;
+ line-height: 50px;
+ width: 50px;
+ height: 50px;
+ margin: 5px;
+ position: relative;
+ will-change: opacity;
+ view-transition-name: auto;
+ }
+
+ #item1.active {
+ background-color: orange;
+ transform: scale(1.2);
+ }
+
+ #item2.active {
+ background-color: salmon;
+ transform: scale(0.9);
+ }
+
+ #item3.active {
+ background-color: hotpink;
+ transform: scale(0.8) translateX(-10px);
+ }
+
+ ::view-transition-group(*) {
+ animation-duration: 2s;
+ }
+
+ ::view-transition-old(*) {
+ animation-name: -ua-view-transition-fade-out;
+ }
+
+ ::view-transition-new(*) {
+ animation-name: -ua-view-transition-fade-in;
+ }
+
+</style>
+<body>
+ <div id="container">
+ <div id="item1" class="item">A</div>
+ <div id="item2" class="item">B</div>
+ <div id="item3" class="item">C</div>
+ </div>
+</body>
+<script>
+ function assert_has_animations_with_name(name, count, message) {
+ const results =
+ document.getAnimations().filter(a => a.animationName == name);
+ assert_equals(results.length, count, message);
+ }
+
+ promise_test(async t => {
+ const element = document.getElementById("container");
+ const vt = element.startViewTransition(() => {
+ element.querySelectorAll('.item').forEach(el => {
+ el.classList.toggle('active');
+ });
+ });
+ await vt.ready;
+ const results =
+ document.getAnimations().map((a) => {
+ return `${a.effect.target.id}${a.effect.pseudoElement}`;
+ }).sort();
+ const expected = [
+ 'container::view-transition-group(match-element)',
+ 'container::view-transition-group(match-element)',
+ 'container::view-transition-group(match-element)',
+ 'container::view-transition-new(match-element)',
+ 'container::view-transition-new(match-element)',
+ 'container::view-transition-new(match-element)',
+ 'container::view-transition-old(match-element)',
+ 'container::view-transition-old(match-element)',
+ 'container::view-transition-old(match-element)',
+ ];
+
+ assert_array_equals(results, expected, 'Matched pseudo-elements');
+
+ assert_has_animations_with_name('-ua-view-transition-fade-in', 3,
+ 'Fade in animation');
+ assert_has_animations_with_name('-ua-view-transition-fade-out', 3,
+ 'Fade out animation');
+ }, 'Scoped view transition with name auto on the scoped element');
+</script>
+</html>
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 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <!-- TODO update link -->
+ <link rel="help" href="https://www.w3.org/TR/css-view-transitions-2/">
+ <title>Scoped element with name auto</title>
+</head>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ #container {
+ display: flex;
+ flex-direction: row;
+ view-transition-name: auto;
+ position: relative;
+ }
+
+ .item {
+ background-color: teal;
+ color: white;
+ text-align: center;
+ line-height: 50px;
+ width: 50px;
+ height: 50px;
+ margin: 5px;
+ display: inline-block;
+ }
+
+ ::view-transition-group(*) {
+ animation-duration: 2s;
+ }
+
+ ::view-transition-old(*) {
+ animation-name: -ua-view-transition-fade-out;
+ }
+
+ ::view-transition-new(*) {
+ animation-name: -ua-view-transition-fade-in;
+ }
+</style>
+<body>
+ <div id="container">
+ <div class="item">A</div>
+ <div class="item">B</div>
+ <div class="item">C</div>
+ </div>
+</body>
+<script>
+ function assert_has_animation_with_name(name, message) {
+ const results =
+ document.getAnimations().filter(a => a.animationName == name);
+ assert_equals(results.length, 1, message);
+ }
+
+ promise_test(async t => {
+ const element = document.getElementById("container");
+ const vt = element.startViewTransition(() => {
+ element.style.flexDirection = 'column';
+ });
+ await vt.ready;
+ const results =
+ document.getAnimations().map((a) => {
+ return `${a.effect.target.id}${a.effect.pseudoElement}`;
+ }).sort();
+ const expected = [
+ 'container::view-transition-group(match-element)',
+ 'container::view-transition-new(match-element)',
+ 'container::view-transition-old(match-element)',
+ ];
+
+ assert_array_equals(results, expected, 'Matched pseudo-elements');
+
+ assert_has_animation_with_name('-ua-view-transition-fade-in',
+ 'Fade in animation');
+ assert_has_animation_with_name('-ua-view-transition-fade-out',
+ 'Fade out animation');
+ }, 'Scoped view transition with name auto on the scoped element');
+</script>
+</html>
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 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <!-- TODO update link -->
+ <link rel="help" href="https://www.w3.org/TR/css-view-transitions-2/">
+ <title>Display none during transition</title>
+</head>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ #target {
+ background-color: teal;
+ height: 100px;
+ width: 100px;
+ position: relative;
+ view-transition-name: target;
+ }
+
+ .hidden {
+ display: none;
+ }
+
+ ::view-transition-group(*) {
+ animation: unset;
+ }
+
+ ::view-transition-old(target) {
+ animation: -ua-view-transition-fade-out 300s;
+ }
+
+ ::view-transition-new(target) {
+ animation: -ua-view-transition-fade-in 300s;
+ }
+
+</style>
+<body>
+ <div id="target")></div>
+</body>
+<script>
+ function animationsCanceledPromise() {
+ const animations = document.getAnimations();
+ const promises = animations.map(a => a.finished);
+ return new Promise(async (resolve) => {
+ const values = await Promise.allSettled(promises);
+ values.forEach((result) => {
+ assert_equals(result.status, 'rejected');
+ });
+ resolve();
+ });
+ }
+
+ promise_test(async t => {
+ const target = document.getElementById('target');
+ const vt = target.startViewTransition(() => {
+ target.style.backgroundColor = 'orange';
+ });
+ await vt.ready;
+ const animations = document.getAnimations();
+ assert_equals(animations.length, 2,
+ 'View transition has running animations');
+ // wait for all animations to start running before hiding target.
+ await Promise.all([...animations.map(a => a.ready)]);
+ target.classList.toggle('hidden');
+ // Verify that the finished promise is rejected for each of the started
+ // animations.
+ await animationsCanceledPromise();
+ // Verify finished promise is resolved even though the transition did not
+ // run to completion.
+ return vt.finished;
+ }, 'Display none during a view transition skips the transition.');
+</script>
+</html>
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 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <!-- TODO update link -->
+ <link rel="help" href="https://www.w3.org/TR/css-view-transitions-2/">
+ <title>startViewTransition on document.documentElement</title>
+ <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
+</head>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+ :root {
+ view-transition-name: none;
+ }
+ #target {
+ width: 100px;
+ height: 100px;
+ background: blue;
+ contain: paint;
+ view-transition-name: target;
+ }
+ #target.update-1 {
+ height: 150px;
+ }
+ #target.update-2 {
+ height: 200px;
+ }
+</style>
+
+<body>
+ <div id="target"></div>
+</body>
+<script>
+ function run_view_transtiion_test(scope1, scope2, message) {
+ promise_test(async t => {
+ let rejected_promise_tally = 0;
+ const target = document.getElementById("target");
+ assert_implements(document.startViewTransition,
+ "Missing document.startViewTransition");
+
+ const verifyAbortedTransition = (promise) => {
+ return promise.then(
+ () => { assert_not_reached('transition aborted') },
+ (reason) => {
+ assert_true(reason instanceof DOMException);
+ assert_equals(reason.code, DOMException.ABORT_ERR);
+ rejected_promise_tally++;
+ });
+ };
+
+ const vt1 = scope1.startViewTransition(() => {
+ target.className = 'update-1';
+ });
+ const vt2 = scope2.startViewTransition(() => {
+ assert_equals(target.className, 'update-1');
+ target.className = 'update-2';
+ });
+
+ await verifyAbortedTransition(vt1.ready);
+ await vt2.ready;
+
+ assert_equals(rejected_promise_tally, 1,
+ 'first transition is skipped');
+ const sizeTransformAnimations = document.getAnimations().filter(a => {
+ return 'height' in a.effect.getKeyframes()[0];
+ });
+ assert_equals(sizeTransformAnimations.length, 1);
+ const startingHeight =
+ sizeTransformAnimations[0].effect.getKeyframes()[0].height;
+
+ assert_equals(startingHeight, '150px',
+ 'Height change applied before capture');
+ }, message);
+ }
+
+ run_view_transtiion_test(
+ document, document.documentElement,
+ 'Synchronously starting a view transition on document.documentElement ' +
+ 'skips the previously active document view transition.');
+
+ run_view_transtiion_test(
+ document.documentElement, document,
+ 'Synchronously starting a view transition on document skips the ' +
+ 'previously active view transition on document.documentElement.');
+
+</script>
+</html>
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 @@
+<!DOCTYPE html>
+<html>
+<title>View transitions: use snapshot containing block for static position in iframe (ref)</title>
+<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/#snapshot-containing-block-concept/">
+
+<style>
+#inner {
+ width: 400px;
+ height: 200px;
+}
+</style>
+<iframe id="inner" srcdoc="
+ <style>
+ body {
+ height: 200vh;
+ background: limegreen;
+ overflow: hidden;
+ }
+ </style>
+ <body></body>
+"></iframe>
+
+<script>
+onload = () => {
+ inner.contentWindow.scrollTo(0, 100);
+};
+</script>
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 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: use snapshot containing block for static position in iframe</title>
+<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/#snapshot-containing-block-concept/">
+<link rel="match" href="snapshot-containing-block-static-iframe-ref.html">
+
+<script src="/common/reftest-wait.js"></script>
+<script src="/common/rendering-utils.js"></script>
+
+<style>
+#inner {
+ width: 400px;
+ height: 200px;
+}
+</style>
+<iframe id="inner" srcdoc="
+ <style>
+ body {
+ height: 200vh;
+ overflow: hidden;
+ }
+ ::view-transition {
+ position: static;
+ display: block;
+ width: 100%;
+ height: 100%;
+ background: limegreen;
+ }
+ ::view-transition-group(*),
+ ::view-transition-image-pair(*),
+ ::view-transition-old(*),
+ ::view-transition-new(*) {
+ animation-play-state: paused;
+ }
+
+ </style>
+ <body></body>
+"></iframe>
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+async function runTest() {
+ // Start the view transition at a scroll offset so that the snapshot
+ // containing block differs from the initial containing block.
+ inner.contentWindow.scrollTo(0, 100);
+ await waitForAtLeastOneFrame();
+
+ const contentDocument = inner.contentDocument;
+ let vt = inner.contentDocument.startViewTransition();
+ await vt.ready;
+ takeScreenshot();
+}
+
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
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 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<title>CSS will-change: 'will-change: view-transition-name' creates a stacking context dynamically</title>
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1962862">
+<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/#named-and-transitioning">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square-only.html">
+<style>
+div { width: 100px; height: 100px }
+#wc { background: red; position: relative; }
+#child { position: absolute; top: 0; left: 0; z-index: -1; background: green }
+</style>
+<p>Test passes if there is a filled green square.</p>
+<div id="wc">
+ <div id="child"></div>
+</div>
+<script>
+window.addEventListener("TestRendered", function() {
+ wc.style.viewTransitionName = "something";
+ document.documentElement.removeAttribute("class");
+});
+</script>
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 @@
<link rel="help" href="https://www.w3.org/TR/css-transitions-2/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+
+<style>
+::view-transition-group(*),
+::view-transition-image-pair(*),
+::view-transition-old(*),
+::view-transition-new(*) {
+ animation-play-state: paused;
+}
+</style>
<script>
test(() => {
diff --git a/tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html b/tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html
index 3c4ba37b26b..09e6e6cc1c9 100644
--- a/tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html
+++ b/tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition-before-ready.html
@@ -37,9 +37,11 @@ promise_test(async t => {
// Wait until the popup window is loaded to make sure the document we start
// the view transitions is the right one.
- await new Promise(resolve => {
- popup_win.addEventListener('load', resolve, { once: true });
- });
+ if (!popup_win.document || popup_win.document.readyState != 'complete') {
+ await new Promise(resolve => {
+ popup_win.addEventListener('load', resolve, { once: true });
+ });
+ }
if (popup_win.document.visibilityState == "hidden") {
await new Promise((resolve) => {
diff --git a/tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition.html b/tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition.html
index 8d61a3e3c53..966f23c0fdf 100644
--- a/tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition.html
+++ b/tests/wpt/tests/css/css-view-transitions/window-resize-aborts-transition.html
@@ -37,9 +37,11 @@ promise_test(async t => {
// Wait until the popup window is loaded to make sure the document we update
// below is the right one.
- await new Promise(resolve => {
- popupWin.addEventListener('load', resolve, { once: true });
- });
+ if (!popupWin.document || popupWin.document.readyState != 'complete') {
+ await new Promise(resolve => {
+ popupWin.addEventListener('load', resolve, { once: true });
+ });
+ }
let popupDoc = popupWin.document;
popupDoc.documentElement.innerHTML = `
diff --git a/tests/wpt/tests/css/css-writing-modes/orthogonal-dynamic-size-001.html b/tests/wpt/tests/css/css-writing-modes/orthogonal-dynamic-size-001.html
new file mode 100644
index 00000000000..add7f1fc2aa
--- /dev/null
+++ b/tests/wpt/tests/css/css-writing-modes/orthogonal-dynamic-size-001.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+
+<link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com" />
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1954866" />
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div id="container" style="width: 100px; height: 50px; background-color: red">
+ <div style="height: 100%; width: 100px; writing-mode: vertical-lr; background-color: green;">
+ </div>
+</div>
+
+<script>
+container.offsetHeight;
+container.style.height = "100px";
+</script>
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 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>
+ Test allow attribute with "digital-credentials-create" and
+ CredentialsContainer's .create() method
+ </title>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script>
+ const hostInfo = get_host_info();
+ const iframeDetails = [
+ {
+ policy: null,
+ crossOrigin: false,
+ expectIsAllowed: true,
+ },
+ {
+ policy: null,
+ crossOrigin: true,
+ expectIsAllowed: false,
+ },
+ {
+ policy: "digital-credentials-create",
+ crossOrigin: false,
+ expectIsAllowed: true,
+ },
+ {
+ policy: "digital-credentials-create",
+ crossOrigin: true,
+ expectIsAllowed: true,
+ },
+ {
+ policy: "digital-credentials-create *",
+ crossOrigin: false,
+ expectIsAllowed: true,
+ },
+ {
+ policy: "digital-credentials-create *",
+ crossOrigin: true,
+ expectIsAllowed: true,
+ },
+ {
+ policy: "digital-credentials-create 'none'",
+ crossOrigin: false,
+ expectIsAllowed: false,
+ },
+ {
+ policy: "digital-credentials-create 'none'",
+ crossOrigin: true,
+ expectIsAllowed: false,
+ },
+ {
+ policy: "digital-credentials-create 'self'",
+ crossOrigin: false,
+ expectIsAllowed: true,
+ },
+ {
+ policy: "digital-credentials-create 'self'",
+ crossOrigin: true,
+ expectIsAllowed: false,
+ },
+ {
+ policy: `digital-credentials-create ${hostInfo.HTTPS_REMOTE_ORIGIN}`,
+ crossOrigin: false,
+ expectIsAllowed: false,
+ },
+ {
+ policy: `digital-credentials-create ${hostInfo.HTTPS_REMOTE_ORIGIN}`,
+ crossOrigin: true,
+ expectIsAllowed: true,
+ },
+ ];
+
+ async function loadIframe({ policy, crossOrigin, expectIsAllowed }) {
+ const iframe = document.createElement("iframe");
+ if (policy !== null) {
+ iframe.allow = policy;
+ }
+
+ await new Promise((resolve) => {
+ iframe.onload = resolve;
+ iframe.src = new URL(
+ "/digital-credentials/support/iframe.html",
+ crossOrigin
+ ? hostInfo.HTTPS_REMOTE_ORIGIN
+ : location.origin
+ ).href;
+ iframe.dataset.expectIsAllowed = expectIsAllowed;
+ document.body.appendChild(iframe);
+ });
+ iframe.focus();
+ return iframe;
+ }
+
+ function runTests() {
+ for (const details of iframeDetails) {
+ promise_test(async (test) => {
+ const iframe = await loadIframe(details);
+ const { expectIsAllowed } = details;
+ const action = "create";
+ const options = {
+ digital: {
+ // Results in TypeError when allowed, NotAllowedError when disallowed
+ requests: [],
+ },
+ mediation: "required",
+ };
+ const { data } = await new Promise((resolve) => {
+ window.addEventListener("message", resolve, {
+ once: true,
+ });
+ iframe.contentWindow.postMessage(
+ { action, options, needsActivation: true },
+ "*"
+ );
+ });
+ const { name, message } = data;
+ const fullMessage = `${iframe.outerHTML} - ${message}`;
+ if (expectIsAllowed) {
+ assert_true(
+ name == "TypeError" || name == "NotAllowedError",
+ fullMessage
+ );
+ } else {
+ assert_equals(name, "NotAllowedError", fullMessage);
+ }
+ iframe.remove();
+ }, `With Create: Policy to use: ${details.policy}, is cross-origin: ${details.crossOrigin}, is allowed by policy: ${details.expectIsAllowed}`);
+ }
+ }
+ </script>
+ </head>
+ <body onload="runTests()"></body>
+</html>
diff --git a/tests/wpt/tests/digital-credentials/allow-attribute.https.html b/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}`);
}
}
</script>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/permissions-policy/resources/permissions-policy.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<body></body>
+<script type="module">
+ import { makeCreateOptions } from "/digital-credentials/support/helper.js";
+ const { HTTPS_REMOTE_ORIGIN } = get_host_info();
+ const same_origin_src =
+ "/permissions-policy/resources/digital-credentials-create.html";
+ const cross_origin_src = new URL(same_origin_src, HTTPS_REMOTE_ORIGIN).href;
+
+ promise_test(async (test) => {
+ await test_driver.bless("user activation");
+ await promise_rejects_dom(
+ test,
+ "NotAllowedError",
+ navigator.credentials.create(makeCreateOptions([]))
+ );
+ }, "Permissions-Policy header digital-credentials-create=() disallows the top-level document.");
+
+ promise_test(async (test) => {
+ await test_feature_availability({
+ feature_description: "Digital Credential API",
+ test,
+ src: same_origin_src,
+ expect_feature_available: expect_feature_unavailable_default,
+ is_promise_test: true,
+ needs_focus: true,
+ });
+ }, "Permissions-Policy header digital-credentials-create=() disallows same-origin iframes.");
+
+ promise_test(async (test) => {
+ await test_feature_availability({
+ feature_description: "Digital Credential API",
+ test,
+ src: cross_origin_src,
+ expect_feature_available: expect_feature_unavailable_default,
+ feature_name: "digital-credentials-create",
+ is_promise_test: true,
+ needs_focus: true,
+ });
+ }, "Permissions-Policy header digital-credentials-create=() cannot be overridden using the allow attribute.");
+
+</script>
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 @@
</body>
<script type="module">
- import { sendMessage, loadIframe } from "./support/helper.js";
+ import { makeCreateOptions, sendMessage, loadIframe } from "./support/helper.js";
const iframeSameOrigin = document.querySelector("iframe#same-origin");
const iframeCrossOrigin = document.querySelector("iframe#cross-origin");
@@ -31,83 +31,170 @@
});
promise_test(async (t) => {
- const result = await navigator.credentials.create();
- assert_equals(result, null);
- }, "navigator.credentials.create() frame just returns null.");
+ iframeSameOrigin.focus();
+ for (const global of [window, iframeSameOrigin.contentWindow]) {
+ await promise_rejects_dom(
+ t,
+ "NotSupportedError",
+ global.DOMException,
+ global.navigator.credentials.create()
+ );
- promise_test(async (t) => {
- const { contentWindow: iframeWindow } = iframeSameOrigin;
- const result = await iframeWindow.navigator.credentials.create();
- assert_equals(result, null);
- }, "navigator.credentials.create() same-origin iframe just returns null.");
+ await promise_rejects_dom(
+ t,
+ "NotSupportedError",
+ global.DOMException,
+ global.navigator.credentials.create({})
+ );
- promise_test(async (t) => {
- const result = await sendMessage(iframeCrossOrigin, {
- action: "create",
- });
- assert_equals(result, null);
- }, "navigator.credentials.create() cross-origin iframe results in null.");
+ await promise_rejects_dom(
+ t,
+ "NotSupportedError",
+ global.DOMException,
+ global.navigator.credentials.create({ x: "y" })
+ );
- promise_test(async () => {
- for (const mediation of mediations) {
- const result = await navigator.credentials.create({ mediation });
- assert_equals(result, null);
+ await promise_rejects_dom(
+ t,
+ "NotSupportedError",
+ global.DOMException,
+ global.navigator.credentials.create({ x: "y", y: "z" })
+ );
+
+ await promise_rejects_dom(
+ t,
+ "NotSupportedError",
+ global.DOMException,
+ global.navigator.credentials.create({ mediation: "required" })
+ );
+
+ const abortController = new AbortController();
+ const { signal } = abortController;
+
+ await promise_rejects_dom(
+ t,
+ "NotSupportedError",
+ global.DOMException,
+ global.navigator.credentials.create({ signal })
+ );
+
+ await promise_rejects_dom(
+ t,
+ "NotSupportedError",
+ global.DOMException,
+ global.navigator.credentials.create({ signal, mediation: "required" })
+ );
}
- }, "navigator.credentials.create() ignores mediations.");
+ }, "Calling navigator.credentials.create() without a digital member same origin.");
- promise_test(async () => {
- for (const mediation of mediations) {
- const result = await navigator.credentials.create({ mediation });
- assert_equals(result, null);
+ promise_test(async (t) => {
+ for (const request of [undefined, []]) {
+ const options = makeCreateOptions(request);
+ await test_driver.bless("user activation");
+ await promise_rejects_js(t, TypeError, navigator.credentials.create(options));
}
- }, "navigator.credentials.create() ignores mediations in same-origin iframe.");
+ }, "navigator.credentials.create() API rejects if there are no credential request.");
- promise_test(async () => {
- for (const mediation of mediations) {
+ promise_test(async (t) => {
+ iframeSameOrigin.focus();
+ const { contentWindow: iframeWindow } = iframeSameOrigin;
+ for (const request of [undefined, []]) {
+ const options = makeCreateOptions(request);
+ await test_driver.bless("user activation");
+ await promise_rejects_js(
+ t,
+ iframeWindow.TypeError,
+ iframeWindow.navigator.credentials.create(options)
+ );
+ }
+ }, "navigator.credentials.create() API rejects if there are no credential request for same-origin iframe.");
+
+ promise_test(async (t) => {
+ iframeCrossOrigin.focus();
+ for (const request of [undefined, []]) {
+ const options = makeCreateOptions(request);
const result = await sendMessage(iframeCrossOrigin, {
action: "create",
- request: { mediation },
+ options,
});
- assert_equals(result, null);
+ assert_equals(result.constructor, "TypeError");
}
- }, "navigator.credentials.create() ignores mediations in cross-origin iframe.");
+ }, "navigator.credentials.create() API rejects if there are no credential request in cross-origin iframe.");
promise_test(async (t) => {
const abortController = new AbortController();
const { signal } = abortController;
abortController.abort();
- await promise_rejects_dom(
- t,
- "AbortError",
- navigator.credentials.create({
- signal,
- })
- );
- }, "navigator.credentials.create() rejects if called with an aborted controller.");
+ for (const options of [{ signal }, { signal, ...makeCreateOptions([]) }]) {
+ await promise_rejects_dom(
+ t,
+ "AbortError",
+ navigator.credentials.create(options)
+ );
+ }
+ }, "navigator.credentials.create() promise is rejected if called with an aborted controller.");
promise_test(async (t) => {
+ iframeSameOrigin.focus();
const { contentWindow: iframeWindow } = iframeSameOrigin;
const abortController = new iframeWindow.AbortController();
const { signal } = abortController;
abortController.abort();
- await promise_rejects_dom(
+ for (const options of [{ signal }, { signal, ...makeCreateOptions([]) }]) {
+ await test_driver.bless("user activation");
+ await promise_rejects_dom(
+ t,
+ "AbortError",
+ iframeWindow.DOMException,
+ iframeWindow.navigator.credentials.create(options)
+ );
+ assert_true(
+ navigator.userActivation.isActive,
+ "User activation is still active."
+ );
+ }
+ }, "navigator.credentials.create() promise is rejected if called with an aborted controller in same-origin iframe.");
+
+ promise_test(async (t) => {
+ iframeCrossOrigin.focus();
+ for (const options of [undefined, {}, makeCreateOptions([])]) {
+ const result = await sendMessage(iframeCrossOrigin, {
+ abort: "before",
+ action: "create",
+ options,
+ });
+ assert_equals(result.constructor, "DOMException");
+ assert_equals(result.name, "AbortError");
+ }
+ }, "navigator.credentials.create() promise is rejected if called with an aborted signal in cross-origin iframe.");
+
+ promise_test(async (t) => {
+ const abortController = new AbortController();
+ const { signal } = abortController;
+ const options = makeCreateOptions("openid4vci");
+ options.signal = signal;
+ await test_driver.bless("user activation");
+ const promise = promise_rejects_dom(
t,
"AbortError",
- iframeWindow.DOMException,
- iframeWindow.navigator.credentials.create({
- signal,
- })
+ DOMException,
+ navigator.credentials.create(options)
);
- }, "navigator.credentials.create() rejects if called with an aborted controller in same-origin iframe.");
+ abortController.abort();
+ await promise;
+ }, "navigator.credentials.create() promise is rejected if abort controller is aborted after call to create().");
promise_test(async (t) => {
+ iframeCrossOrigin.focus();
const result = await sendMessage(iframeCrossOrigin, {
+ abort: "after",
action: "create",
- abort: "before",
+ needsActivation: true,
+ options: makeCreateOptions("openid4vci"),
});
assert_equals(result.constructor, "DOMException");
assert_equals(result.name, "AbortError");
- }, "navigator.credentials.create() rejects if called with an aborted controller in cross-origin iframe.");
+ }, "navigator.credentials.create() promise is rejected if abort controller is aborted after call to create() in cross-origin iframe.");
promise_test(async (t) => {
const abortController = new AbortController();
@@ -121,4 +208,13 @@
await promise_rejects_dom(t, "AbortError", requestPromise);
}
}, "Adding mediations together with abort signal respects the abort signal.");
+
+ promise_test(async (t) => {
+ /** @type sequence<CredentialMediationRequirement> */
+ const disallowedMediations = [ "conditional", "optional", "silent"];
+ for (const mediation of disallowedMediations) {
+ const options = makeCreateOptions("default", mediation);
+ await promise_rejects_js(t, TypeError, navigator.credentials.create(options));
+ }
+ }, "Mediation is required to create a DigitalCredential.");
</script>
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 @@
<script src="/common/get-host-info.sub.js"></script>
<body></body>
<script type="module">
- import { makeGetOptions } from "./support/helper.js";
+ import { makeGetOptions, makeCreateOptions } from "./support/helper.js";
const { HTTPS_REMOTE_ORIGIN } = get_host_info();
- const same_origin_src =
+ const get_same_origin_src =
"/permissions-policy/resources/digital-credentials-get.html";
- const cross_origin_src = new URL(same_origin_src, HTTPS_REMOTE_ORIGIN).href;
+ const get_cross_origin_src = new URL(get_same_origin_src, HTTPS_REMOTE_ORIGIN).href;
+
+ const create_same_origin_src =
+ "/permissions-policy/resources/digital-credentials-create.html";
+ const create_cross_origin_src = new URL(create_same_origin_src, HTTPS_REMOTE_ORIGIN).href;
promise_test(async (test) => {
await test_driver.bless("user activation");
@@ -25,7 +29,7 @@
await test_feature_availability({
feature_description: "Digital Credential API",
test,
- src: same_origin_src,
+ src: get_same_origin_src,
expect_feature_available: expect_feature_available_default,
is_promise_test: true,
});
@@ -33,10 +37,36 @@
await test_feature_availability({
feature_description: "Digital Credential API",
test,
- src: cross_origin_src,
+ src: get_cross_origin_src,
expect_feature_available: expect_feature_unavailable_default,
feature_name: "digital-credentials-get",
is_promise_test: true,
});
- }, "Permissions-Policy is by default 'self'.");
+ }, "Permissions-Policy is by default 'self' for get().");
+
+ promise_test(async (test) => {
+ await test_driver.bless("user activation");
+ await promise_rejects_js(
+ test,
+ TypeError,
+ navigator.credentials.create(makeCreateOptions([]))
+ );
+
+ await test_feature_availability({
+ feature_description: "Digital Credential API",
+ test,
+ src: create_same_origin_src,
+ expect_feature_available: expect_feature_available_default,
+ is_promise_test: true,
+ });
+
+ await test_feature_availability({
+ feature_description: "Digital Credential API",
+ test,
+ src: create_cross_origin_src,
+ expect_feature_available: expect_feature_unavailable_default,
+ feature_name: "digital-credentials-create",
+ is_promise_test: true,
+ });
+ }, "Permissions-Policy is by default 'self' for create().");
</script>
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 @@
<script type="module">
import { makeGetOptions } from "./support/helper.js";
const { HTTPS_REMOTE_ORIGIN } = get_host_info();
- const same_origin_src =
+ const get_same_origin_src =
"/permissions-policy/resources/digital-credentials-get.html";
- const cross_origin_src = new URL(same_origin_src, HTTPS_REMOTE_ORIGIN).href;
+ const get_cross_origin_src = new URL(get_same_origin_src, HTTPS_REMOTE_ORIGIN).href;
+
+ const create_same_origin_src =
+ "/permissions-policy/resources/digital-credentials-create.html";
+ const create_cross_origin_src = new URL(create_same_origin_src, HTTPS_REMOTE_ORIGIN).href;
promise_test(async (test) => {
await test_driver.bless("user activation");
@@ -27,7 +31,7 @@
await test_feature_availability({
feature_description: "Digital Credential API",
test,
- src: same_origin_src,
+ src: get_same_origin_src,
expect_feature_available: expect_feature_available_default,
is_promise_test: true,
needs_focus: true,
@@ -38,7 +42,7 @@
await test_feature_availability({
feature_description: "Digital Credential API",
test,
- src: cross_origin_src,
+ src: get_cross_origin_src,
expect_feature_available: expect_feature_unavailable_default,
is_promise_test: true,
needs_focus: true,
@@ -49,11 +53,54 @@
await test_feature_availability({
feature_description: "Digital Credential API",
test,
- src: cross_origin_src,
+ src: get_cross_origin_src,
expect_feature_available: expect_feature_unavailable_default,
feature_name: "digital-credentials-get",
is_promise_test: true,
needs_focus: true,
});
}, "Permissions-Policy header explicitly set to digital-credentials-get=(self) cannot be overridden by allow attribute.");
+
+ promise_test(async (test) => {
+ await test_driver.bless("user activation");
+ await promise_rejects_js(
+ test,
+ TypeError,
+ navigator.credentials.create(makeCreateOptions([]))
+ );
+ }, "Permissions-Policy header digital-credentials-create=(self) allows the top-level document.");
+
+ promise_test(async (test) => {
+ await test_feature_availability({
+ feature_description: "Digital Credential API",
+ test,
+ src: create_same_origin_src,
+ expect_feature_available: expect_feature_available_default,
+ is_promise_test: true,
+ needs_focus: true,
+ });
+ }, "Permissions-Policy header digital-credentials-create=(self) allows same-origin iframes.");
+
+ promise_test(async (test) => {
+ await test_feature_availability({
+ feature_description: "Digital Credential API",
+ test,
+ src: create_cross_origin_src,
+ expect_feature_available: expect_feature_unavailable_default,
+ is_promise_test: true,
+ needs_focus: true,
+ });
+ }, "Permissions-Policy header digital-credentials-create=(self) disallows cross-origin iframes.");
+
+ promise_test(async (test) => {
+ await test_feature_availability({
+ feature_description: "Digital Credential API",
+ test,
+ src: create_cross_origin_src,
+ expect_feature_available: expect_feature_unavailable_default,
+ feature_name: "digital-credentials-create",
+ is_promise_test: true,
+ needs_focus: true,
+ });
+ }, "Permissions-Policy header explicitly set to digital-credentials-create=(self) cannot be overridden by allow attribute.");
</script>
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
index c32f73aa309..c32f73aa309 100644
--- 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
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);
+function _makeOptionsInternal(requestsInputArray, mediation, requestMapping) {
+ const requests = [];
+ 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}`);
}
}
- if (!Array.isArray(requestsToUse) || !requestsToUse?.length) {
- return { digital: { requests: requestsToUse }, mediation };
+ 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}`);
}
- 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}`);
+
+ // 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}'`);
}
}
- return { digital: { requests }, mediation };
+
+ // 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,15 +133,39 @@ 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.
*
* @param {HTMLIFrameElement} iframe - The iframe element to send the message to.
diff --git a/tests/wpt/tests/digital-credentials/get-user-activation.https.html b/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 @@
<script src="support/helper.js" type="module"></script>
<body></body>
<script type="module">
- import { makeGetOptions } from "./support/helper.js";
+ import { makeGetOptions, makeCreateOptions } from "./support/helper.js";
promise_test(async (t) => {
assert_false(
@@ -35,4 +35,31 @@
"User activation should be consumed after navigator.credentials.get()."
);
}, "navigator.credentials.get() consumes user activation.");
+
+ promise_test(async (t) => {
+ assert_false(
+ navigator.userActivation.isActive,
+ "User activation should not be active"
+ );
+ const options = makeCreateOptions([]);
+ await promise_rejects_dom(
+ t,
+ "NotAllowedError",
+ navigator.credentials.create(options)
+ );
+ }, "navigator.credentials.create() calling the API without user activation should reject with NotAllowedError.");
+
+ promise_test(async (t) => {
+ await test_driver.bless();
+ assert_true(
+ navigator.userActivation.isActive,
+ "User activation should be active after test_driver.bless()."
+ );
+ const options = makeCreateOptions([]);
+ await promise_rejects_js(t, TypeError, navigator.credentials.create(options));
+ assert_false(
+ navigator.userActivation.isActive,
+ "User activation should be consumed after navigator.credentials.create()."
+ );
+ }, "navigator.credentials.create() consumes user activation.");
</script>
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 @@
<script>
let observedEntries = [];
const map = new Map();
- const events = ['pointerup'];
+ // keydown is being sent right after a pointerup to see if pointerup is present.
+ const events = ['pointerup', 'keydown'];
promise_test(async t => {
assert_implements(window.PerformanceEventTiming, 'Event Timing is not supported.');
@@ -23,9 +24,13 @@
const observerPromise = createPerformanceObserverPromise(['event'], callback, readyToResolve);
await interactAndObserve('orphan-pointerup', document.getElementById('testButtonId'), observerPromise);
- assert_equals(map.get('pointerup'), 0, 'Should have a trivial interactionId for orphan pointerup event.');
+
+ // This test passes when either:
+ // - There is no orphan pointerup triggered by the browser.
+ // - The orphan pointerup doesn't have an interactionId.
+ assert_true(!map.has('pointerup') || map.get('pointerup') === 0, 'Should either have no triggered orphan pointerup event or have a trivial interactionId for orphan pointerup event.');
}, "Event Timing: Orphan pointerup should not be measured as an interaction.");
</script>
-</html> \ No newline at end of file
+</html>
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 00000000000..0957a2fc973
--- /dev/null
+++ b/tests/wpt/tests/fonts/math/css-units.woff
Binary files differ
diff --git a/tests/wpt/tests/html/interaction/focus/tab-table-caption.html b/tests/wpt/tests/html/interaction/focus/tab-table-caption.html
new file mode 100644
index 00000000000..a26c8f0e7ed
--- /dev/null
+++ b/tests/wpt/tests/html/interaction/focus/tab-table-caption.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<meta charset="utf-8">
+<meta name="variant" content="?caption-side=top">
+<meta name="variant" content="?caption-side=bottom">
+<title>Tab navigation around table with caption</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script>
+ "use strict";
+
+ const searchParams = new URLSearchParams(document.location.search);
+ const captionSide = searchParams.get("caption-side");
+
+ addEventListener("DOMContentLoaded", () => {
+ document.querySelector("table").style.captionSide = captionSide;
+ const tabKey = "\uE004";
+ const shiftKey = "\uE008";
+ const firstTabbable = document.querySelector("body > span");
+ const lastTabbable = document.querySelector("table ~ span");
+ const tabbableInCaption = document.querySelector("caption > span");
+ const tabbableInCell = document.querySelector("td > span");
+ for (const data of [
+ {init: firstTabbable, prev: null, next: tabbableInCell },
+ {init: tabbableInCaption, prev: tabbableInCell, next: lastTabbable },
+ {init: tabbableInCell, prev: firstTabbable, next: tabbableInCaption },
+ {init: lastTabbable, prev: tabbableInCaption, next: null},
+ ]) {
+ if (data.prev) {
+ promise_test(async () => {
+ data.init.focus();
+ await new test_driver.Actions().keyDown(shiftKey).keyDown(tabKey).keyUp(tabKey).keyUp(shiftKey).send();
+ assert_equals(document.activeElement, data.prev);
+ }, `Shift+Tab on ${data.init.outerHTML} should move focus to ${data.prev.outerHTML}`);
+ }
+ if (data.next) {
+ promise_test(async () => {
+ data.init.focus();
+ await new test_driver.Actions().keyDown(tabKey).keyUp(tabKey).send();
+ assert_equals(document.activeElement, data.next);
+ }, `Tab on ${data.init.outerHTML} should move focus to ${data.next.outerHTML}`);
+ }
+ }
+ });
+</script>
+<span tabindex="0">First tabbable span</span>
+<table>
+ <tbody>
+ <tr>
+ <td><span tabindex="0">Tabbable in cell<span></td>
+ </tr>
+ </tbody>
+ <caption><span tabindex="0">Tabbable in caption</span></caption>
+</table>
+<span tabindex="0">Last tabbable span</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 {
<option class=disabled disabled>disabled</option>
</select>
+<button id=aftersize>button after size=4</button>
+
+<select multiple disabled>
+ <option>one</option>
+ <option>two</option>
+</select>
+
+<button id=afterdisabled>button after select disabled</button>
+
<script>
const tabKey = '\uE004';
const enterKey = '\uE007';
@@ -111,6 +120,10 @@ promise_test(async () => {
'One option should be selected after arrow up.');
assert_equals(select.selectedOptions[0], optionOne,
'First option should stay selected after arrow up.');
+
+ await pressKey(tabKey);
+ assert_equals(document.activeElement, beforesize,
+ 'Pressing tab key should focus the next element after <select>.');
}, 'Keyboard behavior for base appearance <select multiple>');
promise_test(async () => {
@@ -174,6 +187,14 @@ promise_test(async () => {
'First option should be focused after arrow up.');
assert_equals(select.selectedOptions.length, 0,
'No options should be selected after arrow up.');
+
+ await pressKey(tabKey);
+ assert_equals(document.activeElement, aftersize,
+ 'Pressing tab should focus the next element after <select>.');
+
+ await pressKey(tabKey);
+ assert_equals(document.activeElement, afterdisabled,
+ 'Pressing tab key should skip over <select disabled>.');
}, 'Keyboard behavior for base appearance <select size=4>');
promise_test(async () => {
diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html
index cc6596b42fe..0c6972bcab5 100644
--- a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html
+++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-parsing.tentative.html
@@ -96,6 +96,14 @@
<textarea></textarea>
</select>
+<select class=test
+ data-description='Input tags should parse inside select if nested in another tag'
+ data-expect='<div><input></div>'>
+ <div>
+ <input>
+ </div>
+</select>
+
<div id=afterlast>
keep this div after the last test case
</div>
diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-bounds-clicking.html b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-bounds-clicking.html
new file mode 100644
index 00000000000..584d4b30644
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-bounds-clicking.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="timeout" content="long">
+<link rel="author" href="mailto:wpt@keithcirkel.co.uk">
+<link rel=help href="https://html.spec.whatwg.org/multipage/interactive-elements.html#dialog-light-dismiss">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<dialog id="dialog">
+ <div id="box"></div>
+</dialog>
+
+<style>
+ dialog { inset: 0 auto auto 0; width: 100px; height: 100px; overflow: visible; }
+ #box { height:200px; width:200px; margin:20px; background:blue; }
+</style>
+
+<script>
+for (const method of ['show', 'showModal']) {
+ promise_test(async (t) => {
+ dialog.setAttribute('closedby','any');
+ dialog[method]();
+ const actions = new test_driver.Actions();
+ await actions.pointerMove(1, 1, {origin:"viewport"})
+ .pointerDown()
+ .pointerUp()
+ .send();
+ assert_true(dialog.open, "Dialog should be open after clicking 1px-1px");
+ },`Dialog ${method} will not light dismiss if clicked inside of the dialog bounds`);
+
+ promise_test(async (t) => {
+ dialog.setAttribute('closedby','any');
+ dialog[method]();
+ const actions = new test_driver.Actions();
+ await actions.pointerMove(99, 99, {origin:"viewport"})
+ .pointerDown()
+ .pointerUp()
+ .send();
+ assert_true(dialog.open, "Dialog should be open after clicking 99px-99px");
+ },`Dialog ${method} will not light dismiss if clicked inside of the dialog bounds (bottom right)`);
+
+ promise_test(async (t) => {
+ dialog.setAttribute('closedby','any');
+ dialog[method]();
+ const actions = new test_driver.Actions();
+ await actions.pointerMove(150, 150, {origin:"viewport"})
+ .pointerDown()
+ .pointerUp()
+ .send();
+ assert_true(dialog.open, "Dialog should be open after clicking 150px-150px");
+ },`Dialog ${method} will not light dismiss if clicked inside the overflowing div bounds (center)`);
+
+ promise_test(async (t) => {
+ dialog.setAttribute('closedby','any');
+ dialog[method]();
+ const actions = new test_driver.Actions();
+ await actions.pointerMove(199, 199, {origin:"viewport"})
+ .pointerDown()
+ .pointerUp()
+ .send();
+ assert_true(dialog.open, "Dialog should be open after clicking 199px-199px");
+ },`Dialog ${method} will not light dismiss if clicked inside the overflowing div bounds (bottom right)`);
+
+ promise_test(async (t) => {
+ dialog.setAttribute('closedby','any');
+ dialog[method]();
+ const actions = new test_driver.Actions();
+ await actions.pointerMove(250, 250, {origin:"viewport"})
+ .pointerDown()
+ .pointerUp()
+ .send();
+ assert_false(dialog.open, "Dialog should be closed after clicking 250px-250px");
+ },`Dialog ${method} light dismisses when clicked outside of the bounds of both the dialog and the div`);
+
+ promise_test(async (t) => {
+ dialog.setAttribute('closedby','any');
+ dialog[method]();
+ const actions = new test_driver.Actions();
+ await actions.pointerMove(150, 1, {origin:"viewport"})
+ .pointerDown()
+ .pointerUp()
+ .send();
+ assert_false(dialog.open, "Dialog should be closed after clicking 150px-1px");
+ },`Dialog ${method} light dismisses when clicked outside of the bounds of the dialog - where the Y direction is in-line with the div still`);
+
+ promise_test(async (t) => {
+ dialog.setAttribute('closedby','any');
+ dialog[method]();
+ const actions = new test_driver.Actions();
+ await actions.pointerMove(1, 150, {origin:"viewport"})
+ .pointerDown()
+ .pointerUp()
+ .send();
+ assert_false(dialog.open, "Dialog should be closed after clicking 1px-150px");
+ },`Dialog ${method} light dismisses when clicked outside of the bounds of the dialog - where the X direction is in-line with the div still`);
+}
+</script>
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 @@
<script>
const dialog = document.getElementById('dialog');
- async function openDialog(openMethod) {
+ function openDialog(openMethod) {
dialog.close();
if (!dialog.open) {
assert_false(dialog.matches(':open'),'Should be closed to start');
@@ -32,7 +32,6 @@
assert_unreached('Invalid open method');
}
}
- await waitForRender();
assert_true(dialog.open,'Should be open now');
assert_true(dialog.matches(':open'),'Should be open now (pseudo)');
}
@@ -122,18 +121,25 @@
const expectResponds = changeMethod.setup(openMethod,controller.signal) ?? true;
// Open the dialog
- await openDialog(openMethod);
+ openDialog(openMethod);
// Try hitting ESC
const ESC = '\uE00C';
+ const close_fired = new Promise(resolve => {
+ dialog.addEventListener('close', resolve, { once: true })
+ });
await test_driver.send_keys(document.documentElement,ESC);
- await waitForRender();
+ if (expectResponds) {
+ await close_fired;
+ } else {
+ await waitForRender();
+ }
const respondsToEsc = !dialog.open;
assert_equals(!dialog.matches(':open'),respondsToEsc,':open should match dialog.open');
dialog.close();
// Try clicking outside
- await openDialog(openMethod);
+ openDialog(openMethod);
await clickOn(outside);
const respondsToLightDismiss = !dialog.open;
assert_equals(!dialog.matches(':open'),respondsToLightDismiss,':open should match dialog.open');
diff --git a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.html b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.html
index 50d600219d2..b67bc80765a 100644
--- a/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.html
+++ b/tests/wpt/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby.html
@@ -29,7 +29,7 @@
<dialog data-behavior="auto"></dialog>
<script>
- async function openDialog(dialog,openMethod) {
+ function openDialog(dialog,openMethod) {
assert_false(dialog.open,'Should be closed to start');
assert_equals(dialog.matches(':open'),dialog.open,':open should match .open');
switch (openMethod) {
@@ -45,7 +45,6 @@
default:
assert_unreached('Invalid open method');
}
- await waitForRender();
assert_true(dialog.open,'Should be open now');
assert_equals(dialog.matches(':open'),dialog.open,':open should match .open');
}
@@ -99,22 +98,30 @@
assert_false(dialog.open,'setup');
assert_false(dialog.matches(':open'));
t.add_cleanup(() => dialog.close());
+ let expectations = getDefaultExpectations(dialog.dataset.behavior, openMethod);
// Open the dialog
- await openDialog(dialog,openMethod);
+ openDialog(dialog,openMethod);
assert_equals(dialog.matches(':modal'),openMethod === 'modal',':modal incorrect');
const closedByReflectionWhileOpen = dialog.closedBy;
// Try hitting ESC
const ESC = '\uE00C';
+ const close_fired = new Promise(resolve => {
+ dialog.addEventListener('close', resolve, { once: true })
+ });
await test_driver.send_keys(document.documentElement,ESC);
- await waitForRender();
+ if (expectations.respondsToEsc) {
+ await close_fired;
+ } else {
+ await waitForRender();
+ }
const respondsToEsc = !dialog.open;
assert_equals(!dialog.matches(':open'),respondsToEsc,':open should match dialog.open');
dialog.close();
// Try clicking outside
- await openDialog(dialog,openMethod);
+ openDialog(dialog,openMethod);
assert_equals(dialog.matches(':modal'),openMethod === 'modal',':modal incorrect');
await clickOn(outside);
const respondsToLightDismiss = !dialog.open;
@@ -122,7 +129,6 @@
dialog.close();
// See if expectations match
- let expectations = getDefaultExpectations(dialog.dataset.behavior, openMethod);
assert_equals(respondsToEsc,expectations.respondsToEsc,`Dialog ${expectations.respondsToEsc ? "should" : "should NOT"} respond to ESC`);
assert_equals(respondsToLightDismiss,expectations.respondsToLightDismiss,`Dialog ${expectations.respondsToLightDismiss ? "should" : "should NOT"} respond to light dismiss`);
assert_equals(closedByReflectionWhileOpen,expectations.expectedReflectionWhileOpen,'Reflection should be limited to known values (open)');
diff --git a/tests/wpt/tests/mathml/relations/css-styling/lengths-1-ref.html b/tests/wpt/tests/mathml/relations/css-styling/lengths-1-ref.html
index 9fca6f49632..74c1397ce62 100644
--- a/tests/wpt/tests/mathml/relations/css-styling/lengths-1-ref.html
+++ b/tests/wpt/tests/mathml/relations/css-styling/lengths-1-ref.html
@@ -3,11 +3,16 @@
<head>
<meta charset="utf-8"/>
<title>MathML lengths (reference)</title>
+<style>
+ html {
+ line-height: 17px;
+ }
+</style>
</head>
<body>
<p>Test passes if there is a green square and no red.</p>
<div>
- <div id="red" style="position: absolute; width: 200px; height: 200px; background: green;">
+ <div id="red" style="position: absolute; width: 340px; height: 340px; background: green;">
</div>
</div>
</body>
diff --git a/tests/wpt/tests/mathml/relations/css-styling/lengths-1.html b/tests/wpt/tests/mathml/relations/css-styling/lengths-1.html
index 896f08d1119..224bedc1efc 100644
--- a/tests/wpt/tests/mathml/relations/css-styling/lengths-1.html
+++ b/tests/wpt/tests/mathml/relations/css-styling/lengths-1.html
@@ -7,12 +7,13 @@
<link rel="help" href="https://w3c.github.io/mathml-core/#types-for-mathml-attribute-values">
<link rel="help" href="https://w3c.github.io/mathml-core/#legacy-mathml-style-attributes">
<link rel="help" href="https://w3c.github.io/mathml-core/#space-mspace">
+<link rel="help" href="https://www.w3.org/TR/css-values-4/#relative-lengths">
<link rel="match" href="lengths-1-ref.html"/>
<meta name="assert" content="Verify whether the different units are accepted for MathML lengths.">
<style>
@font-face {
font-family: TestFont;
- src: url("/fonts/math/xheight500.woff");
+ src: url("/fonts/math/css-units.woff");
}
span, math {
font-family: TestFont;
@@ -29,12 +30,18 @@
#green > span {
background: green;
}
+ /* For lh and rlh. */
+ html {
+ line-height: 17px;
+ }
</style>
</head>
<body>
<p>Test passes if there is a green square and no red.</p>
+
+ <!-- Omitted units: vw, vh, vi, vb, vmin, vmax -->
<div>
- <div id="red" style="position: absolute; width: 200px; height: 200px; background: green;">
+ <div id="red" style="position: absolute; width: 340px; height: 340px; background: green;">
<!-- px -->
<span style="top: 0px"><math><mspace width="200px"/></math></span>
<span style="top: 10px; width: 200px"></span>
@@ -71,12 +78,40 @@
<span style="top: 160px"><math><mstyle mathsize="2000%"><mspace width="1em"/></mstyle></math></span>
<span style="top: 170px; width: 200px"></span>
+ <!-- q -->
+ <span style="top: 180px"><math><mspace width="203.2q"/></math></span>
+ <span style="top: 190px; width: 192px"></span>
+
+ <!-- ch -->
+ <span style="top: 200px"><math><mspace width="20ch"/></math></span>
+ <span style="top: 210px; width: 20ch"></span>
+
+ <!-- cap -->
+ <span style="top: 220px"><math><mspace width="30cap"/></math></span>
+ <span style="top: 230px; width: 30cap"></span>
+
+ <!-- ic -->
+ <span style="top: 240px"><math><mspace width="20ic"/></math></span>
+ <span style="top: 250px; width: 200px"></span>
+
+ <!-- rem -->
+ <span style="top: 260px"><math><mspace width="10rem"/></math></span>
+ <span style="top: 270px; width: 160px"></span>
+
+ <!-- lh -->
+ <span style="top: 280px"><math><mspace width="13lh" style="line-height: 15px;"/></math></span>
+ <span style="top: 290px; width: 195px"></span>
+
+ <!-- rlh -->
+ <span style="top: 300px"><math><mspace width="11rlh"/></math></span>
+ <span style="top: 310px; width: 187px"></span>
+
<!-- unitless nonzero values should be ignored -->
- <span style="top: 180px"><math><mstyle mathsize="20.0"><mspace width="1em"/></mstyle></math></span>
- <span style="top: 190px; width: 10px"></span>
+ <span style="top: 320px"><math><mstyle mathsize="20.0"><mspace width="1em"/></mstyle></math></span>
+ <span style="top: 330px; width: 10px"></span>
</div>
- <div id="green" style="position: absolute; width: 200px; height: 200px;">
+ <div id="green" style="position: absolute; width: 340px; height: 340px;">
<!-- px -->
<span style="top: 10px"><math><mspace width="200px"/></math></span>
<span style="top: 0px; width: 200px"></span>
@@ -113,9 +148,37 @@
<span style="top: 170px"><math><mstyle mathsize="2000%"><mspace width="1em"/></mstyle></math></span>
<span style="top: 160px; width: 200px"></span>
+ <!-- q -->
+ <span style="top: 190px"><math><mspace width="203.2q"/></math></span>
+ <span style="top: 180px; width: 192px"></span>
+
+ <!-- ch -->
+ <span style="top: 210px"><math><mspace width="20ch"/></math></span>
+ <span style="top: 200px; width: 20ch"></span>
+
+ <!-- cap -->
+ <span style="top: 230px"><math><mspace width="30cap"/></math></span>
+ <span style="top: 220px; width: 30cap"></span>
+
+ <!-- ic -->
+ <span style="top: 250px"><math><mspace width="20ic"/></math></span>
+ <span style="top: 240px; width: 200px"></span>
+
+ <!-- rem -->
+ <span style="top: 270px"><math><mspace width="10rem"/></math></span>
+ <span style="top: 260px; width: 160px"></span>
+
+ <!-- lh -->
+ <span style="top: 290px"><math><mspace width="13lh" style="line-height: 15px;"/></math></span>
+ <span style="top: 280px; width: 195px"></span>
+
+ <!-- rlh -->
+ <span style="top: 310px"><math><mspace width="11rlh"/></math></span>
+ <span style="top: 300px; width: 187px"></span>
+
<!-- unitless nonzero values should be ignored -->
- <span style="top: 190px"><math><mstyle mathsize="20.0"><mspace width="1em"/></mstyle></math></span>
- <span style="top: 180px; width: 10px"></span>
+ <span style="top: 330px"><math><mstyle mathsize="20.0"><mspace width="1em"/></mstyle></math></span>
+ <span style="top: 320px; width: 10px"></span>
</div>
</div>
</body>
diff --git a/tests/wpt/tests/mathml/relations/css-styling/lengths-2.html b/tests/wpt/tests/mathml/relations/css-styling/lengths-2.html
index 942611a8dad..af5cae13688 100644
--- a/tests/wpt/tests/mathml/relations/css-styling/lengths-2.html
+++ b/tests/wpt/tests/mathml/relations/css-styling/lengths-2.html
@@ -7,6 +7,7 @@
<link rel="help" href="https://w3c.github.io/mathml-core/#types-for-mathml-attribute-values">
<link rel="help" href="https://w3c.github.io/mathml-core/#legacy-mathml-style-attributes">
<link rel="help" href="https://w3c.github.io/mathml-core/#space-mspace">
+<link rel="help" href="https://www.w3.org/TR/css-values-4/#relative-lengths">
<meta name="assert" content="Verify various cases of the MathML length syntax.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@@ -15,14 +16,20 @@
<style>
@font-face {
font-family: TestFont;
- src: url("/fonts/math/xheight500.woff");
+ src: url("/fonts/math/css-units.woff");
}
math {
font-family: TestFont;
font-size: 10px;
}
+ /* For rlh. */
+ html {
+ line-height: 17px;
+ }
</style>
<script>
+ // Omitted units: vi, vb
+
var epsilon = .5;
function getBox(aId) {
@@ -44,6 +51,17 @@
assert_equals(getBox("unitPercentage").width, 60, "%");
assert_equals(getBox("unitPt").width, 96, "pt");
assert_equals(getBox("unitPx").width, 123, "px");
+ assert_equals(getBox("unitQ").width, 192, "q");
+ assert_equals(getBox("unitCh").width, 100, "ch");
+ assert_equals(getBox("unitCap").width, 140, "cap");
+ assert_equals(getBox("unitIc").width, 90, "ic");
+ assert_approx_equals(getBox("unitVw").width, window.innerWidth*0.35, epsilon, "vw");
+ assert_approx_equals(getBox("unitVh").width, window.innerHeight*0.54, epsilon, "vh");
+ assert_approx_equals(getBox("unitVmin").width, Math.min(window.innerWidth, window.innerHeight)*0.27, epsilon, "vmin");
+ assert_approx_equals(getBox("unitVmax").width, Math.max(window.innerWidth, window.innerHeight)*0.34, epsilon, "vmax");
+ assert_equals(getBox("unitRem").width, 128, "rem");
+ assert_equals(getBox("unitLh").width, 60, "lh");
+ assert_equals(getBox("unitRlh").width, 102, "rlh");
}, "Units");
test(function() {
@@ -57,6 +75,17 @@
assert_equals(getBox("spacePercentage").width, 60, "%");
assert_equals(getBox("spacePt").width, 96, "pt");
assert_equals(getBox("spacePx").width, 123, "px");
+ assert_equals(getBox("spaceQ").width, 192, "q");
+ assert_equals(getBox("spaceCh").width, 100, "ch");
+ assert_equals(getBox("spaceCap").width, 140, "cap");
+ assert_equals(getBox("spaceIc").width, 90, "ic");
+ assert_approx_equals(getBox("spaceVw").width, window.innerWidth*0.35, epsilon, "vw");
+ assert_approx_equals(getBox("spaceVh").width, window.innerHeight*0.54, epsilon, "vh");
+ assert_approx_equals(getBox("spaceVmin").width, Math.min(window.innerWidth, window.innerHeight)*0.27, epsilon, "vmin");
+ assert_approx_equals(getBox("spaceVmax").width, Math.max(window.innerWidth, window.innerHeight)*0.34, epsilon, "vmax");
+ assert_equals(getBox("spaceRem").width, 128, "rem");
+ assert_equals(getBox("spaceLh").width, 60, "lh");
+ assert_equals(getBox("spaceRlh").width, 102, "rlh");
}, "Trimming of space");
test(function() {
@@ -139,6 +168,19 @@
<mstyle mathsize="200%"><mspace id="unitPercentage" width="3em"/></mstyle>
<mspace id="unitPt" width="72pt"/>
<mspace id="unitPx" width="123px"/>
+ <mspace id="unitQ" width="203.2q"/>
+ <mspace id="unitCh" width="10ch"/>
+ <mspace id="unitCap" width="14ch"/>
+ <mspace id="unitIc" width="9ic"/>
+ <mspace id="unitVw" width="35vw"/>
+ <mspace id="unitVh" width="54vh"/>
+ <mspace id="unitVi" width="11vi"/>
+ <mspace id="unitVb" width="4vb"/>
+ <mspace id="unitVmin" width="27vmin"/>
+ <mspace id="unitVmax" width="34vmax"/>
+ <mspace id="unitRem" width="8rem" style="font-size: 3px;"/>
+ <mspace id="unitLh" width="5lh" style="line-height: 12px;"/>
+ <mspace id="unitRlh" width="6rlh" style="line-height: 12px;"/>
<mstyle mathsize="5"><mspace id="unitNone" width="3em"/></mstyle>
</math>
</p>
@@ -153,6 +195,19 @@
<mstyle mathsize="200%"><mspace id="spacePercentage" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;3em&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/></mstyle>
<mspace id="spacePt" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;72pt&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
<mspace id="spacePx" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;123px&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceQ" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;203.2q&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceCh" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;10ch&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceCap" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;14ch&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceIc" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;9ic&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceVw" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;35vw&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceVh" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;54vh&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceVi" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;11vi&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceVb" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;4vb&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceVmin" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;27vmin&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceVmax" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;34vmax&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;"/>
+ <mspace id="spaceRem" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;8rem&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;" style="font-size: 3px;"/>
+ <mspace id="spaceLh" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;5lh&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;" style="line-height: 12px;"/>
+ <mspace id="spaceRlh" width="&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;6rlh&#x20;&#x9;&#xA;&#xD;&#x20;&#x9;&#xA;&#xD;" style="line-height: 12px;"/>
</math>
</p>
<p>
diff --git a/tests/wpt/tests/mathml/relations/css-styling/lengths-vi-vb-units.html b/tests/wpt/tests/mathml/relations/css-styling/lengths-vi-vb-units.html
new file mode 100644
index 00000000000..a01fd13b98f
--- /dev/null
+++ b/tests/wpt/tests/mathml/relations/css-styling/lengths-vi-vb-units.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>MathML lengths (vi, vb)</title>
+<link rel="help" href="https://w3c.github.io/mathml-core/#css-styling">
+<link rel="help" href="https://w3c.github.io/mathml-core/#types-for-mathml-attribute-values">
+<link rel="help" href="https://www.w3.org/TR/css-values-4/#relative-lengths">
+<link rel="help" href="https://www.w3.org/TR/css-values-4/#viewport-relative-units">
+<meta name="assert" content="Verify that vi and vb correctly take this element's inline and block axes/writing mode into consideration in MathML.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mathml/support/feature-detection.js"></script>
+</head>
+<body>
+ <div id="log"></div>
+ <iframe id="iframe" width="800" height="500"></iframe>
+ <script>
+ const epsilon = 0.5;
+ const percent = 8;
+
+ const doc = document.querySelector("#iframe").contentDocument;
+ const win = document.querySelector("#iframe").contentWindow;
+ const vw = win.innerWidth*percent*0.01;
+ const vh = win.innerHeight*percent*0.01;
+ ["horizontal-tb", "vertical-rl"].forEach(wm => {
+ test(function(t) {
+ t.add_cleanup(() => { doc.body.innerHTML = ""; });
+ doc.body.innerHTML = `
+ <style>html { writing-mode: ${wm}; }</style>
+ <math>
+ <mspace id="unitVi" width="${percent}vi"/>
+ <mspace id="unitVb" width="${percent}vb"/>
+ </math>
+ `.trim();
+ const vi = doc.querySelector("#unitVi").getBoundingClientRect().width;
+ const vb = doc.querySelector("#unitVb").getBoundingClientRect().width;
+
+ if (wm === "horizontal-tb") {
+ assert_approx_equals(vi, vw, epsilon, "vi in horizontal writing modes");
+ assert_approx_equals(vb, vh, epsilon, "vb in horizontal writing modes");
+ } else if (wm === "vertical-rl") {
+ assert_approx_equals(vi, vh, epsilon, "vi in vertical writing modes");
+ assert_approx_equals(vb, vw, epsilon, "vb in vertical writing modes");
+ }
+ }, `vi/vb in ${wm} writing modes`);
+ });
+ </script>
+</body>
+</html>
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 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script type="module">
+ import { makeCreateOptions } from "/digital-credentials/support/helper.js";
+ const type = "availability-result";
+ async function notify() {
+ if (!navigator.userActivation.isActive) {
+ await test_driver.bless("user activation", null, window);
+ }
+ let enabled = undefined;
+ try {
+ await navigator.credentials.create(makeCreateOptions([]));
+ } catch (e) {
+ switch (e.name) {
+ case "NotAllowedError":
+ enabled = false;
+ break;
+ case "TypeError":
+ enabled = true;
+ break;
+ default:
+ throw e;
+ }
+ } finally {
+ window.parent.postMessage({ type, enabled }, "*");
+ }
+ }
+ test_driver.set_test_context(parent);
+ window.onload = notify;
+</script>
+<body>
+ <h1>Digital Credentials iframe</h1>
+</body>
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 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <script src="/html/resources/common.js"></script>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/wai-aria/scripts/aria-utils.js"></script>
+ <script src="resources/property-reflection-helper.js"></script>
+</head>
+<body>
+ <div id="host-container"></div>
+ <script>
+ function append_test_declaratively_with_invalid_ref_target(host_container, referenced_element_type) {
+ host_container.setHTMLUnsafe(`
+ <div id="host-id">
+ <template shadowrootmode="open" shadowrootreferencetarget="invalid">
+ <${referenced_element_type} id="target"></${referenced_element_type}>
+ </template>
+ </div>`);
+ const host = host_container.firstElementChild;
+ return host;
+ }
+
+ run_test_for_all_reflecting_properties(append_test_declaratively_with_invalid_ref_target, test_idl_setter, "");
+ </script>
+</body>
+</html>
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 @@
</script>
</body>
</html>
-
-
-
-
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 + ")");
</script>
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
@@ -689,9 +689,14 @@ 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();