aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/wpt/include.ini2
-rw-r--r--tests/wpt/meta/MANIFEST.json2469
-rw-r--r--tests/wpt/meta/content-security-policy/connect-src/connect-src-syncxmlhttprequest-redirect-to-blocked.sub.html.ini3
-rw-r--r--tests/wpt/meta/content-security-policy/connect-src/connect-src-xmlhttprequest-redirect-to-blocked.sub.html.ini3
-rw-r--r--tests/wpt/meta/content-security-policy/form-action/form-action-src-default-ignored.sub.html.ini3
-rw-r--r--tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.http.html.ini3
-rw-r--r--tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.https.html.ini3
-rw-r--r--tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.http.html.ini3
-rw-r--r--tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.https.html.ini3
-rw-r--r--tests/wpt/meta/content-security-policy/generic/wildcard-host-part.sub.window.js.ini2
-rw-r--r--tests/wpt/meta/content-security-policy/inside-worker/dedicatedworker-connect-src.html.ini3
-rw-r--r--tests/wpt/meta/content-security-policy/reporting/report-original-url.sub.html.ini7
-rw-r--r--tests/wpt/meta/content-security-policy/securitypolicyviolation/img-src-redirect.sub.html.ini3
-rw-r--r--tests/wpt/meta/css/CSS2/lists/list-style-applies-to-017.html.ini2
-rw-r--r--tests/wpt/meta/css/CSS2/lists/list-style-image-applies-to-017.html.ini2
-rw-r--r--tests/wpt/meta/css/CSS2/lists/list-style-type-applies-to-017.html.ini2
-rw-r--r--tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini3
-rw-r--r--tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html.ini6
-rw-r--r--tests/wpt/meta/css/css-conditional/container-queries/style-query-registered-custom-rem-change.html.ini3
-rw-r--r--tests/wpt/meta/css/css-gaps/grid/grid-gap-decorations-040.html.ini2
-rw-r--r--tests/wpt/meta/css/css-masking/clip-path/clip-path-shape-011.html.ini2
-rw-r--r--tests/wpt/meta/css/css-overflow/overflow-video.html.ini2
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/all-hosts.html.ini6
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini2
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/both-part-and-exportparts.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/complex-matching.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/double-forward.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/exportparts-different-scope.html.ini2
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/exportparts-multiple.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini12
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/grouping-with-disabled.html.ini12
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/host-part-001.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/host-part-002.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/host-part-nesting.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/idlharness.html.ini12
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/inner-host.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/interaction-with-nested-pseudo-class.html.ini2
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini18
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-change-exportparts-forward.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-forward.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector-forward.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/multiple-parts.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/multiple-scopes.html.ini27
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/part-mutation-pseudo.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/part-name-idl.html.ini12
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/part-nested-pseudo.html.ini2
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/precedence-part-vs-part.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini141
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini126
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/serialization.html.ini9
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/simple-forward-shorthand.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/simple-forward.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/simple-inline.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/simple.html.ini3
-rw-r--r--tests/wpt/meta/css/css-shadow-parts/style-sharing.html.ini3
-rw-r--r--tests/wpt/meta/css/css-sizing/responsive-iframe-cross-origin.sub.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-sizing/responsive-iframe.tentative.html.ini2
-rw-r--r--tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini2
-rw-r--r--tests/wpt/meta/css/css-text/text-autospace/text-autospace-vs-001.html.ini2
-rw-r--r--tests/wpt/meta/css/css-text/word-break/word-break-keep-all-u002d.html.ini2
-rw-r--r--tests/wpt/meta/css/css-values/if-conditionals.html.ini123
-rw-r--r--tests/wpt/meta/css/css-values/tree-counting/sibling-function-container-query-invalidation.html.ini12
-rw-r--r--tests/wpt/meta/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html.ini6
-rw-r--r--tests/wpt/meta/custom-elements/registries/idlharness.window.js.ini39
-rw-r--r--tests/wpt/meta/dom/ranges/Range-in-shadow-after-the-shadow-removed.html.ini14
-rw-r--r--tests/wpt/meta/domxpath/fn-lang.html.ini21
-rw-r--r--tests/wpt/meta/domxpath/node-sets.html.ini3
-rw-r--r--tests/wpt/meta/domxpath/text-html-attributes.html.ini9
-rw-r--r--tests/wpt/meta/domxpath/xml_xpath_runner.html.ini3072
-rw-r--r--tests/wpt/meta/fetch/content-encoding/br/bad-br-body.https.any.js.ini12
-rw-r--r--tests/wpt/meta/fetch/content-encoding/gzip/bad-gzip-body.any.js.ini6
-rw-r--r--tests/wpt/meta/fetch/content-encoding/zstd/bad-zstd-body.https.any.js.ini6
-rw-r--r--tests/wpt/meta/fetch/metadata/redirect/multiple-redirect-https-downgrade-upgrade.sub.html.ini3
-rw-r--r--tests/wpt/meta/fetch/nosniff/importscripts.html.ini4
-rw-r--r--tests/wpt/meta/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js.ini156
-rw-r--r--tests/wpt/meta/fetch/private-network-access/window-open-existing.tentative.https.window.js.ini72
-rw-r--r--tests/wpt/meta/focus/focus-contenteditable-element-in-iframe-scroll-into-view.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/009.html.ini3
-rw-r--r--tests/wpt/meta/html/browsers/history/the-history-interface/001.html.ini (renamed from tests/wpt/meta/webdriver/tests/classic/set_timeouts/set.py.ini)2
-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-colorSpaceConversion.html.ini1
-rw-r--r--tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini1
-rw-r--r--tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini1
-rw-r--r--tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-invalid-args.html.ini13
-rw-r--r--tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html.ini1
-rw-r--r--tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-premultiplyAlpha.html.ini1
-rw-r--r--tests/wpt/meta/html/dom/idlharness.https.html.ini12
-rw-r--r--tests/wpt/meta/html/dom/reflection-grouping.html.ini228
-rw-r--r--tests/wpt/meta/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html.ini2
-rw-r--r--tests/wpt/meta/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/permission-element/negative-offset-and-margin.tentative.html.ini12
-rw-r--r--tests/wpt/meta/html/semantics/permission-element/negative-offset.tentative.html.ini9
-rw-r--r--tests/wpt/meta/html/semantics/permission-element/permission-icon/icon-hidden-reftest.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/permission-element/permission-icon/icon-unique-per-type-reftest.html.ini2
-rw-r--r--tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/042.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/043.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/044.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/045.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/054.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/055.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/the-button-element/command-and-commandfor/source-attribute-retargeting.tentative.html.ini9
-rw-r--r--tests/wpt/meta/mixed-content/gen/top.http-rp/opt-in/video-tag.https.html.ini8
-rw-r--r--tests/wpt/meta/mixed-content/gen/top.meta/opt-in/video-tag.https.html.ini5
-rw-r--r--tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini12
-rw-r--r--tests/wpt/meta/preload/preload-error.sub.html.ini15
-rw-r--r--tests/wpt/meta/resize-observer/change-layout-in-error.html.ini3
-rw-r--r--tests/wpt/meta/resize-observer/zoom.html.ini3
-rw-r--r--tests/wpt/meta/trusted-types/block-text-node-insertion-into-script-element.html.ini9
-rw-r--r--tests/wpt/meta/trusted-types/block-text-node-insertion-into-svg-script-element.html.ini3
-rw-r--r--tests/wpt/meta/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html.ini3
-rw-r--r--tests/wpt/meta/uievents/legacy-domevents-tests/approved/domnodeinserted.html.ini4
-rw-r--r--tests/wpt/meta/urlpattern/urlpattern-generate.tentative.any.js.ini63
-rw-r--r--tests/wpt/meta/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini210
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/bubbling.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/events.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini31
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini78
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini4
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini52
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini51
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini30
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini84
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini18
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini5
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini13
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini261
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_dblclick.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini14
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini20
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini1
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_screenshot/iframe.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini3
-rw-r--r--tests/wpt/meta/websockets/stream/tentative/write.any.js.ini118
-rw-r--r--tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini2
-rw-r--r--tests/wpt/meta/workers/tentative/SharedWorker-extendedLifetime.html.ini3
-rw-r--r--tests/wpt/meta/xhr/abort-during-done.window.js.ini9
-rw-r--r--tests/wpt/meta/xhr/abort-during-headers-received.window.js.ini3
-rw-r--r--tests/wpt/meta/xhr/abort-during-loading.window.js.ini3
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json112
-rw-r--r--tests/wpt/mozilla/meta/css/input_placeholder.html.ini2
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-definite-width-ref.html15
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-definite-width.html14
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-empty-ref.html15
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-empty.html14
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-nonempty-placeholder-ref.html15
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-nonempty-placeholder.html14
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-overflow-ref.html15
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-overflow.html14
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-placeholder-overflow-ref.html15
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-placeholder-overflow.html14
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-placeholder-ref.html15
-rw-r--r--tests/wpt/mozilla/tests/appearance/input-text-placeholder.html14
-rw-r--r--tests/wpt/mozilla/tests/appearance/supports/input-text-ref.css27
-rw-r--r--tests/wpt/tests/client-hints/permissions-policy/WEB_FEATURES.yml6
-rw-r--r--tests/wpt/tests/container-timing/resources/container-timing-helpers.js16
-rw-r--r--tests/wpt/tests/container-timing/tentative/containertiming-with-child-ignore-and-child-img.html46
-rw-r--r--tests/wpt/tests/container-timing/tentative/containertiming-with-ignore-and-child-img.html45
-rw-r--r--tests/wpt/tests/container-timing/tentative/ignore-with-containertiming-and-child-img.html49
-rw-r--r--tests/wpt/tests/content-security-policy/default-src/default-src-sri_hash.sub.html5
-rw-r--r--tests/wpt/tests/content-security-policy/script-src/script-src-sri_hash.sub.html5
-rw-r--r--tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html5
-rw-r--r--tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers2
-rw-r--r--tests/wpt/tests/cookie-store/META.yml3
-rw-r--r--tests/wpt/tests/cookie-store/cookieStore_special_names.https.any.js36
-rw-r--r--tests/wpt/tests/cookie-store/encoding.https.any.js10
-rw-r--r--tests/wpt/tests/cookie-store/httponly_cookies.https.window.js13
-rw-r--r--tests/wpt/tests/cookie-store/resources/cookie-test-helpers.js10
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-applies-to-016.html13
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-applies-to-017.html11
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-001.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-002.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-003.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-004.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-005.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-006.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-007.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-008.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-009.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-010.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-012.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-013.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-014.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-015.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-016.html13
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-017.html11
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-ref-1.html13
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-ref-2.html12
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-001.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-002.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-003.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-004.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-005.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-006.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-007.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-008.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-009.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-010.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-012.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-013.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-014.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-015.xht3
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-016.html13
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-017.html11
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-1.html17
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-2.html12
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-3.html14
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-4.html15
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-5.html14
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-type-applies-to-016.html13
-rw-r--r--tests/wpt/tests/css/CSS2/lists/list-style-type-applies-to-017.html11
-rw-r--r--tests/wpt/tests/css/css-anchor-position/anchor-scope-basic.html12
-rw-r--r--tests/wpt/tests/css/css-anchor-position/chrome-420329041-crash.html13
-rw-r--r--tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-img-ref.html12
-rw-r--r--tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-img.html13
-rw-r--r--tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html2
-rw-r--r--tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html5
-rw-r--r--tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-shape.js115
-rw-r--r--tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-utils.js18
-rw-r--r--tests/wpt/tests/css/css-color-hdr/parsing.html2
-rw-r--r--tests/wpt/tests/css/css-conditional/container-queries/style-query-registered-custom-rem-change.html34
-rw-r--r--tests/wpt/tests/css/css-flexbox/flexbox_columns-ref.html10
-rw-r--r--tests/wpt/tests/css/css-flexbox/flexbox_columns.html27
-rw-r--r--tests/wpt/tests/css/css-forms/datetime-stacking-context-ref.html12
-rw-r--r--tests/wpt/tests/css/css-forms/datetime-stacking-context.html16
-rw-r--r--tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-040-ref.html88
-rw-r--r--tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-040.html35
-rw-r--r--tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-041-crash.html16
-rw-r--r--tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-042-ref.html28
-rw-r--r--tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-042.html36
-rw-r--r--tests/wpt/tests/css/css-grid/grid-items/grid-item-inline-contribution-004.html34
-rw-r--r--tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint-ranges.html109
-rw-r--r--tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint.html35
-rw-r--r--tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius-ref.html26
-rw-r--r--tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius.html29
-rw-r--r--tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape.html49
-rw-r--r--tests/wpt/tests/css/css-masking/clip-path/clip-path-shape-011.html27
-rw-r--r--tests/wpt/tests/css/css-masking/clip-path/reference/clip-path-shape-arc-ref.html25
-rw-r--r--tests/wpt/tests/css/css-masking/parsing/clip-path-shape-parsing.html6
-rw-r--r--tests/wpt/tests/css/css-multicol/column-height-009-ref.html2
-rw-r--r--tests/wpt/tests/css/css-multicol/crashtests/repeated-table-column.html17
-rw-r--r--tests/wpt/tests/css/css-multicol/parsing/column-rule-color-invalid.html1
-rw-r--r--tests/wpt/tests/css/css-multicol/parsing/column-rule-style-invalid.html1
-rw-r--r--tests/wpt/tests/css/css-multicol/parsing/column-rule-width-invalid.html1
-rw-r--r--tests/wpt/tests/css/css-position/overlay/WEB_FEATURES.yml3
-rw-r--r--tests/wpt/tests/css/css-sizing/contain-intrinsic-size/parsing/from-element.tentative.html18
-rw-r--r--tests/wpt/tests/css/css-sizing/image-max-width-and-height-behaves-as-auto.html25
-rw-r--r--tests/wpt/tests/css/css-sizing/resources/iframe-contents-unsized.html7
-rw-r--r--tests/wpt/tests/css/css-sizing/resources/iframe-contents.html8
-rw-r--r--tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin-no-match-element.sub.tentative.html12
-rw-r--r--tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin-not-embedded-sized.sub.tentative.html13
-rw-r--r--tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin.sub.tentative.html13
-rw-r--r--tests/wpt/tests/css/css-sizing/responsive-iframe-no-match-element.html12
-rw-r--r--tests/wpt/tests/css/css-sizing/responsive-iframe-not-embedded-sized.tentative.html13
-rw-r--r--tests/wpt/tests/css/css-sizing/responsive-iframe-ref.html10
-rw-r--r--tests/wpt/tests/css/css-sizing/responsive-iframe-unsized-ref.html10
-rw-r--r--tests/wpt/tests/css/css-sizing/responsive-iframe.tentative.html13
-rw-r--r--tests/wpt/tests/css/css-text/text-autospace/text-autospace-edit-001-ref.html15
-rw-r--r--tests/wpt/tests/css/css-text/text-autospace/text-autospace-edit-001.html35
-rw-r--r--tests/wpt/tests/css/css-text/text-autospace/text-autospace-vs-001-ref.html23
-rw-r--r--tests/wpt/tests/css/css-text/text-autospace/text-autospace-vs-001.html19
-rw-r--r--tests/wpt/tests/css/css-text/word-break/reference/word-break-keep-all-u002d-ref.html11
-rw-r--r--tests/wpt/tests/css/css-text/word-break/word-break-keep-all-u002d.html14
-rw-r--r--tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-style.html40
-rw-r--r--tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-width.html19
-rw-r--r--tests/wpt/tests/css/css-values/if-conditionals.html131
-rw-r--r--tests/wpt/tests/css/css-values/tree-counting/sibling-function-container-query-invalidation.html92
-rw-r--r--tests/wpt/tests/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html9
-rw-r--r--tests/wpt/tests/css/css-view-transitions/auto-name-from-id.html6
-rw-r--r--tests/wpt/tests/css/css-view-transitions/auto-name-get-animations.html18
-rw-r--r--tests/wpt/tests/css/css-view-transitions/inline-child-with-composited-filter-ref.html31
-rw-r--r--tests/wpt/tests/css/css-view-transitions/inline-child-with-composited-filter.html57
-rw-r--r--tests/wpt/tests/css/css-view-transitions/inline-with-offset-from-containing-block.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/navigation/resources/auto-name-from-id.html5
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html4
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css3
-rw-r--r--tests/wpt/tests/css/css-view-transitions/nested/rounded-border-clipper.html3
-rw-r--r--tests/wpt/tests/css/css-view-transitions/new-content-captures-different-size.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/pseudo-with-classes-view-transition-group.html5
-rw-r--r--tests/wpt/tests/css/css-view-transitions/scoped/crashtests/participating-scope.html25
-rw-r--r--tests/wpt/tests/css/css-view-transitions/scoped/nested-scope-ref.html2
-rw-r--r--tests/wpt/tests/css/css-view-transitions/scoped/nested-scope.html13
-rw-r--r--tests/wpt/tests/css/css-viewport/zoom/height.html12
-rw-r--r--tests/wpt/tests/css/css-viewport/zoom/inherited-length.html4
-rw-r--r--tests/wpt/tests/css/css-viewport/zoom/length-implicit-and-explicit-inheritance.html38
-rw-r--r--tests/wpt/tests/css/css-viewport/zoom/max-height.html12
-rw-r--r--tests/wpt/tests/css/css-viewport/zoom/max-width.html12
-rw-r--r--tests/wpt/tests/css/css-viewport/zoom/min-height.html12
-rw-r--r--tests/wpt/tests/css/css-viewport/zoom/min-width.html12
-rw-r--r--tests/wpt/tests/css/css-writing-modes/orthogonal-cell-001-ref.html32
-rw-r--r--tests/wpt/tests/css/css-writing-modes/orthogonal-cell-001.html38
-rw-r--r--tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html38
-rw-r--r--tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html4
-rw-r--r--tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html4
-rw-r--r--tests/wpt/tests/css/selectors/visited-nested-ref.html (renamed from tests/wpt/tests/css/visited-nested-ref.html)0
-rw-r--r--tests/wpt/tests/css/selectors/visited-nested.html (renamed from tests/wpt/tests/css/visited-nested.html)0
-rw-r--r--tests/wpt/tests/domxpath/fn-id.html47
-rw-r--r--tests/wpt/tests/editing/crashtests/indent-outdent-after-closing-editable-dialog-element.html31
-rw-r--r--tests/wpt/tests/editing/other/move-inserted-node-from-DOMNodeInserted-during-exec-command-insertHTML.html27
-rw-r--r--tests/wpt/tests/fetch/content-encoding/br/bad-br-body.https.any.js5
-rw-r--r--tests/wpt/tests/fetch/content-encoding/gzip/bad-gzip-body.any.js1
-rw-r--r--tests/wpt/tests/fetch/content-encoding/zstd/bad-zstd-body.https.any.js1
-rw-r--r--tests/wpt/tests/fetch/local-network-access/resources/fetch-private-http.html3
-rw-r--r--tests/wpt/tests/fetch/local-network-access/resources/fetch-public-http-wrong-address-space.html3
-rw-r--r--tests/wpt/tests/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js278
-rw-r--r--tests/wpt/tests/fetch/private-network-access/window-open-existing.tentative.https.window.js209
-rw-r--r--tests/wpt/tests/focus/focus-contenteditable-element-in-iframe-scroll-into-view.html74
-rw-r--r--tests/wpt/tests/html/editing/dnd/events/ua-shadow-contents-manual.html22
-rw-r--r--tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-ref.html20
-rw-r--r--tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade-ref.html17
-rw-r--r--tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade.html15
-rw-r--r--tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size.html13
-rw-r--r--tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-path-changes-svg.tentative.html24
-rw-r--r--tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach-svg.tentative.html4
-rw-r--r--tests/wpt/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html52
-rw-r--r--tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-highlight-crash.html15
-rw-r--r--tests/wpt/tests/html/semantics/permission-element/negative-offset-and-margin.tentative.html68
-rw-r--r--tests/wpt/tests/html/semantics/permission-element/negative-offset.tentative.html79
-rw-r--r--tests/wpt/tests/html/semantics/permission-element/no-focus.tentative.html37
-rw-r--r--tests/wpt/tests/html/semantics/permission-element/permission-icon/icon-hidden-reftest.html11
-rw-r--r--tests/wpt/tests/html/semantics/permission-element/permission-icon/icon-unique-per-type-reftest.html6
-rw-r--r--tests/wpt/tests/html/semantics/permission-element/permission-icon/standard-location-permission-element-ref.html4
-rw-r--r--tests/wpt/tests/html/semantics/popovers/popover-root-crash.html7
-rw-r--r--tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/042.html29
-rw-r--r--tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/043.html31
-rw-r--r--tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/044.html28
-rw-r--r--tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/045.html28
-rw-r--r--tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/054.html33
-rw-r--r--tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/055.html32
-rw-r--r--tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/invalid-content-type.any.js6
-rw-r--r--tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/valid-content-type.html10
-rw-r--r--tests/wpt/tests/html/semantics/the-button-element/command-and-commandfor/source-attribute-retargeting.tentative.html132
-rw-r--r--tests/wpt/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/WEB_FEATURES.yml4
-rw-r--r--tests/wpt/tests/interfaces/scoped-custom-elements-registry.idl38
-rw-r--r--tests/wpt/tests/layout-instability/WEB_FEATURES.yml3
-rw-r--r--tests/wpt/tests/lint.ignore1
-rw-r--r--tests/wpt/tests/network-error-logging/support/nel.sub.js19
-rw-r--r--tests/wpt/tests/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-mouse-event.tentative.html42
-rw-r--r--tests/wpt/tests/resize-observer/zoom.html55
-rw-r--r--tests/wpt/tests/resource-timing/content-encoding.https.html8
-rw-r--r--tests/wpt/tests/resources/testdriver-actions.js.headers2
-rw-r--r--tests/wpt/tests/scroll-animations/animation-trigger/animation-trigger-repeat.tentative.html20
-rw-r--r--tests/wpt/tests/shadow-dom/HighlightRegistry-highlightsFromPoint.html57
-rw-r--r--tests/wpt/tests/soft-navigation-heuristics/first-interaction-not-softnav.tentative.html69
-rw-r--r--tests/wpt/tests/soft-navigation-heuristics/innertext.tentative.html37
-rw-r--r--tests/wpt/tests/soft-navigation-heuristics/resources/soft-navigation-helper.js4
-rw-r--r--tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/dom.html30
-rw-r--r--tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/resources/other_window.html19
-rw-r--r--tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/window-open-cross-scheduling.html45
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/no-prefetch-for-post.https.html25
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html7
-rw-r--r--tests/wpt/tests/speculation-rules/prefetch/resources/post-navigation-handler.py10
-rw-r--r--tests/wpt/tests/speculation-rules/prerender/headers.https.html159
-rw-r--r--tests/wpt/tests/speculation-rules/prerender/resources/image-with-headers-stash.py45
-rw-r--r--tests/wpt/tests/svg/embedded/image-modify-href-4.svg30
-rw-r--r--tests/wpt/tests/tools/third_party_modified/mozlog/mozlog/handlers/base.py2
-rw-r--r--tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py3
-rw-r--r--tests/wpt/tests/tools/wptrunner/wptrunner/browsers/headless_shell.py8
-rw-r--r--tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servo.py6
-rw-r--r--tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servodriver.py6
-rw-r--r--tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py4
-rw-r--r--tests/wpt/tests/tools/wptrunner/wptrunner/testrunner.py8
-rw-r--r--tests/wpt/tests/trusted-types/block-text-node-insertion-into-script-element.html28
-rw-r--r--tests/wpt/tests/trusted-types/block-text-node-insertion-into-svg-script-element.html24
-rw-r--r--tests/wpt/tests/trusted-types/resources/block-text-node-insertion.js7
-rw-r--r--tests/wpt/tests/ua-client-hints/WEB_FEATURES.yml3
-rw-r--r--tests/wpt/tests/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html32
-rw-r--r--tests/wpt/tests/uievents/legacy-domevents-tests/approved/domnodeinserted.html26
-rw-r--r--tests/wpt/tests/urlpattern/resources/urlpattern-generate-test-data.json116
-rw-r--r--tests/wpt/tests/urlpattern/urlpattern-generate.tentative.any.js26
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/cumulative_sum.https.any.js145
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/linear.https.any.js469
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js694
-rw-r--r--tests/wpt/tests/webnn/conformance_tests/subgraph.https.any.js39
-rw-r--r--tests/wpt/tests/webrtc-encoded-transform/tentative/RTCEncodedAudioFrame-metadata.https.html53
-rw-r--r--tests/wpt/tests/webrtc/RTCConfiguration-iceServers.html26
-rw-r--r--tests/wpt/tests/websockets/stream/tentative/remote-close.any.js3
-rw-r--r--tests/wpt/tests/websockets/stream/tentative/write.any.js96
-rw-r--r--tests/wpt/tests/workers/WEB_FEATURES.yml6
-rw-r--r--tests/wpt/tests/workers/tentative/SharedWorker-extendedLifetime.html61
-rw-r--r--tests/wpt/tests/workers/tentative/resources/shared-worker-memory.js30
-rw-r--r--tests/wpt/webgl/meta/conformance/textures/misc/tex-video-using-tex-unit-non-zero.html.ini6
-rw-r--r--tests/wpt/webgl/meta/conformance/textures/misc/texture-srgb-upload.html.ini2
-rw-r--r--tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini72
424 files changed, 8261 insertions, 6705 deletions
diff --git a/tests/wpt/include.ini b/tests/wpt/include.ini
index 70a3408cb72..2f7cfcbab3f 100644
--- a/tests/wpt/include.ini
+++ b/tests/wpt/include.ini
@@ -92,8 +92,6 @@ skip: true
skip: true
[css-scrollbars]
skip: true
- [css-shadow-parts]
- skip: true
[css-shapes]
skip: true
[css-size-adjust]
diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json
index 3a7faebb345..8c88bd5d094 100644
--- a/tests/wpt/meta/MANIFEST.json
+++ b/tests/wpt/meta/MANIFEST.json
@@ -761,6 +761,13 @@
{}
]
],
+ "chrome-420329041-crash.html": [
+ "2b236a371e524da0ac5669ad7fc5f45259c089c5",
+ [
+ null,
+ {}
+ ]
+ ],
"grid-anchor-center-crash.html": [
"bab4eed6b66dfb846ef451f14ced6eb2a0867cc1",
[
@@ -2841,6 +2848,17 @@
]
]
},
+ "css-gaps": {
+ "grid": {
+ "grid-gap-decorations-041-crash.html": [
+ "be3e2280b5f52dcc60a4fe418ae67af3ec23da6b",
+ [
+ null,
+ {}
+ ]
+ ]
+ }
+ },
"css-grid": {
"abspos": {
"abspos-in-flexbox-in-grid-crash.html": [
@@ -3899,6 +3917,13 @@
{}
]
],
+ "repeated-table-column.html": [
+ "0d6a1accfd122c38180f8d20904a7e16a131dd41",
+ [
+ null,
+ {}
+ ]
+ ],
"repeated-table-footer-in-caption-nested-multicol.html": [
"d630abe8bbb1e752d3a7c559e4c49864233c44f9",
[
@@ -5953,6 +5978,13 @@
],
"scoped": {
"crashtests": {
+ "participating-scope.html": [
+ "26979e58458d0a27679f6aa079f38f71eddc03df",
+ [
+ null,
+ {}
+ ]
+ ],
"shadow-dom.html": [
"a2faafc1694e15f5c513655e57e320325bd4f45a",
[
@@ -6975,13 +7007,6 @@
{}
]
],
- "indent-outdent-after-closing-editable-dialog-element.html": [
- "7f73de048d714c99ce47ae4da61d7128e53216e8",
- [
- null,
- {}
- ]
- ],
"insert-image-with-joining-header-element-and-body.html": [
"cf5b2df225be06c833fea6d3bf2ceab6b1231018",
[
@@ -8178,6 +8203,13 @@
{}
]
],
+ "select-highlight-crash.html": [
+ "a45120a245984408b65b1e99f1cfba265dad78fc",
+ [
+ null,
+ {}
+ ]
+ ],
"select-listitems-crash.html": [
"cdda243877f1e3c699410dd67e25548880b868b9",
[
@@ -8462,6 +8494,13 @@
{}
]
],
+ "popover-root-crash.html": [
+ "86498607730f883920419ac4815dce128196d9f5",
+ [
+ null,
+ {}
+ ]
+ ],
"popover-undefined-remove-crash.html": [
"3c273ea6f344d179a3d010d20f0779b3721abb40",
[
@@ -23715,6 +23754,13 @@
null,
{}
]
+ ],
+ "ua-shadow-contents-manual.html": [
+ "23908ca927426be40895156d26b94fdbc40b090d",
+ [
+ null,
+ {}
+ ]
]
},
"images": {
@@ -68767,6 +68813,32 @@
{}
]
],
+ "list-style-applies-to-016.html": [
+ "71faf850c98ab9a7d8101f2eb23e01bef697c504",
+ [
+ null,
+ [
+ [
+ "/css/reference/single_square_list_marker.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-applies-to-017.html": [
+ "b5f06365bbe9ddb2749d1bb5bf7c0da4e1559abd",
+ [
+ null,
+ [
+ [
+ "/css/reference/single_square_list_marker.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"list-style-image-004.xht": [
"f16fdd9b9444fd8e909ca6bbb2b9233f013408e0",
[
@@ -68806,6 +68878,214 @@
{}
]
],
+ "list-style-image-applies-to-001.xht": [
+ "4f533018d84ed9761d14e2cc0f0431b8f517d8c9",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-002.xht": [
+ "1d0534742398aab18dcddcf9457b0beefcdee517",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-003.xht": [
+ "6753ebb2c6638d69cb4dd3b5169f0fe4d61f3d20",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-004.xht": [
+ "750db4a8f671d6487b509ce15640da159aa300b9",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-005.xht": [
+ "3becba1c96ac6b59d5bd5cd03408f36881fa0141",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-2.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-006.xht": [
+ "6a3f0685cd891def8ade4f0641d75be346409065",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-2.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-007.xht": [
+ "06e0a22520613caadaf9ca4442200c1c295e99e9",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-008.xht": [
+ "36e26233cc500aebd47690ca6340af295dd44397",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-009.xht": [
+ "26df20ea56f15c83a4a43337b348a6cffa469668",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-010.xht": [
+ "f8f0021ace68cf5cba0eedbb42144a14604479ac",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-012.xht": [
+ "9060209849ace281c91dbd6b757efcdf422bc307",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-013.xht": [
+ "72c20d870c59a7aa8e4a95830b37f3e4039b87a3",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-014.xht": [
+ "b0b5aa462b703949b2191a8c24690a8daaaed660",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-015.xht": [
+ "c18eb3dab46e62a0bf715500c022ac143bd5fe2f",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-016.html": [
+ "e79700053dcde5eb60b13ad7559f472c2fb7c299",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-image-applies-to-017.html": [
+ "bb20b720d327dbdf475fe28d3b229069f1322827",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-image-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"list-style-position-018.xht": [
"8c3f614beba4d25d1a11396e657499fed5f089b3",
[
@@ -68845,6 +69125,214 @@
{}
]
],
+ "list-style-position-applies-to-001.xht": [
+ "aa5bd87601f202131c3b5c3c13797c6d411d48bc",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-002.xht": [
+ "51667f2d5e497d7853d62b5b2bb3560577c1224d",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-003.xht": [
+ "d7725da936a5724502b26cc65678cc49ad1a485e",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-004.xht": [
+ "7806141d7f537c9626daab6216b74cc48ba5accf",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-005.xht": [
+ "97235df74ea91de60f3284b38e3243ac2d715c53",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-2.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-006.xht": [
+ "7253af46b8d5fac9fc35197dce7f2fe79b30f525",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-2.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-007.xht": [
+ "956fcb6f3b253ca936275f2ad7e02dcababd9ac2",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-008.xht": [
+ "df7c23e38678c20869a83fc49b98c72a528e2054",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-3.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-009.xht": [
+ "f981ec2c859db0c40dd0d75c0f95a39779f0d1d0",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-3.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-010.xht": [
+ "57881f8d80f0cea3d83d8f10efae284112268739",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-3.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-012.xht": [
+ "da9eebf3dcb2475728fda56e8d9a3f40c091ecc7",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-013.xht": [
+ "9237a8d2d748067baa30471cb223c094d28a3220",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-014.xht": [
+ "94847350c8f22d23c1214ff31bba35a83f0b46a1",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-1.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-015.xht": [
+ "49f2f09d09ce7cc1fca7360e95dafb0d11692798",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-4.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-016.html": [
+ "ea5b43d61129ab75e7f5f21ce95768df0467f147",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-3.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-position-applies-to-017.html": [
+ "71a2a037ed8a837c91a909709d16e1cc669ae00e",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/lists/list-style-position-applies-to-ref-5.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"list-style-type-applies-to-001.xht": [
"3b8c9d842df5163c020a4bf2bbb19bad33eb18a9",
[
@@ -69001,6 +69489,32 @@
{}
]
],
+ "list-style-type-applies-to-016.html": [
+ "407f426d48af04f02b73860641be6d23299d8aa9",
+ [
+ null,
+ [
+ [
+ "/css/reference/single_square_list_marker.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "list-style-type-applies-to-017.html": [
+ "29e450bcbc4b449009c89c6c69538e0d630481f6",
+ [
+ null,
+ [
+ [
+ "/css/reference/single_square_list_marker.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"reset-counter-001.xht": [
"e1654073beb97ab8a576de700a7fb57f9a4a704b",
[
@@ -136900,6 +137414,35 @@
}
]
],
+ "corner-shape-img.html": [
+ "82662d255623d387080bcc8be2e33570f0ed4c62",
+ [
+ null,
+ [
+ [
+ "/css/css-borders/tentative/corner-shape/corner-shape-img-ref.html",
+ "=="
+ ]
+ ],
+ {
+ "fuzzy": [
+ [
+ null,
+ [
+ [
+ 0,
+ 64
+ ],
+ [
+ 0,
+ 100
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ ],
"corner-shape-inset-shadow.html": [
"7a83caff70c08b74d5d6c2540684c49f8e893f72",
[
@@ -136988,7 +137531,7 @@
]
],
"corner-shape-render-fuzzy.html": [
- "12cd2546bf484282a8cab7163c610b5b88d0b9f8",
+ "2d4b56f831b91eb70fd44abc02000213664a480b",
[
"css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html?border-radius=30%&corner-shape=superellipse(-1.5)&box-shadow=10px%2010px%200%2010px%20black",
[
@@ -137250,10 +137793,10 @@
}
],
[
- "css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px&border-left-color=purple",
+ "css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px",
[
[
- "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px&border-left-color=purple",
+ "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px",
"=="
]
],
@@ -137485,7 +138028,7 @@
]
],
"corner-shape-render-precise.html": [
- "5293589222a3f2d918bdbfeecd11280f667578c2",
+ "4a0c575b3b7cef4cbfb1dea4efc53ec40e01ef13",
[
"css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?border-radius=50%&corner-shape=bevel&box-shadow=10px%2010px%200%2010px%20black",
[
@@ -137669,6 +138212,32 @@
}
],
[
+ "css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?corner-shape=notch&border-radius=30px&border-width=30px",
+ [
+ [
+ "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?corner-shape=notch&border-radius=30px&border-width=30px",
+ "=="
+ ]
+ ],
+ {
+ "fuzzy": [
+ [
+ null,
+ [
+ [
+ 0,
+ 180
+ ],
+ [
+ 0,
+ 350
+ ]
+ ]
+ ]
+ ]
+ }
+ ],
+ [
"css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?corner-shape=square&border-bottom-left-radius=5px",
[
[
@@ -137877,10 +138446,10 @@
}
],
[
- "css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?corner-top-left-shape=bevel&border-width=10px&border-color=black",
+ "css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?corner-top-left-shape=bevel&border-width=10px",
[
[
- "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?corner-top-left-shape=bevel&border-width=10px&border-color=black",
+ "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?corner-top-left-shape=bevel&border-width=10px",
"=="
]
],
@@ -138007,10 +138576,10 @@
}
],
[
- "css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?corner-top-right-shape=bevel&border-width=10px&border-color=black",
+ "css/css-borders/tentative/corner-shape/corner-shape-render-precise.html?corner-top-right-shape=bevel&border-width=10px",
[
[
- "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?corner-top-right-shape=bevel&border-width=10px&border-color=black",
+ "/css/css-borders/tentative/corner-shape/corner-shape-any-ref.html?corner-top-right-shape=bevel&border-width=10px",
"=="
]
],
@@ -176879,19 +177448,6 @@
{}
]
],
- "flexbox_columns.html": [
- "d39c2db55f2a144e5ab9efa713572bd27da72c07",
- [
- null,
- [
- [
- "/css/css-flexbox/flexbox_columns-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
"flexbox_direction-column-reverse.html": [
"8d2cd330e4c65c46a4ff2c8e36811c88c7bdc4e6",
[
@@ -186558,6 +187114,21 @@
]
]
},
+ "css-forms": {
+ "datetime-stacking-context.html": [
+ "4754cacf09d6cc1c9aaccbb760e32ca8991e6502",
+ [
+ null,
+ [
+ [
+ "/css/css-forms/datetime-stacking-context-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ]
+ },
"css-gaps": {
"agnostic": {
"gap-decorations-003.html": [
@@ -187383,6 +187954,32 @@
{}
]
],
+ "grid-gap-decorations-040.html": [
+ "4bab26db550308a111608e3b0af6d15735c6d041",
+ [
+ null,
+ [
+ [
+ "/css/css-gaps/grid/grid-gap-decorations-040-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "grid-gap-decorations-042.html": [
+ "5b2b4936980641296cf1c97f80b4bdbecd19ce2f",
+ [
+ null,
+ [
+ [
+ "/css/css-gaps/grid/grid-gap-decorations-042-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"grid-gap-decorations-38.html": [
"8b87bcd4860ac50a1c2f3de98cec9599bebb77a3",
[
@@ -192381,6 +192978,19 @@
{}
]
],
+ "grid-item-inline-contribution-004.html": [
+ "a4e3cd6f3a47d18efc2a27d1f1e410d5ef92cff5",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"grid-item-margins-and-writing-modes-001.html": [
"5209940a9699d6a108f815f81eb4d3b4527dcf79",
[
@@ -211752,6 +212362,37 @@
]
},
"css-masking": {
+ "animations": {
+ "clip-path-interpolation-shape-arc-direction-agnostic-radius.html": [
+ "aa91e1828a7841c4036f6c2d15639ebd2f1bf4e4",
+ [
+ null,
+ [
+ [
+ "/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius-ref.html",
+ "=="
+ ]
+ ],
+ {
+ "fuzzy": [
+ [
+ null,
+ [
+ [
+ 0,
+ 10
+ ],
+ [
+ 0,
+ 360
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ ]
+ },
"clip": {
"clip-absolute-positioned-001.html": [
"c5b0d9001c442012aea33142d47ca1a8d68e319e",
@@ -215146,6 +215787,35 @@
{}
]
],
+ "clip-path-shape-011.html": [
+ "fc1927591e086bf341fcd9fa87a86429e1862053",
+ [
+ null,
+ [
+ [
+ "/css/css-masking/clip-path/reference/clip-path-shape-arc-ref.html",
+ "=="
+ ]
+ ],
+ {
+ "fuzzy": [
+ [
+ null,
+ [
+ [
+ 0,
+ 64
+ ],
+ [
+ 0,
+ 128
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ ],
"clip-path-shape-foreignobject-non-zero-xy.html": [
"4e221f36e4cb7bc698f1929dcc09096114ab2693",
[
@@ -250746,6 +251416,19 @@
{}
]
],
+ "image-max-width-and-height-behaves-as-auto.html": [
+ "dcb00ba6a5cdcc1c310e26792172da0490b927c4",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"image-min-max-content-intrinsic-size-change-001.html": [
"b7c57bb7abe161bf66cdec988953ba1d2c0035ab",
[
@@ -251815,6 +252498,84 @@
{}
]
],
+ "responsive-iframe-cross-origin-no-match-element.sub.tentative.html": [
+ "08dda4e6b7660bdea83681b52fa15ae93ad32ceb",
+ [
+ null,
+ [
+ [
+ "/css/css-sizing/responsive-iframe-unsized-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "responsive-iframe-cross-origin-not-embedded-sized.sub.tentative.html": [
+ "d9b33973a04c7eb3f8a4756f4d15fda0970bae0d",
+ [
+ null,
+ [
+ [
+ "/css/css-sizing/responsive-iframe-unsized-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "responsive-iframe-cross-origin.sub.tentative.html": [
+ "22f6f1d1581af4bc515877dee2f8d119274817e3",
+ [
+ null,
+ [
+ [
+ "/css/css-sizing/responsive-iframe-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "responsive-iframe-no-match-element.html": [
+ "685eb60f123fb54066cca118ab5cb29cfcd89db9",
+ [
+ null,
+ [
+ [
+ "/css/css-sizing/responsive-iframe-unsized-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "responsive-iframe-not-embedded-sized.tentative.html": [
+ "0d1f91c5789afd8e9af69c2f19204dc0cae60bf3",
+ [
+ null,
+ [
+ [
+ "/css/css-sizing/responsive-iframe-unsized-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "responsive-iframe.tentative.html": [
+ "229cf01844968e7aa55c165b128435ea455a40d6",
+ [
+ null,
+ [
+ [
+ "/css/css-sizing/responsive-iframe-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"slice-intrinsic-size.html": [
"05ce6e46304adda6aab773147e8a32d2564680b6",
[
@@ -263486,6 +264247,19 @@
{}
]
],
+ "text-autospace-edit-001.html": [
+ "80c46f54d20ff9249a49d73e55b331a8368df4e1",
+ [
+ null,
+ [
+ [
+ "/css/css-text/text-autospace/text-autospace-edit-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"text-autospace-first-line-001.html": [
"0e0f848b062747e6cb36ec4899d2bbfff10fcb44",
[
@@ -263580,6 +264354,19 @@
],
{}
]
+ ],
+ "text-autospace-vs-001.html": [
+ "31c7bbf6073ffac1f614846c6c033cca7ff7d4b4",
+ [
+ null,
+ [
+ [
+ "/css/css-text/text-autospace/text-autospace-vs-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
]
},
"text-encoding": {
@@ -272836,6 +273623,19 @@
{}
]
],
+ "word-break-keep-all-u002d.html": [
+ "df3ebb3f22111f4935d3787674a18c7a833083c1",
+ [
+ null,
+ [
+ [
+ "/css/css-text/word-break/reference/word-break-keep-all-u002d-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"word-break-manual-001.html": [
"09d803b0fc1f75f2f253687c5c9dc3305d77616f",
[
@@ -306974,7 +307774,7 @@
]
],
"auto-name-from-id.html": [
- "d3430c93a1d2043146e7205c2734a2b8b19af2e0",
+ "20080d7623a9ce4880d7a065cf729f0f2b3470e1",
[
null,
[
@@ -307975,6 +308775,35 @@
}
]
],
+ "inline-child-with-composited-filter.html": [
+ "36ba9803e1edb2c87d8d3e57b5f2589d349df964",
+ [
+ null,
+ [
+ [
+ "/css/css-view-transitions/inline-child-with-filter-ref.html",
+ "=="
+ ]
+ ],
+ {
+ "fuzzy": [
+ [
+ null,
+ [
+ [
+ 0,
+ 2
+ ],
+ [
+ 0,
+ 2400
+ ]
+ ]
+ ]
+ ]
+ }
+ ]
+ ],
"inline-child-with-filter.html": [
"61f0f1f6a8c389cd7298c56d8c2e35c3f101027b",
[
@@ -308031,7 +308860,7 @@
]
],
"inline-with-offset-from-containing-block.html": [
- "31f8449ff630fe6844eb16b46e445ec840d550d8",
+ "77fb0570966e47909b7b9d06f1330adcd5233ac8",
[
null,
[
@@ -308051,7 +308880,7 @@
],
[
0,
- 1500
+ 1633
]
]
]
@@ -309600,7 +310429,7 @@
]
],
"nested-exit.tentative.html": [
- "83570762061638bd2a780922e45cf39da100d713",
+ "847058be2b4a1659fb4d512e0906b55fa96c4a38",
[
null,
[
@@ -309774,7 +310603,7 @@
]
],
"rounded-border-clipper.html": [
- "239bcdd791db41383dd66765269590d84627a0a3",
+ "098e5566585930a89378c5a8a6ede536fea9e124",
[
null,
[
@@ -309902,7 +310731,7 @@
]
],
"new-content-captures-different-size.html": [
- "eeb7347981daac829fd17d85ada19730fe22af32",
+ "0a754c651ffa2f0e7cbd957ab4ad2b8bb35f2cd2",
[
null,
[
@@ -309922,7 +310751,7 @@
],
[
0,
- 15000
+ 15393
]
]
]
@@ -311275,7 +312104,7 @@
]
],
"pseudo-with-classes-view-transition-group.html": [
- "f9fe20222589283591cee10fa33f88d8d47f15ad",
+ "14717728b15ec9023a1fdeb0dc41c639588d7fee",
[
null,
[
@@ -311438,7 +312267,7 @@
],
"scoped": {
"nested-scope.html": [
- "9fff44e5e732edd1946adf414a8f23668022edda",
+ "b9cc25c3338912ae91da453c20924dd5cc90e294",
[
null,
[
@@ -312471,6 +313300,19 @@
{}
]
],
+ "height.html": [
+ "f608765bcf1f60857bba1ab8a4db820e68577941",
+ [
+ null,
+ [
+ [
+ "/css/css-viewport/zoom/green-square-100px.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"iframe-zoom-nested.html": [
"9dc99a0fa55ea28e4a7e36ecd90166aef64771fb",
[
@@ -312511,7 +313353,7 @@
]
],
"inherited-length.html": [
- "d83111a43528b7f0cf08732084330a43148d998b",
+ "571b533d5d6fd81ba8a334fa23ed21a120daecc5",
[
null,
[
@@ -312575,6 +313417,58 @@
{}
]
],
+ "max-height.html": [
+ "6a0dcd826e245f82e76ee2bff177ff0270299701",
+ [
+ null,
+ [
+ [
+ "/css/css-viewport/zoom/green-square-100px.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "max-width.html": [
+ "b6d4139e30a9754eac02ad85c4348adacf793158",
+ [
+ null,
+ [
+ [
+ "/css/css-viewport/zoom/green-square-100px.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "min-height.html": [
+ "31a47d92b213baf1fe8ae3d88607b41e29a4c577",
+ [
+ null,
+ [
+ [
+ "/css/css-viewport/zoom/green-square-100px.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "min-width.html": [
+ "bd1cda23d3a3b0d0197c63ea536b2b5c85d2b66f",
+ [
+ null,
+ [
+ [
+ "/css/css-viewport/zoom/green-square-100px.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"relative-units-from-parent.html": [
"57df82b6f1c5b8cd9ef405cdc1097826de0e061f",
[
@@ -323706,6 +324600,19 @@
{}
]
],
+ "orthogonal-cell-001.html": [
+ "12e996ac902b138e53936f39f7c2237978f9a1ae",
+ [
+ null,
+ [
+ [
+ "/css/css-writing-modes/orthogonal-cell-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"orthogonal-child-with-border.html": [
"877cce5a710f5f5e613c02f581c216070fdd0f41",
[
@@ -339456,6 +340363,19 @@
{}
]
],
+ "visited-nested.html": [
+ "57220446c8688a3a12fcb36aeb00b904c901fd3d",
+ [
+ null,
+ [
+ [
+ "/css/selectors/visited-nested-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"xml-class-selector.xml": [
"5666c0065d6262e0ca3c586d145a67e7f9c2a3cf",
[
@@ -339469,20 +340389,7 @@
{}
]
]
- },
- "visited-nested.html": [
- "57220446c8688a3a12fcb36aeb00b904c901fd3d",
- [
- null,
- [
- [
- "/css/visited-nested-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ]
+ }
},
"custom-elements": {
"form-associated": {
@@ -351498,6 +352405,32 @@
{}
]
],
+ "size-with-color-or-noshade.html": [
+ "db1d583934e6df482cde846eda757e010e7d0310",
+ [
+ null,
+ [
+ [
+ "/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "size.html": [
+ "2162131b853ed77917ab373f4fb2c70c536e453c",
+ [
+ null,
+ [
+ [
+ "/html/rendering/non-replaced-elements/the-hr-element-0/size-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"width.html": [
"a436d2ae25a6b03f320bda066f32c374b84e0d92",
[
@@ -356825,6 +357758,34 @@
{}
]
],
+ "permission-icon": {
+ "icon-hidden-reftest.html": [
+ "79055da1badfc827e5cc02ed3be7db3842b49855",
+ [
+ null,
+ [
+ [
+ "/html/semantics/permission-element/permission-icon/standard-location-permission-element-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "icon-unique-per-type-reftest.html": [
+ "d51b1c4d398a42c8e59f047c0e457c533eae16ee",
+ [
+ null,
+ [
+ [
+ "/html/semantics/permission-element/permission-icon/standard-location-permission-element-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ]
+ },
"pseudo-elements-in-div.tentative.html": [
"24a2be07fabae34fd969fa89c233b2a209c0c08f",
[
@@ -364728,6 +365689,19 @@
{}
]
],
+ "image-modify-href-4.svg": [
+ "f7e550e5defb0b1eba85edad430b0cef760223e6",
+ [
+ null,
+ [
+ [
+ "/svg/embedded/reference/green-rect-100x100.svg",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"image-remove-href-1.svg": [
"f35fa08f561dc38363d5c83918ec789fbc523b60",
[
@@ -376553,6 +377527,10 @@
[]
],
"permissions-policy": {
+ "WEB_FEATURES.yml": [
+ "da7599308cc01a95696e952d02553df47ba3f6bf",
+ []
+ ],
"ch-ua-high-entropy-values-disabled-by-permissions-policy.https.sub.html.headers": [
"fcf474880843e220faff943f8946f83b514208a4",
[]
@@ -395794,7 +396772,7 @@
],
"resources": {
"container-timing-helpers.js": [
- "a80ad964fef311f55062631d5548a6d8f0eecb3f",
+ "8b3f21dff56f9cef78b8a7c4df785a5b366034e5",
[]
],
"square100.png": [
@@ -397312,7 +398290,7 @@
[]
],
"script-src-strict_dynamic_parser_inserted.html.headers": [
- "b7918c93323eff9db66ad26a73b78798d35e5f7b",
+ "9d0b3b93d44db43be7d19c34483bc1e63ef777a0",
[]
],
"script-src-strict_dynamic_parser_inserted_correct_nonce.html.headers": [
@@ -397723,7 +398701,7 @@
},
"cookie-store": {
"META.yml": [
- "68c30024552f526e2d34f42eb22416ac3b585114",
+ "4bbc6311bdceece7580ba9c38344081e0b4aba57",
[]
],
"README.md": [
@@ -397736,7 +398714,7 @@
[]
],
"cookie-test-helpers.js": [
- "8e23ff2c4225da41788542908fae6593860146ce",
+ "82ca135f88e423440c3c3fd2bb02df4ed39aa436",
[]
],
"cookie_helper.py": [
@@ -405046,6 +406024,14 @@
"e73b120d2b33e01f8eb6a65bacdaef86d4c69cf3",
[]
],
+ "list-style-image-applies-to-ref-1.html": [
+ "3895bcc91974c1f511fa5932c08c3080d16303a2",
+ []
+ ],
+ "list-style-image-applies-to-ref-2.html": [
+ "6d7a9d5b35e50d9c83948b2a4863e52cb824b2e6",
+ []
+ ],
"list-style-position-018-ref.xht": [
"f12226453602f4ffb50b72493d167ae66aea4d6f",
[]
@@ -405058,6 +406044,26 @@
"dd988a747101471b55e575922d77efcdf5594887",
[]
],
+ "list-style-position-applies-to-ref-1.html": [
+ "a879e21ba440ba9e850d06597f35f48c1b61a0b3",
+ []
+ ],
+ "list-style-position-applies-to-ref-2.html": [
+ "fc0fee30ab685f092ac36a3021f1cebeb0def1f0",
+ []
+ ],
+ "list-style-position-applies-to-ref-3.html": [
+ "6e1af0004c377e26cd93417ea735e56105252908",
+ []
+ ],
+ "list-style-position-applies-to-ref-4.html": [
+ "bb39e6b44acca5008811359a2ae9cb5e1b75f7ef",
+ []
+ ],
+ "list-style-position-applies-to-ref-5.html": [
+ "05012d42540a807ee3292b7ee653351ece676d37",
+ []
+ ],
"support": {
"1x1-green.png": [
"b98ca0ba0a03c580ac339e4a3653539cfa8edc71",
@@ -418479,6 +419485,10 @@
"1eb6cbd8df349f0a27b1575b8a77583c95b44a42",
[]
],
+ "corner-shape-img-ref.html": [
+ "565698f79ec3fe89a9078a2c6277b38f494dfd99",
+ []
+ ],
"corner-shape-inset-shadow-ref.html": [
"fa36c9d6ecc527fee37bb589c3c5194df1ff2291",
[]
@@ -418497,11 +419507,11 @@
],
"resources": {
"corner-shape.js": [
- "4757a43ad051f42a88ddefeba344bcea0b9a0149",
+ "c08a95c7d7511e84eb92015d13578e23ad2f2ec5",
[]
],
"corner-utils.js": [
- "ad3b235addff11e418d78e372b20c09a2ebd4a19",
+ "b6f329e82484f14f853c999dbd99a15771db1e8d",
[]
],
"resolve-corner-style.js": [
@@ -423743,10 +424753,6 @@
"3c8e1f475a337e111b7290465b67ede2b35ac4bb",
[]
],
- "flexbox_columns-ref.html": [
- "b8c7a22569882c3687441af49ed683dcc37634bd",
- []
- ],
"flexbox_direction-column-ref.html": [
"9b91d50345528741a8cf3d889bc8212282e678cb",
[]
@@ -432682,6 +433688,12 @@
]
}
},
+ "css-forms": {
+ "datetime-stacking-context-ref.html": [
+ "95bee383d2117d1c054e4706abfd130149d31fc8",
+ []
+ ]
+ },
"css-gaps": {
"agnostic": {
"gap-decorations-001-ref.html": [
@@ -432911,6 +433923,14 @@
"grid-gap-decorations-037-ref.html": [
"4a2ee5bd5c6fbdb25e5a70eac56a9b0bbac5d56f",
[]
+ ],
+ "grid-gap-decorations-040-ref.html": [
+ "2988cf534a969828f1e0b9756a8bf52747966ee8",
+ []
+ ],
+ "grid-gap-decorations-042-ref.html": [
+ "ed44f7a2de37d31d57391731b2b8d7f7886790ad",
+ []
]
},
"multicol": {
@@ -437413,6 +438433,10 @@
"WEB_FEATURES.yml": [
"758ef35275eeacc96b6e584f672f86c4b170e0e1",
[]
+ ],
+ "clip-path-interpolation-shape-arc-direction-agnostic-radius-ref.html": [
+ "2869d38a982b23d72ae49543d16d01bda6f28b21",
+ []
]
},
"clip": {
@@ -437823,6 +438847,10 @@
"b74e6abdd9e7c02adf5392f02854ee61f05bc38f",
[]
],
+ "clip-path-shape-arc-ref.html": [
+ "9cbe55de210580ce38096bf106493d10f33dc7cd",
+ []
+ ],
"clip-path-shape-control-points-ref.html": [
"ebcc87bcf6482b22974787ae80df052b0c67ee02",
[]
@@ -438436,7 +439464,7 @@
[]
],
"column-height-009-ref.html": [
- "034440ebd5c81be43f0d871d3adb276b2a735768",
+ "4696d79695bdd6a5901e4d0d00fffc4935438163",
[]
],
"column-pseudo-background-color-ref.html": [
@@ -441818,6 +442846,10 @@
]
},
"overlay": {
+ "WEB_FEATURES.yml": [
+ "a1a4402ee421efa24e9b02a2337c90812759a4e2",
+ []
+ ],
"green-ref.html": [
"bef7405e96f8181f88fb073ebd212b4af6382e33",
[]
@@ -445127,6 +446159,24 @@
"11afa34a654ec071c00971b11a2261ff95397904",
[]
],
+ "resources": {
+ "iframe-contents-unsized.html": [
+ "db1931a27d5a7ff84d30edf370688d0c33b139b9",
+ []
+ ],
+ "iframe-contents.html": [
+ "3b7406e1e4064bc0f9f829907bfe462c8b6d3891",
+ []
+ ]
+ },
+ "responsive-iframe-ref.html": [
+ "c446474f71a9e0f443ef7f57226a16a1d25f8444",
+ []
+ ],
+ "responsive-iframe-unsized-ref.html": [
+ "2fa633e086dceeb9e05063eb92783295351b4d44",
+ []
+ ],
"slice-intrinsic-size-ref.html": [
"ca4887af7a862b6629a579b306638263ca5192b3",
[]
@@ -448188,6 +449238,10 @@
"d26fae09b03fc19fc561abcc4ab4487b3be91b3f",
[]
],
+ "text-autospace-edit-001-ref.html": [
+ "ca95e197462730462dbd403871173d6b9873c3b0",
+ []
+ ],
"text-autospace-first-line-001-ref.html": [
"4adf09f200df40141453a89171fa1392740cfbd3",
[]
@@ -448219,6 +449273,10 @@
"text-autospace-vertical-upright-001-ref.html": [
"1c9caec112a3f9e132a8b612f748a23556a56de2",
[]
+ ],
+ "text-autospace-vs-001-ref.html": [
+ "b02b4f7a20deeffd4f72b8ed8aa5103e3e2e6518",
+ []
]
},
"text-encoding": {
@@ -449599,6 +450657,10 @@
"cbfd3476089a962634e21ead1122f105f3f58c92",
[]
],
+ "word-break-keep-all-u002d-ref.html": [
+ "4a6553cfe838e41c67f0ccaa9d7e04b6904a1e62",
+ []
+ ],
"word-break-manual-001-ref.html": [
"f51208ab95fd4aaa804684673f09acf1492ded4d",
[]
@@ -454721,6 +455783,10 @@
"bf99b25f76b176520715a245ef3abf01258fdc5a",
[]
],
+ "inline-child-with-composited-filter-ref.html": [
+ "9dd26f2c3b1afb49d60bedb5e721dcb1f193d423",
+ []
+ ],
"inline-child-with-filter-ref.html": [
"44a41f1bf93366e06f2eae0cbfcd4acb126d192f",
[]
@@ -454884,7 +455950,7 @@
[]
],
"auto-name-from-id.html": [
- "71ea52a273e3fca98440cdefc50c77c722663a21",
+ "dc2cf8fd29b2cf46e1c4c57aa2c34f6272a51b20",
[]
],
"chromium-paint-holding-timeout.html": [
@@ -454998,7 +456064,7 @@
],
"resources": {
"compute-common.css": [
- "20337ccce5f3387e7e70e6fb219544369b74aa06",
+ "d8f46179b40fd8d55b2bdc125a04cf26aadf0fba",
[]
],
"compute-test.js": [
@@ -455279,7 +456345,7 @@
[]
],
"nested-scope-ref.html": [
- "804741cd6db993392ba8785e8c87f9c16894af41",
+ "951c0928687dcd6edb32e8e3aa7307bf3d6b3923",
[]
]
},
@@ -456091,6 +457157,10 @@
"28f0e333282a714715f8e593ac810ff3704d029e",
[]
],
+ "orthogonal-cell-001-ref.html": [
+ "f50121ef16d240e2991a9626b1dfe4e72a893fb3",
+ []
+ ],
"orthogonal-containing-block-height-changes-ref.html": [
"b7d32e4dc27ba972345f6dc9be81b4079ed54574",
[]
@@ -460673,6 +461743,10 @@
"64300b13f4291f416eac17f70ff62e2febf604fe",
[]
],
+ "visited-nested-ref.html": [
+ "22f4ecf0d7bbcef307fd679ae0905f9b5318f690",
+ []
+ ],
"xml-class-selector-ref.xml": [
"6b44280737ab254649036ff50808b764bc87cc67",
[]
@@ -460923,11 +461997,7 @@
"e7775276038f307b7cdb0a75d19ee24f67619c2a",
[]
]
- },
- "visited-nested-ref.html": [
- "22f4ecf0d7bbcef307fd679ae0905f9b5318f690",
- []
- ]
+ }
},
"custom-elements": {
"META.yml": [
@@ -466607,7 +467677,7 @@
],
"resources": {
"fetch-private-http.html": [
- "e372d90b26a02bdfa0b9a34c9c8ad956b5d0cc02",
+ "517629b758e89d4e07f2278d0ae7cb1a45b19c17",
[]
],
"fetch-private.html": [
@@ -466615,7 +467685,7 @@
[]
],
"fetch-public-http-wrong-address-space.html": [
- "1d149d00cb351b9aaa4402b9b8b7d975d56a9acb",
+ "c15a87ff7b9206576710b5763a64ac6a9a704d71",
[]
],
"support.sub.js": [
@@ -479883,6 +480953,14 @@
"5cd35c83ada3470ad7a16d14a5028b01596bb60c",
[]
],
+ "size-ref.html": [
+ "03a21eb45737ef46247d8bdd61fe5ea0dcefef3e",
+ []
+ ],
+ "size-with-color-or-noshade-ref.html": [
+ "d6300e250d97d113e9ef358daa300de4bd593850",
+ []
+ ],
"width-ref.html": [
"71e7651c1ab6927f1be436ef8ff749f920924562",
[]
@@ -482744,6 +483822,12 @@
"8b48bb93febed1c7fd88f62fe747b3379b349e22",
[]
],
+ "permission-icon": {
+ "standard-location-permission-element-ref.html": [
+ "15ffe751c51b3f8caeaa8b93f1286a3950c9a815",
+ []
+ ]
+ },
"pseudo-elements-in-div-ref.html": [
"8e6267f9aa350333cef620d248dfce40b85b43e2",
[]
@@ -486210,7 +487294,7 @@
"system-state-and-capabilities": {
"the-navigator-object": {
"WEB_FEATURES.yml": [
- "a1af3e21a48f5941a078209963d1ae7bc379dd59",
+ "7a364e140958e3cea3be9fd13654afc504006664",
[]
],
"resources": {
@@ -488484,6 +489568,10 @@
"6f93db15a74e052913a277e5130226280a3f9311",
[]
],
+ "scoped-custom-elements-registry.idl": [
+ "46ca2d6b9c45805d8aa684af7fe91af6dd5d7919",
+ []
+ ],
"screen-capture.idl": [
"db9282ce0a57bb3b84ea45f5ed2d7e69bc3a8a32",
[]
@@ -489198,6 +490286,10 @@
"10c6aa36cecf918928298102d1934c2ff79d01f2",
[]
],
+ "WEB_FEATURES.yml": [
+ "335b072c1868c1817dbe7ed6c1901907aa8decbc",
+ []
+ ],
"resources": {
"slow-image.py": [
"d9f09b8bca78dd1e054fdfcb108fe9066a31db3b",
@@ -489214,7 +490306,7 @@
}
},
"lint.ignore": [
- "10b5dadba749857f16dc92f348fff31b4400dca3",
+ "60b0f65a6f43a560c5d86ffe937359d5c9717597",
[]
],
"loading": {
@@ -492288,7 +493380,7 @@
[]
],
"nel.sub.js": [
- "26ddd897c2fb72b3e48fe572bcfba745729ddfe1",
+ "f9dfec1dad8c774e2dc04ff7787edaab3554cc96",
[]
],
"no-policy-pass.png": [
@@ -497060,6 +498152,10 @@
"edb4759954d4c3829ddc0aa2ecac84ef7d241e37",
[]
],
+ "testdriver-actions.js.headers": [
+ "5e8f640c6659d176eaca4c71cc1798b7285540b7",
+ []
+ ],
"testdriver-vendor.js": [
"3e88403636396c439759705c751433b28e05f3ab",
[]
@@ -501328,13 +502424,23 @@
[]
],
"soft-navigation-helper.js": [
- "48e7b58d8d1a6a0f05a5c4e30efc3faca83eedaf",
+ "5860738225b8ed03a2063b1c2b9eef7884f33ee5",
[]
],
"soft-navigation-test-helper.js": [
"a572f55e66dbce825d399f61c4a2dfa34df9b4ca",
[]
]
+ },
+ "smoke": {
+ "tentative": {
+ "resources": {
+ "other_window.html": [
+ "406d39c3691853a03731287b2a02f215dcbf721c",
+ []
+ ]
+ }
+ }
}
},
"speculation-rules": {
@@ -501383,13 +502489,17 @@
[]
],
"executor.sub.html": [
- "bb2d58dc9c9cfac6d98380b0b587bc242fbd5e11",
+ "b89c45e4f5c25b274925afd6569d6384d5183fe4",
[]
],
"executor.sub.html.headers": [
"4030ea1d3ddb186a2b5361eb1a3f2404a45531fc",
[]
],
+ "post-navigation-handler.py": [
+ "1749517710ed19eda399f01321e1ffcedfc9b09b",
+ []
+ ],
"prefetch.py": [
"14ac4d1699ea0c52ac4b40f0a4a0f71c99147073",
[]
@@ -501610,6 +502720,10 @@
"10a48df58cf9dd9f13eca87e69c54098af1b64b0",
[]
],
+ "image-with-headers-stash.py": [
+ "dcb8838d4a167d91ded325e7d3fc6b50055c7746",
+ []
+ ],
"indexedb-utils.js": [
"7c57000d5cf48a3bbf74c0b0d8f812922f0575ef",
[]
@@ -513897,7 +515011,7 @@
[]
],
"base.py": [
- "7cea14c7a44b04b1174949816a29bd7d30ef8b16",
+ "707b539ec769696948b6ee9e4c35991b1f1afad8",
[]
],
"bufferhandler.py": [
@@ -515242,11 +516356,11 @@
[]
],
"firefox_android.py": [
- "7bb2e57d417941bbb1710d6c11b8412f45d6fa7d",
+ "d0cd7411af0e29a14a3d2e7dfb955988f8a875f1",
[]
],
"headless_shell.py": [
- "b6f7a40f8a92c347add74a5f69f9996107df46cc",
+ "ccd5620365a03a2a6543087f6046086f1cc7a52c",
[]
],
"ladybird.py": [
@@ -515272,11 +516386,11 @@
]
},
"servo.py": [
- "266aec8fced6eb4cc5ca12a15cb8d938220e65ed",
+ "07441780ccc7682c6b7616271aeb9a40310a433a",
[]
],
"servodriver.py": [
- "5011a8fd8592d32af1a8313dd4ba6535a9cc384a",
+ "f72f2257a3817e33817dc7a190da8e61cf6442da",
[]
],
"webkit.py": [
@@ -515322,7 +516436,7 @@
[]
],
"executorchrome.py": [
- "1e588d5bfbfd26334fbcf980e0fe8f0bea804f87",
+ "3284e6c8091b7c17ebe6fe158ba4ff09afb628da",
[]
],
"executoredge.py": [
@@ -515497,7 +516611,7 @@
[]
],
"testrunner.py": [
- "19c814bb6c94fb11ddd2b132cf5d156e58956c7b",
+ "be310944fd878b4bcf74e6f052e2a8cc99d3e157",
[]
],
"tests": {
@@ -516192,7 +517306,7 @@
],
"resources": {
"block-text-node-insertion.js": [
- "e9797756417e1c2a42158edab6bb25b37e7d518a",
+ "dd85483a44fa4df26a2f890f06416b6ab5babca8",
[]
]
},
@@ -516571,6 +517685,10 @@
"META.yml": [
"c994748e0f27bcc75019ad7a20816ee138d15f91",
[]
+ ],
+ "WEB_FEATURES.yml": [
+ "2d331cf4060d293c912f564e28b8fff089cfeb09",
+ []
]
},
"uievents": {
@@ -517255,6 +518373,10 @@
"b92b53ee45cd98933a3c2fbcf404478eb8f66a06",
[]
],
+ "urlpattern-generate-test-data.json": [
+ "c118f0a73b5fe108ab1a1f39d41148648daa7baa",
+ []
+ ],
"urlpattern-hasregexpgroups-tests.js": [
"4be886e4a5390d7d43356d853cc00c7bbb23d361",
[]
@@ -524436,6 +525558,10 @@
"58ee7cca1ab3e9856e380eaccde042d5700c2603",
[]
],
+ "WEB_FEATURES.yml": [
+ "1687ef742e2b51872debc6da074022449c2215df",
+ []
+ ],
"Worker-creation-happens-in-parallel.https.html.headers": [
"4b06ac7cc63e8af6f7d6a882b960184c9a4ea281",
[]
@@ -525631,6 +526757,14 @@
"b73781244ebd3fcad445f0227e33411ac08a5205",
[]
]
+ },
+ "tentative": {
+ "resources": {
+ "shared-worker-memory.js": [
+ "b1504f38c504c0003d2aa179cfae5702ab318563",
+ []
+ ]
+ }
}
},
"worklets": {
@@ -568178,6 +569312,13 @@
{}
]
],
+ "containertiming-with-child-ignore-and-child-img.html": [
+ "b4fa9754c1025e255a678d298d3c3db1c30c2b4c",
+ [
+ null,
+ {}
+ ]
+ ],
"containertiming-with-child-img.html": [
"03f0e113902d0d4117a38870dfd22defe99c4653",
[
@@ -568192,6 +569333,20 @@
{}
]
],
+ "containertiming-with-ignore-and-child-img.html": [
+ "20e9e4a92180d36c3a4130139330ea3229227105",
+ [
+ null,
+ {}
+ ]
+ ],
+ "ignore-with-containertiming-and-child-img.html": [
+ "841b4441d4df846317c246a461022cffe875fab3",
+ [
+ null,
+ {}
+ ]
+ ],
"img-not-child-of-container-timing.html": [
"751342a7ceb1eaa2a98d1c07dc4000c34d14e4fd",
[
@@ -568648,7 +569803,7 @@
]
],
"default-src-sri_hash.sub.html": [
- "87fce5961fd1854303377ee939b21b6275b312cf",
+ "87389c306a53fdffa9806ba05f08a097713bcc37",
[
null,
{}
@@ -573246,7 +574401,7 @@
]
],
"script-src-sri_hash.sub.html": [
- "9216e2b0d4971fc46d0010e8dfa7375845187a8d",
+ "e290911183d0b9a5dccf4a6a2eaa3b12ee25c682",
[
null,
{}
@@ -573351,7 +574506,7 @@
]
],
"script-src-strict_dynamic_parser_inserted.html": [
- "c5e33dc4253dbf3ce2b0c6cb2fca4b0306d68244",
+ "9a8ad7a4ef2b5592af70d4dcc56f291e75da8e1b",
[
null,
{}
@@ -575838,7 +576993,7 @@
]
],
"cookieStore_special_names.https.any.js": [
- "e2a3df7fe33f3d4325cb1f602d5582dba97da627",
+ "1e12674a7f7ce9b1fbc5aa46e53be9c6bc08c084",
[
"cookie-store/cookieStore_special_names.https.any.html",
{
@@ -575926,7 +577081,7 @@
]
],
"encoding.https.any.js": [
- "941639bdaec01d0eb619a5850b1d878bdf77f695",
+ "f5d2ca15e717a0837f1e08031ab682db5aa965ea",
[
"cookie-store/encoding.https.any.html",
{
@@ -575967,7 +577122,7 @@
]
],
"httponly_cookies.https.window.js": [
- "605e94e67440aaedbcaa39f185270fe77b316ad3",
+ "836f47da3f6e0f8f2c89445d1b2fbdfdf9ddc9e6",
[
"cookie-store/httponly_cookies.https.window.html",
{
@@ -579951,7 +581106,7 @@
]
],
"anchor-scope-basic.html": [
- "47cb3b8d86a106f37af3e32149b79fbd9c8c2056",
+ "ffe3b45ba0de4d119576bc8b2d307ed55c9ea7f0",
[
null,
{}
@@ -585012,7 +586167,7 @@
]
],
"parsing.html": [
- "2447891f2c4b163cc30eaaa2c6542d9a80a2b4cf",
+ "688043039de4c9a3d9ee58480a3185509ce72814",
[
null,
{}
@@ -586103,6 +587258,13 @@
{}
]
],
+ "style-query-registered-custom-rem-change.html": [
+ "33808fbe198935daf3ad4efc769483cfbc625c8e",
+ [
+ null,
+ {}
+ ]
+ ],
"style-query-unset-on-root.html": [
"89c5cc038a8f1fcee5f0fd0de116c679c666788b",
[
@@ -595126,8 +596288,15 @@
{}
]
],
+ "HighlightRegistry-highlightsFromPoint-ranges.html": [
+ "24cf8aa6dfec302877e445ebf81dca76357cea06",
+ [
+ null,
+ {}
+ ]
+ ],
"HighlightRegistry-highlightsFromPoint.html": [
- "5bb81bea69ac5960db16e3f9ec3bb208f43a7200",
+ "5b4e7704a4df5c01d3effa1c519e39b450bbe30a",
[
null,
{}
@@ -596807,7 +597976,7 @@
]
],
"clip-path-interpolation-shape.html": [
- "6d85c2a06b491bbc54e7cfba6705fd9b6af2098f",
+ "f725e1fc6fa0cbde5928c1e45e5e7c5f72b1a7dd",
[
null,
{}
@@ -597020,7 +598189,7 @@
]
],
"clip-path-shape-parsing.html": [
- "5a4c7415bb40632989c87ee1fbe51540f94af8e2",
+ "b889ee018056c5db7611cc70de823482ed5cac36",
[
null,
{}
@@ -597895,7 +599064,7 @@
]
],
"column-rule-color-invalid.html": [
- "015defb7560038b03fc4d5f18a04a1d0e094a03d",
+ "da8dba0a73c9c7829766cd2fad39bfa79fbc6c40",
[
null,
{}
@@ -597937,7 +599106,7 @@
]
],
"column-rule-style-invalid.html": [
- "db367c273f4f2e4bb59893d56388f119cb90ea40",
+ "e8f2ab60c47748c4a8088024bbcf30eb2c9c16b2",
[
null,
{}
@@ -597965,7 +599134,7 @@
]
],
"column-rule-width-invalid.html": [
- "0bdbbecb8cada68b8243566b265029ee98c55571",
+ "77f55e09d931cf91618cc7be5a9a9f46c85960dc",
[
null,
{}
@@ -605455,6 +606624,13 @@
null,
{}
]
+ ],
+ "from-element.tentative.html": [
+ "fe99ccb23d9c279011e15f66cbbe20cd87e31568",
+ [
+ null,
+ {}
+ ]
]
}
},
@@ -612667,14 +613843,14 @@
]
],
"column-rule-style.html": [
- "8e56f62171485661197a617bfe688e4f4e922569",
+ "7098270a3921df847c907842cd7b64cea43d261b",
[
null,
{}
]
],
"column-rule-width.html": [
- "bd3c0ac8f43d1770d04e46913066c6feddee8a08",
+ "8f09d1cb45aa55c8677810a5911160609514372e",
[
null,
{}
@@ -615461,7 +616637,7 @@
]
],
"if-conditionals.html": [
- "caead7864d550f8732eff919c1b555c8f759508d",
+ "f6d981798ae7a03f97b4fd089ee02141c7f90813",
[
null,
{}
@@ -615925,6 +617101,13 @@
{}
]
],
+ "sibling-function-container-query-invalidation.html": [
+ "c0d6d913af049d6d316ab664e0d93556bff01e7c",
+ [
+ null,
+ {}
+ ]
+ ],
"sibling-function-container-query.html": [
"addcf0b2d48f5c444a9f93264a2136342c4b48d6",
[
@@ -615982,7 +617165,7 @@
]
],
"sibling-index-keyframe-registered-properties-dynamic.html": [
- "77af5434a1c4903928194bec4174745a3bd1efeb",
+ "ac2ed1a8af1b1cddbae8ce18f7afaa7897466a67",
[
null,
{}
@@ -616521,7 +617704,7 @@
},
"css-view-transitions": {
"auto-name-get-animations.html": [
- "0442255542c0349438ef7e951da7c6b47928c858",
+ "b684349a5f9caf390d0a376727dda85602104f28",
[
null,
{}
@@ -617243,6 +618426,13 @@
]
],
"zoom": {
+ "length-implicit-and-explicit-inheritance.html": [
+ "003c7b61c0909f494f02a68e20fad2c152b96a34",
+ [
+ null,
+ {}
+ ]
+ ],
"parsing": {
"zoom-computed-with-sign-expression.html": [
"8029fd3a65e542749792a48100161f18fd25fee9",
@@ -621223,7 +622413,7 @@
]
],
"offset-path-interpolation-008.html": [
- "5fb7c7c333c89f4107e2824390c73862be8107d0",
+ "ff7d4a108c77f65363d91d9e4bc52eed500913c1",
[
null,
{}
@@ -621365,14 +622555,14 @@
]
],
"offset-path-shape-computed.html": [
- "c9ecc3acb06c065913f8b7538fdf81bff6c802df",
+ "6ced1ad395ad46206bf63da5ec871d5481185312",
[
null,
{}
]
],
"offset-path-shape-parsing.html": [
- "013cea2c8211d97a5e90c42379cf5aadfe8b59fd",
+ "4a3d9f169151c3d9a9f7f997410405ad36de2410",
[
null,
{}
@@ -630517,6 +631707,13 @@
{}
]
],
+ "fn-id.html": [
+ "617ff7216d84d56f8cef3f8ca08e902dd67f487d",
+ [
+ null,
+ {}
+ ]
+ ],
"fn-lang.html": [
"1fbd0a2ee4d419275c6d78f54e3425135cf838a1",
[
@@ -633824,13 +635021,6 @@
}
]
],
- "move-inserted-node-from-DOMNodeInserted-during-exec-command-insertHTML.html": [
- "41e012a62e9617f372f85d0a0cedefe8ad42fbd6",
- [
- null,
- {}
- ]
- ],
"no-beforeinput-when-no-selection.html": [
"098a95863a606393502d4e2fc517fcb8ad144d35",
[
@@ -661675,7 +662865,7 @@
"content-encoding": {
"br": {
"bad-br-body.https.any.js": [
- "43ea90a336cd04df56b4f29f57182d2860481938",
+ "af5df674da6dcf957d0c5fb69d3538a12096c005",
[
"fetch/content-encoding/br/bad-br-body.https.any.html",
{
@@ -661799,7 +662989,7 @@
},
"gzip": {
"bad-gzip-body.any.js": [
- "17bc1261a3f5c36a9797c5a171990c522cfe7598",
+ "77a183f408b34c75eb3d3e0a1635daad79ff1355",
[
"fetch/content-encoding/gzip/bad-gzip-body.any.html",
{
@@ -661956,7 +663146,7 @@
},
"zstd": {
"bad-zstd-body.https.any.js": [
- "3f32e4dfba786511d845c3e913e59b818d0f292b",
+ "c59980c2c6fb694080417cdd6db1b237f70715b2",
[
"fetch/content-encoding/zstd/bad-zstd-body.https.any.html",
{
@@ -667031,29 +668221,6 @@
}
]
],
- "mixed-content-fetch.tentative.https.window.js": [
- "dbae5193b5cb02e3b0eba3531483aac372ba8700",
- [
- "fetch/private-network-access/mixed-content-fetch.tentative.https.window.html",
- {
- "script_metadata": [
- [
- "script",
- "/common/utils.js"
- ],
- [
- "script",
- "resources/support.sub.js"
- ],
- [
- "timeout",
- "long"
- ]
- ],
- "timeout": "long"
- }
- ]
- ],
"nested-worker.tentative.https.window.js": [
"3eeb435badb2d00404e0e214e1d42c4be2817f8a",
[
@@ -667414,185 +668581,6 @@
}
]
],
- "window-open-existing.tentative.https.window.js": [
- "6a2a624fc8032d03b626109ee7f825f7acf5874c",
- [
- "fetch/private-network-access/window-open-existing.tentative.https.window.html?include=from-local",
- {
- "script_metadata": [
- [
- "script",
- "/common/subset-tests-by-key.js"
- ],
- [
- "script",
- "/common/dispatcher/dispatcher.js"
- ],
- [
- "script",
- "/common/utils.js"
- ],
- [
- "script",
- "resources/support.sub.js"
- ],
- [
- "timeout",
- "long"
- ],
- [
- "variant",
- "?include=from-local"
- ],
- [
- "variant",
- "?include=from-private"
- ],
- [
- "variant",
- "?include=from-public"
- ],
- [
- "variant",
- "?include=from-treat-as-public"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "fetch/private-network-access/window-open-existing.tentative.https.window.html?include=from-private",
- {
- "script_metadata": [
- [
- "script",
- "/common/subset-tests-by-key.js"
- ],
- [
- "script",
- "/common/dispatcher/dispatcher.js"
- ],
- [
- "script",
- "/common/utils.js"
- ],
- [
- "script",
- "resources/support.sub.js"
- ],
- [
- "timeout",
- "long"
- ],
- [
- "variant",
- "?include=from-local"
- ],
- [
- "variant",
- "?include=from-private"
- ],
- [
- "variant",
- "?include=from-public"
- ],
- [
- "variant",
- "?include=from-treat-as-public"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "fetch/private-network-access/window-open-existing.tentative.https.window.html?include=from-public",
- {
- "script_metadata": [
- [
- "script",
- "/common/subset-tests-by-key.js"
- ],
- [
- "script",
- "/common/dispatcher/dispatcher.js"
- ],
- [
- "script",
- "/common/utils.js"
- ],
- [
- "script",
- "resources/support.sub.js"
- ],
- [
- "timeout",
- "long"
- ],
- [
- "variant",
- "?include=from-local"
- ],
- [
- "variant",
- "?include=from-private"
- ],
- [
- "variant",
- "?include=from-public"
- ],
- [
- "variant",
- "?include=from-treat-as-public"
- ]
- ],
- "timeout": "long"
- }
- ],
- [
- "fetch/private-network-access/window-open-existing.tentative.https.window.html?include=from-treat-as-public",
- {
- "script_metadata": [
- [
- "script",
- "/common/subset-tests-by-key.js"
- ],
- [
- "script",
- "/common/dispatcher/dispatcher.js"
- ],
- [
- "script",
- "/common/utils.js"
- ],
- [
- "script",
- "resources/support.sub.js"
- ],
- [
- "timeout",
- "long"
- ],
- [
- "variant",
- "?include=from-local"
- ],
- [
- "variant",
- "?include=from-private"
- ],
- [
- "variant",
- "?include=from-public"
- ],
- [
- "variant",
- "?include=from-treat-as-public"
- ]
- ],
- "timeout": "long"
- }
- ]
- ],
"window-open-existing.tentative.window.js": [
"5a6cd4c5cfd20c931a37c4f98524a4a59c0d07c9",
[
@@ -683042,6 +684030,13 @@
{}
]
],
+ "focus-contenteditable-element-in-iframe-scroll-into-view.html": [
+ "1c03382201eb05785a003d068bf0e14150e10608",
+ [
+ null,
+ {}
+ ]
+ ],
"focus-double-sync-calls.html": [
"8d5f5c8a79fc6c65556e151fed9610a9cb915f98",
[
@@ -733174,7 +734169,7 @@
]
],
"image-decode-path-changes-svg.tentative.html": [
- "1bc53a1f18e56fbd2f586b91cf78e00c846eecbb",
+ "3ef59c37a8500f64bc60011174560f4aca0bea5d",
[
null,
{
@@ -733210,7 +734205,7 @@
]
],
"image-decode-with-quick-attach-svg.tentative.html": [
- "0fc49e603606e9233d0b3ae59757aec149c8aaf2",
+ "fbc7143eceead959bc34270b55ad850044215ece",
[
null,
{
@@ -733590,7 +734585,7 @@
]
],
"naturalWidth-naturalHeight-unavailable.tentative.html": [
- "df9eb374b5adc003c93830ab4605b2adad0ae84d",
+ "ae6fa0e432853d111aa63bd87f43206acec86024",
[
null,
{}
@@ -738083,8 +739078,8 @@
}
]
],
- "negative-offset-and-margin.tentative.html": [
- "0b3d8dc98812e01e7255cc166fa0bc0704f0eac4",
+ "negative-offset.tentative.html": [
+ "c1424ad9cc80e27fac9f0693defd87dd273ad2e2",
[
null,
{}
@@ -738098,7 +739093,7 @@
]
],
"no-focus.tentative.html": [
- "9646788518323b331ac7278dd0afb754392ef6be",
+ "1bf29634605cc55210fef4a04cfaaa2c436fcd09",
[
null,
{
@@ -739157,34 +740152,6 @@
{}
]
],
- "042.html": [
- "df3a2f88f29f2e8035d8c778c3397ad464688e18",
- [
- null,
- {}
- ]
- ],
- "043.html": [
- "bcfd90cba47880efa48f9e809f37209f5f024dd6",
- [
- null,
- {}
- ]
- ],
- "044.html": [
- "8d412079e45f9f8a3d074d707db39a55e1d8b946",
- [
- null,
- {}
- ]
- ],
- "045.html": [
- "254e0d13662786d8542d03de3547b39ecf684ede",
- [
- null,
- {}
- ]
- ],
"046.html": [
"4f145d63e1d619df2df429ec6fd713e77e303cb3",
[
@@ -739243,20 +740210,6 @@
{}
]
],
- "054.html": [
- "29ede23414ec57950717a05e375cbc15547c0b4d",
- [
- null,
- {}
- ]
- ],
- "055.html": [
- "c837d78174b108d8b90cca4dccbc91bef8e1efad",
- [
- null,
- {}
- ]
- ],
"056.html": [
"e2d0868034e1b243e610b3e3afdea18d78c418c8",
[
@@ -740212,7 +741165,7 @@
]
],
"invalid-content-type.any.js": [
- "d15fa3f1b7090dc0e309097c497dcd3626301c31",
+ "d0bb6aa9fb17fe49d85bef83486edf4148ac970d",
[
"html/semantics/scripting-1/the-script-element/json-module/invalid-content-type.any.html",
{
@@ -740381,7 +741334,7 @@
]
],
"valid-content-type.html": [
- "3232b84d271e0faa49fd600eac9f4394db7f5630",
+ "fdeba93ba893176df88fe69f54606b4d01020436",
[
null,
{}
@@ -743333,6 +744286,13 @@
"timeout": "long"
}
]
+ ],
+ "source-attribute-retargeting.tentative.html": [
+ "885b75a3387a8f61f8f25fdd93d60fe3027b5599",
+ [
+ null,
+ {}
+ ]
]
},
"interest-target": {
@@ -771868,6 +772828,15 @@
}
]
],
+ "get-persistendeviceid-from-pointer-mouse-event.tentative.html": [
+ "66fb63d54d1acedc17e9a522eefebe0fba76f943",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"pointer-event-has-persistentdeviceid-from-pointer-event-init.tentative.html": [
"c3fc4270f6177c94ccd191a29d86b77a220f3577",
[
@@ -787247,6 +788216,13 @@
null,
{}
]
+ ],
+ "zoom.html": [
+ "77b4bc49fa7e8e4d13083f8ef97ced833e627a85",
+ [
+ null,
+ {}
+ ]
]
},
"resource-timing": {
@@ -787418,7 +788394,7 @@
]
],
"content-encoding.https.html": [
- "0d67bfc7d4f9a9c471272a8a475655d1c5225552",
+ "80473552f08b0c5f857533bdebf7a168283d5953",
[
null,
{}
@@ -790732,7 +791708,7 @@
]
],
"animation-trigger-repeat.tentative.html": [
- "cfbe9d3c9334148789d4cebc7a01a2f9e848b22d",
+ "6c01e762e5acd18a1def36673c93d7fcdedf4964",
[
null,
{}
@@ -796663,7 +797639,7 @@
]
],
"HighlightRegistry-highlightsFromPoint.html": [
- "5244f923e3404064987ce16d0fd1e9215ad768c3",
+ "4098bc5a9941f23405d754e786351320e14125d6",
[
null,
{}
@@ -799849,7 +800825,7 @@
]
],
"first-interaction-not-softnav.tentative.html": [
- "e02620218368d71ff10196c9ff75a13a361f5d90",
+ "2c9e2aa7c014025ca409da94172d6e0d61d106d7",
[
null,
{
@@ -799893,15 +800869,6 @@
}
]
],
- "innertext.tentative.html": [
- "7716488f25a08ea62635fceec679d97650d1f383",
- [
- null,
- {
- "testdriver": true
- }
- ]
- ],
"interaction-with-paint-before-back.tentative.html": [
"effccbfd762434c84b672173b122b07272542fe5",
[
@@ -800095,7 +801062,7 @@
]
],
"dom.html": [
- "66d23b22788c4749d7b990b89b0cef612872f5f4",
+ "2e3c3809df68ba4093247e2d4e3fe114f8c9f729",
[
null,
{
@@ -800120,6 +801087,15 @@
"testdriver": true
}
]
+ ],
+ "window-open-cross-scheduling.html": [
+ "1a41be6ddd2d716c4012b5524e8a30b9821ec3e3",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
]
}
},
@@ -800559,6 +801535,15 @@
{}
]
],
+ "no-prefetch-for-post.https.html": [
+ "7739f4f8c7105b2c4e9ed4671081b00d0c0b8c6e",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"no-vary-search": {
"prefetch-single-with-hint.https.html": [
"f2d8b3090e1f8447f86bd62a6f24ca9daae06ec7",
@@ -801551,6 +802536,15 @@
}
]
],
+ "headers.https.html": [
+ "2ef6b5ce072866d3c88ce7a86fcea6436de3364a",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"iframe-added-post-activation.https.html": [
"d22b511e108d8b7c7f0b63f28e5bf485eca98758",
[
@@ -821765,14 +822759,14 @@
]
],
"block-text-node-insertion-into-script-element.html": [
- "65b40b933ff8417ad5147ce29d68bc19707bc0b9",
+ "1a1256d05a8c996d078ca287950660fd5d1e9071",
[
null,
{}
]
],
"block-text-node-insertion-into-svg-script-element.html": [
- "f4ff24350355a29f033489d51bf4a021d9673dd2",
+ "18c6af8f5efcf72c11876b4f2740cdddd5cf1c84",
[
null,
{}
@@ -822768,13 +823762,6 @@
},
"legacy-domevents-tests": {
"approved": {
- "ProcessingInstruction.DOMCharacterDataModified.html": [
- "2da0a389e2e3bc51861fef752b11a629203897d0",
- [
- null,
- {}
- ]
- ],
"dispatchEvent.click.checkbox.html": [
"8cb548f84c60eb6b528c1049884649b26c4f18ba",
[
@@ -822782,13 +823769,6 @@
{}
]
],
- "domnodeinserted.html": [
- "e5064d8d46cd9aad4768aa81dacb18b989e2c993",
- [
- null,
- {}
- ]
- ],
"stopImmediatePropagation.effect.html": [
"a414d60298acece6dce5d970e6f0448a99fd65da",
[
@@ -826096,6 +827076,53 @@
}
]
],
+ "urlpattern-generate.tentative.any.js": [
+ "1f6962942d88f88684c5302175202e0278d3d971",
+ [
+ "urlpattern/urlpattern-generate.tentative.any.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "urlpattern/urlpattern-generate.tentative.any.serviceworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "urlpattern/urlpattern-generate.tentative.any.sharedworker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ]
+ ]
+ }
+ ],
+ [
+ "urlpattern/urlpattern-generate.tentative.any.worker.html",
+ {
+ "script_metadata": [
+ [
+ "global",
+ "window,worker"
+ ]
+ ]
+ }
+ ]
+ ],
"urlpattern-hasregexpgroups.any.js": [
"33133d2511b065ca94cc5e793066cc8111b4d6e6",
[
@@ -855415,7 +856442,7 @@
]
],
"cumulative_sum.https.any.js": [
- "85e1ab427d208f76aae62bff8c603b0d891f7180",
+ "34a625152b26a3183a7cd62c38883a684ac93908",
[
"webnn/conformance_tests/cumulative_sum.https.any.html?cpu",
{
@@ -859171,7 +860198,7 @@
]
],
"linear.https.any.js": [
- "9231aaf9ecad0996b8dfb9530c4a7f55b2aa8e06",
+ "1f13fe170d46fa157035bd6e14de6eb68462c7a4",
[
"webnn/conformance_tests/linear.https.any.html?cpu",
{
@@ -861604,7 +862631,7 @@
]
],
"qdq_subgraph.https.any.js": [
- "ac384c917b33dda2243779a396d0d557c40003dc",
+ "996a6b472c5689bc082388d5c267d2f5fe460080",
[
"webnn/conformance_tests/qdq_subgraph.https.any.html?cpu",
{
@@ -865945,7 +866972,7 @@
]
],
"subgraph.https.any.js": [
- "9b21d6e4f9453fb72c3f7a6850c5690cc9ed87cf",
+ "8a0b7faa92f938282c7a6bb02ac61ef6730f021d",
[
"webnn/conformance_tests/subgraph.https.any.html?cpu",
{
@@ -882776,7 +883803,7 @@
]
],
"RTCConfiguration-iceServers.html": [
- "bc7831361ab5f417b46a507b0e5977bef9bedd49",
+ "65a6015f52a7233260ab8405fb43bc347fa0ff4b",
[
null,
{}
@@ -884735,7 +885762,7 @@
]
],
"RTCEncodedAudioFrame-metadata.https.html": [
- "df4577c5614a82afd7b02d988d0f15caa3b9e848",
+ "1e148fe1b29a167e6451162125b7390151ec90bd",
[
null,
{
@@ -897599,7 +898626,7 @@
]
],
"remote-close.any.js": [
- "b7fd321914a4e6f9bf70d431bca591a7c5460675",
+ "c3e7ad5f9fbef1494ed7594dc7d497e9f867361a",
[
"websockets/stream/tentative/remote-close.any.html?default",
{
@@ -898019,6 +899046,429 @@
]
}
]
+ ],
+ "write.any.js": [
+ "43af7da614c675fcc0571d7edff3515a92774caf",
+ [
+ "websockets/stream/tentative/write.any.html?default",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.html?wpt_flags=h2",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.html?wss",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.serviceworker.html?default",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.serviceworker.html?wpt_flags=h2",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.serviceworker.html?wss",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.sharedworker.html?default",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.sharedworker.html?wpt_flags=h2",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.sharedworker.html?wss",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.worker.html?default",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.worker.html?wpt_flags=h2",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ],
+ [
+ "websockets/stream/tentative/write.any.worker.html?wss",
+ {
+ "script_metadata": [
+ [
+ "script",
+ "../../constants.sub.js"
+ ],
+ [
+ "script",
+ "resources/url-constants.js"
+ ],
+ [
+ "script",
+ "/common/gc.js"
+ ],
+ [
+ "global",
+ "window,worker"
+ ],
+ [
+ "variant",
+ "?default"
+ ],
+ [
+ "variant",
+ "?wss"
+ ],
+ [
+ "variant",
+ "?wpt_flags=h2"
+ ]
+ ]
+ }
+ ]
]
}
},
@@ -905196,6 +906646,15 @@
{}
]
],
+ "tentative": {
+ "SharedWorker-extendedLifetime.html": [
+ "3c76eddd7647991ae171b4d5e4766af5d156dd9a",
+ [
+ null,
+ {}
+ ]
+ ]
+ },
"worker-performance.worker.js": [
"c913b2e7375067c1a21bdc655f394b5c27bc5aed",
[
@@ -916100,104 +917559,6 @@
{}
]
],
- "list-style-image-applies-to-001.xht": [
- "2c82821505bc65183bc09b518908e87f2533e110",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-002.xht": [
- "7af1787b87dea123b9d61372873156e2d105db97",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-003.xht": [
- "1e7e58f4627accac29406e5d8c098b0464205279",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-004.xht": [
- "cc859de9a8295b2bb9de98cc61a8967987537058",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-005.xht": [
- "74d1b127923cd19d98084dc2c8d576dfa5ec58f3",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-006.xht": [
- "81ca729695b15e352a543a027881a42b00f81c24",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-007.xht": [
- "63a8d63c7829b14513b312a14cae353633b392a1",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-008.xht": [
- "6d8bd5638bf3f5b54c5dac8e49dfde46f2f8acb2",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-009.xht": [
- "cc2270bc9f02d4e0836d32d37c26f8922128656c",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-010.xht": [
- "78a81194285defc7e16e7e50c637f57dc381f8c0",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-012.xht": [
- "b81db5533c742f72e2f3eb5c9802190fa207f219",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-013.xht": [
- "8a8c3e3da81364a11988353771baf0911b233411",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-014.xht": [
- "01347df407e73135ba3ab7a602cf66609f5ada99",
- [
- null,
- {}
- ]
- ],
- "list-style-image-applies-to-015.xht": [
- "7eedb682640e9c817ae64e9a0ef44868fa538671",
- [
- null,
- {}
- ]
- ],
"list-style-image-available-001.xht": [
"dbb6b45abbdeb5ed7cc3f91393a177057b18a434",
[
@@ -916247,104 +917608,6 @@
{}
]
],
- "list-style-position-applies-to-001.xht": [
- "9889dd769564c224e90135ce884f3923e9704930",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-002.xht": [
- "a8c8a41aa58b5503ebf893d672ec3fff1bace311",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-003.xht": [
- "d53761ba36c9bca250916c974783caf014f25ac1",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-004.xht": [
- "23d74ebd673698f388b94ca70c129847b5726ab6",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-005.xht": [
- "9ec866bef8a58f66ee0eb676d9a4c8c3d83c3f16",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-006.xht": [
- "d60ed2c7f876f7cb8117b0a3cf10e728adae28e3",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-007.xht": [
- "c223dbabd81fbe2a7b5a9b893b2668394dbe875d",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-008.xht": [
- "1f2e347de86b5e66817eba7c01b771a6ef897425",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-009.xht": [
- "90ff3b23562f82ad9150fb1897a4ce9be53529a1",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-010.xht": [
- "ae5dbfbc362daac99771c8d7fcd99675afa83cab",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-012.xht": [
- "25e79b3a594ebd8d9e5a1af7df4fbd607ee8ee6c",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-013.xht": [
- "5dde30618c940c9e833aece9e73a628f419c5f39",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-014.xht": [
- "b5502348702ac9a92975e901b28d873bb6687d60",
- [
- null,
- {}
- ]
- ],
- "list-style-position-applies-to-015.xht": [
- "53eb07dd3b7283f60b2f7ed0c80e1ef2264155f7",
- [
- null,
- {}
- ]
- ],
"list-style-position-inside-002.xht": [
"bfd661367fa8a20914fb15c21d7abba41cb32934",
[
diff --git a/tests/wpt/meta/content-security-policy/connect-src/connect-src-syncxmlhttprequest-redirect-to-blocked.sub.html.ini b/tests/wpt/meta/content-security-policy/connect-src/connect-src-syncxmlhttprequest-redirect-to-blocked.sub.html.ini
deleted file mode 100644
index e6156eab928..00000000000
--- a/tests/wpt/meta/content-security-policy/connect-src/connect-src-syncxmlhttprequest-redirect-to-blocked.sub.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[connect-src-syncxmlhttprequest-redirect-to-blocked.sub.html]
- [Expecting logs: ["PASS Sync XMLHttpRequest.send() did not follow the disallowed redirect.","TEST COMPLETE","violated-directive=connect-src"\]]
- expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/connect-src/connect-src-xmlhttprequest-redirect-to-blocked.sub.html.ini b/tests/wpt/meta/content-security-policy/connect-src/connect-src-xmlhttprequest-redirect-to-blocked.sub.html.ini
deleted file mode 100644
index 9b86b6b2d9c..00000000000
--- a/tests/wpt/meta/content-security-policy/connect-src/connect-src-xmlhttprequest-redirect-to-blocked.sub.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[connect-src-xmlhttprequest-redirect-to-blocked.sub.html]
- [Expecting logs: ["PASS XMLHttpRequest.send() did not follow the disallowed redirect.","TEST COMPLETE","violated-directive=connect-src"\]]
- expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/form-action/form-action-src-default-ignored.sub.html.ini b/tests/wpt/meta/content-security-policy/form-action/form-action-src-default-ignored.sub.html.ini
deleted file mode 100644
index cdeba1865a5..00000000000
--- a/tests/wpt/meta/content-security-policy/form-action/form-action-src-default-ignored.sub.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[form-action-src-default-ignored.sub.html]
- [Expecting logs: ["PASS","TEST COMPLETE"\]]
- expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.http.html.ini b/tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.http.html.ini
index 5891a18681e..0c6a81792db 100644
--- a/tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.http.html.ini
+++ b/tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.http.html.ini
@@ -1,6 +1,3 @@
[script-tag.http.html]
[Content Security Policy: Expects blocked for script-tag to same-http origin and swap-origin redirection from http context.]
expected: FAIL
-
- [Content Security Policy: Expects blocked for script-tag to same-http origin and swap-origin redirection from http context.: securitypolicyviolation]
- expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.https.html.ini b/tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.https.html.ini
index 699a0dd6238..b5c643337e2 100644
--- a/tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.https.html.ini
+++ b/tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/script-tag.https.html.ini
@@ -1,6 +1,3 @@
[script-tag.https.html]
[Content Security Policy: Expects blocked for script-tag to same-https origin and swap-origin redirection from https context.]
expected: FAIL
-
- [Content Security Policy: Expects blocked for script-tag to same-https origin and swap-origin redirection from https context.: securitypolicyviolation]
- expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.http.html.ini b/tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.http.html.ini
index 5891a18681e..0c6a81792db 100644
--- a/tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.http.html.ini
+++ b/tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.http.html.ini
@@ -1,6 +1,3 @@
[script-tag.http.html]
[Content Security Policy: Expects blocked for script-tag to same-http origin and swap-origin redirection from http context.]
expected: FAIL
-
- [Content Security Policy: Expects blocked for script-tag to same-http origin and swap-origin redirection from http context.: securitypolicyviolation]
- expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.https.html.ini b/tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.https.html.ini
index 699a0dd6238..b5c643337e2 100644
--- a/tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.https.html.ini
+++ b/tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/script-tag.https.html.ini
@@ -1,6 +1,3 @@
[script-tag.https.html]
[Content Security Policy: Expects blocked for script-tag to same-https origin and swap-origin redirection from https context.]
expected: FAIL
-
- [Content Security Policy: Expects blocked for script-tag to same-https origin and swap-origin redirection from https context.: securitypolicyviolation]
- expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/generic/wildcard-host-part.sub.window.js.ini b/tests/wpt/meta/content-security-policy/generic/wildcard-host-part.sub.window.js.ini
deleted file mode 100644
index 7770d4e4454..00000000000
--- a/tests/wpt/meta/content-security-policy/generic/wildcard-host-part.sub.window.js.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[wildcard-host-part.sub.window.html]
- expected: CRASH
diff --git a/tests/wpt/meta/content-security-policy/inside-worker/dedicatedworker-connect-src.html.ini b/tests/wpt/meta/content-security-policy/inside-worker/dedicatedworker-connect-src.html.ini
index ad01d630c28..72db221f4dd 100644
--- a/tests/wpt/meta/content-security-policy/inside-worker/dedicatedworker-connect-src.html.ini
+++ b/tests/wpt/meta/content-security-policy/inside-worker/dedicatedworker-connect-src.html.ini
@@ -1,7 +1,4 @@
[dedicatedworker-connect-src.html]
- [Same-origin => cross-origin 'fetch()' in http: with connect-src 'self']
- expected: FAIL
-
[Reports match in http: with connect-src 'self']
expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/reporting/report-original-url.sub.html.ini b/tests/wpt/meta/content-security-policy/reporting/report-original-url.sub.html.ini
index 66a2ee93f3b..f160ad3d25d 100644
--- a/tests/wpt/meta/content-security-policy/reporting/report-original-url.sub.html.ini
+++ b/tests/wpt/meta/content-security-policy/reporting/report-original-url.sub.html.ini
@@ -1,10 +1,3 @@
[report-original-url.sub.html]
- expected: TIMEOUT
- [Block after redirect, same-origin = original URL in report]
- expected: TIMEOUT
-
- [Block after redirect, cross-origin = original URL in report]
- expected: TIMEOUT
-
[Violation report status OK.]
expected: FAIL
diff --git a/tests/wpt/meta/content-security-policy/securitypolicyviolation/img-src-redirect.sub.html.ini b/tests/wpt/meta/content-security-policy/securitypolicyviolation/img-src-redirect.sub.html.ini
deleted file mode 100644
index 95cb135df4e..00000000000
--- a/tests/wpt/meta/content-security-policy/securitypolicyviolation/img-src-redirect.sub.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[img-src-redirect.sub.html]
- [The blocked URI in the security policy violation event should be the original URI before redirects.]
- expected: FAIL
diff --git a/tests/wpt/meta/css/CSS2/lists/list-style-applies-to-017.html.ini b/tests/wpt/meta/css/CSS2/lists/list-style-applies-to-017.html.ini
new file mode 100644
index 00000000000..6e491d93275
--- /dev/null
+++ b/tests/wpt/meta/css/CSS2/lists/list-style-applies-to-017.html.ini
@@ -0,0 +1,2 @@
+[list-style-applies-to-017.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/CSS2/lists/list-style-image-applies-to-017.html.ini b/tests/wpt/meta/css/CSS2/lists/list-style-image-applies-to-017.html.ini
new file mode 100644
index 00000000000..2433ef7b9cb
--- /dev/null
+++ b/tests/wpt/meta/css/CSS2/lists/list-style-image-applies-to-017.html.ini
@@ -0,0 +1,2 @@
+[list-style-image-applies-to-017.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/CSS2/lists/list-style-type-applies-to-017.html.ini b/tests/wpt/meta/css/CSS2/lists/list-style-type-applies-to-017.html.ini
new file mode 100644
index 00000000000..5a422c4fcc5
--- /dev/null
+++ b/tests/wpt/meta/css/CSS2/lists/list-style-type-applies-to-017.html.ini
@@ -0,0 +1,2 @@
+[list-style-type-applies-to-017.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini
index 11dc161d87a..34de05fc1cc 100644
--- a/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini
+++ b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html.ini
@@ -78,3 +78,6 @@
[corner-shape-render-fuzzy.html?border-radius=50%&corner-top-right-shape=scoop&corner-bottom-left-shape=scoop&corner-top-left-shape=notch&corner-bottom-right-shape=notch&border-width=10px]
expected: FAIL
+
+[corner-shape-render-fuzzy.html?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html.ini b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html.ini
index 68682a3e807..1fda8aa0448 100644
--- a/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html.ini
+++ b/tests/wpt/meta/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html.ini
@@ -37,9 +37,6 @@
[corner-shape-render-precise.html?corner-top-left-shape=bevel&border-width=10px&border-color=black]
expected: FAIL
-[corner-shape-render-precise.html?corner-bottom-right-shape=bevel&corner-bottom-left-shape=bevel]
- expected: FAIL
-
[corner-shape-render-precise.html?corner-shape=superellipse(8)&border-radius=10px&box-shadow=10px 10px 0 10px black]
expected: FAIL
@@ -90,3 +87,6 @@
[corner-shape-render-precise.html?corner-shape=superellipse(-2)&border-top-left-radius=40%&border-width=20px]
expected: FAIL
+
+[corner-shape-render-precise.html?corner-shape=notch&border-radius=30px&border-width=30px]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-conditional/container-queries/style-query-registered-custom-rem-change.html.ini b/tests/wpt/meta/css/css-conditional/container-queries/style-query-registered-custom-rem-change.html.ini
new file mode 100644
index 00000000000..ee69bd41b83
--- /dev/null
+++ b/tests/wpt/meta/css/css-conditional/container-queries/style-query-registered-custom-rem-change.html.ini
@@ -0,0 +1,3 @@
+[style-query-registered-custom-rem-change.html]
+ [Changing the :root font-size to 10px makes 1rem * 10 evaluate to 100px]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-gaps/grid/grid-gap-decorations-040.html.ini b/tests/wpt/meta/css/css-gaps/grid/grid-gap-decorations-040.html.ini
new file mode 100644
index 00000000000..961df8f5b9b
--- /dev/null
+++ b/tests/wpt/meta/css/css-gaps/grid/grid-gap-decorations-040.html.ini
@@ -0,0 +1,2 @@
+[grid-gap-decorations-040.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-masking/clip-path/clip-path-shape-011.html.ini b/tests/wpt/meta/css/css-masking/clip-path/clip-path-shape-011.html.ini
new file mode 100644
index 00000000000..7598b3ef8ec
--- /dev/null
+++ b/tests/wpt/meta/css/css-masking/clip-path/clip-path-shape-011.html.ini
@@ -0,0 +1,2 @@
+[clip-path-shape-011.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-overflow/overflow-video.html.ini b/tests/wpt/meta/css/css-overflow/overflow-video.html.ini
deleted file mode 100644
index 1d0a9d754d6..00000000000
--- a/tests/wpt/meta/css/css-overflow/overflow-video.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[overflow-video.html]
- expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/all-hosts.html.ini b/tests/wpt/meta/css/css-shadow-parts/all-hosts.html.ini
new file mode 100644
index 00000000000..8fce3b78803
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/all-hosts.html.ini
@@ -0,0 +1,6 @@
+[all-hosts.html]
+ [::part with host selector styles in first host]
+ expected: FAIL
+
+ [::part with host selector styles in second host]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini b/tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini
new file mode 100644
index 00000000000..5609256d589
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/animation-part.html.ini
@@ -0,0 +1,2 @@
+[animation-part.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/both-part-and-exportparts.html.ini b/tests/wpt/meta/css/css-shadow-parts/both-part-and-exportparts.html.ini
new file mode 100644
index 00000000000..44fae3819a5
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/both-part-and-exportparts.html.ini
@@ -0,0 +1,3 @@
+[both-part-and-exportparts.html]
+ [::part() rules match elements having both @part and @exportparts]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/complex-matching.html.ini b/tests/wpt/meta/css/css-shadow-parts/complex-matching.html.ini
new file mode 100644
index 00000000000..6c473570671
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/complex-matching.html.ini
@@ -0,0 +1,3 @@
+[complex-matching.html]
+ [Complex selector for host works]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/double-forward.html.ini b/tests/wpt/meta/css/css-shadow-parts/double-forward.html.ini
new file mode 100644
index 00000000000..2ca3e6ea37d
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/double-forward.html.ini
@@ -0,0 +1,3 @@
+[double-forward.html]
+ [Part in inner host is forwarded through the middle host for styling by document style sheet]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/exportparts-different-scope.html.ini b/tests/wpt/meta/css/css-shadow-parts/exportparts-different-scope.html.ini
new file mode 100644
index 00000000000..b6e6d38d30c
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/exportparts-different-scope.html.ini
@@ -0,0 +1,2 @@
+[exportparts-different-scope.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/exportparts-multiple.html.ini b/tests/wpt/meta/css/css-shadow-parts/exportparts-multiple.html.ini
new file mode 100644
index 00000000000..cb8e5c6ac20
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/exportparts-multiple.html.ini
@@ -0,0 +1,3 @@
+[exportparts-multiple.html]
+ [Forwarding part under multiple names should work]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini b/tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini
new file mode 100644
index 00000000000..f39eba9208a
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/grouping-with-checked.html.ini
@@ -0,0 +1,12 @@
+[grouping-with-checked.html]
+ [Styles applied to ::part(...)]
+ expected: FAIL
+
+ [Styles applied to ::part(...):checked]
+ expected: FAIL
+
+ [Styles applied via grouped selector including matched ::part(...):checked]
+ expected: FAIL
+
+ [Styles applied via grouped selector including unmatched ::part(...):checked]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/grouping-with-disabled.html.ini b/tests/wpt/meta/css/css-shadow-parts/grouping-with-disabled.html.ini
new file mode 100644
index 00000000000..3d6b92b5b8e
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/grouping-with-disabled.html.ini
@@ -0,0 +1,12 @@
+[grouping-with-disabled.html]
+ [Styles applied to ::part(...)]
+ expected: FAIL
+
+ [Styles applied to ::part(...):disabled]
+ expected: FAIL
+
+ [Styles applied via grouped selector including matched ::part(...):disabled]
+ expected: FAIL
+
+ [Styles applied via grouped selector including unmatched ::part(...):disabled]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/host-part-001.html.ini b/tests/wpt/meta/css/css-shadow-parts/host-part-001.html.ini
new file mode 100644
index 00000000000..d52687ff32f
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/host-part-001.html.ini
@@ -0,0 +1,3 @@
+[host-part-001.html]
+ [:host::part works]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/host-part-002.html.ini b/tests/wpt/meta/css/css-shadow-parts/host-part-002.html.ini
new file mode 100644
index 00000000000..ad2c732963f
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/host-part-002.html.ini
@@ -0,0 +1,3 @@
+[host-part-002.html]
+ [:host::part has correct cascading behavior]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/host-part-nesting.html.ini b/tests/wpt/meta/css/css-shadow-parts/host-part-nesting.html.ini
new file mode 100644
index 00000000000..aacd37b4934
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/host-part-nesting.html.ini
@@ -0,0 +1,3 @@
+[host-part-nesting.html]
+ [:host::part works in nesting]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/idlharness.html.ini b/tests/wpt/meta/css/css-shadow-parts/idlharness.html.ini
new file mode 100644
index 00000000000..cc4dd4679ca
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/idlharness.html.ini
@@ -0,0 +1,12 @@
+[idlharness.html]
+ [Element interface: attribute part]
+ expected: FAIL
+
+ [Element interface: element must inherit property "part" with the proper type]
+ expected: FAIL
+
+ [Element interface: htmlElement must inherit property "part" with the proper type]
+ expected: FAIL
+
+ [Element interface: svgElement must inherit property "part" with the proper type]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/inner-host.html.ini b/tests/wpt/meta/css/css-shadow-parts/inner-host.html.ini
new file mode 100644
index 00000000000..5c34edcb01f
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/inner-host.html.ini
@@ -0,0 +1,3 @@
+[inner-host.html]
+ [Part in outer host is styled by document style sheet]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/interaction-with-nested-pseudo-class.html.ini b/tests/wpt/meta/css/css-shadow-parts/interaction-with-nested-pseudo-class.html.ini
new file mode 100644
index 00000000000..6d8dd62ca0c
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/interaction-with-nested-pseudo-class.html.ini
@@ -0,0 +1,2 @@
+[interaction-with-nested-pseudo-class.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini b/tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini
new file mode 100644
index 00000000000..1a36ec9273d
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/interaction-with-pseudo-elements.html.ini
@@ -0,0 +1,18 @@
+[interaction-with-pseudo-elements.html]
+ [::before in selected host is styled]
+ expected: FAIL
+
+ [::after in selected host is styled]
+ expected: FAIL
+
+ [::placeholder in selected host is styled]
+ expected: FAIL
+
+ [::selection in selected host is styled]
+ expected: FAIL
+
+ [::first-line in selected host is styled]
+ expected: FAIL
+
+ [::first-letter in selected host is styled]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-exportparts-forward.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-exportparts-forward.html.ini
new file mode 100644
index 00000000000..3cb69c11c77
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-exportparts-forward.html.ini
@@ -0,0 +1,3 @@
+[invalidation-change-exportparts-forward.html]
+ [Part in selected host changed color]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-forward.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-forward.html.ini
new file mode 100644
index 00000000000..14c48dbeb23
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-forward.html.ini
@@ -0,0 +1,3 @@
+[invalidation-change-part-name-forward.html]
+ [Part in selected host changed color]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html.ini
new file mode 100644
index 00000000000..c086b128d2e
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-domtokenlist.html.ini
@@ -0,0 +1,3 @@
+[invalidation-change-part-name-idl-domtokenlist.html]
+ [Part in selected host changed color via part IDL DOMTokenList attribute.]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html.ini
new file mode 100644
index 00000000000..2269f6e697a
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name-idl-setter.html.ini
@@ -0,0 +1,3 @@
+[invalidation-change-part-name-idl-setter.html]
+ [Part in selected host changed color via part IDL attribute setter.]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name.html.ini
new file mode 100644
index 00000000000..97e25417c56
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/invalidation-change-part-name.html.ini
@@ -0,0 +1,3 @@
+[invalidation-change-part-name.html]
+ [Part in selected host changed color]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector-forward.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector-forward.html.ini
new file mode 100644
index 00000000000..b016daa81eb
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector-forward.html.ini
@@ -0,0 +1,3 @@
+[invalidation-complex-selector-forward.html]
+ [Part in selected host changed color]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector.html.ini b/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector.html.ini
new file mode 100644
index 00000000000..772668059f2
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/invalidation-complex-selector.html.ini
@@ -0,0 +1,3 @@
+[invalidation-complex-selector.html]
+ [Part in selected host changed color]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/multiple-parts.html.ini b/tests/wpt/meta/css/css-shadow-parts/multiple-parts.html.ini
new file mode 100644
index 00000000000..fc47c2d1237
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/multiple-parts.html.ini
@@ -0,0 +1,3 @@
+[multiple-parts.html]
+ [Double-part in selected host is styled]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/multiple-scopes.html.ini b/tests/wpt/meta/css/css-shadow-parts/multiple-scopes.html.ini
new file mode 100644
index 00000000000..bd075e5632c
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/multiple-scopes.html.ini
@@ -0,0 +1,27 @@
+[multiple-scopes.html]
+ [exported part selector matches from outer scope]
+ expected: FAIL
+
+ [non-exported part selector does not match from outer scope]
+ expected: FAIL
+
+ [pseudo-element selector alone does not match from outer scope]
+ expected: FAIL
+
+ [exported part selector (for outer scope) does not match from middle scope]
+ expected: FAIL
+
+ [correct part selector matches from middle scope]
+ expected: FAIL
+
+ [pseudo-element selector alone does not match from middle scope]
+ expected: FAIL
+
+ [selector with ::part(exported name) does not match from inner scope that exports the part]
+ expected: FAIL
+
+ [selector with ::part(original name) does not match from inner scope that exports the part]
+ expected: FAIL
+
+ [pseudo-element selector alone matches from inner scope]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/part-mutation-pseudo.html.ini b/tests/wpt/meta/css/css-shadow-parts/part-mutation-pseudo.html.ini
new file mode 100644
index 00000000000..599855cc88b
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/part-mutation-pseudo.html.ini
@@ -0,0 +1,3 @@
+[part-mutation-pseudo.html]
+ [Part in selected host changed color]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/part-name-idl.html.ini b/tests/wpt/meta/css/css-shadow-parts/part-name-idl.html.ini
new file mode 100644
index 00000000000..27699f0b592
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/part-name-idl.html.ini
@@ -0,0 +1,12 @@
+[part-name-idl.html]
+ [Access to .part returns an empty DOMTokenList.]
+ expected: FAIL
+
+ [Multiple names give a DOMTokenList with multiple entries.]
+ expected: FAIL
+
+ [DOMTokenList created by access is persisted.]
+ expected: FAIL
+
+ [Changes in DOMTokenList are refected in attribute.]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/part-nested-pseudo.html.ini b/tests/wpt/meta/css/css-shadow-parts/part-nested-pseudo.html.ini
new file mode 100644
index 00000000000..1cc6eac641c
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/part-nested-pseudo.html.ini
@@ -0,0 +1,2 @@
+[part-nested-pseudo.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/precedence-part-vs-part.html.ini b/tests/wpt/meta/css/css-shadow-parts/precedence-part-vs-part.html.ini
new file mode 100644
index 00000000000..48b47fd2c73
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/precedence-part-vs-part.html.ini
@@ -0,0 +1,3 @@
+[precedence-part-vs-part.html]
+ [Style from document overrides style from outer CE]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini b/tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini
new file mode 100644
index 00000000000..d37678023dd
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/pseudo-classes-after-part.html.ini
@@ -0,0 +1,141 @@
+[pseudo-classes-after-part.html]
+ ["::part(mypart):active" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):active-view-transition" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):active-view-transition-type(mytype)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):any-link" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):autofill" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):checked" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):default" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):defined" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):dir(ltr)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):disabled" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):enabled" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):focus" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):focus-visible" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):focus-within" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):fullscreen" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):future" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):hover" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):indeterminate" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):in-range" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):invalid" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):lang(en)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):link" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):modal" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):open" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):optional" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):out-of-range" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):past" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):paused" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):picture-in-picture" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):placeholder-shown" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):playing" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):popover-open" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):read-only" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):read-write" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):required" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):state(mystate)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):target" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):user-invalid" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):user-valid" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):valid" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):visited" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):xr-overlay" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):not(:hover)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):is(:hover)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):where(:hover)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):is(:first-child)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart):where(:first-child)" should be a valid selector]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini b/tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini
new file mode 100644
index 00000000000..02f53015dc9
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/pseudo-elements-after-part.html.ini
@@ -0,0 +1,126 @@
+[pseudo-elements-after-part.html]
+ ["::part(mypart)::after" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::backdrop" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::before" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::cue" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::details-content" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::file-selector-button" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::first-letter" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::first-line" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::grammar-error" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::highlight(myhighlight)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::marker" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::placeholder" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::search-text" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::selection" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::spelling-error" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::target-text" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::view-transition" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::view-transition-group(*)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::view-transition-image-pair(*)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::view-transition-new(*)" should be a valid selector]
+ expected: FAIL
+
+ ["::part(mypart)::view-transition-old(*)" should be a valid selector]
+ expected: FAIL
+
+ [computed style for ::part()::after]
+ expected: FAIL
+
+ [computed style for ::part()::backdrop]
+ expected: FAIL
+
+ [computed style for ::part()::before]
+ expected: FAIL
+
+ [computed style for ::part()::details-content]
+ expected: FAIL
+
+ [computed style for ::part()::file-selector-button]
+ expected: FAIL
+
+ [computed style for ::part()::first-letter]
+ expected: FAIL
+
+ [computed style for ::part()::first-line]
+ expected: FAIL
+
+ [computed style for ::part()::grammar-error]
+ expected: FAIL
+
+ [computed style for ::part()::highlight(myhighlight)]
+ expected: FAIL
+
+ [computed style for ::part()::placeholder]
+ expected: FAIL
+
+ [computed style for ::part()::search-text]
+ expected: FAIL
+
+ [computed style for ::part()::selection]
+ expected: FAIL
+
+ [computed style for ::part()::spelling-error]
+ expected: FAIL
+
+ [computed style for ::part()::target-text]
+ expected: FAIL
+
+ [::part styles with ::part(mypart)::after {\n display: block;\n content: "";\n height: 77px;\n } and <div part='mypart'></div>]
+ expected: FAIL
+
+ [::part styles with ::part(mypart)::before {\n display: block;\n content: "";\n height: 46px;\n } and <div part='mypart'></div>]
+ expected: FAIL
+
+ [::part styles with ::part(mypart)::details-content {\n height: 371px;\n } and <details part='mypart'><summary style="height:47px">summary</summary>details</details>]
+ expected: FAIL
+
+ [::part styles with ::part(mypart)::file-selector-button {\n height: 94px;\n padding: 0;\n margin: 0;\n border: none;\n appearance: none;\n } and <input type=file part=mypart>]
+ expected: FAIL
+
+ [::part styles with ::part(mypart) {\n font: 20px/1 Ahem;\n }\n ::part(mypart)::first-letter {\n font-size: 86px;\n } and <div part=mypart>X<br>X</div>]
+ expected: FAIL
+
+ [::part styles with ::part(mypart) {\n font: 20px/1 Ahem;\n }\n ::part(mypart)::first-line {\n font-size: 86px;\n } and <div part=mypart>X<br>X</div>]
+ expected: FAIL
+
+ [::part styles with ::part(mypart)::marker {\n font: 63px/1.0 Ahem;\n content: "X";\n } and <li style="list-style-position: inside" part="mypart"></li>]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/serialization.html.ini b/tests/wpt/meta/css/css-shadow-parts/serialization.html.ini
new file mode 100644
index 00000000000..bf16109e185
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/serialization.html.ini
@@ -0,0 +1,9 @@
+[serialization.html]
+ [Escape start parenthesis in ::part name.]
+ expected: FAIL
+
+ [Escape start space in ::part name.]
+ expected: FAIL
+
+ [Collapse spaces in ::part names list.]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/simple-forward-shorthand.html.ini b/tests/wpt/meta/css/css-shadow-parts/simple-forward-shorthand.html.ini
new file mode 100644
index 00000000000..ea340dff75c
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/simple-forward-shorthand.html.ini
@@ -0,0 +1,3 @@
+[simple-forward-shorthand.html]
+ [Part in inner host is forwarded, under the same name, for styling by document style sheet]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/simple-forward.html.ini b/tests/wpt/meta/css/css-shadow-parts/simple-forward.html.ini
new file mode 100644
index 00000000000..757dfe7d435
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/simple-forward.html.ini
@@ -0,0 +1,3 @@
+[simple-forward.html]
+ [Part in inner host is forwarded for styling by document style sheet]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/simple-inline.html.ini b/tests/wpt/meta/css/css-shadow-parts/simple-inline.html.ini
new file mode 100644
index 00000000000..4121d642be0
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/simple-inline.html.ini
@@ -0,0 +1,3 @@
+[simple-inline.html]
+ [Part in selected host is styled]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/simple.html.ini b/tests/wpt/meta/css/css-shadow-parts/simple.html.ini
new file mode 100644
index 00000000000..9c3278c9e3a
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/simple.html.ini
@@ -0,0 +1,3 @@
+[simple.html]
+ [Part in selected host is styled]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-shadow-parts/style-sharing.html.ini b/tests/wpt/meta/css/css-shadow-parts/style-sharing.html.ini
new file mode 100644
index 00000000000..1bb66f211bf
--- /dev/null
+++ b/tests/wpt/meta/css/css-shadow-parts/style-sharing.html.ini
@@ -0,0 +1,3 @@
+[style-sharing.html]
+ [Part in selected host does not incorrectly share style with non-part]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/responsive-iframe-cross-origin.sub.tentative.html.ini b/tests/wpt/meta/css/css-sizing/responsive-iframe-cross-origin.sub.tentative.html.ini
new file mode 100644
index 00000000000..9682a816732
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/responsive-iframe-cross-origin.sub.tentative.html.ini
@@ -0,0 +1,2 @@
+[responsive-iframe-cross-origin.sub.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-sizing/responsive-iframe.tentative.html.ini b/tests/wpt/meta/css/css-sizing/responsive-iframe.tentative.html.ini
new file mode 100644
index 00000000000..768b6a9e977
--- /dev/null
+++ b/tests/wpt/meta/css/css-sizing/responsive-iframe.tentative.html.ini
@@ -0,0 +1,2 @@
+[responsive-iframe.tentative.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini b/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini
new file mode 100644
index 00000000000..55805c45ee2
--- /dev/null
+++ b/tests/wpt/meta/css/css-tables/table-cell-overflow-auto-scrolled.html.ini
@@ -0,0 +1,2 @@
+[table-cell-overflow-auto-scrolled.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-text/text-autospace/text-autospace-vs-001.html.ini b/tests/wpt/meta/css/css-text/text-autospace/text-autospace-vs-001.html.ini
new file mode 100644
index 00000000000..04071c4d8b3
--- /dev/null
+++ b/tests/wpt/meta/css/css-text/text-autospace/text-autospace-vs-001.html.ini
@@ -0,0 +1,2 @@
+[text-autospace-vs-001.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-text/word-break/word-break-keep-all-u002d.html.ini b/tests/wpt/meta/css/css-text/word-break/word-break-keep-all-u002d.html.ini
new file mode 100644
index 00000000000..5de432ffdee
--- /dev/null
+++ b/tests/wpt/meta/css/css-text/word-break/word-break-keep-all-u002d.html.ini
@@ -0,0 +1,2 @@
+[word-break-keep-all-u002d.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/if-conditionals.html.ini b/tests/wpt/meta/css/css-values/if-conditionals.html.ini
index aa2285ad06e..25afac97880 100644
--- a/tests/wpt/meta/css/css-values/if-conditionals.html.ini
+++ b/tests/wpt/meta/css/css-values/if-conditionals.html.ini
@@ -442,3 +442,126 @@
[CSS Values and Units Test: CSS inline if() function 147]
expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 148]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 149]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 150]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 151]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 152]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 153]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 154]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 155]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 156]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 157]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 158]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 159]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 160]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 161]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 162]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 163]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 164]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 165]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 166]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 167]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 168]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 169]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 170]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 171]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 172]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 173]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 174]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 175]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 176]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 177]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 178]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 179]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 180]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 181]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 182]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 183]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 184]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 185]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 186]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 187]
+ expected: FAIL
+
+ [CSS Values and Units Test: CSS inline if() function 188]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/tree-counting/sibling-function-container-query-invalidation.html.ini b/tests/wpt/meta/css/css-values/tree-counting/sibling-function-container-query-invalidation.html.ini
new file mode 100644
index 00000000000..4d74ed1e63c
--- /dev/null
+++ b/tests/wpt/meta/css/css-values/tree-counting/sibling-function-container-query-invalidation.html.ini
@@ -0,0 +1,12 @@
+[sibling-function-container-query-invalidation.html]
+ [sibling-index() in @container width query matching after removal]
+ expected: FAIL
+
+ [sibling-count() in @container width query matching after removal]
+ expected: FAIL
+
+ [sibling-index() in @container style() query matching after removal]
+ expected: FAIL
+
+ [sibling-count() in @container style() query matching after removal]
+ expected: FAIL
diff --git a/tests/wpt/meta/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html.ini b/tests/wpt/meta/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html.ini
index 807d5e54ab4..4be76b217d3 100644
--- a/tests/wpt/meta/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html.ini
+++ b/tests/wpt/meta/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html.ini
@@ -52,3 +52,9 @@
[Removing a preceding sibling of #target reduces the sibling-index() for --color]
expected: FAIL
+
+ [Initially, the sibling-index() is 3 for --list]
+ expected: FAIL
+
+ [Removing a preceding sibling of #target reduces the sibling-index() for --list]
+ expected: FAIL
diff --git a/tests/wpt/meta/custom-elements/registries/idlharness.window.js.ini b/tests/wpt/meta/custom-elements/registries/idlharness.window.js.ini
index 44fbd51d205..e033f991a62 100644
--- a/tests/wpt/meta/custom-elements/registries/idlharness.window.js.ini
+++ b/tests/wpt/meta/custom-elements/registries/idlharness.window.js.ini
@@ -1,3 +1,42 @@
[idlharness.window.html]
[idl_test setup]
expected: FAIL
+
+ [idl_test validation]
+ expected: FAIL
+
+ [Partial interface CustomElementRegistry: member names are unique]
+ expected: FAIL
+
+ [Partial interface HTMLTemplateElement: member names are unique]
+ expected: FAIL
+
+ [Partial interface Element: member names are unique]
+ expected: FAIL
+
+ [Partial dictionary ShadowRootInit: member names are unique]
+ expected: FAIL
+
+ [Partial dictionary ElementCreationOptions: member names are unique]
+ expected: FAIL
+
+ [Document includes DocumentOrShadowRoot: member names are unique]
+ expected: FAIL
+
+ [ShadowRoot includes DocumentOrShadowRoot: member names are unique]
+ expected: FAIL
+
+ [HTMLTemplateElement interface: attribute shadowRootCustomElementRegistry]
+ expected: FAIL
+
+ [CustomElementRegistry interface: operation initialize(Node)]
+ expected: FAIL
+
+ [Document interface: attribute customElementRegistry]
+ expected: FAIL
+
+ [ShadowRoot interface: attribute customElementRegistry]
+ expected: FAIL
+
+ [Element interface: attribute customElementRegistry]
+ expected: FAIL
diff --git a/tests/wpt/meta/dom/ranges/Range-in-shadow-after-the-shadow-removed.html.ini b/tests/wpt/meta/dom/ranges/Range-in-shadow-after-the-shadow-removed.html.ini
deleted file mode 100644
index b2003b5c788..00000000000
--- a/tests/wpt/meta/dom/ranges/Range-in-shadow-after-the-shadow-removed.html.ini
+++ /dev/null
@@ -1,14 +0,0 @@
-[Range-in-shadow-after-the-shadow-removed.html?mode=closed]
- [Range in shadow should stay in the shadow after the host is removed]
- expected: FAIL
-
- [Range in shadow should stay in the shadow after the host parent is removed]
- expected: FAIL
-
-
-[Range-in-shadow-after-the-shadow-removed.html?mode=open]
- [Range in shadow should stay in the shadow after the host is removed]
- expected: FAIL
-
- [Range in shadow should stay in the shadow after the host parent is removed]
- expected: FAIL
diff --git a/tests/wpt/meta/domxpath/fn-lang.html.ini b/tests/wpt/meta/domxpath/fn-lang.html.ini
deleted file mode 100644
index 31754463dcc..00000000000
--- a/tests/wpt/meta/domxpath/fn-lang.html.ini
+++ /dev/null
@@ -1,21 +0,0 @@
-[fn-lang.html]
- [lang("en"): <root><match lang="en"></match></root>]
- expected: FAIL
-
- [lang("en"): <root><match lang="EN"></match></root>]
- expected: FAIL
-
- [lang("en"): <root><match lang="en-us"></match></root>]
- expected: FAIL
-
- [lang("en"): <root><unmatch></unmatch></root>]
- expected: FAIL
-
- [lang("ja"): <root lang="ja"><match></match></root>]
- expected: FAIL
-
- [lang("ja"): <root lang="ja-jp"><unmatch lang="ja_JP"></unmatch></root>]
- expected: FAIL
-
- [lang("ko"): <root><unmatch lang="Ko"></unmatch></root>]
- expected: FAIL
diff --git a/tests/wpt/meta/domxpath/node-sets.html.ini b/tests/wpt/meta/domxpath/node-sets.html.ini
deleted file mode 100644
index 856f22dd655..00000000000
--- a/tests/wpt/meta/domxpath/node-sets.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[node-sets.html]
- [| operator should evaluate both sides of expressions with the same context node]
- expected: FAIL
diff --git a/tests/wpt/meta/domxpath/text-html-attributes.html.ini b/tests/wpt/meta/domxpath/text-html-attributes.html.ini
index 803f418282a..7257f61a118 100644
--- a/tests/wpt/meta/domxpath/text-html-attributes.html.ini
+++ b/tests/wpt/meta/domxpath/text-html-attributes.html.ini
@@ -1,13 +1,7 @@
[text-html-attributes.html]
- [Select html element based on attribute]
- expected: FAIL
-
[Select html element based on attribute mixed case]
expected: FAIL
- [Select both HTML and SVG elements based on attribute]
- expected: FAIL
-
[Select HTML element with non-ascii attribute 1]
expected: FAIL
@@ -23,9 +17,6 @@
[Select both HTML and SVG elements based on mixed case attribute]
expected: FAIL
- [Select SVG elements with refX attribute]
- expected: FAIL
-
[Select SVG element with non-ascii attribute 1]
expected: FAIL
diff --git a/tests/wpt/meta/domxpath/xml_xpath_runner.html.ini b/tests/wpt/meta/domxpath/xml_xpath_runner.html.ini
deleted file mode 100644
index e7d698afb6b..00000000000
--- a/tests/wpt/meta/domxpath/xml_xpath_runner.html.ini
+++ /dev/null
@@ -1,3072 +0,0 @@
-[xml_xpath_runner.html]
- [XPath tests]
- expected: FAIL
-
- [XPath tests 1]
- expected: FAIL
-
- [XPath tests 2]
- expected: FAIL
-
- [XPath tests 3]
- expected: FAIL
-
- [XPath tests 4]
- expected: FAIL
-
- [XPath tests 5]
- expected: FAIL
-
- [XPath tests 6]
- expected: FAIL
-
- [XPath tests 7]
- expected: FAIL
-
- [XPath tests 8]
- expected: FAIL
-
- [XPath tests 9]
- expected: FAIL
-
- [XPath tests 10]
- expected: FAIL
-
- [XPath tests 11]
- expected: FAIL
-
- [XPath tests 12]
- expected: FAIL
-
- [XPath tests 13]
- expected: FAIL
-
- [XPath tests 14]
- expected: FAIL
-
- [XPath tests 15]
- expected: FAIL
-
- [XPath tests 16]
- expected: FAIL
-
- [XPath tests 17]
- expected: FAIL
-
- [XPath tests 18]
- expected: FAIL
-
- [XPath tests 19]
- expected: FAIL
-
- [XPath tests 20]
- expected: FAIL
-
- [XPath tests 21]
- expected: FAIL
-
- [XPath tests 22]
- expected: FAIL
-
- [XPath tests 23]
- expected: FAIL
-
- [XPath tests 24]
- expected: FAIL
-
- [XPath tests 25]
- expected: FAIL
-
- [XPath tests 26]
- expected: FAIL
-
- [XPath tests 27]
- expected: FAIL
-
- [XPath tests 28]
- expected: FAIL
-
- [XPath tests 29]
- expected: FAIL
-
- [XPath tests 30]
- expected: FAIL
-
- [XPath tests 31]
- expected: FAIL
-
- [XPath tests 32]
- expected: FAIL
-
- [XPath tests 33]
- expected: FAIL
-
- [XPath tests 34]
- expected: FAIL
-
- [XPath tests 35]
- expected: FAIL
-
- [XPath tests 36]
- expected: FAIL
-
- [XPath tests 37]
- expected: FAIL
-
- [XPath tests 38]
- expected: FAIL
-
- [XPath tests 39]
- expected: FAIL
-
- [XPath tests 40]
- expected: FAIL
-
- [XPath tests 41]
- expected: FAIL
-
- [XPath tests 42]
- expected: FAIL
-
- [XPath tests 43]
- expected: FAIL
-
- [XPath tests 44]
- expected: FAIL
-
- [XPath tests 45]
- expected: FAIL
-
- [XPath tests 46]
- expected: FAIL
-
- [XPath tests 47]
- expected: FAIL
-
- [XPath tests 48]
- expected: FAIL
-
- [XPath tests 49]
- expected: FAIL
-
- [XPath tests 50]
- expected: FAIL
-
- [XPath tests 51]
- expected: FAIL
-
- [XPath tests 52]
- expected: FAIL
-
- [XPath tests 53]
- expected: FAIL
-
- [XPath tests 54]
- expected: FAIL
-
- [XPath tests 55]
- expected: FAIL
-
- [XPath tests 56]
- expected: FAIL
-
- [XPath tests 57]
- expected: FAIL
-
- [XPath tests 58]
- expected: FAIL
-
- [XPath tests 59]
- expected: FAIL
-
- [XPath tests 60]
- expected: FAIL
-
- [XPath tests 61]
- expected: FAIL
-
- [XPath tests 62]
- expected: FAIL
-
- [XPath tests 63]
- expected: FAIL
-
- [XPath tests 64]
- expected: FAIL
-
- [XPath tests 65]
- expected: FAIL
-
- [XPath tests 66]
- expected: FAIL
-
- [XPath tests 67]
- expected: FAIL
-
- [XPath tests 68]
- expected: FAIL
-
- [XPath tests 69]
- expected: FAIL
-
- [XPath tests 70]
- expected: FAIL
-
- [XPath tests 71]
- expected: FAIL
-
- [XPath tests 72]
- expected: FAIL
-
- [XPath tests 73]
- expected: FAIL
-
- [XPath tests 74]
- expected: FAIL
-
- [XPath tests 75]
- expected: FAIL
-
- [XPath tests 76]
- expected: FAIL
-
- [XPath tests 77]
- expected: FAIL
-
- [XPath tests 78]
- expected: FAIL
-
- [XPath tests 79]
- expected: FAIL
-
- [XPath tests 80]
- expected: FAIL
-
- [XPath tests 81]
- expected: FAIL
-
- [XPath tests 82]
- expected: FAIL
-
- [XPath tests 83]
- expected: FAIL
-
- [XPath tests 84]
- expected: FAIL
-
- [XPath tests 85]
- expected: FAIL
-
- [XPath tests 86]
- expected: FAIL
-
- [XPath tests 87]
- expected: FAIL
-
- [XPath tests 88]
- expected: FAIL
-
- [XPath tests 89]
- expected: FAIL
-
- [XPath tests 90]
- expected: FAIL
-
- [XPath tests 91]
- expected: FAIL
-
- [XPath tests 92]
- expected: FAIL
-
- [XPath tests 93]
- expected: FAIL
-
- [XPath tests 94]
- expected: FAIL
-
- [XPath tests 95]
- expected: FAIL
-
- [XPath tests 96]
- expected: FAIL
-
- [XPath tests 97]
- expected: FAIL
-
- [XPath tests 98]
- expected: FAIL
-
- [XPath tests 99]
- expected: FAIL
-
- [XPath tests 100]
- expected: FAIL
-
- [XPath tests 101]
- expected: FAIL
-
- [XPath tests 102]
- expected: FAIL
-
- [XPath tests 103]
- expected: FAIL
-
- [XPath tests 104]
- expected: FAIL
-
- [XPath tests 105]
- expected: FAIL
-
- [XPath tests 106]
- expected: FAIL
-
- [XPath tests 107]
- expected: FAIL
-
- [XPath tests 108]
- expected: FAIL
-
- [XPath tests 109]
- expected: FAIL
-
- [XPath tests 110]
- expected: FAIL
-
- [XPath tests 111]
- expected: FAIL
-
- [XPath tests 112]
- expected: FAIL
-
- [XPath tests 113]
- expected: FAIL
-
- [XPath tests 114]
- expected: FAIL
-
- [XPath tests 115]
- expected: FAIL
-
- [XPath tests 116]
- expected: FAIL
-
- [XPath tests 117]
- expected: FAIL
-
- [XPath tests 118]
- expected: FAIL
-
- [XPath tests 119]
- expected: FAIL
-
- [XPath tests 120]
- expected: FAIL
-
- [XPath tests 121]
- expected: FAIL
-
- [XPath tests 122]
- expected: FAIL
-
- [XPath tests 123]
- expected: FAIL
-
- [XPath tests 124]
- expected: FAIL
-
- [XPath tests 125]
- expected: FAIL
-
- [XPath tests 126]
- expected: FAIL
-
- [XPath tests 127]
- expected: FAIL
-
- [XPath tests 128]
- expected: FAIL
-
- [XPath tests 129]
- expected: FAIL
-
- [XPath tests 130]
- expected: FAIL
-
- [XPath tests 131]
- expected: FAIL
-
- [XPath tests 132]
- expected: FAIL
-
- [XPath tests 133]
- expected: FAIL
-
- [XPath tests 134]
- expected: FAIL
-
- [XPath tests 135]
- expected: FAIL
-
- [XPath tests 136]
- expected: FAIL
-
- [XPath tests 137]
- expected: FAIL
-
- [XPath tests 138]
- expected: FAIL
-
- [XPath tests 139]
- expected: FAIL
-
- [XPath tests 140]
- expected: FAIL
-
- [XPath tests 141]
- expected: FAIL
-
- [XPath tests 142]
- expected: FAIL
-
- [XPath tests 143]
- expected: FAIL
-
- [XPath tests 144]
- expected: FAIL
-
- [XPath tests 145]
- expected: FAIL
-
- [XPath tests 146]
- expected: FAIL
-
- [XPath tests 147]
- expected: FAIL
-
- [XPath tests 148]
- expected: FAIL
-
- [XPath tests 149]
- expected: FAIL
-
- [XPath tests 150]
- expected: FAIL
-
- [XPath tests 151]
- expected: FAIL
-
- [XPath tests 152]
- expected: FAIL
-
- [XPath tests 153]
- expected: FAIL
-
- [XPath tests 154]
- expected: FAIL
-
- [XPath tests 155]
- expected: FAIL
-
- [XPath tests 156]
- expected: FAIL
-
- [XPath tests 157]
- expected: FAIL
-
- [XPath tests 158]
- expected: FAIL
-
- [XPath tests 159]
- expected: FAIL
-
- [XPath tests 160]
- expected: FAIL
-
- [XPath tests 161]
- expected: FAIL
-
- [XPath tests 162]
- expected: FAIL
-
- [XPath tests 163]
- expected: FAIL
-
- [XPath tests 164]
- expected: FAIL
-
- [XPath tests 165]
- expected: FAIL
-
- [XPath tests 166]
- expected: FAIL
-
- [XPath tests 167]
- expected: FAIL
-
- [XPath tests 168]
- expected: FAIL
-
- [XPath tests 169]
- expected: FAIL
-
- [XPath tests 170]
- expected: FAIL
-
- [XPath tests 171]
- expected: FAIL
-
- [XPath tests 172]
- expected: FAIL
-
- [XPath tests 173]
- expected: FAIL
-
- [XPath tests 174]
- expected: FAIL
-
- [XPath tests 175]
- expected: FAIL
-
- [XPath tests 176]
- expected: FAIL
-
- [XPath tests 177]
- expected: FAIL
-
- [XPath tests 178]
- expected: FAIL
-
- [XPath tests 179]
- expected: FAIL
-
- [XPath tests 180]
- expected: FAIL
-
- [XPath tests 181]
- expected: FAIL
-
- [XPath tests 182]
- expected: FAIL
-
- [XPath tests 183]
- expected: FAIL
-
- [XPath tests 184]
- expected: FAIL
-
- [XPath tests 185]
- expected: FAIL
-
- [XPath tests 186]
- expected: FAIL
-
- [XPath tests 187]
- expected: FAIL
-
- [XPath tests 188]
- expected: FAIL
-
- [XPath tests 189]
- expected: FAIL
-
- [XPath tests 190]
- expected: FAIL
-
- [XPath tests 191]
- expected: FAIL
-
- [XPath tests 192]
- expected: FAIL
-
- [XPath tests 193]
- expected: FAIL
-
- [XPath tests 194]
- expected: FAIL
-
- [XPath tests 195]
- expected: FAIL
-
- [XPath tests 196]
- expected: FAIL
-
- [XPath tests 197]
- expected: FAIL
-
- [XPath tests 198]
- expected: FAIL
-
- [XPath tests 199]
- expected: FAIL
-
- [XPath tests 200]
- expected: FAIL
-
- [XPath tests 201]
- expected: FAIL
-
- [XPath tests 202]
- expected: FAIL
-
- [XPath tests 203]
- expected: FAIL
-
- [XPath tests 204]
- expected: FAIL
-
- [XPath tests 205]
- expected: FAIL
-
- [XPath tests 206]
- expected: FAIL
-
- [XPath tests 207]
- expected: FAIL
-
- [XPath tests 208]
- expected: FAIL
-
- [XPath tests 209]
- expected: FAIL
-
- [XPath tests 210]
- expected: FAIL
-
- [XPath tests 211]
- expected: FAIL
-
- [XPath tests 212]
- expected: FAIL
-
- [XPath tests 213]
- expected: FAIL
-
- [XPath tests 214]
- expected: FAIL
-
- [XPath tests 215]
- expected: FAIL
-
- [XPath tests 216]
- expected: FAIL
-
- [XPath tests 217]
- expected: FAIL
-
- [XPath tests 218]
- expected: FAIL
-
- [XPath tests 219]
- expected: FAIL
-
- [XPath tests 220]
- expected: FAIL
-
- [XPath tests 221]
- expected: FAIL
-
- [XPath tests 222]
- expected: FAIL
-
- [XPath tests 223]
- expected: FAIL
-
- [XPath tests 224]
- expected: FAIL
-
- [XPath tests 225]
- expected: FAIL
-
- [XPath tests 226]
- expected: FAIL
-
- [XPath tests 227]
- expected: FAIL
-
- [XPath tests 228]
- expected: FAIL
-
- [XPath tests 229]
- expected: FAIL
-
- [XPath tests 230]
- expected: FAIL
-
- [XPath tests 231]
- expected: FAIL
-
- [XPath tests 232]
- expected: FAIL
-
- [XPath tests 233]
- expected: FAIL
-
- [XPath tests 234]
- expected: FAIL
-
- [XPath tests 235]
- expected: FAIL
-
- [XPath tests 236]
- expected: FAIL
-
- [XPath tests 237]
- expected: FAIL
-
- [XPath tests 238]
- expected: FAIL
-
- [XPath tests 239]
- expected: FAIL
-
- [XPath tests 240]
- expected: FAIL
-
- [XPath tests 241]
- expected: FAIL
-
- [XPath tests 242]
- expected: FAIL
-
- [XPath tests 243]
- expected: FAIL
-
- [XPath tests 244]
- expected: FAIL
-
- [XPath tests 245]
- expected: FAIL
-
- [XPath tests 246]
- expected: FAIL
-
- [XPath tests 247]
- expected: FAIL
-
- [XPath tests 248]
- expected: FAIL
-
- [XPath tests 249]
- expected: FAIL
-
- [XPath tests 250]
- expected: FAIL
-
- [XPath tests 251]
- expected: FAIL
-
- [XPath tests 252]
- expected: FAIL
-
- [XPath tests 253]
- expected: FAIL
-
- [XPath tests 254]
- expected: FAIL
-
- [XPath tests 255]
- expected: FAIL
-
- [XPath tests 256]
- expected: FAIL
-
- [XPath tests 257]
- expected: FAIL
-
- [XPath tests 258]
- expected: FAIL
-
- [XPath tests 259]
- expected: FAIL
-
- [XPath tests 260]
- expected: FAIL
-
- [XPath tests 261]
- expected: FAIL
-
- [XPath tests 262]
- expected: FAIL
-
- [XPath tests 263]
- expected: FAIL
-
- [XPath tests 264]
- expected: FAIL
-
- [XPath tests 265]
- expected: FAIL
-
- [XPath tests 266]
- expected: FAIL
-
- [XPath tests 267]
- expected: FAIL
-
- [XPath tests 268]
- expected: FAIL
-
- [XPath tests 269]
- expected: FAIL
-
- [XPath tests 270]
- expected: FAIL
-
- [XPath tests 271]
- expected: FAIL
-
- [XPath tests 272]
- expected: FAIL
-
- [XPath tests 273]
- expected: FAIL
-
- [XPath tests 274]
- expected: FAIL
-
- [XPath tests 275]
- expected: FAIL
-
- [XPath tests 276]
- expected: FAIL
-
- [XPath tests 277]
- expected: FAIL
-
- [XPath tests 278]
- expected: FAIL
-
- [XPath tests 279]
- expected: FAIL
-
- [XPath tests 280]
- expected: FAIL
-
- [XPath tests 281]
- expected: FAIL
-
- [XPath tests 282]
- expected: FAIL
-
- [XPath tests 283]
- expected: FAIL
-
- [XPath tests 284]
- expected: FAIL
-
- [XPath tests 285]
- expected: FAIL
-
- [XPath tests 286]
- expected: FAIL
-
- [XPath tests 287]
- expected: FAIL
-
- [XPath tests 288]
- expected: FAIL
-
- [XPath tests 289]
- expected: FAIL
-
- [XPath tests 290]
- expected: FAIL
-
- [XPath tests 291]
- expected: FAIL
-
- [XPath tests 292]
- expected: FAIL
-
- [XPath tests 293]
- expected: FAIL
-
- [XPath tests 294]
- expected: FAIL
-
- [XPath tests 295]
- expected: FAIL
-
- [XPath tests 296]
- expected: FAIL
-
- [XPath tests 297]
- expected: FAIL
-
- [XPath tests 298]
- expected: FAIL
-
- [XPath tests 299]
- expected: FAIL
-
- [XPath tests 300]
- expected: FAIL
-
- [XPath tests 301]
- expected: FAIL
-
- [XPath tests 302]
- expected: FAIL
-
- [XPath tests 303]
- expected: FAIL
-
- [XPath tests 304]
- expected: FAIL
-
- [XPath tests 305]
- expected: FAIL
-
- [XPath tests 306]
- expected: FAIL
-
- [XPath tests 307]
- expected: FAIL
-
- [XPath tests 308]
- expected: FAIL
-
- [XPath tests 309]
- expected: FAIL
-
- [XPath tests 310]
- expected: FAIL
-
- [XPath tests 311]
- expected: FAIL
-
- [XPath tests 312]
- expected: FAIL
-
- [XPath tests 313]
- expected: FAIL
-
- [XPath tests 314]
- expected: FAIL
-
- [XPath tests 315]
- expected: FAIL
-
- [XPath tests 316]
- expected: FAIL
-
- [XPath tests 317]
- expected: FAIL
-
- [XPath tests 318]
- expected: FAIL
-
- [XPath tests 319]
- expected: FAIL
-
- [XPath tests 320]
- expected: FAIL
-
- [XPath tests 321]
- expected: FAIL
-
- [XPath tests 322]
- expected: FAIL
-
- [XPath tests 323]
- expected: FAIL
-
- [XPath tests 324]
- expected: FAIL
-
- [XPath tests 325]
- expected: FAIL
-
- [XPath tests 326]
- expected: FAIL
-
- [XPath tests 327]
- expected: FAIL
-
- [XPath tests 328]
- expected: FAIL
-
- [XPath tests 329]
- expected: FAIL
-
- [XPath tests 330]
- expected: FAIL
-
- [XPath tests 331]
- expected: FAIL
-
- [XPath tests 332]
- expected: FAIL
-
- [XPath tests 333]
- expected: FAIL
-
- [XPath tests 334]
- expected: FAIL
-
- [XPath tests 335]
- expected: FAIL
-
- [XPath tests 336]
- expected: FAIL
-
- [XPath tests 337]
- expected: FAIL
-
- [XPath tests 338]
- expected: FAIL
-
- [XPath tests 339]
- expected: FAIL
-
- [XPath tests 340]
- expected: FAIL
-
- [XPath tests 341]
- expected: FAIL
-
- [XPath tests 342]
- expected: FAIL
-
- [XPath tests 343]
- expected: FAIL
-
- [XPath tests 344]
- expected: FAIL
-
- [XPath tests 345]
- expected: FAIL
-
- [XPath tests 346]
- expected: FAIL
-
- [XPath tests 347]
- expected: FAIL
-
- [XPath tests 348]
- expected: FAIL
-
- [XPath tests 349]
- expected: FAIL
-
- [XPath tests 350]
- expected: FAIL
-
- [XPath tests 351]
- expected: FAIL
-
- [XPath tests 352]
- expected: FAIL
-
- [XPath tests 353]
- expected: FAIL
-
- [XPath tests 354]
- expected: FAIL
-
- [XPath tests 355]
- expected: FAIL
-
- [XPath tests 356]
- expected: FAIL
-
- [XPath tests 357]
- expected: FAIL
-
- [XPath tests 358]
- expected: FAIL
-
- [XPath tests 359]
- expected: FAIL
-
- [XPath tests 360]
- expected: FAIL
-
- [XPath tests 361]
- expected: FAIL
-
- [XPath tests 362]
- expected: FAIL
-
- [XPath tests 363]
- expected: FAIL
-
- [XPath tests 364]
- expected: FAIL
-
- [XPath tests 365]
- expected: FAIL
-
- [XPath tests 366]
- expected: FAIL
-
- [XPath tests 367]
- expected: FAIL
-
- [XPath tests 368]
- expected: FAIL
-
- [XPath tests 369]
- expected: FAIL
-
- [XPath tests 370]
- expected: FAIL
-
- [XPath tests 371]
- expected: FAIL
-
- [XPath tests 372]
- expected: FAIL
-
- [XPath tests 373]
- expected: FAIL
-
- [XPath tests 374]
- expected: FAIL
-
- [XPath tests 375]
- expected: FAIL
-
- [XPath tests 376]
- expected: FAIL
-
- [XPath tests 377]
- expected: FAIL
-
- [XPath tests 378]
- expected: FAIL
-
- [XPath tests 379]
- expected: FAIL
-
- [XPath tests 380]
- expected: FAIL
-
- [XPath tests 381]
- expected: FAIL
-
- [XPath tests 382]
- expected: FAIL
-
- [XPath tests 383]
- expected: FAIL
-
- [XPath tests 384]
- expected: FAIL
-
- [XPath tests 385]
- expected: FAIL
-
- [XPath tests 386]
- expected: FAIL
-
- [XPath tests 387]
- expected: FAIL
-
- [XPath tests 388]
- expected: FAIL
-
- [XPath tests 389]
- expected: FAIL
-
- [XPath tests 390]
- expected: FAIL
-
- [XPath tests 391]
- expected: FAIL
-
- [XPath tests 392]
- expected: FAIL
-
- [XPath tests 393]
- expected: FAIL
-
- [XPath tests 394]
- expected: FAIL
-
- [XPath tests 395]
- expected: FAIL
-
- [XPath tests 396]
- expected: FAIL
-
- [XPath tests 397]
- expected: FAIL
-
- [XPath tests 398]
- expected: FAIL
-
- [XPath tests 399]
- expected: FAIL
-
- [XPath tests 400]
- expected: FAIL
-
- [XPath tests 401]
- expected: FAIL
-
- [XPath tests 402]
- expected: FAIL
-
- [XPath tests 403]
- expected: FAIL
-
- [XPath tests 404]
- expected: FAIL
-
- [XPath tests 405]
- expected: FAIL
-
- [XPath tests 406]
- expected: FAIL
-
- [XPath tests 407]
- expected: FAIL
-
- [XPath tests 408]
- expected: FAIL
-
- [XPath tests 409]
- expected: FAIL
-
- [XPath tests 410]
- expected: FAIL
-
- [XPath tests 411]
- expected: FAIL
-
- [XPath tests 412]
- expected: FAIL
-
- [XPath tests 413]
- expected: FAIL
-
- [XPath tests 414]
- expected: FAIL
-
- [XPath tests 415]
- expected: FAIL
-
- [XPath tests 416]
- expected: FAIL
-
- [XPath tests 417]
- expected: FAIL
-
- [XPath tests 418]
- expected: FAIL
-
- [XPath tests 419]
- expected: FAIL
-
- [XPath tests 420]
- expected: FAIL
-
- [XPath tests 421]
- expected: FAIL
-
- [XPath tests 422]
- expected: FAIL
-
- [XPath tests 423]
- expected: FAIL
-
- [XPath tests 424]
- expected: FAIL
-
- [XPath tests 425]
- expected: FAIL
-
- [XPath tests 426]
- expected: FAIL
-
- [XPath tests 427]
- expected: FAIL
-
- [XPath tests 428]
- expected: FAIL
-
- [XPath tests 429]
- expected: FAIL
-
- [XPath tests 430]
- expected: FAIL
-
- [XPath tests 431]
- expected: FAIL
-
- [XPath tests 432]
- expected: FAIL
-
- [XPath tests 433]
- expected: FAIL
-
- [XPath tests 434]
- expected: FAIL
-
- [XPath tests 435]
- expected: FAIL
-
- [XPath tests 436]
- expected: FAIL
-
- [XPath tests 437]
- expected: FAIL
-
- [XPath tests 438]
- expected: FAIL
-
- [XPath tests 439]
- expected: FAIL
-
- [XPath tests 440]
- expected: FAIL
-
- [XPath tests 441]
- expected: FAIL
-
- [XPath tests 442]
- expected: FAIL
-
- [XPath tests 443]
- expected: FAIL
-
- [XPath tests 444]
- expected: FAIL
-
- [XPath tests 445]
- expected: FAIL
-
- [XPath tests 446]
- expected: FAIL
-
- [XPath tests 447]
- expected: FAIL
-
- [XPath tests 448]
- expected: FAIL
-
- [XPath tests 449]
- expected: FAIL
-
- [XPath tests 450]
- expected: FAIL
-
- [XPath tests 451]
- expected: FAIL
-
- [XPath tests 452]
- expected: FAIL
-
- [XPath tests 453]
- expected: FAIL
-
- [XPath tests 454]
- expected: FAIL
-
- [XPath tests 455]
- expected: FAIL
-
- [XPath tests 456]
- expected: FAIL
-
- [XPath tests 457]
- expected: FAIL
-
- [XPath tests 458]
- expected: FAIL
-
- [XPath tests 459]
- expected: FAIL
-
- [XPath tests 460]
- expected: FAIL
-
- [XPath tests 461]
- expected: FAIL
-
- [XPath tests 462]
- expected: FAIL
-
- [XPath tests 463]
- expected: FAIL
-
- [XPath tests 464]
- expected: FAIL
-
- [XPath tests 465]
- expected: FAIL
-
- [XPath tests 466]
- expected: FAIL
-
- [XPath tests 467]
- expected: FAIL
-
- [XPath tests 468]
- expected: FAIL
-
- [XPath tests 469]
- expected: FAIL
-
- [XPath tests 470]
- expected: FAIL
-
- [XPath tests 471]
- expected: FAIL
-
- [XPath tests 472]
- expected: FAIL
-
- [XPath tests 473]
- expected: FAIL
-
- [XPath tests 474]
- expected: FAIL
-
- [XPath tests 475]
- expected: FAIL
-
- [XPath tests 476]
- expected: FAIL
-
- [XPath tests 477]
- expected: FAIL
-
- [XPath tests 478]
- expected: FAIL
-
- [XPath tests 479]
- expected: FAIL
-
- [XPath tests 480]
- expected: FAIL
-
- [XPath tests 481]
- expected: FAIL
-
- [XPath tests 482]
- expected: FAIL
-
- [XPath tests 483]
- expected: FAIL
-
- [XPath tests 484]
- expected: FAIL
-
- [XPath tests 485]
- expected: FAIL
-
- [XPath tests 486]
- expected: FAIL
-
- [XPath tests 487]
- expected: FAIL
-
- [XPath tests 488]
- expected: FAIL
-
- [XPath tests 489]
- expected: FAIL
-
- [XPath tests 490]
- expected: FAIL
-
- [XPath tests 491]
- expected: FAIL
-
- [XPath tests 492]
- expected: FAIL
-
- [XPath tests 493]
- expected: FAIL
-
- [XPath tests 494]
- expected: FAIL
-
- [XPath tests 495]
- expected: FAIL
-
- [XPath tests 496]
- expected: FAIL
-
- [XPath tests 497]
- expected: FAIL
-
- [XPath tests 498]
- expected: FAIL
-
- [XPath tests 499]
- expected: FAIL
-
- [XPath tests 500]
- expected: FAIL
-
- [XPath tests 501]
- expected: FAIL
-
- [XPath tests 502]
- expected: FAIL
-
- [XPath tests 503]
- expected: FAIL
-
- [XPath tests 504]
- expected: FAIL
-
- [XPath tests 505]
- expected: FAIL
-
- [XPath tests 506]
- expected: FAIL
-
- [XPath tests 507]
- expected: FAIL
-
- [XPath tests 508]
- expected: FAIL
-
- [XPath tests 509]
- expected: FAIL
-
- [XPath tests 510]
- expected: FAIL
-
- [XPath tests 511]
- expected: FAIL
-
- [XPath tests 512]
- expected: FAIL
-
- [XPath tests 513]
- expected: FAIL
-
- [XPath tests 514]
- expected: FAIL
-
- [XPath tests 515]
- expected: FAIL
-
- [XPath tests 516]
- expected: FAIL
-
- [XPath tests 517]
- expected: FAIL
-
- [XPath tests 518]
- expected: FAIL
-
- [XPath tests 519]
- expected: FAIL
-
- [XPath tests 520]
- expected: FAIL
-
- [XPath tests 521]
- expected: FAIL
-
- [XPath tests 522]
- expected: FAIL
-
- [XPath tests 523]
- expected: FAIL
-
- [XPath tests 524]
- expected: FAIL
-
- [XPath tests 525]
- expected: FAIL
-
- [XPath tests 526]
- expected: FAIL
-
- [XPath tests 527]
- expected: FAIL
-
- [XPath tests 528]
- expected: FAIL
-
- [XPath tests 529]
- expected: FAIL
-
- [XPath tests 530]
- expected: FAIL
-
- [XPath tests 531]
- expected: FAIL
-
- [XPath tests 532]
- expected: FAIL
-
- [XPath tests 533]
- expected: FAIL
-
- [XPath tests 534]
- expected: FAIL
-
- [XPath tests 535]
- expected: FAIL
-
- [XPath tests 536]
- expected: FAIL
-
- [XPath tests 537]
- expected: FAIL
-
- [XPath tests 538]
- expected: FAIL
-
- [XPath tests 539]
- expected: FAIL
-
- [XPath tests 540]
- expected: FAIL
-
- [XPath tests 541]
- expected: FAIL
-
- [XPath tests 542]
- expected: FAIL
-
- [XPath tests 543]
- expected: FAIL
-
- [XPath tests 544]
- expected: FAIL
-
- [XPath tests 545]
- expected: FAIL
-
- [XPath tests 546]
- expected: FAIL
-
- [XPath tests 547]
- expected: FAIL
-
- [XPath tests 548]
- expected: FAIL
-
- [XPath tests 549]
- expected: FAIL
-
- [XPath tests 550]
- expected: FAIL
-
- [XPath tests 551]
- expected: FAIL
-
- [XPath tests 552]
- expected: FAIL
-
- [XPath tests 553]
- expected: FAIL
-
- [XPath tests 554]
- expected: FAIL
-
- [XPath tests 555]
- expected: FAIL
-
- [XPath tests 556]
- expected: FAIL
-
- [XPath tests 557]
- expected: FAIL
-
- [XPath tests 558]
- expected: FAIL
-
- [XPath tests 559]
- expected: FAIL
-
- [XPath tests 560]
- expected: FAIL
-
- [XPath tests 561]
- expected: FAIL
-
- [XPath tests 562]
- expected: FAIL
-
- [XPath tests 563]
- expected: FAIL
-
- [XPath tests 564]
- expected: FAIL
-
- [XPath tests 565]
- expected: FAIL
-
- [XPath tests 566]
- expected: FAIL
-
- [XPath tests 567]
- expected: FAIL
-
- [XPath tests 568]
- expected: FAIL
-
- [XPath tests 569]
- expected: FAIL
-
- [XPath tests 570]
- expected: FAIL
-
- [XPath tests 571]
- expected: FAIL
-
- [XPath tests 572]
- expected: FAIL
-
- [XPath tests 573]
- expected: FAIL
-
- [XPath tests 574]
- expected: FAIL
-
- [XPath tests 575]
- expected: FAIL
-
- [XPath tests 576]
- expected: FAIL
-
- [XPath tests 577]
- expected: FAIL
-
- [XPath tests 578]
- expected: FAIL
-
- [XPath tests 579]
- expected: FAIL
-
- [XPath tests 580]
- expected: FAIL
-
- [XPath tests 581]
- expected: FAIL
-
- [XPath tests 582]
- expected: FAIL
-
- [XPath tests 583]
- expected: FAIL
-
- [XPath tests 584]
- expected: FAIL
-
- [XPath tests 585]
- expected: FAIL
-
- [XPath tests 586]
- expected: FAIL
-
- [XPath tests 587]
- expected: FAIL
-
- [XPath tests 588]
- expected: FAIL
-
- [XPath tests 589]
- expected: FAIL
-
- [XPath tests 590]
- expected: FAIL
-
- [XPath tests 591]
- expected: FAIL
-
- [XPath tests 592]
- expected: FAIL
-
- [XPath tests 593]
- expected: FAIL
-
- [XPath tests 594]
- expected: FAIL
-
- [XPath tests 595]
- expected: FAIL
-
- [XPath tests 596]
- expected: FAIL
-
- [XPath tests 597]
- expected: FAIL
-
- [XPath tests 598]
- expected: FAIL
-
- [XPath tests 599]
- expected: FAIL
-
- [XPath tests 600]
- expected: FAIL
-
- [XPath tests 601]
- expected: FAIL
-
- [XPath tests 602]
- expected: FAIL
-
- [XPath tests 603]
- expected: FAIL
-
- [XPath tests 604]
- expected: FAIL
-
- [XPath tests 605]
- expected: FAIL
-
- [XPath tests 606]
- expected: FAIL
-
- [XPath tests 607]
- expected: FAIL
-
- [XPath tests 608]
- expected: FAIL
-
- [XPath tests 609]
- expected: FAIL
-
- [XPath tests 610]
- expected: FAIL
-
- [XPath tests 611]
- expected: FAIL
-
- [XPath tests 612]
- expected: FAIL
-
- [XPath tests 613]
- expected: FAIL
-
- [XPath tests 614]
- expected: FAIL
-
- [XPath tests 615]
- expected: FAIL
-
- [XPath tests 616]
- expected: FAIL
-
- [XPath tests 617]
- expected: FAIL
-
- [XPath tests 618]
- expected: FAIL
-
- [XPath tests 619]
- expected: FAIL
-
- [XPath tests 620]
- expected: FAIL
-
- [XPath tests 621]
- expected: FAIL
-
- [XPath tests 622]
- expected: FAIL
-
- [XPath tests 623]
- expected: FAIL
-
- [XPath tests 624]
- expected: FAIL
-
- [XPath tests 625]
- expected: FAIL
-
- [XPath tests 626]
- expected: FAIL
-
- [XPath tests 627]
- expected: FAIL
-
- [XPath tests 628]
- expected: FAIL
-
- [XPath tests 629]
- expected: FAIL
-
- [XPath tests 630]
- expected: FAIL
-
- [XPath tests 631]
- expected: FAIL
-
- [XPath tests 632]
- expected: FAIL
-
- [XPath tests 633]
- expected: FAIL
-
- [XPath tests 634]
- expected: FAIL
-
- [XPath tests 635]
- expected: FAIL
-
- [XPath tests 636]
- expected: FAIL
-
- [XPath tests 637]
- expected: FAIL
-
- [XPath tests 638]
- expected: FAIL
-
- [XPath tests 639]
- expected: FAIL
-
- [XPath tests 640]
- expected: FAIL
-
- [XPath tests 641]
- expected: FAIL
-
- [XPath tests 642]
- expected: FAIL
-
- [XPath tests 643]
- expected: FAIL
-
- [XPath tests 644]
- expected: FAIL
-
- [XPath tests 645]
- expected: FAIL
-
- [XPath tests 646]
- expected: FAIL
-
- [XPath tests 647]
- expected: FAIL
-
- [XPath tests 648]
- expected: FAIL
-
- [XPath tests 649]
- expected: FAIL
-
- [XPath tests 650]
- expected: FAIL
-
- [XPath tests 651]
- expected: FAIL
-
- [XPath tests 652]
- expected: FAIL
-
- [XPath tests 653]
- expected: FAIL
-
- [XPath tests 654]
- expected: FAIL
-
- [XPath tests 655]
- expected: FAIL
-
- [XPath tests 656]
- expected: FAIL
-
- [XPath tests 657]
- expected: FAIL
-
- [XPath tests 658]
- expected: FAIL
-
- [XPath tests 659]
- expected: FAIL
-
- [XPath tests 660]
- expected: FAIL
-
- [XPath tests 661]
- expected: FAIL
-
- [XPath tests 662]
- expected: FAIL
-
- [XPath tests 663]
- expected: FAIL
-
- [XPath tests 664]
- expected: FAIL
-
- [XPath tests 665]
- expected: FAIL
-
- [XPath tests 666]
- expected: FAIL
-
- [XPath tests 667]
- expected: FAIL
-
- [XPath tests 668]
- expected: FAIL
-
- [XPath tests 669]
- expected: FAIL
-
- [XPath tests 670]
- expected: FAIL
-
- [XPath tests 671]
- expected: FAIL
-
- [XPath tests 672]
- expected: FAIL
-
- [XPath tests 673]
- expected: FAIL
-
- [XPath tests 674]
- expected: FAIL
-
- [XPath tests 675]
- expected: FAIL
-
- [XPath tests 676]
- expected: FAIL
-
- [XPath tests 677]
- expected: FAIL
-
- [XPath tests 678]
- expected: FAIL
-
- [XPath tests 679]
- expected: FAIL
-
- [XPath tests 680]
- expected: FAIL
-
- [XPath tests 681]
- expected: FAIL
-
- [XPath tests 682]
- expected: FAIL
-
- [XPath tests 683]
- expected: FAIL
-
- [XPath tests 684]
- expected: FAIL
-
- [XPath tests 685]
- expected: FAIL
-
- [XPath tests 686]
- expected: FAIL
-
- [XPath tests 687]
- expected: FAIL
-
- [XPath tests 688]
- expected: FAIL
-
- [XPath tests 689]
- expected: FAIL
-
- [XPath tests 690]
- expected: FAIL
-
- [XPath tests 691]
- expected: FAIL
-
- [XPath tests 692]
- expected: FAIL
-
- [XPath tests 693]
- expected: FAIL
-
- [XPath tests 694]
- expected: FAIL
-
- [XPath tests 695]
- expected: FAIL
-
- [XPath tests 696]
- expected: FAIL
-
- [XPath tests 697]
- expected: FAIL
-
- [XPath tests 698]
- expected: FAIL
-
- [XPath tests 699]
- expected: FAIL
-
- [XPath tests 700]
- expected: FAIL
-
- [XPath tests 701]
- expected: FAIL
-
- [XPath tests 702]
- expected: FAIL
-
- [XPath tests 703]
- expected: FAIL
-
- [XPath tests 704]
- expected: FAIL
-
- [XPath tests 705]
- expected: FAIL
-
- [XPath tests 706]
- expected: FAIL
-
- [XPath tests 707]
- expected: FAIL
-
- [XPath tests 708]
- expected: FAIL
-
- [XPath tests 709]
- expected: FAIL
-
- [XPath tests 710]
- expected: FAIL
-
- [XPath tests 711]
- expected: FAIL
-
- [XPath tests 712]
- expected: FAIL
-
- [XPath tests 713]
- expected: FAIL
-
- [XPath tests 714]
- expected: FAIL
-
- [XPath tests 715]
- expected: FAIL
-
- [XPath tests 716]
- expected: FAIL
-
- [XPath tests 717]
- expected: FAIL
-
- [XPath tests 718]
- expected: FAIL
-
- [XPath tests 719]
- expected: FAIL
-
- [XPath tests 720]
- expected: FAIL
-
- [XPath tests 721]
- expected: FAIL
-
- [XPath tests 722]
- expected: FAIL
-
- [XPath tests 723]
- expected: FAIL
-
- [XPath tests 724]
- expected: FAIL
-
- [XPath tests 725]
- expected: FAIL
-
- [XPath tests 726]
- expected: FAIL
-
- [XPath tests 727]
- expected: FAIL
-
- [XPath tests 728]
- expected: FAIL
-
- [XPath tests 729]
- expected: FAIL
-
- [XPath tests 730]
- expected: FAIL
-
- [XPath tests 731]
- expected: FAIL
-
- [XPath tests 732]
- expected: FAIL
-
- [XPath tests 733]
- expected: FAIL
-
- [XPath tests 734]
- expected: FAIL
-
- [XPath tests 735]
- expected: FAIL
-
- [XPath tests 736]
- expected: FAIL
-
- [XPath tests 737]
- expected: FAIL
-
- [XPath tests 738]
- expected: FAIL
-
- [XPath tests 739]
- expected: FAIL
-
- [XPath tests 740]
- expected: FAIL
-
- [XPath tests 741]
- expected: FAIL
-
- [XPath tests 742]
- expected: FAIL
-
- [XPath tests 743]
- expected: FAIL
-
- [XPath tests 744]
- expected: FAIL
-
- [XPath tests 745]
- expected: FAIL
-
- [XPath tests 746]
- expected: FAIL
-
- [XPath tests 747]
- expected: FAIL
-
- [XPath tests 748]
- expected: FAIL
-
- [XPath tests 749]
- expected: FAIL
-
- [XPath tests 750]
- expected: FAIL
-
- [XPath tests 751]
- expected: FAIL
-
- [XPath tests 752]
- expected: FAIL
-
- [XPath tests 753]
- expected: FAIL
-
- [XPath tests 754]
- expected: FAIL
-
- [XPath tests 755]
- expected: FAIL
-
- [XPath tests 756]
- expected: FAIL
-
- [XPath tests 757]
- expected: FAIL
-
- [XPath tests 758]
- expected: FAIL
-
- [XPath tests 759]
- expected: FAIL
-
- [XPath tests 760]
- expected: FAIL
-
- [XPath tests 761]
- expected: FAIL
-
- [XPath tests 762]
- expected: FAIL
-
- [XPath tests 763]
- expected: FAIL
-
- [XPath tests 764]
- expected: FAIL
-
- [XPath tests 765]
- expected: FAIL
-
- [XPath tests 766]
- expected: FAIL
-
- [XPath tests 767]
- expected: FAIL
-
- [XPath tests 768]
- expected: FAIL
-
- [XPath tests 769]
- expected: FAIL
-
- [XPath tests 770]
- expected: FAIL
-
- [XPath tests 771]
- expected: FAIL
-
- [XPath tests 772]
- expected: FAIL
-
- [XPath tests 773]
- expected: FAIL
-
- [XPath tests 774]
- expected: FAIL
-
- [XPath tests 775]
- expected: FAIL
-
- [XPath tests 776]
- expected: FAIL
-
- [XPath tests 777]
- expected: FAIL
-
- [XPath tests 778]
- expected: FAIL
-
- [XPath tests 779]
- expected: FAIL
-
- [XPath tests 780]
- expected: FAIL
-
- [XPath tests 781]
- expected: FAIL
-
- [XPath tests 782]
- expected: FAIL
-
- [XPath tests 783]
- expected: FAIL
-
- [XPath tests 784]
- expected: FAIL
-
- [XPath tests 785]
- expected: FAIL
-
- [XPath tests 786]
- expected: FAIL
-
- [XPath tests 787]
- expected: FAIL
-
- [XPath tests 788]
- expected: FAIL
-
- [XPath tests 789]
- expected: FAIL
-
- [XPath tests 790]
- expected: FAIL
-
- [XPath tests 791]
- expected: FAIL
-
- [XPath tests 792]
- expected: FAIL
-
- [XPath tests 793]
- expected: FAIL
-
- [XPath tests 794]
- expected: FAIL
-
- [XPath tests 795]
- expected: FAIL
-
- [XPath tests 796]
- expected: FAIL
-
- [XPath tests 797]
- expected: FAIL
-
- [XPath tests 798]
- expected: FAIL
-
- [XPath tests 799]
- expected: FAIL
-
- [XPath tests 800]
- expected: FAIL
-
- [XPath tests 801]
- expected: FAIL
-
- [XPath tests 802]
- expected: FAIL
-
- [XPath tests 803]
- expected: FAIL
-
- [XPath tests 804]
- expected: FAIL
-
- [XPath tests 805]
- expected: FAIL
-
- [XPath tests 806]
- expected: FAIL
-
- [XPath tests 807]
- expected: FAIL
-
- [XPath tests 808]
- expected: FAIL
-
- [XPath tests 809]
- expected: FAIL
-
- [XPath tests 810]
- expected: FAIL
-
- [XPath tests 811]
- expected: FAIL
-
- [XPath tests 812]
- expected: FAIL
-
- [XPath tests 813]
- expected: FAIL
-
- [XPath tests 814]
- expected: FAIL
-
- [XPath tests 815]
- expected: FAIL
-
- [XPath tests 816]
- expected: FAIL
-
- [XPath tests 817]
- expected: FAIL
-
- [XPath tests 818]
- expected: FAIL
-
- [XPath tests 819]
- expected: FAIL
-
- [XPath tests 820]
- expected: FAIL
-
- [XPath tests 821]
- expected: FAIL
-
- [XPath tests 822]
- expected: FAIL
-
- [XPath tests 823]
- expected: FAIL
-
- [XPath tests 824]
- expected: FAIL
-
- [XPath tests 825]
- expected: FAIL
-
- [XPath tests 826]
- expected: FAIL
-
- [XPath tests 827]
- expected: FAIL
-
- [XPath tests 828]
- expected: FAIL
-
- [XPath tests 829]
- expected: FAIL
-
- [XPath tests 830]
- expected: FAIL
-
- [XPath tests 831]
- expected: FAIL
-
- [XPath tests 832]
- expected: FAIL
-
- [XPath tests 833]
- expected: FAIL
-
- [XPath tests 834]
- expected: FAIL
-
- [XPath tests 835]
- expected: FAIL
-
- [XPath tests 836]
- expected: FAIL
-
- [XPath tests 837]
- expected: FAIL
-
- [XPath tests 838]
- expected: FAIL
-
- [XPath tests 839]
- expected: FAIL
-
- [XPath tests 840]
- expected: FAIL
-
- [XPath tests 841]
- expected: FAIL
-
- [XPath tests 842]
- expected: FAIL
-
- [XPath tests 843]
- expected: FAIL
-
- [XPath tests 844]
- expected: FAIL
-
- [XPath tests 845]
- expected: FAIL
-
- [XPath tests 846]
- expected: FAIL
-
- [XPath tests 847]
- expected: FAIL
-
- [XPath tests 848]
- expected: FAIL
-
- [XPath tests 849]
- expected: FAIL
-
- [XPath tests 850]
- expected: FAIL
-
- [XPath tests 851]
- expected: FAIL
-
- [XPath tests 852]
- expected: FAIL
-
- [XPath tests 853]
- expected: FAIL
-
- [XPath tests 854]
- expected: FAIL
-
- [XPath tests 855]
- expected: FAIL
-
- [XPath tests 856]
- expected: FAIL
-
- [XPath tests 857]
- expected: FAIL
-
- [XPath tests 858]
- expected: FAIL
-
- [XPath tests 859]
- expected: FAIL
-
- [XPath tests 860]
- expected: FAIL
-
- [XPath tests 861]
- expected: FAIL
-
- [XPath tests 862]
- expected: FAIL
-
- [XPath tests 863]
- expected: FAIL
-
- [XPath tests 864]
- expected: FAIL
-
- [XPath tests 865]
- expected: FAIL
-
- [XPath tests 866]
- expected: FAIL
-
- [XPath tests 867]
- expected: FAIL
-
- [XPath tests 868]
- expected: FAIL
-
- [XPath tests 869]
- expected: FAIL
-
- [XPath tests 870]
- expected: FAIL
-
- [XPath tests 871]
- expected: FAIL
-
- [XPath tests 872]
- expected: FAIL
-
- [XPath tests 873]
- expected: FAIL
-
- [XPath tests 874]
- expected: FAIL
-
- [XPath tests 875]
- expected: FAIL
-
- [XPath tests 876]
- expected: FAIL
-
- [XPath tests 877]
- expected: FAIL
-
- [XPath tests 878]
- expected: FAIL
-
- [XPath tests 879]
- expected: FAIL
-
- [XPath tests 880]
- expected: FAIL
-
- [XPath tests 881]
- expected: FAIL
-
- [XPath tests 882]
- expected: FAIL
-
- [XPath tests 883]
- expected: FAIL
-
- [XPath tests 884]
- expected: FAIL
-
- [XPath tests 885]
- expected: FAIL
-
- [XPath tests 886]
- expected: FAIL
-
- [XPath tests 887]
- expected: FAIL
-
- [XPath tests 888]
- expected: FAIL
-
- [XPath tests 889]
- expected: FAIL
-
- [XPath tests 890]
- expected: FAIL
-
- [XPath tests 891]
- expected: FAIL
-
- [XPath tests 892]
- expected: FAIL
-
- [XPath tests 893]
- expected: FAIL
-
- [XPath tests 894]
- expected: FAIL
-
- [XPath tests 895]
- expected: FAIL
-
- [XPath tests 896]
- expected: FAIL
-
- [XPath tests 897]
- expected: FAIL
-
- [XPath tests 898]
- expected: FAIL
-
- [XPath tests 899]
- expected: FAIL
-
- [XPath tests 900]
- expected: FAIL
-
- [XPath tests 901]
- expected: FAIL
-
- [XPath tests 902]
- expected: FAIL
-
- [XPath tests 903]
- expected: FAIL
-
- [XPath tests 904]
- expected: FAIL
-
- [XPath tests 905]
- expected: FAIL
-
- [XPath tests 906]
- expected: FAIL
-
- [XPath tests 907]
- expected: FAIL
-
- [XPath tests 908]
- expected: FAIL
-
- [XPath tests 909]
- expected: FAIL
-
- [XPath tests 910]
- expected: FAIL
-
- [XPath tests 911]
- expected: FAIL
-
- [XPath tests 912]
- expected: FAIL
-
- [XPath tests 913]
- expected: FAIL
-
- [XPath tests 914]
- expected: FAIL
-
- [XPath tests 915]
- expected: FAIL
-
- [XPath tests 916]
- expected: FAIL
-
- [XPath tests 917]
- expected: FAIL
-
- [XPath tests 918]
- expected: FAIL
-
- [XPath tests 919]
- expected: FAIL
-
- [XPath tests 920]
- expected: FAIL
-
- [XPath tests 921]
- expected: FAIL
-
- [XPath tests 922]
- expected: FAIL
-
- [XPath tests 923]
- expected: FAIL
-
- [XPath tests 924]
- expected: FAIL
-
- [XPath tests 925]
- expected: FAIL
-
- [XPath tests 926]
- expected: FAIL
-
- [XPath tests 927]
- expected: FAIL
-
- [XPath tests 928]
- expected: FAIL
-
- [XPath tests 929]
- expected: FAIL
-
- [XPath tests 930]
- expected: FAIL
-
- [XPath tests 931]
- expected: FAIL
-
- [XPath tests 932]
- expected: FAIL
-
- [XPath tests 933]
- expected: FAIL
-
- [XPath tests 934]
- expected: FAIL
-
- [XPath tests 935]
- expected: FAIL
-
- [XPath tests 936]
- expected: FAIL
-
- [XPath tests 937]
- expected: FAIL
-
- [XPath tests 938]
- expected: FAIL
-
- [XPath tests 939]
- expected: FAIL
-
- [XPath tests 940]
- expected: FAIL
-
- [XPath tests 941]
- expected: FAIL
-
- [XPath tests 942]
- expected: FAIL
-
- [XPath tests 943]
- expected: FAIL
-
- [XPath tests 944]
- expected: FAIL
-
- [XPath tests 945]
- expected: FAIL
-
- [XPath tests 946]
- expected: FAIL
-
- [XPath tests 947]
- expected: FAIL
-
- [XPath tests 948]
- expected: FAIL
-
- [XPath tests 949]
- expected: FAIL
-
- [XPath tests 950]
- expected: FAIL
-
- [XPath tests 951]
- expected: FAIL
-
- [XPath tests 952]
- expected: FAIL
-
- [XPath tests 953]
- expected: FAIL
-
- [XPath tests 954]
- expected: FAIL
-
- [XPath tests 955]
- expected: FAIL
-
- [XPath tests 956]
- expected: FAIL
-
- [XPath tests 957]
- expected: FAIL
-
- [XPath tests 958]
- expected: FAIL
-
- [XPath tests 959]
- expected: FAIL
-
- [XPath tests 960]
- expected: FAIL
-
- [XPath tests 961]
- expected: FAIL
-
- [XPath tests 962]
- expected: FAIL
-
- [XPath tests 963]
- expected: FAIL
-
- [XPath tests 964]
- expected: FAIL
-
- [XPath tests 965]
- expected: FAIL
-
- [XPath tests 966]
- expected: FAIL
-
- [XPath tests 967]
- expected: FAIL
-
- [XPath tests 968]
- expected: FAIL
-
- [XPath tests 969]
- expected: FAIL
-
- [XPath tests 970]
- expected: FAIL
-
- [XPath tests 971]
- expected: FAIL
-
- [XPath tests 972]
- expected: FAIL
-
- [XPath tests 973]
- expected: FAIL
-
- [XPath tests 974]
- expected: FAIL
-
- [XPath tests 975]
- expected: FAIL
-
- [XPath tests 976]
- expected: FAIL
-
- [XPath tests 977]
- expected: FAIL
-
- [XPath tests 978]
- expected: FAIL
-
- [XPath tests 979]
- expected: FAIL
-
- [XPath tests 980]
- expected: FAIL
-
- [XPath tests 981]
- expected: FAIL
-
- [XPath tests 982]
- expected: FAIL
-
- [XPath tests 983]
- expected: FAIL
-
- [XPath tests 984]
- expected: FAIL
-
- [XPath tests 985]
- expected: FAIL
-
- [XPath tests 986]
- expected: FAIL
-
- [XPath tests 987]
- expected: FAIL
-
- [XPath tests 988]
- expected: FAIL
-
- [XPath tests 989]
- expected: FAIL
-
- [XPath tests 990]
- expected: FAIL
-
- [XPath tests 991]
- expected: FAIL
-
- [XPath tests 992]
- expected: FAIL
-
- [XPath tests 993]
- expected: FAIL
-
- [XPath tests 994]
- expected: FAIL
-
- [XPath tests 995]
- expected: FAIL
-
- [XPath tests 996]
- expected: FAIL
-
- [XPath tests 997]
- expected: FAIL
-
- [XPath tests 998]
- expected: FAIL
-
- [XPath tests 999]
- expected: FAIL
-
- [XPath tests 1000]
- expected: FAIL
-
- [XPath tests 1001]
- expected: FAIL
-
- [XPath tests 1002]
- expected: FAIL
-
- [XPath tests 1003]
- expected: FAIL
-
- [XPath tests 1004]
- expected: FAIL
-
- [XPath tests 1005]
- expected: FAIL
-
- [XPath tests 1006]
- expected: FAIL
-
- [XPath tests 1007]
- expected: FAIL
-
- [XPath tests 1008]
- expected: FAIL
-
- [XPath tests 1009]
- expected: FAIL
-
- [XPath tests 1010]
- expected: FAIL
-
- [XPath tests 1011]
- expected: FAIL
-
- [XPath tests 1012]
- expected: FAIL
-
- [XPath tests 1013]
- expected: FAIL
-
- [XPath tests 1014]
- expected: FAIL
-
- [XPath tests 1015]
- expected: FAIL
-
- [XPath tests 1016]
- expected: FAIL
-
- [XPath tests 1017]
- expected: FAIL
-
- [XPath tests 1018]
- expected: FAIL
-
- [XPath tests 1019]
- expected: FAIL
-
- [XPath tests 1020]
- expected: FAIL
-
- [XPath tests 1021]
- expected: FAIL
-
- [XPath tests 1022]
- expected: FAIL
-
- [XPath tests 1023]
- expected: FAIL
diff --git a/tests/wpt/meta/fetch/content-encoding/br/bad-br-body.https.any.js.ini b/tests/wpt/meta/fetch/content-encoding/br/bad-br-body.https.any.js.ini
index 2a7f8c45be1..16e5901cca3 100644
--- a/tests/wpt/meta/fetch/content-encoding/br/bad-br-body.https.any.js.ini
+++ b/tests/wpt/meta/fetch/content-encoding/br/bad-br-body.https.any.js.ini
@@ -1,3 +1,15 @@
[bad-br-body.https.any.html]
[Consuming the body of a resource with bad br content with arrayBuffer() should reject]
expected: FAIL
+
+ [Consuming the body of a resource with bad br content with blob() should reject]
+ expected: FAIL
+
+ [Consuming the body of a resource with bad br content with bytes() should reject]
+ expected: FAIL
+
+ [Consuming the body of a resource with bad br content with json() should reject]
+ expected: FAIL
+
+ [Consuming the body of a resource with bad br content with text() should reject]
+ expected: FAIL
diff --git a/tests/wpt/meta/fetch/content-encoding/gzip/bad-gzip-body.any.js.ini b/tests/wpt/meta/fetch/content-encoding/gzip/bad-gzip-body.any.js.ini
index 24a7b7bcc7f..aec86e6cdb2 100644
--- a/tests/wpt/meta/fetch/content-encoding/gzip/bad-gzip-body.any.js.ini
+++ b/tests/wpt/meta/fetch/content-encoding/gzip/bad-gzip-body.any.js.ini
@@ -11,6 +11,9 @@
[Consuming the body of a resource with bad gzip content with text() should reject]
expected: FAIL
+ [Consuming the body of a resource with bad gzip content with bytes() should reject]
+ expected: FAIL
+
[bad-gzip-body.any.worker.html]
[Consuming the body of a resource with bad gzip content with arrayBuffer() should reject]
@@ -25,6 +28,9 @@
[Consuming the body of a resource with bad gzip content with text() should reject]
expected: FAIL
+ [Consuming the body of a resource with bad gzip content with bytes() should reject]
+ expected: FAIL
+
[bad-gzip-body.any.serviceworker.html]
expected: ERROR
diff --git a/tests/wpt/meta/fetch/content-encoding/zstd/bad-zstd-body.https.any.js.ini b/tests/wpt/meta/fetch/content-encoding/zstd/bad-zstd-body.https.any.js.ini
index ed17fcbaf81..121ae28c821 100644
--- a/tests/wpt/meta/fetch/content-encoding/zstd/bad-zstd-body.https.any.js.ini
+++ b/tests/wpt/meta/fetch/content-encoding/zstd/bad-zstd-body.https.any.js.ini
@@ -11,6 +11,9 @@
[Consuming the body of a resource with bad zstd content with text() should reject]
expected: FAIL
+ [Consuming the body of a resource with bad zstd content with bytes() should reject]
+ expected: FAIL
+
[bad-zstd-body.https.any.worker.html]
[Consuming the body of a resource with bad zstd content with arrayBuffer() should reject]
@@ -25,6 +28,9 @@
[Consuming the body of a resource with bad zstd content with text() should reject]
expected: FAIL
+ [Consuming the body of a resource with bad zstd content with bytes() should reject]
+ expected: FAIL
+
[bad-zstd-body.https.any.sharedworker.html]
expected: ERROR
diff --git a/tests/wpt/meta/fetch/metadata/redirect/multiple-redirect-https-downgrade-upgrade.sub.html.ini b/tests/wpt/meta/fetch/metadata/redirect/multiple-redirect-https-downgrade-upgrade.sub.html.ini
index 77fa4b61164..46f58cc786e 100644
--- a/tests/wpt/meta/fetch/metadata/redirect/multiple-redirect-https-downgrade-upgrade.sub.html.ini
+++ b/tests/wpt/meta/fetch/metadata/redirect/multiple-redirect-https-downgrade-upgrade.sub.html.ini
@@ -33,9 +33,6 @@
[Https downgrade-upgrade embed]
expected: TIMEOUT
- [Https downgrade-upgrade preload]
- expected: TIMEOUT
-
[Https downgrade-upgrade iframe: sec-fetch-mode]
expected: FAIL
diff --git a/tests/wpt/meta/fetch/nosniff/importscripts.html.ini b/tests/wpt/meta/fetch/nosniff/importscripts.html.ini
deleted file mode 100644
index 50d9a81d542..00000000000
--- a/tests/wpt/meta/fetch/nosniff/importscripts.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[importscripts.html]
- expected: ERROR
- [Test importScripts()]
- expected: TIMEOUT
diff --git a/tests/wpt/meta/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js.ini b/tests/wpt/meta/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js.ini
deleted file mode 100644
index 695ae5a48a0..00000000000
--- a/tests/wpt/meta/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js.ini
+++ /dev/null
@@ -1,156 +0,0 @@
-[mixed-content-fetch.tentative.https.window.html]
- [https-local to http-local: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-local to http-local: wrong targetAddressSpace "private".]
- expected: FAIL
-
- [https-local to http-local: wrong targetAddressSpace "public".]
- expected: FAIL
-
- [https-local to http-local: not a private network request.]
- expected: FAIL
-
- [https-local to http-private: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-local to http-private: wrong targetAddressSpace "local".]
- expected: FAIL
-
- [https-local to http-private: wrong targetAddressSpace "public".]
- expected: FAIL
-
- [https-local to http-private: not a private network request.]
- expected: FAIL
-
- [https-local to http-public: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-local to http-public: wrong targetAddressSpace "local".]
- expected: FAIL
-
- [https-local to http-public: wrong targetAddressSpace "private".]
- expected: FAIL
-
- [https-local to http-public: not a private network request.]
- expected: FAIL
-
- [https-private to http-local: missing targetAddressSpace.]
- expected: FAIL
-
- [https-private to http-local: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-private to http-local: wrong targetAddressSpace "private".]
- expected: FAIL
-
- [https-private to http-local: wrong targetAddressSpace "public".]
- expected: FAIL
-
- [https-private to http-local: failed preflight.]
- expected: FAIL
-
- [https-private to http-local: success.]
- expected: FAIL
-
- [https-private to http-private: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-private to http-private: wrong targetAddressSpace "local".]
- expected: FAIL
-
- [https-private to http-private: wrong targetAddressSpace "public".]
- expected: FAIL
-
- [https-private to http-private: not a private network request.]
- expected: FAIL
-
- [https-private to http-public: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-private to http-public: wrong targetAddressSpace "local".]
- expected: FAIL
-
- [https-private to http-public: wrong targetAddressSpace "private".]
- expected: FAIL
-
- [https-private to http-public: not a private network request.]
- expected: FAIL
-
- [https-public to http-local: missing targetAddressSpace.]
- expected: FAIL
-
- [https-public to http-local: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-public to http-local: wrong targetAddressSpace "private".]
- expected: FAIL
-
- [https-public to http-local: wrong targetAddressSpace "public".]
- expected: FAIL
-
- [https-public to http-local: failed preflight.]
- expected: FAIL
-
- [https-public to http-local: success.]
- expected: FAIL
-
- [https-public to http-private: missing targetAddressSpace.]
- expected: FAIL
-
- [https-public to http-private: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-public to http-private: wrong targetAddressSpace "local".]
- expected: FAIL
-
- [https-public to http-private: wrong targetAddressSpace "public".]
- expected: FAIL
-
- [https-public to http-private: failed preflight.]
- expected: FAIL
-
- [https-public to http-private: success.]
- expected: FAIL
-
- [https-public to http-public: wrong targetAddressSpace "unknown".]
- expected: FAIL
-
- [https-public to http-public: wrong targetAddressSpace "local".]
- expected: FAIL
-
- [https-public to http-public: wrong targetAddressSpace "private".]
- expected: FAIL
-
- [https-public to http-public: not a private network request.]
- expected: FAIL
-
- [https-treat-as-public to http-local: wrong targetAddressSpace "private".]
- expected: FAIL
-
- [https-treat-as-public to http-private: wrong targetAddressSpace "local".]
- expected: FAIL
-
- [https-treat-as-public to http-private: success.]
- expected: FAIL
-
- [https-private to http-local: PUT success.]
- expected: FAIL
-
- [https-private to http-local: no-cors success.]
- expected: FAIL
-
- [https-public to http-local: PUT success.]
- expected: FAIL
-
- [https-public to http-local: no-cors success.]
- expected: FAIL
-
- [https-public to http-private: PUT success.]
- expected: FAIL
-
- [https-public to http-private: no-cors success.]
- expected: FAIL
-
- [https-treat-as-public to http-local: success.]
- expected: FAIL
diff --git a/tests/wpt/meta/fetch/private-network-access/window-open-existing.tentative.https.window.js.ini b/tests/wpt/meta/fetch/private-network-access/window-open-existing.tentative.https.window.js.ini
deleted file mode 100644
index 6bcaf322518..00000000000
--- a/tests/wpt/meta/fetch/private-network-access/window-open-existing.tentative.https.window.js.ini
+++ /dev/null
@@ -1,72 +0,0 @@
-[window-open-existing.tentative.https.window.html?include=from-treat-as-public]
- [treat-as-public-address to local: failed preflight.]
- expected: FAIL
-
- [treat-as-public-address to local: missing CORS headers.]
- expected: FAIL
-
- [treat-as-public-address to local: missing PNA header.]
- expected: FAIL
-
- [treat-as-public-address to local: success.]
- expected: FAIL
-
- [treat-as-public-address to private: failed preflight.]
- expected: FAIL
-
- [treat-as-public-address to private: missing CORS headers.]
- expected: FAIL
-
- [treat-as-public-address to private: missing PNA header.]
- expected: FAIL
-
- [treat-as-public-address to private: success.]
- expected: FAIL
-
-
-[window-open-existing.tentative.https.window.html?include=from-public]
- [public to local: failed preflight.]
- expected: FAIL
-
- [public to local: missing CORS headers.]
- expected: FAIL
-
- [public to local: missing PNA header.]
- expected: FAIL
-
- [public to local: success.]
- expected: FAIL
-
- [public to private: failed preflight.]
- expected: FAIL
-
- [public to private: missing CORS headers.]
- expected: FAIL
-
- [public to private: missing PNA header.]
- expected: FAIL
-
- [public to private: success.]
- expected: FAIL
-
- [public to public redirected to private: missing CORS headers.]
- expected: FAIL
-
- [public to public to private: success.]
- expected: FAIL
-
-
-[window-open-existing.tentative.https.window.html?include=from-local]
-
-[window-open-existing.tentative.https.window.html?include=from-private]
- [private to local: failed preflight.]
- expected: FAIL
-
- [private to local: missing CORS headers.]
- expected: FAIL
-
- [private to local: missing PNA header.]
- expected: FAIL
-
- [private to local: success.]
- expected: FAIL
diff --git a/tests/wpt/meta/focus/focus-contenteditable-element-in-iframe-scroll-into-view.html.ini b/tests/wpt/meta/focus/focus-contenteditable-element-in-iframe-scroll-into-view.html.ini
new file mode 100644
index 00000000000..1740303b284
--- /dev/null
+++ b/tests/wpt/meta/focus/focus-contenteditable-element-in-iframe-scroll-into-view.html.ini
@@ -0,0 +1,3 @@
+[focus-contenteditable-element-in-iframe-scroll-into-view.html]
+ [Check contenteditable element in an iframe scroll into view on second focusing]
+ 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
deleted file mode 100644
index c253f779d78..00000000000
--- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[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/009.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/009.html.ini
new file mode 100644
index 00000000000..3fb21c9b2c6
--- /dev/null
+++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/009.html.ini
@@ -0,0 +1,3 @@
+[009.html]
+ [Link with onclick form submit to javascript url with document.write and href navigation ]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/set_timeouts/set.py.ini b/tests/wpt/meta/html/browsers/history/the-history-interface/001.html.ini
index bfc9d7723d9..b0bdba7f308 100644
--- a/tests/wpt/meta/webdriver/tests/classic/set_timeouts/set.py.ini
+++ b/tests/wpt/meta/html/browsers/history/the-history-interface/001.html.ini
@@ -1,2 +1,2 @@
-[set.py]
+[001.html]
expected: TIMEOUT
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-colorSpaceConversion.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini
index 1cb6ce30242..1629ecdc8f3 100644
--- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini
+++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-colorSpaceConversion.html.ini
@@ -1,5 +1,4 @@
[createImageBitmap-colorSpaceConversion.html]
- expected: ERROR
[createImageBitmap from a bitmap HTMLImageElement, and drawImage on the created ImageBitmap with colorSpaceConversion: none]
expected: FAIL
diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini
index 9cf5b2af86a..c999a8d9b18 100644
--- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini
+++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html.ini
@@ -1,5 +1,4 @@
[createImageBitmap-drawImage.html]
- expected: ERROR
[createImageBitmap from an OffscreenCanvas resized, and drawImage on the created ImageBitmap]
expected: FAIL
diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini
index 0cb93c5abc9..f279cd2dd85 100644
--- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini
+++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html.ini
@@ -1,5 +1,4 @@
[createImageBitmap-flipY.html]
- expected: ERROR
[createImageBitmap from a vector SVGImageElement imageOrientation: "none", and drawImage on the created ImageBitmap]
expected: NOTRUN
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 ee557e4bc27..94caf82cb7f 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,4 @@
[createImageBitmap-invalid-args.html]
- expected: ERROR
[createImageBitmap with a vector HTMLImageElement source and sw set to 0]
expected: FAIL
@@ -138,18 +137,12 @@
[createImageBitmap with a vector SVGImageElement source and a value between 0 and 1 in resizeHeight]
expected: FAIL
- [createImageBitmap with an HTMLVideoElement from a data URL source and a value between 0 and 1 in resizeWidth]
- expected: FAIL
-
[createImageBitmap with a vector SVGImageElement source and a value of 0 in resizeHeight]
expected: FAIL
[createImageBitmap with a bitmap SVGImageElement source and a value between 0 and 1 in resizeHeight]
expected: FAIL
- [createImageBitmap with an HTMLVideoElement from a data URL source and a value of 0 in resizeHeight]
- expected: FAIL
-
[createImageBitmap with an ImageBitmap source and a value of 0 in resizeHeight]
expected: FAIL
@@ -162,11 +155,5 @@
[createImageBitmap with a bitmap SVGImageElement source and a value of 0 int resizeWidth]
expected: FAIL
- [createImageBitmap with an HTMLVideoElement from a data URL source and a value of 0 int resizeWidth]
- expected: FAIL
-
- [createImageBitmap with an HTMLVideoElement from a data URL source and a value between 0 and 1 in resizeHeight]
- expected: FAIL
-
[createImageBitmap with a vector SVGImageElement source and a value between 0 and 1 in resizeWidth]
expected: FAIL
diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html.ini
index d7226bfed74..0420669cc09 100644
--- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html.ini
+++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html.ini
@@ -1,5 +1,4 @@
[createImageBitmap-origin.sub.html]
- expected: TIMEOUT
[redirected to cross-origin HTMLVideoElement: origin unclear 2dContext.drawImage]
expected: FAIL
diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-premultiplyAlpha.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-premultiplyAlpha.html.ini
index 65a62f89001..15eea07cff8 100644
--- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-premultiplyAlpha.html.ini
+++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-premultiplyAlpha.html.ini
@@ -1,5 +1,4 @@
[createImageBitmap-premultiplyAlpha.html]
- expected: ERROR
[createImageBitmap: from ImageData, unpremultiplied, drawn to canvas]
expected: FAIL
diff --git a/tests/wpt/meta/html/dom/idlharness.https.html.ini b/tests/wpt/meta/html/dom/idlharness.https.html.ini
index 81d2aa5b8a5..b2ea5b118c1 100644
--- a/tests/wpt/meta/html/dom/idlharness.https.html.ini
+++ b/tests/wpt/meta/html/dom/idlharness.https.html.ini
@@ -5455,18 +5455,6 @@
[HTMLHeadingElement interface: document.createElement("h1") must inherit property "align" with the proper type]
expected: FAIL
- [HTMLHRElement interface: attribute noShade]
- expected: FAIL
-
- [HTMLHRElement interface: attribute size]
- expected: FAIL
-
- [HTMLHRElement interface: document.createElement("hr") must inherit property "noShade" with the proper type]
- expected: FAIL
-
- [HTMLHRElement interface: document.createElement("hr") must inherit property "size" with the proper type]
- expected: FAIL
-
[HTMLOListElement interface: attribute reversed]
expected: FAIL
diff --git a/tests/wpt/meta/html/dom/reflection-grouping.html.ini b/tests/wpt/meta/html/dom/reflection-grouping.html.ini
index 556eea039e9..ec7075bc5ab 100644
--- a/tests/wpt/meta/html/dom/reflection-grouping.html.ini
+++ b/tests/wpt/meta/html/dom/reflection-grouping.html.ini
@@ -383,234 +383,6 @@
[hr.tabIndex: IDL set to -2147483648]
expected: FAIL
- [hr.noShade: typeof IDL attribute]
- expected: FAIL
-
- [hr.noShade: IDL get with DOM attribute unset]
- expected: FAIL
-
- [hr.noShade: setAttribute() to ""]
- expected: FAIL
-
- [hr.noShade: setAttribute() to " foo "]
- expected: FAIL
-
- [hr.noShade: setAttribute() to undefined]
- expected: FAIL
-
- [hr.noShade: setAttribute() to null]
- expected: FAIL
-
- [hr.noShade: setAttribute() to 7]
- expected: FAIL
-
- [hr.noShade: setAttribute() to 1.5]
- expected: FAIL
-
- [hr.noShade: setAttribute() to "5%"]
- expected: FAIL
-
- [hr.noShade: setAttribute() to "+100"]
- expected: FAIL
-
- [hr.noShade: setAttribute() to ".5"]
- expected: FAIL
-
- [hr.noShade: setAttribute() to true]
- expected: FAIL
-
- [hr.noShade: setAttribute() to false]
- expected: FAIL
-
- [hr.noShade: setAttribute() to object "[object Object\]"]
- expected: FAIL
-
- [hr.noShade: setAttribute() to NaN]
- expected: FAIL
-
- [hr.noShade: setAttribute() to Infinity]
- expected: FAIL
-
- [hr.noShade: setAttribute() to -Infinity]
- expected: FAIL
-
- [hr.noShade: setAttribute() to "\\0"]
- expected: FAIL
-
- [hr.noShade: setAttribute() to object "test-toString"]
- expected: FAIL
-
- [hr.noShade: setAttribute() to object "test-valueOf"]
- expected: FAIL
-
- [hr.noShade: setAttribute() to "noShade"]
- expected: FAIL
-
- [hr.noShade: IDL set to ""]
- expected: FAIL
-
- [hr.noShade: IDL set to " foo "]
- expected: FAIL
-
- [hr.noShade: IDL set to undefined]
- expected: FAIL
-
- [hr.noShade: IDL set to null]
- expected: FAIL
-
- [hr.noShade: IDL set to 7]
- expected: FAIL
-
- [hr.noShade: IDL set to 1.5]
- expected: FAIL
-
- [hr.noShade: IDL set to "5%"]
- expected: FAIL
-
- [hr.noShade: IDL set to "+100"]
- expected: FAIL
-
- [hr.noShade: IDL set to ".5"]
- expected: FAIL
-
- [hr.noShade: IDL set to false]
- expected: FAIL
-
- [hr.noShade: IDL set to object "[object Object\]"]
- expected: FAIL
-
- [hr.noShade: IDL set to NaN]
- expected: FAIL
-
- [hr.noShade: IDL set to Infinity]
- expected: FAIL
-
- [hr.noShade: IDL set to -Infinity]
- expected: FAIL
-
- [hr.noShade: IDL set to "\\0"]
- expected: FAIL
-
- [hr.noShade: IDL set to object "test-toString"]
- expected: FAIL
-
- [hr.noShade: IDL set to object "test-valueOf"]
- expected: FAIL
-
- [hr.size: typeof IDL attribute]
- expected: FAIL
-
- [hr.size: IDL get with DOM attribute unset]
- expected: FAIL
-
- [hr.size: setAttribute() to ""]
- expected: FAIL
-
- [hr.size: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "]
- expected: FAIL
-
- [hr.size: setAttribute() to undefined]
- expected: FAIL
-
- [hr.size: setAttribute() to 7]
- expected: FAIL
-
- [hr.size: setAttribute() to 1.5]
- expected: FAIL
-
- [hr.size: setAttribute() to "5%"]
- expected: FAIL
-
- [hr.size: setAttribute() to "+100"]
- expected: FAIL
-
- [hr.size: setAttribute() to ".5"]
- expected: FAIL
-
- [hr.size: setAttribute() to true]
- expected: FAIL
-
- [hr.size: setAttribute() to false]
- expected: FAIL
-
- [hr.size: setAttribute() to object "[object Object\]"]
- expected: FAIL
-
- [hr.size: setAttribute() to NaN]
- expected: FAIL
-
- [hr.size: setAttribute() to Infinity]
- expected: FAIL
-
- [hr.size: setAttribute() to -Infinity]
- expected: FAIL
-
- [hr.size: setAttribute() to "\\0"]
- expected: FAIL
-
- [hr.size: setAttribute() to null]
- expected: FAIL
-
- [hr.size: setAttribute() to object "test-toString"]
- expected: FAIL
-
- [hr.size: setAttribute() to object "test-valueOf"]
- expected: FAIL
-
- [hr.size: IDL set to ""]
- expected: FAIL
-
- [hr.size: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo "]
- expected: FAIL
-
- [hr.size: IDL set to undefined]
- expected: FAIL
-
- [hr.size: IDL set to 7]
- expected: FAIL
-
- [hr.size: IDL set to 1.5]
- expected: FAIL
-
- [hr.size: IDL set to "5%"]
- expected: FAIL
-
- [hr.size: IDL set to "+100"]
- expected: FAIL
-
- [hr.size: IDL set to ".5"]
- expected: FAIL
-
- [hr.size: IDL set to true]
- expected: FAIL
-
- [hr.size: IDL set to false]
- expected: FAIL
-
- [hr.size: IDL set to object "[object Object\]"]
- expected: FAIL
-
- [hr.size: IDL set to NaN]
- expected: FAIL
-
- [hr.size: IDL set to Infinity]
- expected: FAIL
-
- [hr.size: IDL set to -Infinity]
- expected: FAIL
-
- [hr.size: IDL set to "\\0"]
- expected: FAIL
-
- [hr.size: IDL set to null]
- expected: FAIL
-
- [hr.size: IDL set to object "test-toString"]
- expected: FAIL
-
- [hr.size: IDL set to object "test-valueOf"]
- expected: FAIL
-
[pre.accessKey: typeof IDL attribute]
expected: FAIL
diff --git a/tests/wpt/meta/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html.ini b/tests/wpt/meta/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html.ini
deleted file mode 100644
index 28b76cfdb3b..00000000000
--- a/tests/wpt/meta/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-009.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[spelling-markers-009.html]
- expected: FAIL
diff --git a/tests/wpt/meta/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html.ini b/tests/wpt/meta/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html.ini
deleted file mode 100644
index 5670828676c..00000000000
--- a/tests/wpt/meta/html/editing/editing-0/spelling-and-grammar-checking/spelling-markers-010.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[spelling-markers-010.html]
- expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini b/tests/wpt/meta/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini
deleted file mode 100644
index dbbc149ee4a..00000000000
--- a/tests/wpt/meta/html/semantics/embedded-content/media-elements/media_fragment_seek.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[media_fragment_seek.html]
- expected: CRASH
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
index 24903b5f66f..d7e7d1b9815 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
@@ -1,4 +1,4 @@
[iframe_sandbox_popups_escaping-1.html]
- expected: TIMEOUT
+ expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
diff --git a/tests/wpt/meta/html/semantics/permission-element/negative-offset-and-margin.tentative.html.ini b/tests/wpt/meta/html/semantics/permission-element/negative-offset-and-margin.tentative.html.ini
deleted file mode 100644
index 75e70650007..00000000000
--- a/tests/wpt/meta/html/semantics/permission-element/negative-offset-and-margin.tentative.html.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[negative-offset-and-margin.tentative.html]
- [Negative margins/offset should be changed to 0px]
- expected: FAIL
-
- [Expressions margins/offset should always return at least 0px]
- expected: FAIL
-
- [Negative margins/offset should be changed to 4px]
- expected: FAIL
-
- [Expressions margins/offset should always return at least 4px]
- expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/permission-element/negative-offset.tentative.html.ini b/tests/wpt/meta/html/semantics/permission-element/negative-offset.tentative.html.ini
new file mode 100644
index 00000000000..74386d1c491
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/permission-element/negative-offset.tentative.html.ini
@@ -0,0 +1,9 @@
+[negative-offset.tentative.html]
+ [Negative offset should be changed to 0px]
+ expected: FAIL
+
+ [Expressions offset min(-50px, 50px) should return at least 0px]
+ expected: FAIL
+
+ [Expressions offset clamp(-100px, 1vw, -50px) should return at least 0px]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/permission-element/permission-icon/icon-hidden-reftest.html.ini b/tests/wpt/meta/html/semantics/permission-element/permission-icon/icon-hidden-reftest.html.ini
new file mode 100644
index 00000000000..bc9fdd0cbaf
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/permission-element/permission-icon/icon-hidden-reftest.html.ini
@@ -0,0 +1,2 @@
+[icon-hidden-reftest.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/permission-element/permission-icon/icon-unique-per-type-reftest.html.ini b/tests/wpt/meta/html/semantics/permission-element/permission-icon/icon-unique-per-type-reftest.html.ini
new file mode 100644
index 00000000000..248944bc32e
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/permission-element/permission-icon/icon-unique-per-type-reftest.html.ini
@@ -0,0 +1,2 @@
+[icon-unique-per-type-reftest.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/042.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/042.html.ini
deleted file mode 100644
index 6c2be5a1ab2..00000000000
--- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/042.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[042.html]
- [ scheduler: DOM mutation events when adding scripts: DOMNodeInserted ]
- expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/043.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/043.html.ini
deleted file mode 100644
index 83a6a3fb2a9..00000000000
--- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/043.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[043.html]
- [ scheduler: DOM mutation events when adding external scripts: DOMNodeInserted ]
- expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/044.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/044.html.ini
deleted file mode 100644
index 4e428ec9a29..00000000000
--- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/044.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[044.html]
- [ scheduler: DOM mutation events when adding scripts: DOMNodeInsertedIntoDocument ]
- expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/045.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/045.html.ini
deleted file mode 100644
index b5409fbb4ac..00000000000
--- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/045.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[045.html]
- [ scheduler: DOM mutation events when adding external scripts: DOMNodeInsertedIntoDocument ]
- expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/054.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/054.html.ini
deleted file mode 100644
index abdc47b56ae..00000000000
--- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/054.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[054.html]
- [ scheduler: removing newly inserted script from DOMNodeInserted handler - external script ]
- expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/055.html.ini b/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/055.html.ini
deleted file mode 100644
index af2467b3e71..00000000000
--- a/tests/wpt/meta/html/semantics/scripting-1/the-script-element/execution-timing/055.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[055.html]
- [ scheduler: removing newly inserted script from DOMNodeInserted handler - inline script ]
- expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/the-button-element/command-and-commandfor/source-attribute-retargeting.tentative.html.ini b/tests/wpt/meta/html/semantics/the-button-element/command-and-commandfor/source-attribute-retargeting.tentative.html.ini
new file mode 100644
index 00000000000..c882098a91c
--- /dev/null
+++ b/tests/wpt/meta/html/semantics/the-button-element/command-and-commandfor/source-attribute-retargeting.tentative.html.ini
@@ -0,0 +1,9 @@
+[source-attribute-retargeting.tentative.html]
+ [CommandEvent.source and ToggleEvent.source should be retargeted during and after event dispatch.]
+ expected: FAIL
+
+ [CommandEvent.source should be retargeted when manually dispatched with composed set to true.]
+ expected: FAIL
+
+ [CommandEvent.source and ToggleEvent.source should not be set to null after dispatch without ShadowDOM.]
+ expected: FAIL
diff --git a/tests/wpt/meta/mixed-content/gen/top.http-rp/opt-in/video-tag.https.html.ini b/tests/wpt/meta/mixed-content/gen/top.http-rp/opt-in/video-tag.https.html.ini
index 25b2d40022f..d6038010ff0 100644
--- a/tests/wpt/meta/mixed-content/gen/top.http-rp/opt-in/video-tag.https.html.ini
+++ b/tests/wpt/meta/mixed-content/gen/top.http-rp/opt-in/video-tag.https.html.ini
@@ -1,13 +1,7 @@
[video-tag.https.html]
expected: TIMEOUT
- [Mixed-Content: Expects allowed for video-tag to same-https origin and keep-scheme redirection from https context.]
- expected: TIMEOUT
-
- [Mixed-Content: Expects allowed for video-tag to same-https origin and no-redirect redirection from https context.]
- expected: NOTRUN
-
[Mixed-Content: Expects blocked for video-tag to cross-http origin and keep-scheme redirection from https context.]
- expected: NOTRUN
+ expected: TIMEOUT
[Mixed-Content: Expects blocked for video-tag to cross-http origin and no-redirect redirection from https context.]
expected: NOTRUN
diff --git a/tests/wpt/meta/mixed-content/gen/top.meta/opt-in/video-tag.https.html.ini b/tests/wpt/meta/mixed-content/gen/top.meta/opt-in/video-tag.https.html.ini
index 933ea12e10c..a725690bbc6 100644
--- a/tests/wpt/meta/mixed-content/gen/top.meta/opt-in/video-tag.https.html.ini
+++ b/tests/wpt/meta/mixed-content/gen/top.meta/opt-in/video-tag.https.html.ini
@@ -1,10 +1,7 @@
[video-tag.https.html]
expected: TIMEOUT
- [Mixed-Content: Expects allowed for video-tag to same-https origin and no-redirect redirection from https context.]
- expected: TIMEOUT
-
[Mixed-Content: Expects blocked for video-tag to cross-http origin and no-redirect redirection from https context.]
- expected: NOTRUN
+ expected: TIMEOUT
[Mixed-Content: Expects blocked for video-tag to same-http origin and no-redirect redirection from https context.]
expected: NOTRUN
diff --git a/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini b/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini
index 20d32f43049..484aa044de7 100644
--- a/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini
+++ b/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini
@@ -16,3 +16,15 @@
[Reload fetchStart > Original fetchStart]
expected: FAIL
+
+ [Reload domComplete > Original domComplete]
+ expected: FAIL
+
+ [Reload domContentLoadedEventEnd > Original domContentLoadedEventEnd]
+ expected: FAIL
+
+ [Reload loadEventEnd > Original loadEventEnd]
+ expected: FAIL
+
+ [Reload loadEventStart > Original loadEventStart]
+ expected: FAIL
diff --git a/tests/wpt/meta/preload/preload-error.sub.html.ini b/tests/wpt/meta/preload/preload-error.sub.html.ini
index 11cddb179c3..f383c31f2fd 100644
--- a/tests/wpt/meta/preload/preload-error.sub.html.ini
+++ b/tests/wpt/meta/preload/preload-error.sub.html.ini
@@ -5,36 +5,24 @@
[CORS-error (image): main]
expected: FAIL
- [CSP-error (image): preload events]
- expected: FAIL
-
[CSP-error (image): main]
expected: FAIL
[CORS-error (style): main]
expected: FAIL
- [CSP-error (style): preload events]
- expected: FAIL
-
[CSP-error (style): main]
expected: FAIL
[CORS-error (script): main]
expected: FAIL
- [CSP-error (script): preload events]
- expected: FAIL
-
[CSP-error (script): main]
expected: FAIL
[CORS-error (xhr): main]
expected: FAIL
- [CSP-error (xhr): preload events]
- expected: FAIL
-
[CSP-error (xhr): main]
expected: FAIL
@@ -50,9 +38,6 @@
[CORS-error (fetch): main]
expected: FAIL
- [CSP-error (fetch): preload events]
- expected: FAIL
-
[CSP-error (fetch): main]
expected: FAIL
diff --git a/tests/wpt/meta/resize-observer/change-layout-in-error.html.ini b/tests/wpt/meta/resize-observer/change-layout-in-error.html.ini
new file mode 100644
index 00000000000..5d07f60e0b6
--- /dev/null
+++ b/tests/wpt/meta/resize-observer/change-layout-in-error.html.ini
@@ -0,0 +1,3 @@
+[change-layout-in-error.html]
+ [Changing layout in window error handler should not result in lifecyle loop when resize observer loop limit is reached.]
+ expected: FAIL
diff --git a/tests/wpt/meta/resize-observer/zoom.html.ini b/tests/wpt/meta/resize-observer/zoom.html.ini
new file mode 100644
index 00000000000..a08a15e7c82
--- /dev/null
+++ b/tests/wpt/meta/resize-observer/zoom.html.ini
@@ -0,0 +1,3 @@
+[zoom.html]
+ [ResizeObserver sizes account for zoom]
+ expected: FAIL
diff --git a/tests/wpt/meta/trusted-types/block-text-node-insertion-into-script-element.html.ini b/tests/wpt/meta/trusted-types/block-text-node-insertion-into-script-element.html.ini
index 34f64b9ef70..366c956d411 100644
--- a/tests/wpt/meta/trusted-types/block-text-node-insertion-into-script-element.html.ini
+++ b/tests/wpt/meta/trusted-types/block-text-node-insertion-into-script-element.html.ini
@@ -17,3 +17,12 @@
[Spot tests around script + innerHTML interaction with default policy.]
expected: FAIL
+
+ [Regression test: Bypass via appendChild into off-document script element.]
+ expected: FAIL
+
+ [Regression test: Bypass via appendChild into live script element.]
+ expected: FAIL
+
+ [Test that default policy applies to module script.]
+ expected: FAIL
diff --git a/tests/wpt/meta/trusted-types/block-text-node-insertion-into-svg-script-element.html.ini b/tests/wpt/meta/trusted-types/block-text-node-insertion-into-svg-script-element.html.ini
index e0fbb2a6064..4d469799e85 100644
--- a/tests/wpt/meta/trusted-types/block-text-node-insertion-into-svg-script-element.html.ini
+++ b/tests/wpt/meta/trusted-types/block-text-node-insertion-into-svg-script-element.html.ini
@@ -10,3 +10,6 @@
[Spot tests around script + innerHTML interaction with default policy.]
expected: FAIL
+
+ [Test that default policy applies with module script. svg:script]
+ expected: FAIL
diff --git a/tests/wpt/meta/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html.ini b/tests/wpt/meta/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html.ini
deleted file mode 100644
index e36472cb628..00000000000
--- a/tests/wpt/meta/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[ProcessingInstruction.DOMCharacterDataModified.html]
- [Test Description: DOMCharacterDataModified event fires after ProcessingInstruction.data have been modified, but the node itself has not been inserted or deleted. The proximal event target of this event shall be the ProcessingInstruction node.]
- expected: FAIL
diff --git a/tests/wpt/meta/uievents/legacy-domevents-tests/approved/domnodeinserted.html.ini b/tests/wpt/meta/uievents/legacy-domevents-tests/approved/domnodeinserted.html.ini
deleted file mode 100644
index 27f8ad9e90f..00000000000
--- a/tests/wpt/meta/uievents/legacy-domevents-tests/approved/domnodeinserted.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[domnodeinserted.html]
- expected: TIMEOUT
- [Test Description: DOMNodeInserted event fires when a node has been added as a child of another node.]
- expected: NOTRUN
diff --git a/tests/wpt/meta/urlpattern/urlpattern-generate.tentative.any.js.ini b/tests/wpt/meta/urlpattern/urlpattern-generate.tentative.any.js.ini
new file mode 100644
index 00000000000..3c01bdb3c49
--- /dev/null
+++ b/tests/wpt/meta/urlpattern/urlpattern-generate.tentative.any.js.ini
@@ -0,0 +1,63 @@
+[urlpattern-generate.tentative.any.worker.html]
+ [Pattern: {"pathname":"/foo"} Component: pathname Groups: {}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/:foo"} Component: pathname Groups: {"foo":"bar"}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/:foo"} Component: pathname Groups: {"foo":"🍅"}]
+ expected: FAIL
+
+ [Pattern: {"hostname":"{:foo}.example.com"} Component: hostname Groups: {"foo":"🍅"}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/foo/:bar"} Component: pathname Groups: {"bar":"baz"}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/foo:bar"} Component: pathname Groups: {"bar":"baz"}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/:foo/:bar"} Component: pathname Groups: {"foo":"baz","bar":"qux"}]
+ expected: FAIL
+
+ [Pattern: "https://example.com/:foo" Component: pathname Groups: {"foo":" "}]
+ expected: FAIL
+
+ [Pattern: "original-scheme://example.com/:foo" Component: pathname Groups: {"foo":" "}]
+ expected: FAIL
+
+
+[urlpattern-generate.tentative.any.html]
+ [Pattern: {"pathname":"/foo"} Component: pathname Groups: {}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/:foo"} Component: pathname Groups: {"foo":"bar"}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/:foo"} Component: pathname Groups: {"foo":"🍅"}]
+ expected: FAIL
+
+ [Pattern: {"hostname":"{:foo}.example.com"} Component: hostname Groups: {"foo":"🍅"}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/foo/:bar"} Component: pathname Groups: {"bar":"baz"}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/foo:bar"} Component: pathname Groups: {"bar":"baz"}]
+ expected: FAIL
+
+ [Pattern: {"pathname":"/:foo/:bar"} Component: pathname Groups: {"foo":"baz","bar":"qux"}]
+ expected: FAIL
+
+ [Pattern: "https://example.com/:foo" Component: pathname Groups: {"foo":" "}]
+ expected: FAIL
+
+ [Pattern: "original-scheme://example.com/:foo" Component: pathname Groups: {"foo":" "}]
+ expected: FAIL
+
+
+[urlpattern-generate.tentative.any.serviceworker.html]
+ expected: ERROR
+
+[urlpattern-generate.tentative.any.sharedworker.html]
+ expected: ERROR
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 960779501c4..5d66c9ba352 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
@@ -805,3 +805,12 @@
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14650\]\t2.4329547374028208e-17\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 Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[14650\]\t3.3752832548824226e-34\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 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\]\t4.5710336303710938e+2\t8.6956524848937988e-1\t4.5623379778862000e+2\t5.2466884869329283e+2\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 4.5623379778862000e+2 at index of 14650.\n\tMax RelError of 5.2466884869329283e+2 at index of 14650.\n]
+ expected: FAIL
+
+ [X SNR (-9.749670615505378 dB) is not greater than or equal to 65.737. Got -9.749670615505378.]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini b/tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini
index 00caf69c8d5..a5d10aa6fe2 100644
--- a/tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini
@@ -1,4 +1,5 @@
[accept.py]
+ expected: TIMEOUT
[test_null_response_value]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini b/tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini
index cd2546ede8b..a2869095ca8 100644
--- a/tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini
@@ -1,4 +1,5 @@
[dismiss.py]
+ expected: TIMEOUT
[test_no_top_browsing_context]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini
index 541ffc25ca6..6a82e9170b8 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini
@@ -1,2 +1,210 @@
[clear.py]
- expected: TIMEOUT
+ [test_null_response_value]
+ expected: FAIL
+
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_invalid_value]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_pointer_interactable]
+ expected: FAIL
+
+ [test_keyboard_interactable]
+ expected: FAIL
+
+ [test_input[number-42-\]]
+ expected: FAIL
+
+ [test_input[range-42-50\]]
+ expected: FAIL
+
+ [test_input[email-foo@example.com-\]]
+ expected: FAIL
+
+ [test_input[password-password-\]]
+ expected: FAIL
+
+ [test_input[search-search-\]]
+ expected: FAIL
+
+ [test_input[tel-999-\]]
+ expected: FAIL
+
+ [test_input[text-text-\]]
+ expected: FAIL
+
+ [test_input[url-https://example.com/-\]]
+ expected: FAIL
+
+ [test_input[color-#ff0000-#000000\]]
+ expected: FAIL
+
+ [test_input[date-2017-12-26-\]]
+ expected: FAIL
+
+ [test_input[datetime-2017-12-26T19:48-\]]
+ expected: FAIL
+
+ [test_input[datetime-local-2017-12-26T19:48-\]]
+ expected: FAIL
+
+ [test_input[time-19:48-\]]
+ expected: FAIL
+
+ [test_input[month-2017-11-\]]
+ expected: FAIL
+
+ [test_input[week-2017-W52-\]]
+ expected: FAIL
+
+ [test_input_readonly[number\]]
+ expected: FAIL
+
+ [test_input_readonly[range\]]
+ expected: FAIL
+
+ [test_input_readonly[email\]]
+ expected: FAIL
+
+ [test_input_readonly[password\]]
+ expected: FAIL
+
+ [test_input_readonly[search\]]
+ expected: FAIL
+
+ [test_input_readonly[tel\]]
+ expected: FAIL
+
+ [test_input_readonly[text\]]
+ expected: FAIL
+
+ [test_input_readonly[url\]]
+ expected: FAIL
+
+ [test_input_readonly[color\]]
+ expected: FAIL
+
+ [test_input_readonly[date\]]
+ expected: FAIL
+
+ [test_input_readonly[datetime\]]
+ expected: FAIL
+
+ [test_input_readonly[datetime-local\]]
+ expected: FAIL
+
+ [test_input_readonly[time\]]
+ expected: FAIL
+
+ [test_input_readonly[month\]]
+ expected: FAIL
+
+ [test_input_readonly[week\]]
+ expected: FAIL
+
+ [test_input_readonly[file\]]
+ expected: FAIL
+
+ [test_textarea]
+ expected: FAIL
+
+ [test_textarea_readonly]
+ expected: FAIL
+
+ [test_input_file]
+ expected: FAIL
+
+ [test_input_file_multiple]
+ expected: FAIL
+
+ [test_button[button\]]
+ expected: FAIL
+
+ [test_button[reset\]]
+ expected: FAIL
+
+ [test_button[submit\]]
+ expected: FAIL
+
+ [test_button_with_subtree]
+ expected: FAIL
+
+ [test_contenteditable]
+ expected: FAIL
+
+ [test_designmode]
+ expected: FAIL
+
+ [test_resettable_element_focus_when_empty]
+ expected: FAIL
+
+ [test_resettable_element_does_not_satisfy_validation_constraints[number-foo\]]
+ expected: FAIL
+
+ [test_resettable_element_does_not_satisfy_validation_constraints[email-foo\]]
+ expected: FAIL
+
+ [test_resettable_element_does_not_satisfy_validation_constraints[url-foo\]]
+ expected: FAIL
+
+ [test_resettable_element_does_not_satisfy_validation_constraints[date-foo\]]
+ expected: FAIL
+
+ [test_resettable_element_does_not_satisfy_validation_constraints[datetime-local-foo\]]
+ expected: FAIL
+
+ [test_resettable_element_does_not_satisfy_validation_constraints[time-foo\]]
+ expected: FAIL
+
+ [test_resettable_element_does_not_satisfy_validation_constraints[month-foo\]]
+ expected: FAIL
+
+ [test_resettable_element_does_not_satisfy_validation_constraints[week-foo\]]
+ expected: FAIL
+
+ [test_non_editable_inputs[checkbox\]]
+ expected: FAIL
+
+ [test_non_editable_inputs[radio\]]
+ expected: FAIL
+
+ [test_non_editable_inputs[hidden\]]
+ expected: FAIL
+
+ [test_non_editable_inputs[submit\]]
+ expected: FAIL
+
+ [test_non_editable_inputs[button\]]
+ expected: FAIL
+
+ [test_non_editable_inputs[image\]]
+ expected: FAIL
+
+ [test_scroll_into_view]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini
index f6367167d66..76b124f1dca 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini
@@ -1,5 +1,4 @@
[disabled.py]
- expected: TIMEOUT
[test_button[button\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/bubbling.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/bubbling.py.ini
deleted file mode 100644
index d99f3672ef6..00000000000
--- a/tests/wpt/meta/webdriver/tests/classic/element_click/bubbling.py.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[bubbling.py]
- [test_click_event_bubbles_to_parents]
- expected: FAIL
-
- [test_spin_event_loop]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini
index 3e3bfa2708e..48358dc41c1 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini
@@ -1,4 +1,5 @@
[center_point.py]
+ expected: TIMEOUT
[test_entirely_in_view]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini
index 9cdf1e0d0da..7405df1cdfb 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini
@@ -7,9 +7,3 @@
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
-
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/events.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/events.py.ini
deleted file mode 100644
index 8f57d96cef8..00000000000
--- a/tests/wpt/meta/webdriver/tests/classic/element_click/events.py.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[events.py]
- [test_event_mousemove]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini
index 982ea5ca753..9c185c61557 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini
@@ -1,4 +1,5 @@
[interactability.py]
+ expected: TIMEOUT
[test_display_none]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini
index 92d8bfe9a3d..32fd2854998 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini
@@ -2,14 +2,8 @@
[test_shadow_element_click[host_element\]]
expected: FAIL
- [test_shadow_element_click[checkbox_element\]]
- expected: FAIL
-
[test_nested_shadow_element_click[outer_element\]]
expected: FAIL
[test_nested_shadow_element_click[inner_element\]]
expected: FAIL
-
- [test_nested_shadow_element_click[checkbox\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini
index 26b3aaa641b..5e4543ef0e9 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini
@@ -1,7 +1,4 @@
[events.py]
- [test_file_upload]
- expected: FAIL
-
[test_form_control_send_text[input\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini
index 4fd4b29e87f..40a4a701288 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini
@@ -1,50 +1,19 @@
[file_upload.py]
- expected: TIMEOUT
[test_empty_text]
expected: FAIL
- [test_multiple_files]
- expected: FAIL
-
[test_multiple_files_last_path_not_found]
expected: FAIL
- [test_multiple_files_without_multiple_attribute]
- expected: FAIL
-
[test_multiple_files_send_twice]
expected: FAIL
[test_multiple_files_reset_with_element_clear]
expected: FAIL
- [test_single_file]
- expected: FAIL
-
- [test_single_file_replaces_without_multiple_attribute]
- expected: FAIL
-
[test_single_file_appends_with_multiple_attribute]
expected: FAIL
- [test_transparent]
- expected: FAIL
-
- [test_obscured]
- expected: FAIL
-
- [test_outside_viewport]
- expected: FAIL
-
- [test_hidden]
- expected: FAIL
-
- [test_display_none]
- expected: FAIL
-
- [test_not_focused]
- expected: FAIL
-
[test_focused]
expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini
index 10a5a86e3d2..9dca7adc465 100644
--- a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini
@@ -7,9 +7,3 @@
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
-
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini
index 6bcbe1197f6..72a20a6f7cf 100644
--- a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini
@@ -1,2 +1,78 @@
[arguments.py]
- expected: TIMEOUT
+ [test_no_such_element_with_unknown_id]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_no_such_shadow_root_with_unknown_id]
+ expected: FAIL
+
+ [test_no_such_shadow_root_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_shadow_root_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_shadow_root_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_shadow_root_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[None-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[None-window\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[False-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[False-window\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[42-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[42-window\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[value3-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[value3-window\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[value4-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[value4-window\]]
+ expected: FAIL
+
+ [test_no_such_window_for_window_with_invalid_value]
+ expected: FAIL
+
+ [test_element_reference[frame\]]
+ expected: FAIL
+
+ [test_element_reference[shadow-root\]]
+ expected: FAIL
+
+ [test_element_reference[window\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini
index 6885d2e743e..26921d513c2 100644
--- a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini
@@ -1,4 +1,5 @@
[execute_async.py]
+ expected: TIMEOUT
[test_no_browsing_context]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini
index 8818990c5ef..9c6615f080f 100644
--- a/tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini
@@ -1,5 +1,4 @@
[arguments.py]
- expected: TIMEOUT
[test_no_such_element_with_unknown_id]
expected: FAIL
@@ -78,9 +77,6 @@
[test_element_reference[frame\]]
expected: FAIL
- [test_element_reference[node\]]
- expected: FAIL
-
[test_element_reference[shadow-root\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini
index 8a1571d1d7b..ff13c80a5fe 100644
--- a/tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini
@@ -1,4 +1,5 @@
[execute.py]
+ expected: TIMEOUT
[test_no_browsing_context]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini
index 7564f644b10..60f973b8a44 100644
--- a/tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini
@@ -1,7 +1,6 @@
[find.py]
- expected: TIMEOUT
[test_no_browsing_context]
- expected: ERROR
+ expected: FAIL
[test_no_such_element_with_unknown_selector[not-existent\]]
expected: FAIL
@@ -15,18 +14,6 @@
[test_find_element[xpath-//a\]]
expected: FAIL
- [test_xhtml_namespace[css selector-#linkText\]]
- expected: FAIL
-
- [test_xhtml_namespace[link text-full link text\]]
- expected: FAIL
-
- [test_xhtml_namespace[partial link text-link text\]]
- expected: FAIL
-
- [test_xhtml_namespace[tag name-a\]]
- expected: FAIL
-
[test_xhtml_namespace[xpath-//*[name()='a'\]\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini
index dba98c7726b..05e490d14fe 100644
--- a/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini
@@ -1,5 +1,4 @@
[find.py]
- expected: TIMEOUT
[test_null_parameter_value]
expected: FAIL
@@ -7,7 +6,7 @@
expected: FAIL
[test_no_browsing_context]
- expected: ERROR
+ expected: FAIL
[test_no_such_shadow_root_with_element]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini
index 44f232824bb..06a8b89b5b6 100644
--- a/tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini
@@ -1,74 +1,22 @@
[find.py]
- expected: TIMEOUT
[test_no_browsing_context]
- expected: ERROR
-
- [test_find_elements[css selector-#linkText\]]
- expected: FAIL
-
- [test_find_elements[link text-full link text\]]
- expected: FAIL
-
- [test_find_elements[partial link text-link text\]]
- expected: FAIL
-
- [test_find_elements[tag name-a\]]
expected: FAIL
[test_find_elements[xpath-//a\]]
expected: FAIL
- [test_find_elements_link_text[<a href=#>link text</a>-link text\]]
- expected: FAIL
-
- [test_find_elements_link_text[<a href=#>&nbsp;link text&nbsp;</a>-link text\]]
- expected: FAIL
-
[test_find_elements_link_text[<a href=#>link<br>text</a>-link\\ntext\]]
expected: FAIL
- [test_find_elements_link_text[<a href=#>link&amp;text</a>-link&text\]]
- expected: FAIL
-
- [test_find_elements_link_text[<a href=#>LINK TEXT</a>-LINK TEXT\]]
- expected: FAIL
-
[test_find_elements_link_text[<a href=# style='text-transform: uppercase'>link text</a>-LINK TEXT\]]
expected: FAIL
- [test_find_elements_partial_link_text[<a href=#>partial link text</a>-link\]]
- expected: FAIL
-
- [test_find_elements_partial_link_text[<a href=#>&nbsp;partial link text&nbsp;</a>-link\]]
- expected: FAIL
-
- [test_find_elements_partial_link_text[<a href=#>partial link text</a>-k t\]]
- expected: FAIL
-
[test_find_elements_partial_link_text[<a href=#>partial link<br>text</a>-k\\nt\]]
expected: FAIL
- [test_find_elements_partial_link_text[<a href=#>partial link&amp;text</a>-k&t\]]
- expected: FAIL
-
- [test_find_elements_partial_link_text[<a href=#>PARTIAL LINK TEXT</a>-LINK\]]
- expected: FAIL
-
[test_find_elements_partial_link_text[<a href=# style='text-transform: uppercase'>partial link text</a>-LINK\]]
expected: FAIL
- [test_xhtml_namespace[css selector-#linkText\]]
- expected: FAIL
-
- [test_xhtml_namespace[link text-full link text\]]
- expected: FAIL
-
- [test_xhtml_namespace[partial link text-link text\]]
- expected: FAIL
-
- [test_xhtml_namespace[tag name-a\]]
- expected: FAIL
-
[test_xhtml_namespace[xpath-//*[name()='a'\]\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini
index 69ec1b4bbcc..47ac0c0b589 100644
--- a/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini
@@ -1,77 +1,28 @@
[find.py]
- expected: TIMEOUT
[test_no_browsing_context]
- expected: ERROR
-
- [test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_with_startnode_from_other_window_handle]
+ [test_no_such_element_with_shadow_root]
expected: FAIL
[test_no_such_element_with_startnode_from_other_frame]
expected: FAIL
- [test_stale_element_reference[top_context\]]
- expected: FAIL
-
- [test_stale_element_reference[child_context\]]
- expected: FAIL
-
[test_find_elements[xpath-//a\]]
expected: FAIL
- [test_find_elements_link_text[<a href=#>link text</a>-link text\]]
- expected: FAIL
-
- [test_find_elements_link_text[<a href=#>&nbsp;link text&nbsp;</a>-link text\]]
- expected: FAIL
-
[test_find_elements_link_text[<a href=#>link<br>text</a>-link\\ntext\]]
expected: FAIL
- [test_find_elements_link_text[<a href=#>link&amp;text</a>-link&text\]]
- expected: FAIL
-
- [test_find_elements_link_text[<a href=#>LINK TEXT</a>-LINK TEXT\]]
- expected: FAIL
-
[test_find_elements_link_text[<a href=# style='text-transform: uppercase'>link text</a>-LINK TEXT\]]
expected: FAIL
- [test_find_elements_partial_link_text[<a href=#>partial link text</a>-link\]]
- expected: FAIL
-
- [test_find_elements_partial_link_text[<a href=#>&nbsp;partial link text&nbsp;</a>-link\]]
- expected: FAIL
-
- [test_find_elements_partial_link_text[<a href=#>partial link text</a>-k t\]]
- expected: FAIL
-
[test_find_elements_partial_link_text[<a href=#>partial link<br>text</a>-k\\nt\]]
expected: FAIL
- [test_find_elements_partial_link_text[<a href=#>partial link&amp;text</a>-k&t\]]
- expected: FAIL
-
- [test_find_elements_partial_link_text[<a href=#>PARTIAL LINK TEXT</a>-LINK\]]
- expected: FAIL
-
[test_find_elements_partial_link_text[<a href=# style='text-transform: uppercase'>partial link text</a>-LINK\]]
expected: FAIL
- [test_xhtml_namespace[css selector-#linkText\]]
- expected: FAIL
-
- [test_xhtml_namespace[link text-full link text\]]
- expected: FAIL
-
- [test_xhtml_namespace[partial link text-link text\]]
- expected: FAIL
-
- [test_xhtml_namespace[tag name-a\]]
- expected: FAIL
-
[test_xhtml_namespace[xpath-//*[name()='a'\]\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini
index 5328af1b701..18ed273c743 100644
--- a/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini
@@ -1,5 +1,4 @@
[find.py]
- expected: TIMEOUT
[test_null_parameter_value]
expected: FAIL
@@ -7,7 +6,7 @@
expected: FAIL
[test_no_browsing_context]
- expected: ERROR
+ expected: FAIL
[test_no_such_shadow_root_with_element]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini
index f00172fdc5a..44749396246 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini
@@ -8,11 +8,5 @@
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
-
[test_computed_roles[<article>foo</article>-article-article\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini
index 69b4a4c7d0b..c5bc0a36f6d 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini
@@ -1,35 +1,13 @@
[get.py]
- expected: TIMEOUT
- [test_no_top_browsing_context]
- expected: FAIL
-
[test_no_browsing_context]
- expected: ERROR
-
- [test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[open\]]
+ [test_no_such_element_with_shadow_root]
expected: FAIL
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
-
- [test_stale_element_reference[top_context\]]
- expected: FAIL
-
- [test_stale_element_reference[child_context\]]
- expected: FAIL
-
- [test_normal]
- expected: FAIL
-
[test_boolean_attribute[audio-attrs0\]]
expected: FAIL
@@ -86,9 +64,3 @@
[test_global_boolean_attributes]
expected: FAIL
-
- [test_anchor_href[relative\]]
- expected: FAIL
-
- [test_anchor_href[absolute\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini
index d55c5312a47..0af7750e50e 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini
@@ -7,9 +7,3 @@
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
-
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini
index 646e2846e18..991123b881c 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini
@@ -1,94 +1,12 @@
[get.py]
- expected: TIMEOUT
- [test_no_top_browsing_context]
- expected: FAIL
-
[test_no_browsing_context]
- expected: ERROR
-
- [test_no_such_element_with_shadow_root]
expected: FAIL
- [test_no_such_element_from_other_window_handle[open\]]
+ [test_no_such_element_with_shadow_root]
expected: FAIL
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
-
- [test_stale_element_reference[top_context\]]
- expected: FAIL
-
- [test_stale_element_reference[child_context\]]
- expected: FAIL
-
- [test_property_non_existent]
- expected: FAIL
-
- [test_content_attribute]
- expected: FAIL
-
- [test_idl_attribute]
- expected: FAIL
-
- [test_primitives["foobar"-foobar\]]
- expected: FAIL
-
- [test_primitives[42-42\]]
- expected: FAIL
-
- [test_primitives[js_primitive2-py_primitive2\]]
- expected: FAIL
-
- [test_primitives[js_primitive3-py_primitive3\]]
- expected: FAIL
-
- [test_primitives[null-None\]]
- expected: FAIL
-
- [test_primitives[undefined-None\]]
- expected: FAIL
-
- [test_collection_dom_token_list]
- expected: FAIL
-
- [test_primitives_set_by_execute_script["foobar"-foobar\]]
- expected: FAIL
-
- [test_primitives_set_by_execute_script[42-42\]]
- expected: FAIL
-
- [test_primitives_set_by_execute_script[js_primitive2-py_primitive2\]]
- expected: FAIL
-
- [test_primitives_set_by_execute_script[js_primitive3-py_primitive3\]]
- expected: FAIL
-
- [test_primitives_set_by_execute_script[null-None\]]
- expected: FAIL
-
- [test_primitives_set_by_execute_script[undefined-None\]]
- expected: FAIL
-
- [test_web_reference[frame-WebFrame\]]
- expected: FAIL
-
[test_web_reference[shadowRoot-ShadowRoot\]]
expected: FAIL
-
- [test_web_reference[window-WebWindow\]]
- expected: FAIL
-
- [test_mutated_element]
- expected: FAIL
-
- [test_anchor_href[relative\]]
- expected: FAIL
-
- [test_anchor_href[absolute\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini
index 67875a58cd9..10339e7291b 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini
@@ -8,11 +8,5 @@
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
-
[test_basic]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini
index 0ac8ff98d59..879854dfc56 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini
@@ -8,11 +8,5 @@
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
-
[test_get_element_tag_name]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini
index ad870f8f49b..66e31b2d5a7 100644
--- a/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini
@@ -8,12 +8,6 @@
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
- expected: FAIL
-
[test_transform_capitalize[space\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini b/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini
index 1f97f812861..9f75dbb4f9e 100644
--- a/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini
@@ -1,2 +1,18 @@
[enabled.py]
- expected: TIMEOUT
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_option_with_select[disabled\]]
+ expected: FAIL
+
+ [test_optgroup_with_select[disabled\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini b/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini
index eb4c0299197..2c5777abee2 100644
--- a/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini
@@ -8,8 +8,5 @@
[test_no_such_element_from_other_window_handle[closed\]]
expected: FAIL
- [test_no_such_element_from_other_frame[open\]]
- expected: FAIL
-
- [test_no_such_element_from_other_frame[closed\]]
+ [test_stale_element_reference[child_context\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini
index ff2e1c72126..7ea404e4f6a 100644
--- a/tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini
@@ -1,4 +1,5 @@
[unhandled_prompt_behavior.py]
+ expected: TIMEOUT
[test_unhandled_prompt_behavior_as_object_default[handler0-expected_capability0-True-True\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini
index 0a9efbca289..42ceab66336 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini
@@ -9,16 +9,19 @@
expected: FAIL
[test_backspace_erases_keys]
- expected: FAIL
+ expected: ERROR
[test_element_in_shadow_tree[outer-open\]]
- expected: FAIL
+ expected: ERROR
[test_element_in_shadow_tree[outer-closed\]]
- expected: FAIL
+ expected: ERROR
[test_element_in_shadow_tree[inner-open\]]
- expected: FAIL
+ expected: ERROR
[test_element_in_shadow_tree[inner-closed\]]
- expected: FAIL
+ expected: ERROR
+
+ [test_element_not_focused]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini
index 6dabfbb793f..ab545d924ac 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini
@@ -1,273 +1,12 @@
[key_events.py]
- [test_modifier_key_sends_correct_events[\\ue00a-ALT\]]
- expected: FAIL
-
- [test_modifier_key_sends_correct_events[\\ue009-CONTROL\]]
- expected: FAIL
-
- [test_modifier_key_sends_correct_events[\\ue03d-META\]]
- expected: FAIL
-
[test_modifier_key_sends_correct_events[\\ue008-SHIFT\]]
expected: FAIL
- [test_modifier_key_sends_correct_events[\\ue052-R_ALT\]]
- expected: FAIL
-
- [test_modifier_key_sends_correct_events[\\ue051-R_CONTROL\]]
- expected: FAIL
-
- [test_modifier_key_sends_correct_events[\\ue053-R_META\]]
- expected: FAIL
-
- [test_modifier_key_sends_correct_events[\\ue050-R_SHIFT\]]
- expected: FAIL
-
[test_non_printable_key_sends_events[\\ue00c-ESCAPE\]]
expected: FAIL
- [test_non_printable_key_sends_events[\\ue014-RIGHT\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events[a-KeyA0\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events[a-KeyA1\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events["-Quote\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events[,-Comma\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events[\\xe0-\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events[\\u0416-\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events[@-Digit2\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events[\\u2603-\]]
- expected: FAIL
-
- [test_printable_key_sends_correct_events[\\uf6c2-\]]
- expected: FAIL
-
- [test_sequence_of_keydown_printable_keys_sends_events]
- expected: FAIL
-
- [test_sequence_of_keydown_printable_characters_sends_events]
- expected: FAIL
-
- [test_special_key_sends_keydown[ADD-expected0\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[ALT-expected1\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[BACKSPACE-expected2\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[CANCEL-expected3\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[CLEAR-expected4\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[CONTROL-expected5\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[DECIMAL-expected6\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[DELETE-expected7\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[DIVIDE-expected8\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[DOWN-expected9\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[END-expected10\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[ENTER-expected11\]]
- expected: FAIL
-
[test_special_key_sends_keydown[EQUALS-expected12\]]
expected: FAIL
- [test_special_key_sends_keydown[ESCAPE-expected13\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F1-expected14\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F10-expected15\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F11-expected16\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F12-expected17\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F2-expected18\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F3-expected19\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F4-expected20\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F5-expected21\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F6-expected22\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F7-expected23\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F8-expected24\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[F9-expected25\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[HELP-expected26\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[HOME-expected27\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[INSERT-expected28\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[LEFT-expected29\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[META-expected30\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[MULTIPLY-expected31\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NULL-expected32\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD0-expected33\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD1-expected34\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD2-expected35\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD3-expected36\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD4-expected37\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD5-expected38\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD6-expected39\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD7-expected40\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD8-expected41\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[NUMPAD9-expected42\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[PAGE_DOWN-expected43\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[PAGE_UP-expected44\]]
- expected: FAIL
-
[test_special_key_sends_keydown[PAUSE-expected45\]]
expected: FAIL
-
- [test_special_key_sends_keydown[RETURN-expected46\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[RIGHT-expected47\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_ALT-expected48\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_ARROWDOWN-expected49\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_ARROWLEFT-expected50\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_ARROWRIGHT-expected51\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_ARROWUP-expected52\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_CONTROL-expected53\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_DELETE-expected54\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_END-expected55\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_HOME-expected56\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_INSERT-expected57\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_META-expected58\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_PAGEDOWN-expected59\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_PAGEUP-expected60\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[R_SHIFT-expected61\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[SEMICOLON-expected62\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[SEPARATOR-expected63\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[SHIFT-expected64\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[SPACE-expected65\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[SUBTRACT-expected66\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[TAB-expected67\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[UP-expected68\]]
- expected: FAIL
-
- [test_special_key_sends_keydown[ZENKAKUHANKAKU-expected69\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini
index 70b4b687388..118e70b33a8 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini
@@ -1,10 +1,4 @@
[key_modifiers.py]
- [test_shift_modifier_and_non_printable_keys[\\ue008\]]
- expected: FAIL
-
- [test_shift_modifier_and_non_printable_keys[\\ue050\]]
- expected: FAIL
-
[test_shift_modifier_generates_capital_letters[\\ue008\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini
index 43e9ac6cf32..8a5f8770474 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini
@@ -1,3 +1,6 @@
[key_shortcuts.py]
[test_mod_a_mod_c_right_mod_v_pastes_text]
expected: FAIL
+
+ [test_mod_a_mod_x_deletes_all_text]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini
index 9f97050ec49..5e1b1b41869 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini
@@ -1,7 +1,4 @@
[key_special_keys.py]
- [test_codepoint_keys_behave_correctly[\\U0001f604\]]
- expected: FAIL
-
[test_codepoint_keys_behave_correctly[\\U0001f60d\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini
index 38af76d3cf4..b7b8bf52a22 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini
@@ -1,4 +1,5 @@
[navigation.py]
+ expected: TIMEOUT
[test_key]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini
index e0fb2381634..62af3a877f5 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini
@@ -1,9 +1,9 @@
[pointer_contextmenu.py]
[test_control_click[\\ue009-ctrlKey\]]
- expected: ERROR
+ expected: FAIL
[test_control_click[\\ue051-ctrlKey\]]
- expected: ERROR
+ expected: FAIL
[test_release_control_click]
- expected: ERROR
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_dblclick.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_dblclick.py.ini
deleted file mode 100644
index 523d8d29edb..00000000000
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_dblclick.py.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[pointer_dblclick.py]
- [test_dblclick_at_coordinates[0\]]
- expected: FAIL
-
- [test_dblclick_at_coordinates[200\]]
- expected: FAIL
-
- [test_no_dblclick_when_mouse_moves]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini
index ebb9ef4dcc0..af13d756701 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini
@@ -1,21 +1,21 @@
[pointer_modifier_click.py]
[test_modifier_click[\\ue00a-altKey\]]
- expected: ERROR
+ expected: FAIL
[test_modifier_click[\\ue052-altKey\]]
- expected: ERROR
+ expected: FAIL
[test_modifier_click[\\ue03d-metaKey\]]
- expected: ERROR
+ expected: FAIL
[test_modifier_click[\\ue053-metaKey\]]
- expected: ERROR
+ expected: FAIL
[test_modifier_click[\\ue008-shiftKey\]]
- expected: ERROR
+ expected: FAIL
[test_modifier_click[\\ue050-shiftKey\]]
- expected: ERROR
+ expected: FAIL
[test_many_modifiers_click]
- expected: ERROR
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini
index 4222966b349..d4ef4398b7f 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini
@@ -1,4 +1,5 @@
[pointer_mouse.py]
+ expected: TIMEOUT
[test_no_top_browsing_context]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini
index 5c08076b7b2..d7922cb4283 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini
@@ -1,4 +1,5 @@
[pointer_pen.py]
+ expected: TIMEOUT
[test_no_top_browsing_context]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini
index 2dd2ee19891..85e34998125 100644
--- a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini
@@ -1,4 +1,5 @@
[pointer_touch.py]
+ expected: TIMEOUT
[test_no_top_browsing_context]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini b/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini
index aed5f673813..9c048ff9b5f 100644
--- a/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini
@@ -1,4 +1,5 @@
[sequence_tentative.py]
+ expected: TIMEOUT
[test_release_mouse_sequence_resets_dblclick_state[with release actions\]]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini b/tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini
index 6b28c2efdf8..d530b687213 100644
--- a/tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini
@@ -15,7 +15,7 @@
expected: FAIL
[test_set_to_available_size]
- expected: ERROR
+ expected: FAIL
[test_set_smaller_than_minimum_browser_size]
expected: FAIL
@@ -30,10 +30,22 @@
expected: FAIL
[test_negative_x_y]
- expected: ERROR
+ expected: FAIL
[test_set_to_screen_size]
- expected: ERROR
+ expected: FAIL
[test_set_larger_than_screen_size]
- expected: ERROR
+ expected: FAIL
+
+ [test_width_height_floats]
+ expected: FAIL
+
+ [test_height_width_as_current]
+ expected: FAIL
+
+ [test_height_as_current]
+ expected: FAIL
+
+ [test_width_as_current]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini
index ee73fbf4ce8..66625728565 100644
--- a/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini
@@ -16,6 +16,3 @@
[test_frame_id_shadow_root]
expected: FAIL
-
- [test_frame_id_null]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini
index ffd3d06f212..352421f84c1 100644
--- a/tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini
@@ -1,6 +1,3 @@
[switch.py]
- [test_switch_from_iframe]
- expected: FAIL
-
[test_switch_from_top_level]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini
index 3e6ad0c8af9..aa34b0b2489 100644
--- a/tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini
@@ -1,3 +1,4 @@
[alerts.py]
+ expected: TIMEOUT
[test_retain_tab_modal_status]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini
index 9b0ec38199b..44ac97a7a36 100644
--- a/tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini
@@ -1,4 +1,5 @@
[switch.py]
+ expected: TIMEOUT
[test_no_top_browsing_context]
expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini
index dd77eca9d72..c6374102e3f 100644
--- a/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini
@@ -1,9 +1,3 @@
[iframe.py]
[test_frame_element]
expected: FAIL
-
- [test_source_origin[same_origin\]]
- expected: FAIL
-
- [test_source_origin[cross_origin\]]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_screenshot/iframe.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/iframe.py.ini
new file mode 100644
index 00000000000..b63f4c9fb07
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/iframe.py.ini
@@ -0,0 +1,9 @@
+[iframe.py]
+ [test_always_captures_top_browsing_context]
+ expected: FAIL
+
+ [test_source_origin[same_origin\]]
+ expected: FAIL
+
+ [test_source_origin[cross_origin\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini
index f2fac7a7fa1..aef7c9d5ddc 100644
--- a/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini
+++ b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini
@@ -4,3 +4,6 @@
[test_no_browsing_context]
expected: FAIL
+
+ [test_format_and_dimensions]
+ expected: FAIL
diff --git a/tests/wpt/meta/websockets/stream/tentative/write.any.js.ini b/tests/wpt/meta/websockets/stream/tentative/write.any.js.ini
new file mode 100644
index 00000000000..491b41e2c47
--- /dev/null
+++ b/tests/wpt/meta/websockets/stream/tentative/write.any.js.ini
@@ -0,0 +1,118 @@
+[write.any.sharedworker.html?wpt_flags=h2]
+ expected: ERROR
+
+[write.any.serviceworker.html?default]
+ expected: ERROR
+
+[write.any.worker.html?wpt_flags=h2]
+ [a write that was incomplete at close time should reject]
+ expected: FAIL
+
+ [garbage collection after close with a pending write promise should not crash]
+ expected: FAIL
+
+ [writing a value that cannot be stringified should cause a rejection]
+ expected: FAIL
+
+ [writing a resizable ArrayBuffer should be rejected]
+ expected: FAIL
+
+ [writing a view on a shared buffer should be rejected]
+ expected: FAIL
+
+
+[write.any.sharedworker.html?wss]
+ expected: ERROR
+
+[write.any.html?default]
+ [a write that was incomplete at close time should reject]
+ expected: FAIL
+
+ [garbage collection after close with a pending write promise should not crash]
+ expected: FAIL
+
+ [writing a value that cannot be stringified should cause a rejection]
+ expected: FAIL
+
+ [writing a resizable ArrayBuffer should be rejected]
+ expected: FAIL
+
+ [writing a view on a shared buffer should be rejected]
+ expected: FAIL
+
+
+[write.any.worker.html?wss]
+ [a write that was incomplete at close time should reject]
+ expected: FAIL
+
+ [garbage collection after close with a pending write promise should not crash]
+ expected: FAIL
+
+ [writing a value that cannot be stringified should cause a rejection]
+ expected: FAIL
+
+ [writing a resizable ArrayBuffer should be rejected]
+ expected: FAIL
+
+ [writing a view on a shared buffer should be rejected]
+ expected: FAIL
+
+
+[write.any.serviceworker.html?wpt_flags=h2]
+ expected: ERROR
+
+[write.any.html?wpt_flags=h2]
+ [a write that was incomplete at close time should reject]
+ expected: FAIL
+
+ [garbage collection after close with a pending write promise should not crash]
+ expected: FAIL
+
+ [writing a value that cannot be stringified should cause a rejection]
+ expected: FAIL
+
+ [writing a resizable ArrayBuffer should be rejected]
+ expected: FAIL
+
+ [writing a view on a shared buffer should be rejected]
+ expected: FAIL
+
+
+[write.any.serviceworker.html?wss]
+ expected: ERROR
+
+[write.any.sharedworker.html?default]
+ expected: ERROR
+
+[write.any.worker.html?default]
+ [a write that was incomplete at close time should reject]
+ expected: FAIL
+
+ [garbage collection after close with a pending write promise should not crash]
+ expected: FAIL
+
+ [writing a value that cannot be stringified should cause a rejection]
+ expected: FAIL
+
+ [writing a resizable ArrayBuffer should be rejected]
+ expected: FAIL
+
+ [writing a view on a shared buffer should be rejected]
+ expected: FAIL
+
+
+[write.any.html?wss]
+ [a write that was incomplete at close time should reject]
+ expected: FAIL
+
+ [garbage collection after close with a pending write promise should not crash]
+ expected: FAIL
+
+ [writing a value that cannot be stringified should cause a rejection]
+ expected: FAIL
+
+ [writing a resizable ArrayBuffer should be rejected]
+ expected: FAIL
+
+ [writing a view on a shared buffer should be rejected]
+ expected: FAIL
diff --git a/tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini
new file mode 100644
index 00000000000..80f9a4f15b8
--- /dev/null
+++ b/tests/wpt/meta/workers/constructors/Worker/Worker-constructor.html.ini
@@ -0,0 +1,2 @@
+[Worker-constructor.html]
+ expected: ERROR
diff --git a/tests/wpt/meta/workers/tentative/SharedWorker-extendedLifetime.html.ini b/tests/wpt/meta/workers/tentative/SharedWorker-extendedLifetime.html.ini
new file mode 100644
index 00000000000..086935d2b6d
--- /dev/null
+++ b/tests/wpt/meta/workers/tentative/SharedWorker-extendedLifetime.html.ini
@@ -0,0 +1,3 @@
+[SharedWorker-extendedLifetime.html]
+ [SharedWorker lifetime should be extended with extendedLifetime]
+ expected: FAIL
diff --git a/tests/wpt/meta/xhr/abort-during-done.window.js.ini b/tests/wpt/meta/xhr/abort-during-done.window.js.ini
deleted file mode 100644
index cfce26bf75b..00000000000
--- a/tests/wpt/meta/xhr/abort-during-done.window.js.ini
+++ /dev/null
@@ -1,9 +0,0 @@
-[abort-during-done.window.html]
- [XMLHttpRequest: abort() during DONE (sync)]
- expected: FAIL
-
- [XMLHttpRequest: abort() during DONE (sync aborted in readystatechange)]
- expected: FAIL
-
- [XMLHttpRequest: abort() during DONE (async)]
- expected: FAIL
diff --git a/tests/wpt/meta/xhr/abort-during-headers-received.window.js.ini b/tests/wpt/meta/xhr/abort-during-headers-received.window.js.ini
deleted file mode 100644
index aa78b3966cc..00000000000
--- a/tests/wpt/meta/xhr/abort-during-headers-received.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[abort-during-headers-received.window.html]
- [XMLHttpRequest: abort() during HEADERS_RECEIVED]
- expected: FAIL
diff --git a/tests/wpt/meta/xhr/abort-during-loading.window.js.ini b/tests/wpt/meta/xhr/abort-during-loading.window.js.ini
deleted file mode 100644
index 33a6772164b..00000000000
--- a/tests/wpt/meta/xhr/abort-during-loading.window.js.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[abort-during-loading.window.html]
- [XMLHttpRequest: abort() during LOADING]
- expected: FAIL
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index 1fda350b1ab..cce286bb674 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -91,86 +91,6 @@
}
},
"reftest": {
- "appearance": {
- "input-text-definite-width.html": [
- "fda46f8af9c14cef3911ec809054624204848b9d",
- [
- "appearance/input-text-definite-width.html",
- [
- [
- "/_mozilla/appearance/input-text-definite-width-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "input-text-empty.html": [
- "bd5f5f5a21ec0ce028922a6764de41dc904a1eb1",
- [
- "appearance/input-text-empty.html",
- [
- [
- "/_mozilla/appearance/input-text-empty-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "input-text-nonempty-placeholder.html": [
- "e075663cb6ae708b313b3cd5cd69f78c51b4bc1f",
- [
- "appearance/input-text-nonempty-placeholder.html",
- [
- [
- "/_mozilla/appearance/input-text-nonempty-placeholder-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "input-text-overflow.html": [
- "52db07c0f0274d2b7b086d7017982145c25918da",
- [
- "appearance/input-text-overflow.html",
- [
- [
- "/_mozilla/appearance/input-text-overflow-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "input-text-placeholder-overflow.html": [
- "c4d77ae2a22a5b7972f2798b8ca78742b81bacc4",
- [
- "appearance/input-text-placeholder-overflow.html",
- [
- [
- "/_mozilla/appearance/input-text-placeholder-overflow-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "input-text-placeholder.html": [
- "d75acade78038b14529135b1d63c0ac5a168a87b",
- [
- "appearance/input-text-placeholder.html",
- [
- [
- "/_mozilla/appearance/input-text-placeholder-ref.html",
- "=="
- ]
- ],
- {}
- ]
- ]
- },
"css": {
"abs-overflow-stackingcontext.html": [
"264df01aa64e0abe9ea3a75e57452c27d53a904f",
@@ -8155,38 +8075,6 @@
"b485d435a63ada28eabe976b49a8a580725e7508",
[]
],
- "appearance": {
- "input-text-definite-width-ref.html": [
- "86f7937755750261ed3b06dfe11e78a251b9d175",
- []
- ],
- "input-text-empty-ref.html": [
- "437c9988a13e094d870f67c8de0dd0becdeece76",
- []
- ],
- "input-text-nonempty-placeholder-ref.html": [
- "5415dfb2a4a88dc3bfed6ad04e23f288534351e4",
- []
- ],
- "input-text-overflow-ref.html": [
- "4cece657a2a09cfe3f1d91d49f0c9d76f5714516",
- []
- ],
- "input-text-placeholder-overflow-ref.html": [
- "0cccfff638c0d8687a3582310c73233b7d883b1a",
- []
- ],
- "input-text-placeholder-ref.html": [
- "fa5b60bdabdf2b9b818ebe66bfc7f2711173b88b",
- []
- ],
- "supports": {
- "input-text-ref.css": [
- "8cf00d493138285e50aa510273abae98c099ae8b",
- []
- ]
- }
- },
"bluetooth": {
"bluetooth-helpers.js": [
"16a280cca298bcaa5796b36b48d331bfd15baae8",
diff --git a/tests/wpt/mozilla/meta/css/input_placeholder.html.ini b/tests/wpt/mozilla/meta/css/input_placeholder.html.ini
deleted file mode 100644
index f08c3ba3666..00000000000
--- a/tests/wpt/mozilla/meta/css/input_placeholder.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[input_placeholder.html]
- expected: FAIL
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-definite-width-ref.html b/tests/wpt/mozilla/tests/appearance/input-text-definite-width-ref.html
deleted file mode 100644
index 86f79377557..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-definite-width-ref.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Input type=text With a Definite Width</title>
- <link rel="stylesheet" href="./supports/input-text-ref.css">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <div id="input" class="definite-width">
- Foo
- </div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-definite-width.html b/tests/wpt/mozilla/tests/appearance/input-text-definite-width.html
deleted file mode 100644
index fda46f8af9c..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-definite-width.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Input type=text With a Definite Width</title>
- <link rel="match" href="input-text-definite-width-ref.html">
- <link rel="help" href="https://github.com/servo/servo/pull/37065">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <input type="text" value="Foo" style="font-size: 1em !important; width: 100px;"></input>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-empty-ref.html b/tests/wpt/mozilla/tests/appearance/input-text-empty-ref.html
deleted file mode 100644
index 437c9988a13..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-empty-ref.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Empty Input type=text With a Definite Width</title>
- <link rel="stylesheet" href="./supports/input-text-ref.css">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <div id="input" class="definite-width">
- <br>
- </div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-empty.html b/tests/wpt/mozilla/tests/appearance/input-text-empty.html
deleted file mode 100644
index bd5f5f5a21e..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-empty.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Empty Input type=text With a Definite Width</title>
- <link rel="match" href="input-text-empty-ref.html">
- <link rel="help" href="https://github.com/servo/servo/pull/37065">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <input type="text" style="font-size: 1em !important; width: 100px;"></input>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-nonempty-placeholder-ref.html b/tests/wpt/mozilla/tests/appearance/input-text-nonempty-placeholder-ref.html
deleted file mode 100644
index 5415dfb2a4a..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-nonempty-placeholder-ref.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of a Non-empty Input type=text With a Definite Width and a Placeholder</title>
- <link rel="stylesheet" href="./supports/input-text-ref.css">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <div id="input" class="definite-width">
- Foo
- </div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-nonempty-placeholder.html b/tests/wpt/mozilla/tests/appearance/input-text-nonempty-placeholder.html
deleted file mode 100644
index e075663cb6a..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-nonempty-placeholder.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of a Non-empty Input type=text With a Definite Width and a Placeholder</title>
- <link rel="match" href="input-text-nonempty-placeholder-ref.html">
- <link rel="help" href="https://github.com/servo/servo/pull/37065">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <input type="text" value="Foo" placeholder="Bar" style="font-size: 1em !important; width: 100px;"></input>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-overflow-ref.html b/tests/wpt/mozilla/tests/appearance/input-text-overflow-ref.html
deleted file mode 100644
index 4cece657a2a..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-overflow-ref.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Overflowing Input type=text With a Definite Width</title>
- <link rel="stylesheet" href="./supports/input-text-ref.css">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <div id="input" class="definite-width">
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- </div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-overflow.html b/tests/wpt/mozilla/tests/appearance/input-text-overflow.html
deleted file mode 100644
index 52db07c0f02..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-overflow.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Overflowing Input type=text With a Definite Width</title>
- <link rel="match" href="input-text-overflow-ref.html">
- <link rel="help" href="https://github.com/servo/servo/pull/37065">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <input type="text" value="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." style="font-size: 1em !important; width: 100px;"></input>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-placeholder-overflow-ref.html b/tests/wpt/mozilla/tests/appearance/input-text-placeholder-overflow-ref.html
deleted file mode 100644
index 0cccfff638c..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-placeholder-overflow-ref.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Input type=text With a Definite Width and an Overflowing Placeholder</title>
- <link rel="stylesheet" href="./supports/input-text-ref.css">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <div id="input" class="definite-width placeholder-color">
- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- </div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-placeholder-overflow.html b/tests/wpt/mozilla/tests/appearance/input-text-placeholder-overflow.html
deleted file mode 100644
index c4d77ae2a22..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-placeholder-overflow.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Input type=text With a Definite Width and an Overflowing Placeholder</title>
- <link rel="match" href="input-text-placeholder-overflow-ref.html">
- <link rel="help" href="https://github.com/servo/servo/pull/37065">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <input type="text" placeholder="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." style="font-size: 1em !important; width: 100px;"></input>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-placeholder-ref.html b/tests/wpt/mozilla/tests/appearance/input-text-placeholder-ref.html
deleted file mode 100644
index fa5b60bdabd..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-placeholder-ref.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Input type=text With a Definite Width and a Placeholder</title>
- <link rel="stylesheet" href="./supports/input-text-ref.css">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <div id="input" class="definite-width placeholder-color">
- Bar
- </div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/input-text-placeholder.html b/tests/wpt/mozilla/tests/appearance/input-text-placeholder.html
deleted file mode 100644
index d75acade780..00000000000
--- a/tests/wpt/mozilla/tests/appearance/input-text-placeholder.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>Appearance of an Input type=text With a Definite Width and a Placeholder</title>
- <link rel="match" href="input-text-placeholder-ref.html">
- <link rel="help" href="https://github.com/servo/servo/pull/37065">
-</head>
-<body>
-Display of an input type=text should match the display generated by the CSS reference.
-<div>
- <input type="text" placeholder="Bar" style="font-size: 1em !important; width: 100px;"></input>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/appearance/supports/input-text-ref.css b/tests/wpt/mozilla/tests/appearance/supports/input-text-ref.css
deleted file mode 100644
index 8cf00d49313..00000000000
--- a/tests/wpt/mozilla/tests/appearance/supports/input-text-ref.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Minimal stylesheet to mimic the appearence of an input type=text specific to Servo.
- * This stylesheet is expected to be modified following the development of the
- * Shadow DOM input type=text in Servo.
- */
-
-#input {
- display: inline-block;
- background: white;
- border: solid lightgrey 1px;
- font-family: sans-serif;
- font-size: 1em; /* We are using 1em here to reduce the effect of inconsistencies in layout */
- overflow: hidden;
- white-space: nowrap;
-}
-
-/* We are using definite width for most of the test to reduce the effect if calculating inline
- * size of the input element. Which, will depends on the average character width of a font.
- *
- * <https://html.spec.whatwg.org/#converting-a-character-width-to-pixels>
- */
-.definite-width {
- width: 100px;
-}
-
-.placeholder-color {
- color: grey;
-} \ No newline at end of file
diff --git a/tests/wpt/tests/client-hints/permissions-policy/WEB_FEATURES.yml b/tests/wpt/tests/client-hints/permissions-policy/WEB_FEATURES.yml
new file mode 100644
index 00000000000..da7599308cc
--- /dev/null
+++ b/tests/wpt/tests/client-hints/permissions-policy/WEB_FEATURES.yml
@@ -0,0 +1,6 @@
+features:
+- name: ua-client-hints
+ # Note: if any permissions-policy tests are added that do not
+ # depend on ua-client-hints, `files` below should be updated
+ # accordingly.
+ files: "**"
diff --git a/tests/wpt/tests/container-timing/resources/container-timing-helpers.js b/tests/wpt/tests/container-timing/resources/container-timing-helpers.js
index a80ad964fef..8b3f21dff56 100644
--- a/tests/wpt/tests/container-timing/resources/container-timing-helpers.js
+++ b/tests/wpt/tests/container-timing/resources/container-timing-helpers.js
@@ -20,3 +20,19 @@ function checkContainerEntry(entry, identifier, last_element_id, beforeRender) {
function checkContainerSize(entry, size) {
assert_equals(entry.size, size);
}
+
+function finishOnElementTiming(t) {
+ const finish_observer = new PerformanceObserver(() => {
+ requestAnimationFrame(() => { t.done(); });
+ });
+ finish_observer.observe({ entryTypes: ['element'] });
+}
+
+function addPaintingElementTimingAfterDoubleRAF(parent) {
+ requestAnimationFrame(() => requestAnimationFrame(() => {
+ const finish_img = document.createElement('img');
+ finish_img.src = '/container-timing/resources/square100.png';
+ finish_img.setAttribute('elementtiming', '');
+ parent.appendChild(finish_img);
+ }));
+}
diff --git a/tests/wpt/tests/container-timing/tentative/containertiming-with-child-ignore-and-child-img.html b/tests/wpt/tests/container-timing/tentative/containertiming-with-child-ignore-and-child-img.html
new file mode 100644
index 00000000000..b4fa9754c10
--- /dev/null
+++ b/tests/wpt/tests/container-timing/tentative/containertiming-with-child-ignore-and-child-img.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Container Timing: an image inside a containertiming-ignore inside a containertiming root</title>
+<body>
+<style>
+body {
+ margin: 0;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/container-timing/resources/container-timing-helpers.js"></script>
+<script src="/element-timing/resources/element-timing-helpers.js"></script>
+<script>
+ async_test(function (t) {
+ assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
+ const observer = new PerformanceObserver(
+ function(entryList) {
+ assert_unreached("No entry is expected with nothing to paint");
+ }
+ );
+ observer.observe({entryTypes: ['container']});
+
+ finishOnElementTiming(t);
+
+ // Add a div that is the container timing root
+ const div1 = document.createElement('div');
+ div1.setAttribute('containertiming', 'div1_ct');
+ document.body.appendChild(div1);
+
+ // Intermediate ignore should block paint events
+ const div2 = document.createElement('div');
+ div2.setAttribute('containertiming-ignore', '');
+ div1.appendChild(div2)
+
+ // Add image of width equal to 100 and height equal to 100.
+ const img = document.createElement('img');
+ img.src = '/container-timing/resources/square100.png';
+ img.setAttribute('id', 'img_id');
+ div2.appendChild(img);
+
+ addPaintingElementTimingAfterDoubleRAF(document.body);
+ }, 'Paint of the image child of container timing with ignore in the middle is not reported.');
+</script>
+
+</body>
diff --git a/tests/wpt/tests/container-timing/tentative/containertiming-with-ignore-and-child-img.html b/tests/wpt/tests/container-timing/tentative/containertiming-with-ignore-and-child-img.html
new file mode 100644
index 00000000000..20e9e4a9218
--- /dev/null
+++ b/tests/wpt/tests/container-timing/tentative/containertiming-with-ignore-and-child-img.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Container Timing: observe with a node with containertiming and containertiming-ignore, and an image child</title>
+<body>
+<style>
+body {
+ margin: 0;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/container-timing/resources/container-timing-helpers.js"></script>
+<script src="/element-timing/resources/element-timing-helpers.js"></script>
+<script>
+ let beforeRender;
+ async_test(function (t) {
+ assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
+ const observer = new PerformanceObserver(
+ t.step_func_done(function(entryList) {
+ assert_equals(entryList.getEntries().length, 1);
+ const entry = entryList.getEntries()[0];
+ checkContainerEntry(entry, 'div_ct', 'img_id', beforeRender)
+ checkRect(entry, [0, 100, 0, 100])
+ checkContainerSize(entry, 10000);
+ })
+ );
+ observer.observe({entryTypes: ['container']});
+
+ // Add a div that is the container timing root
+ // and containertiming-ignore, that should be ignored as
+ // containertiming takes precedence.
+ const div = document.createElement('div');
+ div.setAttribute('containertiming', 'div_ct');
+ div.setAttribute('containertiming-ignore', '');
+ document.body.appendChild(div);
+ // Add image of width equal to 100 and height equal to 100.
+ const img = document.createElement('img');
+ img.src = '/container-timing/resources/square100.png';
+ img.setAttribute('id', 'img_id');
+ div.appendChild(img);
+ beforeRender = performance.now();
+ }, 'Paint of the image child of container timing with ignore is not blocked.');
+</script>
+
+</body>
diff --git a/tests/wpt/tests/container-timing/tentative/ignore-with-containertiming-and-child-img.html b/tests/wpt/tests/container-timing/tentative/ignore-with-containertiming-and-child-img.html
new file mode 100644
index 00000000000..841b4441d4d
--- /dev/null
+++ b/tests/wpt/tests/container-timing/tentative/ignore-with-containertiming-and-child-img.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Container Timing: an image inside a containertiming inside a containertiming-ignore</title>
+<body>
+<style>
+body {
+ margin: 0;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/container-timing/resources/container-timing-helpers.js"></script>
+<script src="/element-timing/resources/element-timing-helpers.js"></script>
+<script>
+ let beforeRender;
+ async_test(function (t) {
+ assert_implements(window.PerformanceContainerTiming, "PerformanceContainerTiming is not implemented");
+ const observer = new PerformanceObserver(
+ t.step_func_done(function(entryList) {
+ assert_equals(entryList.getEntries().length, 1);
+ const entry = entryList.getEntries()[0];
+ checkContainerEntry(entry, 'div2_ct', 'img_id', beforeRender)
+ checkRect(entry, [0, 100, 0, 100])
+ checkContainerSize(entry, 10000);
+ })
+ );
+ observer.observe({entryTypes: ['container']});
+
+ // Add a div that is the container timing root
+ const div1 = document.createElement('div');
+ div1.setAttribute('containertiming-ignore', '');
+ document.body.appendChild(div1);
+
+ // Intermediate ignore should block paint events
+ const div2 = document.createElement('div');
+ div2.setAttribute('containertiming', 'div2_ct');
+ div1.appendChild(div2)
+
+ // Add image of width equal to 100 and height equal to 100.
+ const img = document.createElement('img');
+ img.src = '/container-timing/resources/square100.png';
+ img.setAttribute('id', 'img_id');
+ div2.appendChild(img);
+
+ beforeRender = performance.now();
+}, 'An image inside a containertiming, inside a containertiming-ignore is still reported.');
+</script>
+
+</body>
diff --git a/tests/wpt/tests/content-security-policy/default-src/default-src-sri_hash.sub.html b/tests/wpt/tests/content-security-policy/default-src/default-src-sri_hash.sub.html
index 87fce5961fd..87389c306a5 100644
--- a/tests/wpt/tests/content-security-policy/default-src/default-src-sri_hash.sub.html
+++ b/tests/wpt/tests/content-security-policy/default-src/default-src-sri_hash.sub.html
@@ -7,6 +7,9 @@
<script src='/resources/testharnessreport.js' nonce='dummy'></script>
<!-- CSP served: default-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA=='; style-src 'unsafe-inline' -->
+ <!-- The domain here is intentionally served with `www`. In the event that the integrity check fails,
+ the request should be disallowed by the source list. If we were to use {{domains[]}},
+ then we would not be able to observe the difference with regards to the integrity check -->
<!-- ShA256 is intentionally mixed case -->
</head>
@@ -18,6 +21,8 @@
var port = "{{ports[http][0]}}";
if (location.protocol === "https:")
port = "{{ports[https][0]}}";
+ // Since {{domains[www]}} is allowed by the CSP policy, regardless of the integrity check
+ // the request would be allowed.
var crossorigin_base = location.protocol + "//{{domains[www]}}:" + port;
// Test name, src, integrity, expected to run.
diff --git a/tests/wpt/tests/content-security-policy/script-src/script-src-sri_hash.sub.html b/tests/wpt/tests/content-security-policy/script-src/script-src-sri_hash.sub.html
index 9216e2b0d49..e290911183d 100644
--- a/tests/wpt/tests/content-security-policy/script-src/script-src-sri_hash.sub.html
+++ b/tests/wpt/tests/content-security-policy/script-src/script-src-sri_hash.sub.html
@@ -7,6 +7,9 @@
<script src='/resources/testharnessreport.js' nonce='dummy'></script>
<!-- CSP served: script-src {{domains[www]}}:* 'nonce-dummy' 'sha256-wIc3KtqOuTFEu6t17sIBuOswgkV406VJvhSk79Gw6U0=' 'ShA256-L7/UQ9VWpyG7C9RDEC4ctS5hI3Zcw+ta+haPGlByG9c=' 'sha512-rYCVMxWV5nq8IsMo+UZNObWtEiWGok/vDN8BMoEQi41s0znSes6E1Q2aag3Lw3u2J1w2rqH7uF2ws6FpQhfSOA==' -->
+ <!-- The domain here is intentionally served with `www`. In the event that the integrity check fails,
+ the request should be disallowed by the source list. If we were to use {{domains[]}},
+ then we would not be able to observe the difference with regards to the integrity check -->
<!-- ShA256 is intentionally mixed case -->
</head>
@@ -18,6 +21,8 @@
var port = "{{ports[http][0]}}";
if (location.protocol === "https:")
port = "{{ports[https][0]}}";
+ // Since {{domains[www]}} is allowed by the CSP policy, regardless of the integrity check
+ // the request would be allowed.
var crossorigin_base = location.protocol + "//{{domains[www]}}:" + port;
// Test name, src, integrity, expected to run.
diff --git a/tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html b/tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html
index c5e33dc4253..9a8ad7a4ef2 100644
--- a/tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html
+++ b/tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html
@@ -2,11 +2,12 @@
<html>
<head>
- <title>Parser-inserted scripts without a correct nonce are not allowed with `strict-dynamic` in the script-src directive.</title>
+ <title>Parser-inserted scripts without a correct nonce are not allowed with `Strict-Dynamic` in the script-src directive.</title>
<script src='/resources/testharness.js' nonce='dummy'></script>
<script src='/resources/testharnessreport.js' nonce='dummy'></script>
- <!-- CSP served: script-src 'strict-dynamic' 'nonce-dummy' -->
+ <!-- CSP served: script-src 'Strict-Dynamic' 'nonce-dummy' -->
+ <!-- Strict-Dynamic is intentionally mixed case -->
</head>
<body>
diff --git a/tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers b/tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers
index b7918c93323..9d0b3b93d44 100644
--- a/tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers
+++ b/tests/wpt/tests/content-security-policy/script-src/script-src-strict_dynamic_parser_inserted.html.headers
@@ -2,4 +2,4 @@ Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0, false
Pragma: no-cache
-Content-Security-Policy: script-src 'strict-dynamic' 'nonce-dummy'
+Content-Security-Policy: script-src 'Strict-Dynamic' 'nonce-dummy'
diff --git a/tests/wpt/tests/cookie-store/META.yml b/tests/wpt/tests/cookie-store/META.yml
index 68c30024552..4bbc6311bdc 100644
--- a/tests/wpt/tests/cookie-store/META.yml
+++ b/tests/wpt/tests/cookie-store/META.yml
@@ -1,4 +1,3 @@
spec: https://wicg.github.io/cookie-store/
suggested_reviewers:
- - inexorabletash
- - ayuishii
+ - dcthetall
diff --git a/tests/wpt/tests/cookie-store/cookieStore_special_names.https.any.js b/tests/wpt/tests/cookie-store/cookieStore_special_names.https.any.js
index e2a3df7fe33..1e12674a7f7 100644
--- a/tests/wpt/tests/cookie-store/cookieStore_special_names.https.any.js
+++ b/tests/wpt/tests/cookie-store/cookieStore_special_names.https.any.js
@@ -3,7 +3,7 @@
'use strict';
-['__Secure-', '__Host-'].forEach(prefix => {
+['__Secure-', '__secure-', '__Host-', '__host-'].forEach(prefix => {
promise_test(async testCase => {
await cookieStore.set(`${prefix}cookie-name`, `secure-cookie-value`);
assert_equals(
@@ -32,25 +32,27 @@
}, `cookieStore.delete with ${prefix} name on secure origin`);
});
-promise_test(async testCase => {
- const currentUrl = new URL(self.location.href);
- const currentDomain = currentUrl.hostname;
- await promise_rejects_js(testCase, TypeError,
- cookieStore.set({ name: '__Host-cookie-name', value: 'cookie-value',
- domain: currentDomain }));
-}, 'cookieStore.set with __Host- prefix and a domain option');
+['__Host-', '__host-'].forEach(prefix => {
+ promise_test(async testCase => {
+ const currentUrl = new URL(self.location.href);
+ const currentDomain = currentUrl.hostname;
+ await promise_rejects_js(testCase, TypeError,
+ cookieStore.set({ name: `${prefix}cookie-name`, value: 'cookie-value',
+ domain: currentDomain }));
+ }, `cookieStore.set with ${prefix} prefix and a domain option`);
-promise_test(async testCase => {
- await cookieStore.set({ name: '__Host-cookie-name', value: 'cookie-value',
- path: "/" });
+ promise_test(async testCase => {
+ await cookieStore.set({ name: `${prefix}cookie-name`, value: 'cookie-value',
+ path: "/" });
- assert_equals(
- (await cookieStore.get(`__Host-cookie-name`)).value, "cookie-value");
+ assert_equals(
+ (await cookieStore.get(`${prefix}cookie-name`)).value, "cookie-value");
- await promise_rejects_js(testCase, TypeError,
- cookieStore.set( { name: '__Host-cookie-name', value: 'cookie-value',
- path: "/path" }));
-}, 'cookieStore.set with __Host- prefix a path option');
+ await promise_rejects_js(testCase, TypeError,
+ cookieStore.set( { name: `${prefix}cookie-name`, value: 'cookie-value',
+ path: "/path" }));
+ }, `cookieStore.set with ${prefix} prefix a path option`);
+});
promise_test(async testCase => {
let exceptionThrown = false;
diff --git a/tests/wpt/tests/cookie-store/encoding.https.any.js b/tests/wpt/tests/cookie-store/encoding.https.any.js
index 941639bdaec..f5d2ca15e71 100644
--- a/tests/wpt/tests/cookie-store/encoding.https.any.js
+++ b/tests/wpt/tests/cookie-store/encoding.https.any.js
@@ -4,15 +4,21 @@
'use strict';
-cookie_test(async t => {
+promise_test(async t => {
await setCookieStringHttp('\uFEFFcookie=value; path=/');
+ t.add_cleanup(async () => {
+ await setCookieStringHttp('\uFEFFcookie=value; path=/; Max-Age=0');
+ });
const cookie = await cookieStore.get('\uFEFFcookie');
assert_equals(cookie.name, '\uFEFFcookie');
assert_equals(cookie.value, 'value');
}, 'BOM not stripped from name');
-cookie_test(async t => {
+promise_test(async t => {
await setCookieStringHttp('cookie=\uFEFFvalue; path=/');
+ t.add_cleanup(async () => {
+ await setCookieStringHttp('cookie=\uFEFFvalue; path=/; Max-Age=0');
+ });
const cookie = await cookieStore.get('cookie');
assert_equals(cookie.name, 'cookie');
assert_equals(cookie.value, '\uFEFFvalue');
diff --git a/tests/wpt/tests/cookie-store/httponly_cookies.https.window.js b/tests/wpt/tests/cookie-store/httponly_cookies.https.window.js
index 605e94e6744..836f47da3f6 100644
--- a/tests/wpt/tests/cookie-store/httponly_cookies.https.window.js
+++ b/tests/wpt/tests/cookie-store/httponly_cookies.https.window.js
@@ -2,7 +2,7 @@
'use strict';
-cookie_test(async t => {
+promise_test(async t => {
let eventPromise = observeNextCookieChangeEvent();
await setCookieStringHttp('HTTPONLY-cookie=value; path=/; httponly');
assert_equals(
@@ -29,6 +29,9 @@ cookie_test(async t => {
eventPromise = observeNextCookieChangeEvent();
await setCookieStringHttp(
'HTTPONLY-cookie=DELETED; path=/; max-age=0; httponly');
+ t.add_cleanup(async () => {
+ await setCookieStringHttp(`HTTPONLY-cookie=DELETED; path=/; httponly; Max-Age=0`);
+ });
assert_equals(
await getCookieString(),
undefined,
@@ -41,6 +44,9 @@ cookie_test(async t => {
// HTTPONLY cookie changes should not have been observed; perform
// a dummy change to verify that nothing else was queued up.
await cookieStore.set('TEST', 'dummy');
+ t.add_cleanup(async () => {
+ await cookieStore.delete('TEST');
+ });
await verifyCookieChangeEvent(
eventPromise, {changed: [{name: 'TEST', value: 'dummy'}]},
'HttpOnly cookie deletion was not observed');
@@ -68,8 +74,11 @@ cookie_test(async t => {
'httpOnly is not an option for CookieStore.set()');
}, 'HttpOnly cookies can not be set by CookieStore');
-cookie_test(async t => {
+promise_test(async t => {
await setCookieStringHttp('HTTPONLY-cookie=value; path=/; httponly');
+ t.add_cleanup(async () => {
+ await setCookieStringHttp(`HTTPONLY-cookie=DELETED; path=/; httponly; Max-Age=0`);
+ });
assert_equals(
await getCookieString(),
undefined,
diff --git a/tests/wpt/tests/cookie-store/resources/cookie-test-helpers.js b/tests/wpt/tests/cookie-store/resources/cookie-test-helpers.js
index 8e23ff2c422..82ca135f88e 100644
--- a/tests/wpt/tests/cookie-store/resources/cookie-test-helpers.js
+++ b/tests/wpt/tests/cookie-store/resources/cookie-test-helpers.js
@@ -210,10 +210,12 @@ async function cookie_test(func, description) {
// Wipe cookies used by tests before and after the test.
async function deleteAllCookies() {
- await Promise.all((await cookieStore.getAll()).map(async ({name, value}) => {
- await cookieStore.delete(name);
- await cookieStore.delete({name: name, partitioned: true});
- }));
+ const cookies = await cookieStore.getAll();
+ await Promise.all(cookies.flatMap(
+ ({name}) =>
+ [cookieStore.delete(name),
+ cookieStore.delete({name, partitioned: true}),
+ ]));
}
return promise_test(async t => {
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-applies-to-016.html b/tests/wpt/tests/css/CSS2/lists/list-style-applies-to-016.html
new file mode 100644
index 00000000000..71faf850c98
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-applies-to-016.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#propdef-list-style">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#list-style">
+<link rel="help" href="https://github.com/servo/servo/issues/37222">
+<link rel="match" href="../../reference/single_square_list_marker.xht">
+<meta name="assert" content="The 'list-style' property applies to a list item which is a sibling of a float.">
+
+<p>Test passes if there is a single square below.</p>
+<div style="margin-left: 1in">
+ <div style="float: left"></div>
+ <div style="display: list-item; list-style: square"></div>
+</div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-applies-to-017.html b/tests/wpt/tests/css/CSS2/lists/list-style-applies-to-017.html
new file mode 100644
index 00000000000..b5f06365bbe
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-applies-to-017.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#propdef-list-style">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#list-style">
+<link rel="help" href="https://github.com/servo/servo/issues/37222">
+<link rel="match" href="../../reference/single_square_list_marker.xht">
+<meta name="assert" content="The 'list-style' property applies to a list item which is a sibling of a float.">
+
+<p>Test passes if there is a single square below.</p>
+<div style="float: left; width: 1in; height: 1in"></div>
+<div style="display: list-item; list-style: square"></div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-001.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-001.xht
index 2c82821505b..4f533018d84 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-001.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-001.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table-row-group'." />
<style type="text/css">
#test
@@ -44,4 +45,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-002.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-002.xht
index 7af1787b87d..1d053474239 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-002.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-002.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table-header-group'." />
<style type="text/css">
#test
@@ -44,4 +45,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-003.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-003.xht
index 1e7e58f4627..6753ebb2c66 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-003.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-003.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table-footer-group'." />
<style type="text/css">
#test
@@ -44,4 +45,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-004.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-004.xht
index cc859de9a82..750db4a8f67 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-004.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-004.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table-row'." />
<style type="text/css">
#table
@@ -38,4 +39,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-005.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-005.xht
index 74d1b127923..3becba1c96a 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-005.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-005.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-2.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table-column-group'." />
<style type="text/css">
#test
@@ -43,4 +44,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-006.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-006.xht
index 81ca729695b..6a3f0685cd8 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-006.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-006.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-2.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table-column'." />
<style type="text/css">
#test
@@ -43,4 +44,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-007.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-007.xht
index 63a8d63c782..06e0a225206 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-007.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-007.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table-cell'." />
<style type="text/css">
#table
@@ -38,4 +39,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-008.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-008.xht
index 6d8bd5638bf..36e26233cc5 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-008.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-008.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'inline'." />
<style type="text/css">
div
@@ -26,4 +27,4 @@
<span></span>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-009.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-009.xht
index cc2270bc9f0..26df20ea56f 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-009.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-009.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'block'." />
<style type="text/css">
span
@@ -28,4 +29,4 @@
</span>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-010.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-010.xht
index 78a81194285..f8f0021ace6 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-010.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-010.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'list-item'." />
<style type="text/css">
div
@@ -20,4 +21,4 @@
<p>Test passes if there is a single blue square below.</p>
<div></div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-012.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-012.xht
index b81db5533c7..9060209849a 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-012.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-012.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'inline-block'." />
<style type="text/css">
div
@@ -26,4 +27,4 @@
<span></span>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-013.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-013.xht
index 8a8c3e3da81..72c20d870c5 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-013.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-013.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table'." />
<style type="text/css">
#table
@@ -38,4 +39,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-014.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-014.xht
index 01347df407e..b0b5aa462b7 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-014.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-014.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'inline-table'." />
<style type="text/css">
#table
@@ -38,4 +39,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-015.xht b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-015.xht
index 7eedb682640..c18eb3dab46 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-015.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-015.xht
@@ -6,6 +6,7 @@
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
<meta name="flags" content="image" />
+ <link rel="match" href="list-style-image-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'table-caption'." />
<style type="text/css">
#test
@@ -43,4 +44,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-016.html b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-016.html
new file mode 100644
index 00000000000..e79700053dc
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-016.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/CSS2/generate.html#propdef-list-style-image">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#list-style">
+<link rel="help" href="https://github.com/servo/servo/issues/37222">
+<link rel="match" href="list-style-image-applies-to-ref-1.html">
+<meta name="assert" content="The 'list-style-image' property applies to a list item which is a sibling of a float.">
+
+<p>Test passes if there is a single blue square below.</p>
+<div style="margin-left: 1in">
+ <div style="float: left"></div>
+ <div style="display: list-item; list-style-image: url('support/blue15x15.png')"></div>
+</div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-017.html b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-017.html
new file mode 100644
index 00000000000..bb20b720d32
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-017.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/CSS2/generate.html#propdef-list-style-image">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#list-style">
+<link rel="help" href="https://github.com/servo/servo/issues/37222">
+<link rel="match" href="list-style-image-applies-to-ref-1.html">
+<meta name="assert" content="The 'list-style-image' property applies to a list item which is a sibling of a float.">
+
+<p>Test passes if there is a single blue square below.</p>
+<div style="float: left; width: 1in; height: 1in"></div>
+<div style="display: list-item; list-style-image: url('support/blue15x15.png')"></div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-ref-1.html b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-ref-1.html
new file mode 100644
index 00000000000..3895bcc9197
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-ref-1.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+div {
+ display: list-item;
+ list-style-image: url('support/blue15x15.png');
+ margin-left: 96px;
+}
+</style>
+
+<p>Test passes if there is a single blue square below.</p>
+<div>&nbsp;</div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-ref-2.html b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-ref-2.html
new file mode 100644
index 00000000000..6d7a9d5b35e
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-image-applies-to-ref-2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+div {
+ display: list-item;
+ margin-left: 96px;
+}
+</style>
+
+<p>Test passes if there is a single round dot below.</p>
+<div>&nbsp;</div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-001.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-001.xht
index 9889dd76956..aa5bd87601f 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-001.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-001.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table-row-group'." />
<style type="text/css">
#test
@@ -44,4 +45,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-002.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-002.xht
index a8c8a41aa58..51667f2d5e4 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-002.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-002.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table-header-group'." />
<style type="text/css">
#test
@@ -44,4 +45,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-003.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-003.xht
index d53761ba36c..d7725da936a 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-003.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-003.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table-footer-group'." />
<style type="text/css">
#test
@@ -44,4 +45,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-004.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-004.xht
index 23d74ebd673..7806141d7f5 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-004.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-004.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table-row'." />
<style type="text/css">
#table
@@ -38,4 +39,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-005.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-005.xht
index 9ec866bef8a..97235df74ea 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-005.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-005.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-2.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table-column-group'." />
<style type="text/css">
#test
@@ -43,4 +44,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-006.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-006.xht
index d60ed2c7f87..7253af46b8d 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-006.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-006.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-2.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table-column'." />
<style type="text/css">
#test
@@ -43,4 +44,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-007.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-007.xht
index c223dbabd81..956fcb6f3b2 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-007.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-007.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table-cell'." />
<style type="text/css">
#table
@@ -38,4 +39,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-008.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-008.xht
index 1f2e347de86..df7c23e3867 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-008.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-008.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-3.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'inline'." />
<style type="text/css">
div
@@ -26,4 +27,4 @@
<span></span>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-009.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-009.xht
index 90ff3b23562..f981ec2c859 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-009.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-009.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-3.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'block'." />
<style type="text/css">
span
@@ -28,4 +29,4 @@
</span>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-010.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-010.xht
index ae5dbfbc362..57881f8d80f 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-010.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-010.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-3.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'list-item'." />
<style type="text/css">
div
@@ -20,4 +21,4 @@
<p>Test passes if there is a black dot inside an orange box below.</p>
<div></div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-012.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-012.xht
index 25e79b3a594..da9eebf3dcb 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-012.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-012.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'inline-block'." />
<style type="text/css">
div
@@ -26,4 +27,4 @@
<span></span>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-013.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-013.xht
index 5dde30618c9..9237a8d2d74 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-013.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-013.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table'." />
<style type="text/css">
#table
@@ -38,4 +39,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-014.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-014.xht
index b5502348702..94847350c8f 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-014.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-014.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-1.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'inline-table'." />
<style type="text/css">
#table
@@ -38,4 +39,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-015.xht b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-015.xht
index 53eb07dd3b7..49f2f09d09c 100644
--- a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-015.xht
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-015.xht
@@ -5,6 +5,7 @@
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" />
<link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" />
+ <link rel="match" href="list-style-position-applies-to-ref-4.html" />
<meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'table-caption'." />
<style type="text/css">
#test
@@ -44,4 +45,4 @@
</div>
</div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-016.html b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-016.html
new file mode 100644
index 00000000000..ea5b43d6112
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-016.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/CSS2/generate.html#propdef-list-style-position">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#list-style">
+<link rel="help" href="https://github.com/servo/servo/issues/37222">
+<link rel="match" href="list-style-position-applies-to-ref-3.html">
+<meta name="assert" content="The 'list-style-position' property applies to a list item which is a sibling of a float.">
+
+<p>Test passes if there is a black dot inside an orange box below.</p>
+<div style="margin-left: 1in">
+ <div style="float: left"></div>
+ <div style="display: list-item; list-style-position: inside; background: orange"></div>
+</div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-017.html b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-017.html
new file mode 100644
index 00000000000..71a2a037ed8
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-017.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/CSS2/generate.html#propdef-list-style-position">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#list-style">
+<link rel="help" href="https://github.com/servo/servo/issues/37222">
+<link rel="match" href="list-style-position-applies-to-ref-5.html">
+<meta name="assert" content="The 'list-style-position' property applies to a list item which is a sibling of a float.">
+
+<p>Test passes if there is a black dot inside an orange box below.</p>
+<div style="float: left; width: 1in; height: 1in"></div>
+<div style="display: list-item; list-style-position: inside; background: orange"></div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-1.html b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-1.html
new file mode 100644
index 00000000000..a879e21ba44
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-1.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+div {
+ display: inline-block;
+}
+span {
+ background: orange;
+ display: list-item;
+ list-style-position: inside;
+ margin-left: 1in;
+}
+</style>
+
+<p>Test passes if there is a black dot inside an orange box below.</p>
+<div><span></span></div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-2.html b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-2.html
new file mode 100644
index 00000000000..fc0fee30ab6
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-2.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+div {
+ display: list-item;
+ margin-left: 1in;
+}
+</style>
+
+<p>Test passes if there is a black dot on a white background below.</p>
+<div></div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-3.html b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-3.html
new file mode 100644
index 00000000000..6e1af0004c3
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-3.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+div {
+ background: orange;
+ display: list-item;
+ list-style-position: inside;
+ margin-left: 1in;
+}
+</style>
+
+<p>Test passes if there is a black dot inside an orange box below.</p>
+<div></div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-4.html b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-4.html
new file mode 100644
index 00000000000..bb39e6b44ac
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-4.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+div {
+ background: orange;
+ display: list-item;
+ list-style-position: inside;
+ margin-left: 1in;
+ width: 5em;
+}
+</style>
+
+<p>Test passes if there is a black dot inside an orange box below.</p>
+<div></div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-5.html b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-5.html
new file mode 100644
index 00000000000..05012d42540
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-position-applies-to-ref-5.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<title>CSS Reference</title>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<style>
+div {
+ background: orange;
+ display: list-item;
+ list-style-position: inside;
+ padding-left: 1in;
+}
+</style>
+
+<p>Test passes if there is a black dot inside an orange box below.</p>
+<div></div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-type-applies-to-016.html b/tests/wpt/tests/css/CSS2/lists/list-style-type-applies-to-016.html
new file mode 100644
index 00000000000..407f426d48a
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-type-applies-to-016.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#propdef-list-style-type">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#list-style">
+<link rel="help" href="https://github.com/servo/servo/issues/37222">
+<link rel="match" href="../../reference/single_square_list_marker.xht">
+<meta name="assert" content="The 'list-style-type' property applies to a list item which is a sibling of a float.">
+
+<p>Test passes if there is a single square below.</p>
+<div style="margin-left: 1in">
+ <div style="float: left"></div>
+ <div style="display: list-item; list-style-type: square"></div>
+</div>
diff --git a/tests/wpt/tests/css/CSS2/lists/list-style-type-applies-to-017.html b/tests/wpt/tests/css/CSS2/lists/list-style-type-applies-to-017.html
new file mode 100644
index 00000000000..29e450bcbc4
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/lists/list-style-type-applies-to-017.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#propdef-list-style-type">
+<link rel="help" href="https://www.w3.org/TR/CSS21/generate.html#list-style">
+<link rel="help" href="https://github.com/servo/servo/issues/37222">
+<link rel="match" href="../../reference/single_square_list_marker.xht">
+<meta name="assert" content="The 'list-style-type' property applies to a list item which is a sibling of a float.">
+
+<p>Test passes if there is a single square below.</p>
+<div style="float: left; width: 1in; height: 1in"></div>
+<div style="display: list-item; list-style-type: square"></div>
diff --git a/tests/wpt/tests/css/css-anchor-position/anchor-scope-basic.html b/tests/wpt/tests/css/css-anchor-position/anchor-scope-basic.html
index 47cb3b8d86a..ffe3b45ba0d 100644
--- a/tests/wpt/tests/css/css-anchor-position/anchor-scope-basic.html
+++ b/tests/wpt/tests/css/css-anchor-position/anchor-scope-basic.html
@@ -11,7 +11,8 @@
.anchor-a { anchor-name: --a; }
.anchor-b { anchor-name: --b; }
- .anchor-a, .anchor-b {
+ .anchor-ab { anchor-name: --a, --b; }
+ .anchor-a, .anchor-b, .anchor-ab {
background: skyblue;
height: 10px;
}
@@ -159,7 +160,8 @@
<div class=anchor-b></div>
<div class=anchor-a></div><!--A-->
<div class=scope-a>
- <div class=anchor-b></div><!--B-->
+ <div class=anchor-b></div>
+ <div class=anchor-ab></div><!--B-->
<div class=anchor-a></div>
</div>
<div class=anchored-a></div>
@@ -169,7 +171,7 @@
test((t) => {
inflate(t, test_scope_a);
assert_equals(getComputedStyle(main.querySelector('.anchored-a')).top, '20px');
- assert_equals(getComputedStyle(main.querySelector('.anchored-b')).top, '30px');
+ assert_equals(getComputedStyle(main.querySelector('.anchored-b')).top, '40px');
}, 'anchor-scope:--a scopes only --a');
</script>
@@ -177,8 +179,8 @@
<div class=anchor-b></div><!--B-->
<div class=anchor-a></div>
<div class=scope-b>
- <div class=anchor-b></div>
<div class=anchor-a></div><!--A-->
+ <div class=anchor-b></div>
</div>
<div class=anchored-a></div>
<div class=anchored-b></div>
@@ -186,7 +188,7 @@
<script>
test((t) => {
inflate(t, test_scope_b);
- assert_equals(getComputedStyle(main.querySelector('.anchored-a')).top, '40px');
+ assert_equals(getComputedStyle(main.querySelector('.anchored-a')).top, '30px');
assert_equals(getComputedStyle(main.querySelector('.anchored-b')).top, '10px');
}, 'anchor-scope:--b scopes only --b');
</script>
diff --git a/tests/wpt/tests/css/css-anchor-position/chrome-420329041-crash.html b/tests/wpt/tests/css/css-anchor-position/chrome-420329041-crash.html
new file mode 100644
index 00000000000..2b236a371e5
--- /dev/null
+++ b/tests/wpt/tests/css/css-anchor-position/chrome-420329041-crash.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/420329041">
+<style>
+ #crash {
+ position: absolute;
+ left: anchor(right);
+ --svg: url("data:image/svg+xml,");
+ content: var(--svg);
+ fill: var(--svg);
+ }
+</style>
+<p>Pass if no crash</p>
+<div id="crash"></div>
diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-img-ref.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-img-ref.html
new file mode 100644
index 00000000000..565698f79ec
--- /dev/null
+++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-img-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<style>
+ .target {
+ width: 100px;
+ height: 100px;
+ border-radius: 25px;
+ box-sizing: border-box;
+ background-image: url("/images/green.png");
+ corner-shape: notch superellipse(3) bevel scoop;
+ }
+</style>
+<div class=target></div>
diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-img.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-img.html
new file mode 100644
index 00000000000..82662d25562
--- /dev/null
+++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-img.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="match" href="corner-shape-img-ref.html">
+<meta name="fuzzy" content="maxDifference=0-64;totalPixels=0-100">
+<style>
+ img {
+ width: 100px;
+ height: 100px;
+ border-radius: 25px;
+ box-sizing: border-box;
+ corner-shape: notch superellipse(3) bevel scoop;
+ }
+</style>
+<img src="/images/green.png"> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html
index 12cd2546bf4..2d4b56f831b 100644
--- a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html
+++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-fuzzy.html
@@ -17,7 +17,7 @@
<meta name="variant" content="?corner-top-left-shape=superellipse(-4)&border-radius=40%">
<meta name="variant" content="?corner-top-left-shape=superellipse(2.5)&border-radius=20%&border-width=10px">
<meta name="variant" content="?corner-top-right-shape=scoop&border-radius=20%&border-width=10px">
-<meta name="variant" content="?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px&border-left-color=purple">
+<meta name="variant" content="?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px">
<meta name="variant" content="?corner-shape=superellipse(3)&border-radius=40px&box-shadow=10px 10px 0 10px black">
<meta name="variant" content="?border-radius=30%&corner-shape=superellipse(-1.5)&box-shadow=10px%2010px%200%2010px%20black">
<meta name="variant" content="?border-radius=40%&corner-shape=notch&box-shadow=10px%2010px%200%2010px%20yellow">
diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html
index 5293589222a..4a0c575b3b7 100644
--- a/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html
+++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/corner-shape-render-precise.html
@@ -19,13 +19,14 @@
<meta name="variant" content="?corner-top-left-shape=superellipse(-0.5)&border-radius=40px">
<meta name="variant" content="?corner-shape=squircle&border-top-left-radius=25%&border-width=10px">
<meta name="variant" content="?corner-bottom-left-shape=bevel&border-bottom-left-radius=30px">
-<meta name="variant" content="?corner-top-left-shape=bevel&border-width=10px&border-color=black">
-<meta name="variant" content="?corner-top-right-shape=bevel&border-width=10px&border-color=black">
+<meta name="variant" content="?corner-top-left-shape=bevel&border-width=10px">
+<meta name="variant" content="?corner-top-right-shape=bevel&border-width=10px">
<meta name="variant" content="?corner-bottom-left-shape=bevel&border-width=10px&border-radius=20px">
<meta name="variant" content="?corner-bottom-right-shape=bevel&border-width=10px&border-radius=20px">
<meta name="variant" content="?corner-bottom-right-shape=bevel&corner-bottom-left-shape=bevel">
<meta name="variant" content="?border-top-left-radius=50%&corner-shape=superellipse(0.7)&border-left-width=30px&border-top-width=30px">
<meta name="variant" content="?border-radius=50%&corner-shape=bevel&box-shadow=10px%2010px%200%2010px%20black">
+<meta name="variant" content="?corner-shape=notch&border-radius=30px&border-width=30px">
<style>
body {
margin: 0;
diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-shape.js b/tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-shape.js
index 4757a43ad05..c08a95c7d75 100644
--- a/tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-shape.js
+++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-shape.js
@@ -87,10 +87,6 @@ function add_corner(ctx, ax, ay, bx, by, curvature) {
* 'border-top-right-radius': [number, number],
* 'border-bottom-left-radius': [number, number],
* 'border-bottom-right-radius': [number, number],
- * 'border-top-color': string,
- * 'border-right-color': string,
- * 'border-left-color': string,
- * 'border-bottom-color': string,
* 'border-top-width': number,
* 'border-right-width': number,
* 'border-bottom-width': number,
@@ -109,42 +105,8 @@ function render_rect_with_corner_shapes(style, ctx, width, height) {
add_corner(ctx, ...params.outer_rect, params.shape);
}
- function draw_inner_corner_from_params(params) {
- add_corner(ctx, ...params.inner_rect, params.shape);
- }
-
function draw_inner_corner(corner) {
- draw_inner_corner_from_params(corner_params[corner]);
- }
-
- function draw_shadow() {
- if (!style.shadow || !style.shadow.length) {
- return;
- }
-
- for (const {spread, offset, color} of style.shadow) {
- const params = resolve_corner_params(style, width, height, spread);
- ctx.save();
- ctx.translate(...offset);
- ctx.beginPath();
- ctx.lineTo(params['top-right'].inner_rect[0], params['top-right'].inner_rect[1]);
- draw_inner_corner_from_params(params['top-right']);
- ctx.lineTo(params['top-right'].inner_rect[2], params['top-right'].inner_rect[3])
- ctx.lineTo(params['bottom-right'].inner_rect[0], params['bottom-right'].inner_rect[1])
- draw_inner_corner_from_params(params['bottom-right']);
- ctx.lineTo(params['bottom-right'].inner_rect[2], params['bottom-right'].inner_rect[3]);
- ctx.lineTo(params['bottom-left'].inner_rect[0], params['bottom-left'].inner_rect[1]);
- draw_inner_corner_from_params(params['bottom-left']);
- ctx.lineTo(params['bottom-left'].inner_rect[2], params['bottom-left'].inner_rect[3])
- ctx.lineTo(params['top-left'].inner_rect[0], params['top-left'].inner_rect[1])
- draw_inner_corner_from_params(params['top-left']);
- ctx.lineTo(params['top-left'].inner_rect[2], params['top-left'].inner_rect[3]);
- ctx.lineTo(params['top-right'].inner_rect[0], params['top-right'].inner_rect[1]);
- ctx.fillStyle = color;
- ctx.closePath();
- ctx.fill("nonzero");
- ctx.restore();
- }
+ add_corner(ctx, ...corner_params[corner].inner_rect, corner_params[corner].shape);
}
function draw_outer_path() {
@@ -157,6 +119,15 @@ function render_rect_with_corner_shapes(style, ctx, width, height) {
ctx.fill("nonzero");
}
+ for (const {spread, offset, color} of (style.shadow || [])) {
+ ctx.save();
+ ctx.translate(offset[0] - spread, offset[1] - spread);
+ ctx.scale((width + spread * 2) / width, (height + spread * 2) / height);
+ ctx.fillStyle = color;
+ draw_outer_path();
+ ctx.restore();
+ }
+
const inner_rect = [
style["border-left-width"],
style["border-top-width"],
@@ -164,70 +135,8 @@ function render_rect_with_corner_shapes(style, ctx, width, height) {
height - style["border-bottom-width"],
];
- draw_shadow();
- {
- ctx.save();
- ctx.beginPath();
- ctx.moveTo(0, 0);
- ctx.lineTo(corner_params['top-left'].inner_rect[2], corner_params['top-left'].inner_rect[1])
- ctx.lineTo(corner_params['top-left'].inner_rect[2], inner_rect[1]);
- ctx.lineTo(corner_params['top-right'].inner_rect[0], inner_rect[1]);
- ctx.lineTo(corner_params['top-right'].inner_rect[0], corner_params['top-right'].inner_rect[3]);
- ctx.lineTo(width, 0);
- ctx.closePath();
- ctx.clip();
- ctx.fillStyle = style['border-top-color'];
- draw_outer_path();
- ctx.restore();
- }
-
- {
- ctx.save();
- ctx.beginPath();
- ctx.moveTo(width, 0);
- ctx.lineTo(corner_params['top-right'].inner_rect[0], corner_params['top-right'].inner_rect[3]);
- ctx.lineTo(inner_rect[2], corner_params['top-right'].inner_rect[3]);
- ctx.lineTo(inner_rect[2], corner_params['bottom-right'].inner_rect[1]);
- ctx.lineTo(corner_params['bottom-right'].inner_rect[2], corner_params['bottom-right'].inner_rect[1]);
- ctx.lineTo(width, height);
- ctx.closePath();
- ctx.clip();
- ctx.fillStyle = style['border-right-color'];
- draw_outer_path();
- ctx.restore();
- }
-
- {
- ctx.save();
- ctx.beginPath();
- ctx.lineTo(width, height);
- ctx.lineTo(corner_params['bottom-right'].inner_rect[2], corner_params['bottom-right'].inner_rect[1]);
- ctx.lineTo(corner_params['bottom-right'].inner_rect[2], inner_rect[3]);
- ctx.lineTo(corner_params['bottom-left'].inner_rect[0], inner_rect[3]);
- ctx.lineTo(corner_params['bottom-left'].inner_rect[0], corner_params['bottom-left'].inner_rect[3]);
- ctx.lineTo(0, height);
- ctx.closePath();
- ctx.clip();
- ctx.fillStyle = style['border-bottom-color'];
- draw_outer_path();
- ctx.restore();
- }
-
- {
- ctx.save();
- ctx.beginPath();
- ctx.lineTo(0, height);
- ctx.lineTo(corner_params['bottom-left'].inner_rect[0], corner_params['bottom-left'].inner_rect[3]);
- ctx.lineTo(inner_rect[0], corner_params['bottom-left'].inner_rect[3]);
- ctx.lineTo(inner_rect[0], corner_params['top-left'].inner_rect[1]);
- ctx.lineTo(corner_params['top-left'].inner_rect[2], corner_params['top-left'].inner_rect[1])
- ctx.lineTo(0, 0);
- ctx.closePath();
- ctx.clip();
- ctx.fillStyle = style['border-left-color'];
- draw_outer_path();
- ctx.restore();
- }
+ ctx.fillStyle = "black";
+ draw_outer_path();
ctx.save();
ctx.beginPath();
diff --git a/tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-utils.js b/tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-utils.js
index ad3b235addf..b6f329e8248 100644
--- a/tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-utils.js
+++ b/tests/wpt/tests/css/css-borders/tentative/corner-shape/resources/corner-utils.js
@@ -112,29 +112,11 @@ function resolve_corner_params(style, width, height, outset = null) {
outer_rect[3] + inner_offset[3] * offset[0],
];
- let inner_shape = shape;
- if (outset) {
- const new_width = width + outset * 2;
- const new_height = height + outset * 2;
- inner_rect = [
- (outer_rect[0] / width) * new_width - outset,
- (outer_rect[1] / height) * new_height - outset,
- (outer_rect[2] / width) * new_width - outset,
- (outer_rect[3] / height) * new_height - outset
- ]
- } else if (shape > 2 || shape < 0.5) {
- const outer_length = Math.hypot(
- outer_rect[2] - outer_rect[0], outer_rect[3] - outer_rect[1]);
- const inner_length = Math.hypot(
- inner_rect[2] - inner_rect[0], inner_rect[3] - inner_rect[1])
- }
-
return [
corner,
{
outer_rect,
shape,
- inner_shape,
inset,
inner_rect,
inner_offset,
diff --git a/tests/wpt/tests/css/css-color-hdr/parsing.html b/tests/wpt/tests/css/css-color-hdr/parsing.html
index 2447891f2c4..688043039de 100644
--- a/tests/wpt/tests/css/css-color-hdr/parsing.html
+++ b/tests/wpt/tests/css/css-color-hdr/parsing.html
@@ -15,7 +15,6 @@
test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 8%, standard 2%)");
test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 99%, standard 99%)");
test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 99%, standard 99%, constrained 10%)");
- test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 1%)");
test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(constrained 20%, no-limit 80%)");
test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(dynamic-range-limit-mix(constrained 90%, no-limit 10%) 1%, no-limit 80%)");
test_valid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 1%, dynamic-range-limit-mix(constrained 2%, no-limit 10%) 80%)");
@@ -31,6 +30,7 @@
test_invalid_value("dynamic-range-limit", "hdr");
test_invalid_value("dynamic-range-limit", "sdr");
test_invalid_value("dynamic-range-limit", "low");
+ test_invalid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 1%)");
test_invalid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 80% standard 20%)");
test_invalid_value("dynamic-range-limit", "dynamic-range-limit-mix(low, no-limit, 10%)");
test_invalid_value("dynamic-range-limit", "dynamic-range-limit-mix(no-limit 101%, standard 1%)");
diff --git a/tests/wpt/tests/css/css-conditional/container-queries/style-query-registered-custom-rem-change.html b/tests/wpt/tests/css/css-conditional/container-queries/style-query-registered-custom-rem-change.html
new file mode 100644
index 00000000000..33808fbe198
--- /dev/null
+++ b/tests/wpt/tests/css/css-conditional/container-queries/style-query-registered-custom-rem-change.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>CSS Container Queries Test: style() query with rem unit for registered custom property</title>
+<link rel="help" href="https://drafts.csswg.org/css-conditional-5/#style-container">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/cq-testcommon.js"></script>
+<style>
+ @property --length {
+ syntax: "<length>";
+ initial-value: 0px;
+ inherits: false;
+ }
+
+ :root, body { font-size: 16px; }
+ #container { --length: 100px; }
+
+ #target { color: red; }
+ @container style(--length: calc(1rem * 10)) {
+ #target { color: green; }
+ }
+</style>
+<div id="container">
+ <div id="target">Should be green</div>
+</div>
+<script>
+ test(() => {
+ assert_equals(getComputedStyle(target).color, "rgb(255, 0, 0)");
+ }, "Initially, 1rem * 10 evaluates to 160px");
+
+ test(() => {
+ document.documentElement.style.fontSize = "10px";
+ assert_equals(getComputedStyle(target).color, "rgb(0, 128, 0)");
+ }, "Changing the :root font-size to 10px makes 1rem * 10 evaluate to 100px");
+</script>
diff --git a/tests/wpt/tests/css/css-flexbox/flexbox_columns-ref.html b/tests/wpt/tests/css/css-flexbox/flexbox_columns-ref.html
deleted file mode 100644
index b8c7a225698..00000000000
--- a/tests/wpt/tests/css/css-flexbox/flexbox_columns-ref.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<title>flexbox | multicol</title>
-<link rel="author" href="http://opera.com" title="Opera Software">
-<style>
-div {
- background: black;
-}
-</style>
-
-<div>x</div>
diff --git a/tests/wpt/tests/css/css-flexbox/flexbox_columns.html b/tests/wpt/tests/css/css-flexbox/flexbox_columns.html
deleted file mode 100644
index d39c2db55f2..00000000000
--- a/tests/wpt/tests/css/css-flexbox/flexbox_columns.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<title>flexbox | multicol</title>
-<link rel="author" href="http://opera.com" title="Opera Software">
-<link rel="help"
- href="http://www.w3.org/TR/css-flexbox-1/#flex-containers">
-<link rel="match" href="flexbox_columns-ref.html">
-<style>
-ul {
- background: black;
- padding: 0;
- margin: 0;
-
- display: flex;
- justify-content: space-around;
- columns: 3;
- column-rule: 1em solid red;
-}
-::marker { font-family:inherit; }
-</style>
-
-<ul>
- <li>one two three four</li>
- <li>filler</li>
- <li>filler</li>
- <li>filler</li>
- <li>filler</li>
-</ul>
diff --git a/tests/wpt/tests/css/css-forms/datetime-stacking-context-ref.html b/tests/wpt/tests/css/css-forms/datetime-stacking-context-ref.html
new file mode 100644
index 00000000000..95bee383d21
--- /dev/null
+++ b/tests/wpt/tests/css/css-forms/datetime-stacking-context-ref.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<style>
+ #cover {
+ background: white;
+ position: fixed;
+ width: 100%;
+ height: 200px;
+ top: 0;
+ border: 1px solid black;
+ }
+</style>
+<div id="cover"></div>
diff --git a/tests/wpt/tests/css/css-forms/datetime-stacking-context.html b/tests/wpt/tests/css/css-forms/datetime-stacking-context.html
new file mode 100644
index 00000000000..4754cacf09d
--- /dev/null
+++ b/tests/wpt/tests/css/css-forms/datetime-stacking-context.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<title>Datetime input doesn't have stacking contexts inside</title>
+<link rel="help" href="https://drafts.csswg.org/css-forms/"> <!-- a bit of a stretch but... -->
+<link rel="match" href="datetime-stacking-context-ref.html">
+<style>
+ #cover {
+ background: white;
+ position: fixed;
+ width: 100%;
+ height: 200px;
+ top: 0;
+ border: 1px solid black;
+ }
+</style>
+<div id="cover"></div>
+<input type=datetime>
diff --git a/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-040-ref.html b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-040-ref.html
new file mode 100644
index 00000000000..2988cf534a9
--- /dev/null
+++ b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-040-ref.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#break">
+<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com">
+<style>
+ body {
+ margin: 0px;
+ }
+
+ .grid-container {
+ display: grid;
+ grid-template-columns: repeat(4, 100px);
+ grid-template-rows: repeat(4, 100px);
+ gap: 10px;
+ width: 430px;
+ height: 430px;
+ }
+
+ .grid-item {
+ background-color: gray;
+ opacity: 0.5;
+ border: 1px solid #000;
+ }
+
+ .col-gap {
+ width: 0;
+ border-left: solid 5px blue;
+ }
+
+ .col-gap1 {
+ position: absolute;
+ top: 212.5px;
+ left: 102.5px;
+ height: 217.5px;
+ }
+
+ .col-gap2 {
+ position: absolute;
+ top: 0px;
+ left: 212.5px;
+ height: 430px;
+ }
+
+ .col-gap3 {
+ position: absolute;
+ top: 0px;
+ left: 322.5px;
+ height: 430px;
+ }
+
+ .row-gap {
+ height: 0px;
+ border-bottom: solid 5px red;
+ }
+
+ .row-gap1 {
+ position: absolute;
+ top: 102.5px;
+ left: 325px;
+ width: 105px;
+ }
+
+ .row-gap2 {
+ position: absolute;
+ top: 212.5px;
+ left: 0px;
+ width: 430px;
+ }
+
+ .row-gap3 {
+ position: absolute;
+ top: 322.5px;
+ left: 0px;
+ width: 430px;
+ }
+</style>
+
+<div class="grid-container">
+ <div class="grid-item" style="grid-column: 1 / 3; grid-row: 1 / 3;"></div>
+ <div class="grid-item" style="grid-column: 3 / 4; grid-row: 1 / 3;"></div>
+</div>
+
+<div class="col-gap col-gap1"> </div>
+<div class="col-gap col-gap2"> </div>
+<div class="col-gap col-gap3"> </div>
+
+<div class="row-gap row-gap1"> </div>
+<div class="row-gap row-gap2"> </div>
+<div class="row-gap row-gap3"> </div>
diff --git a/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-040.html b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-040.html
new file mode 100644
index 00000000000..4bab26db550
--- /dev/null
+++ b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-040.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<title>
+ CSS Gap Decorations: *rule-break properly adheres to spanning-item when repeater tracks are used.
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/#break">
+<link rel="match" href="grid-gap-decorations-040-ref.html">
+<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com">
+<style>
+ body {
+ margin: 0px;
+ }
+ .grid-container {
+ display: grid;
+ grid-template-columns: repeat(4, 100px);
+ grid-template-rows: repeat(4, 100px);
+ gap: 10px;
+
+ width: 430px;
+ height: 430px;
+
+ column-rule: 5px solid blue;
+ row-rule: 5px solid red;
+ }
+
+ .grid-item {
+ background-color: gray;
+ opacity: 0.5;
+ border: 1px solid #000;
+ }
+
+</style>
+<div class="grid-container">
+ <div class="grid-item" style="grid-column: 1 / 3; grid-row: 1 / 3;"></div>
+ <div class="grid-item" style="grid-column: 3 / 4; grid-row: 1 / 3;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-041-crash.html b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-041-crash.html
new file mode 100644
index 00000000000..be3e2280b5f
--- /dev/null
+++ b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-041-crash.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<title>
+ CSS Gap Decorations: Renderer doesn't crash when gap decorations is used on grid with no rows/columns.
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com">
+<style>
+ .grid-container {
+ display: grid;
+
+ column-rule: solid blue;
+ row-rule: dotted red;
+ }
+</style>
+
+<div class="grid-container"></div>
diff --git a/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-042-ref.html b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-042-ref.html
new file mode 100644
index 00000000000..ed44f7a2de3
--- /dev/null
+++ b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-042-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com">
+<style>
+ .grid-container {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ width: 430px;
+ height: 430px;
+ }
+
+ .grid-item {
+ background-color: gray;
+ opacity: 0.5;
+ border: 1px solid #000;
+ }
+</style>
+
+<div class="grid-container">
+ <div class="grid-item" style="grid-column: 1 / 3; grid-row: 1 / 2;"></div>
+ <div class="grid-item" style="grid-column: 3 / 4; grid-row: 1 / 3;"></div>
+ <div class="grid-item" style="grid-row: 2 / 4;"></div>
+ <div class="grid-item" style="grid-column: 2 / 4; grid-row: 3 / 4;"></div>
+ <div class="grid-item" style="grid-column: 2 / 3; grid-row: 2 / 3;"></div>
+ <div class="grid-item" style="grid-column: 4 / 5; grid-row: 1 / 4;"></div>
+ <div class="grid-item" style="grid-column: 1 / 4; grid-row: 4 / 5;"></div>
+ <div class="grid-item" style="grid-column: 4 / 5; grid-row: 4 / 5;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-042.html b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-042.html
new file mode 100644
index 00000000000..5b2b4936980
--- /dev/null
+++ b/tests/wpt/tests/css/css-gaps/grid/grid-gap-decorations-042.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>
+ CSS Gap Decorations: gap decorations are not painted when there are no gaps.
+</title>
+<link rel="help" href="https://drafts.csswg.org/css-gaps-1/">
+<link rel="match" href="grid-gap-decorations-042-ref.html">
+<link rel="author" title="Sam Davis Omekara Jr." href="mailto:samomekarajr@microsoft.com">
+<style>
+ .grid-container {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+
+ width: 430px;
+ height: 430px;
+
+ column-rule: 5px solid blue;
+ row-rule: 5px dotted red;
+ }
+
+ .grid-item {
+ background-color: gray;
+ opacity: 0.5;
+ border: 1px solid #000;
+ }
+
+</style>
+<div class="grid-container">
+ <div class="grid-item" style="grid-column: 1 / 3; grid-row: 1 / 2;"></div>
+ <div class="grid-item" style="grid-column: 3 / 4; grid-row: 1 / 3;"></div>
+ <div class="grid-item" style="grid-row: 2 / 4;"></div>
+ <div class="grid-item" style="grid-column: 2 / 4; grid-row: 3 / 4;"></div>
+ <div class="grid-item" style="grid-column: 2 / 3; grid-row: 2 / 3;"></div>
+ <div class="grid-item" style="grid-column: 4 / 5; grid-row: 1 / 4;"></div>
+ <div class="grid-item" style="grid-column: 1 / 4; grid-row: 4 / 5;"></div>
+ <div class="grid-item" style="grid-column: 4 / 5; grid-row: 4 / 5;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-grid/grid-items/grid-item-inline-contribution-004.html b/tests/wpt/tests/css/css-grid/grid-items/grid-item-inline-contribution-004.html
new file mode 100644
index 00000000000..a4e3cd6f3a4
--- /dev/null
+++ b/tests/wpt/tests/css/css-grid/grid-items/grid-item-inline-contribution-004.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
+<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
+<link rel="help" href="https://drafts.csswg.org/css-grid-2/#algo-grid-sizing">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/6356#issuecomment-862800005">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1957501">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta name="assert" content="Tests the min-content contribution is re-resolved during a 2nd pass.">
+
+<!--
+
+Quoting step 3 of css-grid-2 section 12.1. Grid Sizing Algorithm:
+
+"
+ Then, if the min-content contribution of any grid item has changed based on
+ the row sizes and alignment calculated in step 2, re-resolve the sizes of the
+ grid columns with the new min-content and max-content contributions (once
+ only).
+"
+
+In this testcase initially the row size is indefinite, then resolves to 100px.
+Using this information we re-resolve the columns, resulting in 50px for the
+first column.
+
+-->
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="display: grid; width: 0; grid-template: auto / auto auto;">
+ <div style="background: green; height: 100%;">
+ <canvas width="5" height="10" style="height: 100%;">
+ </div>
+ <div style="background: green">
+ <div style="width: 50px; height: 100px;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint-ranges.html b/tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint-ranges.html
new file mode 100644
index 00000000000..24cf8aa6dfe
--- /dev/null
+++ b/tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint-ranges.html
@@ -0,0 +1,109 @@
+<!doctype html>
+<meta name="author" title="Fernando Fiori" href="mailto:ffiori@microsoft.com">
+<meta name="assert" content="HighlightRegistry.highlightsFromPoint returns the Highlights and their corresponding Ranges and StaticRanges present at the coordinates provided as argument in the right order in multi-line text.">
+<link rel="help" href="https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/highlight/HighlightsFromPointsExplainer.md">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+::highlight(example-highlight) {
+ background-color: rgba(0, 255, 255, 0.5);
+}
+body {
+ font-family: monospace;
+}
+</style>
+<span id="example-span-1">0123456789</span><br>
+<span id="example-span-2">0123456789</span>
+<script>
+ const textNode1 = document.querySelector("#example-span-1");
+ const textNode2 = document.querySelector("#example-span-2");
+
+ function test_ranges(ranges) {
+ assert_equals(ranges.length, 2, 'test_ranges() should be called with exactly two ranges.');
+ let big_range = ranges[0].startOffset < ranges[1].startOffset ? ranges[0] : ranges[1];
+
+ let highlight = new Highlight(...ranges);
+ CSS.highlights.set("example-highlight", highlight);
+
+ const rect = textNode1.getBoundingClientRect();
+ const characterWidth = rect.width / textNode1.textContent.length;
+ const characterHeight = rect.height;
+
+ // No Highlights outside of text contents.
+ let x = rect.left - 1;
+ let y = rect.top - 1;
+ let highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns an empty array when the coordinates provided are outside of the text contents');
+
+ // Get x and y coordinates between characters '0' and '1' on the first line (not highlighted).
+ x = rect.left + characterWidth;
+ y = rect.top + characterHeight / 2;
+ highlights = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns an empty array when the coordinates provided are outside of the highlighted ranges');
+
+ // Get x and y coordinates between characters '2' and '3' on the first line.
+ x = rect.left + 3 * characterWidth;
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 1, 'CSS.highlights.highlightsFromPoint() returns exactly one HighlightHitResult when the coordinates provided point at one Highlight');
+ assert_equals(highlight_hit_results[0].highlight, highlight, 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the Highlight present at the coordinates provided');
+ assert_array_equals(highlight_hit_results[0].ranges, [big_range], 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the ranges of the Highlight present at the coordinates provided');
+
+ // Get x and y coordinates between characters '6' and '7' on the first line.
+ x = rect.left + 7 * characterWidth;
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 1, 'CSS.highlights.highlightsFromPoint() returns exactly one HighlightHitResult when the coordinates provided point at one Highlight');
+ assert_equals(highlight_hit_results[0].highlight, highlight, 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the Highlight present at the coordinates provided');
+ assert_array_equals(highlight_hit_results[0].ranges, ranges, 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the ranges of the Highlight present at the coordinates provided in the right order');
+
+ // Get x and y coordinates to the right of the last character of the first line.
+ x = rect.left + 12 * characterWidth;
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns an empty array when the coordinates provided are to the right of the text contents');
+
+ // Get x and y coordinates between characters '0' and '1' on the second line.
+ x = rect.left + characterWidth;
+ y = rect.top + 1.5 * characterHeight;
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 1, 'CSS.highlights.highlightsFromPoint() returns exactly one HighlightHitResult when the coordinates provided point at one Highlight');
+ assert_equals(highlight_hit_results[0].highlight, highlight, 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the Highlight present at the coordinates provided');
+ assert_array_equals(highlight_hit_results[0].ranges, [big_range], 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the ranges of the Highlight present at the coordinates provided');
+
+ // Get x and y coordinates between characters '8' and '9' on the second line (not highlighted).
+ x = rect.left + 9 * characterWidth;
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns an empty array when the coordinates provided are outside of the highlighted ranges');
+
+ // Get x and y coordinates to the right of the last character of the second line.
+ x = rect.left + 12 * characterWidth;
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns an empty array when the coordinates provided are to the right of the text contents');
+
+ // Get x and y coordinates below the second line.
+ x = rect.left + 5 * characterWidth;
+ y = rect.top + 3 * characterHeight;
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns an empty array when the coordinates provided are below the text contents');
+ }
+
+ test(() => {
+ // Set a Highlight with two nested ranges in this way:
+ // 01[234(56789)
+ // 01234567]89
+ let range1 = new Range();
+ range1.setStart(textNode1.childNodes[0], 5);
+ range1.setEnd(textNode1.childNodes[0], 10);
+ let range2 = new Range();
+ range2.setStart(textNode1.childNodes[0], 2);
+ range2.setEnd(textNode2.childNodes[0], 8);
+
+ let static_range1 = new StaticRange({startContainer: textNode1.childNodes[0], startOffset: 5, endContainer: textNode1.childNodes[0], endOffset: 10})
+ let static_range2 = new StaticRange({startContainer: textNode1.childNodes[0], startOffset: 2, endContainer: textNode2.childNodes[0], endOffset: 8})
+
+ test_ranges([range1, range2]);
+ test_ranges([range2, range1]);
+ test_ranges([static_range1, static_range2]);
+ test_ranges([static_range2, static_range1]);
+ test_ranges([static_range1, range2]);
+ test_ranges([range1, static_range2]);
+ }, 'CSS.highlights.highlightsFromPoint() returns HighlightHitResults with the Highlights and their corresponding Ranges and StaticRanges present at the given point in the right order on multi-line text.');
+</script> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint.html b/tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint.html
index 5bb81bea69a..5b4e7704a4d 100644
--- a/tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint.html
+++ b/tests/wpt/tests/css/css-highlight-api/HighlightRegistry-highlightsFromPoint.html
@@ -26,7 +26,7 @@ body {
test(() => {
assert_equals(CSS.highlights.highlightsFromPoint(-1,-1).length, 0);
- }, 'CSS.highlights.highlightsFromPoint() should return an empty vector when called with a point outside the document.');
+ }, 'CSS.highlights.highlightsFromPoint() should return an empty array when called with a point outside the document.');
test(() => {
// Set two Highlights in this way: 01[234[56789]]
@@ -49,35 +49,38 @@ body {
// No Highlights outside of text contents.
let x = rect.left - 1;
let y = rect.top - 1;
- let highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the coordinates provided are outside of the text contents');
+ let highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns an empty array when the coordinates provided are outside of the text contents');
// Get x and y coordinates between '0' and '1'.
x = rect.left + characterWidth;
y = rect.top + rect.height / 2;
highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the coordinates provided point at no Highlights');
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns an empty array when the coordinates provided point at no Highlights');
// Get x and y coordinates between '2' and '3'.
x = rect.left + 3 * characterWidth;
- highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 1, 'CSS.highlights.highlightsFromPoint() returns exactly one Highlight when the coordinates provided point at one Highlight');
- assert_equals(highlights[0], highlight1, 'CSS.highlights.highlightsFromPoint() returns the Highlight present at the coordinates provided');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 1, 'CSS.highlights.highlightsFromPoint() returns exactly one HighlightHitResult when the coordinates provided point at one Highlight');
+ assert_equals(highlight_hit_results[0].highlight, highlight1, 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the Highlight present at the coordinates provided');
+ assert_array_equals(highlight_hit_results[0].ranges, [range1], 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the ranges of the Highlight present at the coordinates provided');
// Get x and y coordinates between '6' and '7'.
// Same priority for the Highlights, break tie by order of registration.
x = rect.left + 7 * characterWidth;
- highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 2, 'CSS.highlights.highlightsFromPoint() returns exactly two Highlights when the coordinates provided point at two overlapping Highlights');
- assert_equals(highlights[0], highlight2, 'CSS.highlights.highlightsFromPoint() returns first the Highlight registered last when both Highlights present at the point provided have the same priority');
- assert_equals(highlights[1], highlight1, 'CSS.highlights.highlightsFromPoint() returns last the Highlight registered first when both Highlights present at the point provided have the same priority');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 2, 'CSS.highlights.highlightsFromPoint() returns exactly two HighlightHitResults when the coordinates provided point at two overlapping Highlights');
+ assert_equals(highlight_hit_results[0].highlight, highlight2, 'CSS.highlights.highlightsFromPoint() returns first a HighlightHitResult with the Highlight registered last when both Highlights present at the point provided have the same priority');
+ assert_equals(highlight_hit_results[1].highlight, highlight1, 'CSS.highlights.highlightsFromPoint() returns last a HighlightHitResult with the Highlight registered first when both Highlights present at the point provided have the same priority');
+ assert_array_equals(highlight_hit_results[0].ranges, [range2], 'CSS.highlights.highlightsFromPoint() returns first a HighlightHitResult with the ranges of the Highlight present on top at the coordinates provided');
+ assert_array_equals(highlight_hit_results[1].ranges, [range1], 'CSS.highlights.highlightsFromPoint() returns last a HighlightHitResult with the ranges of the Highlight present at the bottom at the coordinates provided');
// Now highlight1 should be first because it's got higher priority.
highlight1.priority = 2;
highlight2.priority = 1;
- highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 2, 'CSS.highlights.highlightsFromPoint() returns exactly two Highlights when the coordinates provided point at two overlapping Highlights');
- assert_equals(highlights[0], highlight1, 'CSS.highlights.highlightsFromPoint() returns first the Highlight with higher priority when there are two Highlights present at the point provided');
- assert_equals(highlights[1], highlight2, 'CSS.highlights.highlightsFromPoint() returns last the Highlight with lower priority when there are two Highlights present at the point provided');
- }, 'CSS.highlights.highlightsFromPoint() returns Highlights present at the given point in the right order.');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 2, 'CSS.highlights.highlightsFromPoint() returns exactly two HighlightHitResults when the coordinates provided point at two overlapping Highlights');
+ assert_equals(highlight_hit_results[0].highlight, highlight1, 'CSS.highlights.highlightsFromPoint() returns first a HighlightHitResult with the Highlight with higher priority when there are two Highlights present at the point provided');
+ assert_equals(highlight_hit_results[1].highlight, highlight2, 'CSS.highlights.highlightsFromPoint() returns last a HighlightHitResult with the Highlight with lower priority when there are two Highlights present at the point provided');
+ }, 'CSS.highlights.highlightsFromPoint() returns the Highlights with their corresponding ranges present at the given point in the right order.');
</script> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius-ref.html b/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius-ref.html
new file mode 100644
index 00000000000..2869d38a982
--- /dev/null
+++ b/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Masking: Test clip-path property and shape function with single-value arc radius</title>
+</head>
+<style>
+@keyframes animate-shape {
+ from {
+ clip-path: shape(from 40px 100px, arc to 200px 100px of 50% 50% small cw, arc to 0 100px of 30% 30% small cw);
+ }
+ to {
+ clip-path: shape(from 40px 100px, arc to 200px 100px of 30% 30% small cw, arc to 0 100px of calc(10px + 45%) calc(10px + 45%) small cw);
+ }
+}
+#shape {
+ width: calc(500px / sqrt(2));
+ height: calc(500px / sqrt(2));
+ background: green;
+ animation: animate-shape 100s;
+ animation-play-state: paused;
+ animation-timing-function: steps(2, start);
+}
+</style>
+
+<div id="shape"></div>
+</html>
diff --git a/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius.html b/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius.html
new file mode 100644
index 00000000000..aa91e1828a7
--- /dev/null
+++ b/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape-arc-direction-agnostic-radius.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Masking: Test animating single-value arc radius of the shape() function</title>
+ <link rel="help" href="https://drafts.csswg.org/css-shapes-2/#funcdef-shape">
+ <link rel="match" href="clip-path-interpolation-shape-arc-direction-agnostic-radius-ref.html">
+ <meta name="fuzzy" content="maxDifference=0-10;totalPixels=0-360">
+</head>
+<style>
+@keyframes animate-shape {
+ from {
+ clip-path: shape(from 40px 100px, arc to 200px 100px of 50% small cw, arc to 0 100px of 30% small cw);
+ }
+ to {
+ clip-path: shape(from 40px 100px, arc to 200px 100px of 30% small cw, arc to 0 100px of calc(10px + 45%) small cw);
+ }
+}
+#shape {
+ width: 400px;
+ height: 300px;
+ background: green;
+ animation: animate-shape 100s;
+ animation-play-state: paused;
+ animation-timing-function: steps(2, start);
+}
+</style>
+
+<div id="shape"></div>
+</html>
diff --git a/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape.html b/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape.html
index 6d85c2a06b4..f725e1fc6fa 100644
--- a/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape.html
+++ b/tests/wpt/tests/css/css-masking/animations/clip-path-interpolation-shape.html
@@ -145,15 +145,28 @@ test_interpolation({
test_interpolation({
property: 'clip-path',
- from: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)',
- to: 'shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)'
+ from: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)',
+ to: 'shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)'
}, [
{at: -0.3, expect: 'shape(from 2% 2px, arc to 18% -12px of 7px 17px, arc by 12% -2px of 33px 33px rotate -42deg cw large , arc to 25% 20px of 10px 5px)'},
- {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px)'},
+ {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px)'},
{at: 0.3, expect: 'shape(from 8% 8px, arc to 12% -18px of 13px 23px, arc by 18% -8px of 27px 27px rotate 102deg cw large, arc to 25% 20px of 10px 5px cw)'},
- {at: 0.5, expect: 'shape(from 10% 10px, arc to 10% -20px of 15px 25px, arc by 20% -10px of 25px rotate 150deg cw large, arc to 25% 20px of 10px 5px cw)'},
- {at: 1, expect: 'shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px rotate 270deg cw, arc to 25% 20px of 10px 5px cw)'},
- {at: 1.5, expect: 'shape(from 20% 20px, arc to 0% -30px of 25px 35px, arc by 30% -20px of 15px rotate 390deg cw, arc to 25% 20px of 10px 5px cw)'},
+ {at: 0.5, expect: 'shape(from 10% 10px, arc to 10% -20px of 15px 25px, arc by 20% -10px of 25px 25px rotate 150deg cw large, arc to 25% 20px of 10px 5px cw)'},
+ {at: 1, expect: 'shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px 20px rotate 270deg cw, arc to 25% 20px of 10px 5px cw)'},
+ {at: 1.5, expect: 'shape(from 20% 20px, arc to 0% -30px of 25px 35px, arc by 30% -20px of 15px 15px rotate 390deg cw, arc to 25% 20px of 10px 5px cw)'},
+]);
+
+test_interpolation({
+ property: 'clip-path',
+ from: 'shape(from 5% 5px, arc to 15% -15px of 10px, arc by 15% -5px of 30% cw rotate 30deg large, arc to 25% 20px of 10% small)',
+ to: 'shape(from 15% 15px, arc to 5% -25px of 15%, arc by 25% -15px of 12rem cw rotate 270deg small, arc to 15% 20px of 20% small cw)'
+}, [
+ {at: -0.3, expect: 'shape(from 2% 2px, arc to 18% -12px of calc(-4.5% + 13px), arc by 12% -2px of calc(39% - 57.6px) cw large rotate -42deg, arc to 28% 20px of 7%)'},
+ {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of calc(0% + 10px), arc by 15% -5px of 30% cw large rotate 30deg, arc to 25% 20px of 10%)'},
+ {at: 0.3, expect: 'shape(from 8% 8px, arc to 12% -18px of calc(4.5% + 7px), arc by 18% -8px of calc(21% + 57.6px) rotate 102deg cw large, arc to 22% 20px of 13% cw)'},
+ {at: 0.5, expect: 'shape(from 10% 10px, arc to 10% -20px of calc(7.5% + 5px), arc by 20% -10px of calc(15% + 96px) cw large rotate 150deg, arc to 20% 20px of 15% cw)'},
+ {at: 1, expect: 'shape(from 15% 15px, arc to 5% -25px of 15%, arc by 25% -15px of calc(0% + 192px) cw rotate 270deg, arc to 15% 20px of 20% cw)'},
+ {at: 1.5, expect: 'shape(from 20% 20px, arc to 0% -30px of calc(22.5% - 5px), arc by 30% -20px of calc(-15% + 288px) cw rotate 390deg, arc to 10% 20px of 25% cw)'},
]);
test_interpolation({
@@ -254,28 +267,28 @@ test_interpolation({
test_interpolation({
property: 'clip-path',
- from: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)',
+ from: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)',
to: 'path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")',
}, [
- {at: -0.3, expect: 'shape(from calc(6.5% - 4.5px) 2px, arc to calc(19.5% - 1.5px) -12px of 7px 17px, arc by calc(19.5% - 7.5px) -2px of 33px cw large rotate -42deg, arc to calc(32.5% - 7.5px) 20px of 10px 5px)'},
- {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)'},
- {at: 0.3, expect: 'shape(from calc(3.5% + 4.5px) 8px, arc to calc(10.5% + 1.5px) -18px of 13px 23px, arc by calc(10.5% + 7.5px) -8px of 27px cw large rotate 102deg, arc to calc(17.5% + 7.5px) 20px of 10px 5px)'},
- {at: 0.5, expect: 'shape(from calc(2.5% + 7.5px) 10px, arc to calc(7.5% + 2.5px) -20px of 15px 25px, arc by calc(7.5% + 12.5px) -10px of 25px cw large rotate 150deg, arc to calc(12.5% + 12.5px) 20px of 10px 5px)'},
- {at: 1, expect: 'shape(from calc(0% + 15px) 15px, arc to calc(0% + 5px) -25px of 20px 30px, arc by calc(0% + 25px) -15px of 20px cw rotate 270deg, arc to calc(0% + 25px) 20px of 10px 5px)'},
- {at: 1.5, expect: 'shape(from calc(-2.5% + 22.5px) 20px, arc to calc(-7.5% + 7.5px) -30px of 25px 35px, arc by calc(-7.5% + 37.5px) -20px of 15px cw rotate 390deg, arc to calc(-12.5% + 37.5px) 20px of 10px 5px)'},
+ {at: -0.3, expect: 'shape(from calc(6.5% - 4.5px) 2px, arc to calc(19.5% - 1.5px) -12px of 7px 17px, arc by calc(19.5% - 7.5px) -2px of 33px 33px cw large rotate -42deg, arc to calc(32.5% - 7.5px) 20px of 10px 5px)'},
+ {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)'},
+ {at: 0.3, expect: 'shape(from calc(3.5% + 4.5px) 8px, arc to calc(10.5% + 1.5px) -18px of 13px 23px, arc by calc(10.5% + 7.5px) -8px of 27px 27px cw large rotate 102deg, arc to calc(17.5% + 7.5px) 20px of 10px 5px)'},
+ {at: 0.5, expect: 'shape(from calc(2.5% + 7.5px) 10px, arc to calc(7.5% + 2.5px) -20px of 15px 25px, arc by calc(7.5% + 12.5px) -10px of 25px 25px cw large rotate 150deg, arc to calc(12.5% + 12.5px) 20px of 10px 5px)'},
+ {at: 1, expect: 'shape(from calc(0% + 15px) 15px, arc to calc(0% + 5px) -25px of 20px 30px, arc by calc(0% + 25px) -15px of 20px 20px cw rotate 270deg, arc to calc(0% + 25px) 20px of 10px 5px)'},
+ {at: 1.5, expect: 'shape(from calc(-2.5% + 22.5px) 20px, arc to calc(-7.5% + 7.5px) -30px of 25px 35px, arc by calc(-7.5% + 37.5px) -20px of 15px 15px cw rotate 390deg, arc to calc(-12.5% + 37.5px) 20px of 10px 5px)'},
]);
test_interpolation({
property: 'clip-path',
from: 'path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")',
- to: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)' // ccw, cw, cw
+ to: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)' // ccw, cw, cw
}, [
{at: -0.3, expect: 'shape(from 2px 2px, arc to 18px -12px of 7px 17px, arc by 12px -2px of 33px 33px rotate -42deg cw large, arc to 25px 20px of 10px 5px)'},
- {at: 0, expect: 'shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px)'},
+ {at: 0, expect: 'shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px)'},
{at: 0.3, expect: 'shape(from 8px 8px, arc to 12px -18px of 13px 23px, arc by 18px -8px of 27px 27px rotate 102deg cw large, arc to 25px 20px of 10px 5px cw)'},
- {at: 0.5, expect: 'shape(from 10px 10px, arc to 10px -20px of 15px 25px, arc by 20px -10px of 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw)'},
- {at: 1, expect: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px rotate 270deg cw, arc to 25px 20px of 10px 5px cw)'},
- {at: 1.5, expect: 'shape(from 20px 20px, arc to 0px -30px of 25px 35px, arc by 30px -20px of 15px rotate 390deg cw, arc to 25px 20px of 10px 5px cw)'},
+ {at: 0.5, expect: 'shape(from 10px 10px, arc to 10px -20px of 15px 25px, arc by 20px -10px of 25px 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw)'},
+ {at: 1, expect: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px 20px rotate 270deg cw, arc to 25px 20px of 10px 5px cw)'},
+ {at: 1.5, expect: 'shape(from 20px 20px, arc to 0px -30px of 25px 35px, arc by 30px -20px of 15px 15px rotate 390deg cw, arc to 25px 20px of 10px 5px cw)'},
]);
</script>
diff --git a/tests/wpt/tests/css/css-masking/clip-path/clip-path-shape-011.html b/tests/wpt/tests/css/css-masking/clip-path/clip-path-shape-011.html
new file mode 100644
index 00000000000..fc1927591e0
--- /dev/null
+++ b/tests/wpt/tests/css/css-masking/clip-path/clip-path-shape-011.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Masking: Test clip-path property and shape function with single-value arc radius</title>
+ <link rel="help" href="https://drafts.csswg.org/css-shapes-2/#funcdef-shape">
+ <link rel="match" href="reference/clip-path-shape-arc-ref.html">
+ <meta name="assert" content="When providing one radius value with percentage, the percentage should be relative to the diagonal.">
+<meta name="fuzzy" content="maxDifference=0-64;totalPixels=0-128">
+</head>
+<style>
+#shape {
+ width: 400px;
+ height: 300px;
+ background: green;
+ clip-path: shape(
+ from 0px 100px,
+ arc to 20px 100px of 10% large cw,
+ arc to 100px 20px of 5% small,
+ arc to 0 100px of calc(10px + 15%)
+ rotate 30deg);
+}
+</style>
+
+<body>
+ <div id="shape"></div>
+</body>
+</html>
diff --git a/tests/wpt/tests/css/css-masking/clip-path/reference/clip-path-shape-arc-ref.html b/tests/wpt/tests/css/css-masking/clip-path/reference/clip-path-shape-arc-ref.html
new file mode 100644
index 00000000000..9cbe55de210
--- /dev/null
+++ b/tests/wpt/tests/css/css-masking/clip-path/reference/clip-path-shape-arc-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Masking: Test clip-path property and shape function with single-value arc radius</title>
+ <link rel="help" href="https://drafts.csswg.org/css-shapes-2/#funcdef-shape">
+</head>
+<style>
+#shape {
+ /* 500/sqrt(2) ~= 353 */
+ width: 353px;
+ height: 353px;
+ background: green;
+ clip-path: shape(
+ from 0px 100px,
+ arc to 20px 100px of 10% large cw,
+ arc to 100px 20px of 5% small,
+ arc to 0 100px of calc(10px + 15%)
+ rotate 30deg);
+}
+</style>
+
+<body>
+ <div id="shape"></div>
+</body>
+</html>
diff --git a/tests/wpt/tests/css/css-masking/parsing/clip-path-shape-parsing.html b/tests/wpt/tests/css/css-masking/parsing/clip-path-shape-parsing.html
index 5a4c7415bb4..b889ee01805 100644
--- a/tests/wpt/tests/css/css-masking/parsing/clip-path-shape-parsing.html
+++ b/tests/wpt/tests/css/css-masking/parsing/clip-path-shape-parsing.html
@@ -29,8 +29,10 @@ test_valid_value("clip-path", "shape(from 10px 10px, curve to 50px 20px with 10r
test_valid_value("clip-path", "shape(from 10px 10px, curve by 50px 20px with 10rem 1px / 20vh 1ch)");
test_valid_value("clip-path", "shape(from 10px 10px, smooth to 50px 20px with 10rem 1%)");
test_valid_value("clip-path", "shape(from 10px 10px, smooth to 50px 1pt)");
-test_valid_value("clip-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)", "shape(from 10px 10px, arc to 50px 1pt of 10px)");
-test_valid_value("clip-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 1pt of 10px)");
+test_valid_value("clip-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)");
+test_valid_value("clip-path", "shape(from 10px 10px, arc to 50px 1pt of 10%)");
+test_valid_value("clip-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)");
+test_valid_value("clip-path", "shape(from 10px 10px, arc to 50px 1pt of 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 1pt of 10px)");
test_valid_value("clip-path", "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)", "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)");
test_valid_value("clip-path", "shape(evenodd from 0px 0px, close)");
diff --git a/tests/wpt/tests/css/css-multicol/column-height-009-ref.html b/tests/wpt/tests/css/css-multicol/column-height-009-ref.html
index 034440ebd5c..4696d79695b 100644
--- a/tests/wpt/tests/css/css-multicol/column-height-009-ref.html
+++ b/tests/wpt/tests/css/css-multicol/column-height-009-ref.html
@@ -32,7 +32,7 @@
<div class="item">i<br>j</div>
<div class="item">o<br>p</div>
</div>
- <div class="rule" style="height:100px;"></div>
+ <div class="rule" style="height:160px;"></div>
<div class="column">
<div class="item">e<br>f</div>
<div class="item">k<br>l</div>
diff --git a/tests/wpt/tests/css/css-multicol/crashtests/repeated-table-column.html b/tests/wpt/tests/css/css-multicol/crashtests/repeated-table-column.html
new file mode 100644
index 00000000000..0d6a1accfd1
--- /dev/null
+++ b/tests/wpt/tests/css/css-multicol/crashtests/repeated-table-column.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://issues.chromium.org/issues/420267099">
+<div style="columns:2; column-fill:auto; height:100px;">
+ <div style="display:table;">
+ <div style="display:table-header-group; break-inside:avoid;">
+ <div style="display:table;">
+ <div id="col" style="display:table-column;"></div>
+ <div style="width:10px; height:10px;"></div>
+ </div>
+ </div>
+ <div style="height:150px;"></div>
+ </div>
+</div>
+<script>
+ col.offsetLeft;
+</script>
diff --git a/tests/wpt/tests/css/css-multicol/parsing/column-rule-color-invalid.html b/tests/wpt/tests/css/css-multicol/parsing/column-rule-color-invalid.html
index 015defb7560..da8dba0a73c 100644
--- a/tests/wpt/tests/css/css-multicol/parsing/column-rule-color-invalid.html
+++ b/tests/wpt/tests/css/css-multicol/parsing/column-rule-color-invalid.html
@@ -13,7 +13,6 @@
<script>
test_invalid_value("column-rule-color", "auto");
-test_invalid_value("column-rule-color", "green blue");
test_invalid_value("column-rule-color", "green, blue");
</script>
</body>
diff --git a/tests/wpt/tests/css/css-multicol/parsing/column-rule-style-invalid.html b/tests/wpt/tests/css/css-multicol/parsing/column-rule-style-invalid.html
index db367c273f4..e8f2ab60c47 100644
--- a/tests/wpt/tests/css/css-multicol/parsing/column-rule-style-invalid.html
+++ b/tests/wpt/tests/css/css-multicol/parsing/column-rule-style-invalid.html
@@ -12,7 +12,6 @@
<body>
<script>
test_invalid_value("column-rule-style", "auto");
-test_invalid_value("column-rule-style", "double dashed");
</script>
</body>
</html>
diff --git a/tests/wpt/tests/css/css-multicol/parsing/column-rule-width-invalid.html b/tests/wpt/tests/css/css-multicol/parsing/column-rule-width-invalid.html
index 0bdbbecb8ca..77f55e09d93 100644
--- a/tests/wpt/tests/css/css-multicol/parsing/column-rule-width-invalid.html
+++ b/tests/wpt/tests/css/css-multicol/parsing/column-rule-width-invalid.html
@@ -18,7 +18,6 @@ test_invalid_value("column-rule-width", "10");
test_invalid_value("column-rule-width", "-20px");
test_invalid_value("column-rule-width", "30%");
-test_invalid_value("column-rule-width", "medium 40px");
</script>
</body>
</html>
diff --git a/tests/wpt/tests/css/css-position/overlay/WEB_FEATURES.yml b/tests/wpt/tests/css/css-position/overlay/WEB_FEATURES.yml
new file mode 100644
index 00000000000..a1a4402ee42
--- /dev/null
+++ b/tests/wpt/tests/css/css-position/overlay/WEB_FEATURES.yml
@@ -0,0 +1,3 @@
+features:
+- name: overlay
+ files: "**"
diff --git a/tests/wpt/tests/css/css-sizing/contain-intrinsic-size/parsing/from-element.tentative.html b/tests/wpt/tests/css/css-sizing/contain-intrinsic-size/parsing/from-element.tentative.html
new file mode 100644
index 00000000000..fe99ccb23d9
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/contain-intrinsic-size/parsing/from-element.tentative.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>CSS Intrinsic Size Test: intrinsic-size with from-element</title>
+<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+</head>
+<body>
+<script>
+test_valid_value("contain-intrinsic-size", "from-element");
+</script>
+</body>
+</html>
+
diff --git a/tests/wpt/tests/css/css-sizing/image-max-width-and-height-behaves-as-auto.html b/tests/wpt/tests/css/css-sizing/image-max-width-and-height-behaves-as-auto.html
new file mode 100644
index 00000000000..dcb00ba6a5c
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/image-max-width-and-height-behaves-as-auto.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#min-max-widths">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio-size-transfers">
+<meta name="assert" content="When computed logical width is auto, computed logical height behaves as auto,
+the used logical height should be determined with respect to any max logical width constraint.">
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
+<style>
+.container {
+ width: 100px;
+}
+img {
+ max-width: 100%;
+ height: 100%;
+}
+</style>
+</head>
+<body>
+ <p>Test passes if there is a filled green square.</p>
+ <div class="container">
+ <img src="aspect-ratio/support/200x200-green.png"/>
+ </div>
+</body>
+</html>
diff --git a/tests/wpt/tests/css/css-sizing/resources/iframe-contents-unsized.html b/tests/wpt/tests/css/css-sizing/resources/iframe-contents-unsized.html
new file mode 100644
index 00000000000..db1931a27d5
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/resources/iframe-contents-unsized.html
@@ -0,0 +1,7 @@
+<!doctype HTML>
+<head>
+<style>
+ * { margin: 0 }
+</style>
+</head>
+<div style="width: 100px; height: 400px"></div>
diff --git a/tests/wpt/tests/css/css-sizing/resources/iframe-contents.html b/tests/wpt/tests/css/css-sizing/resources/iframe-contents.html
new file mode 100644
index 00000000000..3b7406e1e40
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/resources/iframe-contents.html
@@ -0,0 +1,8 @@
+<!doctype HTML>
+<head>
+<style>
+ * { margin: 0 }
+</style>
+<meta name="responsive-embedded-sizing">
+</head>
+<div style="width: 100px; height: 400px"></div>
diff --git a/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin-no-match-element.sub.tentative.html b/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin-no-match-element.sub.tentative.html
new file mode 100644
index 00000000000..08dda4e6b76
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin-no-match-element.sub.tentative.html
@@ -0,0 +1,12 @@
+<!doctype HTML>
+<title>Test that a cross-origin iframe is responsively sized.</title>
+<link rel="author" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing/">
+<link rel="match" href="responsive-iframe-unsized-ref.html">
+<style>
+iframe {
+ border: 1px solid black;
+}
+</style>
+<iframe frameborder=0 scrolling=no src="http://{{hosts[alt][]}}:{{ports[http][0]}}/css/css-sizing/resources/iframe-contents.html">
+</iframe>
diff --git a/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin-not-embedded-sized.sub.tentative.html b/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin-not-embedded-sized.sub.tentative.html
new file mode 100644
index 00000000000..d9b33973a04
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin-not-embedded-sized.sub.tentative.html
@@ -0,0 +1,13 @@
+<!doctype HTML>
+<title>Test that a cross-origin iframe is responsively sized.</title>
+<link rel="author" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing/">
+<link rel="match" href="responsive-iframe-unsized-ref.html">
+<style>
+iframe {
+ border: 1px solid black;
+ contain-intrinsic-size: from-element;
+}
+</style>
+<iframe frameborder=0 scrolling=no src="http://{{hosts[alt][]}}:{{ports[http][0]}}/css/css-sizing/resources/iframe-contents-unsized.html">
+</iframe>
diff --git a/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin.sub.tentative.html b/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin.sub.tentative.html
new file mode 100644
index 00000000000..22f6f1d1581
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/responsive-iframe-cross-origin.sub.tentative.html
@@ -0,0 +1,13 @@
+<!doctype HTML>
+<title>Test that a cross-origin iframe is responsively sized.</title>
+<link rel="author" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing/">
+<link rel="match" href="responsive-iframe-ref.html">
+<style>
+iframe {
+ border: 1px solid black;
+ contain-intrinsic-size: from-element;
+}
+</style>
+<iframe frameborder=0 src="http://{{hosts[alt][]}}:{{ports[http][0]}}/css/css-sizing/resources/iframe-contents.html">
+</iframe>
diff --git a/tests/wpt/tests/css/css-sizing/responsive-iframe-no-match-element.html b/tests/wpt/tests/css/css-sizing/responsive-iframe-no-match-element.html
new file mode 100644
index 00000000000..685eb60f123
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/responsive-iframe-no-match-element.html
@@ -0,0 +1,12 @@
+<!doctype HTML>
+<title>Test that a same-origin iframe is responsively sized.</title>
+<link rel="author" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing/">
+<link rel="match" href="responsive-iframe-unsized-ref.html">
+<style>
+iframe {
+ border: 1px solid black;
+}
+</style>
+<iframe frameborder=0 scrolling=no src="resources/iframe-contents.html">
+</iframe>
diff --git a/tests/wpt/tests/css/css-sizing/responsive-iframe-not-embedded-sized.tentative.html b/tests/wpt/tests/css/css-sizing/responsive-iframe-not-embedded-sized.tentative.html
new file mode 100644
index 00000000000..0d1f91c5789
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/responsive-iframe-not-embedded-sized.tentative.html
@@ -0,0 +1,13 @@
+<!doctype HTML>
+<title>Test that a same-origin iframe is responsively sized.</title>
+<link rel="author" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing/">
+<link rel="match" href="responsive-iframe-unsized-ref.html">
+<style>
+iframe {
+ border: 1px solid black;
+ contain-intrinsic-size: from-element;
+}
+</style>
+<iframe frameborder=0 scrolling=no src="resources/iframe-contents-unsized.html">
+</iframe>
diff --git a/tests/wpt/tests/css/css-sizing/responsive-iframe-ref.html b/tests/wpt/tests/css/css-sizing/responsive-iframe-ref.html
new file mode 100644
index 00000000000..c446474f71a
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/responsive-iframe-ref.html
@@ -0,0 +1,10 @@
+<!doctype HTML>
+<style>
+div {
+ width: 300px;
+ height: 400px;
+ border: 1px solid black;
+}
+</style>
+<div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/responsive-iframe-unsized-ref.html b/tests/wpt/tests/css/css-sizing/responsive-iframe-unsized-ref.html
new file mode 100644
index 00000000000..2fa633e086d
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/responsive-iframe-unsized-ref.html
@@ -0,0 +1,10 @@
+<!doctype HTML>
+<style>
+div {
+ width: 300px;
+ height: 150px;
+ border: 1px solid black;
+}
+</style>
+<div>
+</div>
diff --git a/tests/wpt/tests/css/css-sizing/responsive-iframe.tentative.html b/tests/wpt/tests/css/css-sizing/responsive-iframe.tentative.html
new file mode 100644
index 00000000000..229cf018449
--- /dev/null
+++ b/tests/wpt/tests/css/css-sizing/responsive-iframe.tentative.html
@@ -0,0 +1,13 @@
+<!doctype HTML>
+<title>Test that a same-origin iframe is responsively sized.</title>
+<link rel="author" href="mailto:chrishtr@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-sizing/">
+<link rel="match" href="responsive-iframe-ref.html">
+<style>
+iframe {
+ border: 1px solid black;
+ contain-intrinsic-size: from-element;
+}
+</style>
+<iframe frameborder=0 src="resources/iframe-contents.html">
+</iframe>
diff --git a/tests/wpt/tests/css/css-text/text-autospace/text-autospace-edit-001-ref.html b/tests/wpt/tests/css/css-text/text-autospace/text-autospace-edit-001-ref.html
new file mode 100644
index 00000000000..ca95e197462
--- /dev/null
+++ b/tests/wpt/tests/css/css-text/text-autospace/text-autospace-edit-001-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+#container {
+ font-family: Ahem;
+ font-size: 40px;
+}
+</style>
+<div id="container">
+ <div>1国国国国国国国国国国</div>
+ <div>1国国国国国国国国国国</div>
+ <div>1国国国国国国国国国国国国</div>
+ <div>1国国国国国国国国国国国国</div>
+</div>
diff --git a/tests/wpt/tests/css/css-text/text-autospace/text-autospace-edit-001.html b/tests/wpt/tests/css/css-text/text-autospace/text-autospace-edit-001.html
new file mode 100644
index 00000000000..80c46f54d20
--- /dev/null
+++ b/tests/wpt/tests/css/css-text/text-autospace/text-autospace-edit-001.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-autospace-property">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="match" href="text-autospace-edit-001-ref.html">
+<style>
+#container {
+ font-family: Ahem;
+ font-size: 40px;
+}
+</style>
+<div id="container">
+ <div data-append="10">1国国国国国国国国国国</div>
+ <div data-append="11">1国国国国国国国国国国国国</div>
+</div>
+<script>
+for (const reference of document.querySelectorAll("[data-append]")) {
+ // Split the `textContent` at the `data-append` offset.
+ const text = reference.textContent;
+ const offset = parseInt(reference.dataset.append);
+ const initiaL_text = text.substring(0, offset);
+ const append_text = text.substring(offset);
+
+ // Create a `<div>` with the `initial_text`, then append `append_text`
+ // one character at a time, with a forced layout.
+ const element = document.createElement("div");
+ const text_node = document.createTextNode(initiaL_text);
+ element.appendChild(text_node);
+ reference.after(element);
+ for (const ch of append_text) {
+ element.offsetTop;
+ text_node.appendData(ch);
+ }
+}
+</script>
diff --git a/tests/wpt/tests/css/css-text/text-autospace/text-autospace-vs-001-ref.html b/tests/wpt/tests/css/css-text/text-autospace/text-autospace-vs-001-ref.html
new file mode 100644
index 00000000000..b02b4f7a20d
--- /dev/null
+++ b/tests/wpt/tests/css/css-text/text-autospace/text-autospace-vs-001-ref.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<style>
+#container {
+ font-family: Ahem;
+ font-size: 40px;
+ text-autospace: no-autospace;
+
+ span {
+ margin-left: calc(1em / 8);
+ margin-right: calc(1em / 8);
+ }
+}
+</style>
+<div id="container">
+ <div class="test">国&#xFE00;国</div>
+ <div class="test">国&#xFE00;<span>A</span></div>
+ <div class="test">A&#xFE00;<span>国</span></div>
+ <div class="test">国&#xE0100;国</div>
+ <div class="test">国&#xE0100;<span>A</span></div>
+ <div class="test">A&#xE0100;<span>国</span></div>
+</div>
diff --git a/tests/wpt/tests/css/css-text/text-autospace/text-autospace-vs-001.html b/tests/wpt/tests/css/css-text/text-autospace/text-autospace-vs-001.html
new file mode 100644
index 00000000000..31c7bbf6073
--- /dev/null
+++ b/tests/wpt/tests/css/css-text/text-autospace/text-autospace-vs-001.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-text-4/#text-autospace-property">
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<link rel="match" href="text-autospace-vs-001-ref.html">
+<style>
+#container {
+ font-family: Ahem;
+ font-size: 40px;
+}
+</style>
+<div id="container">
+ <div class="test">国&#xFE00;国</div>
+ <div class="test">国&#xFE00;A</div>
+ <div class="test">A&#xFE00;国</div>
+ <div class="test">国&#xE0100;国</div>
+ <div class="test">国&#xE0100;A</div>
+ <div class="test">A&#xE0100;国</div>
+</div>
diff --git a/tests/wpt/tests/css/css-text/word-break/reference/word-break-keep-all-u002d-ref.html b/tests/wpt/tests/css/css-text/word-break/reference/word-break-keep-all-u002d-ref.html
new file mode 100644
index 00000000000..4a6553cfe83
--- /dev/null
+++ b/tests/wpt/tests/css/css-text/word-break/reference/word-break-keep-all-u002d-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<style>
+#container {
+ font-size: 20px;
+ width: 3ch;
+}
+</style>
+<div id="container">
+ <div>AB-CD-EF</div>
+ <div>12-34-56</div>
+</div>
diff --git a/tests/wpt/tests/css/css-text/word-break/word-break-keep-all-u002d.html b/tests/wpt/tests/css/css-text/word-break/word-break-keep-all-u002d.html
new file mode 100644
index 00000000000..df3ebb3f221
--- /dev/null
+++ b/tests/wpt/tests/css/css-text/word-break/word-break-keep-all-u002d.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-keep-all">
+<link rel="match" href="reference/word-break-keep-all-u002d-ref.html">
+<style>
+#container {
+ font-size: 20px;
+ width: 3ch;
+ word-break: keep-all;
+}
+</style>
+<div id="container">
+ <div>AB-CD-EF</div>
+ <div>12-34-56</div>
+</div>
diff --git a/tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-style.html b/tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-style.html
index 8e56f621714..7098270a392 100644
--- a/tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-style.html
+++ b/tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-style.html
@@ -14,16 +14,36 @@
'use strict';
runPropertyTests('column-rule-style', [
- { syntax: 'none' },
- { syntax: 'hidden' },
- { syntax: 'dotted' },
- { syntax: 'dashed' },
- { syntax: 'solid' },
- { syntax: 'double' },
- { syntax: 'groove' },
- { syntax: 'ridge' },
- { syntax: 'inset' },
- { syntax: 'outset' }
+ { syntax: 'none',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'hidden',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'dotted',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'dashed',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'solid',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'double',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'groove',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'ridge',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'inset',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ },
+ { syntax: 'outset',
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
+ }
]);
</script>
diff --git a/tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-width.html b/tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-width.html
index bd3c0ac8f43..8f09d1cb45a 100644
--- a/tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-width.html
+++ b/tests/wpt/tests/css/css-typed-om/the-stylepropertymap/properties/column-rule-width.html
@@ -13,30 +13,29 @@
<script>
'use strict';
-function assert_is_zero_px(result) {
- assert_style_value_equals(result, new CSSUnitValue(0, 'px'));
-}
-
runPropertyTests('column-rule-width', [
- // Computed value is 0 when column-rule-style is 'none'.
- // FIXME: Add separate test where column-rule-style is not 'none' or 'hidden'.
{
syntax: 'thin',
- computed: (_, result) => assert_is_zero_px(result)
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
},
{
syntax: 'medium',
- computed: (_, result) => assert_is_zero_px(result)
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
},
{
syntax: 'thick',
- computed: (_, result) => assert_is_zero_px(result)
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
},
{
syntax: '<length>',
specified: assert_is_equal_with_range_handling,
- computed: (_, result) => assert_is_zero_px(result)
+ computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
},
]);
+runUnsupportedPropertyTests('column-rule-width', [
+ 'thin', 'medium', 'thick', '2px', '3px',
+ '4px 5px', 'thin medium thick',
+]);
+
</script>
diff --git a/tests/wpt/tests/css/css-values/if-conditionals.html b/tests/wpt/tests/css/css-values/if-conditionals.html
index caead7864d5..f6d981798ae 100644
--- a/tests/wpt/tests/css/css-values/if-conditionals.html
+++ b/tests/wpt/tests/css/css-values/if-conditionals.html
@@ -37,6 +37,21 @@
inherits: true;
initial-value: 3;
}
+ @property --angle {
+ syntax: "<angle>";
+ inherits: true;
+ initial-value: 3deg;
+ }
+ @property --time {
+ syntax: "<time>";
+ inherits: true;
+ initial-value: 3s;
+ }
+ @property --resolution {
+ syntax: "<resolution>";
+ inherits: true;
+ initial-value: 3dpi;
+ }
div {
font-size: 30px;
}
@@ -511,6 +526,122 @@
[['--length', 'attr(data-foo type(<length>))']],
'false_value');
+ // style() queries with range syntax in the condition, literals on both sides of equation
+ test_if_with_custom_properties('if(style(10em > 3px): true_value; else: false_value)', [], 'true_value');
+ test_if_with_custom_properties('if(style(1em > 1px): true_value; else: false_value)', [], 'true_value');
+ test_if_with_custom_properties('if(style(7px > 3px): true_value; else: false_value)', [], 'true_value');
+ test_if_with_custom_properties('if(style(3px > 3px): true_value; else: false_value)', [], 'false_value');
+ test_if_with_custom_properties('if(style(3turn > 3deg): true_value; else: false_value)', [], 'true_value');
+ test_if_with_custom_properties('if(style(3turn <= 3deg): true_value; else: false_value)', [], 'false_value');
+ test_if_with_custom_properties('if(style(3% >= 3%): true_value; else: false_value)', [], 'true_value');
+ test_if_with_custom_properties('if(style(3s > 3ms): true_value; else: false_value)', [], 'true_value');
+ test_if_with_custom_properties('if(style(3dppx > 96dpi): true_value; else: false_value)', [], 'true_value');
+
+ // style() queries with range syntax in the condition, simple custom properties in the condition
+ test_if_with_custom_properties('if(style(--x <= 3): true_value; else: false_value)',
+ [['--x', '3']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--x >= --y): true_value; else: false_value)',
+ [['--x', '3'], ['--y', '3']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--length > 3px): true_value; else: false_value)',
+ [['--length', '11px']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--x > 3px): true_value; else: false_value)',
+ [['--x', '11px']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--number >= 3): true_value; else: false_value)',
+ [['--number', '3']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--x >= 3): true_value; else: false_value)',
+ [['--x', '3']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--percentage > 3%): true_value; else: false_value)',
+ [['--percentage', '5%']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--x > 3%): true_value; else: false_value)',
+ [['--x', '5%']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--angle < 1turn): true_value; else: false_value)',
+ [['--angle', '1deg']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--x < 1turn): true_value; else: false_value)',
+ [['--x', '1deg']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--time <= 1000ms): true_value; else: false_value)',
+ [['--time', '1s']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--x <= 1000ms): true_value; else: false_value)',
+ [['--x', '1s']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(3dppx > --resolution): true_value; else: false_value)',
+ [['--resolution', '96dpi']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(3dppx > --x): true_value; else: false_value)',
+ [['--x', '96dpi']],
+ 'true_value');
+
+ // style() queries with range syntax in the condition, invalid custom properties in the condition
+ test_if_with_custom_properties('if(style(--x + 1 >= --y): true_value; else: false_value)',
+ [['--x', '5'], ['--y', '3']],
+ 'false_value');
+ test_if_with_custom_properties('if(style(--x >= --y + 1): true_value; else: false_value)',
+ [['--x', '5'], ['--y', '3']],
+ 'false_value');
+ test_if_with_custom_properties('if(style(calc(--x + 1) >= --y): true_value; else: false_value)',
+ [['--x', '5'], ['--y', '3']],
+ 'false_value');
+ test_if_with_custom_properties('if(style(--x >= calc(--y + 1)): true_value; else: false_value)',
+ [['--x', '5'], ['--y', '3']],
+ 'false_value');
+
+ // style() queries with range syntax in the condition, custom properties with functions in the condition
+ test_if_with_custom_properties('if(style(--x >= calc(3px + 3px)): true_value; else: false_value)',
+ [['--x', '7px']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(calc(var(--x) + 1) >= var(--y)): true_value; else: false_value)',
+ [['--x', '5'], ['--y', '3']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(var(--x) >= --x): true_value; else: false_value)',
+ [['--x', '3']],
+ 'true_value');
+
+ // style() queries with range syntax in the condition, incompatible types in the range.
+ test_if_with_custom_properties('if(style(3px > 3): true_value; else: false_value)',
+ [],
+ 'false_value');
+ test_if_with_custom_properties('if(style(3em > 3deg): true_value; else: false_value)',
+ [],
+ 'false_value');
+ test_if_with_custom_properties('if(style(1px >= 1%) or style(1px <= 1%): true_value; else: false_value)',
+ [],
+ 'false_value');
+ test_if_with_custom_properties('if(style(--length > 3): true_value; else: false_value)',
+ [['--length', '11em']],
+ 'false_value');
+ test_if_with_custom_properties('if(style(--number > 3px): true_value; else: false_value)',
+ [['--number', '11']],
+ 'false_value');
+ test_if_with_custom_properties('if(style(--x >= 3): true_value; else: false_value)',
+ [['--x', '3px']],
+ 'false_value');
+ test_if_with_custom_properties(`if(style(--length >= 30px): true_value;
+ else: false_value)`,
+ [['--length', 'attr(data-foo type(<length>))']],
+ 'true_value');
+
+ // style() queries with range syntax in the condition, double range
+ test_if_with_custom_properties('if(style(10px <= 10px < 11px): true_value; else: false_value)', [], 'true_value');
+ test_if_with_custom_properties('if(style(3 < --x <= 5): true_value; else: false_value)',
+ [['--x', '5']],
+ 'true_value');
+ test_if_with_custom_properties('if(style(--x >= --y > --z): true_value; else: false_value)',
+ [['--x', '3'], ['--y', '3'], ['--z', '3']],
+ 'false_value');
+ test_if_with_custom_properties('if(style(--x >= --y > --z): true_value; else: false_value)',
+ [['--x', '3'], ['--y', '3'], ['--z', '1']],
+ 'true_value');
+
// media() queries in the condition
test_if(`if(media(max-width: 1px): true_value;
else: false_value)`,
diff --git a/tests/wpt/tests/css/css-values/tree-counting/sibling-function-container-query-invalidation.html b/tests/wpt/tests/css/css-values/tree-counting/sibling-function-container-query-invalidation.html
new file mode 100644
index 00000000000..c0d6d913af0
--- /dev/null
+++ b/tests/wpt/tests/css/css-values/tree-counting/sibling-function-container-query-invalidation.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<title>CSS Values and Units Test: sibling-index() and sibling-count() changes in container queries</title>
+<link rel="help" href="https://drafts.csswg.org/css-values-5/#tree-counting">
+<link rel="help" href="https://drafts.csswg.org/css-conditional-5/#container-features">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ @property --length {
+ syntax: "<length>";
+ initial-value: 0px;
+ inherits: false;
+ }
+ .container { container-type: inline-size; }
+ #c1 {
+ width: 100px;
+ --length: 100px;
+ }
+ #c2 {
+ width: 400px;
+ --length: 600px;
+ }
+ span {
+ --match-100: no;
+ --match-600: no;
+ }
+ @container (width = calc(100px * sibling-index())) {
+ span { background-color: green; }
+ }
+ @container (width = calc(200px * sibling-count())) {
+ span { color: lime; }
+ }
+ @container style(--length: calc(100px * sibling-index())) {
+ span { --match-100: yes; }
+ }
+ @container style(--length: calc(300px * sibling-count())) {
+ span { --match-600: yes; }
+ }
+</style>
+<div style="color:black">
+ <div id="rm1"></div>
+ <div id="rm2"></div>
+ <div id="c1" class="container">
+ <span id="t1"></span>
+ </div>
+ <div id="c2" class="container">
+ <span id="t2"></span>
+ </div>
+</div>
+<script>
+ test(() => {
+ assert_equals(getComputedStyle(t1).backgroundColor, "rgba(0, 0, 0, 0)");
+ assert_equals(getComputedStyle(t1).color, "rgb(0, 0, 0)");
+ }, "sibling-index() in @container width query initially not matching");
+
+ test(() => {
+ assert_equals(getComputedStyle(t1).backgroundColor, "rgba(0, 0, 0, 0)");
+ assert_equals(getComputedStyle(t1).color, "rgb(0, 0, 0)");
+ }, "sibling-count() in @container width query initially not matching");
+
+ test(() => {
+ assert_equals(getComputedStyle(t1).getPropertyValue("--match-100"), "no");
+ assert_equals(getComputedStyle(t1).getPropertyValue("--match-600"), "no");
+ }, "sibling-index() in @container style() query initially not matching");
+
+ test(() => {
+ assert_equals(getComputedStyle(t2).getPropertyValue("--match-100"), "no");
+ assert_equals(getComputedStyle(t2).getPropertyValue("--match-600"), "no");
+ }, "sibling-count() in @container style() query initially not matching");
+
+ rm1.remove();
+ rm2.remove();
+
+ test(() => {
+ assert_equals(getComputedStyle(t1).backgroundColor, "rgb(0, 128, 0)");
+ assert_equals(getComputedStyle(t1).color, "rgb(0, 0, 0)");
+ }, "sibling-index() in @container width query matching after removal");
+
+ test(() => {
+ assert_equals(getComputedStyle(t2).backgroundColor, "rgba(0, 0, 0, 0)");
+ assert_equals(getComputedStyle(t2).color, "rgb(0, 255, 0)");
+ }, "sibling-count() in @container width query matching after removal");
+
+ test(() => {
+ assert_equals(getComputedStyle(t1).getPropertyValue("--match-100"), "yes");
+ assert_equals(getComputedStyle(t1).getPropertyValue("--match-600"), "no");
+ }, "sibling-index() in @container style() query matching after removal");
+
+ test(() => {
+ assert_equals(getComputedStyle(t2).getPropertyValue("--match-100"), "no");
+ assert_equals(getComputedStyle(t2).getPropertyValue("--match-600"), "yes");
+ }, "sibling-count() in @container style() query matching after removal");
+</script>
diff --git a/tests/wpt/tests/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html b/tests/wpt/tests/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html
index 77af5434a1c..ac2ed1a8af1 100644
--- a/tests/wpt/tests/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html
+++ b/tests/wpt/tests/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic.html
@@ -13,6 +13,7 @@
@property --length { syntax: "<length>"; initial-value: 0px; inherits: false; }
@property --length-percentage { syntax: "<length-percentage>"; initial-value: 0px; inherits: false; }
@property --color { syntax: "<color>"; initial-value: black; inherits: false; }
+ @property --list { syntax: "<integer>+"; initial-value: 0; inherits: false; }
@keyframes --anim {
from {
@@ -25,6 +26,7 @@
--length: calc(sibling-index() * 7px);
--length-percentage: calc((sibling-index() * 8px) + (sibling-count() * 5%));
--color: color(srgb 0 calc(0.2 * sibling-index()) 0);
+ --list: 13 sibling-index();
}
to {
--time: 13s;
@@ -36,6 +38,7 @@
--length: 13px;
--length-percentage: calc(13px + 7%);
--color: red;
+ --list: 29 sibling-index();
}
}
#target {
@@ -75,6 +78,9 @@
test(() => {
assert_equals(getComputedStyle(target).getPropertyValue("--color"), "color(srgb 0 0.6 0)");
}, "Initially, the sibling-index() is 3 for --color");
+ test(() => {
+ assert_equals(getComputedStyle(target).getPropertyValue("--list"), "13 3");
+ }, "Initially, the sibling-index() is 3 for --list");
rm.remove();
@@ -105,5 +111,8 @@
test(() => {
assert_equals(getComputedStyle(target).getPropertyValue("--color"), "color(srgb 0 0.4 0)");
}, "Removing a preceding sibling of #target reduces the sibling-index() for --color");
+ test(() => {
+ assert_equals(getComputedStyle(target).getPropertyValue("--list"), "13 2");
+ }, "Removing a preceding sibling of #target reduces the sibling-index() for --list");
</script>
diff --git a/tests/wpt/tests/css/css-view-transitions/auto-name-from-id.html b/tests/wpt/tests/css/css-view-transitions/auto-name-from-id.html
index d3430c93a1d..20080d7623a 100644
--- a/tests/wpt/tests/css/css-view-transitions/auto-name-from-id.html
+++ b/tests/wpt/tests/css/css-view-transitions/auto-name-from-id.html
@@ -34,6 +34,12 @@ main.switch #item1 {
left: 100px;
}
+/* Make test fail if ID matches */
+::view-transition-group(item1),
+::view-transition-group(item2) {
+ border: 2px solid red;
+}
+
html::view-transition {
background: rebeccapurple;
}
diff --git a/tests/wpt/tests/css/css-view-transitions/auto-name-get-animations.html b/tests/wpt/tests/css/css-view-transitions/auto-name-get-animations.html
index 0442255542c..b684349a5f9 100644
--- a/tests/wpt/tests/css/css-view-transitions/auto-name-get-animations.html
+++ b/tests/wpt/tests/css/css-view-transitions/auto-name-get-animations.html
@@ -1,6 +1,6 @@
<!DOCTYPE html>
<html >
-<title>View transitions: generated names should not be visible from script</title>
+<title>View transitions: generated names should be prefixed with -ua- in script</title>
<link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@@ -57,12 +57,20 @@ main.switch .item1 {
}).ready;
const animations = document.documentElement.getAnimations({subtree: true});
const pseudos = Array.from(new Set(animations.map(a => a.effect.pseudoElement)));
+ const item1GeneratedName = pseudos[0].replace("::view-transition-group(", "").slice(0, -1);
+ const item2GeneratedName = pseudos[3].replace("::view-transition-group(", "").slice(0, -1);
+ assert_true(item1GeneratedName.startsWith("-ua-"), "Item 1 generated name starts with -ua-");
+ assert_true(item2GeneratedName.startsWith("-ua-"), "Item 2 generated name starts with -ua-");
assert_array_equals(pseudos,
[
- "::view-transition-group(match-element)",
- "::view-transition-new(match-element)",
- "::view-transition-old(match-element)"]);
- }, "Generated view-transition-names should not be reflected in script");
+ `::view-transition-group(${item1GeneratedName})`,
+ `::view-transition-old(${item1GeneratedName})`,
+ `::view-transition-new(${item1GeneratedName})`,
+ `::view-transition-group(${item2GeneratedName})`,
+ `::view-transition-old(${item2GeneratedName})`,
+ `::view-transition-new(${item2GeneratedName})`
+ ], "Generated names should start with -ua- and pseudo-elements should be in tree order");
+ }, "Generated view-transition-names should be prefixed with -ua- in script");
</script>
</body> \ No newline at end of file
diff --git a/tests/wpt/tests/css/css-view-transitions/inline-child-with-composited-filter-ref.html b/tests/wpt/tests/css/css-view-transitions/inline-child-with-composited-filter-ref.html
new file mode 100644
index 00000000000..9dd26f2c3b1
--- /dev/null
+++ b/tests/wpt/tests/css/css-view-transitions/inline-child-with-composited-filter-ref.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<title>View transitions: inline child with filter (ref)</title>
+<link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
+<link rel="author" href="mailto:vmpstr@chromium.org">
+<link rel="author" href="mailto:mattwoodrow@apple.com">
+
+<style>
+body { margin : 0; }
+#target {
+ width: 100px;
+ height: 100px;
+ background-color: grey;
+ overflow-clip-margin: 40px;
+ contain: paint;
+ view-transition-name: target;
+}
+
+#child {
+ position: relative;
+ left: 100px;
+ top: 100px;
+ color: lightgreen;
+ background-color: darkgreen;
+ filter: blur(30px);
+ transform: translateZ(0px);
+}
+</style>
+
+<div id="target">
+ <span id="child">INLINEBOX</span>
+</div>
diff --git a/tests/wpt/tests/css/css-view-transitions/inline-child-with-composited-filter.html b/tests/wpt/tests/css/css-view-transitions/inline-child-with-composited-filter.html
new file mode 100644
index 00000000000..36ba9803e1e
--- /dev/null
+++ b/tests/wpt/tests/css/css-view-transitions/inline-child-with-composited-filter.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: inline child with filter</title>
+<link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
+<link rel="author" href="mailto:vmpstr@chromium.org">
+<link rel="author" href="mailto:mattwoodrow@apple.com">
+<link rel="match" href="inline-child-with-filter-ref.html">
+<meta name=fuzzy content="maxDifference=0-2;totalPixels=0-2400">
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+body { margin : 0; }
+#target {
+ width: 100px;
+ height: 100px;
+ background-color: grey;
+ overflow-clip-margin: 40px;
+ contain: paint;
+ view-transition-name: target;
+}
+
+#child {
+ position: relative;
+ left: 100px;
+ top: 100px;
+ color: lightgreen;
+ background-color: darkgreen;
+ filter: blur(30px);
+ transform: translateZ(0px);
+}
+
+html::view-transition-group(root) { animation-duration: 300s; }
+html::view-transition-old(target) {
+ animation: unset;
+ opacity: 1;
+}
+html::view-transition-new(target) {
+ animation: unset;
+ opacity: 0;
+}
+</style>
+
+<div id="target">
+ <span id="child">INLINEBOX</span>
+</div>
+
+<script>
+failIfNot(document.startViewTransition, "Missing document.startViewTransition");
+
+async function runTest() {
+ let transition = document.startViewTransition(async () => {
+ document.getElementById("target").remove();
+ });
+ transition.ready.then(() => requestAnimationFrame(takeScreenshot));
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
diff --git a/tests/wpt/tests/css/css-view-transitions/inline-with-offset-from-containing-block.html b/tests/wpt/tests/css/css-view-transitions/inline-with-offset-from-containing-block.html
index 31f8449ff63..77fb0570966 100644
--- a/tests/wpt/tests/css/css-view-transitions/inline-with-offset-from-containing-block.html
+++ b/tests/wpt/tests/css/css-view-transitions/inline-with-offset-from-containing-block.html
@@ -4,7 +4,7 @@
<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/">
<link rel="author" href="mailto:khushalsagar@chromium.org">
<link rel="match" href="inline-with-offset-from-containing-block-ref.html">
-<meta name="fuzzy" content="maxDifference=0-255; totalPixels=0-1500">
+<meta name="fuzzy" content="maxDifference=0-255; totalPixels=0-1633">
<script src="/common/reftest-wait.js"></script>
<script src="/common/rendering-utils.js"></script>
diff --git a/tests/wpt/tests/css/css-view-transitions/navigation/resources/auto-name-from-id.html b/tests/wpt/tests/css/css-view-transitions/navigation/resources/auto-name-from-id.html
index 71ea52a273e..dc2cf8fd29b 100644
--- a/tests/wpt/tests/css/css-view-transitions/navigation/resources/auto-name-from-id.html
+++ b/tests/wpt/tests/css/css-view-transitions/navigation/resources/auto-name-from-id.html
@@ -29,6 +29,11 @@ html::view-transition-group(*) {
animation-timing-function: steps(2, start);
}
+/* Make test fail if ID matches */
+::view-transition-group(green) {
+ border: 2px solid red;
+}
+
#green {
background: green;
width: 100px;
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html b/tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html
index 83570762061..847058be2b4 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/nested-exit.tentative.html
@@ -15,6 +15,10 @@
animation-play-state: paused;
}
+ ::view-transition-group-children(*) {
+ background: inherit;
+ }
+
::view-transition-group(parent) {
background: green;
visibility: hidden;
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css b/tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css
index 20337ccce5f..d8f46179b40 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css
+++ b/tests/wpt/tests/css/css-view-transitions/nested/resources/compute-common.css
@@ -57,6 +57,9 @@ html.no-match::view-transition {
::view-transition-group(green) {
background: green;
}
+::view-transition-group-children(*) {
+ background: inherit;
+}
::view-transition-group(test) {
background: inherit;
}
diff --git a/tests/wpt/tests/css/css-view-transitions/nested/rounded-border-clipper.html b/tests/wpt/tests/css/css-view-transitions/nested/rounded-border-clipper.html
index 239bcdd791d..098e5566585 100644
--- a/tests/wpt/tests/css/css-view-transitions/nested/rounded-border-clipper.html
+++ b/tests/wpt/tests/css/css-view-transitions/nested/rounded-border-clipper.html
@@ -33,6 +33,9 @@
::view-transition-group(clipper) {
animation-play-state: paused;
+}
+
+::view-transition-group-children(clipper) {
overflow: clip;
border-radius: 20px;
}
diff --git a/tests/wpt/tests/css/css-view-transitions/new-content-captures-different-size.html b/tests/wpt/tests/css/css-view-transitions/new-content-captures-different-size.html
index eeb7347981d..0a754c651ff 100644
--- a/tests/wpt/tests/css/css-view-transitions/new-content-captures-different-size.html
+++ b/tests/wpt/tests/css/css-view-transitions/new-content-captures-different-size.html
@@ -5,7 +5,7 @@
<link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/">
<link rel="author" href="mailto:vmpstr@chromium.org">
<link rel="match" href="new-content-captures-different-size-ref.html">
-<meta name=fuzzy content="maxDifference=0-100; totalPixels=0-15000">
+<meta name=fuzzy content="maxDifference=0-100; totalPixels=0-15393">
<script src="/common/reftest-wait.js"></script>
<style>
html {
diff --git a/tests/wpt/tests/css/css-view-transitions/pseudo-with-classes-view-transition-group.html b/tests/wpt/tests/css/css-view-transitions/pseudo-with-classes-view-transition-group.html
index f9fe2022258..14717728b15 100644
--- a/tests/wpt/tests/css/css-view-transitions/pseudo-with-classes-view-transition-group.html
+++ b/tests/wpt/tests/css/css-view-transitions/pseudo-with-classes-view-transition-group.html
@@ -17,7 +17,10 @@
view-transition-class: cls;
}
-:root::view-transition-group(*) {
+:root::view-transition-group(*),
+:root::view-transition-image-pair(*),
+:root::view-transition-new(*),
+:root::view-transition-old(*) {
animation-play-state: paused;
}
diff --git a/tests/wpt/tests/css/css-view-transitions/scoped/crashtests/participating-scope.html b/tests/wpt/tests/css/css-view-transitions/scoped/crashtests/participating-scope.html
new file mode 100644
index 00000000000..26979e58458
--- /dev/null
+++ b/tests/wpt/tests/css/css-view-transitions/scoped/crashtests/participating-scope.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html class="test-wait">
+<head>
+<style>
+body { margin: 5px; }
+#scope { contain: strict; position: relative; z-index: 0;
+ width: 150px; height: 100px; border: 5px solid #ccc;
+ view-transition-name: container; }
+.item { width: 6rem; height: 4rem; margin: 10px; background: #def;
+ view-transition-name: a1; contain: strict; }
+::view-transition-group(*),
+::view-transition-old(*),
+::view-transition-new(*) { animation: unset; }
+</style>
+</head>
+<body>
+<div id="scope"><div class="item"></div></div>
+<script>
+onload = async () => {
+ await scope.startViewTransition().finished;
+ document.documentElement.classList.remove('test-wait');
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/tests/css/css-view-transitions/scoped/nested-scope-ref.html b/tests/wpt/tests/css/css-view-transitions/scoped/nested-scope-ref.html
index 804741cd6db..951c0928687 100644
--- a/tests/wpt/tests/css/css-view-transitions/scoped/nested-scope-ref.html
+++ b/tests/wpt/tests/css/css-view-transitions/scoped/nested-scope-ref.html
@@ -4,7 +4,7 @@
<style>
.box { position: relative; contain: strict; }
-#scopeA { background: #ddd;
+#scopeA { background: #ccc;
left: 0; top: 0; width: 300px; height: 300px; }
#partA { background: #4af;
left: 30px; top: 30px; width: 240px; height: 240px; }
diff --git a/tests/wpt/tests/css/css-view-transitions/scoped/nested-scope.html b/tests/wpt/tests/css/css-view-transitions/scoped/nested-scope.html
index 9fff44e5e73..b9cc25c3338 100644
--- a/tests/wpt/tests/css/css-view-transitions/scoped/nested-scope.html
+++ b/tests/wpt/tests/css/css-view-transitions/scoped/nested-scope.html
@@ -36,11 +36,22 @@
failIfNot(scopeA.startViewTransition, "Missing element.startViewTransition");
+// This test runs simultaneous transitions on two scopes, one inside the other.
+// It verifies that the inner and outer participants are both visible while both
+// transitions are in progress. (This entails rendering the inner transition
+// through the ::view-transition-new for the outer participant.)
async function runTest() {
await waitForCompositorReady();
await scopeB.startViewTransition().ready;
+
+ // Untag partB to avoid a collision when the outer transition looks for its
+ // participants. (We can stop doing this once we have contain: view-transition
+ // or similar.)
partB.classList.remove("tr");
- await scopeA.startViewTransition().ready;
+
+ await scopeA.startViewTransition(() => {
+ scopeA.style.background = "#ccc";
+ }).ready;
requestAnimationFrame(takeScreenshot);
}
onload = () => runTest();
diff --git a/tests/wpt/tests/css/css-viewport/zoom/height.html b/tests/wpt/tests/css/css-viewport/zoom/height.html
new file mode 100644
index 00000000000..f608765bcf1
--- /dev/null
+++ b/tests/wpt/tests/css/css-viewport/zoom/height.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>height:inherit applies zoom</title>
+<link rel="help" href="https://drafts.csswg.org/css-viewport/">
+<link rel="match" href="green-square-100px.html">
+<style>
+ div > div {
+ background-color: green;
+ }
+</style>
+<div style="height:50px">
+ <div style="zoom:2; width:50px; height:inherit;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-viewport/zoom/inherited-length.html b/tests/wpt/tests/css/css-viewport/zoom/inherited-length.html
index d83111a4352..571b533d5d6 100644
--- a/tests/wpt/tests/css/css-viewport/zoom/inherited-length.html
+++ b/tests/wpt/tests/css/css-viewport/zoom/inherited-length.html
@@ -10,6 +10,6 @@ div {
background-color: green;
}
</style>
-<div style="width: 100px; height: 100px;">
- <div style="zoom: 2; width: inherit;"></div>
+<div style="width: 50px; height: 50px;">
+ <div style="zoom: 2; width: inherit; height: inherit;"></div>
</div>
diff --git a/tests/wpt/tests/css/css-viewport/zoom/length-implicit-and-explicit-inheritance.html b/tests/wpt/tests/css/css-viewport/zoom/length-implicit-and-explicit-inheritance.html
new file mode 100644
index 00000000000..003c7b61c09
--- /dev/null
+++ b/tests/wpt/tests/css/css-viewport/zoom/length-implicit-and-explicit-inheritance.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<meta charset="utf-8">
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="author" href="https://mozilla.org" title="Mozilla">
+<link rel="help" href="https://drafts.csswg.org/css-viewport/#zoom-property">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div style="zoom: 2">
+ <div style="zoom: 2" id="parent">
+ <!-- effective zoom of 8, inherited zoom (4) times specified zoom (2) -->
+ <div style="zoom: 2" id="target"></div>
+ </div>
+</div>
+<script>
+ const kTestCases = [
+ // Explicitly inherited reset properties.
+ ["width", "100px", "inherit", "100px"],
+ ["height", "100px", "inherit", "100px"],
+ // Explicitly inherited properties.
+ ["word-spacing", "100px", "inherit", "100px"],
+ ["word-spacing", "100px", "unset", "100px"],
+ // Implicitly inherited properties.
+ ["word-spacing", "100px", "", "100px"],
+ ];
+
+ const parent = document.getElementById("parent");
+ const target = document.getElementById("target");
+ for (const [prop, parentValue, childValue, expected] of kTestCases) {
+ test(function(t) {
+ parent.style[prop] = parentValue;
+ target.style[prop] = childValue;
+ t.add_cleanup(function() {
+ parent.style[prop] = target.style[prop] = "";
+ });
+ assert_equals(getComputedStyle(target).getPropertyValue(prop), expected);
+ }, `${prop}: ${childValue} from ${parentValue}`);
+ }
+</script>
diff --git a/tests/wpt/tests/css/css-viewport/zoom/max-height.html b/tests/wpt/tests/css/css-viewport/zoom/max-height.html
new file mode 100644
index 00000000000..6a0dcd826e2
--- /dev/null
+++ b/tests/wpt/tests/css/css-viewport/zoom/max-height.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>max-height:inherit applies zoom</title>
+<link rel="help" href="https://drafts.csswg.org/css-viewport/">
+<link rel="match" href="green-square-100px.html">
+<style>
+ div > div {
+ background-color: green;
+ }
+</style>
+<div style="max-height:50px">
+ <div style="zoom:2; width:50px; height:200px; max-height:inherit;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-viewport/zoom/max-width.html b/tests/wpt/tests/css/css-viewport/zoom/max-width.html
new file mode 100644
index 00000000000..b6d4139e30a
--- /dev/null
+++ b/tests/wpt/tests/css/css-viewport/zoom/max-width.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>max-width:inherit applies zoom</title>
+<link rel="help" href="https://drafts.csswg.org/css-viewport/">
+<link rel="match" href="green-square-100px.html">
+<style>
+ div > div {
+ background-color: green;
+ }
+</style>
+<div style="max-width:50px">
+ <div style="zoom:2; max-width:inherit; height:50px; width:300px;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-viewport/zoom/min-height.html b/tests/wpt/tests/css/css-viewport/zoom/min-height.html
new file mode 100644
index 00000000000..31a47d92b21
--- /dev/null
+++ b/tests/wpt/tests/css/css-viewport/zoom/min-height.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>min-height:inherit applies zoom</title>
+<link rel="help" href="https://drafts.csswg.org/css-viewport/">
+<link rel="match" href="green-square-100px.html">
+<style>
+ div > div {
+ background-color: green;
+ }
+</style>
+<div style="min-height:50px">
+ <div style="zoom:2; width:50px; min-height:inherit;"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-viewport/zoom/min-width.html b/tests/wpt/tests/css/css-viewport/zoom/min-width.html
new file mode 100644
index 00000000000..bd1cda23d3a
--- /dev/null
+++ b/tests/wpt/tests/css/css-viewport/zoom/min-width.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<title>min-width:inherit applies zoom</title>
+<link rel="help" href="https://drafts.csswg.org/css-viewport/">
+<link rel="match" href="green-square-100px.html">
+<style>
+ div > div {
+ background-color: green;
+ }
+</style>
+<div style="min-width:50px">
+ <div style="zoom:2; min-width:inherit; height:50px; width:0px"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-writing-modes/orthogonal-cell-001-ref.html b/tests/wpt/tests/css/css-writing-modes/orthogonal-cell-001-ref.html
new file mode 100644
index 00000000000..f50121ef16d
--- /dev/null
+++ b/tests/wpt/tests/css/css-writing-modes/orthogonal-cell-001-ref.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+
+<title>CSS writing-mode reference</title>
+
+<style>
+table { margin: 10px; }
+td { background: green; padding: 10px 20px 30px 40px; }
+div { width: 20px; height: 40px; background: blue; }
+</style>
+
+<p>All five green squares should look the same, with a blue rectangle towards the upper right.</p>
+
+<table>
+ <td><div></div></td>
+</table>
+
+<table>
+ <td><div></div></td>
+</table>
+
+<table>
+ <td><div></div></td>
+</table>
+
+<table>
+ <td><div></div></td>
+</table>
+
+<table>
+ <td><div></div></td>
+</table>
diff --git a/tests/wpt/tests/css/css-writing-modes/orthogonal-cell-001.html b/tests/wpt/tests/css/css-writing-modes/orthogonal-cell-001.html
new file mode 100644
index 00000000000..12e996ac902
--- /dev/null
+++ b/tests/wpt/tests/css/css-writing-modes/orthogonal-cell-001.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+
+<title>CSS writing-mode test: orthogonal table cells</title>
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1959395">
+<link rel="match" href="orthogonal-cell-001-ref.html">
+
+<style>
+table { margin: 10px; }
+td { background: green; padding: 10px 20px 30px 40px; }
+div { width: 20px; height: 40px; background: blue; }
+.htb { writing-mode: horizontal-tb; }
+.vlr { writing-mode: vertical-lr; }
+.vrl { writing-mode: vertical-rl; }
+</style>
+
+<p>All five green squares should look the same, with a blue rectangle towards the upper right.</p>
+
+<table>
+ <td><div></div></td>
+</table>
+
+<!-- The different writing modes should not disrupt the table cell/row sizing. -->
+<table class=htb>
+ <td class=vlr><div></div></td>
+</table>
+
+<table class=htb>
+ <td class=vrl><div></div></td>
+</table>
+
+<table class=vlr>
+ <td class=htb><div></div></td>
+</table>
+
+<table class=vrl>
+ <td class=htb><div></div></td>
+</table>
diff --git a/tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html b/tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html
index 5fb7c7c333c..ff7d4a108c7 100644
--- a/tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html
+++ b/tests/wpt/tests/css/motion/animation/offset-path-interpolation-008.html
@@ -132,15 +132,15 @@
test_interpolation({
property: 'offset-path',
- from: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)',
- to: 'shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)'
+ from: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)',
+ to: 'shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px 20px cw rotate 270deg small, arc to 25% 20px of 10px 5px small cw)'
}, [
{at: -0.3, expect: 'shape(from 2% 2px, arc to 18% -12px of 7px 17px ccw small, arc by 12% -2px of 33px 33px rotate -42deg cw large , arc to 25% 20px of 10px 5px ccw small)'},
- {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)'},
+ {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)'},
{at: 0.3, expect: 'shape(from 8% 8px, arc to 12% -18px of 13px 23px ccw small, arc by 18% -8px of 27px 27px rotate 102deg cw large, arc to 25% 20px of 10px 5px cw small )'},
- {at: 0.5, expect: 'shape(from 10% 10px, arc to 10% -20px of 15px 25px ccw small, arc by 20% -10px of 25px rotate 150deg cw large, arc to 25% 20px of 10px 5px cw small)'},
- {at: 1, expect: 'shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px rotate 270deg cw small, arc to 25% 20px of 10px 5px cw small)'},
- {at: 1.5, expect: 'shape(from 20% 20px, arc to 0% -30px of 25px 35px ccw small, arc by 30% -20px of 15px rotate 390deg cw small, arc to 25% 20px of 10px 5px cw small)'},
+ {at: 0.5, expect: 'shape(from 10% 10px, arc to 10% -20px of 15px 25px ccw small, arc by 20% -10px of 25px 25px rotate 150deg cw large, arc to 25% 20px of 10px 5px cw small)'},
+ {at: 1, expect: 'shape(from 15% 15px, arc to 5% -25px of 20px 30px, arc by 25% -15px of 20px 20px rotate 270deg cw small, arc to 25% 20px of 10px 5px cw small)'},
+ {at: 1.5, expect: 'shape(from 20% 20px, arc to 0% -30px of 25px 35px ccw small, arc by 30% -20px of 15px 15px rotate 390deg cw small, arc to 25% 20px of 10px 5px cw small)'},
]);
test_interpolation({
@@ -235,28 +235,28 @@
test_interpolation({
property: 'offset-path',
- from: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)',
+ from: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)',
to: 'path("M 15 15 A 20,30 0 0,0 5,-25 a 20,20 270 0,1 25,-15 A 10,5 0 0,0 25 20")',
}, [
- {at: -0.3, expect: 'shape(from calc(6.5% - 4.5px) 2px, arc to calc(19.5% - 1.5px) -12px of 7px 17px, arc by calc(19.5% - 7.5px) -2px of 33px cw large rotate -42deg, arc to calc(32.5% - 7.5px) 20px of 10px 5px)'},
- {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px cw rotate 30deg large, arc to 25% 20px of 10px 5px small)'},
- {at: 0.3, expect: 'shape(from calc(3.5% + 4.5px) 8px, arc to calc(10.5% + 1.5px) -18px of 13px 23px, arc by calc(10.5% + 7.5px) -8px of 27px cw large rotate 102deg, arc to calc(17.5% + 7.5px) 20px of 10px 5px)'},
- {at: 0.5, expect: 'shape(from calc(2.5% + 7.5px) 10px, arc to calc(7.5% + 2.5px) -20px of 15px 25px, arc by calc(7.5% + 12.5px) -10px of 25px cw large rotate 150deg, arc to calc(12.5% + 12.5px) 20px of 10px 5px)'},
- {at: 1, expect: 'shape(from calc(0% + 15px) 15px, arc to calc(0% + 5px) -25px of 20px 30px, arc by calc(0% + 25px) -15px of 20px cw rotate 270deg, arc to calc(0% + 25px) 20px of 10px 5px)'},
- {at: 1.5, expect: 'shape(from calc(-2.5% + 22.5px) 20px, arc to calc(-7.5% + 7.5px) -30px of 25px 35px, arc by calc(-7.5% + 37.5px) -20px of 15px cw rotate 390deg, arc to calc(-12.5% + 37.5px) 20px of 10px 5px)'},
+ {at: -0.3, expect: 'shape(from calc(6.5% - 4.5px) 2px, arc to calc(19.5% - 1.5px) -12px of 7px 17px, arc by calc(19.5% - 7.5px) -2px of 33px 33px cw large rotate -42deg, arc to calc(32.5% - 7.5px) 20px of 10px 5px)'},
+ {at: 0, expect: 'shape(from 5% 5px, arc to 15% -15px of 10px 20px, arc by 15% -5px of 30px 30px cw large rotate 30deg, arc to 25% 20px of 10px 5px)'},
+ {at: 0.3, expect: 'shape(from calc(3.5% + 4.5px) 8px, arc to calc(10.5% + 1.5px) -18px of 13px 23px, arc by calc(10.5% + 7.5px) -8px of 27px 27px cw large rotate 102deg, arc to calc(17.5% + 7.5px) 20px of 10px 5px)'},
+ {at: 0.5, expect: 'shape(from calc(2.5% + 7.5px) 10px, arc to calc(7.5% + 2.5px) -20px of 15px 25px, arc by calc(7.5% + 12.5px) -10px of 25px 25px cw large rotate 150deg, arc to calc(12.5% + 12.5px) 20px of 10px 5px)'},
+ {at: 1, expect: 'shape(from calc(0% + 15px) 15px, arc to calc(0% + 5px) -25px of 20px 30px, arc by calc(0% + 25px) -15px of 20px 20px cw rotate 270deg, arc to calc(0% + 25px) 20px of 10px 5px)'},
+ {at: 1.5, expect: 'shape(from calc(-2.5% + 22.5px) 20px, arc to calc(-7.5% + 7.5px) -30px of 25px 35px, arc by calc(-7.5% + 37.5px) -20px of 15px 15px cw rotate 390deg, arc to calc(-12.5% + 37.5px) 20px of 10px 5px)'},
]);
test_interpolation({
property: 'offset-path',
from: 'path("M 5 5 A 10,20 0 0,0 15,-15 a 30,30 30 1,1 15,-5 A 10,5 0 0,0 25 20")',
- to: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)'
+ to: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px 20px cw rotate 270deg small, arc to 25px 20px of 10px 5px small cw)'
}, [
- {at: -0.3, expect: 'shape(from 2px 2px, arc to 18px -12px of 7px 17px ccw small, arc by 12px -2px of 33px 33px rotate -42deg cw large, arc to 25px 20px of 10px 5px ccw small)'},
- {at: 0, expect: 'shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px small)'},
+ {at: -0.3, expect: 'shape(from 2px 2px, arc to 18px -12px of 7px 17px ccw small, arc by 12px -2px of 33px 33px rotate -42deg cw large, arc to 25px 20px of 10px 5px ccw small)'},
+ {at: 0, expect: 'shape(from 5px 5px, arc to 15px -15px of 10px 20px, arc by 15px -5px of 30px 30px cw rotate 30deg large, arc to 25px 20px of 10px 5px small)'},
{at: 0.3, expect: 'shape(from 8px 8px, arc to 12px -18px of 13px 23px ccw small, arc by 18px -8px of 27px 27px rotate 102deg cw large, arc to 25px 20px of 10px 5px cw small)'},
- {at: 0.5, expect: 'shape(from 10px 10px, arc to 10px -20px of 15px 25px ccw small, arc by 20px -10px of 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw small)'},
- {at: 1, expect: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px rotate 270deg cw small, arc to 25px 20px of 10px 5px cw small)'},
- {at: 1.5, expect: 'shape(from 20px 20px, arc to 0px -30px of 25px 35px ccw small, arc by 30px -20px of 15px rotate 390deg cw small, arc to 25px 20px of 10px 5px cw small)'},
+ {at: 0.5, expect: 'shape(from 10px 10px, arc to 10px -20px of 15px 25px ccw small, arc by 20px -10px of 25px 25px rotate 150deg cw large, arc to 25px 20px of 10px 5px cw small)'},
+ {at: 1, expect: 'shape(from 15px 15px, arc to 5px -25px of 20px 30px, arc by 25px -15px of 20px 20px rotate 270deg cw small, arc to 25px 20px of 10px 5px cw small)'},
+ {at: 1.5, expect: 'shape(from 20px 20px, arc to 0px -30px of 25px 35px ccw small, arc by 30px -20px of 15px 15px rotate 390deg cw small, arc to 25px 20px of 10px 5px cw small)'},
]);
</script>
diff --git a/tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html b/tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html
index c9ecc3acb06..6ced1ad395a 100644
--- a/tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html
+++ b/tests/wpt/tests/css/motion/parsing/offset-path-shape-computed.html
@@ -27,8 +27,8 @@ test_computed_value("offset-path", "shape(from 10px 10px, curve to 50px 20px wit
test_computed_value("offset-path", "shape(from 10px 10px, curve to 50px 20px with 10rem 1px / 20% 1em)", "shape(from 10px 10px, curve to 50px 20px with 160px 1px / 20% 16px)");
test_computed_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px with 10rem 1%)", "shape(from 10px 10px, smooth to 50px 20px with 160px 1%)");
test_computed_value("offset-path", "shape(from 10px 10px, smooth to 50px 3pt)", "shape(from 10px 10px, smooth to 50px 4px)");
-test_computed_value("offset-path", "shape(from 10px 10px, arc to 50px 3pt of 10px 10px)", "shape(from 10px 10px, arc to 50px 4px of 10px)");
-test_computed_value("offset-path", "shape(from 10px 10px, arc to 50px 3pt of 10px 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 4px of 10px)");
+test_computed_value("offset-path", "shape(from 10px 10px, arc to 50px 3pt of 10px 10px)", "shape(from 10px 10px, arc to 50px 4px of 10px 10px)");
+test_computed_value("offset-path", "shape(from 10px 10px, arc to 50px 3pt of 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 4px of 10px)");
test_computed_value("offset-path", "shape(from 10% 1rem, arc to 50px 3pt of 20% cw large rotate 25deg)", "shape(from 10% 16px, arc to 50px 4px of 20% cw large rotate 25deg)");
</script>
</body>
diff --git a/tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html b/tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html
index 013cea2c821..4a3d9f16915 100644
--- a/tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html
+++ b/tests/wpt/tests/css/motion/parsing/offset-path-shape-parsing.html
@@ -28,8 +28,8 @@ test_valid_value("offset-path", "shape(from 10px 10px, curve to 50px 20px with 1
test_valid_value("offset-path", "shape(from 10px 10px, curve by 50px 20px with 10rem 1px / 20vh 1ch)");
test_valid_value("offset-path", "shape(from 10px 10px, smooth to 50px 20px with 10rem 1%)");
test_valid_value("offset-path", "shape(from 10px 10px, smooth to 50px 1pt)");
-test_valid_value("offset-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)", "shape(from 10px 10px, arc to 50px 1pt of 10px)");
-test_valid_value("offset-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 1pt of 10px)");
+test_valid_value("offset-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)");
+test_valid_value("offset-path", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px small rotate 0deg)", "shape(from 10px 10px, arc to 50px 1pt of 10px 10px)");
test_valid_value("offset-path", "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)", "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)");
test_valid_value("offset-path", "shape(evenodd from 0px 0px, line to 10px 10px)");
test_valid_value("offset-path", "shape(nonzero from 0px 0px, line to 10px 10px)", "shape(from 0px 0px, line to 10px 10px)");
diff --git a/tests/wpt/tests/css/visited-nested-ref.html b/tests/wpt/tests/css/selectors/visited-nested-ref.html
index 22f4ecf0d7b..22f4ecf0d7b 100644
--- a/tests/wpt/tests/css/visited-nested-ref.html
+++ b/tests/wpt/tests/css/selectors/visited-nested-ref.html
diff --git a/tests/wpt/tests/css/visited-nested.html b/tests/wpt/tests/css/selectors/visited-nested.html
index 57220446c86..57220446c86 100644
--- a/tests/wpt/tests/css/visited-nested.html
+++ b/tests/wpt/tests/css/selectors/visited-nested.html
diff --git a/tests/wpt/tests/domxpath/fn-id.html b/tests/wpt/tests/domxpath/fn-id.html
new file mode 100644
index 00000000000..617ff7216d8
--- /dev/null
+++ b/tests/wpt/tests/domxpath/fn-id.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<link rel="help" href="https://www.w3.org/TR/1999/REC-xpath-19991116/#function-id">
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+// Test the id() function with various scenarios
+function testIdFunction(expression, xmlString, expectedIds) {
+ let doc = (new DOMParser()).parseFromString(xmlString, 'text/xml');
+ test(() => {
+ let result = doc.evaluate(expression, doc.documentElement, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ assert_equals(result.resultType, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE);
+ let actualIds = [];
+ for (let i = 0; i < result.snapshotLength; i++) {
+ actualIds.push(result.snapshotItem(i).getAttribute('id'));
+ }
+ actualIds.sort();
+ expectedIds.sort();
+ assert_array_equals(actualIds, expectedIds, `Expected IDs ${expectedIds}, got ${actualIds}`);
+ }, `${expression}: ${doc.documentElement.outerHTML}`);
+}
+
+// Test single ID
+testIdFunction('id("test1")', '<root><div id="test1">Match</div></root>', ['test1']);
+
+// Test multiple IDs in space-separated string
+testIdFunction('id("test1 test2")', '<root><div id="test1">First</div><div id="test2">Second</div></root>', ['test1', 'test2']);
+
+// Test non-existent ID
+testIdFunction('id("nonexistent")', '<root><div id="test1">No match</div></root>', []);
+
+// Test mixed case IDs (should be case-sensitive)
+testIdFunction('id("Test1")', '<root><div id="test1">No match</div></root>', []);
+
+// Test multiple elements with same ID (should return all)
+testIdFunction('id("duplicate")', '<root><div id="duplicate">First</div><div id="duplicate">Second</div></root>', ['duplicate', 'duplicate']);
+
+// Test IDs with special characters
+testIdFunction('id("test-1")', '<root><div id="test-1">Match</div></root>', ['test-1']);
+
+// Test empty ID string
+testIdFunction('id("")', '<root><div id="">Empty ID</div></root>', []);
+
+// Test whitespace in ID string
+testIdFunction('id(" test1 ")', '<root><div id="test1">Match</div></root>', ['test1']);
+</script>
+</body>
diff --git a/tests/wpt/tests/editing/crashtests/indent-outdent-after-closing-editable-dialog-element.html b/tests/wpt/tests/editing/crashtests/indent-outdent-after-closing-editable-dialog-element.html
deleted file mode 100644
index 7f73de048d7..00000000000
--- a/tests/wpt/tests/editing/crashtests/indent-outdent-after-closing-editable-dialog-element.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<html class="reftest-wait">
-<script>
-var eventCount = 0;
-document.addEventListener("DOMContentLoaded", () => {
- const dialog = document.querySelector("dialog");
- const object = document.createElement("object");
- object.addEventListener("DOMSubtreeModified", () => {
- dialog.show();
- dialog.focus();
- document.execCommand("selectAll");
- dialog.close();
- setTimeout(() => {
- document.execCommand("selectAll");
- document.execCommand("strikeThrough");
- document.execCommand("indent");
- document.execCommand("outdent");
- eventCount--;
- if (!eventCount) {
- document.documentElement.removeAttribute("class");
- }
- });
- eventCount++;
- });
- object.setAttribute("role", "x"); // Run DOMSubtreeModified
- object.setAttribute("role", "y"); // Run DOMSubtreeModified
- document.execCommand("forwardDelete");
- document.execCommand("justifyRight");
-})
-</script>
-<dialog id="a" contenteditable="true">a</dialog>
-</html> \ No newline at end of file
diff --git a/tests/wpt/tests/editing/other/move-inserted-node-from-DOMNodeInserted-during-exec-command-insertHTML.html b/tests/wpt/tests/editing/other/move-inserted-node-from-DOMNodeInserted-during-exec-command-insertHTML.html
deleted file mode 100644
index 41e012a62e9..00000000000
--- a/tests/wpt/tests/editing/other/move-inserted-node-from-DOMNodeInserted-during-exec-command-insertHTML.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!doctype html>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div contenteditable>
-<p id="p1"><br></p>
-<p id="p2"></p>
-</div>
-<script>
-"use strict";
-let editor = document.querySelector("[contenteditable]");
-let p1 = document.getElementById("p1");
-let p2 = document.getElementById("p2");
-p1.addEventListener("DOMNodeInserted", event => {
- if (event.target.localName === "i") {
- p2.appendChild(event.target);
- }
-});
-document.getSelection().collapse(p1, 0);
-document.execCommand("insertHTML", false,
- "<b>bold1</b><i>italic1</i><b>bold2</b><i>italic2</i>");
-test(function () {
- assert_in_array(p1.innerHTML, ["<b>bold1</b><b>bold2</b><br>", "<b>bold1</b><b>bold2</b>"]);
-}, "First <p> element should have only <b> elements");
-test(function () {
- assert_equals(p2.innerHTML, "<i>italic1</i><i>italic2</i>");
-}, "Second <p> element should have only <i> elements");
-</script> \ No newline at end of file
diff --git a/tests/wpt/tests/fetch/content-encoding/br/bad-br-body.https.any.js b/tests/wpt/tests/fetch/content-encoding/br/bad-br-body.https.any.js
index 43ea90a336c..af5df674da6 100644
--- a/tests/wpt/tests/fetch/content-encoding/br/bad-br-body.https.any.js
+++ b/tests/wpt/tests/fetch/content-encoding/br/bad-br-body.https.any.js
@@ -2,6 +2,11 @@
[
"arrayBuffer",
+ "blob",
+ "bytes",
+ "formData",
+ "json",
+ "text"
].forEach(method => {
promise_test(t => {
return fetch("resources/bad-br-body.py").then(res => {
diff --git a/tests/wpt/tests/fetch/content-encoding/gzip/bad-gzip-body.any.js b/tests/wpt/tests/fetch/content-encoding/gzip/bad-gzip-body.any.js
index 17bc1261a3f..77a183f408b 100644
--- a/tests/wpt/tests/fetch/content-encoding/gzip/bad-gzip-body.any.js
+++ b/tests/wpt/tests/fetch/content-encoding/gzip/bad-gzip-body.any.js
@@ -9,6 +9,7 @@ promise_test((test) => {
[
"arrayBuffer",
"blob",
+ "bytes",
"formData",
"json",
"text"
diff --git a/tests/wpt/tests/fetch/content-encoding/zstd/bad-zstd-body.https.any.js b/tests/wpt/tests/fetch/content-encoding/zstd/bad-zstd-body.https.any.js
index 3f32e4dfba7..c59980c2c6f 100644
--- a/tests/wpt/tests/fetch/content-encoding/zstd/bad-zstd-body.https.any.js
+++ b/tests/wpt/tests/fetch/content-encoding/zstd/bad-zstd-body.https.any.js
@@ -9,6 +9,7 @@ promise_test((test) => {
[
"arrayBuffer",
"blob",
+ "bytes",
"formData",
"json",
"text"
diff --git a/tests/wpt/tests/fetch/local-network-access/resources/fetch-private-http.html b/tests/wpt/tests/fetch/local-network-access/resources/fetch-private-http.html
index e372d90b26a..517629b758e 100644
--- a/tests/wpt/tests/fetch/local-network-access/resources/fetch-private-http.html
+++ b/tests/wpt/tests/fetch/local-network-access/resources/fetch-private-http.html
@@ -23,8 +23,7 @@ Promise.resolve().then(async () => {
};
const targetUrl = resolveTargetUrl(target);
- // TODO(crbug.com/406991278): rename address space for LNA spec
- fetch(targetUrl, {targetAddressSpace: 'private'})
+ fetch(targetUrl, {targetAddressSpace: 'local'})
.then(async function(response) {
const body = await response.text();
const message = {
diff --git a/tests/wpt/tests/fetch/local-network-access/resources/fetch-public-http-wrong-address-space.html b/tests/wpt/tests/fetch/local-network-access/resources/fetch-public-http-wrong-address-space.html
index 1d149d00cb3..c15a87ff7b9 100644
--- a/tests/wpt/tests/fetch/local-network-access/resources/fetch-public-http-wrong-address-space.html
+++ b/tests/wpt/tests/fetch/local-network-access/resources/fetch-public-http-wrong-address-space.html
@@ -25,8 +25,7 @@ Promise.resolve().then(async () => {
};
const targetUrl = resolveTargetUrl(target);
- // TODO(crbug.com/406991278): rename address space for LNA spec
- fetch(targetUrl, {targetAddressSpace: 'private'})
+ fetch(targetUrl, {targetAddressSpace: 'local'})
.then(async function(response) {
const body = await response.text();
const message = {
diff --git a/tests/wpt/tests/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js b/tests/wpt/tests/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js
deleted file mode 100644
index dbae5193b5c..00000000000
--- a/tests/wpt/tests/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js
+++ /dev/null
@@ -1,278 +0,0 @@
-// META: script=/common/utils.js
-// META: script=resources/support.sub.js
-// META: timeout=long
-//
-// Spec: https://wicg.github.io/private-network-access
-//
-// These tests verify that secure contexts can fetch non-secure subresources
-// from more private address spaces, avoiding mixed context checks, as long as
-// they specify a valid `targetAddressSpace` fetch option that matches the
-// target server's address space.
-
-setup(() => {
- // Making sure we are in a secure context, as expected.
- assert_true(window.isSecureContext);
-});
-
-// Given `addressSpace`, returns the other three possible IP address spaces.
-function otherAddressSpaces(addressSpace) {
- switch (addressSpace) {
- case "local": return ["unknown", "private", "public"];
- case "private": return ["unknown", "local", "public"];
- case "public": return ["unknown", "local", "private"];
- }
-}
-
-// Generates tests of `targetAddressSpace` for the given (source, target)
-// address space pair, expecting fetches to succeed iff `targetAddressSpace` is
-// correct.
-//
-// Scenarios exercised:
-//
-// - cors mode:
-// - missing targetAddressSpace option
-// - incorrect targetAddressSpace option (x3, see `otherAddressSpaces()`)
-// - failed preflight
-// - success
-// - success with PUT method (non-"simple" request)
-// - no-cors mode:
-// - success
-//
-function makeTests({ source, target }) {
- const sourceServer = Server.get("https", source);
- const targetServer = Server.get("http", target);
-
- const makeTest = ({
- fetchOptions,
- targetBehavior,
- name,
- expected
- }) => {
- promise_test_parallel(t => fetchTest(t, {
- source: { server: sourceServer },
- target: {
- server: targetServer,
- behavior: targetBehavior,
- },
- fetchOptions,
- expected,
- }), `${sourceServer.name} to ${targetServer.name}: ${name}.`);
- };
-
- makeTest({
- name: "missing targetAddressSpace",
- targetBehavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- expected: FetchTestResult.FAILURE,
- });
-
- const correctAddressSpace = targetServer.addressSpace;
-
- for (const targetAddressSpace of otherAddressSpaces(correctAddressSpace)) {
- makeTest({
- name: `wrong targetAddressSpace "${targetAddressSpace}"`,
- targetBehavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- fetchOptions: { targetAddressSpace },
- expected: FetchTestResult.FAILURE,
- });
- }
-
- makeTest({
- name: "failed preflight",
- targetBehavior: {
- preflight: PreflightBehavior.failure(),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- fetchOptions: { targetAddressSpace: correctAddressSpace },
- expected: FetchTestResult.FAILURE,
- });
-
- makeTest({
- name: "success",
- targetBehavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- fetchOptions: { targetAddressSpace: correctAddressSpace },
- expected: FetchTestResult.SUCCESS,
- });
-
- makeTest({
- name: "PUT success",
- targetBehavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- fetchOptions: {
- targetAddressSpace: correctAddressSpace,
- method: "PUT",
- },
- expected: FetchTestResult.SUCCESS,
- });
-
- makeTest({
- name: "no-cors success",
- targetBehavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- fetchOptions: {
- targetAddressSpace: correctAddressSpace,
- mode: "no-cors",
- },
- expected: FetchTestResult.OPAQUE,
- });
-}
-
-// Generates tests for the given (source, target) address space pair expecting
-// that `targetAddressSpace` cannot be used to bypass mixed content.
-//
-// Scenarios exercised:
-//
-// - wrong `targetAddressSpace` (x3, see `otherAddressSpaces()`)
-// - correct `targetAddressSpace`
-//
-function makeNoBypassTests({ source, target }) {
- const sourceServer = Server.get("https", source);
- const targetServer = Server.get("http", target);
-
- const prefix = `${sourceServer.name} to ${targetServer.name}: `;
-
- const correctAddressSpace = targetServer.addressSpace;
- for (const targetAddressSpace of otherAddressSpaces(correctAddressSpace)) {
- promise_test_parallel(t => fetchTest(t, {
- source: { server: sourceServer },
- target: {
- server: targetServer,
- behavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- },
- fetchOptions: { targetAddressSpace },
- expected: FetchTestResult.FAILURE,
- }), prefix + `wrong targetAddressSpace "${targetAddressSpace}".`);
- }
-
- promise_test_parallel(t => fetchTest(t, {
- source: { server: sourceServer },
- target: {
- server: targetServer,
- behavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- },
- fetchOptions: { targetAddressSpace: correctAddressSpace },
- expected: FetchTestResult.FAILURE,
- }), prefix + 'not a private network request.');
-}
-
-// Source: local secure context.
-//
-// Fetches to the local and private address spaces cannot use
-// `targetAddressSpace` to bypass mixed content, as they are not otherwise
-// blocked by Private Network Access.
-
-makeNoBypassTests({ source: "local", target: "local" });
-makeNoBypassTests({ source: "local", target: "private" });
-makeNoBypassTests({ source: "local", target: "public" });
-
-// Source: private secure context.
-//
-// Fetches to the local address space requires the right `targetAddressSpace`
-// option, as well as a successful preflight response carrying a PNA-specific
-// header.
-//
-// Fetches to the private address space cannot use `targetAddressSpace` to
-// bypass mixed content, as they are not otherwise blocked by Private Network
-// Access.
-
-makeTests({ source: "private", target: "local" });
-
-makeNoBypassTests({ source: "private", target: "private" });
-makeNoBypassTests({ source: "private", target: "public" });
-
-// Source: public secure context.
-//
-// Fetches to the local and private address spaces require the right
-// `targetAddressSpace` option, as well as a successful preflight response
-// carrying a PNA-specific header.
-
-makeTests({ source: "public", target: "local" });
-makeTests({ source: "public", target: "private" });
-
-makeNoBypassTests({ source: "public", target: "public" });
-
-// These tests verify that documents fetched from the `local` address space yet
-// carrying the `treat-as-public-address` CSP directive are treated as if they
-// had been fetched from the `public` address space.
-
-promise_test_parallel(t => fetchTest(t, {
- source: {
- server: Server.HTTPS_LOCAL,
- treatAsPublic: true,
- },
- target: {
- server: Server.HTTP_LOCAL,
- behavior: {
- preflight: PreflightBehavior.optionalSuccess(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- },
- fetchOptions: { targetAddressSpace: "private" },
- expected: FetchTestResult.FAILURE,
-}), 'https-treat-as-public to http-local: wrong targetAddressSpace "private".');
-
-promise_test_parallel(t => fetchTest(t, {
- source: {
- server: Server.HTTPS_LOCAL,
- treatAsPublic: true,
- },
- target: {
- server: Server.HTTP_LOCAL,
- behavior: {
- preflight: PreflightBehavior.optionalSuccess(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- },
- fetchOptions: { targetAddressSpace: "local" },
- expected: FetchTestResult.SUCCESS,
-}), "https-treat-as-public to http-local: success.");
-
-promise_test_parallel(t => fetchTest(t, {
- source: {
- server: Server.HTTPS_LOCAL,
- treatAsPublic: true,
- },
- target: {
- server: Server.HTTP_PRIVATE,
- behavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- },
- fetchOptions: { targetAddressSpace: "local" },
- expected: FetchTestResult.FAILURE,
-}), 'https-treat-as-public to http-private: wrong targetAddressSpace "local".');
-
-promise_test_parallel(t => fetchTest(t, {
- source: {
- server: Server.HTTPS_LOCAL,
- treatAsPublic: true,
- },
- target: {
- server: Server.HTTP_PRIVATE,
- behavior: {
- preflight: PreflightBehavior.success(token()),
- response: ResponseBehavior.allowCrossOrigin(),
- },
- },
- fetchOptions: { targetAddressSpace: "private" },
- expected: FetchTestResult.SUCCESS,
-}), "https-treat-as-public to http-private: success.");
diff --git a/tests/wpt/tests/fetch/private-network-access/window-open-existing.tentative.https.window.js b/tests/wpt/tests/fetch/private-network-access/window-open-existing.tentative.https.window.js
deleted file mode 100644
index 6a2a624fc80..00000000000
--- a/tests/wpt/tests/fetch/private-network-access/window-open-existing.tentative.https.window.js
+++ /dev/null
@@ -1,209 +0,0 @@
-// META: script=/common/subset-tests-by-key.js
-// META: script=/common/dispatcher/dispatcher.js
-// META: script=/common/utils.js
-// META: script=resources/support.sub.js
-// META: timeout=long
-// META: variant=?include=from-local
-// META: variant=?include=from-private
-// META: variant=?include=from-public
-// META: variant=?include=from-treat-as-public
-//
-// These tests verify that secure contexts can navigate to less-public address
-// spaces via window.open to an existing window iff the target server responds
-// affirmatively to preflight requests.
-
-setup(() => {
- assert_true(window.isSecureContext);
-});
-
-// Source: secure local context.
-//
-// All fetches unaffected by Private Network Access.
-
-subsetTestByKey(
- 'from-local', promise_test_parallel,
- t => windowOpenExistingTest(t, {
- source: {server: Server.HTTPS_LOCAL},
- target: {server: Server.HTTPS_LOCAL},
- expected: NavigationTestResult.SUCCESS,
- }),
- 'local to local: no preflight required.');
-
-subsetTestByKey(
- 'from-local', promise_test_parallel,
- t => windowOpenExistingTest(t, {
- source: {server: Server.HTTPS_LOCAL},
- target: {server: Server.HTTPS_PRIVATE},
- expected: NavigationTestResult.SUCCESS,
- }),
- 'local to private: no preflight required.');
-
-subsetTestByKey(
- 'from-local', promise_test_parallel,
- t => windowOpenExistingTest(t, {
- source: {server: Server.HTTPS_LOCAL},
- target: {server: Server.HTTPS_PUBLIC},
- expected: NavigationTestResult.SUCCESS,
- }),
- 'local to public: no preflight required.');
-
-// Generates tests of preflight behavior for a single (source, target) pair.
-//
-// Scenarios:
-//
-// - preflight response has non-2xx HTTP code
-// - preflight response is missing CORS headers
-// - preflight response is missing the PNA-specific `Access-Control` header
-// - success
-//
-function makePreflightTests({
- key,
- sourceName,
- sourceServer,
- sourceTreatAsPublic,
- targetName,
- targetServer,
-}) {
- const prefix =
- `${sourceName} to ${targetName}: `;
-
- const source = {
- server: sourceServer,
- treatAsPublic: sourceTreatAsPublic,
- };
-
- promise_test_parallel(t => windowOpenExistingTest(t, {
- source,
- target: {
- server: targetServer,
- behavior: { preflight: PreflightBehavior.failure() },
- },
- expected: NavigationTestResult.FAILURE,
- }), prefix + "failed preflight.");
-
- promise_test_parallel(t => windowOpenExistingTest(t, {
- source,
- target: {
- server: targetServer,
- behavior: { preflight: PreflightBehavior.noCorsHeader(token()) },
- },
- expected: NavigationTestResult.FAILURE,
- }), prefix + "missing CORS headers.");
-
- promise_test_parallel(t => windowOpenExistingTest(t, {
- source,
- target: {
- server: targetServer,
- behavior: { preflight: PreflightBehavior.noPnaHeader(token()) },
- },
- expected: NavigationTestResult.FAILURE,
- }), prefix + "missing PNA header.");
-
- promise_test_parallel(t => windowOpenExistingTest(t, {
- source,
- target: {
- server: targetServer,
- behavior: { preflight: PreflightBehavior.navigation(token()) },
- },
- expected: NavigationTestResult.SUCCESS,
- }), prefix + "success.");
-}
-
-// Source: private secure context.
-//
-// Navigating to the local address space require a successful preflight response
-// carrying a PNA-specific header.
-
-subsetTestByKey('from-private', makePreflightTests, {
- sourceServer: Server.HTTPS_PRIVATE,
- sourceName: 'private',
- targetServer: Server.HTTPS_LOCAL,
- targetName: 'local',
-});
-
-subsetTestByKey(
- 'from-private', promise_test_parallel,
- t => windowOpenExistingTest(t, {
- source: {server: Server.HTTPS_PRIVATE},
- target: {server: Server.HTTPS_PRIVATE},
- expected: NavigationTestResult.SUCCESS,
- }),
- 'private to private: no preflight required.');
-
-subsetTestByKey(
- 'from-private', promise_test_parallel,
- t => windowOpenExistingTest(t, {
- source: {server: Server.HTTPS_PRIVATE},
- target: {server: Server.HTTPS_PUBLIC},
- expected: NavigationTestResult.SUCCESS,
- }),
- 'private to public: no preflight required.');
-
-// Source: public secure context.
-//
-// Navigating to the local and private address spaces require a successful
-// preflight response carrying a PNA-specific header.
-
-subsetTestByKey('from-public', makePreflightTests, {
- sourceServer: Server.HTTPS_PUBLIC,
- sourceName: "public",
- targetServer: Server.HTTPS_LOCAL,
- targetName: "local",
-});
-
-subsetTestByKey('from-public', makePreflightTests, {
- sourceServer: Server.HTTPS_PUBLIC,
- sourceName: "public",
- targetServer: Server.HTTPS_PRIVATE,
- targetName: "private",
-});
-
-subsetTestByKey(
- 'from-public', promise_test_parallel,
- t => windowOpenExistingTest(t, {
- source: {server: Server.HTTPS_PUBLIC},
- target: {server: Server.HTTPS_PUBLIC},
- expected: NavigationTestResult.SUCCESS,
- }),
- 'public to public: no preflight required.');
-
-// The following tests verify that `CSP: treat-as-public-address` makes
-// documents behave as if they had been served from a public IP address.
-
-subsetTestByKey('from-treat-as-public', makePreflightTests, {
- sourceServer: Server.HTTPS_LOCAL,
- sourceTreatAsPublic: true,
- sourceName: "treat-as-public-address",
- targetServer: Server.OTHER_HTTPS_LOCAL,
- targetName: "local",
-});
-
-subsetTestByKey("from-treat-as-public", promise_test_parallel,
- t => windowOpenExistingTest(t, {
- source: {
- server: Server.HTTPS_LOCAL,
- treatAsPublic: true,
- },
- target: {server: Server.HTTPS_LOCAL},
- expected: NavigationTestResult.SUCCESS,
- }),
- 'treat-as-public-address to local (same-origin): no preflight required.');
-
-subsetTestByKey('from-treat-as-public', makePreflightTests, {
- sourceServer: Server.HTTPS_LOCAL,
- sourceTreatAsPublic: true,
- sourceName: 'treat-as-public-address',
- targetServer: Server.HTTPS_PRIVATE,
- targetName: 'private',
-});
-
-subsetTestByKey("from-treat-as-public", promise_test_parallel,
- t => windowOpenExistingTest(t, {
- source: {
- server: Server.HTTPS_LOCAL,
- treatAsPublic: true,
- },
- target: {server: Server.HTTPS_PUBLIC},
- expected: NavigationTestResult.SUCCESS,
- }),
- 'treat-as-public-address to public: no preflight required.');
diff --git a/tests/wpt/tests/focus/focus-contenteditable-element-in-iframe-scroll-into-view.html b/tests/wpt/tests/focus/focus-contenteditable-element-in-iframe-scroll-into-view.html
new file mode 100644
index 00000000000..1c03382201e
--- /dev/null
+++ b/tests/wpt/tests/focus/focus-contenteditable-element-in-iframe-scroll-into-view.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8>
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<title>focus contenteditable element in iframe scroll into view</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style>
+
+iframe {
+ position: absolute;
+ left: 250vw;
+}
+
+.spacer {
+ width: 100vw;
+ height: 250vh;
+}
+
+</style>
+</head>
+<body>
+ <div id="focusable-1" class="editor" contenteditable="true">focusable 1</div>
+ <div class="spacer"></div>
+ <iframe srcdoc="<div id='focusable-2' contenteditable='true'>focusable 2</div>"></iframe>
+ <div class="spacer"></div>
+</body>
+<script>
+
+function waitForLoad(w) {
+ return new Promise(resolve => w.addEventListener('load', resolve));
+}
+
+function waitForFrame() {
+ return new Promise(resolve => {
+ requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
+ });
+}
+
+promise_test(async (t) => {
+ await waitForLoad(window);
+ const focusable_1 = document.getElementById("focusable-1");
+ const iframeDocument = document.querySelector("iframe").contentDocument;
+ const focusable_2 = iframeDocument.getElementById("focusable-2");
+
+ focusable_1.focus();
+ focusable_2.focus();
+ await waitForFrame();
+ const firstScrollX = window.scrollX;
+ const firstScrollY = window.scrollY;
+
+ assert_greater_than(firstScrollX, window.innerWidth, "scroll X is greater than window.innerWidth");
+ assert_greater_than(firstScrollY, window.innerHeight, "scroll Y is greater than window.innerHeight");
+
+ window.scroll(0, 0);
+ assert_equals(window.scrollX, 0, "scroll X is reset to 0");
+ assert_equals(window.scrollY, 0, "scroll Y is reset to 0");
+
+ focusable_1.focus();
+ focusable_2.focus();
+ await waitForFrame();
+ const secondScrollX = window.scrollX;
+ const secondScrollY = window.scrollY;
+
+ // Ensure that both scroll positions are within +/- 1
+ assert_approx_equals(firstScrollX, secondScrollX, 1.0,
+ "scroll X is within +/- 1 of a element in an iframe");
+ assert_approx_equals(firstScrollY, secondScrollY, 1.0,
+ "scroll Y is within +/- 1 of a element in an iframe");
+}, "Check contenteditable element in an iframe scroll into view on second focusing");
+
+</script>
+</html>
diff --git a/tests/wpt/tests/html/editing/dnd/events/ua-shadow-contents-manual.html b/tests/wpt/tests/html/editing/dnd/events/ua-shadow-contents-manual.html
new file mode 100644
index 00000000000..23908ca9274
--- /dev/null
+++ b/tests/wpt/tests/html/editing/dnd/events/ua-shadow-contents-manual.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<meta charset="utf-8">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<body draggable="true" style="padding:20px">
+Drag this input down quickly. Try multiple times. No errors should be reported.<br>
+<input type=color>
+
+<script>
+document.body.addEventListener('dragenter', (e) => {
+ let target = e.relatedTarget;
+ while (target) {
+ assert_false(target instanceof ShadowRoot,'Drag events should not expose UA shadow roots');
+ // This console log can also cause DevTools crashes, so this is explicitly
+ // left in on purpose:
+ console.log(target);
+ target = target.parentNode;
+ }
+});
+</script>
diff --git a/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-ref.html b/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-ref.html
new file mode 100644
index 00000000000..03a21eb4573
--- /dev/null
+++ b/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <style>
+ #foo {
+ height: 50px;
+ box-sizing: border-box;
+ }
+ #bar {
+ border-bottom-width: 0px;
+ box-sizing: border-box;
+ }
+ </style>
+</head>
+<body>
+ <hr id="foo">
+ <hr id="bar">
+</body>
+</html>
+
diff --git a/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade-ref.html b/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade-ref.html
new file mode 100644
index 00000000000..d6300e250d9
--- /dev/null
+++ b/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <style>
+ hr {
+ border-width: 25px;
+ }
+ </style>
+</head>
+<body>
+ <hr color="black">
+ <hr color="totally-not-a-color">
+ <hr noshade>
+ <hr color="black" noshade>
+</body>
+</html>
+
diff --git a/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade.html b/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade.html
new file mode 100644
index 00000000000..db1d583934e
--- /dev/null
+++ b/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#the-hr-element-2" />
+<title>hr elements: Tests behaviour of a size attribute with color/noshade attributes present</title>
+<link rel="author" title="Simon Wülker" href="mailto:simon.wuelker@arcor.de">
+<link rel="match" href="/html/rendering/non-replaced-elements/the-hr-element-0/size-with-color-or-noshade-ref.html">
+<meta name="assert" content="This checks that the size attribute of a hr element changes the border widths when color/noshade attributes are present">
+<body>
+ <hr size=50 color="black">
+ <hr size=50 color="totally-not-a-color">
+ <hr size=50 noshade>
+ <hr size=50 color="black" noshade>
+</body>
+</html>
+
diff --git a/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size.html b/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size.html
new file mode 100644
index 00000000000..2162131b853
--- /dev/null
+++ b/tests/wpt/tests/html/rendering/non-replaced-elements/the-hr-element-0/size.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#the-hr-element-2" />
+<title>hr elements: Tests behaviour of a size attribute without color/noshade attributes</title>
+<link rel="author" title="Simon Wülker" href="mailto:simon.wuelker@arcor.de">
+<link rel="match" href="/html/rendering/non-replaced-elements/the-hr-element-0/size-ref.html">
+<meta name="assert" content="This checks that the size attribute of a hr element changes its height.">
+<body>
+ <hr size=50>
+ <hr size=1>
+</body>
+</html>
+
diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-path-changes-svg.tentative.html b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-path-changes-svg.tentative.html
index 1bc53a1f18e..3ef59c37a85 100644
--- a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-path-changes-svg.tentative.html
+++ b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-path-changes-svg.tentative.html
@@ -13,25 +13,25 @@
// -------------------
promise_test(function(t) {
var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');
- img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.png");
+ img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.png?image-decode-path-changes-1");
var promise = img.decode();
- img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.svg");
+ img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.svg?image-decode-path-changes-1");
return promise_rejects_dom(t, "EncodingError", promise);
}, document.title + " xlink:href changes fail decode.");
promise_test(function(t) {
var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');
- img.setAttribute('href', "/images/green.png");
+ img.setAttribute('href', "/images/green.png?image-decode-path-changes-2");
var promise = img.decode();
- img.setAttribute('href', "/images/green.svg");
+ img.setAttribute('href', "/images/green.svg?image-decode-path-changes-2");
return promise_rejects_dom(t, "EncodingError", promise);
}, document.title + " href changes fail decode.");
promise_test(function(t) {
var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');
- img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.png");
+ img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.png?image-decode-path-changes-3");
var first_promise = img.decode();
- img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.svg");
+ img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.svg?image-decode-path-changes-3");
var second_promise = img.decode();
assert_not_equals(first_promise, second_promise);
return Promise.all([
@@ -42,9 +42,9 @@ promise_test(function(t) {
promise_test(function(t) {
var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');
- img.setAttribute('href', "/images/green.png");
+ img.setAttribute('href', "/images/green.png?image-decode-path-changes-4");
var first_promise = img.decode();
- img.setAttribute('href', "/images/green.svg");
+ img.setAttribute('href', "/images/green.svg?image-decode-path-changes-4");
var second_promise = img.decode();
assert_not_equals(first_promise, second_promise);
return Promise.all([
@@ -55,9 +55,9 @@ promise_test(function(t) {
promise_test(function(t) {
var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');
- img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.png");
+ img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.png?image-decode-path-changes-5");
var first_promise = img.decode();
- img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/non/existent/path.png");
+ img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/non/existent/path.png?image-decode-path-changes-5");
var second_promise = img.decode();
assert_not_equals(first_promise, second_promise);
return Promise.all([
@@ -68,9 +68,9 @@ promise_test(function(t) {
promise_test(function(t) {
var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');
- img.setAttribute('href', "/images/green.png");
+ img.setAttribute('href', "/images/green.png?image-decode-path-changes-6");
var first_promise = img.decode();
- img.setAttribute('href', "/non/existent/path.png");
+ img.setAttribute('href', "/non/existent/path.png?image-decode-path-changes-6");
var second_promise = img.decode();
assert_not_equals(first_promise, second_promise);
return Promise.all([
diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach-svg.tentative.html b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach-svg.tentative.html
index 0fc49e60360..fbc7143ecee 100644
--- a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach-svg.tentative.html
+++ b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/decode/image-decode-with-quick-attach-svg.tentative.html
@@ -9,9 +9,11 @@
<script>
"use strict";
+let png = "/images/green.png?image-decode-with-quick-attach-" + Math.random();
+
promise_test(function() {
var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');
- img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', "/images/green.png");
+ img.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', png);
const promise = img.decode().then(function(arg) {
assert_equals(arg, undefined);
});
diff --git a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html
index df9eb374b5a..ae6fa0e4328 100644
--- a/tests/wpt/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html
+++ b/tests/wpt/tests/html/semantics/embedded-content/the-img-element/naturalWidth-naturalHeight-unavailable.tentative.html
@@ -1,4 +1,5 @@
<!doctype html>
+<head>
<meta charset="utf-8">
<title>HTMLImageElement naturalWidth/naturalHeight behavior for SVG that lacks at least one natural dimension</title>
<!-- Note: this test asserts a different expectation from what the HTML spec
@@ -6,7 +7,11 @@
behavior doesn't appear to be web-compatible for some of the cases here,
and issue https://github.com/whatwg/html/issues/11287 is filed on
addresing that. In the meantime, this test is named with ".tentative" to
- indicate that it's not authoritative. -->
+ indicate that it's not authoritative. After the spec change is accepted,
+ we can remove the neighboring naturalWidth-naturalHeight.html test which
+ asserts the prior spec text's expectations, since this test covers the
+ same ground but with its expectations set according to the
+ soon-to-be-updated spec text. -->
<link rel="help" href="https://github.com/whatwg/html/issues/11287">
<link rel="help" href="https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-naturalwidth-dev">
<link rel="help" href="https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-width">
@@ -15,7 +20,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
-.scroller {
+#scroller {
/* We wrap all the test content in a scroller so that it doesn't push
* the textual test-results too far out of view.
*/
@@ -24,7 +29,7 @@
width: max-content;
overflow: scroll;
}
-.container {
+#containingBlock {
/* There are a few SVG images here that size so that their margin-box fills
* their containing block width. We define a specific size here so that we
* can then check for it (minus the margins) in the "data-width" attribute.
@@ -35,13 +40,24 @@ img {
/* This styling is just cosmetic, to help visualize the images. */
border: 5px solid teal;
margin: 5px;
- vertical-align: top;
display: block;
- width: max-content;
}
</style>
-<div class="scroller">
- <div class="container">
+<!-- We specify the img elements in a <template> and then clone them for
+ testing, so that we can dynamically generate and test several variants
+ of each img. -->
+<template id="imgTemplates">
+<!-- For each img element:
+ * The "data-natural-{width,height}" attributes represent the expected
+ values of the img element's "naturalWidth" and "naturalHeight" IDL
+ attributes. This test implicitly expects the "width" and "height" IDL
+ attributes to have those same expected values; but in cases where that's
+ not correct, we provide the actual expected value in the
+ "data-{width,height}" attributes (as distinguished from
+ data-natural-{width,height}).
+ * The "title" attribute is a description of the scenario being tested, and
+ it must be unique to satisfy the test harness requirements. -->
+
<!-- FIRST PART OF TEST: No viewBox. Just a missing (or edge-casey, i.e.
negative or percent-valued) values, for the width and height attrs on the
root svg element in a SVG image. -->
@@ -163,18 +179,37 @@ img {
<img src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='-5' height='-5' viewBox='0 0 600 200'></svg>"
title="SVG image, with natural width and height being negative, and aspect ratio from viewBox"
data-natural-width="0" data-natural-height="0">
+</template>
+</head>
+<body>
+<div id="scroller">
+ <div id="containingBlock">
+ </div>
</div>
-</div>
+<!-- We generate and append all of the tested <img> elements while we're inside
+ the <body>, so that all of the <img> elements' "load" events will block
+ the window onload event: -->
<script>
setup({explicit_done:true});
+// Clone and append a copy of the contents of imgTemplates, for testing:
+let clone = imgTemplates.content.cloneNode("true");
+containingBlock.appendChild(clone);
+
+// After all the img elements have loaded (indicated by the window load event),
+// we run the various tests:
onload = function() {
Array.from(document.images).forEach(img => {
test(function() {
+ // We expect naturalWidth to match the provided data-natural-width
+ // (and similar for 'height').
const expectedNaturalWidth = parseFloat(img.dataset.naturalWidth);
const expectedNaturalHeight = parseFloat(img.dataset.naturalHeight);
assert_equals(img.naturalWidth, expectedNaturalWidth, 'naturalWidth');
assert_equals(img.naturalHeight, expectedNaturalHeight, 'naturalHeight');
+ // If 'data-width' is provided, then we expect img.width to match it.
+ // Otherwise we expect img.width to match the 'data-natural-width'.
+ // (And similar for 'height'.)
const expectedWidth = 'width' in img.dataset ?
parseFloat(img.dataset.width) : expectedNaturalWidth;
const expectedHeight = 'height' in img.dataset ?
@@ -187,3 +222,4 @@ onload = function() {
done();
};
</script>
+</body>
diff --git a/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-highlight-crash.html b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-highlight-crash.html
new file mode 100644
index 00000000000..a45120a2459
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/forms/the-select-element/customizable-select/select-highlight-crash.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<link rel=help href="https://issues.chromium.org/issues/419167530">
+
+<style>
+ @container (width) {
+ div::highlight(custom-highlight) {
+ --foo: bar;
+ }
+ }
+</style>
+
+<select>
+ <div style="container-type:inline-size"></div>
+</select>
diff --git a/tests/wpt/tests/html/semantics/permission-element/negative-offset-and-margin.tentative.html b/tests/wpt/tests/html/semantics/permission-element/negative-offset-and-margin.tentative.html
deleted file mode 100644
index 0b3d8dc9881..00000000000
--- a/tests/wpt/tests/html/semantics/permission-element/negative-offset-and-margin.tentative.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<link rel="help" href="https://github.com/WICG/PEPC/blob/main/explainer.md#locking-the-pepc-style">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<body>
-<!--The permission element should not allow setting negative outline-offset or margins under 4px.
--->
-<style>
- #id1 {
- outline-offset: -50px;
- margin-top: 3px;
- margin-left: -50px;
- margin-bottom: 0px;
- margin-right: -50px;
- }
- #id2 {
- outline-offset: 50px;
- margin-top: 50px;
- margin-left: 50px;
- margin-bottom: 50px;
- margin-right: 50px;
- }
-
- /* These various expressions all result in a negative value when calculated */
- #id3 {
- outline-offset: min(-50px, 50px);
- margin-top: min(10%, -50px);
- margin-left: clamp(-100px, 1vw, -50px);
- margin-bottom: 1% - 10000px;
- margin-right: max(min(-1em, 10em), -5%);
- }
-</style>
-
-
-<permission id="id1" type="geolocation"></permission>
-<permission id="id2" type="camera"></permission>
-<permission id="id3" type="microphone"></permission>
-
-<script>
- test(function(){
- var el_with_negatives = document.getElementById("id1");
- assert_equals(getComputedStyle(el_with_negatives).outlineOffset, "0px", "outline-offset");
- assert_equals(getComputedStyle(el_with_negatives).marginLeft, "4px", "margin-left");
- assert_equals(getComputedStyle(el_with_negatives).marginRight, "4px", "margin-right");
- assert_equals(getComputedStyle(el_with_negatives).marginTop, "4px", "margin-top");
- assert_equals(getComputedStyle(el_with_negatives).marginBottom, "4px", "margin-bottom");
- }, "Negative margins/offset should be changed to 4px");
-
- test(function(){
- var el_with_positives = document.getElementById("id2");
- assert_equals(getComputedStyle(el_with_positives).outlineOffset, "50px", "outline-offset");
- assert_equals(getComputedStyle(el_with_positives).marginLeft, "50px", "margin-left");
- assert_equals(getComputedStyle(el_with_positives).marginRight, "50px", "margin-right");
- assert_equals(getComputedStyle(el_with_positives).marginTop, "50px", "margin-top");
- assert_equals(getComputedStyle(el_with_positives).marginBottom, "50px", "margin-bottom");
- }, "Positive margins/offset are unaffected");
-
- test(function(){
- var el_with_negative_expr = document.getElementById("id3");
- assert_equals(getComputedStyle(el_with_negative_expr).outlineOffset, "0px", "outline-offset");
- assert_equals(getComputedStyle(el_with_negative_expr).marginLeft, "4px", "margin-left");
- assert_equals(getComputedStyle(el_with_negative_expr).marginRight, "4px", "margin-right");
- assert_equals(getComputedStyle(el_with_negative_expr).marginTop, "4px", "margin-top");
- assert_equals(getComputedStyle(el_with_negative_expr).marginBottom, "4px", "margin-bottom");
- }, "Expressions margins/offset should always return at least 4px");
-</script>
-</body> \ No newline at end of file
diff --git a/tests/wpt/tests/html/semantics/permission-element/negative-offset.tentative.html b/tests/wpt/tests/html/semantics/permission-element/negative-offset.tentative.html
new file mode 100644
index 00000000000..c1424ad9cc8
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/permission-element/negative-offset.tentative.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<link rel="help" href="https://github.com/WICG/PEPC/blob/main/explainer.md#locking-the-pepc-style">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<!--The permission element should not allow setting negative outline-offset.
+-->
+<style>
+ #id1 {
+ outline-offset: -50px;
+ }
+ #id2 {
+ outline-offset: 50px;
+ }
+
+ /* These various expressions all result in a negative value when calculated */
+ #id3 {
+ outline-offset: min(-50px, 50px);
+ }
+ #id4 {
+ outline-offset: min(10%, -50px);
+ }
+ #id5 {
+ outline-offset: clamp(-100px, 1vw, -50px);
+ }
+ #id6 {
+ outline-offset: 1% - 10000px;
+ }
+ #id7 {
+ outline-offset: max(min(-1em, 10em), -5%);
+ }
+</style>
+
+<permission id="id1" type="geolocation"></permission>
+<permission id="id2" type="camera"></permission>
+<permission id="id3" type="microphone"></permission>
+<permission id="id4" type="camera"></permission>
+<permission id="id5" type="geolocation"></permission>
+<permission id="id6" type="microphone"></permission>
+<permission id="id7" type="camera microphone"></permission>
+
+<script>
+ test(function(){
+ var el_with_negatives = document.getElementById("id1");
+ assert_equals(getComputedStyle(el_with_negatives).outlineOffset, "0px", "outline-offset");
+ }, "Negative offset should be changed to 0px");
+
+ test(function(){
+ var el_with_positives = document.getElementById("id2");
+ assert_equals(getComputedStyle(el_with_positives).outlineOffset, "50px", "outline-offset");
+ }, "Positive offset are unaffected");
+
+ test(function(){
+ var el_with_negative_expr = document.getElementById("id3");
+ assert_equals(getComputedStyle(el_with_negative_expr).outlineOffset, "0px", "outline-offset");
+ }, "Expressions offset min(-50px, 50px) should return at least 0px");
+
+ test(function(){
+ var el_with_negative_expr = document.getElementById("id4");
+ assert_equals(getComputedStyle(el_with_negative_expr).outlineOffset, "0px", "outline-offset");
+ }, "Expressions offset outline-offset: min(10%, -50px) should return at least 0px");
+
+ test(function(){
+ var el_with_negative_expr = document.getElementById("id5");
+ assert_equals(getComputedStyle(el_with_negative_expr).outlineOffset, "0px", "outline-offset");
+ }, "Expressions offset clamp(-100px, 1vw, -50px) should return at least 0px");
+
+ test(function(){
+ var el_with_negative_expr = document.getElementById("id6");
+ assert_equals(getComputedStyle(el_with_negative_expr).outlineOffset, "0px", "outline-offset");
+ }, "Expressions offset 1% - 10000px should return at least 0px");
+
+ test(function(){
+ var el_with_negative_expr = document.getElementById("id7");
+ assert_equals(getComputedStyle(el_with_negative_expr).outlineOffset, "0px", "outline-offset");
+ }, "Expressions offset max(min(-1em, 10em), -5%) should return at least 0px");
+</script>
+</body> \ No newline at end of file
diff --git a/tests/wpt/tests/html/semantics/permission-element/no-focus.tentative.html b/tests/wpt/tests/html/semantics/permission-element/no-focus.tentative.html
index 96467885183..1bf29634605 100644
--- a/tests/wpt/tests/html/semantics/permission-element/no-focus.tentative.html
+++ b/tests/wpt/tests/html/semantics/permission-element/no-focus.tentative.html
@@ -18,35 +18,34 @@
<script>
promise_test(async() => {
+ invalid_permission_element.focus();
+ assert_equals(document.activeElement, invalid_permission_element,
+ "Invalid permission element should be focusable");
+
+ focusable_span.focus();
valid_permission_element.focus();
- assert_equals(document.activeElement, document.body,
- "Permission element should not be focused. Instead the parent element gets focus.");
+ assert_equals(document.activeElement, focusable_span,
+ "Permission element should not be focused.");
+ focusable_span.focus();
+ await test_driver.bless('Focus with user activation', () => {
+ valid_permission_element.focus();
+ });
+ assert_equals(document.activeElement, valid_permission_element,
+ "Focus is allowed with user activation");
+
+ focusable_span.focus();
actions = new test_driver.Actions()
.pointerMove(1, 1, {origin: valid_permission_element})
.pointerDown()
.addTick();
await actions.send();
-
assert_equals(document.activeElement, valid_permission_element,
- "Users can still focus the element");
+ "Users can focus the element");
focusable_span.focus();
assert_equals(document.activeElement, focusable_span,
- "Other element should be focused");
-
- invalid_permission_element.focus();
- assert_equals(document.activeElement, focusable_span,
- "Invalid permission element should not be focused");
-
- actions = new test_driver.Actions()
- .pointerMove(1, 1, {origin: invalid_permission_element})
- .pointerDown()
- .addTick();
- await actions.send();
-
- assert_equals(document.activeElement, invalid_permission_element,
- "Permission elements with an invalid-type can be focused like any other HTML element");
-}, "Permission element is not focusable by script");
+ "Other element should be focused");
+}, "Permission element is not focusable by script without user activation");
</script>
</body> \ No newline at end of file
diff --git a/tests/wpt/tests/html/semantics/permission-element/permission-icon/icon-hidden-reftest.html b/tests/wpt/tests/html/semantics/permission-element/permission-icon/icon-hidden-reftest.html
new file mode 100644
index 00000000000..79055da1bad
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/permission-element/permission-icon/icon-hidden-reftest.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<title>The icon of the location permission element should not be visibe if it is set to display:none</title>
+<!-- TODO: Update the link to the permission icon spec -->
+<link rel="help" href="https://github.com/WICG/PEPC/blob/main/explainer.md">
+<link rel="mismatch" href="standard-location-permission-element-ref.html">
+<style>
+ ::permission-icon {
+ display: none;
+ }
+</style>
+<permission id="geolocation" type="geolocation"/>
diff --git a/tests/wpt/tests/html/semantics/permission-element/permission-icon/icon-unique-per-type-reftest.html b/tests/wpt/tests/html/semantics/permission-element/permission-icon/icon-unique-per-type-reftest.html
new file mode 100644
index 00000000000..d51b1c4d398
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/permission-element/permission-icon/icon-unique-per-type-reftest.html
@@ -0,0 +1,6 @@
+<!doctype html>
+<title>The camera permission element icon should be different to the location permission element</title>
+<!-- TODO: Update the link to the permission icon spec -->
+<link rel="help" href="https://github.com/WICG/PEPC/blob/main/explainer.md">
+<link rel="mismatch" href="standard-location-permission-element-ref.html">
+<permission id="camera" type="camera"/>
diff --git a/tests/wpt/tests/html/semantics/permission-element/permission-icon/standard-location-permission-element-ref.html b/tests/wpt/tests/html/semantics/permission-element/permission-icon/standard-location-permission-element-ref.html
new file mode 100644
index 00000000000..15ffe751c51
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/permission-element/permission-icon/standard-location-permission-element-ref.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>A standard permission element of type location, without any non-default styling</title>
+<permission id="geolocation" type="geolocation"/>
diff --git a/tests/wpt/tests/html/semantics/popovers/popover-root-crash.html b/tests/wpt/tests/html/semantics/popovers/popover-root-crash.html
new file mode 100644
index 00000000000..86498607730
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/popovers/popover-root-crash.html
@@ -0,0 +1,7 @@
+<!doctype html>
+<script>
+ window.addEventListener("load", async () => {
+ document.documentElement.popover = "manual"
+ document.documentElement.togglePopover(true)
+ })
+</script>
diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/042.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/042.html
deleted file mode 100644
index df3a2f88f29..00000000000
--- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/042.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html><head>
- <title> scheduler: DOM mutation events when adding scripts: DOMNodeInserted </title>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="testlib/testlib.js"></script>
-</head>
-<body>
-
- <div id="log">FAILED (This TC requires JavaScript enabled)</div>
-
- <script>log('inline script #1');
- document.addEventListener( 'DOMNodeInserted', function(){ log('DOMNodeInserted'); }, false );
- testlib.addScript('log(\'head script #1\')', {}, document.getElementsByTagName('head')[0], false);
- log('end script #1');
- </script>
-
- <script type="text/javascript">
- log( 'inline script #2' );
- var t = async_test()
-
- function test() {
- assert_array_equals(eventOrder, ['inline script #1', 'head script #1', 'DOMNodeInserted', 'end script #1', 'inline script #2']);
- t.done();
- }
- onload = t.step_func(test)
- </script>
-
-</body></html>
diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/043.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/043.html
deleted file mode 100644
index bcfd90cba47..00000000000
--- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/043.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html><head>
- <title> scheduler: DOM mutation events when adding external scripts: DOMNodeInserted </title>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="testlib/testlib.js"></script>
-</head>
-<body>
-
- <div id="log">FAILED (This TC requires JavaScript enabled)</div>
-
- <script>log('inline script #1');
- document.addEventListener( 'DOMNodeInserted', function(){ log('DOMNodeInserted'); }, false );
- testlib.addScript('', { src: 'scripts/include-1.js' }, document.getElementsByTagName('head')[0], false);
- log('end script #1');
- </script>
-
- <script type="text/javascript">
- log( 'inline script #2' );
- var t = async_test()
-
- function test() {
- assert_any(assert_array_equals, eventOrder, [['inline script #1', 'DOMNodeInserted', 'end script #1', 'external script #1', 'inline script #2'],
- ['inline script #1', 'DOMNodeInserted', 'end script #1', 'inline script #2', 'external script #1']]
- );
- t.done();
- }
- onload = t.step_func(test)
- </script>
-
-</body></html>
diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/044.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/044.html
deleted file mode 100644
index 8d412079e45..00000000000
--- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/044.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html><head>
- <title> scheduler: DOM mutation events when adding scripts: DOMNodeInsertedIntoDocument </title>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="testlib/testlib.js"></script>
-</head>
-<body>
-
- <div id="log">FAILED (This TC requires JavaScript enabled)</div>
-
- <script>log('inline script #1');
- testlib.addScript('log(\'head script #1\')', {}, document.getElementsByTagName('head')[0], false, function(s){s.addEventListener( 'DOMNodeInsertedIntoDocument', function(){ log('DOMNodeInsertedIntoDocument'); }, false ); } );
- log('end script #1');
- </script>
-
- <script type="text/javascript">
- log( 'inline script #2' );
- var t = async_test()
-
- function test() {
- assert_array_equals(eventOrder, ['inline script #1', 'head script #1', 'DOMNodeInsertedIntoDocument', 'end script #1', 'inline script #2']);
- t.done();
- }
- onload = t.step_func(test)
- </script>
-
-</body></html>
diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/045.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/045.html
deleted file mode 100644
index 254e0d13662..00000000000
--- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/045.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html><head>
- <title> scheduler: DOM mutation events when adding external scripts: DOMNodeInsertedIntoDocument </title>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="testlib/testlib.js"></script>
-</head>
-<body>
-
- <div id="log">FAILED (This TC requires JavaScript enabled)</div>
-
- <script>log('inline script #1');
- testlib.addScript('', {src:'scripts/include-1.js'}, document.getElementsByTagName('head')[0], false, function(s){s.addEventListener( 'DOMNodeInsertedIntoDocument', function(){ log('DOMNodeInsertedIntoDocument'); }, false);});
- log('end script #1');
- </script>
-
- <script type="text/javascript">
- log( 'inline script #2' );
- var t = async_test()
-
- onload = t.step_func(function() {
- assert_any(assert_array_equals, eventOrder, [['inline script #1', 'DOMNodeInsertedIntoDocument', 'end script #1', 'external script #1', 'inline script #2'],
- ['inline script #1', 'DOMNodeInsertedIntoDocument', 'end script #1', 'inline script #2', 'external script #1']]);
- t.done();
- });
- </script>
-
-</body></html>
diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/054.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/054.html
deleted file mode 100644
index 29ede23414e..00000000000
--- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/054.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<html><head>
- <title> scheduler: removing newly inserted script from DOMNodeInserted handler - external script </title>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="testlib/testlib.js"></script>
-</head>
-<body>
-
- <div id="log">FAILED (This TC requires JavaScript enabled)</div>
-
- <script>log('inline script #1');
- document.addEventListener( 'DOMNodeInserted', function listener(e){
- log('DOMNodeInserted event');
- e.target.parentNode.removeChild(e.target);
- document.removeEventListener('DOMNodeInserted', listener);
- }, false );
- var script=testlib.addScript('', { src:'scripts/include-1.js?'+Math.random() }, document.getElementsByTagName('body')[0], true );
- log('end script #1');
- </script>
- <script type="text/javascript">
- log( 'inline script #2' );
- var t = async_test()
-
- function test() {
- assert_any(assert_array_equals, eventOrder, [['inline script #1', 'DOMNodeInserted event', 'end script #1', 'inline script #2', 'external script #1'],
- ['inline script #1', 'DOMNodeInserted event', 'end script #1', 'external script #1', 'inline script #2']]);
- t.done();
- }
- onload = t.step_func(test);
- </script>
-
-</body></html>
diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/055.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/055.html
deleted file mode 100644
index c837d78174b..00000000000
--- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/execution-timing/055.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html><head>
- <title> scheduler: removing newly inserted script from DOMNodeInserted handler - inline script </title>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="testlib/testlib.js"></script>
-</head>
-<body>
-
- <div id="log">FAILED (This TC requires JavaScript enabled)</div>
-
- <script>log('inline script #1');
- document.addEventListener( 'DOMNodeInserted', function listener(e){
- log('DOMNodeInserted event');
- e.target.parentNode.removeChild(e.target);
- document.removeEventListener('DOMNodeInserted', listener);
- }, false );
- var script=testlib.addScript('log(\'added script\')', { }, document.getElementsByTagName('body')[0], true );
- log('end script #1');
- </script>
- <script type="text/javascript">
- log( 'inline script #2' );
- var t = async_test()
-
- function test() {
- assert_array_equals(eventOrder, ['inline script #1', 'added script', 'DOMNodeInserted event', 'end script #1', 'inline script #2']);
- t.done();
- }
- onload = t.step_func(test);
- </script>
-
-</body></html>
diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/invalid-content-type.any.js b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/invalid-content-type.any.js
index d15fa3f1b70..d0bb6aa9fb1 100644
--- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/invalid-content-type.any.js
+++ b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/invalid-content-type.any.js
@@ -7,6 +7,12 @@ const content_types = [
"text/json+blah",
"application/blahjson",
"image/json",
+ "text+json",
+ "json+json",
+ "text/json/json+json",
+ "text/html;+json",
+ "text/html+json+xml",
+ "text/json/json",
];
for (const content_type of content_types) {
promise_test(async test => {
diff --git a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/valid-content-type.html b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/valid-content-type.html
index 3232b84d271..fdeba93ba89 100644
--- a/tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/valid-content-type.html
+++ b/tests/wpt/tests/html/semantics/scripting-1/the-script-element/json-module/valid-content-type.html
@@ -19,6 +19,8 @@ const t3 = async_test("text/html+json");
const t4 = async_test("image/svg+json");
const t5 = async_test("text/json;boundary=something");
const t6 = async_test("text/json;foo=bar");
+const t7 = async_test("text/json;+json");
+const t8 = async_test("text/html+xml+json");
</script>
<script type="module" onerror="t1.step(() => assert_unreached(event))">
import v from "../serve-with-content-type.py?fn=json-module/module.json&ct=text/json" with { type: "json"};
@@ -43,4 +45,12 @@ check(t5, v);
<script type="module" onerror="t6.step(() => assert_unreached(event))">
import v from "../serve-with-content-type.py?fn=json-module/module.json&ct=text/json;foo=bar" with { type: "json"};
check(t6, v);
+</script>
+<script type="module" onerror="t7.step(() => assert_unreached(event))">
+import v from "../serve-with-content-type.py?fn=json-module/module.json&ct=text/json;%2Bjson" with { type: "json"};
+check(t7, v);
+</script>
+<script type="module" onerror="t8.step(() => assert_unreached(event))">
+import v from "../serve-with-content-type.py?fn=json-module/module.json&ct=text/html%2Bxml%2Bjson" with { type: "json"};
+check(t8, v);
</script> \ No newline at end of file
diff --git a/tests/wpt/tests/html/semantics/the-button-element/command-and-commandfor/source-attribute-retargeting.tentative.html b/tests/wpt/tests/html/semantics/the-button-element/command-and-commandfor/source-attribute-retargeting.tentative.html
new file mode 100644
index 00000000000..885b75a3387
--- /dev/null
+++ b/tests/wpt/tests/html/semantics/the-button-element/command-and-commandfor/source-attribute-retargeting.tentative.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<link rel=author href="mailto:jarhar@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id=popover popover=auto>popover</div>
+<div id=host>
+ <template shadowrootmode=open>
+ <button id=shadow-button command=show-popover>button in shadowroot</button>
+ </template>
+</div>
+
+<script>
+promise_test(async () => {
+ const popover = document.getElementById('popover');
+ const host = document.getElementById('host');
+ const shadowButton = host.shadowRoot.getElementById('shadow-button');
+ shadowButton.commandForElement = popover;
+
+ const eventNames = ['beforetoggle', 'toggle', 'command'];
+ const eventNameToEvent = {};
+ const eventNameToCaptureSource = {};
+ const eventNameToBubbleSource = {};
+
+ for (const eventName of eventNames) {
+ popover.addEventListener(eventName, event => {
+ eventNameToEvent[eventName] = event;
+ eventNameToBubbleSource[eventName] = event.source;
+ });
+ popover.addEventListener(eventName, event => {
+ eventNameToCaptureSource[eventName] = event.source;
+ }, {capture: true});
+ }
+
+ shadowButton.click();
+ await new Promise(requestAnimationFrame);
+ await new Promise(requestAnimationFrame);
+
+ for (const eventName of eventNames) {
+ const event = eventNameToEvent[eventName];
+ assert_true(!!event, `A ${eventName} event should have been fired.`);
+ assert_equals(eventNameToCaptureSource[eventName], host,
+ `${eventName}.source during capture.`);
+ assert_equals(eventNameToBubbleSource[eventName], host,
+ `${eventName}.source during bubble.`);
+ assert_not_equals(event.source, shadowButton,
+ `${eventName}.source shouldn't leak the shadow button.`);
+ assert_equals(event.source, host,
+ `${eventName}.source after dispatch.`);
+ }
+}, 'CommandEvent.source and ToggleEvent.source should be retargeted during and after event dispatch.');
+</script>
+
+<div id=host2>
+ <template shadowrootmode=open>
+ <div id=source>source</div>
+ <div id=innerhost>
+ <template shadowrootmode=open>
+ <div id=target>target</div>
+ </template>
+ </div>
+ </template>
+</div>
+
+<script>
+// This does not test ToggleEvent because ToggleEventInit does not have a source attribute.
+promise_test(async () => {
+ const host2 = document.getElementById('host2');
+ const source = host2.shadowRoot.getElementById('source');
+ const innerhost = host2.shadowRoot.getElementById('innerhost');
+ const target = innerhost.shadowRoot.getElementById('target');
+
+ const targets = [host2, innerhost, target];
+ const targetToEvent = new Map();
+ const targetToCaptureSource = new Map();
+ const targetToBubbleSource = new Map();
+
+ for (const target of targets) {
+ target.addEventListener('command', event => {
+ targetToEvent.set(target, event);
+ targetToBubbleSource.set(target, event.source);
+ });
+ target.addEventListener('command', event => {
+ targetToCaptureSource.set(target, event.source);
+ }, {capture: true});
+ }
+
+ const commandEvent = new CommandEvent('command', {composed: true, source});
+ target.dispatchEvent(commandEvent);
+
+ for (const target of targets) {
+ const expectedSource = target == host2 ? host2 : source;
+ assert_true(targetToEvent.has(target),
+ `${target.id}: event should have fired.`);
+ assert_equals(targetToCaptureSource.get(target), expectedSource,
+ `${target.id}: event.source at capture.`);
+ assert_equals(targetToBubbleSource.get(target), expectedSource,
+ `${target.id}: event.source at bubble.`);
+ assert_equals(targetToEvent.get(target).source, host2,
+ `${target.id}: event.source after dispatch.`);
+ }
+}, 'CommandEvent.source should be retargeted when manually dispatched with composed set to true.');
+</script>
+
+<div id=popover3 popover=auto>popover 3</div>
+<button id=button3 commandfor=popover3 command=show-popover>show popover 3</button>
+
+<script>
+promise_test(async () => {
+ const button = document.getElementById('button3');
+ const popover = document.getElementById('popover3');
+
+ const eventNames = ['beforetoggle', 'toggle', 'command'];
+ const eventNameToEvent = {};
+ for (const eventName of eventNames) {
+ popover.addEventListener(eventName, event => {
+ eventNameToEvent[eventName] = event;
+ });
+ }
+
+ button.click();
+ await new Promise(requestAnimationFrame);
+ await new Promise(requestAnimationFrame);
+
+ for (const eventName of eventNames) {
+ const event = eventNameToEvent[eventName];
+ assert_true(!!event, `${eventName} should have been fired.`);
+ assert_equals(event.source, button,
+ `${eventName}.source should be the invoker button after dispatch.`);
+ }
+}, 'CommandEvent.source and ToggleEvent.source should not be set to null after dispatch without ShadowDOM.');
+</script>
diff --git a/tests/wpt/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/WEB_FEATURES.yml b/tests/wpt/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/WEB_FEATURES.yml
index a1af3e21a48..7a364e14095 100644
--- a/tests/wpt/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/WEB_FEATURES.yml
+++ b/tests/wpt/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/WEB_FEATURES.yml
@@ -2,3 +2,7 @@ features:
- name: pdf-viewer
files:
- plugins-and-mimetypes.html
+- name: ua-client-hints
+ files:
+ - navigator_user_agent.tentative.html
+ - navigator_user_agent.https.tentative.html
diff --git a/tests/wpt/tests/interfaces/scoped-custom-elements-registry.idl b/tests/wpt/tests/interfaces/scoped-custom-elements-registry.idl
new file mode 100644
index 00000000000..46ca2d6b9c4
--- /dev/null
+++ b/tests/wpt/tests/interfaces/scoped-custom-elements-registry.idl
@@ -0,0 +1,38 @@
+[Exposed=Window]
+partial interface CustomElementRegistry {
+ constructor();
+ undefined initialize(Node root);
+};
+
+[Exposed=Window]
+partial interface HTMLTemplateElement {
+ [CEReactions] attribute DOMString shadowRootCustomElementRegistry;
+};
+
+[Exposed=Window]
+partial interface Document {
+ readonly attribute CustomElementRegistry? customElementRegistry;
+};
+
+[Exposed=Window]
+partial interface Element {
+ readonly attribute CustomElementRegistry? customElementRegistry;
+};
+
+[Exposed=Window]
+partial interface ShadowRoot {
+ readonly attribute CustomElementRegistry? customElementRegistry;
+};
+
+dictionary ImportNodeOptions {
+ CustomElementRegistry customElementRegistry;
+ boolean selfOnly = false;
+};
+
+partial dictionary ShadowRootInit {
+ CustomElementRegistry customElementRegistry;
+};
+
+partial dictionary ElementCreationOptions {
+ CustomElementRegistry customElementRegistry;
+};
diff --git a/tests/wpt/tests/layout-instability/WEB_FEATURES.yml b/tests/wpt/tests/layout-instability/WEB_FEATURES.yml
new file mode 100644
index 00000000000..335b072c186
--- /dev/null
+++ b/tests/wpt/tests/layout-instability/WEB_FEATURES.yml
@@ -0,0 +1,3 @@
+features:
+- name: layout-instability
+ files: "**"
diff --git a/tests/wpt/tests/lint.ignore b/tests/wpt/tests/lint.ignore
index 10b5dadba74..60b0f65a6f4 100644
--- a/tests/wpt/tests/lint.ignore
+++ b/tests/wpt/tests/lint.ignore
@@ -126,6 +126,7 @@ CONSOLE: webaudio/resources/audit.js:41
# Intentional use of console.*
CONSOLE: infrastructure/webdriver/bidi/subscription.html
CONSOLE: infrastructure/webdriver/bidi/subscription.window.js
+CONSOLE: html/editing/dnd/events/ua-shadow-contents-manual.html
# use of console in a public library - annotation-model ensures
# it is not actually used
diff --git a/tests/wpt/tests/network-error-logging/support/nel.sub.js b/tests/wpt/tests/network-error-logging/support/nel.sub.js
index 26ddd897c2f..f9dfec1dad8 100644
--- a/tests/wpt/tests/network-error-logging/support/nel.sub.js
+++ b/tests/wpt/tests/network-error-logging/support/nel.sub.js
@@ -18,6 +18,7 @@ function releaseNELLock() {
function nel_test(callback, name, properties) {
promise_test(async t => {
await obtainNELLock();
+ await assertNELIsImplemented();
await clearReportingAndNELConfigurations();
await callback(t);
await releaseNELLock();
@@ -27,6 +28,7 @@ function nel_test(callback, name, properties) {
function nel_iframe_test(callback, name, properties) {
promise_test(async t => {
await obtainNELLock();
+ await assertNELIsImplemented();
await clearReportingAndNELConfigurationsInIframe();
await callback(t);
await releaseNELLock();
@@ -251,9 +253,10 @@ function _isSubsetOf(obj1, obj2) {
* expected.
*/
-async function reportExists(expected, retain_reports) {
- var timeout =
- document.querySelector("meta[name=timeout][content=long]") ? 50 : 1;
+async function reportExists(expected, retain_reports, timeout) {
+ if (!timeout) {
+ timeout = document.querySelector("meta[name=timeout][content=long]") ? 50 : 1;
+ }
var reportLocation =
"/reporting/resources/report.py?op=retrieve_report&timeout=" +
timeout + "&reportID=" + reportID;
@@ -295,3 +298,13 @@ async function reportsExist(expected_reports, retain_reports) {
}
return true;
}
+
+// this runs first to avoid testing on browsers not implementing NEL
+async function assertNELIsImplemented() {
+ await fetchResourceWithBasicPolicy();
+ // Assert that the report was generated
+ assert_implements(await reportExists({
+ url: getURLForResourceWithBasicPolicy(),
+ type: "network-error"
+ }, false, 1), "'Basic NEL support: missing network-error report'");
+}
diff --git a/tests/wpt/tests/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-mouse-event.tentative.html b/tests/wpt/tests/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-mouse-event.tentative.html
new file mode 100644
index 00000000000..66fb63d54d1
--- /dev/null
+++ b/tests/wpt/tests/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-mouse-event.tentative.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<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>
+
+<style>
+ div {
+ user-select: none; // Prevents text selection on drag.
+ }
+</style>
+<div id="logger" draggable="false"></div>
+<div id="console"></div>
+<!-- This test documents the current behavior in Chrome for some
+ pointerType == "mouse" events -->
+<script>
+ function CheckDeviceIdOne(event) {
+ assert_equals(event.persistentDeviceId, 1, event.type + " deviceId is 1");
+ }
+
+ function CheckDeviceIdZero(event) {
+ assert_equals(event.persistentDeviceId, 0, event.type + " deviceId is 0");
+ }
+
+ window.addEventListener("pointerdown", CheckDeviceIdOne, false);
+ window.addEventListener("pointermove", CheckDeviceIdOne, false);
+ window.addEventListener("pointerover", CheckDeviceIdOne, false);
+ window.addEventListener("pointerup", CheckDeviceIdOne, false);
+ window.addEventListener("click", CheckDeviceIdZero, false);
+
+ promise_test(async () => {
+ let actions = new test_driver.Actions()
+ .addPointer("TestPointer", "mouse")
+ .pointerDown()
+ .pointerMove(100, 100)
+ .pointerUp();
+
+ await actions.send();
+
+ }, 'PointerEvent.persistentDeviceId');
+</script>
diff --git a/tests/wpt/tests/resize-observer/zoom.html b/tests/wpt/tests/resize-observer/zoom.html
new file mode 100644
index 00000000000..77b4bc49fa7
--- /dev/null
+++ b/tests/wpt/tests/resize-observer/zoom.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<link rel="help" href="https://drafts.csswg.org/css-viewport/#zoom-om">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/9398">
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="author" href="https://mozilla.org" title="Mozilla">
+<title>ResizeObserver sizes account for zoom</title>
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ div {
+ width: 100px;
+ height: 100px;
+ border: 5px solid;
+ padding: 5px;
+ margin: 5px;
+ box-sizing: border-box;
+ }
+</style>
+<div></div>
+<div style="zoom: 2"></div>
+<div style="zoom: 4"></div>
+<script>
+promise_test(async function() {
+ let { promise, resolve } = Promise.withResolvers();
+ let observer = new ResizeObserver(entries => {
+ resolve(entries);
+ });
+ for (let div of document.querySelectorAll("div")) {
+ observer.observe(div);
+ }
+ let entries = await promise;
+ observer.disconnect();
+ assert_equals(entries.length, 3, "Should have three entries");
+ for (let entry of entries) {
+ assert_equals(entry.contentRect.top, 5, "content-rect top should be scaled by zoom");
+ assert_equals(entry.contentRect.left, 5, "content-rect left should be scaled by zoom");
+ assert_equals(entry.contentRect.width, 80, "content-rect width should be scaled by zoom");
+ assert_equals(entry.contentRect.height, 80, "content-rect height should be scaled by zoom");
+
+ for (let sizeArray of [entry.borderBoxSize, entry.contentBoxSize, entry.devicePixelContentBoxSize]) {
+ assert_equals(sizeArray.length, 1, "Should have one box");
+ }
+ let borderBoxSize = entry.borderBoxSize[0];
+ let contentBoxSize = entry.contentBoxSize[0];
+ let devicePixelContentBoxSize = entry.devicePixelContentBoxSize[0];
+ assert_equals(borderBoxSize.inlineSize, 100, "border inline size should be scaled by zoom");
+ assert_equals(borderBoxSize.blockSize, 100, "border block size should be scaled by zoom");
+ assert_equals(contentBoxSize.inlineSize, 80, "content inline size should be scaled by zoom");
+ assert_equals(contentBoxSize.blockSize, 80, "content block size should be scaled by zoom");
+ assert_equals(devicePixelContentBoxSize.inlineSize, 80 * entry.target.currentCSSZoom * window.devicePixelRatio, "dev-px size should _not_ be scaled by zoom");
+ assert_equals(devicePixelContentBoxSize.blockSize, 80 * entry.target.currentCSSZoom * window.devicePixelRatio, "dev-px size should _not_ be scaled by zoom");
+ }
+});
+</script>
diff --git a/tests/wpt/tests/resource-timing/content-encoding.https.html b/tests/wpt/tests/resource-timing/content-encoding.https.html
index 0d67bfc7d4f..80473552f08 100644
--- a/tests/wpt/tests/resource-timing/content-encoding.https.html
+++ b/tests/wpt/tests/resource-timing/content-encoding.https.html
@@ -33,10 +33,10 @@
run_same_origin_test("/resource-timing/resources/foo.text.zst", "zstd");
run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=deflate", "deflate");
run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=gzip", "gzip");
- // Unrecognized content encoding value should be transformed to "unknown".
- run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=unrecognizedname", "unknown");
- // "identity" is not allowed in response header and should be transformed to "unknown".
- run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=identity", "unknown");
+ // Unrecognized content encoding value should be transformed to "@unknown".
+ run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=unrecognizedname", "@unknown");
+ // "identity" is not allowed in response header and should be transformed to "@unknown".
+ run_same_origin_test("/resource-timing/resources/compressed-js.py?content_encoding=identity", "@unknown");
// Mult-encodinging and formatting tests.
run_same_origin_test("/resource-timing/resources/content-encoding-headers.py?content_encoding=gzip, deflate,Apple", "multiple");
run_same_origin_test("/resource-timing/resources/content-encoding-headers.py?content_encoding=gzip, ", "multiple");
diff --git a/tests/wpt/tests/resources/testdriver-actions.js.headers b/tests/wpt/tests/resources/testdriver-actions.js.headers
new file mode 100644
index 00000000000..5e8f640c665
--- /dev/null
+++ b/tests/wpt/tests/resources/testdriver-actions.js.headers
@@ -0,0 +1,2 @@
+Content-Type: text/javascript; charset=utf-8
+Cache-Control: max-age=3600
diff --git a/tests/wpt/tests/scroll-animations/animation-trigger/animation-trigger-repeat.tentative.html b/tests/wpt/tests/scroll-animations/animation-trigger/animation-trigger-repeat.tentative.html
index cfbe9d3c933..6c01e762e5a 100644
--- a/tests/wpt/tests/scroll-animations/animation-trigger/animation-trigger-repeat.tentative.html
+++ b/tests/wpt/tests/scroll-animations/animation-trigger/animation-trigger-repeat.tentative.html
@@ -21,7 +21,7 @@
}
.target {
animation: myAnim linear 0.5s both;
- animation-trigger: repeat;
+ animation-trigger-type: repeat;
animation-trigger-range: 250px 300px;
animation-trigger-exit-range: 200px 350px;
}
@@ -76,6 +76,7 @@
// let target;
async function testRepeatAnimationTrigger(test, rangeBoundaries) {
+ const initial_transform = getComputedStyle(target).transform;
// Just short of the trigger range start, no trigger action expected.
await testAnimationTrigger(test, () => {
return rangeBoundaries.exitTriggerRangeAbove();
@@ -91,15 +92,14 @@
return rangeBoundaries.enterTriggerRange();
}, target, ["animationstart", "animationend"], [true, true]);
- // This is a repeat trigger, exiting the exit range resets the animation.
- // We waited for an animationend event in the previous step so we won't
- // see an animationcancel event here. But, by inspecting
- // style.transform, we should see that the animation was reset.
+ // This is a repeat trigger, exiting the exit range resets the
+ // animation. By inspecting style.transform, we should see that the
+ // animation was reset.
await testAnimationTrigger(test, () => {
return rangeBoundaries.exitExitRangeAbove();
}, target, ["animationstart", "animationend", "animationcancel"],
[false, false, false]);
- assert_equals(getComputedStyle(target).transform, "none");
+ assert_equals(getComputedStyle(target).transform, initial_transform);
// This is a repeat trigger, re-entering plays the animation.
await testAnimationTrigger(test, async () => {
@@ -109,7 +109,7 @@
// Exit the range.
return rangeBoundaries.exitExitRangeBelow();
}, target, ["animationstart", "animationend", "animationcancel"],
- [true, false, true]);
+ [true, false, false]);
}
const CSS_TRIGGER_START_PX = 250;
@@ -127,7 +127,7 @@
CSS_EXIT_END_PX,
scroller);
await testRepeatAnimationTrigger(test, rangeBoundaries);
- }, "once animation triggered via scroll() timeline.");
+ }, "repeat animation triggered via scroll() timeline.");
promise_test(async (test) => {
scroller = view_scroller;
@@ -142,7 +142,7 @@
COVER_START_OFFSET + CSS_EXIT_END_PX,
scroller);
await testRepeatAnimationTrigger(test, rangeBoundaries);
- }, "once animation triggered via view() timeline.");
+ }, "repeat animation triggered via view() timeline.");
promise_test(async (test) => {
scroller = deferred_scroller;
@@ -157,7 +157,7 @@
COVER_START_OFFSET + CSS_EXIT_END_PX,
scroller);
await testRepeatAnimationTrigger(test, rangeBoundaries);
- }, "once animation triggered via deferred (view) timeline.");
+ }, "repeat animation triggered via deferred (view) timeline.");
</script>
</body>
</html>
diff --git a/tests/wpt/tests/shadow-dom/HighlightRegistry-highlightsFromPoint.html b/tests/wpt/tests/shadow-dom/HighlightRegistry-highlightsFromPoint.html
index 5244f923e34..4098bc5a994 100644
--- a/tests/wpt/tests/shadow-dom/HighlightRegistry-highlightsFromPoint.html
+++ b/tests/wpt/tests/shadow-dom/HighlightRegistry-highlightsFromPoint.html
@@ -1,7 +1,7 @@
<!doctype html>
<body>
<meta name="author" title="Fernando Fiori" href="mailto:ffiori@microsoft.com">
-<meta name="assert" content="HighlightRegistry.highlightsFromPoint returns the Highlights present at at a given point inside the shadow roots passed as argument.">
+<meta name="assert" content="HighlightRegistry.highlightsFromPoint returns HighlightHitResults with the Highlights and their corresponding ranges present at a given point inside the shadow roots passed as argument.">
<link rel="help" href="https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/highlight/HighlightsFromPointsExplainer.md">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@@ -57,25 +57,28 @@ body {
// Get x and y coordinates between '0' and '1'.
let x = spanBoundingRectangle.left + characterWidth;
let y = spanBoundingRectangle.top + spanBoundingRectangle.height / 2;
- let highlights = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
- assert_equals(highlights.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the coordinates provided point at no Highlights');
+ let highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the coordinates provided point at no Highlights');
// Get x and y coordinates between '2' and '3'.
x = spanBoundingRectangle.left + 3 * characterWidth;
- highlights = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
- assert_equals(highlights.length, 1, 'CSS.highlights.highlightsFromPoint() returns exactly one Highlight when the given coordinates point at a Highlight under the shadow root provided');
- assert_equals(highlights[0], highlight, 'CSS.highlights.highlightsFromPoint() returns the Highlight present at the given coordinates when it\'s under the shadow root provided');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
+ assert_equals(highlight_hit_results.length, 1, 'CSS.highlights.highlightsFromPoint() returns exactly one Highlight when the given coordinates point at a Highlight under the shadow root provided');
+ assert_equals(highlight_hit_results[0].highlight, highlight, 'CSS.highlights.highlightsFromPoint() returns the Highlight present at the given coordinates when it\'s under the shadow root provided');
+ assert_array_equals(highlight_hit_results[0].ranges, [range], 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the ranges of the Highlight present at the coordinates provided');
- highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the coordinates provided point at one Highlight in the shadow DOM but shadowRoots provided is empty');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the coordinates provided point at one Highlight in the shadow DOM but shadowRoots provided is empty');
// Get x and y coordinates between '6' and '7'.
// Same priority for the Highlights, break tie by order of registration.
x = spanBoundingRectangle.left + 7 * characterWidth;
- highlights = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
- assert_equals(highlights.length, 2, 'CSS.highlights.highlightsFromPoint() returns exactly two Highlights when the coordinates provided point at two overlapping Highlights');
- assert_equals(highlights[0], highlight2, 'CSS.highlights.highlightsFromPoint() returns first the Highlight registered last when both Highlights present at the point provided have the same priority');
- assert_equals(highlights[1], highlight, 'CSS.highlights.highlightsFromPoint() returns last the Highlight registered first when both Highlights present at the point provided have the same priority');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
+ assert_equals(highlight_hit_results.length, 2, 'CSS.highlights.highlightsFromPoint() returns exactly two Highlights when the coordinates provided point at two overlapping Highlights');
+ assert_equals(highlight_hit_results[0].highlight, highlight2, 'CSS.highlights.highlightsFromPoint() returns first the Highlight registered last when both Highlights present at the point provided have the same priority');
+ assert_equals(highlight_hit_results[1].highlight, highlight, 'CSS.highlights.highlightsFromPoint() returns last the Highlight registered first when both Highlights present at the point provided have the same priority');
+ assert_array_equals(highlight_hit_results[0].ranges, [range2], 'CSS.highlights.highlightsFromPoint() returns first a HighlightHitResult with the ranges of the Highlight present on top at the coordinates provided');
+ assert_array_equals(highlight_hit_results[1].ranges, [range], 'CSS.highlights.highlightsFromPoint() returns last a HighlightHitResult with the ranges of the Highlight present at the bottom at the coordinates provided');
}, 'CSS.highlights.highlightsFromPoint() returns Highlights present at a given point inside a shadow tree in the right order.');
test(() => {
@@ -109,23 +112,25 @@ body {
// Get x and y coordinates between '0' and '1' in the first line.
let x = spanBoundingRectangle.left + characterWidth;
let y = container.getBoundingClientRect().top + characterHeight / 2.0;
- let highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 1, 'CSS.highlights.highlightsFromPoint() returns one Highlight present at the coordinates provided');
- assert_equals(highlights[0], highlight, 'CSS.highlights.highlightsFromPoint() returns the Highlight present at the given coordinates even when no shadowRoots are provided because it\'s outside the shadow DOM');
+ let highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 1, 'CSS.highlights.highlightsFromPoint() returns one Highlight present at the coordinates provided');
+ assert_equals(highlight_hit_results[0].highlight, highlight, 'CSS.highlights.highlightsFromPoint() returns the Highlight present at the given coordinates even when no shadowRoots are provided because it\'s outside the shadow DOM');
+ assert_array_equals(highlight_hit_results[0].ranges, [range], 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the ranges of the Highlight present at the coordinates provided');
// Now move y to the second line (inside shadow DOM).
y += characterHeight;
- highlights = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
- assert_equals(highlights.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the given coordinates point at text under the shadow root provided even when there is a Highlight set with a Range that starts and ends in the regular DOM surrounding it, even when shadowRoots are provided');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the given coordinates point at text under the shadow root provided even when there is a Highlight set with a Range that starts and ends in the regular DOM surrounding it, even when shadowRoots are provided');
- highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the given coordinates point at text under the shadow root provided even when there is a Highlight set with a Range that starts and ends in the regular DOM surrounding it');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the given coordinates point at text under the shadow root provided even when there is a Highlight set with a Range that starts and ends in the regular DOM surrounding it');
// Now move y to the third line.
y += characterHeight;
- highlights = CSS.highlights.highlightsFromPoint(x, y);
- assert_equals(highlights.length, 1, 'CSS.highlights.highlightsFromPoint() returns one Highlight present at the coordinates provided');
- assert_equals(highlights[0], highlight, 'CSS.highlights.highlightsFromPoint() returns the Highlight present at the given coordinates because it\'s outside of the shadow DOM');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y);
+ assert_equals(highlight_hit_results.length, 1, 'CSS.highlights.highlightsFromPoint() returns one Highlight present at the coordinates provided');
+ assert_equals(highlight_hit_results[0].highlight, highlight, 'CSS.highlights.highlightsFromPoint() returns the Highlight present at the given coordinates because it\'s outside of the shadow DOM');
+ assert_array_equals(highlight_hit_results[0].ranges, [range], 'CSS.highlights.highlightsFromPoint() returns a HighlightHitResult with the ranges of the Highlight present at the coordinates provided');
// Set a Highlight with a range like this one:
// [0123456789
@@ -138,13 +143,13 @@ body {
// Set x and y coordinates between '0' and '1' in the first line.
y = container.getBoundingClientRect().top + characterHeight / 2.0;
- highlights = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
- assert_equals(highlights.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the given coordinates point at text in the light DOM that is not highlighted even when there is a Highlight set with a StaticRange that starts in the light DOM and ends in the shadow DOM surrounding it');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the given coordinates point at text in the light DOM that is not highlighted even when there is a Highlight set with a StaticRange that starts in the light DOM and ends in the shadow DOM surrounding it');
// Now move y to the second line (inside shadow DOM).
y += characterHeight;
- highlights = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
- assert_equals(highlights.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the given coordinates point at text in the shadow DOM that is not highlighted even when there is a Highlight set with a StaticRange that starts in the light DOM and ends in the shadow DOM surrounding it');
+ highlight_hit_results = CSS.highlights.highlightsFromPoint(x, y, {shadowRoots: [shadowRoot]});
+ assert_equals(highlight_hit_results.length, 0, 'CSS.highlights.highlightsFromPoint() returns no Highlights when the given coordinates point at text in the shadow DOM that is not highlighted even when there is a Highlight set with a StaticRange that starts in the light DOM and ends in the shadow DOM surrounding it');
}, 'CSS.highlights.highlightsFromPoint() doesn\'t return Highlights that are not painted at the given coordinates even when they fall inside the Highlights\' ranges');
</script>
</body>
diff --git a/tests/wpt/tests/soft-navigation-heuristics/first-interaction-not-softnav.tentative.html b/tests/wpt/tests/soft-navigation-heuristics/first-interaction-not-softnav.tentative.html
index e0262021836..2c9e2aa7c01 100644
--- a/tests/wpt/tests/soft-navigation-heuristics/first-interaction-not-softnav.tentative.html
+++ b/tests/wpt/tests/soft-navigation-heuristics/first-interaction-not-softnav.tentative.html
@@ -1,36 +1,37 @@
-<!DOCTYPE HTML>
+<!doctype html>
<html>
-<head>
-<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="resources/soft-navigation-helper.js"></script>
-</head>
-<body>
- <main id=main>
- <p><a id=firstlink>Click me!</a></p>
- <p><a id=secondlink>Then click me!</a></p>
- </main>
- <script>
- (async () => {
- if (test_driver) {
- const firstlink = document.getElementById("firstlink");
- const clickPromise = new Promise(r => {
- firstlink.addEventListener("click", r);
- });
- test_driver.click(firstlink);
- await clickPromise;
- }
- })();
- const secondlink = document.getElementById("secondlink");
- testSoftNavigation({
- addContent: () => {
- addImageToMain();
- },
- link: secondlink,
- test: "first interaction in the middle of a soft navigation"});
- </script>
-</body>
+ <head>
+ <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="resources/soft-navigation-helper.js"></script>
+ </head>
+ <body>
+ <main id="main">
+ <p><a id="firstlink">Click me!</a></p>
+ <p><a id="secondlink">Then click me!</a></p>
+ </main>
+ <script>
+ const secondlink = document.getElementById("secondlink");
+ testSoftNavigation({
+ preTestWork: async () => {
+ if (test_driver) {
+ const firstlink = document.getElementById("firstlink");
+ const clickPromise = new Promise((r) => {
+ firstlink.addEventListener("click", r);
+ });
+ test_driver.click(firstlink);
+ await clickPromise;
+ }
+ },
+ addContent: () => {
+ addImageToMain();
+ },
+ link: secondlink,
+ test: "first interaction before a soft navigation",
+ });
+ </script>
+ </body>
</html>
diff --git a/tests/wpt/tests/soft-navigation-heuristics/innertext.tentative.html b/tests/wpt/tests/soft-navigation-heuristics/innertext.tentative.html
deleted file mode 100644
index 7716488f25a..00000000000
--- a/tests/wpt/tests/soft-navigation-heuristics/innertext.tentative.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-<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="resources/soft-navigation-helper.js"></script>
-</head>
-<body>
- <main id=main>
- <a id=link>Click me!</a>
- <!-- This test fails if the paragraph below already has content. The reason
- is that secondary paints are not being properly recorded, and hence don't
- count for soft navigation heuristics. -->
- <p id="softnav-content"></p>
- </main>
- <script>
- const link = document.getElementById("link");
- testSoftNavigation({
- addContent: async () => {
- document.getElementById("softnav-content").innerText =
- 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, ' +
- 'sed do eiusmod tempor incididunt ut labore et dolore magna ' +
- 'aliqua. Ut enim ad minim veniam, quis nostrud exercitation ' +
- 'ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis ' +
- 'aute irure dolor in reprehenderit in voluptate velit esse ' +
- 'cillum dolore eu fugiat nulla pariatur. Excepteur sint ' +
- 'occaecat cupidatat non proident, sunt in culpa qui officia ' +
- 'deserunt mollit anim id est laborum.';
- },
- link: link,
- test: "Soft navigation when only innerText was modified"});
- </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 48e7b58d8d1..5860738225b 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
@@ -48,7 +48,11 @@ const testSoftNavigation = options => {
const eventType = readValue(options.eventType, 'click');
const interactionFunc = options.interactionFunc;
const eventPrepWork = options.eventPrepWork;
+ const preTestWork = options.preTestWork;
promise_test(async t => {
+ if (preTestWork) {
+ await preTestWork();
+ }
await withTimeoutMessage(
t, waitInitialLCP(), 'Timed out waiting for initial LCP');
const preClickLcp = await withTimeoutMessage(
diff --git a/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/dom.html b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/dom.html
index 66d23b22788..2e3c3809df6 100644
--- a/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/dom.html
+++ b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/dom.html
@@ -61,6 +61,20 @@
document.body.appendChild(cloned);
history.pushState({}, "", "/template-element");
}
+
+ // Uses Element.innerText to add to the DOM, without overriding existing text.
+ // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText
+ function elementInnerTextInitial() {
+ document.getElementById("element-inner-text-initial-dest").innerText = "Hello, World.";
+ history.pushState({}, "", "/element-inner-text-initial");
+ }
+
+ // Uses Element.innerText to add to the DOM, overriding existing text.
+ // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText
+ function elementInnerTextOverride() {
+ document.getElementById("element-inner-text-override-dest").innerText = "Hello, World.";
+ history.pushState({}, "", "/element-inner-text-override");
+ }
</script>
</head>
<body>
@@ -70,6 +84,14 @@
<div id="document-import-node" onclick="documentImportNode()">Click here!</div>
<div id="document-adopt-node" onclick="documentAdoptNode()">Click here!</div>
<div id="template-element" onclick="templateElement()">Click here!</div>
+ <div id="element-inner-text-initial" onclick="elementInnerTextInitial()">
+ Click here!
+ <div id="element-inner-text-initial-dest"></div>
+ </div>
+ <div id="element-inner-text-override" onclick="elementInnerTextOverride()">
+ Click here!
+ <div id="element-inner-text-override-dest">Some text already there.</div>
+ </div>
<iframe id="iframe-example" srcdoc="&lt;div id='import-this'>Hello, World.&lt;/div>"></iframe>
@@ -111,6 +133,14 @@
"Soft Navigation Detection supports Document.adoptNode.",
);
test_template("template-element", "Soft Navigation Detection supports template elements.");
+ test_template(
+ "element-inner-text-initial",
+ "Soft Navigation Detection supports Element.innerText when it does not override existing text.",
+ );
+ test_template(
+ "element-inner-text-override",
+ "Soft Navigation Detection supports Element.innerText when it overrides existing text.",
+ );
</script>
</body>
</html>
diff --git a/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/resources/other_window.html b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/resources/other_window.html
new file mode 100644
index 00000000000..406d39c3691
--- /dev/null
+++ b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/resources/other_window.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+
+<h1>This is some text</h1>
+
+<script>
+ function navigate() {
+ history.pushState({}, "", "/different-url");
+ }
+
+ async function getNextSoftNavEntry() {
+ return new Promise(resolve => {
+ new PerformanceObserver((list, observer) => {
+ observer.disconnect();
+ resolve(list.getEntries()[0]);
+ }).observe({ type: "soft-navigation" });
+ });
+ }
+</script>
diff --git a/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/window-open-cross-scheduling.html b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/window-open-cross-scheduling.html
new file mode 100644
index 00000000000..1a41be6ddd2
--- /dev/null
+++ b/tests/wpt/tests/soft-navigation-heuristics/smoke/tentative/window-open-cross-scheduling.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ <title>Scheduling soft navigations across windows.</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></script>
+ </head>
+ <body>
+ <button id="button" onclick="navigateChild()">Press Me!</button>
+
+ <script>
+ const child = window.open('resources/other_window.html');
+ const childLoaded = new Promise(resolve => child.onload = resolve);
+
+ function navigateChild() {
+ // `child.navigate()` is a function declared in the `other_window.html`.
+ child.navigate();
+ }
+
+ promise_test(async (t) => {
+ await childLoaded;
+
+ if (test_driver) {
+ test_driver.click(document.getElementById("button"));
+ }
+
+ new PerformanceObserver((list, observer) => t.step(() => {
+ observer.disconnect();
+ assert_unreached("Parent window should not detect a soft-navigation.");
+ })).observe({ type: "soft-navigation" });
+
+ child.getNextSoftNavEntry().then((entry) => {
+ assert_unreached("Child window should not detect a soft-navigation.");
+ });
+
+ await new Promise(resolve => t.step_timeout(resolve, 2000));
+
+ }, "Opening a new window and updating a URL in it shouldn't crash");
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/tests/speculation-rules/prefetch/no-prefetch-for-post.https.html b/tests/wpt/tests/speculation-rules/prefetch/no-prefetch-for-post.https.html
new file mode 100644
index 00000000000..7739f4f8c71
--- /dev/null
+++ b/tests/wpt/tests/speculation-rules/prefetch/no-prefetch-for-post.https.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<meta name="timeout" content="long">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script src="/common/utils.js"></script>
+<script src="../resources/utils.js"></script>
+<script src="resources/utils.sub.js"></script>
+<script>
+ setup(() => assertSpeculationRulesIsSupported());
+
+ promise_test(async t => {
+ let agent = await spawnWindow(t);
+ let nextUrl = agent.getExecutorURL({ executor: 'post-navigation-handler.py', protocol: 'https', page: 2 });
+ await agent.forceSinglePrefetch(nextUrl);
+
+ await agent.execute_script(async (nextUrl) => {
+ window.executor.suspend(() => {
+ navigate_by_form_generated_post(nextUrl);
+ });
+ }, [nextUrl]);
+
+ assert_not_prefetched(await agent.getRequestHeaders());
+ }, "post navigations should not use cached prefetch");
+</script>
diff --git a/tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html b/tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html
index bb2d58dc9c9..b89c45e4f5c 100644
--- a/tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html
+++ b/tests/wpt/tests/speculation-rules/prefetch/resources/executor.sub.html
@@ -82,6 +82,13 @@ async function start_non_eager_prefetch_on_pointerdown(id) {
await new test_driver.Actions().addPointer("mouse").pointerMove(0, 0, {origin: target}).pointerDown().pointerMove(0, 0).pointerUp().send();
}
+async function navigate_by_form_generated_post(url) {
+ let form = document.createElement('form');
+ form.method = 'POST';
+ form.action = url;
+ document.body.appendChild(form);
+ form.submit();
+}
// The fetch request's URL sent to the server.
window.requestUrl = reverse_html_escape(
diff --git a/tests/wpt/tests/speculation-rules/prefetch/resources/post-navigation-handler.py b/tests/wpt/tests/speculation-rules/prefetch/resources/post-navigation-handler.py
new file mode 100644
index 00000000000..1749517710e
--- /dev/null
+++ b/tests/wpt/tests/speculation-rules/prefetch/resources/post-navigation-handler.py
@@ -0,0 +1,10 @@
+import os
+from wptserve.pipes import template
+
+# This is used only to accept POST navigations.
+def main(request, response):
+ response.headers.set(b"Content-Type", b"text/html")
+ response.headers.set(b"Cache-Control", b"no-store")
+ response.content = template(
+ request,
+ open(os.path.join(os.path.dirname(__file__), "executor.sub.html"), "rb").read()) \ No newline at end of file
diff --git a/tests/wpt/tests/speculation-rules/prerender/headers.https.html b/tests/wpt/tests/speculation-rules/prerender/headers.https.html
new file mode 100644
index 00000000000..2ef6b5ce072
--- /dev/null
+++ b/tests/wpt/tests/speculation-rules/prerender/headers.https.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<title>Sec-Purpose header on prerendered page</title>
+<meta name="timeout" content="long">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script>
+<script src="../resources/utils.js"></script>
+<script src="resources/utils.js"></script>
+
+<body>
+<script>
+setup(() => assertSpeculationRulesIsSupported());
+
+promise_test(async () => {
+ const rcHelper = new RemoteContextHelper();
+ const referrerRC = await rcHelper.addWindow(undefined, { features: 'noopener' });
+ const prerenderedRC = await addPrerenderRC(referrerRC);
+
+ const prerenderedHeaders = await prerenderedRC.getRequestHeaders();
+ assertHeaders(prerenderedHeaders, true, true, 'prerendered page');
+
+ const iframeRC = await prerenderedRC.addIframe();
+ const iframeHeaders = await iframeRC.getRequestHeaders();
+ assertHeaders(iframeHeaders, true, false, 'iframe');
+
+ // No test for cross-origin iframe, since those requests are delayed until
+ // after activation. See below.
+
+ const imageHeaders = await insertImageAndGetRequestHeaders(prerenderedRC);
+ assertHeaders(imageHeaders, true, false, 'image');
+
+ const crossOriginImageHeaders = await insertImageAndGetRequestHeaders(
+ prerenderedRC,
+ get_host_info().HTTPS_REMOTE_ORIGIN
+ );
+ assertHeaders(crossOriginImageHeaders, true, false, 'cross-origin image');
+
+ const fetchHeaders = await doFetchAndGetRequestHeaders(prerenderedRC);
+ assertHeaders(fetchHeaders, true, false, 'fetch');
+
+ const crossOriginFetchHeaders = await doFetchAndGetRequestHeaders(
+ prerenderedRC,
+ get_host_info().HTTPS_REMOTE_ORIGIN
+ );
+ assertHeaders(crossOriginFetchHeaders, true, false, 'cross-origin fetch');
+
+ const navigatedToRC = await prerenderedRC.navigateToNew();
+ const navigatedToHeaders = await navigatedToRC.getRequestHeaders();
+ assertHeaders(navigatedToHeaders, true, false, 'navigated-to page');
+}, 'Headers before activation, including prerendered page navigation');
+
+promise_test(async () => {
+ const rcHelper = new RemoteContextHelper();
+ const referrerRC = await rcHelper.addWindow(undefined, { features: 'noopener' });
+ const prerenderedRC = await addPrerenderRC(referrerRC);
+
+ // Add the iframe now, but only check its headers after activation.
+ const crossOriginIframeBeforeActivationRC = await prerenderedRC.addIframe({ origin: 'HTTPS_REMOTE_ORIGIN' });
+
+ await activatePrerenderRC(referrerRC, prerenderedRC);
+
+ const crossOriginIframeBeforeActivationHeaders = await crossOriginIframeBeforeActivationRC.getRequestHeaders();
+ assertHeaders(crossOriginIframeBeforeActivationHeaders, true, false, 'cross-origin iframe before activation');
+
+ const iframeRC = await prerenderedRC.addIframe();
+ const iframeHeaders = await iframeRC.getRequestHeaders();
+ assertHeaders(iframeHeaders, false, false, 'post-activation iframe');
+
+ const imageHeaders = await insertImageAndGetRequestHeaders(prerenderedRC);
+ assertHeaders(imageHeaders, false, false, 'post-activation image');
+
+ const crossOriginImageHeaders = await insertImageAndGetRequestHeaders(
+ prerenderedRC,
+ get_host_info().HTTPS_REMOTE_ORIGIN
+ );
+ assertHeaders(crossOriginImageHeaders, false, false, 'cross-origin image');
+
+ const fetchHeaders = await doFetchAndGetRequestHeaders(prerenderedRC);
+ assertHeaders(fetchHeaders, false, false, 'post-activation fetch');
+
+ const crossOriginFetchHeaders = await doFetchAndGetRequestHeaders(
+ prerenderedRC,
+ get_host_info().HTTPS_REMOTE_ORIGIN
+ );
+ assertHeaders(crossOriginFetchHeaders, false, false, 'cross-origin fetch');
+}, 'Headers after activation (plus cross-origin iframe before activation)');
+
+async function insertImageAndGetRequestHeaders(rc, hostname) {
+ const uuid = token();
+ const url = (new URL(`resources/image-with-headers-stash.py?image=${uuid}`, location.href));
+ const headersURL = (new URL(`resources/image-with-headers-stash.py?read=${uuid}`, location.href));
+
+ if (hostname !== undefined) {
+ url.hostname = hostname;
+ headersURL.hostname = hostname;
+ }
+
+ await rc.executeScript(async (url) => {
+ const img = new Image();
+ img.src = url;
+ const promise = new Promise(resolve => img.onload = resolve);
+ document.body.append(img);
+ return promise;
+ }, [url]);
+
+ const headersJSON = await (await fetch(headersURL)).json();
+ assert_not_equals(headersJSON, null, 'image headers should not be null');
+ return new Headers(headersJSON);
+}
+
+async function doFetchAndGetRequestHeaders(rc, hostname) {
+ const uuid = token();
+ const url = (new URL(`resources/image-with-headers-stash.py?image=${uuid}`, location.href));
+ const headersURL = (new URL(`resources/image-with-headers-stash.py?read=${uuid}`, location.href));
+
+ if (hostname !== undefined) {
+ url.hostname = hostname;
+ headersURL.hostname = hostname;
+ }
+
+ await rc.executeScript(async (url) => {
+ return fetch(url, { mode: "cors" });
+ }, [url]);
+
+ const headersJSON = await (await fetch(headersURL)).json();
+ assert_not_equals(headersJSON, null, 'fetch headers should not be null');
+ return new Headers(headersJSON);
+}
+
+function assertHeaders(headers, secPurposeIsPrefetchPrerender, secSpeculationTagsIsPresent, label) {
+ if (secPurposeIsPrefetchPrerender) {
+ assert_equals(
+ headers.get('Sec-Purpose'),
+ 'prefetch;prerender',
+ `${label} Sec-Purpose`
+ );
+ } else {
+ assert_false(
+ headers.has('Sec-Purpose'),
+ `${label} Sec-Purpose should not be present`
+ );
+ }
+ if (secSpeculationTagsIsPresent) {
+ assert_equals(
+ headers.get('Sec-Speculation-Tags'),
+ 'null',
+ `${label} Sec-Speculation-Tags`
+ );
+ } else {
+ assert_false(
+ headers.has('Sec-Speculation-Tags'),
+ `${label} Sec-Speculation-Tags should not be present`
+ );
+ }
+}
+</script>
diff --git a/tests/wpt/tests/speculation-rules/prerender/resources/image-with-headers-stash.py b/tests/wpt/tests/speculation-rules/prerender/resources/image-with-headers-stash.py
new file mode 100644
index 00000000000..dcb8838d4a1
--- /dev/null
+++ b/tests/wpt/tests/speculation-rules/prerender/resources/image-with-headers-stash.py
@@ -0,0 +1,45 @@
+# Supports two operations:
+# - ?image=uuid: Returns an image, and records the request headers that were
+# used to get that image.
+# - ?read=uuid: Returns the request headers in the stash keyed by a given uuid.
+
+import os
+import json
+
+from wptserve.utils import isomorphic_decode
+
+def main(request, response):
+ if b"image" in request.GET:
+ uuid = request.GET[b"image"]
+
+ header_pairs = []
+ for header_name in request.headers.keys():
+ # ensure the header name/value are unicode strings
+ name = header_name.lower().decode("utf-8")
+ for header_value in request.headers.get_list(header_name):
+ value = header_value.decode("utf-8")
+ header_pairs.append([name, value])
+
+ request_headers = json.dumps(header_pairs)
+ request.server.stash.put(uuid, request_headers)
+
+ # Return a basic image.
+ response_headers = [
+ (b"Content-Type", b"image/png"),
+ (b"Access-Control-Allow-Origin", b"*")
+ ]
+ image_path = os.path.join(
+ os.path.dirname(isomorphic_decode(__file__)),
+ u"../../../common/square.png"
+ )
+ return (200, response_headers, open(image_path, mode='rb').read())
+
+ elif b"read" in request.GET:
+ uuid = request.GET[b"read"]
+ stash_value = request.server.stash.take(uuid)
+
+ if stash_value is None:
+ stash_value = "null"
+ return (200, [(b"Content-Type", b"application/json")], str(stash_value))
+
+ return (404 , [], "Not found")
diff --git a/tests/wpt/tests/svg/embedded/image-modify-href-4.svg b/tests/wpt/tests/svg/embedded/image-modify-href-4.svg
new file mode 100644
index 00000000000..f7e550e5def
--- /dev/null
+++ b/tests/wpt/tests/svg/embedded/image-modify-href-4.svg
@@ -0,0 +1,30 @@
+<svg xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:h="http://www.w3.org/1999/xhtml" width="200" height="200" class="reftest-wait" onload="test()">
+ <metadata>
+ <title>modifying xlink:href on an SVG image</title>
+ <h:link rel="match" href="reference/green-rect-100x100.svg"/>
+ </metadata>
+ <script href="/common/reftest-wait.js"></script>
+ <script href="/common/rendering-utils.js"></script>
+ <script>
+ const SVG_NS = "http://www.w3.org/2000/svg";
+
+ async function test() {
+ await waitForAtLeastOneFrame();
+
+ const doc = document.implementation.createDocument(SVG_NS, "svg");
+
+ const image = doc.createElementNS(SVG_NS, "image");
+ image.setAttribute("width", 100);
+ image.setAttribute("height", 100);
+ image.setAttribute("href", "reference/green-rect-100x100.svg");
+ doc.documentElement.appendChild(image);
+
+ document.documentElement.appendChild(document.adoptNode(image));
+
+ await waitForAtLeastOneFrame();
+ takeScreenshot();
+ }
+ </script>
+</svg>
diff --git a/tests/wpt/tests/tools/third_party_modified/mozlog/mozlog/handlers/base.py b/tests/wpt/tests/tools/third_party_modified/mozlog/mozlog/handlers/base.py
index 7cea14c7a44..707b539ec76 100644
--- a/tests/wpt/tests/tools/third_party_modified/mozlog/mozlog/handlers/base.py
+++ b/tests/wpt/tests/tools/third_party_modified/mozlog/mozlog/handlers/base.py
@@ -18,7 +18,7 @@ class BaseHandler(object):
def __init__(self, inner):
self.message_handler = MessageHandler()
if hasattr(inner, "message_handler"):
- self.message_handler.wrapped.append(inner)
+ self.message_handler.wrapped.append(inner.message_handler)
class LogLevelFilter(BaseHandler):
diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py
index 7bb2e57d417..d0cd7411af0 100644
--- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py
+++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/firefox_android.py
@@ -381,6 +381,9 @@ class FirefoxAndroidBrowser(Browser):
class FirefoxAndroidWdSpecBrowser(FirefoxWdSpecBrowser):
def __init__(self, logger, config=None, device_serial=None, adb_binary=None, **kwargs):
+ if "profile_creator_cls" not in kwargs:
+ kwargs["profile_creator_cls"] = ProfileCreator
+
super().__init__(logger, config=config, **kwargs)
self.config = config
diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/headless_shell.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/headless_shell.py
index b6f7a40f8a9..ccd5620365a 100644
--- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/headless_shell.py
+++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/headless_shell.py
@@ -3,6 +3,7 @@
from .base import require_arg
from .base import get_timeout_multiplier # noqa: F401
from .chrome import ChromeBrowser # noqa: F401
+from .chrome import browser_kwargs as browser_kwargs # noqa: F401
from .chrome import executor_kwargs as chrome_executor_kwargs
from ..executors.base import WdspecExecutor # noqa: F401
from ..executors.executorchrome import ( # noqa: F401
@@ -35,13 +36,6 @@ def check_args(**kwargs):
require_arg(kwargs, "webdriver_binary")
-def browser_kwargs(logger, test_type, run_info_data, config, **kwargs):
- return {"binary": kwargs["binary"],
- "webdriver_binary": kwargs["webdriver_binary"],
- "webdriver_args": kwargs.get("webdriver_args"),
- "debug_info": kwargs["debug_info"]}
-
-
def executor_kwargs(logger, test_type, test_environment, run_info_data, subsuite,
**kwargs):
executor_kwargs = chrome_executor_kwargs(logger, test_type, test_environment, run_info_data,
diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servo.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servo.py
index 266aec8fced..07441780ccc 100644
--- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servo.py
+++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servo.py
@@ -37,11 +37,11 @@ def check_args(**kwargs):
require_arg(kwargs, "binary")
-def browser_kwargs(logger, test_type, run_info_data, config, **kwargs):
+def browser_kwargs(logger, test_type, run_info_data, config, subsuite, **kwargs):
return {
"binary": kwargs["binary"],
"debug_info": kwargs["debug_info"],
- "binary_args": kwargs["binary_args"],
+ "binary_args": kwargs["binary_args"] + subsuite.config.get("binary_args", []),
"user_stylesheets": kwargs.get("user_stylesheets"),
"ca_certificate_path": config.ssl_config["ca_cert_path"],
}
@@ -68,7 +68,7 @@ def env_options():
def update_properties():
- return ["debug", "os", "processor"], {"os": ["version"], "processor": ["bits"]}
+ return ["debug", "os", "processor", "subsuite"], {"os": ["version"], "processor": ["bits"]}
class ServoBrowser(NullBrowser):
diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servodriver.py b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servodriver.py
index 5011a8fd859..f72f2257a38 100644
--- a/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servodriver.py
+++ b/tests/wpt/tests/tools/wptrunner/wptrunner/browsers/servodriver.py
@@ -39,10 +39,10 @@ def check_args(**kwargs):
require_arg(kwargs, "binary")
-def browser_kwargs(logger, test_type, run_info_data, config, **kwargs):
+def browser_kwargs(logger, test_type, run_info_data, config, subsuite, **kwargs):
return {
"binary": kwargs["binary"],
- "binary_args": kwargs["binary_args"],
+ "binary_args": kwargs["binary_args"] + subsuite.config.get("binary_args", []),
"debug_info": kwargs["debug_info"],
"server_config": config,
"user_stylesheets": kwargs.get("user_stylesheets"),
@@ -67,7 +67,7 @@ def env_options():
def update_properties():
- return (["debug", "os", "processor"], {"os": ["version"], "processor": ["bits"]})
+ return (["debug", "os", "processor", "subsuite"], {"os": ["version"], "processor": ["bits"]})
def write_hosts_file(config):
diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py
index 1e588d5bfbf..3284e6c8091 100644
--- a/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py
+++ b/tests/wpt/tests/tools/wptrunner/wptrunner/executors/executorchrome.py
@@ -304,6 +304,10 @@ class ChromeDriverTestharnessExecutor(WebDriverTestharnessExecutor):
test_window = self.protocol.testharness.persistent_test_window = None
if not test_window:
test_window = super().get_or_create_test_window(protocol)
+ if self.reuse_window:
+ self.logger.info(f"Created new test window {test_window}")
+ # Without `--reuse-window`, each testharness test always creates a
+ # new window, so tracing that event is not interesting.
if self.reuse_window:
self.protocol.testharness.persistent_test_window = test_window
return test_window
diff --git a/tests/wpt/tests/tools/wptrunner/wptrunner/testrunner.py b/tests/wpt/tests/tools/wptrunner/wptrunner/testrunner.py
index 19c814bb6c9..be310944fd8 100644
--- a/tests/wpt/tests/tools/wptrunner/wptrunner/testrunner.py
+++ b/tests/wpt/tests/tools/wptrunner/wptrunner/testrunner.py
@@ -313,7 +313,7 @@ class TestSource:
if not self.current_group.group or len(self.current_group.group) == 0:
try:
self.current_group = self.test_queue.get()
- self.logger.debug(f"Got new test group subsuite:{self.current_group[1]} "
+ self.logger.debug(f"Got new test group subsuite:{self.current_group[1]!r} "
f"test_type:{self.current_group[2]}")
except Empty:
return testloader.TestGroup(None, None, None, None)
@@ -473,11 +473,11 @@ class TestRunnerManager(threading.Thread):
if skipped_tests:
self.logger.critical(
- f"Tests left in the queue: {subsuite}:{skipped_tests[0].id!r} "
+ f"Tests left in the queue: {subsuite!r}:{skipped_tests[0].id!r} "
f"and {len(skipped_tests) - 1} others"
)
for test in skipped_tests[1:]:
- self.logger.debug(f"Test left in the queue: {subsuite}:{test.id!r}")
+ self.logger.debug(f"Test left in the queue: {subsuite!r}:{test.id!r}")
force_stop = (not isinstance(self.state, RunnerManagerState.stop) or
self.state.force_stop)
@@ -900,7 +900,7 @@ class TestRunnerManager(threading.Thread):
if test is None:
return RunnerManagerState.stop(force_stop)
if subsuite != self.state.subsuite:
- self.logger.info(f"Restarting browser for new subsuite:{subsuite}")
+ self.logger.info(f"Restarting browser for new subsuite:{subsuite!r}")
restart = True
elif self.restart_on_new_group and test_group is not self.state.test_group:
self.logger.info("Restarting browser for new test group")
diff --git a/tests/wpt/tests/trusted-types/block-text-node-insertion-into-script-element.html b/tests/wpt/tests/trusted-types/block-text-node-insertion-into-script-element.html
index 65b40b933ff..1a1256d05a8 100644
--- a/tests/wpt/tests/trusted-types/block-text-node-insertion-into-script-element.html
+++ b/tests/wpt/tests/trusted-types/block-text-node-insertion-into-script-element.html
@@ -49,12 +49,12 @@
assert_equals(s.text, "");
// Try to insertAdjacentText into the <script>, starting from the <p>
- await checkMessage(_ =>
+ await checkMessage(t, _ =>
p.insertAdjacentText("beforebegin",
"postMessage('beforebegin should be blocked', '*');")
);
assert_true(s.text.includes("postMessage"));
- await checkMessage(_ =>
+ await checkMessage(t, _ =>
p.insertAdjacentText("afterend",
"postMessage('afterend should be blocked', '*');")
);
@@ -74,12 +74,12 @@
container.appendChild(s);
// Try to insertAdjacentText into the <script>, starting from the <p>
- await checkMessage(_ =>
+ await checkMessage(t, _ =>
p.insertAdjacentText("beforebegin",
"postMessage('beforebegin should be blocked', '*');")
);
assert_true(s.textContent.includes("postMessage"));
- await checkMessage(_ =>
+ await checkMessage(t, _ =>
p.insertAdjacentText("afterend",
"postMessage('afterend should be blocked', '*');")
);
@@ -94,7 +94,7 @@
let text = document.createTextNode("postMessage('appendChild with a " +
"text node should be blocked', '*');");
s.appendChild(text);
- await checkMessage(_ => container.appendChild(s));
+ await checkMessage(t, _ => container.appendChild(s));
}, "Regression test: Bypass via appendChild into off-document script element.");
// Variant: Create a <script> element and insert it into the document. Then
@@ -106,7 +106,7 @@
container.appendChild(s);
let text = document.createTextNode("postMessage('appendChild with a live " +
"text node should be blocked', '*');");
- await checkMessage(_ => s.appendChild(text));
+ await checkMessage(t, _ => s.appendChild(text));
}, "Regression test: Bypass via appendChild into live script element.");
promise_test(async t => {
@@ -150,7 +150,7 @@
let text = document.createTextNode("postMessage('default', '*');");
s.appendChild(text);
await no_trusted_type_violation_for(async _ =>
- await checkMessage(_ => container.appendChild(s), 1)
+ await checkMessage(t, _ => container.appendChild(s), 1)
);
assert_array_equals(seenSinks, ["HTMLScriptElement text"]);
}, "Test that default policy applies.");
@@ -158,10 +158,22 @@
promise_test(async t => {
t.add_cleanup(clearSeenSinks);
let s = createScriptElement();
+ s.setAttribute("type", "module")
+ let text = document.createTextNode("postMessage('default', '*');");
+ s.appendChild(text);
+ await no_trusted_type_violation_for(async _ =>
+ await checkMessage(t, _ => container.appendChild(s), 1)
+ );
+ assert_array_equals(seenSinks, ["HTMLScriptElement text"]);
+ }, "Test that default policy applies to module script.");
+
+ promise_test(async t => {
+ t.add_cleanup(clearSeenSinks);
+ let s = createScriptElement();
let text = document.createTextNode("fail");
s.appendChild(text);
await trusted_type_violation_without_exception_for(async _ =>
- await checkMessage(_ => container.appendChild(s), 0)
+ await checkMessage(t, _ => container.appendChild(s), 0)
);
assert_array_equals(seenSinks, ["HTMLScriptElement text"]);
}, "Test a failing default policy.");
diff --git a/tests/wpt/tests/trusted-types/block-text-node-insertion-into-svg-script-element.html b/tests/wpt/tests/trusted-types/block-text-node-insertion-into-svg-script-element.html
index f4ff2435035..18c6af8f5ef 100644
--- a/tests/wpt/tests/trusted-types/block-text-node-insertion-into-svg-script-element.html
+++ b/tests/wpt/tests/trusted-types/block-text-node-insertion-into-svg-script-element.html
@@ -49,12 +49,12 @@
container.appendChild(s);
// Try to insertAdjacentText into the <script>, starting from the <p>
- await checkMessage(_ =>
+ await checkMessage(t, _ =>
p.insertAdjacentText("beforebegin",
"postMessage('beforebegin should be blocked', '*');")
);
assert_true(s.textContent.includes("postMessage"));
- await checkMessage(_ =>
+ await checkMessage(t, _ =>
p.insertAdjacentText("afterend",
"postMessage('afterend should be blocked', '*');")
);
@@ -69,7 +69,7 @@
let text = document.createTextNode("postMessage('appendChild with a " +
"text node should be blocked', '*');");
s.appendChild(text);
- await checkMessage(_ => container.appendChild(s));
+ await checkMessage(t, _ => container.appendChild(s));
}, "Regression test: Bypass via appendChild into off-document script element. svg:script");
// Variant: Create a <script> element and insert it into the document. Then
@@ -81,7 +81,7 @@
container.appendChild(s);
let text = document.createTextNode("postMessage('appendChild with a live " +
"text node should be blocked', '*');");
- await checkMessage(_ => s.appendChild(text));
+ await checkMessage(t, _ => s.appendChild(text));
}, "Regression test: Bypass via appendChild into live script element. svg:script");
promise_test(async t => {
@@ -125,7 +125,7 @@
let text = document.createTextNode("postMessage('default', '*');");
s.appendChild(text);
await no_trusted_type_violation_for(async _ =>
- await checkMessage(_ => container.appendChild(s), 1)
+ await checkMessage(t, _ => container.appendChild(s), 1)
);
assert_array_equals(seenSinks, ["SVGScriptElement text"]);
}, "Test that default policy applies. svg:script");
@@ -133,10 +133,22 @@
promise_test(async t => {
t.add_cleanup(clearSeenSinks);
let s = createScriptElement();
+ s.setAttribute("type", "module");
+ let text = document.createTextNode("postMessage('default', '*');");
+ s.appendChild(text);
+ await no_trusted_type_violation_for(async _ =>
+ await checkMessage(t, _ => container.appendChild(s), 1)
+ );
+ assert_array_equals(seenSinks, ["SVGScriptElement text"]);
+ }, "Test that default policy applies with module script. svg:script");
+
+ promise_test(async t => {
+ t.add_cleanup(clearSeenSinks);
+ let s = createScriptElement();
let text = document.createTextNode("fail");
s.appendChild(text);
await trusted_type_violation_without_exception_for(async _ =>
- await checkMessage(_ => container.appendChild(s), 0)
+ await checkMessage(t, _ => container.appendChild(s), 0)
);
assert_array_equals(seenSinks, ["SVGScriptElement text"]);
}, "Test a failing default policy. svg:script");
diff --git a/tests/wpt/tests/trusted-types/resources/block-text-node-insertion.js b/tests/wpt/tests/trusted-types/resources/block-text-node-insertion.js
index e9797756417..dd85483a44f 100644
--- a/tests/wpt/tests/trusted-types/resources/block-text-node-insertion.js
+++ b/tests/wpt/tests/trusted-types/resources/block-text-node-insertion.js
@@ -14,10 +14,13 @@
// - includes "count": Count these, and later check against expect_count.
// - includes "done": Unregister the event handler and finish the test.
// - all else: Reject, as this is probably an error in the test.
- function checkMessage(fn, expect_count) {
+ function checkMessage(t, fn, expect_count) {
return new Promise((resolve, reject) => {
let count = 0;
globalThis.addEventListener("message", function handler(e) {
+ t.add_cleanup(() => {
+ globalThis.removeEventListener("message", handler);
+ });
if (e.data.includes("block")) {
reject(`'block' received (${e.data})`);
} else if (e.data.includes("count")) {
@@ -35,6 +38,6 @@
}
});
fn();
- postMessage("done", "*");
+ requestAnimationFrame(_ => requestAnimationFrame(_ => postMessage("done", "*")));
});
}
diff --git a/tests/wpt/tests/ua-client-hints/WEB_FEATURES.yml b/tests/wpt/tests/ua-client-hints/WEB_FEATURES.yml
new file mode 100644
index 00000000000..2d331cf4060
--- /dev/null
+++ b/tests/wpt/tests/ua-client-hints/WEB_FEATURES.yml
@@ -0,0 +1,3 @@
+features:
+- name: ua-client-hints
+ files: "**"
diff --git a/tests/wpt/tests/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html b/tests/wpt/tests/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html
deleted file mode 100644
index 2da0a389e2e..00000000000
--- a/tests/wpt/tests/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title> ProcessingInstruction.data and DOMCharacterDataModified event </title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-</head>
-<body>
-<div id=log></div>
-
-<iframe id="helper" style="display: none"></iframe>
-
-<script>
- var description = "Test Description: " +
- "DOMCharacterDataModified event fires after ProcessingInstruction.data have been modified, " +
- "but the node itself has not been inserted or deleted. The proximal event target of this " +
- "event shall be the ProcessingInstruction node.";
-
- var t = async_test(description);
-
- var HELPER = document.getElementById("helper");
-
- HELPER.onload = t.step_func(function()
- {
- assert_true(HELPER.contentWindow.TestResult);
- t.done();
- });
-
- HELPER.src = "./support/ProcessingInstruction.DOMCharacterDataModified.xml";
-</script>
-</body>
-</html>
diff --git a/tests/wpt/tests/uievents/legacy-domevents-tests/approved/domnodeinserted.html b/tests/wpt/tests/uievents/legacy-domevents-tests/approved/domnodeinserted.html
deleted file mode 100644
index e5064d8d46c..00000000000
--- a/tests/wpt/tests/uievents/legacy-domevents-tests/approved/domnodeinserted.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<title>MutationEvent: DOMNodeInserted Event Type</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id=log></div>
-
-<div id="target" style="display: none"></div>
-
-<script>
-var EVENT = "DOMNodeInserted";
-var TARGET;
-var NODE;
-
-var t = async_test("Test Description: DOMNodeInserted event fires when a node has been added as a child of another node.");
-
-TARGET = document.getElementById("target");
-
-TARGET.addEventListener(EVENT, t.step_func(function(evt)
-{
- assert_equals(evt.type, EVENT);
- t.done();
-}), true);
-
-NODE = document.createElement("INPUT");
-TARGET.appendChild(NODE);
-</script>
diff --git a/tests/wpt/tests/urlpattern/resources/urlpattern-generate-test-data.json b/tests/wpt/tests/urlpattern/resources/urlpattern-generate-test-data.json
new file mode 100644
index 00000000000..c118f0a73b5
--- /dev/null
+++ b/tests/wpt/tests/urlpattern/resources/urlpattern-generate-test-data.json
@@ -0,0 +1,116 @@
+[
+ {
+ "pattern": { "pathname": "/foo" },
+ "component": "invalid",
+ "groups": {},
+ "expected": null
+ },
+ {
+ "pattern": { "pathname": "/foo" },
+ "component": "pathname",
+ "groups": {},
+ "expected": "/foo"
+ },
+ {
+ "pattern": { "pathname": "/:foo" },
+ "component": "pathname",
+ "groups": { "foo": "bar" },
+ "expected": "/bar"
+ },
+ {
+ "pattern": { "pathname": "/:foo" },
+ "component": "pathname",
+ "groups": { "foo": "🍅" },
+ "expected": "/%F0%9F%8D%85"
+ },
+ {
+ "pattern": { "hostname": "{:foo}.example.com" },
+ "component": "hostname",
+ "groups": { "foo": "🍅" },
+ "expected": "xn--fi8h.example.com"
+ },
+ {
+ "pattern": { "pathname": "/:foo" },
+ "component": "pathname",
+ "groups": {},
+ "expected": null
+ },
+ {
+ "pattern": { "pathname": "/foo/:bar" },
+ "component": "pathname",
+ "groups": { "bar": "baz" },
+ "expected": "/foo/baz"
+ },
+ {
+ "pattern": { "pathname": "/foo:bar" },
+ "component": "pathname",
+ "groups": { "bar": "baz" },
+ "expected": "/foobaz"
+ },
+ {
+ "pattern": { "pathname": "/:foo/:bar" },
+ "component": "pathname",
+ "groups": { "foo": "baz", "bar": "qux" },
+ "expected": "/baz/qux"
+ },
+ {
+ "pattern": "https://example.com/:foo",
+ "component": "pathname",
+ "groups": { "foo": " " },
+ "expected": "/%20"
+ },
+ {
+ "pattern": "original-scheme://example.com/:foo",
+ "component": "pathname",
+ "groups": { "foo": " " },
+ "expected": "/ "
+ },
+ {
+ "pattern": { "pathname": "/:foo" },
+ "component": "pathname",
+ "groups": { "foo": "bar/baz" },
+ "expected": null
+ },
+ {
+ "pattern": { "pathname": "*" },
+ "component": "pathname",
+ "groups": {},
+ "expected": null
+ },
+ {
+ "pattern": { "pathname": "/{foo}+" },
+ "component": "pathname",
+ "groups": {},
+ "expected": null
+ },
+ {
+ "pattern": { "pathname": "/{foo}?" },
+ "component": "pathname",
+ "groups": {},
+ "expected": null
+ },
+ {
+ "pattern": { "pathname": "/{foo}*" },
+ "component": "pathname",
+ "groups": {},
+ "expected": null
+ },
+ {
+ "pattern": { "pathname": "/(regexp)" },
+ "component": "pathname",
+ "groups": {},
+ "expected": null
+ },
+ {
+ "pattern": { "pathname": "/([^\\/]+?)" },
+ "component": "pathname",
+ "groups": {},
+ "expected": null
+ },
+ {
+ "pattern": { "port": "([^\\:]+?)" },
+ "component": "port",
+ "groups": {},
+ "expected": null
+ }
+]
diff --git a/tests/wpt/tests/urlpattern/urlpattern-generate.tentative.any.js b/tests/wpt/tests/urlpattern/urlpattern-generate.tentative.any.js
new file mode 100644
index 00000000000..1f6962942d8
--- /dev/null
+++ b/tests/wpt/tests/urlpattern/urlpattern-generate.tentative.any.js
@@ -0,0 +1,26 @@
+// META: global=window,worker
+
+function runTests(data) {
+ for (let entry of data) {
+ test(function () {
+ const pattern = new URLPattern(entry.pattern);
+
+ if (entry.expected === null) {
+ assert_throws_js(TypeError, _ => pattern.generate(entry.component, entry.groups),
+ 'generate() should fail with TypeError');
+ return;
+ }
+
+ const result = pattern.generate(entry.component, entry.groups);
+ assert_equals(result, entry.expected);
+ }, `Pattern: ${JSON.stringify(entry.pattern)} ` +
+ `Component: ${entry.component} ` +
+ `Groups: ${JSON.stringify(entry.groups)}`);
+ }
+}
+
+promise_test(async function () {
+ const response = await fetch('resources/urlpattern-generate-test-data.json');
+ const data = await response.json();
+ runTests(data);
+}, 'Loading data...');
diff --git a/tests/wpt/tests/webnn/conformance_tests/cumulative_sum.https.any.js b/tests/wpt/tests/webnn/conformance_tests/cumulative_sum.https.any.js
index 85e1ab427d2..34a625152b2 100644
--- a/tests/wpt/tests/webnn/conformance_tests/cumulative_sum.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/cumulative_sum.https.any.js
@@ -26,13 +26,14 @@ const getCumulativeSumPrecisionTolerance = (graphResources) => {
const axis = args[1][Object.keys(args[1])[0]];
let tolerance = inputShape[axis] - 1;
- const toleranceValueDict = {float32: tolerance, int32: 0};
+ const toleranceValueDict = {float32: tolerance, float16: tolerance, int32: 0};
const expectedDataType =
getExpectedDataTypeOfSingleOutput(graphResources.expectedOutputs);
return {metricType: 'ULP', value: toleranceValueDict[expectedDataType]};
};
const cumulativeSumTests = [
+ // float32 tests
{
'name': 'cumulativeSum with float32 input and default options.',
'graph': {
@@ -51,7 +52,7 @@ const cumulativeSumTests = [
'name': 'cumulativeSum',
'arguments': [
{'input': 'cumulativeSumInput'},
- {'axis': 3},
+ {'axis': 3}
],
'outputs': 'cumulativeSumOutput'
}],
@@ -68,32 +69,41 @@ const cumulativeSumTests = [
}
},
{
- 'name': 'cumulativeSum with int32 input and axis = 2.',
+ 'name': 'cumulativeSum with float32 input and set exclusive to true.',
'graph': {
'inputs': {
'cumulativeSumInput': {
- 'data': [2, 1, 3, 5, 3, 8, 7, 3, 9, 6, 2, 4],
- 'descriptor': {shape: [1, 1, 3, 4], dataType: 'int32'}
+ 'data': [
+ 60.42374038696289, -86.92247772216797, -19.496112823486328,
+ -15.150615692138672, 13.455190658569336, 45.433597564697266,
+ 61.082862854003906, 70.71882629394531, -31.278579711914062,
+ 56.08354187011719, 38.992767333984375, -3.27536940574646
+ ],
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float32'}
}
},
'operators': [{
'name': 'cumulativeSum',
'arguments': [
{'input': 'cumulativeSumInput'},
- {'axis': 2},
+ {'axis': 3},
+ {'options': {'exclusive': true}}
],
'outputs': 'cumulativeSumOutput'
}],
'expectedOutputs': {
'cumulativeSumOutput': {
- 'data': [2, 1, 3, 5, 5, 9, 10, 8, 14, 15, 12, 12],
- 'descriptor': {shape: [1, 1, 3, 4], dataType: 'int32'}
+ 'data': [
+ 0.0, 60.4237404, -26.4987373, -45.994854, 0.0, 13.4551907,
+ 58.8887863, 119.9716568, 0.0, -31.2785797, 24.8049622, 63.7977295
+ ],
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float32'}
}
}
}
},
{
- 'name': 'cumulativeSum with float32 input and set exclusive to true.',
+ 'name': 'cumulativeSum with float32 input and set reversed to true.',
'graph': {
'inputs': {
'cumulativeSumInput': {
@@ -111,56 +121,141 @@ const cumulativeSumTests = [
'arguments': [
{'input': 'cumulativeSumInput'},
{'axis': 3},
- {'options': {'exclusive': true}},
+ {'options': {'reversed': true}}
],
'outputs': 'cumulativeSumOutput'
}],
'expectedOutputs': {
'cumulativeSumOutput': {
'data': [
- 0.0, 60.4237404, -26.4987373, -45.994854, 0.0, 13.4551907,
- 58.8887863, 119.9716568, 0.0, -31.2785797, 24.8049622, 63.7977295
+ -61.1454659, -121.5692139, -34.6467285, -15.1506157, 190.6904907,
+ 177.2352905, 131.8016968, 70.7188263, 60.5223618, 91.8009415,
+ 35.7173996, -3.2753694
],
'descriptor': {shape: [1, 1, 3, 4], dataType: 'float32'}
}
}
}
},
+
+ // float16 tests
{
- 'name': 'cumulativeSum with float32 input and set reversed to true.',
+ 'name': 'cumulativeSum with float16 input and default options.',
'graph': {
'inputs': {
'cumulativeSumInput': {
'data': [
- 60.42374038696289, -86.92247772216797, -19.496112823486328,
- -15.150615692138672, 13.455190658569336, 45.433597564697266,
- 61.082862854003906, 70.71882629394531, -31.278579711914062,
- 56.08354187011719, 38.992767333984375, -3.27536940574646
+ 60.4375, -86.9375, -19.5, -15.1484375, 13.453125, 45.4375, 61.09375,
+ 70.75, -31.28125, 56.09375, 39, -3.275390625
],
- 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float32'}
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'cumulativeSum',
+ 'arguments': [{'input': 'cumulativeSumInput'}, {'axis': 3}],
+ 'outputs': 'cumulativeSumOutput'
+ }],
+ 'expectedOutputs': {
+ 'cumulativeSumOutput': {
+ 'data': [
+ 60.4375, -26.5, -46, -61.15625, 13.453125, 58.875, 120, 190.75,
+ -31.28125, 24.8125, 63.8125, 60.53125
+ ],
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'cumulativeSum with float16 input and set exclusive to true.',
+ 'graph': {
+ 'inputs': {
+ 'cumulativeSumInput': {
+ 'data': [
+ 60.4375, -86.9375, -19.5, -15.1484375, 13.453125, 45.4375, 61.09375,
+ 70.75, -31.28125, 56.09375, 39, -3.275390625
+ ],
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float16'}
}
},
'operators': [{
'name': 'cumulativeSum',
'arguments': [
- {'input': 'cumulativeSumInput'},
- {'axis': 3},
- {'options': {'reversed': true}},
+ {'input': 'cumulativeSumInput'}, {'axis': 3},
+ {'options': {'exclusive': true}}
],
'outputs': 'cumulativeSumOutput'
}],
'expectedOutputs': {
'cumulativeSumOutput': {
'data': [
- -61.1454659, -121.5692139, -34.6467285, -15.1506157, 190.6904907,
- 177.2352905, 131.8016968, 70.7188263, 60.5223618, 91.8009415,
- 35.7173996, -3.2753694
+ 0, 60.4375, -26.5, -46, 0, 13.453125, 58.875, 120, 0, -31.28125,
+ 24.8125, 63.8125
],
- 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float32'}
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float16'}
}
}
}
},
+ {
+ 'name': 'cumulativeSum with float16 input and set reversed to true.',
+ 'graph': {
+ 'inputs': {
+ 'cumulativeSumInput': {
+ 'data': [
+ 60.4375, -86.9375, -19.5, -15.1484375, 13.453125, 45.4375, 61.09375,
+ 70.75, -31.28125, 56.09375, 39, -3.275390625
+ ],
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'cumulativeSum',
+ 'arguments': [
+ {'input': 'cumulativeSumInput'}, {'axis': 3},
+ {'options': {'reversed': true}}
+ ],
+ 'outputs': 'cumulativeSumOutput'
+ }],
+ 'expectedOutputs': {
+ 'cumulativeSumOutput': {
+ 'data': [
+ -61.15625, -121.5625, -34.65625, -15.1484375, 190.75, 177.25,
+ 131.875, 70.75, 60.53125, 91.8125, 35.71875, -3.275390625
+ ],
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'float16'}
+ }
+ }
+ }
+ },
+
+ // int32 tests
+ {
+ 'name': 'cumulativeSum with int32 input and axis = 2.',
+ 'graph': {
+ 'inputs': {
+ 'cumulativeSumInput': {
+ 'data': [2, 1, 3, 5, 3, 8, 7, 3, 9, 6, 2, 4],
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'int32'}
+ }
+ },
+ 'operators': [{
+ 'name': 'cumulativeSum',
+ 'arguments': [
+ {'input': 'cumulativeSumInput'},
+ {'axis': 2}
+ ],
+ 'outputs': 'cumulativeSumOutput'
+ }],
+ 'expectedOutputs': {
+ 'cumulativeSumOutput': {
+ 'data': [2, 1, 3, 5, 5, 9, 10, 8, 14, 15, 12, 12],
+ 'descriptor': {shape: [1, 1, 3, 4], dataType: 'int32'}
+ }
+ }
+ }
+ }
];
if (navigator.ml) {
diff --git a/tests/wpt/tests/webnn/conformance_tests/linear.https.any.js b/tests/wpt/tests/webnn/conformance_tests/linear.https.any.js
index 9231aaf9eca..1f13fe170d4 100644
--- a/tests/wpt/tests/webnn/conformance_tests/linear.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/linear.https.any.js
@@ -19,6 +19,7 @@
// MLOperand linear(MLOperand input, optional MLLinearOptions options = {});
const linearTests = [
+ // float32 tests
{
'name': 'linear float32 1D constant tensor default options',
'graph': {
@@ -542,6 +543,474 @@ const linearTests = [
}
}
}
+ },
+
+ // float16 tests
+ {
+ 'name': 'linear float16 1D constant tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [24], dataType: 'float16'},
+ 'constant': true
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [{'input': 'linearInput'}],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [24], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'linear float16 0D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [-1.1220703125],
+ 'descriptor': {shape: [], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [{'input': 'linearInput'}],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [-1.1220703125],
+ 'descriptor': {shape: [], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'linear float16 1D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [24], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [{'input': 'linearInput'}],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [24], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'linear float16 2D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [4, 6], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [{'input': 'linearInput'}],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [4, 6], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'linear float16 3D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [2, 3, 4], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [{'input': 'linearInput'}],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [2, 3, 4], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'linear float16 4D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [{'input': 'linearInput'}],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'linear float16 5D tensor default options',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [2, 1, 4, 1, 3], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [{'input': 'linearInput'}],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [2, 1, 4, 1, 3], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'linear float16 4D tensor specified options.alpha and default options.beta',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -1.1220703125, -6.60546875, -1.955078125, -4.59765625,
+ 4.234375, 3.09765625, 3.74609375, -4.48828125,
+ 6.40625, -4.35546875, -5.8203125, 3.720703125,
+ -6.33203125, 8.578125, -6.765625, 6.43359375,
+ -9.7109375, 2.642578125, 5.21484375, 9.65625,
+ -8.71875, -0.453369140625, 9.9921875, -6.46875
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [
+ {'input': 'linearInput'}, {'options': {'alpha': 7.398793812746618}}
+ ],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -8.3046875, -48.875, -14.46875, -34.03125, 31.328125,
+ 22.921875, 27.71875, -33.21875, 47.40625, -32.21875,
+ -43.0625, 27.53125, -46.84375, 63.46875, -50.0625,
+ 47.59375, -71.875, 19.546875, 38.59375, 71.4375,
+ -64.5, -3.353515625, 73.9375, -47.875
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'linear float16 positive 4D tensor specified positive options.beta and default options.alpha',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ 5.09765625, 3.380859375, 8.0546875, 8.078125, 0.470703125,
+ 5.2421875, 3.828125, 5.37109375, 6.1015625, 3.75,
+ 0.748046875, 1.8935546875, 1.9052734375, 7.86328125, 4.58203125,
+ 9.375, 6.5859375, 9.34375, 5.16015625, 0.80615234375,
+ 9.1328125, 3.193359375, 5.75, 4.11328125
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [
+ {'input': 'linearInput'}, {'options': {'beta': 5.919095653700928}}
+ ],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ 11.015625, 9.296875, 13.9765625, 14, 6.390625,
+ 11.1640625, 9.75, 11.2890625, 12.0234375, 9.671875,
+ 6.66796875, 7.8125, 7.82421875, 13.78125, 10.5,
+ 15.296875, 12.5078125, 15.265625, 11.078125, 6.7265625,
+ 15.0546875, 9.109375, 11.671875, 10.03125
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'linear float16 negative 4D tensor specified negative options.beta and default options.alpha',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -5.09765625, -3.380859375, -8.0546875, -8.078125,
+ -0.470703125, -5.2421875, -3.828125, -5.37109375,
+ -6.1015625, -3.75, -0.748046875, -1.8935546875,
+ -1.9052734375, -7.86328125, -4.58203125, -9.375,
+ -6.5859375, -9.34375, -5.16015625, -0.80615234375,
+ -9.1328125, -3.193359375, -5.75, -4.11328125
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [
+ {'input': 'linearInput'}, {'options': {'beta': -5.919095653700928}}
+ ],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -11.015625, -9.296875, -13.9765625, -14, -6.390625,
+ -11.1640625, -9.75, -11.2890625, -12.0234375, -9.671875,
+ -6.66796875, -7.8125, -7.82421875, -13.78125, -10.5,
+ -15.296875, -12.5078125, -15.265625, -11.078125, -6.7265625,
+ -15.0546875, -9.109375, -11.671875, -10.03125
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'linear float16 positive 4D tensor all options (positive options.alpha and positive options.beta)',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ 5.09765625, 3.380859375, 8.0546875, 8.078125, 0.470703125,
+ 5.2421875, 3.828125, 5.37109375, 6.1015625, 3.75,
+ 0.748046875, 1.8935546875, 1.9052734375, 7.86328125, 4.58203125,
+ 9.375, 6.5859375, 9.34375, 5.16015625, 0.80615234375,
+ 9.1328125, 3.193359375, 5.75, 4.11328125
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [
+ {'input': 'linearInput'},
+ {'options': {'alpha': 7.398793812746618, 'beta': 5.919095653700928}}
+ ],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ 43.625, 30.9375, 65.5, 65.6875, 9.3984375, 44.71875,
+ 34.25, 45.65625, 51.0625, 33.65625, 11.453125, 19.921875,
+ 20.015625, 64.125, 39.8125, 75.3125, 54.65625, 75.0625,
+ 44.09375, 11.8828125, 73.5, 29.546875, 48.46875, 36.34375
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'linear float16 positive 4D tensor all options (negative options.alpha and negative options.beta)',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ 5.09765625, 3.380859375, 8.0546875, 8.078125, 0.470703125,
+ 5.2421875, 3.828125, 5.37109375, 6.1015625, 3.75,
+ 0.748046875, 1.8935546875, 1.9052734375, 7.86328125, 4.58203125,
+ 9.375, 6.5859375, 9.34375, 5.16015625, 0.80615234375,
+ 9.1328125, 3.193359375, 5.75, 4.11328125
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [
+ {'input': 'linearInput'},
+ {'options': {'alpha': -7.398793812746618, 'beta': -5.919095653700928}}
+ ],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -43.625, -30.9375, -65.5, -65.6875, -9.3984375,
+ -44.71875, -34.25, -45.65625, -51.0625, -33.65625,
+ -11.453125, -19.921875, -20.015625, -64.125, -39.8125,
+ -75.3125, -54.65625, -75.0625, -44.09375, -11.8828125,
+ -73.5, -29.546875, -48.46875, -36.34375
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ }
+ }
+ },
+ {
+ 'name':
+ 'linear float16 negative 4D tensor all options (positive options.alpha and negative options.beta)',
+ 'graph': {
+ 'inputs': {
+ 'linearInput': {
+ 'data': [
+ -5.09765625, -3.380859375, -8.0546875, -8.078125,
+ -0.470703125, -5.2421875, -3.828125, -5.37109375,
+ -6.1015625, -3.75, -0.748046875, -1.8935546875,
+ -1.9052734375, -7.86328125, -4.58203125, -9.375,
+ -6.5859375, -9.34375, -5.16015625, -0.80615234375,
+ -9.1328125, -3.193359375, -5.75, -4.11328125
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ },
+ 'operators': [{
+ 'name': 'linear',
+ 'arguments': [
+ {'input': 'linearInput'},
+ {'options': {'alpha': 7.398793812746618, 'beta': -5.919095653700928}}
+ ],
+ 'outputs': 'linearOutput'
+ }],
+ 'expectedOutputs': {
+ 'linearOutput': {
+ 'data': [
+ -43.625, -30.9375, -65.5, -65.6875, -9.3984375,
+ -44.71875, -34.25, -45.65625, -51.0625, -33.65625,
+ -11.453125, -19.921875, -20.015625, -64.125, -39.8125,
+ -75.3125, -54.65625, -75.0625, -44.09375, -11.8828125,
+ -73.5, -29.546875, -48.46875, -36.34375
+ ],
+ 'descriptor': {shape: [2, 2, 2, 3], dataType: 'float16'}
+ }
+ }
+ }
}
];
diff --git a/tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js b/tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js
index ac384c917b3..996a6b472c5 100644
--- a/tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/qdq_subgraph.https.any.js
@@ -141,6 +141,283 @@ const subgraphTests = [
}
},
{
+ 'name': 'dequantizeLinear -> conv2d -> clamp -> quantizeLinear',
+ 'graph': {
+ 'inputs': {
+ 'input': {
+ 'data': [0.05605664849281311, 0.7114229798316956, 0.6529743671417236],
+ 'descriptor': {shape: [1, 1, 1, 3], dataType: 'float32'},
+ 'constant': false
+ },
+ 'inputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'inputZeroPoint': {
+ 'data': [-128],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'filter': {
+ 'data': [2, 3, 4],
+ 'descriptor': {shape: [1, 1, 1, 3], dataType: 'int8'},
+ 'constant': true
+ },
+ 'filterScale': {
+ 'data': [0.023458752938762234],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'filterZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'bias': {
+ 'data': [1],
+ 'descriptor': {shape: [1], dataType: 'int32'},
+ 'constant': true
+ },
+ 'biasScale': {
+ 'data': [0.000091995115004270],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'biasZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int32'},
+ 'constant': true
+ },
+ 'outputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'outputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ },
+ 'operators': [
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'input'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'quantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedInput'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'dequantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'filter'},
+ {'scale': 'filterScale', 'zeroPoint': 'filterZeroPoint'}
+ ],
+ 'outputs': 'dequantizedFilter'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'bias'},
+ {'scale': 'biasScale', 'zeroPoint': 'biasZeroPoint'}
+ ],
+ 'outputs': 'dequantizedBias'
+ },
+ {
+ 'name': 'conv2d',
+ 'arguments': [
+ {'input': 'dequantizedInput'}, {'filter': 'dequantizedFilter'}, {
+ 'options': {
+ 'inputLayout': 'nhwc',
+ 'bias': 'dequantizedBias',
+ 'filterLayout': 'ohwi'
+ }
+ }
+ ],
+ 'outputs': 'conv2dOutput'
+ },
+ {
+ 'name': 'clamp',
+ 'arguments': [
+ {'input': 'conv2dOutput'},
+ {'options': {'minValue': 0, 'maxValue': 6}}
+ ],
+ 'outputs': 'clampOutput'
+ },
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'clampOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'quantizedClampOutput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedClampOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'output'
+ }
+ ],
+ 'expectedOutputs': {
+ 'output': {
+ 'data': [0.11372549831867218],
+ 'descriptor': {shape: [1, 1, 1, 1], dataType: 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'dequantizeLinear -> conv2d -> relu -> quantizeLinear',
+ 'graph': {
+ 'inputs': {
+ 'input': {
+ 'data': [0.05605664849281311, 0.7114229798316956, 0.6529743671417236],
+ 'descriptor': {shape: [1, 1, 1, 3], dataType: 'float32'},
+ 'constant': false
+ },
+ 'inputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'inputZeroPoint': {
+ 'data': [-128],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'filter': {
+ 'data': [2, 3, 4],
+ 'descriptor': {shape: [1, 1, 1, 3], dataType: 'int8'},
+ 'constant': true
+ },
+ 'filterScale': {
+ 'data': [0.7114229798316956],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'filterZeroPoint': {
+ 'data': [-128],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'bias': {
+ 'data': [1],
+ 'descriptor': {shape: [1], dataType: 'int32'},
+ 'constant': true
+ },
+ 'biasScale': {
+ 'data': [0.000091995115004270],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'biasZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int32'},
+ 'constant': true
+ },
+ 'outputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'outputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ },
+ 'operators': [
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'input'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'quantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedInput'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'dequantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'filter'},
+ {'scale': 'filterScale', 'zeroPoint': 'filterZeroPoint'}
+ ],
+ 'outputs': 'dequantizedFilter'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'bias'},
+ {'scale': 'biasScale', 'zeroPoint': 'biasZeroPoint'}
+ ],
+ 'outputs': 'dequantizedBias'
+ },
+ {
+ 'name': 'conv2d',
+ 'arguments': [
+ {'input': 'dequantizedInput'}, {'filter': 'dequantizedFilter'}, {
+ 'options': {
+ 'inputLayout': 'nhwc',
+ 'bias': 'dequantizedBias',
+ 'filterLayout': 'ohwi'
+ }
+ }
+ ],
+ 'outputs': 'conv2dOutput'
+ },
+ {
+ 'name': 'relu',
+ 'arguments': [
+ {'input': 'conv2dOutput'}
+ ],
+ 'outputs': 'reluOutput'
+ },
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'reluOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'quantizedReluOutput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedReluOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'output'
+ }
+ ],
+ 'expectedOutputs': {
+ 'output': {
+ 'data': [0.49803924560546875],
+ 'descriptor': {shape: [1, 1, 1, 1], dataType: 'float32'}
+ }
+ }
+ }
+ },
+ {
'name': 'quantized element-wise binary add',
'graph': {
'inputs': {
@@ -1846,6 +2123,423 @@ const subgraphTests = [
}
}
},
+ {
+ 'name': 'quantized reduceMax',
+ 'graph': {
+ 'inputs': {
+ 'input': {
+ 'data': [
+ 1.6811466217041016, 0.0479511022567749, 0.33355462551116943,
+ -0.1988269537687301, -0.0041167140007019, -0.0634240251779556,
+ ],
+ 'descriptor': {shape: [2, 3], dataType: 'float32'},
+ 'constant': false
+ },
+ 'inputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'inputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'outputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'outputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ },
+ 'operators': [
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'input'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'quantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedInput'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'dequantizedInput'
+ },
+ {
+ 'name': 'reduceMax',
+ 'arguments': [{'input': 'dequantizedInput'}, {'options': {'axes': [1]}}],
+ 'outputs': 'reduceMaxOutput'
+ },
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'reduceMaxOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'quantizedReduceMaxOutput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedReduceMaxOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'output'
+ }
+ ],
+ 'expectedOutputs': {
+ 'output': {
+ 'data': [
+ 0.49803924560546875, -0.003921568859368563,
+ ],
+ 'descriptor': {shape: [2], dataType: 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'quantized reduceMin',
+ 'graph': {
+ 'inputs': {
+ 'input': {
+ 'data': [
+ 1.6811466217041016, 0.0479511022567749, 0.33355462551116943,
+ -0.1988269537687301, -0.0041167140007019, -0.0634240251779556,
+ ],
+ 'descriptor': {shape: [2, 3], dataType: 'float32'},
+ 'constant': false
+ },
+ 'inputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'inputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'outputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'outputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ },
+ 'operators': [
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'input'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'quantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedInput'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'dequantizedInput'
+ },
+ {
+ 'name': 'reduceMin',
+ 'arguments': [{'input': 'dequantizedInput'}, {'options': {'axes': [1]}}],
+ 'outputs': 'reduceMinOutput'
+ },
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'reduceMinOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'quantizedReduceMinOutput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedReduceMinOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'output'
+ }
+ ],
+ 'expectedOutputs': {
+ 'output': {
+ 'data': [
+ 0.0470588281750679, -0.20000001788139343,
+ ],
+ 'descriptor': {shape: [2], dataType: 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'quantized reduceMean',
+ 'graph': {
+ 'inputs': {
+ 'input': {
+ 'data': [
+ 1.6811466217041016, 0.0479511022567749, 0.33355462551116943,
+ -0.1988269537687301, -0.0041167140007019, -0.0634240251779556,
+ ],
+ 'descriptor': {shape: [2, 3], dataType: 'float32'},
+ 'constant': false
+ },
+ 'inputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'inputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'outputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'outputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ },
+ 'operators': [
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'input'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'quantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedInput'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'dequantizedInput'
+ },
+ {
+ 'name': 'reduceMean',
+ 'arguments': [{'input': 'dequantizedInput'}, {'options': {'axes': [1]}}],
+ 'outputs': 'reduceMeanOutput'
+ },
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'reduceMeanOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'quantizedReduceMeanOutput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedReduceMeanOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'output'
+ }
+ ],
+ 'expectedOutputs': {
+ 'output': {
+ 'data': [
+ 0.29411765933036804, -0.09019608050584793,
+ ],
+ 'descriptor': {shape: [2], dataType: 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'quantized reduceSum',
+ 'graph': {
+ 'inputs': {
+ 'input': {
+ 'data': [
+ 1.6811466217041016, 0.0479511022567749, 0.33355462551116943,
+ -0.1988269537687301, -0.0041167140007019, -0.0634240251779556,
+ ],
+ 'descriptor': {shape: [2, 3], dataType: 'float32'},
+ 'constant': false
+ },
+ 'inputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'inputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'outputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'outputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ },
+ 'operators': [
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'input'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'quantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedInput'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'dequantizedInput'
+ },
+ {
+ 'name': 'reduceSum',
+ 'arguments': [{'input': 'dequantizedInput'}, {'options': {'axes': [1]}}],
+ 'outputs': 'reduceSumOutput'
+ },
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'reduceSumOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'quantizedReduceSumOutput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedReduceSumOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'output'
+ }
+ ],
+ 'expectedOutputs': {
+ 'output': {
+ 'data': [
+ 0.49803924560546875, -0.2666666805744171,
+ ],
+ 'descriptor': {shape: [2], dataType: 'float32'}
+ }
+ }
+ }
+ },
+ {
+ 'name': 'quantized resample2d',
+ 'graph': {
+ 'inputs': {
+ 'input': {
+ 'data': [
+ 1.6811466217041016, 0.0479511022567749, 0.33355462551116943,
+ -0.1988269537687301, -0.0041167140007019, -0.0634240251779556,
+ ],
+ 'descriptor': {shape: [1, 2, 3, 1], dataType: 'float32'},
+ 'constant': false
+ },
+ 'inputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'inputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ 'outputScale': {
+ 'data': [0.003921568859368563],
+ 'descriptor': {shape: [1], dataType: 'float32'},
+ 'constant': true
+ },
+ 'outputZeroPoint': {
+ 'data': [0],
+ 'descriptor': {shape: [1], dataType: 'int8'},
+ 'constant': true
+ },
+ },
+ 'operators': [
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'input'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'quantizedInput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedInput'},
+ {'scale': 'inputScale', 'zeroPoint': 'inputZeroPoint'}
+ ],
+ 'outputs': 'dequantizedInput'
+ },
+ {
+ 'name': 'resample2d',
+ 'arguments': [{'input': 'dequantizedInput'}, {'options': {'sizes': [4, 6], 'axes': [1, 2]}}],
+ 'outputs': 'resample2dOutput'
+ },
+ {
+ 'name': 'quantizeLinear',
+ 'arguments': [
+ {'input': 'resample2dOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'quantizedResample2dOutput'
+ },
+ {
+ 'name': 'dequantizeLinear',
+ 'arguments': [
+ {'input': 'quantizedResample2dOutput'},
+ {'scale': 'outputScale', 'zeroPoint': 'outputZeroPoint'}
+ ],
+ 'outputs': 'output'
+ }
+ ],
+ 'expectedOutputs': {
+ 'output': {
+ 'data': [
+ 0.49803924560546875, 0.49803924560546875, 0.0470588281750679,
+ 0.0470588281750679, 0.3333333432674408, 0.3333333432674408,
+ 0.49803924560546875, 0.49803924560546875, 0.0470588281750679,
+ 0.0470588281750679, 0.3333333432674408, 0.3333333432674408,
+ -0.20000001788139343, -0.20000001788139343, -0.003921568859368563,
+ -0.003921568859368563, -0.062745101749897, -0.062745101749897,
+ -0.20000001788139343, -0.20000001788139343, -0.003921568859368563,
+ -0.003921568859368563, -0.062745101749897, -0.062745101749897,
+ ],
+ 'descriptor': {shape: [1, 4, 6, 1], dataType: 'float32'}
+ }
+ }
+ }
+ },
];
if (navigator.ml) {
diff --git a/tests/wpt/tests/webnn/conformance_tests/subgraph.https.any.js b/tests/wpt/tests/webnn/conformance_tests/subgraph.https.any.js
index 9b21d6e4f94..8a0b7faa92f 100644
--- a/tests/wpt/tests/webnn/conformance_tests/subgraph.https.any.js
+++ b/tests/wpt/tests/webnn/conformance_tests/subgraph.https.any.js
@@ -2523,6 +2523,45 @@ const subgraphTests = [
}
}
},
+ {
+ 'name': 'float16 graph with float32 input and output',
+ 'graph': {
+ 'inputs': {
+ 'input': {
+ 'data': [1, 2, 3, 4],
+ 'descriptor': {shape: [4], dataType: 'float32'}
+ },
+ 'weight': {
+ 'data': [2],
+ 'descriptor': {shape: [], dataType: 'float16'},
+ 'constant': true
+ }
+ },
+ 'operators': [
+ {
+ 'name': 'cast',
+ 'arguments': [{'input': 'input'}, {'type': 'float16'}],
+ 'outputs': 'castOutput',
+ },
+ {
+ 'name': 'add',
+ 'arguments': [{'a': 'castOutput'}, {'b': 'weight'}],
+ 'outputs': 'addOutput'
+ },
+ {
+ 'name': 'cast',
+ 'arguments': [{'input': 'addOutput'}, {'type': 'float32'}],
+ 'outputs': 'output'
+ },
+ ],
+ 'expectedOutputs': {
+ 'output': {
+ 'data': [3, 4, 5, 6],
+ 'descriptor': {shape: [4], dataType: 'float32'}
+ }
+ }
+ }
+ },
];
if (navigator.ml) {
diff --git a/tests/wpt/tests/webrtc-encoded-transform/tentative/RTCEncodedAudioFrame-metadata.https.html b/tests/wpt/tests/webrtc-encoded-transform/tentative/RTCEncodedAudioFrame-metadata.https.html
index df4577c5614..1e148fe1b29 100644
--- a/tests/wpt/tests/webrtc-encoded-transform/tentative/RTCEncodedAudioFrame-metadata.https.html
+++ b/tests/wpt/tests/webrtc-encoded-transform/tentative/RTCEncodedAudioFrame-metadata.https.html
@@ -8,6 +8,7 @@
<script src='../../mediacapture-streams/permission-helper.js'></script>
<script src="../../webrtc/RTCPeerConnection-helper.js"></script>
<script src="../../service-workers/service-worker/resources/test-helpers.sub.js"></script>
+<script src='RTCEncodedFrame-timestamps-helper.js'></script>
<script>
"use strict";
@@ -130,4 +131,56 @@ promise_test(async t => {
return framesReceivedCorrectly;
}, "Constructing audio frame with bad metadata argument before sending does not work");
+
+promise_test(async t => {
+ const kCaptureTime = 12345;
+ const pc1 = new RTCPeerConnection({encodedInsertableStreams:true});
+ t.add_cleanup(() => pc1.close());
+ const pc2 = new RTCPeerConnection({encodedInsertableStreams:true});
+ t.add_cleanup(() => pc2.close());
+
+ exchangeIceCandidates(pc1, pc2);
+
+ let numFrames = 0;
+ let audioLevelRead = new Promise((resolve, reject) => {
+ pc2.ontrack = t.step_func(e => {
+ const receiverTransformer = new TransformStream({
+ async transform(encodedFrame, controller) {
+ const metadata = encodedFrame.getMetadata();
+ if (metadata.captureTime < kCaptureTime - 1 || metadata.captureTime > kCaptureTime + 1) {
+ reject("Unexpected captureTime");
+ }
+ controller.enqueue(encodedFrame);
+ if (++numFrames == 10)
+ resolve();
+ }
+ });
+ const receiverStreams = e.receiver.createEncodedStreams();
+ receiverStreams.readable
+ .pipeThrough(receiverTransformer)
+ .pipeTo(receiverStreams.writable);
+ });
+ });
+
+ const stream = await navigator.mediaDevices.getUserMedia({audio:true});
+ t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
+ const sender = pc1.addTrack(stream.getAudioTracks()[0]);
+ const senderStreams = sender.createEncodedStreams();
+ const senderTransformer = new TransformStream({
+ async transform(encodedFrame, controller) {
+ let metadata = encodedFrame.getMetadata();
+ metadata.captureTime = kCaptureTime;
+ controller.enqueue(new RTCEncodedAudioFrame(encodedFrame, {metadata}));
+ }
+ });
+ senderStreams.readable
+ .pipeThrough(senderTransformer)
+ .pipeTo(senderStreams.writable);
+
+ await addAbsCaptureTimeAndExchangeOffer(pc1, pc2);
+ await checkAbsCaptureTimeAndExchangeAnswer(pc1, pc2, true);
+
+ await audioLevelRead;
+}, 'Basic simulcast setup with three spatial layers');
+
</script>
diff --git a/tests/wpt/tests/webrtc/RTCConfiguration-iceServers.html b/tests/wpt/tests/webrtc/RTCConfiguration-iceServers.html
index bc7831361ab..65a6015f52a 100644
--- a/tests/wpt/tests/webrtc/RTCConfiguration-iceServers.html
+++ b/tests/wpt/tests/webrtc/RTCConfiguration-iceServers.html
@@ -34,11 +34,14 @@
DOMString credential;
};
*/
+ // RFC 8489 limits the length of the TURN username to 509 bytes:
+ // https://datatracker.ietf.org/doc/html/rfc8489#section-14.3
+ const kUsernameOfMaxPermittedLength = 'a'.repeat(509);
test(() => {
const pc = new RTCPeerConnection();
assert_array_equals(pc.getConfiguration().iceServers, []);
- }, 'new RTCPeerConnection() should have default configuration.iceServers of undefined');
+ }, 'new RTCPeerConnection() should have default configuration.iceServers of []');
config_test(makePc => {
makePc({});
@@ -181,6 +184,15 @@
}, `with one turns server, one turn server, username, credential should succeed`);
+ config_test(makePc => {
+ assert_equals(kUsernameOfMaxPermittedLength.length, 509);
+ const pc = makePc({ iceServers: [{
+ urls: 'turn:turn.example.net',
+ username: kUsernameOfMaxPermittedLength,
+ credential: 'cred'
+ }] });
+ }, `with a turn server and a username of 509 characters should succeed`);
+
/*
4.3.2. To set a configuration
11.4. If scheme name is turn or turns, and either of server.username or
@@ -232,6 +244,16 @@
}] }));
}, 'with turns server and only credential should throw InvalidAccessError');
+ config_test(makePc => {
+ assert_equals(kUsernameOfMaxPermittedLength.length, 509);
+ assert_throws_dom('InvalidAccessError', () =>
+ makePc({ iceServers: [{
+ urls: 'turns:turn.example.net',
+ username: kUsernameOfMaxPermittedLength + 'a',
+ credential: 'cred'
+ }] }));
+ }, `with a turn server and a username of 510 characters throw InvalidAccessError`);
+
/*
4.3.2. To set a configuration
11.3. For each url in server.urls parse url and obtain scheme name.
@@ -284,6 +306,8 @@
assert_throws_dom("SyntaxError", () =>
makePc({ iceServers: [{
urls: 'turn://example.org/foo?x=y'
+ // `username` and `credential` are not passed because the invalid url
+ // should be rejected before the check for those arguments.
}] }));
}, 'with invalid turn url should throw SyntaxError');
diff --git a/tests/wpt/tests/websockets/stream/tentative/remote-close.any.js b/tests/wpt/tests/websockets/stream/tentative/remote-close.any.js
index b7fd321914a..c3e7ad5f9fb 100644
--- a/tests/wpt/tests/websockets/stream/tentative/remote-close.any.js
+++ b/tests/wpt/tests/websockets/stream/tentative/remote-close.any.js
@@ -48,7 +48,8 @@ promise_test(async t => {
const closedError = await wss.closed.then(t.unreached_func('closed should reject'), e => e);
assert_equals(closedError.constructor, WebSocketError, 'error should be WebSocketError');
assert_equals(closedError.closeCode, 4567, 'closeCode should be set');
- promise_rejects_js(t, WebSocketError, writePromise, 'write() should reject');
+ await promise_rejects_dom(
+ t, 'InvalidStateError', writePromise, 'write() should reject');
}, 'close with unwritten data should not be considered clean');
promise_test(async t => {
diff --git a/tests/wpt/tests/websockets/stream/tentative/write.any.js b/tests/wpt/tests/websockets/stream/tentative/write.any.js
new file mode 100644
index 00000000000..43af7da614c
--- /dev/null
+++ b/tests/wpt/tests/websockets/stream/tentative/write.any.js
@@ -0,0 +1,96 @@
+// META: script=../../constants.sub.js
+// META: script=resources/url-constants.js
+// META: script=/common/gc.js
+// META: global=window,worker
+// META: variant=?default
+// META: variant=?wss
+// META: variant=?wpt_flags=h2
+
+'use strict';
+
+const GOODBYE_MESSAGE = 'Goodbye'; // Must match echo_exit_wsh.py
+
+// This message needs to be large enough that writing it cannot complete
+// synchronously, and to fill up the TCP send buffer and any user agent internal
+// send buffers so that the user agent has to receive the "Close" frame from the
+// server before it can complete sending this message.
+const BIG_MESSAGE_SIZE = 8 * 1024 * 1024;
+
+// Common setup used by two tests. Sends a "Goodbye" message to tell the server
+// to close the WebSocket, and immediately afterwards a big message that cannot
+// be completely sent before the connection closes. Waits for the "Goodbye"
+// message to be sent and the connection to be closed before returning. `t` is
+// the test object provided by promse_test.
+async function sendGoodbyeThenBigMessage(t) {
+ const wss = new WebSocketStream(BASEURL + '/echo_exit');
+ const { writable } = await wss.opened;
+ const writer = writable.getWriter();
+ const bigMessage = new Uint8Array(BIG_MESSAGE_SIZE);
+ const goodbyePromise = writer.write(GOODBYE_MESSAGE);
+ const bigMessagePromise = writer.write(bigMessage);
+ await goodbyePromise;
+ // testharness.js doesn't know about WebSocketError yet.
+ await wss.closed.then(
+ t.unreached_func('closed promise should reject'),
+ e => assert_equals(
+ e.constructor, WebSocketError,
+ 'a WebSocketError should be thrown'));
+ return { writer, bigMessagePromise };
+}
+
+promise_test(async t => {
+ const { writer, bigMessagePromise } = await sendGoodbyeThenBigMessage(t);
+ await promise_rejects_dom(
+ t, 'InvalidStateError', bigMessagePromise,
+ 'write() should reject with an InvalidStateError');
+ const invalidStateError = await bigMessagePromise.then(
+ t.unreached_func('write() promise should reject'), e => e);
+ await promise_rejects_exactly(
+ t, invalidStateError, writer.write('word'),
+ 'stream should be errored with same object');
+}, 'a write that was incomplete at close time should reject');
+
+promise_test(async t => {
+ const { bigMessagePromise } = await sendGoodbyeThenBigMessage(t);
+ // For some reason 5 is the magic number that causes garbage collection to
+ // really really collect garbage.
+ for (let i = 0; i < 5; ++i) {
+ await garbageCollect();
+ }
+ await promise_rejects_dom(
+ t, 'InvalidStateError', bigMessagePromise,
+ 'write() should reject with an InvalidStateError');
+}, 'garbage collection after close with a pending write promise should not ' +
+ 'crash');
+
+promise_test(async t => {
+ const wss = new WebSocketStream(ECHOURL);
+ const { writable } = await wss.opened;
+ const writer = writable.getWriter();
+ const cannotStringify = { toString() { return this; } };
+ await promise_rejects_js(
+ t, TypeError, writer.write(cannotStringify), 'write() should reject');
+}, 'writing a value that cannot be stringified should cause a rejection');
+
+promise_test(async t => {
+ const wss = new WebSocketStream(ECHOURL);
+ const { writable } = await wss.opened;
+ const writer = writable.getWriter();
+ const buffer = new ArrayBuffer(1024, { maxByteLength: 65536 });
+ await promise_rejects_js(
+ t, TypeError, writer.write(buffer), 'write() should reject');
+}, 'writing a resizable ArrayBuffer should be rejected');
+
+promise_test(async t => {
+ const wss = new WebSocketStream(ECHOURL);
+ const { writable } = await wss.opened;
+ const writer = writable.getWriter();
+ const memory = new WebAssembly.Memory({
+ initial: 4096,
+ maximum: 65536,
+ shared: true,
+ });
+ const view = new Uint8Array(memory.buffer);
+ await promise_rejects_js(
+ t, TypeError, writer.write(view), 'write() should reject');
+}, 'writing a view on a shared buffer should be rejected');
diff --git a/tests/wpt/tests/workers/WEB_FEATURES.yml b/tests/wpt/tests/workers/WEB_FEATURES.yml
new file mode 100644
index 00000000000..1687ef742e2
--- /dev/null
+++ b/tests/wpt/tests/workers/WEB_FEATURES.yml
@@ -0,0 +1,6 @@
+features:
+- name: ua-client-hints
+ files:
+ - WorkerNavigator_userAgentData.http.html
+ - WorkerNavigator_userAgentData.https.html
+ - WorkerNavigator_userAgentData.https.tentative.html
diff --git a/tests/wpt/tests/workers/tentative/SharedWorker-extendedLifetime.html b/tests/wpt/tests/workers/tentative/SharedWorker-extendedLifetime.html
new file mode 100644
index 00000000000..3c76eddd764
--- /dev/null
+++ b/tests/wpt/tests/workers/tentative/SharedWorker-extendedLifetime.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<title>SharedWorker extendedLifetime</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script>
+
+let request_id = 0;
+
+const connectToSharedWorker = async () => {
+ await window.pageShowPromise;
+ window.worker = new SharedWorker(
+ '/workers/tentative/resources/shared-worker-memory.js',
+ {extendedLifetime: true});
+ worker.port.start();
+};
+
+const postAndWait = async (data) => {
+ return new Promise(resolve => {
+ const listener = event => {
+ if (event.data.reqid !== data.reqid) {
+ return;
+ }
+ worker.port.removeEventListener('message', listener);
+ resolve(event.data);
+ };
+ worker.port.addEventListener('message', listener);
+ worker.port.postMessage(data);
+ });
+};
+
+promise_test(async t => {
+ // SharedWorker is started with the extendedLifetime option.
+ // random message is stored there, which can be read later.
+ const uuid = token();
+ const ctx = new RemoteContext(token());
+ const popup = window.open(remoteExecutorUrl(ctx.context_id));
+ await ctx.execute_script(connectToSharedWorker);
+ const popup_response = await ctx.execute_script(postAndWait, [{
+ reqid: request_id++,
+ op: 'store',
+ data: uuid,
+ }]);
+ assert_equals(popup_response.status, 'OK');
+ popup.close();
+
+ // Wait for a second.
+ await new Promise(resolve => setTimeout(resolve, 1));
+
+ const ctx2 = new RemoteContext(token());
+ const popup2 = window.open(remoteExecutorUrl(ctx2.context_id));
+ await ctx2.execute_script(connectToSharedWorker);
+ const popup2_response = await ctx2.execute_script(postAndWait, [{
+ reqid: request_id++,
+ op: 'load',
+ }]);
+ assert_equals(popup2_response.status, 'OK');
+ assert_equals(popup2_response.data, uuid);
+}, "SharedWorker lifetime should be extended with extendedLifetime");
+</script>
diff --git a/tests/wpt/tests/workers/tentative/resources/shared-worker-memory.js b/tests/wpt/tests/workers/tentative/resources/shared-worker-memory.js
new file mode 100644
index 00000000000..b1504f38c50
--- /dev/null
+++ b/tests/wpt/tests/workers/tentative/resources/shared-worker-memory.js
@@ -0,0 +1,30 @@
+'use strict';
+
+let stored_data = null;
+
+function processMessage(e) {
+ function respond(data) {
+ e.currentTarget.postMessage(Object.assign(data, {reqid: e.data.reqid}));
+ }
+
+ switch (e.data.op) {
+ case 'load': {
+ respond({ack: 'load', status: 'OK', data: stored_data});
+ break;
+ }
+ case 'store': {
+ try {
+ stored_data = e.data.data
+ } catch (err) {
+ respond({ack: 'store', status: 'ERROR', error: err.name});
+ return;
+ }
+ respond({ack: 'store', status: 'OK'});
+ break;
+ }
+ }
+}
+
+self.addEventListener('connect', e => {
+ e.ports[0].onmessage = processMessage;
+});
diff --git a/tests/wpt/webgl/meta/conformance/textures/misc/tex-video-using-tex-unit-non-zero.html.ini b/tests/wpt/webgl/meta/conformance/textures/misc/tex-video-using-tex-unit-non-zero.html.ini
index 5b9d4a0e1b9..f8ab654ff94 100644
--- a/tests/wpt/webgl/meta/conformance/textures/misc/tex-video-using-tex-unit-non-zero.html.ini
+++ b/tests/wpt/webgl/meta/conformance/textures/misc/tex-video-using-tex-unit-non-zero.html.ini
@@ -3,9 +3,3 @@
expected: TIMEOUT
[Overall test]
expected: NOTRUN
-
- [WebGL test #0]
- expected: FAIL
-
- [WebGL test #1]
- expected: FAIL
diff --git a/tests/wpt/webgl/meta/conformance/textures/misc/texture-srgb-upload.html.ini b/tests/wpt/webgl/meta/conformance/textures/misc/texture-srgb-upload.html.ini
index 4afbf9ef9a0..a3acae77b7a 100644
--- a/tests/wpt/webgl/meta/conformance/textures/misc/texture-srgb-upload.html.ini
+++ b/tests/wpt/webgl/meta/conformance/textures/misc/texture-srgb-upload.html.ini
@@ -1,4 +1,4 @@
[texture-srgb-upload.html]
- expected: TIMEOUT
+ expected: ERROR
[Overall test]
expected: NOTRUN
diff --git a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
index 435cfbe0d5c..e9f1c0ae3f3 100644
--- a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
+++ b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
@@ -13,3 +13,75 @@
[WebGL test #588]
expected: FAIL
+
+ [WebGL test #53]
+ expected: FAIL
+
+ [WebGL test #55]
+ expected: FAIL
+
+ [WebGL test #57]
+ expected: FAIL
+
+ [WebGL test #59]
+ expected: FAIL
+
+ [WebGL test #69]
+ expected: FAIL
+
+ [WebGL test #71]
+ expected: FAIL
+
+ [WebGL test #73]
+ expected: FAIL
+
+ [WebGL test #75]
+ expected: FAIL
+
+ [WebGL test #85]
+ expected: FAIL
+
+ [WebGL test #87]
+ expected: FAIL
+
+ [WebGL test #89]
+ expected: FAIL
+
+ [WebGL test #91]
+ expected: FAIL
+
+ [WebGL test #101]
+ expected: FAIL
+
+ [WebGL test #103]
+ expected: FAIL
+
+ [WebGL test #105]
+ expected: FAIL
+
+ [WebGL test #107]
+ expected: FAIL
+
+ [WebGL test #117]
+ expected: FAIL
+
+ [WebGL test #119]
+ expected: FAIL
+
+ [WebGL test #121]
+ expected: FAIL
+
+ [WebGL test #123]
+ expected: FAIL
+
+ [WebGL test #133]
+ expected: FAIL
+
+ [WebGL test #135]
+ expected: FAIL
+
+ [WebGL test #137]
+ expected: FAIL
+
+ [WebGL test #139]
+ expected: FAIL