aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001v.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002v.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003.html.ini19
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003v.html.ini19
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004.html.ini34
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004v.html.ini34
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005.html.ini43
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005v.html.ini43
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006.html.ini43
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006v.html.ini43
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007v.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/css/selectors/is-where-error-recovery.tentative.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/css/selectors/parsing/is.html.ini19
-rw-r--r--tests/wpt/metadata-layout-2020/css/selectors/parsing/where.html.ini19
-rw-r--r--tests/wpt/metadata-layout-2020/custom-elements/form-associated/form-elements-namedItem.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/connection-pool/network-partition-key.html.ini29
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini17
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini)2
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini48
-rw-r--r--tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini67
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini4
-rw-r--r--tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini3
-rw-r--r--tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini5
-rw-r--r--tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini5
-rw-r--r--tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini2
-rw-r--r--tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini5
-rw-r--r--tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini5
-rw-r--r--tests/wpt/metadata-layout-2020/workers/WorkerGlobalScope-close.html.ini4
-rw-r--r--tests/wpt/metadata/MANIFEST.json851
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini4
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini4
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini4
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001v.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002v.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003.html.ini19
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003v.html.ini19
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004.html.ini34
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004v.html.ini34
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005.html.ini43
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005v.html.ini43
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006.html.ini43
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006v.html.ini43
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007v.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini2
-rw-r--r--tests/wpt/metadata/css/selectors/is-where-error-recovery.tentative.html.ini4
-rw-r--r--tests/wpt/metadata/css/selectors/parsing/is.html.ini19
-rw-r--r--tests/wpt/metadata/css/selectors/parsing/where.html.ini19
-rw-r--r--tests/wpt/metadata/custom-elements/form-associated/form-elements-namedItem.html.ini4
-rw-r--r--tests/wpt/metadata/fetch/connection-pool/network-partition-key.html.ini29
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini17
-rw-r--r--tests/wpt/metadata/fetch/content-type/script.window.js.ini3
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini2
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini (renamed from tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini)2
-rw-r--r--tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini48
-rw-r--r--tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini67
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini4
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini3
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini5
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini5
-rw-r--r--tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini2
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini1
-rw-r--r--tests/wpt/metadata/webmessaging/without-ports/017.html.ini5
-rw-r--r--tests/wpt/metadata/webmessaging/without-ports/018.html.ini5
-rw-r--r--tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini4
-rw-r--r--tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html (renamed from tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html)0
-rw-r--r--tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html.sub.headers (renamed from tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html.sub.headers)0
-rw-r--r--tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html (renamed from tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html)0
-rw-r--r--tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html.sub.headers (renamed from tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html.sub.headers)0
-rw-r--r--tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html (renamed from tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html)0
-rw-r--r--tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html.sub.headers (renamed from tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html.sub.headers)0
-rw-r--r--tests/wpt/web-platform-tests/cookies/samesite/iframe.document.https.html (renamed from tests/wpt/web-platform-tests/cookies/samesite/iframe.document.html)0
-rw-r--r--tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html3
-rw-r--r--tests/wpt/web-platform-tests/credential-management/support/README.md9
-rw-r--r--tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js35
-rw-r--r--tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html3
-rw-r--r--tests/wpt/web-platform-tests/css/css-display/display-math-on-non-mathml-elements.html29
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001.html128
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001v.html131
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002.html128
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002v.html131
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003.html128
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003v.html131
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004.html128
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004v.html131
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005.html130
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005v.html132
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006.html130
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006v.html132
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007.html135
-rw-r--r--tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007v.html137
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container-ref.html59
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container.html61
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-012.html11
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html38
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html140
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html140
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html140
-rw-r--r--tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html140
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-012.tentative.html11
-rw-r--r--tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.tentative.html11
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z.html26
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z.html26
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/is-where-error-recovery.tentative.html54
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html18
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/attribute.html30
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/child.html11
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/class.html15
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/descendant.html13
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/id.html13
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/is.html18
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/not.html17
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/sibling.html12
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/universal.html14
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/parsing/where.html18
-rw-r--r--tests/wpt/web-platform-tests/custom-elements/form-associated/form-elements-namedItem.html30
-rw-r--r--tests/wpt/web-platform-tests/encoding/idlharness.any.js2
-rw-r--r--tests/wpt/web-platform-tests/fetch/connection-pool/network-partition-key.html264
-rw-r--r--tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-checker.html30
-rw-r--r--tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-iframe-checker.html22
-rw-r--r--tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.js47
-rw-r--r--tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.py118
-rw-r--r--tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker-checker.html24
-rw-r--r--tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker.js15
-rw-r--r--tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html36
-rw-r--r--tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe.html27
-rw-r--r--tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html27
-rw-r--r--tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe.html27
-rw-r--r--tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html27
-rw-r--r--tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe.html16
-rw-r--r--tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html27
-rw-r--r--tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe.html16
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html18
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner.html18
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer.sub.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner-contentwindow.html18
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner.html18
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html18
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html18
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html18
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner.html18
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer.html29
-rw-r--r--tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html12
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html2
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html24
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html14
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html4
-rw-r--r--tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html4
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html62
-rw-r--r--tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html138
-rw-r--r--tests/wpt/web-platform-tests/html/dom/elements/images/image.py8
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html21
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp-ref.html5
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp.html8
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html10
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js4
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html10
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html19
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html10
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js4
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html10
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1.html19
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html1
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html1
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html1
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html1
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html1
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html1
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html10
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html10
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html10
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html11
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html33
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs8
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs5
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html2
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html19
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html3
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html14
-rw-r--r--tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html302
-rw-r--r--tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html297
-rw-r--r--tests/wpt/web-platform-tests/interfaces/encoding.idl5
-rw-r--r--tests/wpt/web-platform-tests/interfaces/intersection-observer.idl2
-rw-r--r--tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl4
-rw-r--r--tests/wpt/web-platform-tests/interfaces/streams.idl5
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl4
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/move-distance-clamped.html47
-rw-r--r--tests/wpt/web-platform-tests/layout-instability/visibility-hidden.html24
-rw-r--r--tests/wpt/web-platform-tests/lint.ignore1
-rw-r--r--tests/wpt/web-platform-tests/mathml/crashtests/display-and-column-properties.html30
-rw-r--r--tests/wpt/web-platform-tests/mathml/crashtests/multicol-on-token-elements.html11
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter-ref.html13
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter.html21
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path-ref.html13
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path.html21
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-ref.html13
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/clip.html21
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/display-2.html134
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/transform-ref.html13
-rw-r--r--tests/wpt/web-platform-tests/mathml/relations/css-styling/transform.html21
-rw-r--r--tests/wpt/web-platform-tests/mathml/support/box-comparison.js21
-rw-r--r--tests/wpt/web-platform-tests/network-error-logging/support/report.py4
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/pointerevent_iframe-touch-action-none_touch.html63
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/resources/iframe-touch-action-none-subframe.html26
-rw-r--r--tests/wpt/web-platform-tests/resources/test-only-api.js30
-rw-r--r--tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html55
-rw-r--r--tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html5
-rw-r--r--tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html5
-rw-r--r--tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js37
-rw-r--r--tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html8
-rw-r--r--tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html86
-rw-r--r--tests/wpt/web-platform-tests/tools/certs/cacert.key56
-rw-r--r--tests/wpt/web-platform-tests/tools/certs/cacert.pem36
-rw-r--r--tests/wpt/web-platform-tests/tools/certs/web-platform.test.key52
-rw-r--r--tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem112
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py1
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py48
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py35
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py5
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py1
-rw-r--r--tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html106
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html12
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper-test.html21
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html8
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html199
-rw-r--r--tests/wpt/web-platform-tests/webstorage/set.window.js6
288 files changed, 7770 insertions, 1013 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini
new file mode 100644
index 00000000000..f64b45fea6b
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-002.html]
+ [Hit test float]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini
deleted file mode 100644
index f29da48a2a0..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-003.html]
- [Miss float below something else]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini
deleted file mode 100644
index 4bfb0c2053a..00000000000
--- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-004.html]
- [Miss float below something else]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini
new file mode 100644
index 00000000000..baa9f1a7541
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-005.html]
+ [Miss clipped float]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001.html.ini
new file mode 100644
index 00000000000..286b53b6e31
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-001.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001v.html.ini
new file mode 100644
index 00000000000..3684416f5b5
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001v.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-001v.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002.html.ini
new file mode 100644
index 00000000000..dbe4233a739
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-002.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002v.html.ini
new file mode 100644
index 00000000000..a0b5e69c4be
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002v.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-002v.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003.html.ini
new file mode 100644
index 00000000000..8fde903bd12
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003.html.ini
@@ -0,0 +1,19 @@
+[image-as-flexitem-size-003.html]
+ [.flexbox > img 16]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 12]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003v.html.ini
new file mode 100644
index 00000000000..0865c9cb19c
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003v.html.ini
@@ -0,0 +1,19 @@
+[image-as-flexitem-size-003v.html]
+ [.flexbox > img 16]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 12]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004.html.ini
new file mode 100644
index 00000000000..da649930a95
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004.html.ini
@@ -0,0 +1,34 @@
+[image-as-flexitem-size-004.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004v.html.ini
new file mode 100644
index 00000000000..2a0b3330dc4
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004v.html.ini
@@ -0,0 +1,34 @@
+[image-as-flexitem-size-004v.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005.html.ini
new file mode 100644
index 00000000000..ccc0bc2253a
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005.html.ini
@@ -0,0 +1,43 @@
+[image-as-flexitem-size-005.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 16]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 18]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
+ [.flexbox > img 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005v.html.ini
new file mode 100644
index 00000000000..3ae5a431843
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005v.html.ini
@@ -0,0 +1,43 @@
+[image-as-flexitem-size-005v.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 16]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 18]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
+ [.flexbox > img 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006.html.ini
new file mode 100644
index 00000000000..3dc2eb00fc7
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006.html.ini
@@ -0,0 +1,43 @@
+[image-as-flexitem-size-006.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 14]
+ expected: FAIL
+
+ [.flexbox > img 17]
+ expected: FAIL
+
+ [.flexbox > img 12]
+ expected: FAIL
+
+ [.flexbox > img 18]
+ expected: FAIL
+
+ [.flexbox > img 9]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
+ [.flexbox > img 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006v.html.ini
new file mode 100644
index 00000000000..9eb2855ec46
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006v.html.ini
@@ -0,0 +1,43 @@
+[image-as-flexitem-size-006v.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 14]
+ expected: FAIL
+
+ [.flexbox > img 17]
+ expected: FAIL
+
+ [.flexbox > img 12]
+ expected: FAIL
+
+ [.flexbox > img 18]
+ expected: FAIL
+
+ [.flexbox > img 9]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
+ [.flexbox > img 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007.html.ini
new file mode 100644
index 00000000000..495ce451b17
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-007.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007v.html.ini
new file mode 100644
index 00000000000..416bfb37196
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007v.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-007v.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini
new file mode 100644
index 00000000000..4c79907309b
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini
@@ -0,0 +1,4 @@
+[CaretPosition-001.html]
+ [Element at (400, 100)]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini
new file mode 100644
index 00000000000..e38782d8c85
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini
@@ -0,0 +1,4 @@
+[elementFromPoint-001.html]
+ [CSSOM View - 5 - extensions to the Document interface]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
deleted file mode 100644
index e181af5397f..00000000000
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[elementsFromPoint-invalid-cases.html]
- [The root element is the last element returned for otherwise empty queries within the viewport]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini
deleted file mode 100644
index e6e1f29e274..00000000000
--- a/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[matchMedia-display-none-iframe.html]
- expected: ERROR
diff --git a/tests/wpt/metadata-layout-2020/css/selectors/is-where-error-recovery.tentative.html.ini b/tests/wpt/metadata-layout-2020/css/selectors/is-where-error-recovery.tentative.html.ini
new file mode 100644
index 00000000000..fb4b13050d0
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/selectors/is-where-error-recovery.tentative.html.ini
@@ -0,0 +1,4 @@
+[is-where-error-recovery.tentative.html]
+ [CSS Selectors: :is() and :where() error recovery]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/selectors/parsing/is.html.ini b/tests/wpt/metadata-layout-2020/css/selectors/parsing/is.html.ini
new file mode 100644
index 00000000000..941fc56bf74
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/selectors/parsing/is.html.ini
@@ -0,0 +1,19 @@
+[is.html]
+ [":is(#a)" should be a valid selector]
+ expected: FAIL
+
+ [".a.b ~ :is(.c.d ~ .e.f)" should be a valid selector]
+ expected: FAIL
+
+ [".a.b ~ .c.d:is(span.e + .f, .g.h > .i.j .k)" should be a valid selector]
+ expected: FAIL
+
+ [":is(:hover,:focus)" should be a valid selector]
+ expected: FAIL
+
+ ["a:is(:not(:hover))" should be a valid selector]
+ expected: FAIL
+
+ [":is(ul,ol,.list) > [hidden\]" should be a valid selector]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/css/selectors/parsing/where.html.ini b/tests/wpt/metadata-layout-2020/css/selectors/parsing/where.html.ini
new file mode 100644
index 00000000000..188d18b9618
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/css/selectors/parsing/where.html.ini
@@ -0,0 +1,19 @@
+[where.html]
+ [":where(#a)" should be a valid selector]
+ expected: FAIL
+
+ [":where(:hover,:focus)" should be a valid selector]
+ expected: FAIL
+
+ [".a.b ~ .c.d:where(span.e + .f, .g.h > .i.j .k)" should be a valid selector]
+ expected: FAIL
+
+ [":where(ul,ol,.list) > [hidden\]" should be a valid selector]
+ expected: FAIL
+
+ ["a:where(:not(:hover))" should be a valid selector]
+ expected: FAIL
+
+ [".a.b ~ :where(.c.d ~ .e.f)" should be a valid selector]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/custom-elements/form-associated/form-elements-namedItem.html.ini b/tests/wpt/metadata-layout-2020/custom-elements/form-associated/form-elements-namedItem.html.ini
new file mode 100644
index 00000000000..68ebf17de8b
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/custom-elements/form-associated/form-elements-namedItem.html.ini
@@ -0,0 +1,4 @@
+[form-elements-namedItem.html]
+ [Form associated custom elements should work with document.forms.elements.namedItem()]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/fetch/connection-pool/network-partition-key.html.ini b/tests/wpt/metadata-layout-2020/fetch/connection-pool/network-partition-key.html.ini
new file mode 100644
index 00000000000..890d1fb5747
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/fetch/connection-pool/network-partition-key.html.ini
@@ -0,0 +1,29 @@
+[network-partition-key.html]
+ expected: TIMEOUT
+ [Iframes]
+ expected: FAIL
+
+ [CSP sandbox]
+ expected: NOTRUN
+
+ [Workers]
+ expected: TIMEOUT
+
+ [Cross-site resources without credentials]
+ expected: FAIL
+
+ [about:blank from opaque origin iframe]
+ expected: NOTRUN
+
+ [Without credentials]
+ expected: FAIL
+
+ [Workers with cross-site resources]
+ expected: NOTRUN
+
+ [Cross-site resources with credentials]
+ expected: FAIL
+
+ [With credentials]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
index 449b7d8c20f..116edd217dc 100644
--- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini
@@ -315,27 +315,24 @@
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
- expected: FAIL
-
- [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html */*]
+ [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
+ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*]
+ [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
+ [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
index 5c001592859..d2df9b78483 100644
--- a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini
@@ -56,6 +56,3 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript;charset=windows-1252 error text/javascript]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
index aa6eb8f6085..58de838d890 100644
--- a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,6 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
- [X-Content-Type-Options%3A%20'NosniFF']
+ [X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+ [Multiple history traversals from the same task]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
index dc2e45516de..385376c7321 100644
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_5.html]
+[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini
index 48dca82e3c0..5846438f1ec 100644
--- a/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini
@@ -11,9 +11,6 @@
[Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_DisplayP3_opaque.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_sRGB_transparent.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_interlaced_DisplayP3_transparent.png]
expected: FAIL
@@ -29,12 +26,6 @@
[Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_DisplayP3_transparent.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_interlaced_DisplayP3_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_opaque.png vs 2x2_16bit_ProPhoto_opaque.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_Rec2020_transparent.png]
expected: FAIL
@@ -44,9 +35,6 @@
[Canvas color params: srgb, uint8. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_interlaced_AdobeRGB_opaque.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_transparent.png vs 2x2_16bit_interlaced_ProPhoto_transparent.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_interlaced_Rec2020_transparent.png]
expected: FAIL
@@ -59,45 +47,18 @@
[Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_transparent.png vs 2x2_16bit_interlaced_AdobeRGB_transparent.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_interlaced_sRGB_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_interlaced_DisplayP3_transparent.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_sRGB_opaque.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_interlaced_AdobeRGB_opaque.png]
expected: FAIL
[Canvas color params: srgb, uint8. Testing 2x2_8bit_AdobeRGB_transparent.png vs 2x2_16bit_AdobeRGB_transparent.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_interlaced_Rec2020_opaque.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_interlaced_Rec2020_opaque.png]
expected: FAIL
[Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_interlaced_DisplayP3_opaque.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_interlaced_Rec2020_transparent.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_transparent.png vs 2x2_16bit_ProPhoto_transparent.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_DisplayP3_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_Rec2020_transparent.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_DisplayP3_transparent.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_sRGB_transparent.png]
expected: FAIL
@@ -107,15 +68,6 @@
[Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_AdobeRGB_opaque.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_Rec2020_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_opaque.png vs 2x2_16bit_interlaced_ProPhoto_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_interlaced_sRGB_transparent.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_interlaced_sRGB_opaque.png]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
index 73457f22f71..2e0bfb43459 100644
--- a/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
@@ -1,2 +1,67 @@
[imageData-colorManagedBehavior.html]
- expected: ERROR
+ [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): e-SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test cretateImageData(width, height) from SRGB canvas ]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test getImageData(sx, sy, sw, sh) from SRGB canvas ]
+ expected: FAIL
+
+ [Test createImageData(imagedata): e-SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test createImageData(imagedata): SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test createImageData(imagedata): e-SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test cretateImageData(width, height) from e-SRGB canvas ]
+ expected: FAIL
+
+ [Test createImageData(imagedata): e-SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): e-SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test createImageData(imagedata): SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test getImageData(sx, sy, sw, sh) from e-SRGB canvas ]
+ expected: FAIL
+
+ [Test createImageData(imagedata): SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): e-SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
index 88f4ddd0e9a..42ebcc9d57e 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
@@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-1.html]
- expected: CRASH
+ expected: TIMEOUT
[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/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index 93673c2a0db..295031c1812 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-3.html]
- expected: CRASH
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 3080be9afc0..d913fcbb129 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html]
- expected: CRASH
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index f4f994c5d6f..7a36937927c 100644
--- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-3.html]
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini
deleted file mode 100644
index 633a99517d3..00000000000
--- a/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[form-double-submit-2.html]
- [preventDefault should allow onclick submit() to succeed]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
deleted file mode 100644
index 9f416703229..00000000000
--- a/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[form-double-submit-3.html]
- [<button> should have the same double-submit protection as <input type=submit>]
- expected: FAIL
-
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini
new file mode 100644
index 00000000000..337c20f9cde
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-1-nothrow-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini
new file mode 100644
index 00000000000..4728e2299c9
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-1-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini
new file mode 100644
index 00000000000..337c20f9cde
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-1-nothrow-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini
new file mode 100644
index 00000000000..4728e2299c9
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-1-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini
new file mode 100644
index 00000000000..3e36f3e5fb0
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-2-import-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini
new file mode 100644
index 00000000000..f3fe0d0e3d4
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-3-dynamic-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini
new file mode 100644
index 00000000000..5ac282bdcdb
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini
@@ -0,0 +1,4 @@
+[evaluation-order-4-tla.html]
+ [Test evaluation order of modules]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini
index 30d23c291f1..9a0b66aa722 100644
--- a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini
@@ -1,4 +1,5 @@
[module-tla-import.html]
+ expected: TIMEOUT
[document.write in an imported module]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini
deleted file mode 100644
index 8694e58234a..00000000000
--- a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[module-tla-promise.html]
- expected: TIMEOUT
- [document.write in an imported module]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini
deleted file mode 100644
index 8195569d430..00000000000
--- a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[reload.window.html]
- expected: TIMEOUT
- [Reloading a document.open()'d page should reload the URL of the entry realm's responsible document]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
index 450c88bd32b..5602ea31dbe 100644
--- a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
+++ b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
@@ -4,5 +4,5 @@
expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index a56bad443a2..66bd350083b 100644
--- a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
- expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini
deleted file mode 100644
index 064cf47545b..00000000000
--- a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[017.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, about:blank]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini b/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini
deleted file mode 100644
index 663a1f8fa30..00000000000
--- a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[018.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, javascript:]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata-layout-2020/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/metadata-layout-2020/workers/WorkerGlobalScope-close.html.ini
new file mode 100644
index 00000000000..fe8654e447c
--- /dev/null
+++ b/tests/wpt/metadata-layout-2020/workers/WorkerGlobalScope-close.html.ini
@@ -0,0 +1,4 @@
+[WorkerGlobalScope-close.html]
+ [Test sending a message after closing.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 9e0ccc96ae1..2a3840c2bb6 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -591,7 +591,7 @@
"manual": {
"wide-gamut-canvas": {
"imagedata-no-color-settings-crash.html": [
- "d7fe956e4b8d99421181a714648eaf561dbab735",
+ "b21eaf72abec2fc9da5d9a48c9ef483a143ec830",
[
null,
{}
@@ -860,6 +860,24 @@
]
}
},
+ "mathml": {
+ "crashtests": {
+ "display-and-column-properties.html": [
+ "c40a2a05497642d076962315b6b90cc3f5987360",
+ [
+ null,
+ {}
+ ]
+ ],
+ "multicol-on-token-elements.html": [
+ "9fc00eb6911b625a7443a3e1ec65ada7daf25105",
+ [
+ null,
+ {}
+ ]
+ ]
+ }
+ },
"portals": {
"portals-no-frame-crash.html": [
"c87afa38c29bf98344c9d01039ed6bf9af1d5d96",
@@ -156131,6 +156149,19 @@
{}
]
],
+ "balance-grid-container.html": [
+ "64df23e09fb62c6e71aa834c96b72d4bf2330f06",
+ [
+ null,
+ [
+ [
+ "/css/css-multicol/balance-grid-container-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"change-intrinsic-width.html": [
"3df3e1ebc8f9b5780dc858a878bca13dbedcdb35",
[
@@ -158172,6 +158203,19 @@
{}
]
],
+ "multicol-span-all-012.html": [
+ "7f1f9ae1ac41b1760f03056f7998746082f87e2e",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"multicol-span-all-block-sibling-003.xht": [
"abaa45f0a85023f3f07a9db483629b74d2b09d71",
[
@@ -169683,6 +169727,32 @@
{}
]
],
+ "abspos-012.tentative.html": [
+ "537f8778f912909687c0e2b19938166e285c2592",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "abspos-013.tentative.html": [
+ "16c3417b48fce9b8d6e648416b666b8af5d0b73d",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"auto-margins-001.tentative.html": [
"9e89ab6ca7f5220ea030aa537bcb3b64f156043d",
[
@@ -190215,6 +190285,32 @@
{}
]
],
+ "scrolalble-hidden-3d-transform-z.html": [
+ "5d539f63cfe4c78ada7b4f133e4e7477e0584c7e",
+ [
+ null,
+ [
+ [
+ "/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "scrolalble-scroll-3d-transform-z.html": [
+ "fd273fdf109e0d5ea06c0a2445265170a96d5d4e",
+ [
+ null,
+ [
+ [
+ "/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"size-change-under-backface-visibility-hidden.html": [
"1543eeb3da3e0efb58239097fe486f1ca85d7c63",
[
@@ -239267,6 +239363,19 @@
]
},
"images": {
+ "blocked-by-csp.html": [
+ "2416e5dfd089baba6716b4f2393e3dc86e242519",
+ [
+ null,
+ [
+ [
+ "/html/rendering/replaced-elements/images/blocked-by-csp-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"space.html": [
"fee115dfce6a0cf03069b6a24e8cb3149446a5ad",
[
@@ -242805,6 +242914,45 @@
},
"relations": {
"css-styling": {
+ "blur-filter.html": [
+ "9540a017d2ef4c1967c78b05c9dbcc3331861610",
+ [
+ null,
+ [
+ [
+ "/mathml/relations/css-styling/blur-filter-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "clip-path.html": [
+ "5ff62ee7d4d098658c81a7502aed76d978d517f8",
+ [
+ null,
+ [
+ [
+ "/mathml/relations/css-styling/clip-path-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "clip.html": [
+ "633e20cb78af70daef5bf68ab9f13b6e7d564673",
+ [
+ null,
+ [
+ [
+ "/mathml/relations/css-styling/clip-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"color-001.html": [
"a80fade2de68d2b9fafdfa659a62ce32fca2174d",
[
@@ -243418,6 +243566,19 @@
{}
]
],
+ "transform.html": [
+ "b50d6c800458a97752e96388f94cbca622494fce",
+ [
+ null,
+ [
+ [
+ "/mathml/relations/css-styling/transform-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"visibility-001.html": [
"ece84ee693a524f24a33024c80e034035cac64bb",
[
@@ -273124,15 +273285,15 @@
[]
],
"domain": {
- "domain-attribute-host-with-and-without-leading-period.sub.html.sub.headers": [
+ "domain-attribute-host-with-and-without-leading-period.sub.https.html.sub.headers": [
"77d3d8c0c447c99fa556ea58dee090fadf7ad31d",
[]
],
- "domain-attribute-host-with-leading-period.sub.html.sub.headers": [
+ "domain-attribute-host-with-leading-period.sub.https.html.sub.headers": [
"7de4ae2e6a5093fce5cc4405c0f1b92bf5f0981a",
[]
],
- "domain-attribute-matches-host.sub.html.sub.headers": [
+ "domain-attribute-matches-host.sub.https.html.sub.headers": [
"8a2329e8c2f7fdd09847ae8a51e543e4b9495c87",
[]
],
@@ -275133,7 +275294,7 @@
],
"support": {
"README.md": [
- "cacd959d02629b3f665ee51eb65b8b5a4115a49c",
+ "f58d4cd0ce430ec61840b6d745a8cefe41643a88",
[]
],
"echoing-nester.html": [
@@ -275145,11 +275306,11 @@
[]
],
"otpcredential-helper.js": [
- "d5a7eb8c4715f08031933391b953ac32b43443d1",
+ "3cf4510585d61c683e78140452ad8fe3fd9150fe",
[]
],
"otpcredential-iframe.html": [
- "37fe6e1cd891b3f1c4500a0c09b0f6d2c603bccf",
+ "83f25d573c8ecc967635bb9239a3d0c0c1544d37",
[]
],
"passwordcredential-get.html": [
@@ -306606,6 +306767,10 @@
"cc95000ec53ea8daef06251ad5a9f20c5b06a281",
[]
],
+ "balance-grid-container-ref.html": [
+ "aa0ea5595d067d1c8bfc21f604ff2d662bef155a",
+ []
+ ],
"column-balancing-paged-001-print-ref.html": [
"af1a86b1e73a49e488faaba1741aae9afe63f28f",
[]
@@ -314206,6 +314371,14 @@
"56fa3074a153df96d8d586592c7b66de45bf4155",
[]
],
+ "scrolalble-hidden-3d-transform-z-ref.html": [
+ "b2399db472f50e4d75097ed12e4e4ccafc1d0ba7",
+ []
+ ],
+ "scrolalble-scroll-3d-transform-z-ref.html": [
+ "b2399db472f50e4d75097ed12e4e4ccafc1d0ba7",
+ []
+ ],
"size-change-under-backface-visibility-hidden-ref.html": [
"e9362c35745416a4ca19a9ab0bf92dd69afb8634",
[]
@@ -328029,6 +328202,34 @@
}
}
},
+ "connection-pool": {
+ "resources": {
+ "network-partition-checker.html": [
+ "b058f611242bb8cce4571409ef30c8ea0d7ed22f",
+ []
+ ],
+ "network-partition-iframe-checker.html": [
+ "f76ed1844719c9f88b53e5f2d35f7a86d8663c3c",
+ []
+ ],
+ "network-partition-key.js": [
+ "bd66109380f21ef171cb90f6c7a1ddafd7dd9211",
+ []
+ ],
+ "network-partition-key.py": [
+ "44ddae7a75df21908310a66cff719755c52629bb",
+ []
+ ],
+ "network-partition-worker-checker.html": [
+ "e6b7ea7673fe798b2e5a737056007b5a25e3c792",
+ []
+ ],
+ "network-partition-worker.js": [
+ "1745edfacb130f5a0c177296fa6324acc45ab9f5",
+ []
+ ]
+ }
+ },
"content-encoding": {
"resources": {
"bad-gzip-body.py": [
@@ -328474,6 +328675,74 @@
},
"focus": {
"support": {
+ "activeelement-after-focusing-different-site-iframe-inner-contentwindow.html": [
+ "bc78e6e0538c4dd22a3563f1b56bc755d468e767",
+ []
+ ],
+ "activeelement-after-focusing-different-site-iframe-inner.html": [
+ "bc78e6e0538c4dd22a3563f1b56bc755d468e767",
+ []
+ ],
+ "activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html": [
+ "fd66cbaa55c2044922af9d232ca2276ddf5b3028",
+ []
+ ],
+ "activeelement-after-focusing-different-site-iframe-outer.sub.html": [
+ "bcbedb2f74ede95ea65deea84f71c7b21f3ed640",
+ []
+ ],
+ "activeelement-after-focusing-same-site-iframe-inner-contentwindow.html": [
+ "bc78e6e0538c4dd22a3563f1b56bc755d468e767",
+ []
+ ],
+ "activeelement-after-focusing-same-site-iframe-inner.html": [
+ "bc78e6e0538c4dd22a3563f1b56bc755d468e767",
+ []
+ ],
+ "activeelement-after-focusing-same-site-iframe-outer-contentwindow.html": [
+ "63e2ac601967753b684324f84514521db085846f",
+ []
+ ],
+ "activeelement-after-focusing-same-site-iframe-outer.html": [
+ "333b436ea1190945d95c08a17235563aec47a4a9",
+ []
+ ],
+ "activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html": [
+ "bc78e6e0538c4dd22a3563f1b56bc755d468e767",
+ []
+ ],
+ "activeelement-after-immediately-focusing-different-site-iframe-inner.html": [
+ "bc78e6e0538c4dd22a3563f1b56bc755d468e767",
+ []
+ ],
+ "activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html": [
+ "10240504fe976ddeebd0d3461c6293f8b5f20f11",
+ []
+ ],
+ "activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html": [
+ "3485f1b8e4b7b3d2c57823b31c07561b2fde4723",
+ []
+ ],
+ "activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html": [
+ "bc78e6e0538c4dd22a3563f1b56bc755d468e767",
+ []
+ ],
+ "activeelement-after-immediately-focusing-same-site-iframe-inner.html": [
+ "bc78e6e0538c4dd22a3563f1b56bc755d468e767",
+ []
+ ],
+ "activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html": [
+ "3849f6ea2cc8d46c6576f7e8f56ce7eb3263dd15",
+ []
+ ],
+ "activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html": [
+ "bafc26065c8348840cdd3c4c16603bd68f3384ce",
+ []
+ ],
+ "activeelement-after-immediately-focusing-same-site-iframe-outer.html": [
+ "f22fa98076fde127961c9b58fc5f76db55b21a42",
+ []
+ ],
"focus-restoration-in-different-site-iframes-inner.html": [
"903b0c02858520dd1d3af7f95b82033fc5509585",
[]
@@ -328483,7 +328752,7 @@
[]
],
"focus-restoration-in-different-site-iframes-outer.sub.html": [
- "91ffed1107580585831313347ebd04ed3dd75d8d",
+ "ecc1af286d9477d1ced8e38f890685c3ad043666",
[]
]
}
@@ -332909,7 +333178,7 @@
},
"images": {
"image.py": [
- "1aec081926317c158503e36a6ce073f51d6eb59a",
+ "b8bb34e61803b69edabfea3a9f9994f77bf77ef8",
[]
]
},
@@ -337556,6 +337825,10 @@
]
},
"images": {
+ "blocked-by-csp-ref.html": [
+ "f37d8a3ec94834673a75749a28a42638f9c2a0db",
+ []
+ ],
"space-ref.html": [
"0cf272e16211098b6020d5d15d0d71336ba88a59",
[]
@@ -339432,6 +339705,14 @@
"c4449ca7c8a598e3712c8b24eb9e424775c19102",
[]
],
+ "evaluation-order-1-nothrow-worker-setup.js": [
+ "88fc22ba7f7e12881974010f3da28979bea31c65",
+ []
+ ],
+ "evaluation-order-1-worker-setup.js": [
+ "f5bb6ecaf96c981b99f44f131023904afb9f1326",
+ []
+ ],
"execution-timing": {
"102.html": [
"439023833f4b020004a7258de35739630c9a2b3d",
@@ -339887,6 +340168,14 @@
"8ccb58120664d2bb8e5cd76d22c10e8b431166ad",
[]
],
+ "evaluation-order-4.1.mjs": [
+ "f3347c1d28eac466c6d6ec67c60b9f1261b08b38",
+ []
+ ],
+ "evaluation-order-4.2.mjs": [
+ "96a5cca3a63b46d8cff21ad4f64cb8c9cccf699d",
+ []
+ ],
"evaluation-order-setup.mjs": [
"d3f22e9ee0f0bb00f1404c44469f8fd2c57b1bf3",
[]
@@ -340977,7 +341266,7 @@
[]
],
"module-tla-promise-iframe.html": [
- "5c55bed6c07af592f14ad2372722d3388a5041a6",
+ "edc9e80cb394b2350be63aec018bc81a6c773144",
[]
],
"nested-document-write-1.html": [
@@ -342432,7 +342721,7 @@
[]
],
"encoding.idl": [
- "bae48f11993e5f26545e5ada9ca8e34bdb7d0fe4",
+ "7585cb3717c9aa666aa84d6ade72de4626ec6d22",
[]
],
"encrypted-media.idl": [
@@ -342528,7 +342817,7 @@
[]
],
"intersection-observer.idl": [
- "fa1de190387ec62a2c86aba97a0002f4db4537db",
+ "52db1c4baa9562f836f2273a4b21a4f970ff9318",
[]
],
"intervention-reporting.idl": [
@@ -342724,7 +343013,7 @@
[]
],
"sanitizer-api.tentative.idl": [
- "25cba22ecfc4ee194cf4f21aa2c0d24c7c16de05",
+ "600ae0514a3094e19813476cd065162b9e0dfb4c",
[]
],
"savedata.idl": [
@@ -342776,7 +343065,7 @@
[]
],
"streams.idl": [
- "1df6827189d137d8ce690073f6e626eb186bc539",
+ "99c3a5dee91f693d834b6dfc89cefec387d1078d",
[]
],
"text-detection-api.tentative.idl": [
@@ -342920,7 +343209,7 @@
[]
],
"webxr-hand-input.idl": [
- "260c00365ac0d225e87eb01cd31f0bbd00eafd5c",
+ "a7eb3b1a0e8270782e4049d52c3c9ea9d9a722a4",
[]
],
"webxr.idl": [
@@ -343149,7 +343438,7 @@
]
},
"lint.ignore": [
- "a3b91f1a9925956b78238e5c81904cbbfeeff8ef",
+ "d299867133ca55ffcdf248631a39fafb79c8504b",
[]
],
"loading": {
@@ -343483,6 +343772,18 @@
},
"relations": {
"css-styling": {
+ "blur-filter-ref.html": [
+ "21fc165b7da477a619933185c2f45df3c3e9ab09",
+ []
+ ],
+ "clip-path-ref.html": [
+ "57935564bf02a266189d65f6a7546c72a0497614",
+ []
+ ],
+ "clip-ref.html": [
+ "7882ac8c31e2d455d1afc8693b2c96913a3fdf0a",
+ []
+ ],
"color-001-ref.html": [
"0efca480eec5a3da684fe79a429982b139b202e4",
[]
@@ -343673,6 +343974,10 @@
"b8f5458b9bbd169104535f66528a26356cf1ef45",
[]
],
+ "transform-ref.html": [
+ "005e8a78828cb2457bfbb1908406d8b13812de5d",
+ []
+ ],
"visibility-001-ref.html": [
"fcaf5fe85b44129db71f82913374859380576369",
[]
@@ -343773,7 +344078,7 @@
[]
],
"box-comparison.js": [
- "a574b01706b5fecc232d62735ef7e89938594769",
+ "b30ad279dfeba991a7e1f309b729d08e80638306",
[]
],
"box-navigation.js": [
@@ -344999,7 +345304,7 @@
[]
],
"report.py": [
- "671b3a289212fe1663e3a9a8652ac8a1854ac888",
+ "65433e7840be56a05663b055518ca50ab5fd911f",
[]
],
"subdomains-pass.png": [
@@ -345754,6 +346059,10 @@
}
},
"resources": {
+ "iframe-touch-action-none-subframe.html": [
+ "bcfb5e06588e67205e3039103086bcd05fb48c9c",
+ []
+ ],
"pointerevent_attributes_hoverable_pointers-iframe.html": [
"5e55868282ce5ce549f1d32092839f05bd43aba7",
[]
@@ -348658,7 +348967,7 @@
]
},
"test-only-api.js": [
- "3fdf1cea6eb1374b7df7ede2e7dca27ceafd16b9",
+ "ef66e0e733f9c68004129d24b3c9ad12b9aa0708",
[]
],
"test-only-api.js.headers": [
@@ -348725,7 +349034,7 @@
],
"support": {
"testcases.sub.js": [
- "d1af1c9b5a9fc5d057fd3fd14c48283ecfbb7337",
+ "a3cc6d38c8cd3d98a93a082fa4216a83de00d471",
[]
]
}
@@ -352921,11 +353230,11 @@
[]
],
"cacert.key": [
- "c36ebcbc91054d4d61036004883f9bfbf7d4f5ac",
+ "7b83e8f0e9ebe229c83335b3a2f0632540942ed2",
[]
],
"cacert.pem": [
- "f450f014d9f09b7f7c4e60f23a2f7cb779ab8188",
+ "a8ce54be5579b743001fa0de3c163129965d356c",
[]
],
"config.json": [
@@ -352933,11 +353242,11 @@
[]
],
"web-platform.test.key": [
- "0d422053f76ba4df1e69df513fe916532c4ccfad",
+ "c4f5dc3f2cfba081e4536708c4667e7595e09d74",
[]
],
"web-platform.test.pem": [
- "e7b1b018466895f32356c24ae1f3da0fff2f1c4c",
+ "438f504b2b696757ea292e3c53ea0f0baa1fdd23",
[]
]
},
@@ -359861,7 +360170,7 @@
[]
],
"chrome.py": [
- "880e2bd43eb6bbb4c9b8d052af77537ce3f27e3d",
+ "486070ad86d451e73f0e56ce720134024ffc1121",
[]
],
"chrome_android.py": [
@@ -359873,7 +360182,7 @@
[]
],
"chrome_spki_certs.py": [
- "e8971e7acde3ed68bf5671e7e2f812765eb7c6c8",
+ "289453bd080959445ea5a452362b05a7675735e4",
[]
],
"edge.py": [
@@ -360073,12 +360382,12 @@
[]
],
"chromium.py": [
- "0c2fc4081386a36922b9a8f7604fd21b2313aa35",
+ "cef01c4ffc5dd2df67ddfb6ed746d3ea4c5c4d76",
[]
],
"tests": {
"test_chromium.py": [
- "59f39c1e71b200146063cbd6e5201405d8871646",
+ "8f8e732d4736337ccfecbb13f1fb8b590c9df52a",
[]
]
},
@@ -360654,7 +360963,7 @@
[]
],
"request.py": [
- "28f407c806528c9574642794447605182a42f098",
+ "dbfe067ba7ff4b2f1c731f063e932143a0bb234f",
[]
],
"response.py": [
@@ -360670,7 +360979,7 @@
[]
],
"server.py": [
- "56342ed287d8fa1028796e5083e1f1f99375217a",
+ "d6718df3f525d21ce848f75eb91d0741d857e5cb",
[]
],
"sslutils": {
@@ -389868,21 +390177,21 @@
]
],
"domain": {
- "domain-attribute-host-with-and-without-leading-period.sub.html": [
+ "domain-attribute-host-with-and-without-leading-period.sub.https.html": [
"7273daa8499f6b37cc959b390cbab77d46665ffb",
[
null,
{}
]
],
- "domain-attribute-host-with-leading-period.sub.html": [
+ "domain-attribute-host-with-leading-period.sub.https.html": [
"5b295e7393fba696bfef438179de15c05a765def",
[
null,
{}
]
],
- "domain-attribute-matches-host.sub.html": [
+ "domain-attribute-matches-host.sub.https.html": [
"f790b49d98b91cc8db63ba440b635eb8e165cfac",
[
null,
@@ -390185,7 +390494,7 @@
}
]
],
- "iframe.document.html": [
+ "iframe.document.https.html": [
"2d276dbcaa9ce740ffdd8c8516defe18ab51de95",
[
null,
@@ -390597,7 +390906,7 @@
]
],
"otpcredential-get-basics.https.html": [
- "aca48227ce839afcc805c02b18e3d3dcde50f31e",
+ "edeb42a0f579209c1556d83c7fa98de08757f0dc",
[
null,
{}
@@ -394383,6 +394692,13 @@
{}
]
],
+ "display-math-on-non-mathml-elements.html": [
+ "2d117cfff575becd824ddefa2f98f6690913197f",
+ [
+ null,
+ {}
+ ]
+ ],
"display-with-float-dynamic.html": [
"7cc2fefcc42f4fc0aa7b72fabbf2fc8df6c38048",
[
@@ -395440,6 +395756,104 @@
{}
]
],
+ "image-as-flexitem-size-001.html": [
+ "6972d9cd9c48414a8d77b869ce7d9b633c73a2f3",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-001v.html": [
+ "91231dc4f44759fe4122f5d280d01c5940adb7b2",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-002.html": [
+ "4ae30b8afebc40f91fef4c7277ac8c13cfde4cfc",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-002v.html": [
+ "6d0c0cafa77a9edb6a674d9952d82c0da7ec6035",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-003.html": [
+ "03a9a6e3547ee9a4421d4624efd1371a237c8ad7",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-003v.html": [
+ "fd728027e0cfb78162df586320bcb8cb284105a2",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-004.html": [
+ "15e9f729271aecf945896a0af3263ee42415f0c3",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-004v.html": [
+ "10e871a1c0eacf00a45aed2e594c14daa6b685e2",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-005.html": [
+ "c4250956682999974cbc2da3c486f3c67acf66ef",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-005v.html": [
+ "4acb8e259a962aea738178c4c3d36cbe58756831",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-006.html": [
+ "e97305e70742d6de68f1230dfc06fb3eb0c0ac40",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-006v.html": [
+ "4f42288737d985540256f07a9a9601da6efd4ec2",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-007.html": [
+ "16728b8c7e42c078de20ea11eb0603064179cc2f",
+ [
+ null,
+ {}
+ ]
+ ],
+ "image-as-flexitem-size-007v.html": [
+ "c9fbcc3e98accea7756658b2d05feea04bba3f5c",
+ [
+ null,
+ {}
+ ]
+ ],
"inheritance.html": [
"aad25677739b7a101987edd9d1effc5c7d4a3098",
[
@@ -401745,35 +402159,35 @@
]
],
"scrollbar-gutter-001.html": [
- "b8c157a1ecd1b4f806e64060cbbd2a993499cbf4",
+ "c6cdb55baad8b5e1deb5e89277c0bf2f5196a770",
[
null,
{}
]
],
"scrollbar-gutter-002.html": [
- "5cfc45c358c540d4ca81d79aa199d2dcb0bfe494",
+ "8756ab7f0f810870676cbd6da6147d4b41235772",
[
null,
{}
]
],
"scrollbar-gutter-003.html": [
- "17f724fb37c7a98241e12aad47b3365f9dccb33d",
+ "1002b462390c2e7bbe7ee2cd0a93be410717a3c7",
[
null,
{}
]
],
"scrollbar-gutter-004.html": [
- "2f9ac9b7f330de181560d8aac5c3780682bc9780",
+ "b41e3491f278d8fc691aa4834b8408f3699836b7",
[
null,
{}
]
],
"scrollbar-gutter-005.html": [
- "5f1e8413f3b93c0fe44f0e55b02f83cb37f192f2",
+ "dca465770ddb8d77aebf5be511c1c9325f9f7745",
[
null,
{}
@@ -416692,8 +417106,15 @@
{}
]
],
+ "is-where-error-recovery.tentative.html": [
+ "31f5b8ccc6cbb5bd180f59e53a42d726f32fe912",
+ [
+ null,
+ {}
+ ]
+ ],
"is-where-parsing.html": [
- "0f064bab73c4a46bd6c11aa456cf0bfd94cdaae8",
+ "33cb6ad726b8eef630d03ffbba243c066e004d3e",
[
null,
{}
@@ -416706,6 +417127,78 @@
{}
]
],
+ "parsing": {
+ "attribute.html": [
+ "a8fcfb24f5a9b1350adda6e59af814f1111325c1",
+ [
+ null,
+ {}
+ ]
+ ],
+ "child.html": [
+ "510c45db867e978fc54d3b66f705d18acbf2aff8",
+ [
+ null,
+ {}
+ ]
+ ],
+ "class.html": [
+ "00abcf838da18641d96c9381da77d38365329356",
+ [
+ null,
+ {}
+ ]
+ ],
+ "descendant.html": [
+ "5ff3a7bbfd973a88a30d1c804347403e1df57562",
+ [
+ null,
+ {}
+ ]
+ ],
+ "id.html": [
+ "2441c4217eb4b9ef1c8bde1aa5a96269b09b6304",
+ [
+ null,
+ {}
+ ]
+ ],
+ "is.html": [
+ "68236445c5f1e871cd4e0c500057b2ad11955b60",
+ [
+ null,
+ {}
+ ]
+ ],
+ "not.html": [
+ "3895683d1c84c1a39a38f2976f7b672a2b06e121",
+ [
+ null,
+ {}
+ ]
+ ],
+ "sibling.html": [
+ "4f7a7a3fbcc14d20282a7eee5ab4f9dd768467bb",
+ [
+ null,
+ {}
+ ]
+ ],
+ "universal.html": [
+ "e944a93f12c0eafc9c19a2e827d93eb4448984e0",
+ [
+ null,
+ {}
+ ]
+ ],
+ "where.html": [
+ "3a90969570925fd85df07508a76baa02dc1ec5b6",
+ [
+ null,
+ {}
+ ]
+ ]
+ },
"pseudo-enabled-disabled.html": [
"521767de3763130f22e066c01d38fb7e83cb3de9",
[
@@ -416936,6 +417429,13 @@
{}
]
],
+ "form-elements-namedItem.html": [
+ "385d0f281d14a11ae86f8136433cb0ed088ad036",
+ [
+ null,
+ {}
+ ]
+ ],
"form-reset-callback.html": [
"8b8497f8b6c4268a0fcd10baeb39bda15a09ac0e",
[
@@ -422755,7 +423255,7 @@
]
],
"idlharness.any.js": [
- "7a057f14e3a78c73b39a17f1debd3b8ad1e754d6",
+ "acd100c43b461c85399407087d20a51a57ce8352",
[
"encoding/idlharness.any.html",
{
@@ -437959,6 +438459,17 @@
]
}
},
+ "connection-pool": {
+ "network-partition-key.html": [
+ "60a784cd84ed92bbcd34aae050289a2676ed45bf",
+ [
+ null,
+ {
+ "timeout": "long"
+ }
+ ]
+ ]
+ },
"content-encoding": {
"bad-gzip-body.any.js": [
"f820322668c1cd79f1453cba918f1cf38bf8a1bb",
@@ -439111,6 +439622,62 @@
}
},
"focus": {
+ "activeelement-after-focusing-different-site-iframe-contentwindow.html": [
+ "b16280acbd7a85abb183d6c23c7508f6ce2fe17f",
+ [
+ null,
+ {}
+ ]
+ ],
+ "activeelement-after-focusing-different-site-iframe.html": [
+ "b974252555aebad45c2be1855b5dfdedc0d38618",
+ [
+ null,
+ {}
+ ]
+ ],
+ "activeelement-after-focusing-same-site-iframe-contentwindow.html": [
+ "b4a14e721f8df6eab6a6a4ca3988a32718c673fa",
+ [
+ null,
+ {}
+ ]
+ ],
+ "activeelement-after-focusing-same-site-iframe.html": [
+ "55918ebf07f06a91074c1ea0e9b450626d698585",
+ [
+ null,
+ {}
+ ]
+ ],
+ "activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html": [
+ "4cb3c68db63b907013f42ff4c1bad3af1e172345",
+ [
+ null,
+ {}
+ ]
+ ],
+ "activeelement-after-immediately-focusing-different-site-iframe.html": [
+ "67bf733bc1e63362bea444a2009da8fb9c0c6aa4",
+ [
+ null,
+ {}
+ ]
+ ],
+ "activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html": [
+ "81dbfd28d038723f08f33af989162141cfd184bc",
+ [
+ null,
+ {}
+ ]
+ ],
+ "activeelement-after-immediately-focusing-same-site-iframe.html": [
+ "a035af072d3074ec960d63f12c678a6abafbf54f",
+ [
+ null,
+ {}
+ ]
+ ],
"focus-restoration-in-different-site-iframes.html": [
"3de05455651aef8e37e99aa33877c4e5905103ac",
[
@@ -446166,7 +446733,7 @@
]
],
"canvas-colorManaged-convertToBlob-roundtrip.html": [
- "1fe8ac5eaebbe3e93387220d7a58f8ed8fdb1e29",
+ "efb2665a8a5a5b8f1997cd1a1a0128c2785c6b6a",
[
null,
{}
@@ -446187,56 +446754,56 @@
]
],
"canvas-createImageBitmap-e_srgb.html": [
- "7483800b41e5ebafabcf1bfd204f5215edc1f158",
+ "72b8e278c600d38e431f7a73ff529386a4c0bbbc",
[
null,
{}
]
],
"canvas-createPutGetImageData-colorManaged.html": [
- "f153a983d93d5ee33893fd23340dfcc5b26e098a",
+ "c72dc97cd0cfd1fa9dccbe7316ef20ff11441599",
[
null,
{}
]
],
"canvas-draw-high-bit-depth-images.html": [
- "e7a83fc1f75711e107b45065a76eebf98eb04296",
+ "9907c4e2cf57a0229c7c871f5d7fecc697a3e5a3",
[
null,
{}
]
],
"canvas-drawImage-e_srgb.html": [
- "7620d93d5f11ed9522aa851248e9981d742f7e6d",
+ "0cfa729a60b092e677028407e183914fa972e86f",
[
null,
{}
]
],
"canvas-drawImage-offscreenCanvas.html": [
- "144dca0e7753c420a0a8eb4126c4c8e7cc8a39eb",
+ "7edbc5ee3c9f819d1f925942bebb50eec1681022",
[
null,
{}
]
],
"canvas-getImageData-e_srgb.html": [
- "c38da7c95c0d48fd009c9073697f0232379918f9",
+ "73682eb631d064efae604138d038a572152d359b",
[
null,
{}
]
],
"imageData-colorManagedBehavior.html": [
- "dda9f9cc28f051114f21b27fe470aafe1ce2b06e",
+ "d106904f2e236e2d44a76a7c95066abbf107342c",
[
null,
{}
]
],
"transferFromImageBitmap.html": [
- "6855dc705b75aff9e609bc01be9ae94079a1ac0d",
+ "ff8abeb897f287568169e4555f7317d2b6f334e0",
[
null,
{}
@@ -459858,7 +460425,7 @@
]
],
"reporting-navigation.https.html": [
- "680cc6af29a4b5f546179dfa7652a0ddf1fe687a",
+ "fe42015913b56d1ca0fdd234d4ad6ad9d0926af2",
[
null,
{
@@ -459876,7 +460443,7 @@
]
],
"reporting-to-endpoint.https.html": [
- "02c719da7372555386e89cb159910bf13e3900ff",
+ "416732497bdd58f654cbfd883721352a8c7ecba7",
[
null,
{
@@ -463406,6 +463973,15 @@
{}
]
],
+ "legend-hover.html": [
+ "461917a9a0d2a379d5e32643db3a20fae672f1d4",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"legend-margin-inline.html": [
"8daf78db999c8c437d311c8bb2f7b36f590ae277",
[
@@ -470871,6 +471447,48 @@
{}
]
],
+ "evaluation-order-1-nothrow-sharedworker.html": [
+ "9bfe5a1f312b69f5d11514a70ce43e42108677d8",
+ [
+ null,
+ {}
+ ]
+ ],
+ "evaluation-order-1-nothrow-worker.html": [
+ "4ddfb61d5078e9225d8aab3818a0842e9552d097",
+ [
+ null,
+ {}
+ ]
+ ],
+ "evaluation-order-1-nothrow.html": [
+ "b08372efd717aa55b6e5c3f9e79a56a1d39b2362",
+ [
+ null,
+ {}
+ ]
+ ],
+ "evaluation-order-1-sharedworker.html": [
+ "0ad18a8fba80ed1e15130b8ee5a52841ec672014",
+ [
+ null,
+ {}
+ ]
+ ],
+ "evaluation-order-1-worker.html": [
+ "7760e087c2dd229a9a74f69768d455930d540ae4",
+ [
+ null,
+ {}
+ ]
+ ],
+ "evaluation-order-1.html": [
+ "7bf7132081e32b955b38d4a115ebcd103cca6cea",
+ [
+ null,
+ {}
+ ]
+ ],
"execution-timing": {
"001.html": [
"3f54f764f98dc5cff8274b91f56043b4d9170fdf",
@@ -472248,21 +472866,21 @@
]
],
"choice-of-error-1.html": [
- "73a6ce3db005df26d3a2cb3134d5ae99ec5570db",
+ "50933da2c1d56c1427edaea838bcb477b05951ca",
[
null,
{}
]
],
"choice-of-error-2.html": [
- "0d67cb819a9b376ce617cf1be495c0d559bfebe8",
+ "51adb09d11ada5391f93d931e990e9242afaa3ed",
[
null,
{}
]
],
"choice-of-error-3.html": [
- "5c0adff6ea8200fa1c1c4d97590d6f01c725c9a8",
+ "bc52119bfe4877bb7c779218fcbf14baf35954dd",
[
null,
{}
@@ -472490,21 +473108,21 @@
]
],
"error-type-1.html": [
- "6f119e30064712a180aa1f9a53b49e679e567ac4",
+ "2480a60d6d42a2f6e630c3c20a827621aeb3a256",
[
null,
{}
]
],
"error-type-2.html": [
- "a7df1df0c866682b6cdf8a6f557ced8130a2b9df",
+ "673bf28ca2057b375b563b0b0eb53c553919157b",
[
null,
{}
]
],
"error-type-3.html": [
- "9b00df38915abe7d19a1658af9fb545ca4769926",
+ "8a16266f4cdf700b381c9e7dc1c0dbc39eee8377",
[
null,
{}
@@ -472545,6 +473163,13 @@
{}
]
],
+ "evaluation-order-1-nothrow-sharedworker.html": [
+ "77ece9e49226b9d5daf6d0b2a189be1fbdab4013",
+ [
+ null,
+ {}
+ ]
+ ],
"evaluation-order-1-nothrow-worker.html": [
"1b7ea09ebdd8cb6c35aefefe6b22b6495db735c9",
[
@@ -472559,6 +473184,13 @@
{}
]
],
+ "evaluation-order-1-sharedworker.html": [
+ "cc7f0302bfce5dbf59b9a546fb369148ea75ff4e",
+ [
+ null,
+ {}
+ ]
+ ],
"evaluation-order-1-worker.html": [
"0325bb2a30da1e22f0a6e12e0dda17bf12c89f6c",
[
@@ -472573,6 +473205,13 @@
{}
]
],
+ "evaluation-order-2-import-sharedworker.html": [
+ "064563900216d543b3134401577dda4821027ebc",
+ [
+ null,
+ {}
+ ]
+ ],
"evaluation-order-2-import-worker.html": [
"83070191af9ad4b693e6ca3a1f2eaea53d8bad67",
[
@@ -472587,6 +473226,13 @@
{}
]
],
+ "evaluation-order-3-dynamic-sharedworker.html": [
+ "cd1f5edfa22d425fb8873adeb9493f399b2eda0f",
+ [
+ null,
+ {}
+ ]
+ ],
"evaluation-order-3-dynamic-worker.html": [
"49731bd4822d2abef8fd263bca98f2a2f398933c",
[
@@ -472601,6 +473247,13 @@
{}
]
],
+ "evaluation-order-4-tla.html": [
+ "da07faf42d611586a295bfa3e694f7bc29d070c0",
+ [
+ null,
+ {}
+ ]
+ ],
"execorder.html": [
"6a7513dc1361de0716584df8a5e7c8b3df2b69f3",
[
@@ -476421,7 +477074,7 @@
]
],
"module-tla-delayed.html": [
- "f269dcbcb9399e0cd08306c529bcb2de97b5cdcc",
+ "e54bf5d5388d8fadacf5027d65cfec0a38510c27",
[
null,
{}
@@ -476435,14 +477088,14 @@
]
],
"module-tla-import.html": [
- "f59c3c0abe705b968ebabef504cd3a6c56830338",
+ "20645f4d788ad713bf9d1be53f2f47533f6aba3b",
[
null,
{}
]
],
"module-tla-promise.html": [
- "5fc30a8b0e74f496106f4e5b83439958c3118056",
+ "4f1281bcce4799fa792250989f571e3b1a7888d6",
[
null,
{}
@@ -479037,20 +479690,22 @@
]
],
"input-events-get-target-ranges-backspace.tentative.html": [
- "11b1830efb9fa7680069fa0a3d28efa0b048a36d",
+ "7f56fe6660e85106b932666a086efccfe86109f7",
[
null,
{
- "testdriver": true
+ "testdriver": true,
+ "timeout": "long"
}
]
],
"input-events-get-target-ranges-forwarddelete.tentative.html": [
- "b31afacb62dfca8b42734d098f9448086222ecc0",
+ "333a87a9d95bfda557aa37b67c32ae410f128d1c",
[
null,
{
- "testdriver": true
+ "testdriver": true,
+ "timeout": "long"
}
]
],
@@ -480455,6 +481110,13 @@
{}
]
],
+ "move-distance-clamped.html": [
+ "6c5f9597f9a884ca91edda4deef670ffee41cd34",
+ [
+ null,
+ {}
+ ]
+ ],
"move-transformed.html": [
"c9cdb9954b7002940559d8417e62afe69916428f",
[
@@ -480607,6 +481269,13 @@
null,
{}
]
+ ],
+ "visibility-hidden.html": [
+ "ec1c3316380e4b3f836015c2ed69fcceff772c50",
+ [
+ null,
+ {}
+ ]
]
},
"lifecycle": {
@@ -481559,6 +482228,13 @@
{}
]
],
+ "display-2.html": [
+ "e0d41e4412f9644922bf8b2c628434a4e87c2003",
+ [
+ null,
+ {}
+ ]
+ ],
"display-contents.html": [
"aeaa28da908816ad39619d9a47bbb43a3116bbe9",
[
@@ -491198,6 +491874,15 @@
}
]
],
+ "pointerevent_iframe-touch-action-none_touch.html": [
+ "1c9651d8c162ff1ea71677f8fd3296c5c65fcad9",
+ [
+ null,
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"pointerevent_lostpointercapture_for_disconnected_node.html": [
"b77d9e31e2cff90a92234ff5e43962be6a93dd6f",
[
@@ -503887,21 +504572,21 @@
]
],
"sanitizer-config.tentative.html": [
- "c780bbe21b74fc96c491b29181a05decb3e5fea5",
+ "5c115a467cb64e1e93e9293692d122271d64df8a",
[
null,
{}
]
],
"sanitizer-sanitize.tentative.html": [
- "219eff418918484a2b8f42062ea7bf8cb60dbad8",
+ "44961e02f4e8dcd876b250f2826cea4c7fe487ae",
[
null,
{}
]
],
"sanitizer-sanitizeToString.tentative.html": [
- "98bb4a4601863d2ee50ef18333f88cfbe43e40fe",
+ "7efbc3ca7bd7d8c84595744d622dc4c92c87e347",
[
null,
{}
@@ -504188,7 +504873,7 @@
]
],
"wakelock-onrelease.https.html": [
- "88c0cdb654c8e700195c430aa74fb2238ce9db10",
+ "524580cf370dbea3d10160f39dd2c63d4f3d4580",
[
null,
{
@@ -507509,7 +508194,7 @@
]
],
"element-internals-shadowroot.tentative.html": [
- "0f01cc41acf153512ff00b1147ccc224087167eb",
+ "aeaa322a31c220d01a19c9a35c01f3537af9d4e6",
[
null,
{}
@@ -524374,7 +525059,7 @@
]
],
"subresource-loading-from-web-bundle.tentative.html": [
- "1e0e78a320403e67d447a6df99ef819bd85c0106",
+ "574a25b681651affd6744c45370554a118befe16",
[
null,
{}
@@ -528817,6 +529502,13 @@
{}
]
],
+ "RTCPeerConnection-addIceCandidate-connectionSetup.html": [
+ "11fc4e4fa0c222df4e1469a5258295bf3703523c",
+ [
+ null,
+ {}
+ ]
+ ],
"RTCPeerConnection-addIceCandidate-timing.https.html": [
"9793844f56900927447f080ebbc92011d601fb9d",
[
@@ -528825,7 +529517,7 @@
]
],
"RTCPeerConnection-addIceCandidate.html": [
- "c68e442a2d5094f22d508ec8b6804bc2a58d072f",
+ "5fcb6e864a8a223d5062b22b7a8f5e89fbf9d4cb",
[
null,
{}
@@ -528938,6 +529630,13 @@
{}
]
],
+ "RTCPeerConnection-helper-test.html": [
+ "42f6652ac4c4b2165d918929977888c55daddd56",
+ [
+ null,
+ {}
+ ]
+ ],
"RTCPeerConnection-iceConnectionState-disconnected.https.html": [
"af55a0c003512f98dc96d11c07e8a5099ed1f5ea",
[
@@ -529072,7 +529771,7 @@
]
],
"RTCPeerConnection-setDescription-transceiver.html": [
- "a8056d473cd7ad3a3bdd348bc689aab756fab778",
+ "9bbab30d56e22f1f11846f8d2f6cf654631832f7",
[
null,
{}
@@ -529366,7 +530065,7 @@
]
],
"RTCRtpTransceiver.https.html": [
- "412736b1d195d7977b7be974ef4eddd828da3e12",
+ "2e1dcbb0d9573a4a027b84113af8a6444ad9b1e2",
[
null,
{
@@ -534018,7 +534717,7 @@
]
],
"set.window.js": [
- "1c20907939ad0b7b42987f9b2c573e4a17c10707",
+ "8e671d2dedd353793da72bdc9aebed269d0d9d4d",
[
"webstorage/set.window.html",
{}
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini
new file mode 100644
index 00000000000..f64b45fea6b
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-002.html]
+ [Hit test float]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini
deleted file mode 100644
index f29da48a2a0..00000000000
--- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-003.html]
- [Miss float below something else]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
deleted file mode 100644
index 4bfb0c2053a..00000000000
--- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[hit-test-floats-004.html]
- [Miss float below something else]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
new file mode 100644
index 00000000000..baa9f1a7541
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini
@@ -0,0 +1,4 @@
+[hit-test-floats-005.html]
+ [Miss clipped float]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001.html.ini
new file mode 100644
index 00000000000..286b53b6e31
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-001.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001v.html.ini
new file mode 100644
index 00000000000..3684416f5b5
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001v.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-001v.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002.html.ini
new file mode 100644
index 00000000000..dbe4233a739
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-002.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002v.html.ini
new file mode 100644
index 00000000000..a0b5e69c4be
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002v.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-002v.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003.html.ini
new file mode 100644
index 00000000000..8fde903bd12
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003.html.ini
@@ -0,0 +1,19 @@
+[image-as-flexitem-size-003.html]
+ [.flexbox > img 16]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 12]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003v.html.ini
new file mode 100644
index 00000000000..0865c9cb19c
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003v.html.ini
@@ -0,0 +1,19 @@
+[image-as-flexitem-size-003v.html]
+ [.flexbox > img 16]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 12]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004.html.ini
new file mode 100644
index 00000000000..da649930a95
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004.html.ini
@@ -0,0 +1,34 @@
+[image-as-flexitem-size-004.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004v.html.ini
new file mode 100644
index 00000000000..2a0b3330dc4
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004v.html.ini
@@ -0,0 +1,34 @@
+[image-as-flexitem-size-004v.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005.html.ini
new file mode 100644
index 00000000000..ccc0bc2253a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005.html.ini
@@ -0,0 +1,43 @@
+[image-as-flexitem-size-005.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 16]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 18]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
+ [.flexbox > img 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005v.html.ini
new file mode 100644
index 00000000000..3ae5a431843
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005v.html.ini
@@ -0,0 +1,43 @@
+[image-as-flexitem-size-005v.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 16]
+ expected: FAIL
+
+ [.flexbox > img 11]
+ expected: FAIL
+
+ [.flexbox > img 10]
+ expected: FAIL
+
+ [.flexbox > img 13]
+ expected: FAIL
+
+ [.flexbox > img 18]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
+ [.flexbox > img 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006.html.ini
new file mode 100644
index 00000000000..3dc2eb00fc7
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006.html.ini
@@ -0,0 +1,43 @@
+[image-as-flexitem-size-006.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 14]
+ expected: FAIL
+
+ [.flexbox > img 17]
+ expected: FAIL
+
+ [.flexbox > img 12]
+ expected: FAIL
+
+ [.flexbox > img 18]
+ expected: FAIL
+
+ [.flexbox > img 9]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
+ [.flexbox > img 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006v.html.ini
new file mode 100644
index 00000000000..9eb2855ec46
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006v.html.ini
@@ -0,0 +1,43 @@
+[image-as-flexitem-size-006v.html]
+ [.flexbox > img 15]
+ expected: FAIL
+
+ [.flexbox > img 14]
+ expected: FAIL
+
+ [.flexbox > img 17]
+ expected: FAIL
+
+ [.flexbox > img 12]
+ expected: FAIL
+
+ [.flexbox > img 18]
+ expected: FAIL
+
+ [.flexbox > img 9]
+ expected: FAIL
+
+ [.flexbox > img 8]
+ expected: FAIL
+
+ [.flexbox > img 5]
+ expected: FAIL
+
+ [.flexbox > img 4]
+ expected: FAIL
+
+ [.flexbox > img 7]
+ expected: FAIL
+
+ [.flexbox > img 6]
+ expected: FAIL
+
+ [.flexbox > img 1]
+ expected: FAIL
+
+ [.flexbox > img 3]
+ expected: FAIL
+
+ [.flexbox > img 2]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007.html.ini
new file mode 100644
index 00000000000..495ce451b17
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-007.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007v.html.ini
new file mode 100644
index 00000000000..416bfb37196
--- /dev/null
+++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007v.html.ini
@@ -0,0 +1,4 @@
+[image-as-flexitem-size-007v.html]
+ [.flexbox > img 4]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini
new file mode 100644
index 00000000000..4c79907309b
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini
@@ -0,0 +1,4 @@
+[CaretPosition-001.html]
+ [Element at (400, 100)]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
new file mode 100644
index 00000000000..e38782d8c85
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini
@@ -0,0 +1,4 @@
+[elementFromPoint-001.html]
+ [CSSOM View - 5 - extensions to the Document interface]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
deleted file mode 100644
index e181af5397f..00000000000
--- a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[elementsFromPoint-invalid-cases.html]
- [The root element is the last element returned for otherwise empty queries within the viewport]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
deleted file mode 100644
index e6e1f29e274..00000000000
--- a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[matchMedia-display-none-iframe.html]
- expected: ERROR
diff --git a/tests/wpt/metadata/css/selectors/is-where-error-recovery.tentative.html.ini b/tests/wpt/metadata/css/selectors/is-where-error-recovery.tentative.html.ini
new file mode 100644
index 00000000000..fb4b13050d0
--- /dev/null
+++ b/tests/wpt/metadata/css/selectors/is-where-error-recovery.tentative.html.ini
@@ -0,0 +1,4 @@
+[is-where-error-recovery.tentative.html]
+ [CSS Selectors: :is() and :where() error recovery]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/selectors/parsing/is.html.ini b/tests/wpt/metadata/css/selectors/parsing/is.html.ini
new file mode 100644
index 00000000000..941fc56bf74
--- /dev/null
+++ b/tests/wpt/metadata/css/selectors/parsing/is.html.ini
@@ -0,0 +1,19 @@
+[is.html]
+ [":is(#a)" should be a valid selector]
+ expected: FAIL
+
+ [".a.b ~ :is(.c.d ~ .e.f)" should be a valid selector]
+ expected: FAIL
+
+ [".a.b ~ .c.d:is(span.e + .f, .g.h > .i.j .k)" should be a valid selector]
+ expected: FAIL
+
+ [":is(:hover,:focus)" should be a valid selector]
+ expected: FAIL
+
+ ["a:is(:not(:hover))" should be a valid selector]
+ expected: FAIL
+
+ [":is(ul,ol,.list) > [hidden\]" should be a valid selector]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/selectors/parsing/where.html.ini b/tests/wpt/metadata/css/selectors/parsing/where.html.ini
new file mode 100644
index 00000000000..188d18b9618
--- /dev/null
+++ b/tests/wpt/metadata/css/selectors/parsing/where.html.ini
@@ -0,0 +1,19 @@
+[where.html]
+ [":where(#a)" should be a valid selector]
+ expected: FAIL
+
+ [":where(:hover,:focus)" should be a valid selector]
+ expected: FAIL
+
+ [".a.b ~ .c.d:where(span.e + .f, .g.h > .i.j .k)" should be a valid selector]
+ expected: FAIL
+
+ [":where(ul,ol,.list) > [hidden\]" should be a valid selector]
+ expected: FAIL
+
+ ["a:where(:not(:hover))" should be a valid selector]
+ expected: FAIL
+
+ [".a.b ~ :where(.c.d ~ .e.f)" should be a valid selector]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/form-associated/form-elements-namedItem.html.ini b/tests/wpt/metadata/custom-elements/form-associated/form-elements-namedItem.html.ini
new file mode 100644
index 00000000000..68ebf17de8b
--- /dev/null
+++ b/tests/wpt/metadata/custom-elements/form-associated/form-elements-namedItem.html.ini
@@ -0,0 +1,4 @@
+[form-elements-namedItem.html]
+ [Form associated custom elements should work with document.forms.elements.namedItem()]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/connection-pool/network-partition-key.html.ini b/tests/wpt/metadata/fetch/connection-pool/network-partition-key.html.ini
new file mode 100644
index 00000000000..890d1fb5747
--- /dev/null
+++ b/tests/wpt/metadata/fetch/connection-pool/network-partition-key.html.ini
@@ -0,0 +1,29 @@
+[network-partition-key.html]
+ expected: TIMEOUT
+ [Iframes]
+ expected: FAIL
+
+ [CSP sandbox]
+ expected: NOTRUN
+
+ [Workers]
+ expected: TIMEOUT
+
+ [Cross-site resources without credentials]
+ expected: FAIL
+
+ [about:blank from opaque origin iframe]
+ expected: NOTRUN
+
+ [Without credentials]
+ expected: FAIL
+
+ [Workers with cross-site resources]
+ expected: NOTRUN
+
+ [Cross-site resources with credentials]
+ expected: FAIL
+
+ [With credentials]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
index a0c94677fca..7707b85c1eb 100644
--- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini
@@ -315,27 +315,24 @@
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
- expected: FAIL
-
- [<iframe>: combined response Content-Type: text/html;" \\" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html */*]
+ [<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html */*;charset=gbk]
+ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*]
+ [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
expected: FAIL
- [<iframe>: separate response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
- [<iframe>: combined response Content-Type: text/html;x=" text/plain]
+ [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
- [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
+ [<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
index 5c001592859..d2df9b78483 100644
--- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini
+++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini
@@ -56,6 +56,3 @@
[separate text/javascript x/x]
expected: FAIL
- [separate text/javascript;charset=windows-1252 error text/javascript]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
index aa6eb8f6085..58de838d890 100644
--- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
+++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini
@@ -11,6 +11,6 @@
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
expected: FAIL
- [X-Content-Type-Options%3A%20'NosniFF']
+ [X-Content-Type-Options%3A%20%22nosniFF%22]
expected: FAIL
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+ [Multiple history traversals from the same task]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
index dc2e45516de..385376c7321 100644
--- a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_5.html]
+[traverse_the_history_4.html]
[Multiple history traversals, last would be aborted]
expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini b/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini
index 48dca82e3c0..5846438f1ec 100644
--- a/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini
@@ -11,9 +11,6 @@
[Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_DisplayP3_opaque.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_sRGB_transparent.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_interlaced_DisplayP3_transparent.png]
expected: FAIL
@@ -29,12 +26,6 @@
[Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_DisplayP3_transparent.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_interlaced_DisplayP3_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_opaque.png vs 2x2_16bit_ProPhoto_opaque.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_Rec2020_transparent.png]
expected: FAIL
@@ -44,9 +35,6 @@
[Canvas color params: srgb, uint8. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_interlaced_AdobeRGB_opaque.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_transparent.png vs 2x2_16bit_interlaced_ProPhoto_transparent.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_interlaced_Rec2020_transparent.png]
expected: FAIL
@@ -59,45 +47,18 @@
[Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_transparent.png vs 2x2_16bit_interlaced_AdobeRGB_transparent.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_interlaced_sRGB_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_interlaced_DisplayP3_transparent.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_sRGB_opaque.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_interlaced_AdobeRGB_opaque.png]
expected: FAIL
[Canvas color params: srgb, uint8. Testing 2x2_8bit_AdobeRGB_transparent.png vs 2x2_16bit_AdobeRGB_transparent.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_interlaced_Rec2020_opaque.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_interlaced_Rec2020_opaque.png]
expected: FAIL
[Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_interlaced_DisplayP3_opaque.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_interlaced_Rec2020_transparent.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_transparent.png vs 2x2_16bit_ProPhoto_transparent.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_DisplayP3_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_Rec2020_transparent.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_DisplayP3_transparent.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_sRGB_transparent.png]
expected: FAIL
@@ -107,15 +68,6 @@
[Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_AdobeRGB_opaque.png]
expected: FAIL
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_Rec2020_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_opaque.png vs 2x2_16bit_interlaced_ProPhoto_opaque.png]
- expected: FAIL
-
- [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_interlaced_sRGB_transparent.png]
- expected: FAIL
-
[Canvas color params: srgb, float16. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_interlaced_sRGB_opaque.png]
expected: FAIL
diff --git a/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini b/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
index 73457f22f71..2e0bfb43459 100644
--- a/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
+++ b/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini
@@ -1,2 +1,67 @@
[imageData-colorManagedBehavior.html]
- expected: ERROR
+ [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): e-SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test cretateImageData(width, height) from SRGB canvas ]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test getImageData(sx, sy, sw, sh) from SRGB canvas ]
+ expected: FAIL
+
+ [Test createImageData(imagedata): e-SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test createImageData(imagedata): SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test createImageData(imagedata): e-SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test cretateImageData(width, height) from e-SRGB canvas ]
+ expected: FAIL
+
+ [Test createImageData(imagedata): e-SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): e-SRGB canvas, e-SRGB F32 ImageData]
+ expected: FAIL
+
+ [Test createImageData(imagedata): SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test getImageData(sx, sy, sw, sh) from e-SRGB canvas ]
+ expected: FAIL
+
+ [Test createImageData(imagedata): SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, SRGB U8 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): e-SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
+ [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
index 2a166bb97b7..fc37df7e3fa 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini
@@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
- expected: CRASH
+ expected: TIMEOUT
[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/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
index cb0211f1d21..5f60c78e73c 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini
@@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-3.html]
type: testharness
- expected: CRASH
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 963d4cd20ef..9df1ac56f2a 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html]
type: testharness
- expected: CRASH
+ expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index e440b1e38c6..dc856a3d5a3 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
type: testharness
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini
deleted file mode 100644
index 633a99517d3..00000000000
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[form-double-submit-2.html]
- [preventDefault should allow onclick submit() to succeed]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
deleted file mode 100644
index 9f416703229..00000000000
--- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[form-double-submit-3.html]
- [<button> should have the same double-submit protection as <input type=submit>]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini
new file mode 100644
index 00000000000..337c20f9cde
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-1-nothrow-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini
new file mode 100644
index 00000000000..4728e2299c9
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-1-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini
new file mode 100644
index 00000000000..337c20f9cde
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-1-nothrow-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini
new file mode 100644
index 00000000000..4728e2299c9
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-1-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini
new file mode 100644
index 00000000000..3e36f3e5fb0
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-2-import-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini
new file mode 100644
index 00000000000..f3fe0d0e3d4
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini
@@ -0,0 +1,2 @@
+[evaluation-order-3-dynamic-sharedworker.html]
+ expected: ERROR
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini
new file mode 100644
index 00000000000..5ac282bdcdb
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini
@@ -0,0 +1,4 @@
+[evaluation-order-4-tla.html]
+ [Test evaluation order of modules]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini
index 30d23c291f1..9a0b66aa722 100644
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini
@@ -1,4 +1,5 @@
[module-tla-import.html]
+ expected: TIMEOUT
[document.write in an imported module]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini
deleted file mode 100644
index 8694e58234a..00000000000
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[module-tla-promise.html]
- expected: TIMEOUT
- [document.write in an imported module]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini
deleted file mode 100644
index 8195569d430..00000000000
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[reload.window.html]
- expected: TIMEOUT
- [Reloading a document.open()'d page should reload the URL of the entry realm's responsible document]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
index 01f7b72cbe7..edae5e5adcd 100644
--- a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
+++ b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini
@@ -5,5 +5,5 @@
expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
- expected: FAIL
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
index a56bad443a2..66bd350083b 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini
@@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
- expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL
diff --git a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata/webmessaging/without-ports/017.html.ini
deleted file mode 100644
index 064cf47545b..00000000000
--- a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[017.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, about:blank]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/webmessaging/without-ports/018.html.ini b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini
deleted file mode 100644
index 663a1f8fa30..00000000000
--- a/tests/wpt/metadata/webmessaging/without-ports/018.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[018.html]
- expected: TIMEOUT
- [origin of the script that invoked the method, javascript:]
- expected: TIMEOUT
-
diff --git a/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini
new file mode 100644
index 00000000000..fe8654e447c
--- /dev/null
+++ b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini
@@ -0,0 +1,4 @@
+[WorkerGlobalScope-close.html]
+ [Test sending a message after closing.]
+ expected: FAIL
+
diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html
index 7273daa8499..7273daa8499 100644
--- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html
+++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html
diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html.sub.headers b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html.sub.headers
index 77d3d8c0c44..77d3d8c0c44 100644
--- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html.sub.headers
+++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html.sub.headers
diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html
index 5b295e7393f..5b295e7393f 100644
--- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html
+++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html
diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html.sub.headers b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html.sub.headers
index 7de4ae2e6a5..7de4ae2e6a5 100644
--- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html.sub.headers
+++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html.sub.headers
diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html
index f790b49d98b..f790b49d98b 100644
--- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html
+++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html
diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html.sub.headers b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html.sub.headers
index 8a2329e8c2f..8a2329e8c2f 100644
--- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html.sub.headers
+++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html.sub.headers
diff --git a/tests/wpt/web-platform-tests/cookies/samesite/iframe.document.html b/tests/wpt/web-platform-tests/cookies/samesite/iframe.document.https.html
index 2d276dbcaa9..2d276dbcaa9 100644
--- a/tests/wpt/web-platform-tests/cookies/samesite/iframe.document.html
+++ b/tests/wpt/web-platform-tests/cookies/samesite/iframe.document.https.html
diff --git a/tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html b/tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html
index aca48227ce8..edeb42a0f57 100644
--- a/tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html
+++ b/tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html
@@ -3,7 +3,8 @@
<title>Tests OTPCredential</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
-<script src="./support/otpcredential-helper.js"></script>
+<script src="/resources/test-only-api.js"></script>
+<script src="support/otpcredential-helper.js"></script>
<script>
'use strict';
diff --git a/tests/wpt/web-platform-tests/credential-management/support/README.md b/tests/wpt/web-platform-tests/credential-management/support/README.md
index cacd959d026..f58d4cd0ce4 100644
--- a/tests/wpt/web-platform-tests/credential-management/support/README.md
+++ b/tests/wpt/web-platform-tests/credential-management/support/README.md
@@ -8,10 +8,13 @@ and the underlying operating system and mock its behavior.
Usage:
-1. Include `<script src="./support/otpcredential-helper.js"></script>` in your
-test
-2. Set expectations
+1. Include the following in your test:
+```html
+<script src="/resources/test-only-api.js"></script>
+<script src="support/otpcredential-helper.js"></script>
```
+2. Set expectations
+```javascript
await expect(receive).andReturn(() => {
// mock behavior
})
diff --git a/tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js b/tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js
index d5a7eb8c471..3cf4510585d 100644
--- a/tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js
+++ b/tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js
@@ -8,45 +8,32 @@
// these tests the browser must be run with these options:
// // --enable-blink-features=MojoJS,MojoJSTest
-async function loadChromiumResources() {
- if (!window.MojoInterfaceInterceptor) {
- // Do nothing on non-Chromium-based browsers or when the Mojo bindings are
- // not present in the global namespace.
- return;
- }
+const Status = {};
+async function loadChromiumResources() {
const resources = [
- '/gen/layout_test_data/mojo/public/js/mojo_bindings_lite.js',
'/gen/mojo/public/mojom/base/time.mojom-lite.js',
'/gen/third_party/blink/public/mojom/sms/sms_receiver.mojom-lite.js',
- '/resources/chromium/mock-sms-receiver.js',
];
- await Promise.all(resources.map(path => {
- const script = document.createElement('script');
- script.src = path;
- script.async = false;
- const promise = new Promise((resolve, reject) => {
- script.onload = resolve;
- script.onerror = reject;
- });
- document.head.appendChild(script);
- return promise;
- }));
+ await loadMojoResources(resources, true);
+ await loadScript('/resources/chromium/mock-sms-receiver.js');
Status.kSuccess = blink.mojom.SmsStatus.kSuccess;
Status.kTimeout = blink.mojom.SmsStatus.kTimeout;
Status.kCancelled = blink.mojom.SmsStatus.kCancelled;
};
-const Status = {};
-
async function create_sms_provider() {
if (typeof SmsProvider === 'undefined') {
- await loadChromiumResources();
+ if (isChromiumBased) {
+ await loadChromiumResources();
+ } else {
+ throw new Error('Mojo testing interface is not available.');
+ }
}
- if (typeof SmsProvider == 'undefined') {
- throw new Error('Mojo testing interface is not available.');
+ if (typeof SmsProvider === 'undefined') {
+ throw new Error('Failed to set up SmsProvider.');
}
return new SmsProvider();
}
diff --git a/tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html b/tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html
index 37fe6e1cd89..83f25d573c8 100644
--- a/tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html
+++ b/tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html
@@ -1,5 +1,6 @@
<!doctype html>
-<script src="./otpcredential-helper.js"></script>
+<script src="/resources/test-only-api.js"></script>
+<script src="otpcredential-helper.js"></script>
<script>
'use strict';
diff --git a/tests/wpt/web-platform-tests/css/css-display/display-math-on-non-mathml-elements.html b/tests/wpt/web-platform-tests/css/css-display/display-math-on-non-mathml-elements.html
new file mode 100644
index 00000000000..2d117cfff57
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-display/display-math-on-non-mathml-elements.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>display: math and inline-math on non-MathML compute to flow</title>
+<link rel="help" href="https://drafts.csswg.org/css-display/#the-display-properties">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id="container">
+
+ <div data-expected="block" style="display: math;"></div>
+ <div data-expected="inline" style="display: inline-math;"></div>
+ <div data-expected="inline" style="display: inline math;"></div>
+ <div data-expected="block" style="display: block math;"></div>
+
+ <svg data-expected="block" style="display: math;"></svg>
+ <svg data-expected="inline" style="display: inline-math;"></svg>
+ <svg data-expected="inline" style="display: inline math;"></svg>
+ <svg data-expected="block" style="display: block math;"></svg>
+
+</div>
+
+<script>
+ Array.from(container.children).forEach(element => {
+ test(function() {
+ assert_equals(window.getComputedStyle(element).display,
+ element.getAttribute('data-expected'));
+ }, `computed display on <${element.tagName} style="${element.getAttribute('style')}">`);
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001.html
new file mode 100644
index 00000000000..6972d9cd9c4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flex item w/ intrinsic ratio.
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: row;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="16" data-expected-height="16">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001v.html
new file mode 100644
index 00000000000..91231dc4f44
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001v.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flex item w/ intrinsic ratio
+ (with a vertical writing-mode on the flex items).
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: row;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ writing-mode: vertical-lr;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="16" data-expected-height="16">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002.html
new file mode 100644
index 00000000000..4ae30b8afeb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flex item w/ intrinsic ratio.
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: column;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="16" data-expected-height="16">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002v.html
new file mode 100644
index 00000000000..6d0c0cafa77
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002v.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flex item w/ intrinsic ratio
+ (with a vertical writing-mode on the flex items).
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: column;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ writing-mode: vertical-lr;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="16" data-expected-height="16">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="34" data-expected-height="34">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003.html
new file mode 100644
index 00000000000..03a9a6e3547
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on stretched flex item w/ intrinsic ratio.
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: row;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: stretch;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="16" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="34" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="34" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="10">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003v.html
new file mode 100644
index 00000000000..fd728027e0c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003v.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on stretched flex item w/ intrinsic ratio
+ (with a vertical writing-mode on the flex items).
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: row;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: stretch;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ writing-mode: vertical-rl;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="16" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="34" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="34" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="10">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004.html
new file mode 100644
index 00000000000..15e9f729271
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on stretched flex item w/ intrinsic ratio.
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: column;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: stretch;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="40" data-expected-height="16">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="40" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="40" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="40" data-expected-height="34">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="10" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004v.html
new file mode 100644
index 00000000000..10e871a1c0e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004v.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on stretched flex item w/ intrinsic ratio
+ (with a vertical writing-mode on the flex items).
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: column;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: stretch;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ writing-mode: vertical-rl;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="40" data-expected-height="16">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="40" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="40" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="40" data-expected-height="34">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="10" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005.html
new file mode 100644
index 00000000000..c4250956682
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flexible flex item w/ intrinsic ratio.
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: row;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ flex: 1;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 1 1 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="10" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005v.html
new file mode 100644
index 00000000000..4acb8e259a9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005v.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flexible flex item w/ intrinsic ratio
+ (with a vertical writing-mode on the flex items).
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: row;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ flex: 1;
+ writing-mode: vertical-lr;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 1 1 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="10" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="40" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006.html
new file mode 100644
index 00000000000..e97305e7074
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flexible flex item w/ intrinsic ratio.
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: column;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ flex: 1;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 1 1 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="10">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006v.html
new file mode 100644
index 00000000000..4f42288737d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006v.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flexible flex item w/ intrinsic ratio
+ (with a vertical writing-mode on the flex items).
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: column;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ br { clear: both; }
+
+ .flexbox > * {
+ flex: 1;
+ writing-mode: vertical-lr;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 1 1 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ max-height: 6px" data-expected-width="6" data-expected-height="6">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 6px;
+ max-height: 10px" data-expected-width="6" data-expected-height="10">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="40" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="40">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007.html
new file mode 100644
index 00000000000..16728b8c7e4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flex item w/ intrinsic ratio,
+ some padding, and box-sizing:border-box.
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: row;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ img {
+ padding: 1px 2px 3px 4px;
+ box-sizing: border-box;
+ background: pink;
+ }
+
+ br { clear: both; }
+
+ .flexbox > * {
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="22" data-expected-height="20">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="28">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="32" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="28">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="32">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="36" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="36" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="34" data-expected-height="32">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 16px" data-expected-width="16" data-expected-height="14">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 16px" data-expected-width="18" data-expected-height="16">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 20px;
+ max-height: 14px" data-expected-width="16" data-expected-height="14">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 14px;
+ max-height: 20px" data-expected-width="14" data-expected-height="12">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007v.html
new file mode 100644
index 00000000000..c9fbcc3e98a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007v.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Testing how explicit main-size & cross-size constraints
+ influence sizing on non-stretched flex item w/ intrinsic ratio,
+ some padding, box-sizing:border-box, and a vertical writing-mode.
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size">
+ <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size">
+ <style>
+ .flexbox {
+ display: flex;
+ flex-direction: row;
+ border: 1px solid black;
+ margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */
+ width: 40px;
+ height: 40px;
+
+ justify-content: flex-start;
+ align-items: flex-start;
+
+ float: left; /* For testing in "rows" */
+ }
+ img {
+ padding: 1px 2px 3px 4px;
+ box-sizing: border-box;
+ background: pink;
+ }
+
+ br { clear: both; }
+
+ .flexbox > * {
+ writing-mode: vertical-lr;
+
+ /* Disable "min-width:auto"/"min-height:auto" to focus purely on
+ later channels of influence. */
+ min-width: 0;
+ min-height: 0;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+ </head>
+ <body onload="checkLayout('.flexbox > img')">
+ <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. -->
+
+ <!-- Row 1: no special sizing: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" data-expected-width="22" data-expected-height="20">
+ </div>
+ <br>
+
+ <!-- Row 2: Specified main-size, cross-size, or flex-basis: -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="28">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="height: 30px" data-expected-width="32" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="28">
+ </div>
+ <br>
+
+ <!-- Row 3: min main-size OR min cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="32">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="36" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ min-height: 34px" data-expected-width="36" data-expected-height="34">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 34px;
+ min-height: 30px" data-expected-width="34" data-expected-height="32">
+ </div>
+ <br>
+
+ <!-- Row 4: max main-size OR max cross-size, or both -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 16px" data-expected-width="16" data-expected-height="14">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-height: 16px" data-expected-width="18" data-expected-height="16">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 20px;
+ max-height: 14px" data-expected-width="16" data-expected-height="14">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 14px;
+ max-height: 20px" data-expected-width="14" data-expected-height="12">
+ </div>
+ <br>
+
+ <!-- Row 5: min main-size vs. max cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <br>
+
+ <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa -->
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="min-width: 30px;
+ height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 30px;
+ max-height: 10px" data-expected-width="30" data-expected-height="10">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="max-width: 10px;
+ height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ <div class="flexbox">
+ <img src="support/solidblue.png" style="width: 10px;
+ min-height: 30px" data-expected-width="10" data-expected-height="30">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container-ref.html
new file mode 100644
index 00000000000..aa0ea5595d0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container-ref.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test Reference: Balance a grid container</title>
+ <link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+
+ <style>
+ :root {
+ font: 16px/1.25 sans-serif;
+ }
+ .two-columns {
+ column-count: 2;
+ width: 550px;
+ }
+ .two-column-grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-auto-rows: auto;
+ }
+ .grid-col-1 {
+ grid-column: 1;
+ }
+ .grid-col-2 {
+ grid-column: 2;
+ }
+ .keep-together {
+ display: inline-block;
+ }
+ </style>
+
+ <div class="two-columns">
+ <div class="two-column-grid">
+ <div class="grid-col-1">ID Number</div>
+ <div class="grid-col-2">01234567890</div>
+ <div class="grid-col-1">Address</div>
+ <div class="grid-col-2">
+ <div class="keep-together">
+ 123 Fake Street<br>
+ London<br>
+ NW1 1AA<br>
+ UK
+ </div>
+ </div>
+ </div>
+
+ <div class="two-column-grid">
+ <div class="grid-col-1">Relevant Countries</div>
+ <div class="grid-col-2">
+ Ireland<br>
+ United Kingdom
+ </div>
+ </div>
+ </div>
+
+ <div>
+ Some content underneath the details.
+ </div>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container.html b/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container.html
new file mode 100644
index 00000000000..64df23e09fb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test: Balance a grid container</title>
+ <link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+ <link rel="help" href="https://drafts.csswg.org/css-multicol-1/#cf">
+ <link ref="help" href="https://drafts.csswg.org/css-grid/">
+ <link ref="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1657345">
+ <link rel="match" href="balance-grid-container-ref.html">
+ <meta name="assert" content="This test verifies a grid container in a balanced multicol container can have a balance multicol height.">
+
+ <style>
+ :root {
+ font: 16px/1.25 sans-serif;
+ }
+ .two-columns {
+ column-count: 2;
+ width: 550px;
+ }
+ .two-column-grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-auto-rows: auto;
+ }
+ .grid-col-1 {
+ grid-column: 1;
+ }
+ .grid-col-2 {
+ grid-column: 2;
+ }
+ .keep-together {
+ display: inline-block;
+ }
+ </style>
+
+ <div class="two-columns">
+ <div class="two-column-grid">
+ <div class="grid-col-1">ID Number</div>
+ <div class="grid-col-2">01234567890</div>
+ <div class="grid-col-1">Address</div>
+ <div class="grid-col-2">
+ <div class="keep-together">
+ 123 Fake Street<br>
+ London<br>
+ NW1 1AA<br>
+ UK
+ </div>
+ </div>
+ <div class="grid-col-1">Relevant Countries</div>
+ <div class="grid-col-2">
+ Ireland<br>
+ United Kingdom
+ </div>
+ </div>
+ </div>
+
+ <div>
+ Some content underneath the details.
+ </div>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-012.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-012.html
new file mode 100644
index 00000000000..7f1f9ae1ac4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-012.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#filling-columns">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="width:100px; height:100px; background:red;">
+ <div style="columns:3; width:75px; height:100px; column-gap:0;">
+ <div style="column-span:all; width:100px; height:70px; background:green;"></div>
+ <div style="height:120px; background:green;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html
index b8c157a1ecd..c6cdb55baad 100644
--- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html
+++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html
@@ -73,10 +73,11 @@
test(function() {
let container = document.getElementById('container_auto_h');
let content = document.getElementById('content_auto_h');
- assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "auto/auto scrollWidth");
+ assert_equals(container.clientWidth, 200, "auto/auto clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "auto/auto offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "auto/auto clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "auto/auto offsetWidth");
}, "Unexpected layout: overflow auto, scrollbar-gutter auto, horizontal-tb");
test(function() {
@@ -84,6 +85,7 @@
let content = document.getElementById('content_scroll_h');
assert_equals(container.scrollWidth, 180, "scroll/auto scrollWidth");
assert_equals(container.clientWidth, 180, "scroll/auto clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "scroll/auto offsetLeft");
assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth");
assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth");
}, "Unexpected layout: overflow scroll, scrollbar-gutter auto, horizontal-tb");
@@ -93,6 +95,7 @@
let content = document.getElementById('content_visible_h');
assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth");
assert_equals(container.clientWidth, 200, "visible/auto clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "visible/auto offsetLeft");
assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
}, "Unexpected layout: overflow visible, scrollbar-gutter auto, horizontal-tb");
@@ -100,26 +103,31 @@
test(function() {
let container = document.getElementById('container_hidden_h');
let content = document.getElementById('content_hidden_h');
- assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "visible/auto clientWidth");
+ assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth");
+ assert_equals(container.clientWidth, 200, "hidden/auto clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "hidden/auto offsetLeft");
assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth");
assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth");
}, "Unexpected layout: overflow hidden, scrollbar-gutter auto, horizontal-tb");
+ // vertical
+
test(function() {
let container = document.getElementById('container_auto_v');
let content = document.getElementById('content_auto_v');
- assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "auto/auto scrollHeight");
+ assert_equals(container.clientHeight, 200, "auto/auto clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "auto/auto offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "auto/auto clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "auto/auto offsetHeight");
}, "Unexpected layout: overflow auto, scrollbar-gutter auto, vertical-rl");
test(function() {
let container = document.getElementById('container_scroll_v');
let content = document.getElementById('content_scroll_v');
- assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 180, "visible/auto clientHeight");
+ assert_equals(container.scrollHeight, 180, "scroll/auto scrollHeight");
+ assert_equals(container.clientHeight, 180, "scroll/auto clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "scroll/auto offsetTop");
assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight");
assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight");
}, "Unexpected layout: overflow scroll, scrollbar-gutter auto, vertical-rl");
@@ -129,6 +137,7 @@
let content = document.getElementById('content_visible_v');
assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight");
assert_equals(container.clientHeight, 200, "visible/auto clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "visible/auto offsetTop");
assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
}, "Unexpected layout: overflow visible, scrollbar-gutter auto, vertical-rl");
@@ -136,8 +145,9 @@
test(function() {
let container = document.getElementById('container_hidden_v');
let content = document.getElementById('content_hidden_v');
- assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "visible/auto clientHeight");
+ assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight");
+ assert_equals(container.clientHeight, 200, "hidden/auto clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "hidden/auto offsetTop");
assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight");
assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight");
}, "Unexpected layout: overflow hidden, scrollbar-gutter auto, vertical-rl");
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html
index 5cfc45c358c..8756ab7f0f8 100644
--- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html
+++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html
@@ -19,6 +19,10 @@
background: deepskyblue;
}
+ .container.force {
+ scrollbar-gutter: stable force;
+ }
+
.content {
height: 100%;
width: 100%;
@@ -70,78 +74,130 @@
function performTest() {
setup({explicit_done: true});
+ // horizontal
+
test(function() {
let container = document.getElementById('container_auto_h');
let content = document.getElementById('content_auto_h');
- assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 180, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 180, "auto/stable scrollWidth");
+ assert_equals(container.clientWidth, 180, "auto/stable clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "auto/stable offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "auto/stable clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/stable offsetWidth");
}, "Unexpected layout: overflow auto, scrollbar-gutter stable, horizontal-tb");
test(function() {
let container = document.getElementById('container_scroll_h');
let content = document.getElementById('content_scroll_h');
- assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 180, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth");
- assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth");
+ assert_equals(container.scrollWidth, 180, "scroll/stable scrollWidth");
+ assert_equals(container.clientWidth, 180, "scroll/stable clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "scroll/stable offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "scroll/stable clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/stable offsetWidth");
}, "Unexpected layout: overflow scroll, scrollbar-gutter stable, horizontal-tb");
test(function() {
let container = document.getElementById('container_visible_h');
let content = document.getElementById('content_visible_h');
- assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "visible/stable scrollWidth");
+ assert_equals(container.clientWidth, 200, "visible/stable clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "visible/stable clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "visible/stable offsetWidth");
}, "Unexpected layout: overflow visible, scrollbar-gutter stable, horizontal-tb");
test(function() {
let container = document.getElementById('container_hidden_h');
let content = document.getElementById('content_hidden_h');
- assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "hidden/stable scrollWidth");
+ assert_equals(container.clientWidth, 200, "hidden/stable clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "hidden/stable clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "hidden/stable offsetWidth");
}, "Unexpected layout: overflow hidden, scrollbar-gutter stable, horizontal-tb");
test(function() {
+ let container = document.getElementById('container_visible_force_h');
+ let content = document.getElementById('content_visible_force_h');
+ assert_equals(container.scrollWidth, 180, "visible/stable force scrollWidth");
+ assert_equals(container.clientWidth, 180, "visible/stable force clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable force offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "visible/stable force clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/stable force offsetWidth");
+ }, "Unexpected layout: overflow visible, scrollbar-gutter stable force, horizontal-tb");
+
+ test(function() {
+ let container = document.getElementById('container_hidden_force_h');
+ let content = document.getElementById('content_hidden_force_h');
+ assert_equals(container.scrollWidth, 180, "hidden/stable force scrollWidth");
+ assert_equals(container.clientWidth, 180, "hidden/stable force clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable force offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "hidden/stable force clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/stable force offsetWidth");
+ }, "Unexpected layout: overflow hidden, scrollbar-gutter stable force, horizontal-tb");
+
+ // vertical
+
+ test(function() {
let container = document.getElementById('container_auto_v');
let content = document.getElementById('content_auto_v');
- assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 180, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 180, "auto/stable scrollHeight");
+ assert_equals(container.clientHeight, 180, "auto/stable clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "auto/stable offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "auto/stable clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/stable offsetHeight");
}, "Unexpected layout: overflow auto, scrollbar-gutter stable, vertical-rl");
test(function() {
let container = document.getElementById('container_scroll_v');
let content = document.getElementById('content_scroll_v');
- assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 180, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight");
- assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight");
+ assert_equals(container.scrollHeight, 180, "scroll/stable scrollHeight");
+ assert_equals(container.clientHeight, 180, "scroll/stable clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "scroll/stable offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "scroll/stable clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/stable offsetHeight");
}, "Unexpected layout: overflow scroll, scrollbar-gutter stable, vertical-rl");
test(function() {
let container = document.getElementById('container_visible_v');
let content = document.getElementById('content_visible_v');
- assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "visible/stable scrollHeight");
+ assert_equals(container.clientHeight, 200, "visible/stable clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "visible/stable offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "visible/stable clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "visible/stable offsetHeight");
}, "Unexpected layout: overflow visible, scrollbar-gutter stable, vertical-rl");
test(function() {
let container = document.getElementById('container_hidden_v');
let content = document.getElementById('content_hidden_v');
- assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "hidden/stable scrollHeight");
+ assert_equals(container.clientHeight, 200, "hidden/stable clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "hidden/stable offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "hidden/stable clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "hidden/stable offsetHeight");
}, "Unexpected layout: overflow hidden, scrollbar-gutter stable, vertical-rl");
+ test(function() {
+ let container = document.getElementById('container_visible_force_v');
+ let content = document.getElementById('content_visible_force_v');
+ assert_equals(container.scrollHeight, 180, "visible/stable force scrollHeight");
+ assert_equals(container.clientHeight, 180, "visible/stable force clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "visible/stable force offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "visible/stable force clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/stable force offsetHeight");
+ }, "Unexpected layout: overflow visible, scrollbar-gutter stable force, vertical-rl");
+
+ test(function() {
+ let container = document.getElementById('container_hidden_force_v');
+ let content = document.getElementById('content_hidden_force_v');
+ assert_equals(container.scrollHeight, 180, "hidden/stable force scrollHeight");
+ assert_equals(container.clientHeight, 180, "hidden/stable force clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "hidden/stable force offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "hidden/stable force clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/stable force offsetHeight");
+ }, "Unexpected layout: overflow hidden, scrollbar-gutter stable force, vertical-rl");
+
done();
}
@@ -166,6 +222,16 @@
<div class="content" id="content_hidden_h">overflow-y: hidden</div>
</div>
+ scrollbar-gutter: stable force
+
+ <div class="container classic horizontal visible force" id="container_visible_force_h">
+ <div class="content" id="content_visible_force_h">overflow: visible (force)</div>
+ </div>
+
+ <div class="container classic horizontal hidden force" id="container_hidden_force_h">
+ <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div>
+ </div>
+
writing-mode: vertical-rl;
<div class="container classic vertical auto" id="container_auto_v">
@@ -184,4 +250,14 @@
<div class="content" id="content_hidden_v">overflow-x: hidden</div>
</div>
+ scrollbar-gutter: stable force
+
+ <div class="container classic vertical visible force" id="container_visible_force_v">
+ <div class="content" id="content_visible_force_v">overflow: visible</div>
+ </div>
+
+ <div class="container classic vertical hidden force" id="container_hidden_force_v">
+ <div class="content" id="content_hidden_force_v">overflow-x: hidden</div>
+ </div>
+
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html
index 17f724fb37c..1002b462390 100644
--- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html
+++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html
@@ -19,6 +19,10 @@
background: deepskyblue;
}
+ .container.force {
+ scrollbar-gutter: always force;
+ }
+
.content {
height: 100%;
width: 100%;
@@ -70,78 +74,130 @@
function performTest() {
setup({explicit_done: true});
+ // horizontal
+
test(function() {
let container = document.getElementById('container_auto_h');
let content = document.getElementById('content_auto_h');
- assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 180, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 180, "auto/always scrollWidth");
+ assert_equals(container.clientWidth, 180, "auto/always clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "auto/always offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "auto/always clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/always offsetWidth");
}, "Unexpected layout: overflow auto, scrollbar-gutter always, horizontal-tb");
test(function() {
let container = document.getElementById('container_scroll_h');
let content = document.getElementById('content_scroll_h');
- assert_equals(container.scrollWidth, 180, "scroll/auto scrollWidth");
- assert_equals(container.clientWidth, 180, "scroll/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth");
- assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth");
+ assert_equals(container.scrollWidth, 180, "scroll/always scrollWidth");
+ assert_equals(container.clientWidth, 180, "scroll/always clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "scroll/always offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "scroll/always clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/always offsetWidth");
}, "Unexpected layout: overflow scroll, scrollbar-gutter always, horizontal-tb");
test(function() {
let container = document.getElementById('container_visible_h');
let content = document.getElementById('content_visible_h');
- assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "visible/always scrollWidth");
+ assert_equals(container.clientWidth, 200, "visible/always clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "visible/always offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "visible/always clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "visible/always offsetWidth");
}, "Unexpected layout: overflow visible, scrollbar-gutter always, horizontal-tb");
test(function() {
let container = document.getElementById('container_hidden_h');
let content = document.getElementById('content_hidden_h');
- assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "hidden/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "hidden/always scrollWidth");
+ assert_equals(container.clientWidth, 200, "hidden/always clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "hidden/always clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "hidden/always offsetWidth");
}, "Unexpected layout: overflow hidden, scrollbar-gutter always, horizontal-tb");
test(function() {
+ let container = document.getElementById('container_visible_force_h');
+ let content = document.getElementById('content_visible_force_h');
+ assert_equals(container.scrollWidth, 180, "visible/always force scrollWidth");
+ assert_equals(container.clientWidth, 180, "visible/always force clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "visible/always force offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "visible/always force clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/always force offsetWidth");
+ }, "Unexpected layout: overflow visible, scrollbar-gutter always force, horizontal-tb");
+
+ test(function() {
+ let container = document.getElementById('container_hidden_force_h');
+ let content = document.getElementById('content_hidden_force_h');
+ assert_equals(container.scrollWidth, 180, "hidden/always force scrollWidth");
+ assert_equals(container.clientWidth, 180, "hidden/always force clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always force offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "hidden/always force clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/always force offsetWidth");
+ }, "Unexpected layout: overflow hidden, scrollbar-gutter always force, horizontal-tb");
+
+ // vertical
+
+ test(function() {
let container = document.getElementById('container_auto_v');
let content = document.getElementById('content_auto_v');
- assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 180, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 180, "auto/always scrollHeight");
+ assert_equals(container.clientHeight, 180, "auto/always clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "auto/always offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "auto/always clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/always offsetHeight");
}, "Unexpected layout: overflow auto, scrollbar-gutter always, vertical-rl");
test(function() {
let container = document.getElementById('container_scroll_v');
let content = document.getElementById('content_scroll_v');
- assert_equals(container.scrollHeight, 180, "scroll/auto scrollHeight");
- assert_equals(container.clientHeight, 180, "scroll/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight");
- assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight");
+ assert_equals(container.scrollHeight, 180, "scroll/always scrollHeight");
+ assert_equals(container.clientHeight, 180, "scroll/always clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "scroll/always offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "scroll/always clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/always offsetHeight");
}, "Unexpected layout: overflow scroll, scrollbar-gutter always, vertical-rl");
test(function() {
let container = document.getElementById('container_visible_v');
let content = document.getElementById('content_visible_v');
- assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "visible/always scrollHeight");
+ assert_equals(container.clientHeight, 200, "visible/always clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "visible/always offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "visible/always clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "visible/always offsetHeight");
}, "Unexpected layout: overflow visible, scrollbar-gutter always, vertical-rl");
test(function() {
let container = document.getElementById('container_hidden_v');
let content = document.getElementById('content_hidden_v');
- assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "hidden/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "hidden/always scrollHeight");
+ assert_equals(container.clientHeight, 200, "hidden/always clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "hidden/always offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "hidden/always clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "hidden/always offsetHeight");
}, "Unexpected layout: overflow hidden, scrollbar-gutter always, vertical-rl");
+ test(function() {
+ let container = document.getElementById('container_visible_force_v');
+ let content = document.getElementById('content_visible_force_v');
+ assert_equals(container.scrollHeight, 180, "visible/always force scrollHeight");
+ assert_equals(container.clientHeight, 180, "visible/always force clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "visible/always force offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "visible/always force clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/always force offsetHeight");
+ }, "Unexpected layout: overflow visible, scrollbar-gutter always force, vertical-rl");
+
+ test(function() {
+ let container = document.getElementById('container_hidden_force_v');
+ let content = document.getElementById('content_hidden_force_v');
+ assert_equals(container.scrollHeight, 180, "hidden/always force scrollHeight");
+ assert_equals(container.clientHeight, 180, "hidden/always force clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "hidden/always force offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "hidden/always force clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/always force offsetHeight");
+ }, "Unexpected layout: overflow hidden, scrollbar-gutter always force, vertical-rl");
+
done();
}
@@ -166,6 +222,16 @@
<div class="content" id="content_hidden_h">overflow-y: hidden</div>
</div>
+ scrollbar-gutter: always force
+
+ <div class="container classic horizontal visible force" id="container_visible_force_h">
+ <div class="content" id="content_visible_force_h">overflow: visible (force)</div>
+ </div>
+
+ <div class="container classic horizontal hidden force" id="container_hidden_force_h">
+ <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div>
+ </div>
+
writing-mode: vertical-rl;
<div class="container classic vertical auto" id="container_auto_v">
@@ -184,4 +250,14 @@
<div class="content" id="content_hidden_v">overflow-x: hidden</div>
</div>
+ scrollbar-gutter: always force
+
+ <div class="container classic vertical visible force" id="container_visible_force_v">
+ <div class="content" id="content_visible_force_v">overflow: visible</div>
+ </div>
+
+ <div class="container classic vertical hidden force" id="container_hidden_force_v">
+ <div class="content" id="content_hidden_force_v">overflow-x: hidden</div>
+ </div>
+
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html
index 2f9ac9b7f33..b41e3491f27 100644
--- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html
+++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html
@@ -19,6 +19,10 @@
background: deepskyblue;
}
+ .container.force {
+ scrollbar-gutter: stable both force;
+ }
+
.content {
height: 100%;
width: 100%;
@@ -70,78 +74,130 @@
function performTest() {
setup({explicit_done: true});
+ // horizontal
+
test(function() {
let container = document.getElementById('container_auto_h');
let content = document.getElementById('content_auto_h');
- assert_equals(container.scrollWidth, 160, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 160, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 160, "auto/stable both scrollWidth");
+ assert_equals(container.clientWidth, 160, "auto/stable both clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft - 20, "auto/stable both offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "auto/stable both clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/stable both offsetWidth");
}, "Unexpected layout: overflow auto, scrollbar-gutter stable both, horizontal-tb");
test(function() {
let container = document.getElementById('container_scroll_h');
let content = document.getElementById('content_scroll_h');
- assert_equals(container.scrollWidth, 160, "scroll/auto scrollWidth");
- assert_equals(container.clientWidth, 160, "scroll/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth");
- assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth");
+ assert_equals(container.scrollWidth, 160, "scroll/stable both scrollWidth");
+ assert_equals(container.clientWidth, 160, "scroll/stable both clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft - 20, "scroll/stable both offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "scroll/stable both clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/stable both offsetWidth");
}, "Unexpected layout: overflow scroll, scrollbar-gutter stable both, horizontal-tb");
test(function() {
let container = document.getElementById('container_visible_h');
let content = document.getElementById('content_visible_h');
- assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "visible/stable both scrollWidth");
+ assert_equals(container.clientWidth, 200, "visible/stable both clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable both offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "visible/stable both clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "visible/stable both offsetWidth");
}, "Unexpected layout: overflow visible, scrollbar-gutter stable both, horizontal-tb");
test(function() {
let container = document.getElementById('container_hidden_h');
let content = document.getElementById('content_hidden_h');
- assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "hidden/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "hidden/stable both scrollWidth");
+ assert_equals(container.clientWidth, 200, "hidden/stable both clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable both offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "hidden/stable both clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "hidden/stable both offsetWidth");
}, "Unexpected layout: overflow hidden, scrollbar-gutter stable both, horizontal-tb");
test(function() {
+ let container = document.getElementById('container_visible_force_h');
+ let content = document.getElementById('content_visible_force_h');
+ assert_equals(container.scrollWidth, 160, "visible/stable both force scrollWidth");
+ assert_equals(container.clientWidth, 160, "visible/stable both force clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft - 20, "visible/stable both force offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "visible/stable both force clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/stable both force offsetWidth");
+ }, "Unexpected layout: overflow visible, scrollbar-gutter stable both force, horizontal-tb");
+
+ test(function() {
+ let container = document.getElementById('container_hidden_force_h');
+ let content = document.getElementById('content_hidden_force_h');
+ assert_equals(container.scrollWidth, 160, "hidden/stable both force scrollWidth");
+ assert_equals(container.clientWidth, 160, "hidden/stable both force clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft - 20, "hidden/stable both force offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "hidden/stable both force clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/stable both force offsetWidth");
+ }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both force, horizontal-tb");
+
+ // vertical
+
+ test(function() {
let container = document.getElementById('container_auto_v');
let content = document.getElementById('content_auto_v');
- assert_equals(container.scrollHeight, 160, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 160, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 160, "auto/stable both scrollHeight");
+ assert_equals(container.clientHeight, 160, "auto/stable both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop - 20, "auto/stable both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "auto/stable both clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/stable both offsetHeight");
}, "Unexpected layout: overflow auto, scrollbar-gutter stable both, vertical-rl");
test(function() {
let container = document.getElementById('container_scroll_v');
let content = document.getElementById('content_scroll_v');
- assert_equals(container.scrollHeight, 160, "scroll/auto scrollHeight");
- assert_equals(container.clientHeight, 160, "scroll/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight");
- assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight");
+ assert_equals(container.scrollHeight, 160, "scroll/stable both scrollHeight");
+ assert_equals(container.clientHeight, 160, "scroll/stable both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop - 20, "scroll/stable both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "scroll/stable both clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/stable both offsetHeight");
}, "Unexpected layout: overflow scroll, scrollbar-gutter stable both, vertical-rl");
test(function() {
let container = document.getElementById('container_visible_v');
let content = document.getElementById('content_visible_v');
- assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "visible/stable both scrollHeight");
+ assert_equals(container.clientHeight, 200, "visible/stable both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "visible/stable both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "visible/stable both clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "visible/stable both offsetHeight");
}, "Unexpected layout: overflow visible, scrollbar-gutter stable both, vertical-rl");
test(function() {
let container = document.getElementById('container_hidden_v');
let content = document.getElementById('content_hidden_v');
- assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "hidden/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "hidden/stable both scrollHeight");
+ assert_equals(container.clientHeight, 200, "hidden/stable both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "hidden/stable both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "hidden/stable both clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "hidden/stable both offsetHeight");
}, "Unexpected layout: overflow hidden, scrollbar-gutter stable both, vertical-rl");
+ test(function() {
+ let container = document.getElementById('container_visible_force_v');
+ let content = document.getElementById('content_visible_force_v');
+ assert_equals(container.scrollHeight, 160, "visible/stable both scrollHeight");
+ assert_equals(container.clientHeight, 160, "visible/stable both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop - 20, "visible/stable both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "visible/stable both clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/stable both offsetHeight");
+ }, "Unexpected layout: overflow visible, scrollbar-gutter stable both force, vertical-rl");
+
+ test(function() {
+ let container = document.getElementById('container_hidden_force_v');
+ let content = document.getElementById('content_hidden_force_v');
+ assert_equals(container.scrollHeight, 160, "hidden/stable both scrollHeight");
+ assert_equals(container.clientHeight, 160, "hidden/stable both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop - 20, "hidden/stable both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "hidden/stable both clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/stable both offsetHeight");
+ }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both force, vertical-rl");
+
done();
}
@@ -166,6 +222,16 @@
<div class="content" id="content_hidden_h">overflow-y: hidden</div>
</div>
+ scrollbar-gutter: stable both force
+
+ <div class="container classic horizontal visible force" id="container_visible_force_h">
+ <div class="content" id="content_visible_force_h">overflow: visible (force)</div>
+ </div>
+
+ <div class="container classic horizontal hidden force" id="container_hidden_force_h">
+ <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div>
+ </div>
+
writing-mode: vertical-rl;
<div class="container classic vertical auto" id="container_auto_v">
@@ -184,4 +250,14 @@
<div class="content" id="content_hidden_v">overflow-x: hidden</div>
</div>
+ scrollbar-gutter: stable both force
+
+ <div class="container classic vertical visible force" id="container_visible_force_v">
+ <div class="content" id="content_visible_force_v">overflow: visible</div>
+ </div>
+
+ <div class="container classic vertical hidden force" id="container_hidden_force_v">
+ <div class="content" id="content_hidden_force_v">overflow-x: hidden</div>
+ </div>
+
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html
index 5f1e8413f3b..dca465770dd 100644
--- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html
+++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html
@@ -19,6 +19,10 @@
background: deepskyblue;
}
+ .container.force {
+ scrollbar-gutter: always both force;
+ }
+
.content {
height: 100%;
width: 100%;
@@ -70,78 +74,130 @@
function performTest() {
setup({explicit_done: true});
+ // horizontal
+
test(function() {
let container = document.getElementById('container_auto_h');
let content = document.getElementById('content_auto_h');
- assert_equals(container.scrollWidth, 160, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 160, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 160, "auto/always both scrollWidth");
+ assert_equals(container.clientWidth, 160, "auto/always both clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft - 20, "auto/always both offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "auto/always both clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/always both offsetWidth");
}, "Unexpected layout: overflow auto, scrollbar-gutter always both, horizontal-tb");
test(function() {
let container = document.getElementById('container_scroll_h');
let content = document.getElementById('content_scroll_h');
- assert_equals(container.scrollWidth, 160, "scroll/auto scrollWidth");
- assert_equals(container.clientWidth, 160, "scroll/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth");
- assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth");
+ assert_equals(container.scrollWidth, 160, "scroll/always both scrollWidth");
+ assert_equals(container.clientWidth, 160, "scroll/always both clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft - 20, "scroll/always both offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "scroll/always both clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/always both offsetWidth");
}, "Unexpected layout: overflow scroll, scrollbar-gutter always both, horizontal-tb");
test(function() {
let container = document.getElementById('container_visible_h');
let content = document.getElementById('content_visible_h');
- assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "visible/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "visible/always both scrollWidth");
+ assert_equals(container.clientWidth, 200, "visible/always both clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "visible/always both offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "visible/always both clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "visible/always both offsetWidth");
}, "Unexpected layout: overflow visible, scrollbar-gutter always both, horizontal-tb");
test(function() {
let container = document.getElementById('container_hidden_h');
let content = document.getElementById('content_hidden_h');
- assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth");
- assert_equals(container.clientWidth, 200, "hidden/auto clientWidth");
- assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth");
- assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth");
+ assert_equals(container.scrollWidth, 200, "hidden/always both scrollWidth");
+ assert_equals(container.clientWidth, 200, "hidden/always both clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always both offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "hidden/always both clientWidth");
+ assert_equals(container.offsetWidth, content.offsetWidth, "hidden/always both offsetWidth");
}, "Unexpected layout: overflow hidden, scrollbar-gutter always both, horizontal-tb");
test(function() {
+ let container = document.getElementById('container_visible_force_h');
+ let content = document.getElementById('content_visible_force_h');
+ assert_equals(container.scrollWidth, 160, "visible/always both force scrollWidth");
+ assert_equals(container.clientWidth, 160, "visible/always both force clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft - 20, "visible/always both force offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "visible/always both force clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/always both force offsetWidth");
+ }, "Unexpected layout: overflow visible, scrollbar-gutter always both force, horizontal-tb");
+
+ test(function() {
+ let container = document.getElementById('container_hidden_force_h');
+ let content = document.getElementById('content_hidden_force_h');
+ assert_equals(container.scrollWidth, 160, "hidden/always both force scrollWidth");
+ assert_equals(container.clientWidth, 160, "hidden/always both force clientWidth");
+ assert_equals(container.offsetLeft, content.offsetLeft - 20, "hidden/always both force offsetLeft");
+ assert_equals(container.clientWidth, content.clientWidth, "hidden/always both force clientWidth");
+ assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/always both force offsetWidth");
+ }, "Unexpected layout: overflow hidden, scrollbar-gutter always both force, horizontal-tb");
+
+ // vertical
+
+ test(function() {
let container = document.getElementById('container_auto_v');
let content = document.getElementById('content_auto_v');
- assert_equals(container.scrollHeight, 160, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 160, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 160, "auto/always both scrollHeight");
+ assert_equals(container.clientHeight, 160, "auto/always both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop - 20, "auto/always both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "auto/always both clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/always both offsetHeight");
}, "Unexpected layout: overflow auto, scrollbar-gutter always both, vertical-rl");
test(function() {
let container = document.getElementById('container_scroll_v');
let content = document.getElementById('content_scroll_v');
- assert_equals(container.scrollHeight, 160, "scroll/auto scrollHeight");
- assert_equals(container.clientHeight, 160, "scroll/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight");
- assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight");
+ assert_equals(container.scrollHeight, 160, "scroll/always both scrollHeight");
+ assert_equals(container.clientHeight, 160, "scroll/always both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop - 20, "scroll/always both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "scroll/always both clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/always both offsetHeight");
}, "Unexpected layout: overflow scroll, scrollbar-gutter always both, vertical-rl");
test(function() {
let container = document.getElementById('container_visible_v');
let content = document.getElementById('content_visible_v');
- assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "visible/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "visible/always both scrollHeight");
+ assert_equals(container.clientHeight, 200, "visible/always both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "visible/always both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "visible/always both clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "visible/always both offsetHeight");
}, "Unexpected layout: overflow visible, scrollbar-gutter always both, vertical-rl");
test(function() {
let container = document.getElementById('container_hidden_v');
let content = document.getElementById('content_hidden_v');
- assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight");
- assert_equals(container.clientHeight, 200, "hidden/auto clientHeight");
- assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight");
- assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight");
+ assert_equals(container.scrollHeight, 200, "hidden/always both scrollHeight");
+ assert_equals(container.clientHeight, 200, "hidden/always both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop, "hidden/always both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "hidden/always both clientHeight");
+ assert_equals(container.offsetHeight, content.offsetHeight, "hidden/always both offsetHeight");
}, "Unexpected layout: overflow hidden, scrollbar-gutter always both, vertical-rl");
+ test(function() {
+ let container = document.getElementById('container_visible_force_v');
+ let content = document.getElementById('content_visible_force_v');
+ assert_equals(container.scrollHeight, 160, "visible/always both scrollHeight");
+ assert_equals(container.clientHeight, 160, "visible/always both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop - 20, "visible/always both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "visible/always both clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/always both offsetHeight");
+ }, "Unexpected layout: overflow visible, scrollbar-gutter always both force, vertical-rl");
+
+ test(function() {
+ let container = document.getElementById('container_hidden_force_v');
+ let content = document.getElementById('content_hidden_force_v');
+ assert_equals(container.scrollHeight, 160, "hidden/always both scrollHeight");
+ assert_equals(container.clientHeight, 160, "hidden/always both clientHeight");
+ assert_equals(container.offsetTop, content.offsetTop - 20, "hidden/always both offsetTop");
+ assert_equals(container.clientHeight, content.clientHeight, "hidden/always both clientHeight");
+ assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/always both offsetHeight");
+ }, "Unexpected layout: overflow hidden, scrollbar-gutter always both force, vertical-rl");
+
done();
}
@@ -166,6 +222,16 @@
<div class="content" id="content_hidden_h">overflow-y: hidden</div>
</div>
+ scrollbar-gutter: always both force
+
+ <div class="container classic horizontal visible force" id="container_visible_force_h">
+ <div class="content" id="content_visible_force_h">overflow: visible (force)</div>
+ </div>
+
+ <div class="container classic horizontal hidden force" id="container_hidden_force_h">
+ <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div>
+ </div>
+
writing-mode: vertical-rl;
<div class="container classic vertical auto" id="container_auto_v">
@@ -184,4 +250,14 @@
<div class="content" id="content_hidden_v">overflow-x: hidden</div>
</div>
+ scrollbar-gutter: always both force
+
+ <div class="container classic vertical visible force" id="container_visible_force_v">
+ <div class="content" id="content_visible_force_v">overflow: visible</div>
+ </div>
+
+ <div class="container classic vertical hidden force" id="container_hidden_force_v">
+ <div class="content" id="content_hidden_force_v">overflow-x: hidden</div>
+ </div>
+
</body>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-012.tentative.html b/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-012.tentative.html
new file mode 100644
index 00000000000..537f8778f91
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-012.tentative.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: out-of-flow div block size + min-size: auto</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="background: green; width: 100px; aspect-ratio: 2/1; position: absolute;">
+ <div style="height: 100px;"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.tentative.html b/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.tentative.html
new file mode 100644
index 00000000000..16c3417b48f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.tentative.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>CSS aspect-ratio: abspos div inline size + min-size: auto</title>
+<link rel="author" title="Google LLC" href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" />
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="background: green; height: 100px; aspect-ratio: 1/2; position: absolute;">
+ <div style="width: 100px;"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html
new file mode 100644
index 00000000000..b2399db472f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div style="width: 100px; height: 100px; background: green"></div> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z.html b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z.html
new file mode 100644
index 00000000000..5d539f63cfe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<link rel="author" title="Seokho Song" href="mailto:0xdevssh@gmail.com">
+<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#3d-transform-rendering/">
+<link rel="match" href="scrolalble-hidden-3d-transform-z-ref.html">
+<style>
+#container {
+ width: 100px;
+ height: 100px;
+ background: green;
+ position: relative;
+ transform-style: preserve-3d;
+}
+#scroller {
+ width: 100px;
+ height: 100px;
+ background: red;
+ position: absolute;
+ transform: translateZ(-1px);
+ overflow-y: hidden;
+}
+</style>
+<div id="container">
+ <div id="scroller">
+ <div style="height: 300px"></div>
+ </div>
+</div> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html
new file mode 100644
index 00000000000..b2399db472f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div style="width: 100px; height: 100px; background: green"></div> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z.html b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z.html
new file mode 100644
index 00000000000..fd273fdf109
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<link rel="author" title="Seokho Song" href="mailto:0xdevssh@gmail.com">
+<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#3d-transform-rendering/">
+<link rel="match" href="scrolalble-scroll-3d-transform-z-ref.html">
+<style>
+#container {
+ width: 100px;
+ height: 100px;
+ background: green;
+ position: relative;
+ transform-style: preserve-3d;
+}
+#scroller {
+ width: 100px;
+ height: 100px;
+ background: red;
+ position: absolute;
+ transform: translateZ(-1px);
+ overflow-y: scroll;
+}
+</style>
+<div id="container">
+ <div id="scroller">
+ <div style="height: 300px"></div>
+ </div>
+</div> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/selectors/is-where-error-recovery.tentative.html b/tests/wpt/web-platform-tests/css/selectors/is-where-error-recovery.tentative.html
new file mode 100644
index 00000000000..31f5b8ccc6c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/is-where-error-recovery.tentative.html
@@ -0,0 +1,54 @@
+<!doctype html>
+<title>CSS Selectors: :is() and :where() error recovery</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3676">
+<link rel="help" href="https://drafts.csswg.org/selectors-4/#matches">
+<link rel="help" href="https://drafts.csswg.org/selectors-4/#zero-matches">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style id="test-sheet">
+ random-selector { color: blue; }
+</style>
+<div id="test-div"></div>
+<script>
+ let rule = document.getElementById("test-sheet").sheet.cssRules[0];
+ test(function() {
+ for (let pseudo of ["is", "where"]) {
+ rule.selectorText = "random-selector";
+ let invalidSelector = `:${pseudo}(:total-nonsense)`;
+ rule.selectorText = invalidSelector;
+ assert_not_equals(
+ rule.selectorText,
+ "random-selector",
+ "Should've parsed",
+ );
+ assert_not_equals(
+ rule.selectorText,
+ invalidSelector,
+ "Should not be considered valid and parsed as-is",
+ );
+ let emptyList = `:${pseudo}()`;
+ assert_equals(
+ rule.selectorText,
+ emptyList,
+ "Should be serialized as an empty selector-list",
+ );
+ assert_equals(document.querySelector(emptyList), null, "Should never match, but should parse");
+ for (let mixedList of [
+ `:${pseudo}(:total-nonsense, #test-div)`,
+ `:${pseudo}(:total-nonsense and-more-stuff, #test-div)`,
+ `:${pseudo}(weird-token || and-more-stuff, #test-div)`,
+ ]) {
+ rule.selectorText = mixedList;
+ assert_equals(
+ rule.selectorText,
+ `:${pseudo}(#test-div)`,
+ `${mixedList}: Should ignore invalid selectors`,
+ );
+ let testDiv = document.getElementById("test-div");
+ assert_equals(document.querySelector(mixedList), testDiv, "Should correctly match");
+ assert_equals(getComputedStyle(testDiv).color, "rgb(0, 0, 255)", "test element should be blue");
+ }
+ }
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html b/tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html
index 0f064bab73c..33cb6ad726b 100644
--- a/tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html
+++ b/tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html
@@ -5,18 +5,22 @@
<link rel="help" href="https://drafts.csswg.org/selectors-4/#zero-matches">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<style id="test-sheet">
+ random-selector { color: blue; }
+</style>
<script>
+ let rule = document.getElementById("test-sheet").sheet.cssRules[0];
function assert_valid(expected_valid, pattern, description) {
test(function() {
for (let pseudo of ["is", "where"]) {
- let valid = false;
let selector = pattern.replace("{}", ":" + pseudo)
- try {
- document.querySelector(selector);
- valid = true;
- } catch (ex) {}
-
- assert_equals(valid, expected_valid, `${description}: ${selector}`);
+ rule.selectorText = "random-selector";
+ rule.selectorText = selector;
+ (expected_valid ? assert_equals : assert_not_equals)(
+ rule.selectorText,
+ selector,
+ `${description}: ${selector}`
+ );
}
}, description);
}
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/attribute.html b/tests/wpt/web-platform-tests/css/selectors/parsing/attribute.html
new file mode 100644
index 00000000000..a8fcfb24f5a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/attribute.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: Attribute selectors</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-3/#attribute-selectors">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ // Attribute presence and value selectors
+ test_valid_selector('[att]');
+ test_valid_selector('[att=val]', '[att="val"]');
+ test_valid_selector('[att~=val]', '[att~="val"]');
+ test_valid_selector('[att|=val]', '[att|="val"]');
+ test_valid_selector('h1[title]');
+ test_valid_selector("span[class='example']", 'span[class="example"]');
+ test_valid_selector('a[hreflang=fr]', 'a[hreflang="fr"]');
+ test_valid_selector("a[hreflang|='en']", 'a[hreflang|="en"]');
+
+ // Substring matching attribute selectors
+ test_valid_selector('[att^=val]', '[att^="val"]');
+ test_valid_selector('[att$=val]', '[att$="val"]');
+ test_valid_selector('[att*=val]', '[att*="val"]');
+ test_valid_selector('object[type^="image/"]');
+ test_valid_selector('a[href$=".html"]');
+ test_valid_selector('p[title*="hello"]');
+
+ // From Attribute selectors and namespaces examples in spec:
+ test_valid_selector('[*|att]');
+ test_valid_selector('[|att]', '[att]');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/child.html b/tests/wpt/web-platform-tests/css/selectors/parsing/child.html
new file mode 100644
index 00000000000..510c45db867
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/child.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: Child combinators</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-3/#child-combinators">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector('body > p');
+ test_valid_selector('div ol>li p', 'div ol > li p');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/class.html b/tests/wpt/web-platform-tests/css/selectors/parsing/class.html
new file mode 100644
index 00000000000..00abcf838da
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/class.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: Class selectors</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-3/#class-html">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector('*.pastoral',
+ ['*.pastoral', '.pastoral']);
+ test_valid_selector('.pastoral',
+ ['*.pastoral', '.pastoral']);
+ test_valid_selector('h1.pastoral');
+ test_valid_selector('p.pastoral.marine');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/descendant.html b/tests/wpt/web-platform-tests/css/selectors/parsing/descendant.html
new file mode 100644
index 00000000000..5ff3a7bbfd9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/descendant.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: Descendant combinator</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-3/#descendant-combinators">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector('h1 em');
+ test_valid_selector('div * p');
+ test_valid_selector('div p *[href]',
+ ['div p *[href]', 'div p [href]']);
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/id.html b/tests/wpt/web-platform-tests/css/selectors/parsing/id.html
new file mode 100644
index 00000000000..2441c4217eb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/id.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: ID selectors</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-3/#id-selectors">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector('h1#chapter1');
+ test_valid_selector('#chapter1');
+ test_valid_selector('*#z98y',
+ ['*#z98y', '#z98y']);
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/is.html b/tests/wpt/web-platform-tests/css/selectors/parsing/is.html
new file mode 100644
index 00000000000..68236445c5f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/is.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: The Matches-Any Pseudo-class: ':is()'</title>
+<link rel="help" href="https://drafts.csswg.org/selectors/#matches">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector(':is(ul,ol,.list) > [hidden]',
+ ':is(ul, ol, .list) > [hidden]');
+ test_valid_selector(':is(:hover,:focus)',
+ ':is(:hover, :focus)');
+ test_valid_selector('a:is(:not(:hover))');
+
+ test_valid_selector(':is(#a)');
+ test_valid_selector('.a.b ~ :is(.c.d ~ .e.f)');
+ test_valid_selector('.a.b ~ .c.d:is(span.e + .f, .g.h > .i.j .k)');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/not.html b/tests/wpt/web-platform-tests/css/selectors/parsing/not.html
new file mode 100644
index 00000000000..3895683d1c8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/not.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: The negation pseudo-class</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-3/#negation">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector('button:not([disabled])');
+ test_valid_selector('*:not(foo)',
+ ['*:not(foo)', ':not(foo)']);
+ test_valid_selector(':not(:link):not(:visited)');
+ test_valid_selector('*|*:not(*)', ':not(*)');
+ test_valid_selector(':not(:hover)');
+ test_valid_selector(':not(*|*)', ':not(*)');
+ test_valid_selector('foo:not(bar)');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/sibling.html b/tests/wpt/web-platform-tests/css/selectors/parsing/sibling.html
new file mode 100644
index 00000000000..4f7a7a3fbcc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/sibling.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: Sibling combinators</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-3/#sibling-combinators">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector('math + p');
+ test_valid_selector('h1.opener + h2');
+ test_valid_selector('h1 ~ pre');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/universal.html b/tests/wpt/web-platform-tests/css/selectors/parsing/universal.html
new file mode 100644
index 00000000000..e944a93f12c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/universal.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: Universal selector</title>
+<link rel="help" href="https://drafts.csswg.org/selectors-3/#universal-selector">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector('*');
+ test_valid_selector('div :first-child',
+ ['div *:first-child', 'div :first-child']);
+ test_valid_selector('div *:first-child',
+ ['div *:first-child', 'div :first-child']);
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/where.html b/tests/wpt/web-platform-tests/css/selectors/parsing/where.html
new file mode 100644
index 00000000000..3a909695709
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/parsing/where.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Selectors: The Specificity-adjustment Pseudo-class: ':where()'</title>
+<link rel="help" href="https://drafts.csswg.org/selectors/#zero-matches">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/parsing-testcommon.js"></script>
+<script>
+ test_valid_selector(':where(ul,ol,.list) > [hidden]',
+ ':where(ul, ol, .list) > [hidden]');
+ test_valid_selector(':where(:hover,:focus)',
+ ':where(:hover, :focus)');
+ test_valid_selector('a:where(:not(:hover))');
+
+ test_valid_selector(':where(#a)');
+ test_valid_selector('.a.b ~ :where(.c.d ~ .e.f)');
+ test_valid_selector('.a.b ~ .c.d:where(span.e + .f, .g.h > .i.j .k)');
+</script>
diff --git a/tests/wpt/web-platform-tests/custom-elements/form-associated/form-elements-namedItem.html b/tests/wpt/web-platform-tests/custom-elements/form-associated/form-elements-namedItem.html
new file mode 100644
index 00000000000..385d0f281d1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/custom-elements/form-associated/form-elements-namedItem.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+customElements.define('custom-input', class extends HTMLElement {
+ static get formAssociated() {return true;}
+});
+</script>
+
+<form>
+ <custom-input id="custom-1" name="alone"></custom-input>
+ <custom-input id="custom-2" name="group"></custom-input>
+ <custom-input id="custom-3" name="group"></custom-input>
+</form>
+
+<script>
+test(() => {
+ const formElements = document.forms[0].elements;
+ assert_equals(formElements['invalid'],undefined);
+ assert_equals(formElements['alone'],document.getElementById('custom-1'),'Single input should be returned as-is');
+ assert_true(formElements['group'] instanceof RadioNodeList,'Repeated names should result in RadioNodeList');
+ const expected = [document.getElementById('custom-2'),
+ document.getElementById('custom-3')];
+ assert_array_equals(formElements['group'],expected,'Repeated names should be contained in RadioNodeList, in tree order');
+}, 'Form associated custom elements should work with document.forms.elements.namedItem()');
+
+</script>
+</body> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/encoding/idlharness.any.js b/tests/wpt/web-platform-tests/encoding/idlharness.any.js
index 7a057f14e3a..acd100c43b4 100644
--- a/tests/wpt/web-platform-tests/encoding/idlharness.any.js
+++ b/tests/wpt/web-platform-tests/encoding/idlharness.any.js
@@ -4,7 +4,7 @@
idl_test(
['encoding'],
- [], // No deps
+ ['streams'],
idl_array => {
idl_array.add_objects({
TextEncoder: ['new TextEncoder()'],
diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/network-partition-key.html b/tests/wpt/web-platform-tests/fetch/connection-pool/network-partition-key.html
new file mode 100644
index 00000000000..60a784cd84e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/connection-pool/network-partition-key.html
@@ -0,0 +1,264 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Connection partitioning by site</title>
+ <meta name="help" href="https://fetch.spec.whatwg.org/#network-partition-keys">
+ <meta name="timeout" content="long">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <script src="/common/get-host-info.sub.js"></script>
+</head>
+<body>
+<!-- Used to open about:blank tabs from opaque origins -->
+<iframe id="iframe0" sandbox="allow-popups allow-scripts allow-popups-to-escape-sandbox"></iframe>
+<iframe id="iframe1" sandbox="allow-popups allow-scripts allow-popups-to-escape-sandbox"></iframe>
+<script>
+const host = get_host_info();
+
+// These two origins must correspond to different sites for this test to pass.
+const POPUP_ORIGINS = [
+ host.ORIGIN,
+ host.HTTP_NOTSAMESITE_ORIGIN
+];
+
+// This origin should ideally correspond to a different site from the two above, but the
+// tests will still pass if it matches the site of one of the other two origins.
+const OTHER_ORIGIN = host.REMOTE_ORIGIN;
+
+// Except for the csp_sandbox and about:blanks, each test opens up two windows, one at
+// POPUP_ORIGINS[0], one at POPUP_ORIGINS[1], and has them request subresources from
+// subresource_origin. All requests (HTML, JS, and fetch requests) for each window go
+// through network-partition-key.py and have a partition_id parameter, which is used
+// to check if any request for one window uses the same socket as a request for the
+// other window.
+//
+// Whenever requests from the two different popup windows use the same connection, the
+// fetch requests all start returning 400 errors, but other requests will continue to
+// succeed, to make for clearer errors.
+//
+// include_credentials indicates whether the fetch requests use credentials or not,
+// which is interesting as uncredentialed sockets have separate connection pools.
+const tests = [
+ {
+ name: 'With credentials',
+ subresource_origin: POPUP_ORIGINS[0],
+ include_credentials: true,
+ popup_params: [
+ {type: 'main_frame'},
+ {type: 'main_frame'}
+ ]
+ },
+ {
+ name: 'Without credentials',
+ subresource_origin: POPUP_ORIGINS[0],
+ include_credentials: false,
+ popup_params: [
+ {type: 'main_frame'},
+ {type: 'main_frame'}
+ ]
+ },
+ {
+ name: 'Cross-site resources with credentials',
+ subresource_origin: OTHER_ORIGIN,
+ include_credentials: true,
+ popup_params: [
+ {type: 'main_frame'},
+ {type: 'main_frame'}
+ ]
+ },
+ {
+ name: 'Cross-site resources without credentials',
+ subresource_origin: OTHER_ORIGIN,
+ include_credentials: false,
+ popup_params: [
+ {type: 'main_frame'},
+ {type: 'main_frame'}
+ ]
+ },
+ {
+ name: 'Iframes',
+ subresource_origin: OTHER_ORIGIN,
+ include_credentials: true,
+ popup_params: [
+ {
+ type: 'iframe',
+ iframe_origin: OTHER_ORIGIN
+ },
+ {
+ type: 'iframe',
+ iframe_origin: OTHER_ORIGIN
+ }
+ ]
+ },
+ {
+ name: 'Workers',
+ subresource_origin: POPUP_ORIGINS[0],
+ include_credentials: true,
+ popup_params: [
+ {type: 'worker'},
+ {type: 'worker'}
+ ]
+ },
+ {
+ name: 'Workers with cross-site resources',
+ subresource_origin: OTHER_ORIGIN,
+ include_credentials: true,
+ popup_params: [
+ {type: 'worker'},
+ {type: 'worker'}
+ ]
+ },
+ {
+ name: 'CSP sandbox',
+ subresource_origin: POPUP_ORIGINS[0],
+ include_credentials: true,
+ popup_params: [
+ {type: 'csp_sandbox'},
+ {type: 'csp_sandbox'}
+ ]
+ },
+ {
+ name: 'about:blank from opaque origin iframe',
+ subresource_origin: OTHER_ORIGIN,
+ include_credentials: true,
+ popup_params: [
+ {type: 'opaque_about_blank'},
+ {type: 'opaque_about_blank'}
+ ]
+ },
+];
+
+const BASE_PATH = window.location.pathname.replace(/\/[^\/]*$/, '/');
+
+function create_script_url(origin, uuid, partition_id, dispatch) {
+ return `${origin}${BASE_PATH}resources/network-partition-key.py?uuid=${uuid}&partition_id=${partition_id}&dispatch=${dispatch}`
+}
+
+function run_test(test) {
+ var uuid = token();
+
+ // Used to track the opened popup windows, so they can be closed at the end of the test.
+ // They could be closed immediately after use, but safest to keep them open, as browsers
+ // could use closing a window as a hint to close idle sockets that the window used.
+ var popup_windows = [];
+
+ // Creates a popup window at |url| and waits for a test result. Returns a promise.
+ function create_popup_and_wait_for_result(url) {
+ return new Promise(function(resolve, reject) {
+ popup_windows.push(window.open(url));
+ // Listen for the result
+ function message_listener(event) {
+ if (event.data.result === 'success') {
+ resolve();
+ } else if (event.data.result === 'error') {
+ reject(event.data.details);
+ } else {
+ reject('Unexpected message.');
+ }
+ }
+ window.addEventListener('message', message_listener, {once: 'true'});
+ });
+ }
+
+ // Navigates iframe to url and waits for a test result. Returns a promise.
+ function navigate_iframe_and_wait_for_result(iframe, url) {
+ return new Promise(function(resolve, reject) {
+ iframe.src = url;
+ // Listen for the result
+ function message_listener(event) {
+ if (event.data.result === 'success') {
+ resolve();
+ } else if (event.data.result === 'error') {
+ reject(event.data.details);
+ } else {
+ reject('Unexpected message.');
+ }
+ }
+ window.addEventListener('message', message_listener, {once: 'true'});
+ });
+ }
+
+ function make_test_function(test, index) {
+ var popup_params = test.popup_params[index];
+ return function() {
+ var popup_path;
+ var additional_url_params = '';
+ var origin = POPUP_ORIGINS[index];
+ var partition_id = POPUP_ORIGINS[index];
+ if (popup_params.type == 'main_frame') {
+ popup_path = 'resources/network-partition-checker.html';
+ } else if (popup_params.type == 'iframe') {
+ popup_path = 'resources/network-partition-iframe-checker.html';
+ additional_url_params = `&other_origin=${popup_params.iframe_origin}`;
+ } else if (popup_params.type == 'worker') {
+ popup_path = 'resources/network-partition-worker-checker.html';
+ // The origin of the dedicated worker must mutch the page that loads it.
+ additional_url_params = `&other_origin=${POPUP_ORIGINS[index]}`;
+ } else if (popup_params.type == 'csp_sandbox') {
+ // For the Content-Security-Policy sandbox test, all requests are from the same origin, but
+ // the origin should be treated as an opaque origin, so sockets should not be reused.
+ origin = test.subresource_origin;
+ partition_id = index;
+ popup_path = 'resources/network-partition-checker.html';
+ // Don't check partition of root document, since the document isn't sandboxed until the
+ // root document is fetched.
+ additional_url_params = '&sandbox=true&nocheck_partition=true'
+ } else if (popup_params.type=='opaque_about_blank') {
+ popup_path = 'resources/network-partition-about-blank-checker.html';
+ } else if (popup_params.type == 'iframe') {
+ throw 'Unrecognized popup_params.type.';
+ }
+ var url = create_script_url(origin, uuid, partition_id, 'fetch_file');
+ url += `&subresource_origin=${test.subresource_origin}`
+ url += `&include_credentials=${test.include_credentials}`
+ url += `&path=${BASE_PATH.substring(1)}${popup_path}`;
+ url += additional_url_params;
+
+ if (popup_params.type=='opaque_about_blank') {
+ return navigate_iframe_and_wait_for_result(iframe = document.getElementById('iframe' + index), url);
+ }
+
+ return create_popup_and_wait_for_result(url);
+ }
+ }
+
+ // Takes a Promise, and cleans up state when the promise has completed, successfully or not, re-throwing
+ // any exception from the passed in Promise.
+ async function clean_up_when_done(promise) {
+ var error;
+ try {
+ await promise;
+ } catch (e) {
+ error = e;
+ }
+
+ popup_windows.map(function (win) { win.close(); });
+
+ try {
+ var cleanup_url = create_script_url(host.ORIGIN, uuid, host.ORIGIN, 'clean_up');
+ var response = await fetch(cleanup_url, {credentials: 'omit', mode: 'cors'});
+ assert_equals(await response.text(), 'cleanup complete', `Sever state cleanup failed`);
+ } catch (e) {
+ // Prefer error from the passed in Promise over errors from the fetch request to clean up server state.
+ error = error || e;
+ }
+ if (error)
+ throw error;
+ }
+
+ return clean_up_when_done(
+ make_test_function(test, 0)()
+ .then(make_test_function(test, 1)));
+}
+
+tests.forEach(function (test) {
+ promise_test(
+ function() { return run_test(test); },
+ test.name);
+})
+
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-checker.html b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-checker.html
new file mode 100644
index 00000000000..b058f611242
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-checker.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Network Partition Checker</title>
+ <meta name="help" href="https://fetch.spec.whatwg.org/#network-partition-keys">
+ <meta name="timeout" content="normal">
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=common/utils.js"></script>
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=resources/testharness.js"></script>
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-key.js"></script>
+</head>
+<body>
+<script>
+ async function fetch_and_reply() {
+ // If this is a top level window, report to the opener. Otherwise, this is an iframe,
+ // so report to the parent.
+ var report_to = window.opener;
+ if (!report_to)
+ report_to = window.parent;
+ try {
+ await check_partition_ids();
+ report_to.postMessage({result: 'success'}, '*');
+ } catch (e) {
+ report_to.postMessage({result: 'error', details: e.message}, '*');
+ }
+ }
+ fetch_and_reply();
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-iframe-checker.html b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-iframe-checker.html
new file mode 100644
index 00000000000..f76ed184471
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-iframe-checker.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Iframe Network Partition Checker</title>
+ <meta name="help" href="https://fetch.spec.whatwg.org/#network-partition-keys">
+ <meta name="timeout" content="normal">
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=common/utils.js"></script>
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=resources/testharness.js"></script>
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-key.js"></script>
+</head>
+<body>
+<script>
+ // Listen for first message from the iframe, and pass it back to the opener.
+ function message_listener(event) {
+ window.opener.postMessage(event.data, '*');
+ }
+ window.addEventListener('message', message_listener, {once: 'true'});
+</script>
+<iframe src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-checker.html"></iframe>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.js b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.js
new file mode 100644
index 00000000000..bd66109380f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.js
@@ -0,0 +1,47 @@
+// Runs multiple fetches that validate connections see only a single partition_id.
+// Requests are run in parallel so that they use multiple connections to maximize the
+// chance of exercising all matching connections in the connection pool. Only returns
+// once all requests have completed to make cleaning up server state non-racy.
+function check_partition_ids(location) {
+ const NUM_FETCHES = 20;
+
+ var base_url = 'SUBRESOURCE_PREFIX:&dispatch=check_partition';
+
+ // Not a perfect parse of the query string, but good enough for this test.
+ var include_credentials = base_url.search('include_credentials=true') != -1;
+ var exclude_credentials = base_url.search('include_credentials=false') != -1;
+ if (include_credentials != !exclude_credentials)
+ throw new Exception('Credentials mode not specified');
+
+
+ // Run NUM_FETCHES in parallel.
+ var fetches = [];
+ for (i = 0; i < NUM_FETCHES; ++i) {
+ var fetch_params = {
+ credentials: 'omit',
+ mode: 'cors',
+ headers: {
+ 'Header-To-Force-CORS': 'cors'
+ },
+ };
+
+ // Use a unique URL for each request, in case the caching layer serializes multiple
+ // requests for the same URL.
+ var url = `${base_url}&${token()}`;
+
+ fetches.push(fetch(url, fetch_params).then(
+ function (response) {
+ return response.text().then(function(text) {
+ assert_equals(text, 'ok', `Socket unexpectedly reused`);
+ });
+ }));
+ }
+
+ // Wait for all promises to complete.
+ return Promise.allSettled(fetches).then(function (results) {
+ results.forEach(function (result) {
+ if (result.status != 'fulfilled')
+ throw result.reason;
+ });
+ });
+}
diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.py b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.py
new file mode 100644
index 00000000000..44ddae7a75d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+
+import datetime
+import json
+import mimetypes
+import os
+import sys
+import time
+
+# Test server that tracks the last partition_id was used with each connection for each uuid, and
+# lets consumers query if multiple different partition_ids have been been used for any socket.
+#
+# Server assumes that ports aren't reused, so a client address and a server port uniquely identify
+# a connection. If that constraint is ever violated, the test will be flaky. No sockets being
+# closed for the duration of the test is sufficient to ensure that, though even if sockets are
+# closed, the OS should generally prefer to use new ports for new connections, if any are
+# available.
+def main(request, response):
+ response.headers.set(b"Cache-Control", b"no-store")
+ dispatch = request.GET.first(b"dispatch", None)
+ uuid = request.GET.first(b"uuid", None)
+ partition_id = request.GET.first(b"partition_id", None)
+
+ if not uuid or not dispatch or not partition_id:
+ return simple_response(request, response, 404, b"Not found", b"Invalid query parameters")
+
+ # Unless nocheck_partition is true, check partition_id against server_state, and update server_state.
+ stash = request.server.stash
+ test_failed = False
+ if request.GET.first(b"nocheck_partition", None) != "True":
+ # Need to grab the lock to access the Stash, since requests are made in parallel.
+ with stash.lock:
+ # Don't use server hostname here, since H2 allows multiple hosts to reuse a connection.
+ # Server IP is not currently available, unfortunately.
+ address_key = str(request.client_address) + "|" + str(request.url_parts.port)
+ server_state = stash.take(uuid) or { "test_failed": False }
+ if address_key in server_state and server_state[address_key] != partition_id:
+ server_state["test_failed"] = True
+ server_state[address_key] = partition_id
+ test_failed = server_state["test_failed"]
+ stash.put(uuid, server_state)
+
+ origin = request.headers.get(b"Origin")
+ if origin:
+ response.headers.set(b"Access-Control-Allow-Origin", origin)
+ response.headers.set(b"Access-Control-Allow-Credentials", b"true")
+
+ if request.method == u"OPTIONS":
+ return handle_preflight(request, response)
+
+ if dispatch == u"fetch_file":
+ return handle_fetch_file(request, response, partition_id, uuid)
+
+ if dispatch == u"check_partition":
+ if test_failed:
+ return simple_response(request, response, 200, b"OK", b"Multiple partition IDs used on a socket")
+ return simple_response(request, response, 200, b"OK", b"ok")
+
+ if dispatch == u"clean_up":
+ stash.take(uuid)
+ if test_failed:
+ return simple_response(request, response, 200, b"OK", b"Test failed, but cleanup completed.")
+ return simple_response(request, response, 200, b"OK", b"cleanup complete")
+
+ return simple_response(request, response, 404, b"Not Found", b"Unrecognized dispatch parameter: " + dispatch)
+
+def handle_preflight(request, response):
+ response.status = (200, b"OK")
+ response.headers.set(b"Access-Control-Allow-Methods", b"GET")
+ response.headers.set(b"Access-Control-Allow-Headers", b"header-to-force-cors")
+ response.headers.set(b"Access-Control-Max-Age", b"86400")
+ return b"Preflight request"
+
+def simple_response(request, response, status_code, status_message, body, content_type="text/plain"):
+ response.status = (status_code, status_message)
+ response.headers.set(b"Content-Type", content_type)
+ return body
+
+def handle_fetch_file(request, response, partition_id, uuid):
+ subresource_origin = request.GET.first(b"subresource_origin", None)
+ rel_path = request.GET.first(b"path", None)
+
+ # This needs to be passed on to subresources so they all have access to it.
+ include_credentials = request.GET.first(b"include_credentials", None)
+ if not subresource_origin or not rel_path or not include_credentials:
+ return simple_response(request, response, 404, b"Not found", b"Invalid query parameters")
+
+ cur_path = os.path.realpath(__file__)
+ base_path = os.path.abspath(os.path.join(os.path.dirname(cur_path), os.pardir, os.pardir, os.pardir))
+ path = os.path.abspath(os.path.join(base_path, rel_path))
+
+ # Basic security check.
+ if not path.startswith(base_path):
+ return simple_response(request, response, 404, b"Not found", b"Invalid path")
+
+ sandbox = request.GET.first(b"sandbox", None)
+ if sandbox == "true":
+ response.headers.set(b"Content-Security-Policy", "sandbox allow-scripts")
+
+ file = open(path, mode="r")
+ body = file.read()
+ file.close()
+
+ subresource_path = "/" + os.path.relpath(__file__, base_path).replace('\\','/')
+ subresource_params = "?partition_id=" + partition_id + "&uuid=" + uuid + "&subresource_origin=" + subresource_origin + "&include_credentials=" + include_credentials
+ body = body.replace("SUBRESOURCE_PREFIX:", subresource_origin + subresource_path + subresource_params)
+
+ other_origin = request.GET.first(b"other_origin", None)
+ if other_origin:
+ body = body.replace("OTHER_PREFIX:", other_origin + subresource_path + subresource_params)
+
+ mimetypes.init()
+ mimetype_pair = mimetypes.guess_type(path)
+ mimetype = mimetype_pair[0]
+
+ if mimetype == None or mimetype_pair[1] != None:
+ return simple_response(request, response, 500, b"Server Error", b"Unknown MIME type")
+ return simple_response(request, response, 200, b"OK", body, mimetype)
diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker-checker.html b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker-checker.html
new file mode 100644
index 00000000000..e6b7ea7673f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker-checker.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Worker Network Partition Checker</title>
+ <meta name="help" href="https://fetch.spec.whatwg.org/#network-partition-keys">
+ <meta name="timeout" content="normal">
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=common/utils.js"></script>
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=resources/testharness.js"></script>
+ <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-key.js"></script>
+</head>
+<body>
+<script>
+ // Workers must be same origin as the page loading them, but it's simpler to reuse the
+ // OTHER_PREFIX mechanism in the Python code than to craft the URL in Javascript here.
+ var worker = new Worker('OTHER_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-worker.js');
+ function message_listener(event) {
+ window.opener.postMessage(event.data, '*');
+ worker.terminate();
+ }
+ worker.addEventListener('message', message_listener);
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker.js b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker.js
new file mode 100644
index 00000000000..1745edfacb1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker.js
@@ -0,0 +1,15 @@
+// This tests the partition key of fetches to subresouce_origin made by the worker and
+// imported scripts from subresource_origin.
+importScripts('SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=common/utils.js');
+importScripts('SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=resources/testharness.js');
+importScripts('SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-key.js');
+
+async function fetch_and_reply() {
+ try {
+ await check_partition_ids();
+ self.postMessage({result: 'success'});
+ } catch (e) {
+ self.postMessage({result: 'error', details: e.message});
+ }
+}
+fetch_and_reply();
diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html
new file mode 100644
index 00000000000..b16280acbd7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>activeElement when focusing different-site iframe's contentWindow</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done:true});
+window.onmessage = function(e) {
+ var actual = e.data;
+ test(function() {
+ // Handle trailing events separately to get make it easier to see
+ // if they are the only deviation from the expection.
+ var endedWith = false;
+ if (actual.endsWith(",willspineventloop,")) {
+ endedWith = true;
+ actual += "innerbodyfocus,";
+ }
+ assert_false(endedWith, "Should have gotten innerbodyfocus after willspineventloop");
+ }, "Check trailing events");
+ test(function() {
+ // This is a Fission oddity
+ var endedWith = false;
+ if (actual.endsWith(",willspineventloop,innerbodyfocus,")) {
+ endedWith = true;
+ actual += "innerbodyblur,innerbodyfocus,";
+ }
+ assert_true(endedWith, "Should have gotten innerbodyfocus after willspineventloop");
+ }, "Check more trailing events");
+ test(function() {
+ assert_equals(actual, "outeronload,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:IFRAME,willspineventloop,innerbodyfocus,innerbodyblur,innerbodyfocus,", 'Check log');
+ }, "Check result");
+ w.close();
+ done();
+};
+var w = window.open("support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html");
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe.html b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe.html
new file mode 100644
index 00000000000..b974252555a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>activeElement when focusing different-site iframe</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done:true});
+window.onmessage = function(e) {
+ var actual = e.data;
+ test(function() {
+ // Handle trailing events separately to get make it easier to see
+ // if they are the only deviation from the expection.
+ var endedWith = false;
+ if (actual.endsWith(",willspineventloop,")) {
+ endedWith = true;
+ actual += "innerbodyfocus,innerbodyblur,";
+ }
+ assert_false(endedWith, "Should have gotten innerbodyfocus,innerbodyblur after willspineventloop");
+ }, "Check trailing events");
+ test(function() {
+ assert_equals(actual, "outeronload,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:BODY,willspineventloop,innerbodyfocus,innerbodyblur,", 'Check log');
+ }, "Check result");
+ w.close();
+ done();
+};
+var w = window.open("support/activeelement-after-focusing-different-site-iframe-outer.sub.html");
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html
new file mode 100644
index 00000000000..b4a14e721f8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>activeElement when focusing same-site iframe's contentWindow</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done:true});
+window.onmessage = function(e) {
+ var actual = e.data;
+ test(function() {
+ // Handle trailing events separately to get make it easier to see
+ // if they are the only deviation from the expection.
+ var endedWith = false;
+ if (actual.endsWith(",willspineventloop,")) {
+ endedWith = true;
+ actual += "innerbodyfocus,";
+ }
+ assert_false(endedWith, "Should have gotten innerbodyfocus after willspineventloop");
+ }, "Check trailing events");
+ test(function() {
+ assert_equals(actual, "outeronload,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:IFRAME,willspineventloop,innerbodyfocus,", 'Check log');
+ }, "Check result");
+ w.close();
+ done();
+};
+var w = window.open("support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html");
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe.html b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe.html
new file mode 100644
index 00000000000..55918ebf07f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>activeElement when focusing same-site iframe</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done:true});
+window.onmessage = function(e) {
+ var actual = e.data;
+ test(function() {
+ // Handle trailing events separately to get make it easier to see
+ // if they are the only deviation from the expection.
+ var endedWith = false;
+ if (actual.endsWith(",willspineventloop,")) {
+ endedWith = true;
+ actual += "innerbodyfocus,innerbodyblur,";
+ }
+ assert_false(endedWith, "Should have gotten innerbodyfocus,innerbodyblur after willspineventloop");
+ }, "Check trailing events");
+ test(function() {
+ assert_equals(actual, "outeronload,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:BODY,willspineventloop,innerbodyfocus,innerbodyblur,", 'Check log');
+ }, "Check result");
+ w.close();
+ done();
+};
+var w = window.open("support/activeelement-after-focusing-same-site-iframe-outer.html");
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html
new file mode 100644
index 00000000000..4cb3c68db63
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>activeElement when immediately focusing different-site iframe's contentWindow</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done:true});
+window.onmessage = function(e) {
+ var actual = e.data;
+ test(function() {
+ // Make the difference between Firefox and Chrome visible separately
+ // from the comparison of the entire log string failing to match.
+ var endedWith = false;
+ if (actual.endsWith(",willspineventloop,")) {
+ endedWith = true;
+ actual += "innerbodyfocus,";
+ }
+ assert_true(endedWith, "Should not have gotten innerbodyfocus after willspineventloop");
+ }, "Check trailing events");
+ test(function() {
+ assert_equals(actual, "outerparser,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:IFRAME,willspineventloop,innerbodyfocus,", 'Check log');
+ }, "Check result");
+ w.close();
+ done();
+};
+var w = window.open("support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html");
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe.html b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe.html
new file mode 100644
index 00000000000..67bf733bc1e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>activeElement when immediately focusing different-site iframe</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done:true});
+window.onmessage = function(e) {
+ test(function() {
+ assert_equals(e.data, "outerparser,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:BODY,willspineventloop,", 'Check log');
+ }, "Check result");
+ w.close();
+ done();
+};
+var w = window.open("support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html");
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html
new file mode 100644
index 00000000000..81dbfd28d03
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>activeElement when immediately focusing same-site iframe's contentWindow</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done:true});
+window.onmessage = function(e) {
+ var actual = e.data;
+ test(function() {
+ // Make the difference between Firefox and Chrome visible separately
+ // from the comparison of the entire log string failing to match.
+ var endedWith = false;
+ if (actual.endsWith(",willspineventloop,")) {
+ endedWith = true;
+ actual += "innerbodyfocus,";
+ }
+ assert_true(endedWith, "Should not have gotten innerbodyfocus after willspineventloop");
+ }, "Check trailing events");
+ test(function() {
+ assert_equals(actual, "outerparse,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:IFRAME,willspineventloop,innerbodyfocus,", 'Check log');
+ }, "Check result");
+ w.close();
+ done();
+};
+var w = window.open("support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html");
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe.html b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe.html
new file mode 100644
index 00000000000..a035af072d3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>activeElement when immediately focusing same-site iframe</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done:true});
+window.onmessage = function(e) {
+ test(function() {
+ assert_equals(e.data, "outerparse,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:BODY,willspineventloop,", 'Check log');
+ }, "Check result");
+ w.close();
+ done();
+};
+var w = window.open("support/activeelement-after-immediately-focusing-same-site-iframe-outer.html");
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html
new file mode 100644
index 00000000000..bc78e6e0538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Inner document</title>
+</head>
+<body>
+<h1>Inner</h1>
+<script>
+document.body.onfocus = function() {
+ parent.postMessage("innerbodyfocus,", "*");
+}
+document.body.onblur = function() {
+ parent.postMessage("innerbodyblur,", "*");
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner.html
new file mode 100644
index 00000000000..bc78e6e0538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Inner document</title>
+</head>
+<body>
+<h1>Inner</h1>
+<script>
+document.body.onfocus = function() {
+ parent.postMessage("innerbodyfocus,", "*");
+}
+document.body.onblur = function() {
+ parent.postMessage("innerbodyblur,", "*");
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html
new file mode 100644
index 00000000000..fd66cbaa55c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when focusing different-site iframe's contenWindow</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+window.onload = function() {
+ log += "outeronload,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willfocusiframe,";
+ document.getElementsByTagName("iframe")[0].contentWindow.focus();
+ log += "didfocusiframe,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willbluriframe,";
+ document.getElementsByTagName("iframe")[0].contentWindow.blur();
+ log += "didbluriframe,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willspineventloop,"
+ opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+ }, 1500);
+}
+</script>
+<iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html"></iframe>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer.sub.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer.sub.html
new file mode 100644
index 00000000000..bcbedb2f74e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer.sub.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when focusing different-site iframe</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+window.onload = function() {
+ log += "outeronload,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willfocusiframe,";
+ document.getElementsByTagName("iframe")[0].focus();
+ log += "didfocusiframe,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willbluriframe,";
+ document.getElementsByTagName("iframe")[0].blur();
+ log += "didbluriframe,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willspineventloop,"
+ opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+ }, 1500);
+}
+</script>
+<iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/activeelement-after-focusing-different-site-iframe-inner.html"></iframe>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner-contentwindow.html
new file mode 100644
index 00000000000..bc78e6e0538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner-contentwindow.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Inner document</title>
+</head>
+<body>
+<h1>Inner</h1>
+<script>
+document.body.onfocus = function() {
+ parent.postMessage("innerbodyfocus,", "*");
+}
+document.body.onblur = function() {
+ parent.postMessage("innerbodyblur,", "*");
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner.html
new file mode 100644
index 00000000000..bc78e6e0538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Inner document</title>
+</head>
+<body>
+<h1>Inner</h1>
+<script>
+document.body.onfocus = function() {
+ parent.postMessage("innerbodyfocus,", "*");
+}
+document.body.onblur = function() {
+ parent.postMessage("innerbodyblur,", "*");
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html
new file mode 100644
index 00000000000..63e2ac60196
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when focusing same-site iframe's contentWindow</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+window.onload = function() {
+ log += "outeronload,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willfocusiframe,";
+ document.getElementsByTagName("iframe")[0].contentWindow.focus();
+ log += "didfocusiframe,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willbluriframe,";
+ document.getElementsByTagName("iframe")[0].contentWindow.blur();
+ log += "didbluriframe,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willspineventloop,"
+ opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+ }, 1500);
+}
+</script>
+<iframe src="activeelement-after-focusing-same-site-iframe-inner-contentwindow.html"></iframe>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer.html
new file mode 100644
index 00000000000..333b436ea11
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when focusing same-site iframe</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+window.onload = function() {
+ log += "outeronload,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willfocusiframe,";
+ document.getElementsByTagName("iframe")[0].focus();
+ log += "didfocusiframe,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willbluriframe,";
+ document.getElementsByTagName("iframe")[0].blur();
+ log += "didbluriframe,";
+ log += "activeElement:" + document.activeElement.tagName + ",";
+ log += "willspineventloop,"
+ opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+ }, 1500);
+}
+</script>
+<iframe src="activeelement-after-focusing-same-site-iframe-inner.html"></iframe>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html
new file mode 100644
index 00000000000..bc78e6e0538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Inner document</title>
+</head>
+<body>
+<h1>Inner</h1>
+<script>
+document.body.onfocus = function() {
+ parent.postMessage("innerbodyfocus,", "*");
+}
+document.body.onblur = function() {
+ parent.postMessage("innerbodyblur,", "*");
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html
new file mode 100644
index 00000000000..bc78e6e0538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Inner document</title>
+</head>
+<body>
+<h1>Inner</h1>
+<script>
+document.body.onfocus = function() {
+ parent.postMessage("innerbodyfocus,", "*");
+}
+document.body.onblur = function() {
+ parent.postMessage("innerbodyblur,", "*");
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html
new file mode 100644
index 00000000000..10240504fe9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when immediately focusing different-site iframe's contentWindow</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+</script>
+<iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html"></iframe>
+<script>
+log += "outerparser,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willfocusiframe,";
+document.getElementsByTagName("iframe")[0].contentWindow.focus();
+log += "didfocusiframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willbluriframe,";
+document.getElementsByTagName("iframe")[0].contentWindow.blur();
+log += "didbluriframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willspineventloop,"
+opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+}, 1500);
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html
new file mode 100644
index 00000000000..3485f1b8e4b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when immediately focusing different-site iframe</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+</script>
+<iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html"></iframe>
+<script>
+log += "outerparser,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willfocusiframe,";
+document.getElementsByTagName("iframe")[0].focus();
+log += "didfocusiframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willbluriframe,";
+document.getElementsByTagName("iframe")[0].blur();
+log += "didbluriframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willspineventloop,"
+opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+}, 1500);
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html
new file mode 100644
index 00000000000..bc78e6e0538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Inner document</title>
+</head>
+<body>
+<h1>Inner</h1>
+<script>
+document.body.onfocus = function() {
+ parent.postMessage("innerbodyfocus,", "*");
+}
+document.body.onblur = function() {
+ parent.postMessage("innerbodyblur,", "*");
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner.html
new file mode 100644
index 00000000000..bc78e6e0538
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Inner document</title>
+</head>
+<body>
+<h1>Inner</h1>
+<script>
+document.body.onfocus = function() {
+ parent.postMessage("innerbodyfocus,", "*");
+}
+document.body.onblur = function() {
+ parent.postMessage("innerbodyblur,", "*");
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html
new file mode 100644
index 00000000000..3849f6ea2cc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when focusing same-site iframe's contentWindow</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+</script>
+<iframe src="activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html"></iframe>
+<script>
+log += "outerparse,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willfocusiframe,";
+document.getElementsByTagName("iframe")[0].contentWindow.focus();
+log += "didfocusiframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willbluriframe,";
+document.getElementsByTagName("iframe")[0].contentWindow.blur();
+log += "didbluriframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willspineventloop,"
+opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+}, 1500);
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html
new file mode 100644
index 00000000000..bafc26065c8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when focusing same-site iframe's contentWindow</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+</script>
+<iframe src="activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html"></iframe>
+<script>
+log += "outerparse,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willfocusiframe,";
+document.getElementsByTagName("iframe")[0].focus();
+log += "didfocusiframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willbluriframe,";
+document.getElementsByTagName("iframe")[0].blur();
+log += "didbluriframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willspineventloop,"
+opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+}, 1500);
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer.html
new file mode 100644
index 00000000000..f22fa98076f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>activeElement when focusing same-site iframe</title>
+<script>
+let log = "";
+function getLog() {
+ return log;
+}
+window.onmessage = function(e) {
+ log += e.data;
+};
+</script>
+<iframe src="activeelement-after-immediately-focusing-same-site-iframe-inner.html"></iframe>
+<script>
+log += "outerparse,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willfocusiframe,";
+document.getElementsByTagName("iframe")[0].focus();
+log += "didfocusiframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willbluriframe,";
+document.getElementsByTagName("iframe")[0].blur();
+log += "didbluriframe,";
+log += "activeElement:" + document.activeElement.tagName + ",";
+log += "willspineventloop,"
+opener.step_timeout(function() {
+ opener.postMessage(getLog(), "*");
+}, 1500);
+</script>
diff --git a/tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html b/tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html
index 91ffed11075..ecc1af286d9 100644
--- a/tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html
+++ b/tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html
@@ -12,11 +12,11 @@ window.onmessage = function(e) {
other = window.open("focus-restoration-in-different-site-iframes-other.html", "otherwindow", "resizable=yes");
} else if (e.data == "other") {
other.close();
- setTimeout(function() {
+ opener.step_timeout(function() {
document.getElementsByTagName("iframe")[0].contentWindow.postMessage("getlog", "*");
}, 2000);
} else {
- setTimeout(function() {
+ opener.step_timeout(function() {
opener.postMessage(getLog() + e.data, "*");
}, 1000);
}
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html
index 1fe8ac5eaeb..efb2665a8a5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html
@@ -78,7 +78,7 @@ function runConvertToBlobTest(testScenario) {
var ctx = srcCanvas.getContext('2d', testScenario.canvasColorParam);
var compositeOverBlack = (testScenario.encodeOptions.type == "image/jpeg");
drawPatternOnCanvsa(ctx, testScenario.alpha, compositeOverBlack);
- var refPixels = ctx.getImageData(0, 0, 2, 2).dataUnion;
+ var refPixels = ctx.getImageData(0, 0, 2, 2).data;
var t = async_test("Test canvas convertToBlob(): " +
testScenarioToString(testScenario));
@@ -88,7 +88,7 @@ function runConvertToBlobTest(testScenario) {
var dstCanvas = createCanvas(testScenario);
var dstCtx = dstCanvas.getContext('2d', testScenario.canvasColorParam);
dstCtx.drawImage(image, 0, 0);
- var actualPixels = dstCtx.getImageData(0, 0, 2, 2).dataUnion;
+ var actualPixels = dstCtx.getImageData(0, 0, 2, 2).data;
testPixels(actualPixels, refPixels, testScenario);
});
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html
index 7483800b41e..72b8e278c60 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html
@@ -43,8 +43,8 @@ function testPixels(ctx, tests, sourceType)
if (sourceType === 'video')
tolerance = 0.03;
for (var i = 0; i < tests.length; i++) {
- actual = ctx.getImageData(tests[i][0], tests[i][1], 1, 1).dataUnion;
- assert_implements(actual, 'ImageData dataUnion not supported');
+ actual = ctx.getImageData(tests[i][0], tests[i][1], 1, 1).data;
+ assert_implements(actual, 'ImageData data not supported');
expected = tests[i][2];
assert_equals(actual.length, expected.length);
for (var j = 0; j < actual.length; j++)
@@ -171,10 +171,10 @@ function compareBitmaps(bitmap1, bitmap2)
ctx2.clearRect(0, 0, canvas2.width, canvas2.height);
ctx1.drawImage(bitmap1, 0, 0);
ctx2.drawImage(bitmap2, 0, 0);
- var data1 = ctx1.getImageData(0, 0, 50, 50).dataUnion;
- assert_implements(data1, 'ImageData dataUnion not supported');
- var data2 = ctx2.getImageData(0, 0, 50, 50).dataUnion;
- assert_implements(data2, 'ImageData dataUnion not supported');
+ var data1 = ctx1.getImageData(0, 0, 50, 50).data;
+ assert_implements(data1, 'ImageData data not supported');
+ var data2 = ctx2.getImageData(0, 0, 50, 50).data;
+ assert_implements(data2, 'ImageData data not supported');
var dataMatched = true;
for (var i = 0; i < data1.length; i++) {
if (data1[i] != data2[i]) {
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html
index f153a983d93..c72dc97cd0c 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html
@@ -14,7 +14,7 @@ function checkImageData(canvasColorSettings, imageData) {
assert_equals(imageData.data.length, 4 * xWidth * xHeight);
} else {
assert_equals("float32", imageDataColorSettings.storageFormat);
- assert_equals(imageData.dataUnion.length, 4 * xWidth * xHeight);
+ assert_equals(imageData.data.length, 4 * xWidth * xHeight);
}
}
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html
index e7a83fc1f75..9907c4e2cf5 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html
@@ -29,14 +29,14 @@ function runTest(testScenario) {
var refCtx = refCanvas.getContext(
'2d', testScenario.canvasColorParams);
refCtx.drawImage(_8bitImage, 0, 0);
- var refPixels = refCtx.getImageData(0, 0, 2, 2).dataUnion;
+ var refPixels = refCtx.getImageData(0, 0, 2, 2).data;
var testCanvas = document.createElement("canvas");
testCanvas.width = testCanvas.height = 2;
var testCtx = testCanvas.getContext(
'2d', testScenario.canvasColorParams);
testCtx.drawImage(_16bitImage, 0, 0);
- var testPixels = testCtx.getImageData(0, 0, 2, 2).dataUnion;
+ var testPixels = testCtx.getImageData(0, 0, 2, 2).data;
assert_array_approx_equals(refPixels, testPixels, tolerance);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html
index 7620d93d5f1..0cfa729a60b 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html
@@ -16,7 +16,7 @@ function testPixels(ctx, tests)
{
var actual, expected, tolerance = 0.01;
for (var i = 0; i < tests.length; i++) {
- actual = ctx.getImageData(tests[i].x, tests[i].y, 1, 1).dataUnion;
+ actual = ctx.getImageData(tests[i].x, tests[i].y, 1, 1).data;
expected = tests[i].color;
assert_true(actual.length === expected.length);
for (var j = 0; j < actual.length; j++)
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html
index 144dca0e775..7edbc5ee3c9 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html
@@ -90,8 +90,8 @@ function initializeOffscreenCanvasTransparent(canvasColorSpace, canvasPixelForma
function testPixels(testCtx, refCtx, pixelFormat, isTrnasparent)
{
- var actual = testCtx.getImageData(0, 0, 4, 4).dataUnion;
- var expected = refCtx.getImageData(0, 0, 4, 4).dataUnion;
+ var actual = testCtx.getImageData(0, 0, 4, 4).data;
+ var expected = refCtx.getImageData(0, 0, 4, 4).data;
var tolerance = 4;
if (pixelFormat === 'float16')
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html
index c38da7c95c0..73682eb631d 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html
@@ -27,7 +27,7 @@ function drawSRGBThenGetImageData_e_sRGB() {
{colorSpace: 'srgb', pixelFormat:'float16'});
ctx.fillStyle = 'rgba(51, 102, 153, 0.8)';
ctx.fillRect(0, 0, 10, 10);
- var pixel = ctx.getImageData(5, 5, 1, 1).dataUnion;
+ var pixel = ctx.getImageData(5, 5, 1, 1).data;
// Check against the same color in e-sRGB. 0.01 protects the test against
// color conversion deviations.
assert_array_approx_equals(pixel, [0.2, 0.4, 0.6, 0.8], 0.01);
@@ -41,12 +41,12 @@ function putImageData_e_sRGBThenGetImageData_e_sRGB_InRange() {
{colorSpace: 'srgb', pixelFormat:'float16'})
var imageData = ctx.createImageData(1, 1,
{colorSpace: 'srgb', storageFormat:'float32'});
- imageData.dataUnion[0] = 0.2;
- imageData.dataUnion[1] = 0.4;
- imageData.dataUnion[2] = 0.6;
- imageData.dataUnion[3] = 0.8;
+ imageData.data[0] = 0.2;
+ imageData.data[1] = 0.4;
+ imageData.data[2] = 0.6;
+ imageData.data[3] = 0.8;
ctx.putImageData(imageData, 5, 5);
- var pixel = ctx.getImageData(5, 5, 1, 1).dataUnion;
+ var pixel = ctx.getImageData(5, 5, 1, 1).data;
// Check against the same color in e-sRGB. 0.001 protects the test against
// rounding errors.
assert_array_approx_equals(pixel, [0.2, 0.4, 0.6, 0.8], 0.01);
@@ -60,12 +60,12 @@ function putImageData_e_sRGBThenGetImageData_e_sRGB_OutOfRange() {
{colorSpace: 'srgb', pixelFormat:'float16'})
var imageData = ctx.createImageData(1, 1,
{colorSpace: 'srgb', storageFormat:'float32'});
- imageData.dataUnion[0] = 1.3;
- imageData.dataUnion[1] = -1.13;
- imageData.dataUnion[2] = 0.7;
- imageData.dataUnion[3] = 1.8;
+ imageData.data[0] = 1.3;
+ imageData.data[1] = -1.13;
+ imageData.data[2] = 0.7;
+ imageData.data[3] = 1.8;
ctx.putImageData(imageData, 5, 5);
- var pixel = ctx.getImageData(5, 5, 1, 1).dataUnion;
+ var pixel = ctx.getImageData(5, 5, 1, 1).data;
// Check against the same color in e-sRGB. 0.001 protects the test against
// rounding errors.
assert_array_approx_equals(pixel, [1.3, -1.13, 0.7, 1.8], 0.01);
@@ -85,7 +85,7 @@ function putImageDataSRGBThenGetImageData_e_sRGB() {
imageData.data[2] = 153;
imageData.data[3] = 204;
ctx.putImageData(imageData, 5, 5);
- var pixel = ctx.getImageData(5, 5, 1, 1).dataUnion;
+ var pixel = ctx.getImageData(5, 5, 1, 1).data;
// Check against the same color in e-sRGB. 0.01 protects the test against
// color conversion deviations.
assert_array_approx_equals(pixel, [0.2, 0.4, 0.6, 0.8], 0.01);
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html
index dda9f9cc28f..d106904f2e2 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html
@@ -51,7 +51,7 @@ function checkImageDataColorSettings(canvasColorSettings, imageData) {
function checkImageDataColorValues(canvasColorSettings, imageData, isBlank = '',
width = xWidth, height = xHeight, isWCG_U8toSRGB_U8 = '') {
- var data = imageData.dataUnion;
+ var data = imageData.data;
if (isBlank === 'isBlank') {
testBlankPixels(data, width, height);
} else {
@@ -105,10 +105,10 @@ function PreparePredefinedImageDataObjects() {
for (var i = 0; i < xWidth * xHeight; i++)
for (var j = 0; j < 4; j++) {
- srgbImageDataU8.dataUnion[i*4+j] = srgbPixels[i][j];
- e_srgbImageDataU16.dataUnion[i*4+j] =
+ srgbImageDataU8.data[i*4+j] = srgbPixels[i][j];
+ e_srgbImageDataU16.data[i*4+j] =
Math.round(e_srgbPixels[i][j] * 65535);
- e_srgbImageDataF32.dataUnion[i*4+j] = e_srgbPixels[i][j];
+ e_srgbImageDataF32.data[i*4+j] = e_srgbPixels[i][j];
}
}
@@ -282,7 +282,7 @@ function runTestCreateImageDataWHC(canvasColorSettings, imageDataColorSettings)
imageDataColorSettings.storageFormat,
"storageFormat should match");
var blankData = new Array(4 * width * height).fill(0);
- assert_array_equals(imageData.dataUnion, blankData,
+ assert_array_equals(imageData.data, blankData,
"ImageData should be transparent black");
}
@@ -317,7 +317,7 @@ runTestCreateImageDataWHCTests();
// CanvasColorSpace which is given in imageDataColorSettings.
function runTestCreateImageDataDWHC(canvasColorSettings, imageData) {
- var data = imageData.dataUnion;
+ var data = imageData.data;
width = xWidth;
height = xHeight;
var colorSettings = imageData.getColorSettings();
@@ -332,7 +332,7 @@ function runTestCreateImageDataDWHC(canvasColorSettings, imageData) {
assert_equals(newColorSettings.storageFormat,
colorSettings.storageFormat,
"storageFormat should match");
- assert_array_equals(newImageData.dataUnion, imageData.dataUnion,
+ assert_array_equals(newImageData.data, imageData.data,
"ImageData should be transparent black");
}
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html
index d7fe956e4b8..b21eaf72abe 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html
@@ -10,7 +10,7 @@ test(function() {
var imageData = ctx.createImageData(dataFloat32, 1, 1,
{});
ctx.putImageData(imageData, 5, 5);
- var data = ctx.getImageData(5,5,1,1).dataUnion;
+ var data = ctx.getImageData(5,5,1,1).data;
}, "Putting a float-32 ImageData with no color settings on a context 2D should not crash.");
test(function() {
@@ -21,6 +21,6 @@ test(function() {
var imageData = ctx.createImageData(dataUint16, 1, 1,
{});
ctx.putImageData(imageData, 5, 5);
- var data = ctx.getImageData(5,5,1,1).dataUnion;
+ var data = ctx.getImageData(5,5,1,1).data;
}, "Putting a uint-16 ImageData with no color settings on a context 2D should not crash.");
</script> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html
index 6855dc705b7..ff8abeb897f 100644
--- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html
+++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html
@@ -41,7 +41,7 @@ function generateExpectedResult(testScenario, canvas)
ctx.fillRect(0, 1, 1, 1);
ctx.fillStyle = generateFillStyle(27, 27, 27, testScenario.alpha);
ctx.fillRect(1, 1, 1, 1);
- return ctx.getImageData(0, 0, 2, 2).dataUnion;
+ return ctx.getImageData(0, 0, 2, 2).data;
}
function generateTestName(testScenario) {
@@ -79,7 +79,7 @@ function runTransferFromImageBitmapTest(testScenario) {
{colorSpace: testScenario.colorSpace,
pixelFormat: testScenario.pixelFormat});
ctx.drawImage(dstCanvas, 0, 0);
- var actualPixels = ctx.getImageData(0, 0, 2, 2).dataUnion;
+ var actualPixels = ctx.getImageData(0, 0, 2, 2).data;
testPixels(actualPixels, expectedPixels, testScenario);
});
}, generateTestName(testScenario));
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html
index 680cc6af29a..fe42015913b 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html
@@ -110,40 +110,38 @@ for (const testcase of CASES) {
function desc(s) {
return s === '' ? '(none)' : s;
}
- async_test(async (t) => {
- try {
- const targetUrl = REMOTE_FRAME_URL + testcase.target;
- const parent =
- await loadFrames(t, testcase.parent, withEmptyFrame, targetUrl);
-
+ // These tests are very slow, so they must be run in parallel using
+ // async_test.
+ async_test(t => {
+ const targetUrl = REMOTE_FRAME_URL + testcase.target;
+ loadFrames(t, testcase.parent, withEmptyFrame, targetUrl)
+ .then(t.step_func(parent => {
const contextUrl = parent.src ? parent.src : 'about:blank';
- const reports = await observeReports(parent.contentWindow);
- assert_equals(reports.length, testcase.reports.length);
-
- for (let i = 0; i < reports.length; i += 1) {
- const report = reports[i];
- switch (testcase.reports[i]) {
- case 'CORP':
- checkCorpReport(report, contextUrl, targetUrl, 'enforce');
- break;
- case 'CORP-RO':
- checkCorpReport(report, contextUrl, targetUrl, 'reporting');
- break;
- case 'NAV':
- checkCoepMismatchReport(report, contextUrl, targetUrl, 'enforce');
- break;
- case 'NAV-RO':
- checkCoepMismatchReport(report, contextUrl, targetUrl, 'reporting');
- break;
- default:
- assert_unreached(
- 'Unexpected report expeaction: ' + testcase.reports[i]);
+ observeReports(parent.contentWindow).then(t.step_func(reports => {
+ assert_equals(reports.length, testcase.reports.length);
+ for (let i = 0; i < reports.length; i += 1) {
+ const report = reports[i];
+ switch (testcase.reports[i]) {
+ case 'CORP':
+ checkCorpReport(report, contextUrl, targetUrl, 'enforce');
+ break;
+ case 'CORP-RO':
+ checkCorpReport(report, contextUrl, targetUrl, 'reporting');
+ break;
+ case 'NAV':
+ checkCoepMismatchReport(report, contextUrl, targetUrl, 'enforce');
+ break;
+ case 'NAV-RO':
+ checkCoepMismatchReport(report, contextUrl, targetUrl, 'reporting');
+ break;
+ default:
+ assert_unreached(
+ 'Unexpected report expeaction: ' + testcase.reports[i]);
+ }
}
- }
- t.done();
- } catch (e) {
- t.step(() => { throw e; });
- }
+ t.done();
+ })).catch(t.step_func(e => { throw e; }));
+ })).catch(t.step_func(e => { throw e; }));
}, `parent: ${desc(testcase.parent)}, target: ${desc(testcase.target)}, ` +
`with empty frame: ${withEmptyFrame}`);
}
diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html
index 02c719da737..416732497bd 100644
--- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html
+++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html
@@ -77,100 +77,82 @@ function checkNavigationReportExistence(reports, blockedUrl, contextUrl, disposi
assert_unreached(`A report whose blockedURL is ${blockedUrl} and url is ${contextUrl} is not found.`);
}
-async_test(async (t) => {
- try {
- const iframe = document.createElement('iframe');
- t.add_cleanup(() => iframe.remove());
-
- iframe.src = `resources/reporting-empty-frame.html`
- document.body.appendChild(iframe);
- await new Promise(resolve => {
- iframe.addEventListener('load', resolve, {once: true});
- });
-
- const url = `${REMOTE_ORIGIN}/common/text-plain.txt?${token()}`;
- const init = { mode: 'no-cors', cache: 'no-store' };
- // The response comes from cross-origin, and doesn't have a CORP
- // header, so it is blocked.
- iframe.contentWindow.fetch(url, init).catch(() => {});
-
- // Wait 3 seconds for reports to settle.
- await wait(3000);
-
- checkCorpReportExistence(reports, url, iframe.src, '', 'enforce');
- checkCorpReportExistence(
+promise_test(async t => {
+ const iframe = document.createElement('iframe');
+ t.add_cleanup(() => iframe.remove());
+
+ iframe.src = `resources/reporting-empty-frame.html`
+ document.body.appendChild(iframe);
+ await new Promise(resolve => {
+ iframe.addEventListener('load', resolve, {once: true});
+ });
+
+ const url = `${REMOTE_ORIGIN}/common/text-plain.txt?${token()}`;
+ const init = { mode: 'no-cors', cache: 'no-store' };
+ // The response comes from cross-origin, and doesn't have a CORP
+ // header, so it is blocked.
+ iframe.contentWindow.fetch(url, init).catch(() => {});
+
+ // Wait 3 seconds for reports to settle.
+ await wait(3000);
+
+ checkCorpReportExistence(reports, url, iframe.src, '', 'enforce');
+ checkCorpReportExistence(
reportsForReportOnly, url, iframe.src, '', 'reporting');
-
- t.done();
- } catch (e) {
- t.step(() => { throw e });
- }
}, 'subresource CORP');
-async_test(async (t) => {
- try {
- const iframe = document.createElement('iframe');
- t.add_cleanup(() => iframe.remove());
+promise_test(async t => {
+ const iframe = document.createElement('iframe');
+ t.add_cleanup(() => iframe.remove());
- iframe.src = `resources/reporting-empty-frame.html`
- document.body.appendChild(iframe);
- await new Promise(resolve => {
- iframe.addEventListener('load', resolve, {once: true});
- });
+ iframe.src = `resources/reporting-empty-frame.html`
+ document.body.appendChild(iframe);
+ await new Promise(resolve => {
+ iframe.addEventListener('load', resolve, {once: true});
+ });
- const w = iframe.contentWindow;
+ const w = iframe.contentWindow;
- function attachFrame(url) {
- const frame = w.document.createElement('iframe');
- frame.src = url;
- w.document.body.appendChild(frame);
- }
+ function attachFrame(url) {
+ const frame = w.document.createElement('iframe');
+ frame.src = url;
+ w.document.body.appendChild(frame);
+ }
- const url = `${REMOTE_ORIGIN}/common/blank.html?${token()}`;
- // The nested frame comes from cross-origin and doesn't have a CORP
- // header, so it is blocked.
- attachFrame(url);
+ const url = `${REMOTE_ORIGIN}/common/blank.html?${token()}`;
+ // The nested frame comes from cross-origin and doesn't have a CORP
+ // header, so it is blocked.
+ attachFrame(url);
- // Wait 3 seconds for reports to settle.
- await wait(3000);
+ // Wait 3 seconds for reports to settle.
+ await wait(3000);
- checkCorpReportExistence(reports, url, iframe.src, 'iframe', 'enforce');
- checkCorpReportExistence(
+ checkCorpReportExistence(reports, url, iframe.src, 'iframe', 'enforce');
+ checkCorpReportExistence(
reportsForReportOnly, url, iframe.src, 'iframe', 'reporting');
-
- t.done();
- } catch (e) {
- t.step(() => { throw e });
- }
}, 'navigation CORP');
-async_test(async (t) => {
- try {
- const iframe = document.createElement('iframe');
- t.add_cleanup(() => iframe.remove());
+promise_test(async (t) => {
+ const iframe = document.createElement('iframe');
+ t.add_cleanup(() => iframe.remove());
- iframe.src = 'resources/reporting-empty-frame.html';
- const targetUrl = `/common/blank.html?${token()}`;
- iframe.addEventListener('load', () => {
- const nested = iframe.contentDocument.createElement('iframe');
- nested.src = targetUrl;
- // |nested| doesn't have COEP whereas |iframe| has, so it is blocked.
- iframe.contentDocument.body.appendChild(nested);
- }, {once: true});
+ iframe.src = 'resources/reporting-empty-frame.html';
+ const targetUrl = `/common/blank.html?${token()}`;
+ iframe.addEventListener('load', t.step_func(() => {
+ const nested = iframe.contentDocument.createElement('iframe');
+ nested.src = targetUrl;
+ // |nested| doesn't have COEP whereas |iframe| has, so it is blocked.
+ iframe.contentDocument.body.appendChild(nested);
+ }), {once: true});
- document.body.appendChild(iframe);
+ document.body.appendChild(iframe);
- // Wait 3 seconds for reports to settle.
- await wait(3000);
+ // Wait 3 seconds for reports to settle.
+ await wait(3000);
- checkNavigationReportExistence(reports, targetUrl, iframe.src, 'enforce');
- checkNavigationReportExistence(
- reportsForReportOnly, targetUrl, iframe.src, 'reporting');
-
- t.done();
- } catch (e) {
- t.step(() => { throw e });
- }
+ checkNavigationReportExistence(reports, targetUrl, iframe.src, 'enforce');
+ checkNavigationReportExistence(
+ reportsForReportOnly, targetUrl, iframe.src, 'reporting');
}, 'COEP violation on nested frame navigation');
</script>$
diff --git a/tests/wpt/web-platform-tests/html/dom/elements/images/image.py b/tests/wpt/web-platform-tests/html/dom/elements/images/image.py
index 1aec0819263..b8bb34e6180 100644
--- a/tests/wpt/web-platform-tests/html/dom/elements/images/image.py
+++ b/tests/wpt/web-platform-tests/html/dom/elements/images/image.py
@@ -4,7 +4,7 @@ from wptserve.utils import isomorphic_decode
def main(request, response):
- key = request.GET['id']
+ key = request.GET[b'id']
alreadyServedRequest = False
try:
alreadyServedRequest = request.server.stash.take(key)
@@ -19,10 +19,10 @@ def main(request, response):
pass
response.writer.write_status(200)
- response.writer.write_header(b"etag", "abcdef")
+ response.writer.write_header(b"etag", b"abcdef")
response.writer.write_header(b"content-length", len(body))
- response.writer.write_header(b"content-type", "image/png")
- response.writer.write_header(b"cache-control", "public, max-age=31536000, no-cache")
+ response.writer.write_header(b"content-type", b"image/png")
+ response.writer.write_header(b"cache-control", b"public, max-age=31536000, no-cache")
response.writer.end_headers()
response.writer.write(body)
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html
new file mode 100644
index 00000000000..461917a9a0d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<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>
+
+<style>
+legend:hover {
+ background: lime;
+}
+</style>
+<fieldset>
+ <legend>Legend</legend>
+</fieldset>
+<script>
+// https://crbug.com/1127743
+promise_test(async () => {
+ await test_driver.click(document.querySelector('legend'));
+ assert_not_equals(document.querySelector('legend:hover'), null);
+}, 'The rendered LEGEND should work well for :hover.');
+</script>
diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp-ref.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp-ref.html
new file mode 100644
index 00000000000..f37d8a3ec94
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp-ref.html
@@ -0,0 +1,5 @@
+<!doctype html>
+<title>Test reference</title>
+<style>img { border: solid; }</style>
+It should say PASS below:<br>
+<img alt="PASS">
diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp.html
new file mode 100644
index 00000000000..2416e5dfd08
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<title>Images behave the same when blocked by CSP as when failing to load/broken</title>
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1664156">
+<link rel="match" href="blocked-by-csp-ref.html">
+<meta http-equiv=content-security-policy content="img-src 'none'">
+<style>img { border: solid; }</style>
+It should say PASS below:<br>
+<img src=image alt="PASS">
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html
new file mode 100644
index 00000000000..9bfe5a1f312
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ const worker = new SharedWorker(
+ "evaluation-order-1-nothrow-worker-setup.js");
+ fetch_tests_from_worker(worker);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js
new file mode 100644
index 00000000000..88fc22ba7f7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js
@@ -0,0 +1,4 @@
+importScripts("/resources/testharness.js");
+importScripts("module/evaluation-order-setup.mjs");
+importScripts("module/evaluation-order-1-nothrow-worker.mjs");
+importScripts("module/evaluation-order-1-nothrow.mjs");
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html
new file mode 100644
index 00000000000..4ddfb61d507
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ const worker = new Worker(
+ "evaluation-order-1-nothrow-worker-setup.js");
+ fetch_tests_from_worker(worker);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html
new file mode 100644
index 00000000000..b08372efd71
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="module/evaluation-order-setup.mjs"></script>
+<script>
+ window.addEventListener("load", ev => globalThis.testDone());
+ globalThis.expectedLog = [
+ "step-1-1", "step-1-2",
+ "microtask",
+ "script-load",
+ "global-load",
+ ];
+</script>
+
+<script src="module/evaluation-order-1-nothrow.mjs"
+ onerror="globalThis.unreachable()"
+ onload="globalThis.log.push('script-load')"></script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html
new file mode 100644
index 00000000000..0ad18a8fba8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ const worker = new SharedWorker(
+ "evaluation-order-1-worker-setup.js");
+ fetch_tests_from_worker(worker);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js
new file mode 100644
index 00000000000..f5bb6ecaf96
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js
@@ -0,0 +1,4 @@
+importScripts("/resources/testharness.js");
+importScripts("module/evaluation-order-setup.mjs");
+importScripts("module/evaluation-order-1-worker.mjs");
+importScripts("module/evaluation-order-1.mjs");
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html
new file mode 100644
index 00000000000..7760e087c2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ const worker = new Worker(
+ "evaluation-order-1-worker-setup.js");
+ fetch_tests_from_worker(worker);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1.html
new file mode 100644
index 00000000000..7bf7132081e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="module/evaluation-order-setup.mjs"></script>
+<script>
+ window.addEventListener("load", event => globalThis.testDone());
+ globalThis.expectedLog = [
+ "step-1-1", "step-1-2",
+ "global-error", "error",
+ "microtask",
+ "script-load",
+ "global-load"
+ ];
+</script>
+
+<script src="module/evaluation-order-1.mjs"
+ onerror="unreachable()" onload="log.push('script-load')"></script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html
index 73a6ce3db00..50933da2c1d 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html
@@ -9,6 +9,7 @@
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
+ window.addEventListener("onunhandledrejection", unreachable);
const test_load = async_test(
"Parse errors in different files should be reported " +
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html
index 0d67cb819a9..51adb09d11a 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html
@@ -9,6 +9,7 @@
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
+ window.addEventListener("onunhandledrejection", unreachable);
const test_load = async_test(
"Instantiation errors in different files should be reported " +
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html
index 5c0adff6ea8..bc52119bfe4 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html
@@ -9,6 +9,7 @@
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
+ window.addEventListener("onunhandledrejection", unreachable);
const test_load = async_test(
"Evaluation errors are cached in intermediate module scripts");
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html
index 6f119e30064..2480a60d6d4 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html
@@ -9,6 +9,7 @@
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
+ window.addEventListener("onunhandledrejection", unreachable);
const test_load = async_test(
"network error has higher priority than parse error");
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html
index a7df1df0c86..673bf28ca20 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html
@@ -9,6 +9,7 @@
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
+ window.addEventListener("onunhandledrejection", unreachable);
const test_load = async_test(
"parse error has higher priority than instantiation error");
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html
index 9b00df38915..8a16266f4cd 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html
@@ -9,6 +9,7 @@
window.log = [];
window.addEventListener("error", ev => log.push(ev.error));
+ window.addEventListener("onunhandledrejection", unreachable);
const test_load = async_test(
"instantiation error has higher priority than evaluation error");
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html
new file mode 100644
index 00000000000..77ece9e4922
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ const worker = new SharedWorker(
+ "evaluation-order-1-nothrow-worker-setup.mjs", {type:"module"});
+ fetch_tests_from_worker(worker);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html
new file mode 100644
index 00000000000..cc7f0302bfc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ const worker = new SharedWorker(
+ "evaluation-order-1-worker-setup.mjs", {type:"module"});
+ fetch_tests_from_worker(worker);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html
new file mode 100644
index 00000000000..06456390021
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ const worker = new SharedWorker(
+ "evaluation-order-2-import-worker-setup.mjs", {type:"module"});
+ fetch_tests_from_worker(worker);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html
new file mode 100644
index 00000000000..cd1f5edfa22
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ const worker = new SharedWorker(
+ "evaluation-order-3-dynamic-worker-setup.mjs", {type:"module"});
+ fetch_tests_from_worker(worker);
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html
new file mode 100644
index 00000000000..da07faf42d6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<title>Testing evaluation order</title>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ setup({allow_uncaught_exception: true});
+
+ window.log = [];
+
+ window.addEventListener("error", ev => testDone());
+ window.addEventListener("onunhandledrejection", unreachable);
+
+ const test_load = async_test("Test evaluation order of modules");
+
+ window.addEventListener("load", ev => log.push("window-load"));
+
+ function unreachable() { log.push("unexpected"); }
+ function testDone() {
+ test_load.step(() => {
+ assert_array_equals(log, [
+ "step-4.1-1", "step-4.1-2", "microtask-4.1",
+ "script-load", "window-load",
+ "step-4.2-1", "step-4.2-2", "microtask-4.2",
+ ]);
+ });
+ test_load.done();
+ }
+</script>
+
+<script type="module" src="evaluation-order-4.1.mjs"
+ onerror="unreachable()" onload="log.push('script-load')">
+ </script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs
new file mode 100644
index 00000000000..f3347c1d28e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs
@@ -0,0 +1,8 @@
+log.push("step-4.1-1");
+queueMicrotask(() => log.push("microtask-4.1"));
+log.push("step-4.1-2");
+
+await import("./evaluation-order-4.2.mjs");
+
+// Not happening as we throw in the above module.
+log.push("step-4.1-3");
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs
new file mode 100644
index 00000000000..96a5cca3a63
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs
@@ -0,0 +1,5 @@
+log.push("step-4.2-1");
+queueMicrotask(() => log.push("microtask-4.2"));
+log.push("step-4.2-2");
+
+throw new Error("error");
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html
index f269dcbcb93..e54bf5d5388 100644
--- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html
@@ -10,7 +10,9 @@ async_test(t => {
const iframe = document.createElement("iframe");
+ iframe.onunhandledrejection = t.unreached_func("Unhandled promise rejection detected");
iframe.onerror = t.unreached_func("Error loading iframe");
+
let onLoadWasCalled = false;
iframe.onload = t.step_func(() => {
assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n");
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html
index f59c3c0abe7..20645f4d788 100644
--- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html
@@ -6,17 +6,20 @@
<script>
async_test(t => {
const iframe = document.createElement("iframe");
-
iframe.onerror = t.unreached_func("Error loading iframe");
- let testEndWasCalled = false;
- document.addEventListener("documentWriteDone", t.step_func(() => {
- assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n");
- testEndWasCalled = true;
- }));
- iframe.onload = t.step_func_done(() => {
- assert_true(testEndWasCalled, 'documentWriteDone event was not sent');
+
+ let onLoadWasCalled = false;
+
+ iframe.onload = t.step_func(() => {
+ onLoadWasCalled = true;
assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n");
+ // Don't call the event handler another time after document.write.
+ iframe.onload = null;
});
+ document.addEventListener("documentWriteDone", t.step_func_done(() => {
+ assert_true(onLoadWasCalled, "onload must be called");
+ assert_equals(iframe.contentDocument.body.textContent, "document.write body contents\n");
+ }));
iframe.src = "module-tla-import-iframe.html";
document.body.appendChild(iframe);
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html
index 5c55bed6c07..edc9e80cb39 100644
--- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html
@@ -1,10 +1,11 @@
<!doctype html>
<script type=module>
await new Promise(resolve => {
- window.parent.document.test.step_timeout(resolve, 0));
+ window.parent.document.test.step_timeout(resolve, 0);
document.write("document.write body contents\n");
document.close();
window.parent.document.dispatchEvent(new CustomEvent("documentWriteDone"));
});
</script>
+
Initial body contents
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html
index 5fc30a8b0e7..4f1281bcce4 100644
--- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html
@@ -9,18 +9,14 @@ async_test(t => {
document.test = t;
const iframe = document.createElement("iframe");
-
iframe.onerror = t.unreached_func("Error loading iframe");
- let onLoadWasCalled = false;
- iframe.onload = t.step_func(() => {
- assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n");
- iframe.onload = null;
- onLoadWasCalled = true;
- });
- document.addEventListener("documentWriteDone", t.step_func_done(() => {
- assert_true(onLoadWasCalled);
+
+ document.addEventListener("documentWriteDone", t.step_func(() => {
assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n");
}));
+ iframe.onload = t.step_func_done(() => {
+ assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n");
+ });
iframe.src = "module-tla-promise-iframe.html";
document.body.appendChild(iframe);
diff --git a/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html b/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html
index 11b1830efb9..7f56fe6660e 100644
--- a/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html
+++ b/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
+<meta name="timeout" content="long">
<title>InputEvent.getTargetRanges() at Backspace</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@@ -269,6 +270,25 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Backspace at "<p> a[]bc</p>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<p>abc</p><p>def</p>";
+ let p1 = editor.firstChild;
+ let abc = p1.firstChild;
+ let p2 = p1.nextSibling;
+ let def = p2.firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<p>abcdef</p>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<p>abc</p><p>[]def</p>"');
+
// Invisible leading white-spaces in current block and invisible trailing
// white-spaces in the previous block should be deleted for avoiding they
// becoming visible when the blocks are joined. Perhaps, they should be
@@ -389,6 +409,58 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Backspace at "<p>abc [</p><p>] def</p>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<p>abc</p><p><b>def</b></p>";
+ let abc = editor.querySelector("p").firstChild;
+ let def = editor.querySelector("b").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<p>abc<b>def</b></p>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<p>abc</p><p><b>[]def</b></p>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<p><b>abc</b></p><p><b>def</b></p>";
+ let abc = editor.querySelector("p > b").firstChild;
+ let def = editor.querySelector("P + p > b").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_in_array(editor.innerHTML, ["<p><b>abc</b><b>def</b></p>",
+ "<p><b>abcdef</b></p>"]);
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<p><b>abc</b></p><p><b>[]def</b></p>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<p><i>abc</i></p><p><b>def</b></p>";
+ let abc = editor.querySelector("i").firstChild;
+ let def = editor.querySelector("b").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<p><i>abc</i><b>def</b></p>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<p><i>abc</i></p><p><b>[]def</b></p>"');
+
// Invisible leading white-spaces in the current block should be deleted
// for avoiding they becoming visible when the blocks are joined, but
// preformatted trailing white-spaces in the first block shouldn't be
@@ -786,6 +858,25 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Backspace at "<p>abc{<br>}def</p>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<p>def<br>ghi</p></div>";
+ let p = editor.querySelector("p");
+ let def = p.firstChild;
+ let abc = editor.firstChild.firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_in_array(editor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
+ "<div>abcdef<br><p>ghi</p></div>"]);
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div>abc<p>[]def<br>ghi</p></div>"');
+
// Joining parent block and child block should remove invisible preceding
// white-spaces of the child block and invisible leading white-spaces in
// the child block, and they should be contained in a range of
@@ -799,7 +890,8 @@ promise_test(async () => {
let abc = editor.firstChild.firstChild;
selection.collapse(def, 3);
await sendBackspaceKey();
- assert_equals(editor.innerHTML, "<div>abcdef<p>ghi</p></div>");
+ assert_in_array(editor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
+ "<div>abcdef<br><p>ghi</p></div>"]);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: abc,
startOffset: 3,
@@ -809,10 +901,79 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Backspace at "<div>abc <p> []def<br>ghi</p></div>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<p><b>def</b></p></div>";
+ let abc = editor.querySelector("div").firstChild;
+ let def = editor.querySelector("b").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div>abc<b>def</b></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div>abc<p><b>[]def</b></p></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><b>abc</b><p><b>def</b></p></div>";
+ let abc = editor.querySelector("b").firstChild;
+ let def = editor.querySelector("p > b").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_in_array(editor.innerHTML, ["<div><b>abc</b><b>def</b></div>",
+ "<div><b>abcdef</b></div>"]);
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div><b>abc</b><p><b>[]def</b></p></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><i>abc</i><p><b>def</b></p></div>";
+ let abc = editor.querySelector("i").firstChild;
+ let def = editor.querySelector("b").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div><i>abc</i><b>def</b></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div><i>abc</i><p><b>[]def</b></p></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><p>abc</p>def</div>";
+ let abc = editor.querySelector("p").firstChild;
+ let def = editor.querySelector("p").nextSibling;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div><p>abcdef</p></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div><p>abc</p>[]def</div>"');
+
// Joining child block and parent block should remove invisible trailing
// white-spaces of the child block and invisible following white-spaces
// in the parent block, and they should be contained by a range of
-// `getTaregetRanges()`, but maybe needs discussion.
+// `getTargetRanges()`, but maybe needs discussion.
// https://github.com/w3c/input-events/issues/112
promise_test(async () => {
reset();
@@ -831,6 +992,143 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Backspace at "<div><p>abc </p> []def</div>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><p><b>abc</b></p>def</div>";
+ let abc = editor.querySelector("b").firstChild;
+ let def = editor.querySelector("p").nextSibling;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div><p><b>abc</b>def</p></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div><p><b>abc</b></p>[]def</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><p><b>abc</b></p><b>def</b></div>";
+ let abc = editor.querySelector("b").firstChild;
+ let def = editor.querySelector("div > b").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_in_array(editor.innerHTML, ["<div><p><b>abc</b><b>def</b></p></div>",
+ "<div><p><b>abcdef</b></p></div>"]);
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div><p><b>abc</b></p><b>[]def</b></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><p><b>abc</b></p><i>def</i></div>";
+ let abc = editor.querySelector("b").firstChild;
+ let def = editor.querySelector("i").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div><p><b>abc</b><i>def</i></p></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div><p><b>abc</b></p><i>[]def</i></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li></ul>ghi</div>";
+ let abc = editor.querySelector("div").firstChild;
+ let def = editor.querySelector("li").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div>abcdefghi</div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div>abc<ul><li>[]def</li></ul>ghi</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li></ul>ghi</div>";
+ let def = editor.querySelector("li").firstChild;
+ let ghi = editor.querySelector("ul").nextSibling;
+ selection.collapse(ghi, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div>abc<ul><li>defghi</li></ul></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: def,
+ startOffset: 3,
+ endContainer: ghi,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div>abc<ul><li>def</li></ul>[]ghi</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>";
+ let abc = editor.querySelector("div").firstChild;
+ let def = editor.querySelector("li").firstChild;
+ selection.collapse(def, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div>abcdef<ul><li>ghi</li></ul>jkl</div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div>abc<ul><li>[]def</li><li>ghi</li></ul>jkl</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>";
+ let def = editor.querySelector("li").firstChild;
+ let ghi = editor.querySelector("li + li").firstChild;
+ selection.collapse(ghi, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div>abc<ul><li>defghi</li></ul>jkl</div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: def,
+ startOffset: 3,
+ endContainer: ghi,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div>abc<ul><li>def</li><li>[]ghi</li></ul>jkl</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>";
+ let ghi = editor.querySelector("li + li").firstChild;
+ let jkl = editor.querySelector("ul").nextSibling;
+ selection.collapse(jkl, 0);
+ await sendBackspaceKey();
+ assert_equals(editor.innerHTML, "<div>abc<ul><li>def</li><li>ghijkl</li></ul></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: ghi,
+ startOffset: 3,
+ endContainer: jkl,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Backspace at "<div>abc<ul><li>def</li><li>ghi</li></ul>[]jkl</div>"');
+
// Backspace in empty paragraph should remove the empty paragraph. In this
// case, it should be treated as joining with the previous paragraph.
// The target range should include the invisible <br> element in the empty
diff --git a/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html b/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html
index b31afacb62d..333a87a9d95 100644
--- a/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html
+++ b/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html
@@ -1,5 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
+<meta name="timeout" content="long">
<title>InputEvent.getTargetRanges() at Delete (forward delete)</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@@ -269,6 +270,25 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<p>ab[]c </p>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<p>abc</p><p>def</p>";
+ let p1 = editor.firstChild;
+ let abc = p1.firstChild;
+ let p2 = p1.nextSibling;
+ let def = p2.firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<p>abcdef</p>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<p>abc[]</p><p>def</p>"');
+
// Invisible trailing white-spaces in current block and invisible leading
// white-spaces in the following block should be deleted for avoiding they
// becoming visible when the blocks are joined. Perhaps, they should be
@@ -388,6 +408,58 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<p>abc [</p><p>] def</p>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<p>abc</p><p><b>def</b></p>";
+ let abc = editor.querySelector("p").firstChild;
+ let def = editor.querySelector("b").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<p>abc<b>def</b></p>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<p>abc[]</p><p><b>def</b></p>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<p><b>abc</b></p><p><b>def</b></p>";
+ let abc = editor.querySelector("p > b").firstChild;
+ let def = editor.querySelector("P + p > b").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_in_array(editor.innerHTML, ["<p><b>abc</b><b>def</b></p>",
+ "<p><b>abcdef</b></p>"]);
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<p><b>abc[]</b></p><p><b>def</b></p>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<p><i>abc</i></p><p><b>def</b></p>";
+ let abc = editor.querySelector("i").firstChild;
+ let def = editor.querySelector("b").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<p><i>abc</i><b>def</b></p>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<p><i>abc[]</i></p><p><b>def</b></p>"');
+
// Invisible leading white-spaces in the following block should be deleted
// for avoiding they becoming visible when the blocks are joined, but
// preformatted trailing white-spaces in the first block shouldn't be
@@ -763,6 +835,25 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div>abc[]<br><hr>def</div>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<p>def<br>ghi</p></div>";
+ let p = editor.querySelector("p");
+ let def = p.firstChild;
+ let abc = editor.firstChild.firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_in_array(editor.innerHTML, ["<div>abcdef<p>ghi</p></div>",
+ "<div>abcdef<br><p>ghi</p></div>"]);
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div>abc<p>[]def<br>ghi</p></div>"');
+
// Joining parent block and child block should remove invisible preceding
// white-spaces of the child block and invisible leading white-spaces in
// the child block, and they should be contained in a range of
@@ -786,6 +877,75 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div>abc[] <p> def<br>ghi</p></div>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<p><b>def</b></p></div>";
+ let abc = editor.querySelector("div").firstChild;
+ let def = editor.querySelector("b").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div>abc<b>def</b></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div>abc[]<p><b>def</b></p></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><b>abc</b><p><b>def</b></p></div>";
+ let abc = editor.querySelector("b").firstChild;
+ let def = editor.querySelector("p > b").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_in_array(editor.innerHTML, ["<div><b>abc</b><b>def</b></div>",
+ "<div><b>abcdef</b></div>"]);
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div><b>abc[]</b><p><b>def</b></p></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><i>abc</i><p><b>def</b></p></div>";
+ let abc = editor.querySelector("i").firstChild;
+ let def = editor.querySelector("b").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div><i>abc</i><b>def</b></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div><i>abc[]</i><p><b>def</b></p></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><p>abc</p>def</div>";
+ let abc = editor.querySelector("p").firstChild;
+ let def = editor.querySelector("p").nextSibling;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div><p>abcdef</p></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div><p>abc[]</p>def</div>"');
+
// Joining child block and parent block should remove invisible trailing
// white-spaces of the child block and invisible following white-spaces
// in the parent block, and they should be contained by a range of
@@ -808,6 +968,143 @@ promise_test(async () => {
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Delete at "<div><p>abc[] </p> def</div>"');
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><p><b>abc</b></p>def</div>";
+ let abc = editor.querySelector("b").firstChild;
+ let def = editor.querySelector("p").nextSibling;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div><p><b>abc</b>def</p></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div><p><b>abc[]</b></p>def</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><p><b>abc</b></p><b>def</b></div>";
+ let abc = editor.querySelector("b").firstChild;
+ let def = editor.querySelector("div > b").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_in_array(editor.innerHTML, ["<div><p><b>abc</b><b>def</b></p></div>",
+ "<div><p><b>abcdef</b></p></div>"]);
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div><p><b>abc[]</b></p><b>def</b></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div><p><b>abc</b></p><i>def</i></div>";
+ let abc = editor.querySelector("b").firstChild;
+ let def = editor.querySelector("i").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div><p><b>abc</b><i>def</i></p></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div><p><b>abc[]</b></p><i>def</i></div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li></ul>ghi</div>";
+ let abc = editor.querySelector("div").firstChild;
+ let def = editor.querySelector("li").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div>abcdefghi</div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div>abc[]<ul><li>def</li></ul>ghi</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li></ul>ghi</div>";
+ let def = editor.querySelector("li").firstChild;
+ let ghi = editor.querySelector("ul").nextSibling;
+ selection.collapse(def, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div>abc<ul><li>defghi</li></ul></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: def,
+ startOffset: 3,
+ endContainer: ghi,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div>abc<ul><li>def[]</li></ul>ghi</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>";
+ let abc = editor.querySelector("div").firstChild;
+ let def = editor.querySelector("li").firstChild;
+ selection.collapse(abc, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div>abcdef<ul><li>ghi</li></ul>jkl</div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: abc,
+ startOffset: 3,
+ endContainer: def,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div>abc[]<ul><li>def</li><li>ghi</li></ul>jkl</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>";
+ let def = editor.querySelector("li").firstChild;
+ let ghi = editor.querySelector("li + li").firstChild;
+ selection.collapse(def, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div>abc<ul><li>defghi</li></ul>jkl</div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: def,
+ startOffset: 3,
+ endContainer: ghi,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div>abc<ul><li>def[]</li><li>ghi</li></ul>jkl</div>"');
+
+promise_test(async () => {
+ reset();
+ editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>";
+ let ghi = editor.querySelector("li + li").firstChild;
+ let jkl = editor.querySelector("ul").nextSibling;
+ selection.collapse(ghi, 3);
+ await sendDeleteKey();
+ assert_equals(editor.innerHTML, "<div>abc<ul><li>def</li><li>ghijkl</li></ul></div>");
+ checkGetTargetRangesOfBeforeinputOnDeleteSomething({
+ startContainer: ghi,
+ startOffset: 3,
+ endContainer: jkl,
+ endOffset: 0,
+ });
+ checkGetTargetRangesOfInputOnDeleteSomething();
+}, 'Delete at "<div>abc<ul><li>def</li><li>ghi[]</li></ul>jkl</div>"');
+
// Delete in empty paragraph should remove the empty paragraph. In this
// case, it should be treated as joining with the previous paragraph.
// The target range should include the invisible <br> element in the empty
diff --git a/tests/wpt/web-platform-tests/interfaces/encoding.idl b/tests/wpt/web-platform-tests/interfaces/encoding.idl
index bae48f11993..7585cb3717c 100644
--- a/tests/wpt/web-platform-tests/interfaces/encoding.idl
+++ b/tests/wpt/web-platform-tests/interfaces/encoding.idl
@@ -44,11 +44,6 @@ interface TextEncoder {
};
TextEncoder includes TextEncoderCommon;
-interface mixin GenericTransformStream {
- readonly attribute ReadableStream readable;
- readonly attribute WritableStream writable;
-};
-
[Exposed=(Window,Worker)]
interface TextDecoderStream {
constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options = {});
diff --git a/tests/wpt/web-platform-tests/interfaces/intersection-observer.idl b/tests/wpt/web-platform-tests/interfaces/intersection-observer.idl
index fa1de190387..52db1c4baa9 100644
--- a/tests/wpt/web-platform-tests/interfaces/intersection-observer.idl
+++ b/tests/wpt/web-platform-tests/interfaces/intersection-observer.idl
@@ -8,7 +8,7 @@ callback IntersectionObserverCallback = undefined (sequence<IntersectionObserver
[Exposed=Window]
interface IntersectionObserver {
constructor(IntersectionObserverCallback callback, optional IntersectionObserverInit options = {});
- readonly attribute Node? root;
+ readonly attribute (Element or Document)? root;
readonly attribute DOMString rootMargin;
readonly attribute FrozenArray<double> thresholds;
undefined observe(Element target);
diff --git a/tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl b/tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl
index 25cba22ecfc..600ae0514a3 100644
--- a/tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl
+++ b/tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl
@@ -8,4 +8,6 @@
[CallWith=ScriptState, RaisesException] DOMString sanitizeToString(DOMString input);
};
-dictionary SanitizerConfig {};
+dictionary SanitizerConfig {
+ sequence<DOMString>? dropElements;
+};
diff --git a/tests/wpt/web-platform-tests/interfaces/streams.idl b/tests/wpt/web-platform-tests/interfaces/streams.idl
index 1df6827189d..99c3a5dee91 100644
--- a/tests/wpt/web-platform-tests/interfaces/streams.idl
+++ b/tests/wpt/web-platform-tests/interfaces/streams.idl
@@ -219,3 +219,8 @@ interface CountQueuingStrategy {
readonly attribute unrestricted double highWaterMark;
readonly attribute Function size;
};
+
+interface mixin GenericTransformStream {
+ readonly attribute ReadableStream readable;
+ readonly attribute WritableStream writable;
+};
diff --git a/tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl b/tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl
index 260c00365ac..a7eb3b1a0e8 100644
--- a/tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl
@@ -48,9 +48,9 @@ interface XRJointSpace: XRSpace {};
partial interface XRFrame {
XRJointPose? getJointPose(XRJointSpace joint, XRSpace baseSpace);
- void fillJointRadii(sequence<XRJointSpace> jointSpaces, Float32Array radii);
+ boolean fillJointRadii(sequence<XRJointSpace> jointSpaces, Float32Array radii);
- void fillPoses(sequence<XRSpace> spaces, XRSpace baseSpace, Float32Array transforms);
+ boolean fillPoses(sequence<XRSpace> spaces, XRSpace baseSpace, Float32Array transforms);
};
interface XRJointPose: XRPose {
diff --git a/tests/wpt/web-platform-tests/layout-instability/move-distance-clamped.html b/tests/wpt/web-platform-tests/layout-instability/move-distance-clamped.html
new file mode 100644
index 00000000000..6c5f9597f9a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/move-distance-clamped.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<title>Layout Instability: distance fraction not more than 1.0</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-adapter.js"></script>
+<script src="resources/util.js"></script>
+<style>
+body { margin: 0; }
+#shifter {
+ position: relative;
+ width: 100vw;
+ height: 100vh;
+ left: -2000vw;
+ top: -2000vh;
+}
+</style>
+<div id="shifter"></div>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Modify the position of the div.
+ document.querySelector("#shifter").style = "left: 0; top: 0";
+
+ const docElement = document.documentElement;
+ const viewWidth = docElement.clientWidth;
+ const viewHeight = docElement.clientHeight;
+
+ // An element the size of the viewport has shifted by a huge distance, but
+ // the move distance is effectively the viewport width or height (whichever
+ // is larger) as the distance fraction is limited to a maximum of 1.0.
+ const expectedScore = computeExpectedScore(
+ viewWidth * viewHeight,
+ Math.max(viewWidth, viewHeight));
+
+ // Observer fires after the frame is painted.
+ cls_expect(watcher, {score: 0});
+ await watcher.promise;
+ cls_expect(watcher, {score: expectedScore});
+}, "Distance fraction not more than 1.0.");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/layout-instability/visibility-hidden.html b/tests/wpt/web-platform-tests/layout-instability/visibility-hidden.html
new file mode 100644
index 00000000000..ec1c3316380
--- /dev/null
+++ b/tests/wpt/web-platform-tests/layout-instability/visibility-hidden.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<title>Layout Instability: visibility:hidden</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<div id="target" style="position: absolute; top: 0; width: 400px; height: 400px; visibility: hidden"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+ const watcher = new ScoreWatcher;
+
+ // Wait for the initial render to complete.
+ await waitForAnimationFrames(2);
+
+ // Shift target, for which no shift should be reported because it's hidden.
+ document.querySelector("#target").style.top = '200px';
+
+ await waitForAnimationFrames(2);
+ // No shift should be reported.
+ assert_equals(watcher.score, 0);
+}, 'visibility:hidden');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/lint.ignore b/tests/wpt/web-platform-tests/lint.ignore
index a3b91f1a992..d299867133c 100644
--- a/tests/wpt/web-platform-tests/lint.ignore
+++ b/tests/wpt/web-platform-tests/lint.ignore
@@ -219,7 +219,6 @@ SET TIMEOUT: webvtt/*
SET TIMEOUT: workers/*
SET TIMEOUT: xhr/resources/init.htm
SET TIMEOUT: xhr/resources/xmlhttprequest-timeout.js
-SET TIMEOUT: focus/support/focus-restoration-in-different-site-iframes-outer.sub.html
# generate_tests implementation and sample usage
GENERATE_TESTS: resources/test/tests/functional/generate-callback.html
diff --git a/tests/wpt/web-platform-tests/mathml/crashtests/display-and-column-properties.html b/tests/wpt/web-platform-tests/mathml/crashtests/display-and-column-properties.html
new file mode 100644
index 00000000000..c40a2a05497
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/crashtests/display-and-column-properties.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html class="test-wait">
+ <head>
+ <title>MathML elements with display and column properties</title>
+ <meta charset="utf-8"/>
+ <style>
+ math {
+ column-width: 100px;
+ }
+ </style>
+ </head>
+ <body>
+ <math></math>
+ <math style="display: list-item"></math>
+ <script>
+ window.addEventListener("load", function() {
+ // Force initial layout.
+ document.documentElement.getBoundingClientRect();
+
+ // Change display and reforce layout.
+ let maths = document.getElementsByTagName("math");
+ maths[0].setAttribute("style", "display: list-item");
+ maths[1].removeAttribute("style");
+ document.documentElement.getBoundingClientRect();
+
+ document.documentElement.classList.remove("test-wait");
+ });
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/crashtests/multicol-on-token-elements.html b/tests/wpt/web-platform-tests/mathml/crashtests/multicol-on-token-elements.html
new file mode 100644
index 00000000000..9fc00eb6911
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/crashtests/multicol-on-token-elements.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<math><mi style="column-count: 10">mi</mi></math>
+<math><mi style="column-width: 10px">mi</mi></math>
+<math><mn style="column-count: 10">mn</mn></math>
+<math><mn style="column-width: 10px">mn</mn></math>
+<math><mo style="column-count: 10">mo</mo></math>
+<math><mo style="column-width: 10px">mo</mo></math>
+<math><ms style="column-count: 10">ms</ms></math>
+<math><ms style="column-width: 10px">ms</ms></math>
+<math><mtext style="column-count: 10">mtext</mtext></math>
+<math><mtext style="column-width: 10px">mtext</mtext></math>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter-ref.html
new file mode 100644
index 00000000000..21fc165b7da
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Blur filter (reference)</title>
+</head>
+<body>
+ <p>Rectangles should be blurred.</p>
+ <div style="background: green; filter: blur(5px); width: 200px; height: 200px;"></div>
+ <div style="background: green; filter: blur(5px); width: 200px; height: 200px; position: absolute; top: 300px"></div>
+ </div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter.html
new file mode 100644
index 00000000000..9540a017d2e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Blur filter</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
+<link rel="match" href="blur-filter-ref.html"/>
+<meta name="assert" content="Verify that 'filter: blur' works on MathML elements.">
+</head>
+<body>
+ <p>Rectangles should be blurred.</p>
+ <div>
+ <math><mspace width="200px" height="200px" style="background: green; filter: blur(5px)"/></math>
+ </div>
+ <div style="position: absolute; top: 300px">
+ <math style="filter: blur(5px)"><mspace width="200px" height="200px" style="background: green"/></math>
+ </div>
+ <script src="/mathml/support/feature-detection.js"></script>
+ <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path-ref.html
new file mode 100644
index 00000000000..57935564bf0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Clip property (reference)</title>
+</head>
+<body>
+ <p>Rectangles should be clipped to a polygon.</p>
+ <div style="background: green; width: 200px; height: 200px; clip-path: polygon(10% 10%, 90% 10%, 90% 90%, 10% 90%)"></div>
+ <div style="background: green; width: 200px; height: 200px; position: absolute; top: 300px; clip-path: polygon(10% 10%, 90% 10%, 90% 90%, 10% 90%)"></div>
+ </div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path.html
new file mode 100644
index 00000000000..5ff62ee7d4d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Clip property</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
+<link rel="match" href="clip-path-ref.html"/>
+<meta name="assert" content="Verify that the clip property works on MathML elements.">
+</head>
+<body>
+ <p>Rectangles should be clipped to a polygon.</p>
+ <div>
+ <math><mspace width="200px" height="200px" style="background: green; clip-path: polygon(10% 10%, 90% 10%, 90% 90%, 10% 90%)"/></math>
+ </div>
+ <div style="position: absolute; top: 300px; width: 200px; height: 200px">
+ <math style="position: absolute; clip-path: polygon(10% 10%, 90% 10%, 90% 90%, 10% 90%)"><mspace width="200px" height="200px" style="background: green"/></math>
+ </div>
+ <script src="/mathml/support/feature-detection.js"></script>
+ <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-ref.html
new file mode 100644
index 00000000000..7882ac8c31e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Clip property (reference)</title>
+</head>
+<body>
+ <p>Rectangles should be clipped.</p>
+ <div style="background: green; width: 200px; height: 200px; position: absolute; top: 100px; clip: rect(0px 100px 100px 0px)"></div>
+ <div style="background: green; width: 200px; height: 200px; position: absolute; top: 300px; clip: rect(0px 100px 100px 0px)"></div>
+ </div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip.html
new file mode 100644
index 00000000000..633e20cb78a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Clip property</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
+<link rel="match" href="clip-ref.html"/>
+<meta name="assert" content="Verify that the clip property works on MathML elements.">
+</head>
+<body>
+ <p>Rectangles should be clipped.</p>
+ <div>
+ <math><mspace width="200px" height="200px" style="position:absolute; top:100px; background: green; clip: rect(0px 100px 100px 0px)"/></math>
+ </div>
+ <div style="position: absolute; top: 300px; width: 200px; height: 200px">
+ <math style="position: absolute; clip: rect(0px 100px 100px 0px)"><mspace width="200px" height="200px" style="background: green"/></math>
+ </div>
+ <script src="/mathml/support/feature-detection.js"></script>
+ <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/display-2.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/display-2.html
new file mode 100644
index 00000000000..e0d41e4412f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/display-2.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Verify that one can override the layout of MathML elements with the CSS display property</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#layout-algorithms">
+<meta name="assert" content="Verify that one can override the display of a MathML element.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mathml/support/layout-comparison.js"></script>
+<script src="/mathml/support/mathml-fragments.js"></script>
+<style>
+ mfrac {
+ padding: 0;
+ }
+</style>
+<script>
+ const Xsize = 25;
+ const templates = {
+ "block display": `<math style="display: block;">XXX</math>`,
+ "block display with contrained width": `<math style="display: block; width: ${2*Xsize}px;">XXX</math>`,
+ "list display inside display block": `<math style="display: block">\
+ <mmultiscripts style="display: list-item;">X</mmultiscripts>\
+ <maction style="display: list-item;">X</maction>\
+ <mpadded style="display: list-item;">X</mpadded>\
+</math>`,
+ "inline display": `<math style="display: inline;">XXX</math>`,
+ "inline-block display": `<math style="display: inline-block">XXX</math>`,
+ "table display (math)": `<math style="display: table">\
+ <mfrac style='display: table-row'>\
+ <msub style='display: table-cell'>X</msub>\
+ <msup style='display: table-cell'>X</msup>\
+ <msubsup style='display: table-cell'>X</msubsup>\
+ </mfrac>\
+ <mtable style='display: table-row'>\
+ <munder style='display: table-cell'>X</munder>\
+ <mover style='display: table-cell'>X</mover>\
+ <munderover style='display: table-cell'>X</munderover>\
+ </mtable>\
+</math>`,
+ "table display (mrow)": `<math display="block">\
+<mrow style="display: table">\
+ <mfrac style='display: table-row'>\
+ <msub style='display: table-cell'>X</msub>\
+ <msup style='display: table-cell'>X</msup>\
+ <msubsup style='display: table-cell'>X</msubsup>\
+ </mfrac>\
+ <mtable style='display: table-row'>\
+ <munder style='display: table-cell'>X</munder>\
+ <mover style='display: table-cell'>X</mover>\
+ <munderover style='display: table-cell'>X</munderover>\
+ </mtable>\
+</mrow></math>`,
+ "inline-table display (math)": `<math style="display: inline-table">\
+ <mfrac style='display: table-row'>\
+ <msub style='display: table-cell'>X</msub>\
+ <msup style='display: table-cell'>X</msup>\
+ <msubsup style='display: table-cell'>X</msubsup>\
+ </mfrac>\
+ <mtable style='display: table-row'>\
+ <munder style='display: table-cell'>X</munder>\
+ <mover style='display: table-cell'>X</mover>\
+ <munderover style='display: table-cell'>X</munderover>\
+ </mtable>\
+</math>`,
+ "inline-table display (mrow)": `<math display="block">\
+<mrow style="display: inline-table">\
+ <mfrac style='display: table-row'>\
+ <msub style='display: table-cell'>X</msub>\
+ <msup style='display: table-cell'>X</msup>\
+ <msubsup style='display: table-cell'>X</msubsup>\
+ </mfrac>\
+ <mtable style='display: table-row'>\
+ <munder style='display: table-cell'>X</munder>\
+ <mover style='display: table-cell'>X</mover>\
+ <munderover style='display: table-cell'>X</munderover>\
+ </mtable>\
+</mrow></math>`,
+ "flexbox display (math)": `<math style="display: flex; flex-direction: column;">XXX</math>`,
+ "flexbox display (mrow)": `<math display="block"><mrow style="display: flex; flex-direction: column;">XXX</mrow></math>`,
+ "grid display (math)": `<math style="display: grid; grid-gap: 2px; grid-template-columns: ${Xsize}px ${Xsize}px ${Xsize}px;>">XXXXXXXXX</math>`,
+ "grid display (mrow)": `<math display="block"><mrow style="display: grid; grid-gap: 2px; grid-template-columns: ${Xsize}px ${Xsize}px ${Xsize}px;>">XXXXXXXXX</mrow></math>`,
+ "ruby display (math)": `<math style="display: ruby;">\
+<mrow style="display: ruby-base;">X</mrow>\
+<mrow style="display: ruby-text">XX</mrow>\
+</math>`,
+ "ruby display (mrow)": `<math display="block"><mrow style="display: ruby;">\
+<mrow style="display: ruby-base;">X</mrow>\
+<mrow style="display: ruby-text">XX</mrow>\
+</mrow></math>`,
+ "block display with column width (math)": `<math style="display: block; column-width: ${2*Xsize}px">\
+ <mrow>XXXX</mrow><mrow>XXXX</mrow><mrow>XXXX</mrow>\
+</math>`,
+ "block display with column width (mrow)": `<math style="display: block"><mrow style="display: block; column-width: ${2*Xsize}px">\
+ <mrow>XXXX</mrow><mrow>XXXX</mrow><mrow>XXXX</mrow>\
+</mrow></math>`,
+ };
+
+ setup({ explicit_done: true });
+ window.addEventListener("load", runTests);
+
+ function runTests() {
+
+ for (let key in templates) {
+ if (!templates.hasOwnProperty(key))
+ continue;
+ let mathtest = templates[key].
+ replace(/X/g, `<mspace style="display: inline-block; width: ${Xsize}px; height: ${Xsize}px; background: black"></mspace>`);
+ let reference = mathtest.
+ replace(/maction|math|mfrac|mmultiscripts|mover|mover|mpadded|mrow|mspace|msubsup|msub|msup|mtable|munderover|munder/g, "div");
+ document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
+<div><span>${key}:</span>${mathtest}</div>\
+<div><span>${key}:</span>${reference}</div>\
+</div>`);
+ let div = document.body.lastElementChild;
+ let elementDiv = div.firstElementChild;
+ let referenceDiv = div.lastElementChild;
+
+ test(function() {
+ const epsilon = 1;
+ compareLayout(elementDiv, referenceDiv, epsilon);
+ }, `${key}`);
+
+ div.style = "display: none;"; // Hide the div after measurement.
+ }
+
+ done();
+ }
+</script>
+</head>
+<body>
+ <div id="log"></div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform-ref.html
new file mode 100644
index 00000000000..005e8a78828
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform-ref.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Transform property (reference)</title>
+</head>
+<body>
+ <p>Rectangles should be rotated.</p>
+ <div style="background: green; width: 200px; height: 200px; position: absolute; top: 100px; transform: rotate(90deg)"></div>
+ <div style="background: green; width: 200px; height: 200px; position: absolute; top: 300px; transform: rotate(90deg)"></div>
+ </div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform.html
new file mode 100644
index 00000000000..b50d6c80045
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Transform property</title>
+<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
+<link rel="match" href="transform-ref.html"/>
+<meta name="assert" content="Verify that the transform property works on MathML elements.">
+</head>
+<body>
+ <p>Rectangles should be rotated.</p>
+ <div>
+ <math><mspace width="200px" height="200px" style="position:absolute; top:100px; background: green; transform: rotate(90deg)"/></math>
+ </div>
+ <div style="position: absolute; top: 300px; width: 200px; height: 200px">
+ <math style="position: absolute; transform: rotate(90deg)"><mspace width="200px" height="200px" style="background: green"/></math>
+ </div>
+ <script src="/mathml/support/feature-detection.js"></script>
+ <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/mathml/support/box-comparison.js b/tests/wpt/web-platform-tests/mathml/support/box-comparison.js
index a574b01706b..b30ad279dfe 100644
--- a/tests/wpt/web-platform-tests/mathml/support/box-comparison.js
+++ b/tests/wpt/web-platform-tests/mathml/support/box-comparison.js
@@ -71,23 +71,24 @@ function compareSizeWithAndWithoutStyle(tag, style) {
if (!FragmentHelper.isValidChildOfMrow(tag))
throw `Invalid argument: ${tag}`;
+ // FIXME <mrow> only needed as workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1658135
document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\
-<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
-<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\
+<div style="display: inline-block"><math><mrow>${MathMLFragments[tag]}</mrow></math></div>\
+<div style="display: inline-block"><math><mrow>${MathMLFragments[tag]}</mrow></math></div>\
</div>`);
var div = document.body.lastElementChild;
var styleDiv = div.firstElementChild;
- var styleMath = styleDiv.firstElementChild;
- var styleElement = FragmentHelper.element(styleMath);
+ var styleParent = styleDiv.firstElementChild.firstElementChild;
+ var styleElement = FragmentHelper.element(styleParent);
styleElement.setAttribute("style", style);
- var styleMathBox = styleMath.getBoundingClientRect();
+ var styleParentBox = styleParent.getBoundingClientRect();
var styleElementBox = styleElement.getBoundingClientRect();
var noStyleDiv = div.lastElementChild;
- var noStyleMath = noStyleDiv.firstElementChild;
- var noStyleElement = FragmentHelper.element(noStyleMath);
- var noStyleMathBox = noStyleMath.getBoundingClientRect();
+ var noStyleParent = noStyleDiv.firstElementChild.firstElementChild;
+ var noStyleElement = FragmentHelper.element(noStyleParent);
+ var noStyleParentBox = noStyleParent.getBoundingClientRect();
var noStyleElementBox = noStyleElement.getBoundingClientRect();
var preferredWidthDelta =
@@ -98,8 +99,8 @@ function compareSizeWithAndWithoutStyle(tag, style) {
return {
preferred_width_delta: preferredWidthDelta,
- width_delta: styleMathBox.width - noStyleMathBox.width,
- height_delta: styleMathBox.height - noStyleMathBox.height,
+ width_delta: styleParentBox.width - noStyleParentBox.width,
+ height_delta: styleParentBox.height - noStyleParentBox.height,
element_width_delta: styleElementBox.width - noStyleElementBox.width,
element_height_delta: styleElementBox.height - noStyleElementBox.height
};
diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/report.py b/tests/wpt/web-platform-tests/network-error-logging/support/report.py
index 671b3a28921..65433e7840b 100644
--- a/tests/wpt/web-platform-tests/network-error-logging/support/report.py
+++ b/tests/wpt/web-platform-tests/network-error-logging/support/report.py
@@ -2,6 +2,8 @@ import time
import json
import re
+from wptserve.utils import isomorphic_decode
+
def retrieve_from_stash(request, key, timeout, min_count, default_value):
t0 = time.time()
while time.time() - t0 < timeout:
@@ -44,7 +46,7 @@ def main(request, response):
new_reports = json.loads(request.body)
for report in new_reports:
report[u"metadata"] = {
- b"content_type": request.headers[b"Content-Type"],
+ u"content_type": isomorphic_decode(request.headers[b"Content-Type"]),
}
with request.server.stash.lock:
reports = request.server.stash.take(key=key)
diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_iframe-touch-action-none_touch.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_iframe-touch-action-none_touch.html
new file mode 100644
index 00000000000..1c9651d8c16
--- /dev/null
+++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_iframe-touch-action-none_touch.html
@@ -0,0 +1,63 @@
+<html>
+ <head>
+ <title>iframe touch-action:none attribute</title>
+ <meta name="viewport" content="width=device-width">
+ <link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="pointerevent_support.js"></script>
+ <script src="/resources/testdriver.js"></script>
+ <script src="/resources/testdriver-actions.js"></script>
+ <script src="/resources/testdriver-vendor.js"></script>
+ </head>
+ <body onload="run()">
+ <h1>iframe touch-action:none attribute</h1>
+ <h2 id="pointerTypeDescription"></h2>
+ <h4>Test Description: Drag your finger in the green rectangle below then tap the "Done" button.</h4>
+ <br>
+ <iframe id="target"
+ style="touch-action:none;"
+ src="resources/iframe-touch-action-none-subframe.html">
+ </iframe>
+ <input type="button" id="btnDone" value="Done">
+ </body>
+ <script>
+ var event_log = [];
+
+ function resetTestState() {
+ event_log = [];
+ }
+
+ function run() {
+ var test_pointerEvent = setup_pointerevent_test("iframe received pointercancel",
+ ["touch"]);
+ var actions_promise;
+ var target = document.getElementById("target");
+
+ on_event(document.getElementById("btnDone"), "click", () => {
+ test_pointerEvent.step(() => {
+ assert_equals(event_log.join(", "), "pointercancel",
+ "exactly one pointercancel received");
+ });
+ actions_promise.then(() => test_pointerEvent.done());
+ });
+
+ on_event(window, "message", e => {
+ var msg = JSON.parse(event.data);
+ if (msg.type == "event")
+ event_log.push(msg.eventType);
+ });
+
+ actions_promise = new test_driver.Actions()
+ .addPointer("pointer1", "touch")
+ .pointerMove(0, 0, {origin: target})
+ .pointerDown()
+ .pointerMove(25, 25, {origin: target})
+ .pointerUp()
+ .pointerMove(0, 0, {origin: btnDone})
+ .pointerDown()
+ .pointerUp()
+ .send();
+ }
+ </script>
+</html>
diff --git a/tests/wpt/web-platform-tests/pointerevents/resources/iframe-touch-action-none-subframe.html b/tests/wpt/web-platform-tests/pointerevents/resources/iframe-touch-action-none-subframe.html
new file mode 100644
index 00000000000..bcfb5e06588
--- /dev/null
+++ b/tests/wpt/web-platform-tests/pointerevents/resources/iframe-touch-action-none-subframe.html
@@ -0,0 +1,26 @@
+<html>
+ <style>
+ body {
+ width: 200px;
+ height: 150px;
+ padding: 0px;
+ margin: 0px;
+ background-color: lightgreen
+ }
+ </style>
+ <body></body>
+ <script>
+ function handler(e) {
+ window.top.postMessage(JSON.stringify({
+ "type": "event",
+ "eventType": e.type
+ }), "*");
+ }
+
+ ["pointerup", "pointercancel"].forEach(eventType => {
+ document.body.addEventListener(
+ eventType,
+ handler);
+ });
+ </script>
+</html>
diff --git a/tests/wpt/web-platform-tests/resources/test-only-api.js b/tests/wpt/web-platform-tests/resources/test-only-api.js
index 3fdf1cea6eb..ef66e0e733f 100644
--- a/tests/wpt/web-platform-tests/resources/test-only-api.js
+++ b/tests/wpt/web-platform-tests/resources/test-only-api.js
@@ -47,11 +47,14 @@ function loadScript(path) {
* Only call this function if isChromiumBased === true.
*
* @param {Array.<string>} resources - A list of scripts to load: Mojo JS
- * bindings should be of the form '/gen/../*.mojom.js', the ordering of which
- * does not matter. Do not include mojo_bindings.js in this list.
+ * bindings should be of the form '/gen/../*.mojom.js' or
+ * '/gen/../*.mojom-lite.js' (requires `lite` to be true); the order does not
+ * matter. Do not include 'mojo_bindings.js' or 'mojo_bindings_lite.js'.
+ * @param {boolean=} lite - Whether the lite bindings (*.mojom-lite.js) are used
+ * (default is false).
* @returns {Promise}
*/
-async function loadMojoResources(resources) {
+async function loadMojoResources(resources, lite = false) {
if (!isChromiumBased) {
throw new Error('MojoJS not enabled; start Chrome with --enable-blink-features=MojoJS,MojoJSTest');
}
@@ -70,13 +73,26 @@ async function loadMojoResources(resources) {
if (path.endsWith('/mojo_bindings.js')) {
throw new Error('Do not load mojo_bindings.js explicitly.');
}
- if (! /^\/gen\/.*\.mojom\.js$/.test(path)) {
- throw new Error(`Unrecognized resource path: ${path}`);
+ if (path.endsWith('/mojo_bindings_lite.js')) {
+ throw new Error('Do not load mojo_bindings_lite.js explicitly.');
+ }
+ if (lite) {
+ if (! /^\/gen\/.*\.mojom-lite\.js$/.test(path)) {
+ throw new Error(`Unrecognized resource path: ${path}`);
+ }
+ } else {
+ if (! /^\/gen\/.*\.mojom\.js$/.test(path)) {
+ throw new Error(`Unrecognized resource path: ${path}`);
+ }
}
}
- await loadScript(genPrefix + '/gen/layout_test_data/mojo/public/js/mojo_bindings.js');
- mojo.config.autoLoadMojomDeps = false;
+ if (lite) {
+ await loadScript(genPrefix + '/gen/layout_test_data/mojo/public/js/mojo_bindings_lite.js');
+ } else {
+ await loadScript(genPrefix + '/gen/layout_test_data/mojo/public/js/mojo_bindings.js');
+ mojo.config.autoLoadMojomDeps = false;
+ }
for (const path of resources) {
await loadScript(genPrefix + path);
diff --git a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html
index c780bbe21b7..5c115a467cb 100644
--- a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html
+++ b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html
@@ -8,52 +8,81 @@
<body>
<script>
+ const default_option ={dropElements: null};
test(t => {
let s = new Sanitizer();
assert_true(s instanceof Sanitizer);
- assert_object_equals(s.creationOptions, {});
+ assert_object_equals(s.creationOptions, default_option);
}, "SanitizerAPI creator without config.");
test(t => {
let s = new Sanitizer({});
assert_true(s instanceof Sanitizer);
- assert_object_equals(s.creationOptions, {});
+ assert_object_equals(s.creationOptions, default_option);
}, "SanitizerAPI creator with empty config.");
test(t => {
let s = new Sanitizer(null);
assert_true(s instanceof Sanitizer);
- assert_object_equals(s.creationOptions, {});
+ assert_object_equals(s.creationOptions, default_option);
}, "SanitizerAPI creator with null as config.");
test(t => {
let s = new Sanitizer(undefined);
assert_true(s instanceof Sanitizer);
- assert_object_equals(s.creationOptions, {});
+ assert_object_equals(s.creationOptions, default_option);
}, "SanitizerAPI creator with undefined as config.");
test(t => {
let s = new Sanitizer({testConfig: [1,2,3], attr: ["test", "i", "am"]});
assert_true(s instanceof Sanitizer);
- assert_object_equals(s.creationOptions, {});
+ assert_object_equals(s.creationOptions, default_option);
}, "SanitizerAPI creator with config ignore unknown values.");
test(t => {
- let options = {};
+ let options = {dropElements: ["div"]};
let s = new Sanitizer(options);
assert_true(s instanceof Sanitizer);
- assert_object_equals(s.creationOptions, {});
+ assert_object_equals(s.creationOptions, {dropElements: ["DIV"]});
- options.testConfig = [1,2,3];
- assert_object_equals(s.creationOptions, {});
+ options.dropElements.push("test");
+ assert_object_equals(s.creationOptions, {dropElements: ["DIV"]});
- s.creationOptions = {testConfig: [1,2,3]};
- assert_object_equals(s.creationOptions, {});
+ s.creationOptions = {dropElements: ["test", "t"]};
+ assert_object_equals(s.creationOptions, {dropElements: ["DIV"]});
- s.creationOptions['testConfig'] = [1,2,3];
- assert_object_equals(s.creationOptions, {});
+ s.creationOptions['dropElements'] = [1,2,3];
+ assert_object_equals(s.creationOptions, {dropElements: ["DIV"]});
}, "SanitizerAPI config is not editable.");
+ test(t => {
+ let s = new Sanitizer({dropElements: []});
+ assert_true(s instanceof Sanitizer);
+ assert_equals(s.sanitizeToString("<div>balabala<i>test</i></div>"), "<div>balabala<i>test</i></div>");
+ }, "SanitizerAPI creator with config {dropElements: []}.")
+
+ test(t => {
+ let s = new Sanitizer({dropElements: null});
+ assert_true(s instanceof Sanitizer);
+ assert_true(s.creationOptions instanceof Object);
+ assert_object_equals(s.creationOptions, default_option);
+ }, "SanitizerAPI creator with config {dropElements: null}.")
+
+ test(t => {
+ let s = new Sanitizer({dropElements: undefined});
+ assert_true(s instanceof Sanitizer);
+ assert_true(s.creationOptions instanceof Object);
+ assert_object_equals(s.creationOptions, default_option);
+ }, "SanitizerAPI creator with config {dropElements: undefined}.");
+
+ test(t => {
+ assert_throws_js(TypeError, _ => {let s = new Sanitizer({dropElements: 123})});
+ }, "SanitizerAPI creator with config {dropElements: 123}.");
+
+ test(t => {
+ assert_throws_js(TypeError, _ => {let s = new Sanitizer({dropElements: "div"})});
+ }, "SanitizerAPI creator with config {dropElements: div}.");
+
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html
index 219eff41891..44961e02f4e 100644
--- a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html
+++ b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html
@@ -13,9 +13,12 @@
d.appendChild(fragment);
return d.innerHTML;
}
- const s = new Sanitizer({});
testcases.forEach(c => test(t => {
+ let s = new Sanitizer(c.config_input);
+ assert_true(s.creationOptions instanceof Object);
+ assert_object_equals(s.creationOptions, c.config_value);
+
fragment = s.sanitize(c.value);
assert_true(fragment instanceof DocumentFragment);
assert_equals(getString(fragment), c.result);
diff --git a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html
index 98bb4a46018..7efbc3ca7bd 100644
--- a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html
+++ b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html
@@ -8,9 +8,10 @@
<body>
<script>
- const s = new Sanitizer({});
-
testcases.forEach(c => test(t => {
+ let s = new Sanitizer(c.config_input);
+ assert_true(s.creationOptions instanceof Object);
+ assert_object_equals(s.creationOptions, c.config_value);
assert_equals(s.sanitizeToString(c.value), c.result);
}, "SanitizerAPI sanitizeToString function for " + c.message));
</script>
diff --git a/tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js b/tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js
index d1af1c9b5a9..a3cc6d38c8c 100644
--- a/tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js
+++ b/tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js
@@ -1,17 +1,24 @@
const testcases = [
- {value: "test", result: "test", message: "string"},
- {value: "<b>bla</b>", result: "<b>bla</b>", message: "html fragment"},
- {value: "<a<embla", result: "", message: "broken html"},
- {value: {}, result: "[object Object]", message: "empty object"},
- {value: 1, result: "1", message: "number"},
- {value: 000, result: "0", message: "zeros"},
- {value: 1+2, result: "3", message: "arithmetic"},
- {value: "", result: "", message: "empty string"},
- {value: undefined, result: "undefined", message: "undefined"},
- {value: null, result: "null", message: "null"},
- {value: "<html><head></head><body>test</body></html>", result: "test", message: "document"},
- {value: "<div>test", result: "<div>test</div>", message: "html without close tag"},
- {value: "<script>alert('i am a test')<\/script>", result: "", message: "scripts"},
- {value: "<p onclick='a= 123'>Click.</p>", result: "<p>Click.</p>", message: "onclick scripts"}
-
+ {config_input: {}, config_value: {dropElements: null}, value: "test", result: "test", message: "string"},
+ {config_input: {}, config_value: {dropElements: null}, value: "<b>bla</b>", result: "<b>bla</b>", message: "html fragment"},
+ {config_input: {}, config_value: {dropElements: null}, value: "<a<embla", result: "", message: "broken html"},
+ {config_input: {}, config_value: {dropElements: null}, value: {}, result: "[object Object]", message: "empty object"},
+ {config_input: {}, config_value: {dropElements: null}, value: 1, result: "1", message: "number"},
+ {config_input: {}, config_value: {dropElements: null}, value: 000, result: "0", message: "zeros"},
+ {config_input: {}, config_value: {dropElements: null}, value: 1+2, result: "3", message: "arithmetic"},
+ {config_input: {}, config_value: {dropElements: null}, value: "", result: "", message: "empty string"},
+ {config_input: {}, config_value: {dropElements: null}, value: undefined, result: "undefined", message: "undefined"},
+ {config_input: {}, config_value: {dropElements: null}, value: null, result: "null", message: "null"},
+ {config_input: {}, config_value: {dropElements: null}, value: "<html><head></head><body>test</body></html>", result: "test", message: "document"},
+ {config_input: {}, config_value: {dropElements: null}, value: "<div>test", result: "<div>test</div>", message: "html without close tag"},
+ {config_input: {}, config_value: {dropElements: null}, value: "<script>alert('i am a test')<\/script>", result: "", message: "scripts"},
+ {config_input: {}, config_value: {dropElements: null}, value: "<p onclick='a= 123'>Click.</p>", result: "<p>Click.</p>", message: "onclick scripts"},
+ {config_input: {test: 123}, config_value: {dropElements: null}, value: "test", result: "test", message: "invalid config_input"},
+ {config_input: {dropElements: []}, config_value: {dropElements:[]}, value: "test", result: "test", message: "empty dropElements list"},
+ {config_input: {dropElements: ["div"]}, config_value: {dropElements:["DIV"]}, value: "<div>test</div><c>bla", result: "<c>bla</c>", message: "test html without close tag with dropElements list ['div']"},
+ {config_input: {dropElements: ["script"]}, config_value: {dropElements:["SCRIPT"]}, value: "<script>alert('i am a test')<\/script>", result: "", message: "test script with [\"script\"] as dropElements list"},
+ {config_input: {dropElements: ["test", "i"]}, config_value: {dropElements:["TEST","I"]}, value: "<div>balabala<i>test</i></div><test>t</test>", result: "<div>balabala</div>", message: "dropElements list [\"test\", \"i\"]}"},
+ {config_input: {dropElements: ["I", "AM"]}, config_value: {dropElements:["I", "AM"]}, value: "<div>balabala<am>test</am></div>", result: "<div>balabala</div>", message: "dropElements list [\"I\", \"AM\"]}"},
+ {config_input: {dropElements: ["am", "p"]}, config_value: {dropElements:["AM","P"]}, value: "<div>balabala<i>i</i><p>t</p><test>a</test></div>", result: "<div>balabala<i>i</i><test>a</test></div>", message: "dropElements list [\"am\", \"p\"]}"},
+ {config_input: {dropElements: [123, [], "test", "i"]}, config_value: {dropElements:["123","","TEST","I"]}, value: "<div>balabala<i>test</i></div><test>t</test>", result: "<div>balabala</div>", message: "dropElements list with invalid values}"}
];
diff --git a/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html b/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html
index 88c0cdb654c..524580cf370 100644
--- a/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html
+++ b/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html
@@ -5,17 +5,19 @@
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script>
-async_test(async t => {
+promise_test(async t => {
await test_driver.set_permission({name: 'screen-wake-lock'}, 'granted', false);
const lock = await navigator.wakeLock.request("screen");
- lock.onrelease = t.step_func_done((ev) => {
+ return new Promise(resolve => {
+ lock.onrelease = resolve;
+ lock.release();
+ }).then(ev => {
assert_class_string(ev, "Event", "release() must fire an Event object");
assert_equals(ev.target, lock, "The event's target must be the lock that was acquired");
assert_true(ev.isTrusted);
assert_false(ev.bubbles);
assert_false(ev.cancelable);
});
- await lock.release();
}, "Test onreleased event's basic properties");
</script>
diff --git a/tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html b/tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html
index 0f01cc41acf..aeaa322a31c 100644
--- a/tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html
+++ b/tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html
@@ -41,4 +41,90 @@ test(() => {
assert_true(constructed);
}, 'ElementInternals.shadowRoot allows access to closed shadow root');
+test(() => {
+ let constructed = false;
+ const element = document.createElement('x-1');
+ assert_throws_dom('NotSupportedError', () => element.attachInternals(),'attachInternals cannot be called before definition exists');
+ customElements.define('x-1', class extends HTMLElement {
+ constructor() {
+ super();
+ assert_true(!!this.attachInternals());
+ constructed = true;
+ }
+ });
+ assert_false(constructed);
+ assert_throws_dom('NotSupportedError', () => element.attachInternals(),'attachInternals cannot be called before constructor');
+ customElements.upgrade(element);
+ assert_true(constructed);
+ assert_throws_dom('NotSupportedError', () => element.attachInternals(),'attachInternals already called');
+}, 'ElementInternals cannot be called before constructor, upgrade case');
+
+test(() => {
+ let constructed = false;
+ const element = document.createElement('x-2');
+ customElements.define('x-2', class extends HTMLElement {
+ constructor() {
+ super();
+ // Don't attachInternals() here
+ constructed = true;
+ }
+ });
+ assert_throws_dom('NotSupportedError', () => element.attachInternals(),'attachInternals cannot be called before constructor');
+ assert_false(constructed);
+ customElements.upgrade(element);
+ assert_true(constructed);
+ assert_true(!!element.attachInternals(),'After the constructor, ok to call from outside');
+}, 'ElementInternals *can* be called after constructor, upgrade case');
+
+test(() => {
+ let constructed = false;
+ customElements.define('x-3', class extends HTMLElement {
+ constructor() {
+ super();
+ assert_true(!!this.attachInternals());
+ constructed = true;
+ }
+ });
+ const element = document.createElement('x-3');
+ assert_true(constructed);
+ assert_throws_dom('NotSupportedError', () => element.attachInternals(), 'attachInternals already called');
+}, 'ElementInternals cannot be called after constructor calls it, create case');
+
+test(() => {
+ let constructed = false;
+ const element = document.createElement('x-5');
+ customElements.define('x-5', class extends HTMLElement {
+ static disabledFeatures = [ 'internals' ];
+ constructor() {
+ super();
+ assert_throws_dom('NotSupportedError', () => this.attachInternals(), 'attachInternals forbidden by disabledFeatures, constructor');
+ constructed = true;
+ }
+ });
+ assert_false(constructed);
+ assert_throws_dom('NotSupportedError', () => element.attachInternals(), 'attachInternals forbidden by disabledFeatures, pre-upgrade');
+ customElements.upgrade(element);
+ assert_true(constructed);
+ assert_throws_dom('NotSupportedError', () => element.attachInternals(), 'attachInternals forbidden by disabledFeatures, post-upgrade');
+}, 'ElementInternals disabled by disabledFeatures');
+
+test(() => {
+ let constructed = false;
+ const element = document.createElement('x-6');
+ const sr = element.attachShadow({mode: 'closed'});
+ assert_true(sr instanceof ShadowRoot);
+ customElements.define('x-6', class extends HTMLElement {
+ constructor() {
+ super();
+ assert_throws_dom('NotSupportedError', () => this.attachShadow({mode:'open'}), 'attachShadow already called');
+ const elementInternals = this.attachInternals();
+ assert_equals(elementInternals.shadowRoot, null, 'ElementInternals.shadowRoot should not be available for pre-attached shadow');
+ constructed = true;
+ }
+ });
+ assert_false(constructed);
+ customElements.upgrade(element);
+ assert_true(constructed,'Failed to construct - test failed');
+ assert_equals(element.shadowRoot, null, 'shadow root is closed');
+}, 'ElementInternals.shadowRoot doesn\'t reveal pre-attached closed shadowRoot');
</script>
diff --git a/tests/wpt/web-platform-tests/tools/certs/cacert.key b/tests/wpt/web-platform-tests/tools/certs/cacert.key
index c36ebcbc910..7b83e8f0e9e 100644
--- a/tests/wpt/web-platform-tests/tools/certs/cacert.key
+++ b/tests/wpt/web-platform-tests/tools/certs/cacert.key
@@ -1,30 +1,30 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
-MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIwt8BG3xFhxYCAggA
-MB0GCWCGSAFlAwQBKgQQSn81QCB6EGEMiE6pZO1i9gSCBND1XL0OV5alXhRx/wna
-TuDqgFVyDjKbFWkm4gV394chFtOBSlODjAJnDyn25YUCYAf4pj44OQ13YpxFoFtR
-lvqA4TKdETHAONdij2CKIfZONO02Z5qURzySYQ2T4GRANS+UtO5KWD2vS0V4xVHL
-p+BLLoxQM2TgO5vG9/SiktTY7QI7wS7prqUPiUkROOATMR24E+tNlzmCXVRVpMp6
-m8PUecEO4sobYE8KdUgXCiWNb23nok5mM38BTWgxs/6H/ARCPvAUutyqo/gsHMNv
-uaOhev/yWTlF207/E/EtaS2pQcS0MT9sR7rK5KRLsoxpYrmPnEiid4nVvXPSmFAH
-cRCivlb9+VhhJZTtpLCUPgIj7ek9ljZZsr9lw10FELHJNYgQD/2/hkkhdZMQTF/d
-I+Yeq89t13PlyrGQUmL5k+XvmiCbWQWfNGw6p4vWznz6iB1P9L5IuWliQRXW4P3U
-gh/3hRc+C1sDCzCqV1Tr4GFQ7gFTsM5a2AroiT9bJGONGmILPYf6X7UQINruvmBt
-gBLeGJWAtdSN+1Fy7qLz/TbfEYCe0pBChVy1mKuSDXQ3mzWQA4UIJMBeIXkTtEPM
-ijL0Q8SLpt6MTrH8bP78IgrzynugVNvX3gFeVscsGQSUNJvIK+pqgYE1YuwrzNWd
-hpXbQCSgJaLajlyldrXCRudYchqCw4j4Y55BPN4mdgqW6P/9rOyyX9T5Lu/06HZH
-ceRQtsZR5+Qy+aLVL/TJ6nAGp1huVj+Gmz0P+DVb75eqnF7dHBJNqwrrKjq3aIIc
-YrXrKUa1OLkJAm1USHoIKTQS3tG/2xseVdRMCmC8HlaxzXxWxng/ho2L3pQ4MI+e
-5FLqoZruNKUzB9IakfEscEHxleqi+r29gz0FIUWIJU4hPpnE3xL/RF6jP3/f99uJ
-oOhKYVPZLRVgPP7bzO8dzvoF2qiqMRB6lWR7IrOAlHASkfzCkapaOGWgoKf9MqBO
-BptdCA5me2Im5Yrn8DggTogr1o2ZRnvWtZ4S8Ynms4G7P1NM0Da92W08JLLH4/iU
-4IimrFl7dPOn3jvKzr5hhGTmmxcVbO/XXnhY5qTqxlaB1fwq424vzQ7XeRMnlPeI
-NQ/oqO/4Kzz0DrezIz36cXtW4hZt+xNzbvy0FQEqBvWJa3+44nP751owIUG+Af4g
-EIj04smQz1AgiX+ojnvX8udSRsSfpylsUo8K4oF1uZuY3QlzoRgrb0cjR826YL5v
-byd1pJrgxz0oRxduhzR/bHa4mtVmrHiCOYoBjvzEbfQMhnunri8W3HjNDLu50Pdp
-u6xRzUuwL56aF7dqfUafez99KT2eFJBqPmSWnFyfVpL5iFW23KKPD9Oe/jxHWPLh
-/zLqvHaZk4TCT6E0KCn9mv/S6JSoOt+lD6gUnerLqhOnFTKmrZkWCzfchu8Y8NVJ
-nUCdOq/zKZVT1h8p0E8qLVYpTqRGQ4lgPkJt0i1qYJy5FXWmTnZQRdOKeWVh5vwK
-q63ueNwEMGpYCKgm+Gm1StmAQc/eLVL2KmES1BTgTBq1olyiYMHKyIkes1paSvHh
-kkirSf+XJxbQBXw6MpofKHQ5K9sdEfh8jofGwHudwdkrsXoIv/WTYANyg2h//6xh
-qPtyTnrApHAKTsnVbbMt/+4tnw==
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIkaenDsgd4ocCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECJAqFIqfz3yoBIIEyJzn9rsqRfFD
+I75CcWTCXZM+f0oTgtBAmx2ZUVn46M9hOq1DGZo1QNcIV53MP+m3QPTwo2AZRsx+
+Q0YobCtHqQRtl3WjLmpWZTA8W/f15A/+N0IQDZy+hxfrYgbhcgT9EhaRMs8NH5Iu
+GaMCmZDNm0RborKLdAtR3EtlFI3WZPejVv5r9HRl6TDHBjpfM+nB3Its11OfUoKO
+QZQyqiAzZpGmwkxPvPVDVk9kKwR6k5ypvANRNS73txQojfDUdLh/Zz2B136Qk8iZ
+f42gI/jbZQD81BT+9t+kfI5BDPYocsGQHSZ/l55NcBPnE3TtfPBWMXJ2T2IrA6LN
+x7C6J5GGwBZ2RYQnim/1tOc6lrx2iGRfBlJa360JfO7jNLyssnChLMeQ1t3KmEN8
+ALxV9jMqN1w58px4qzbj4wVGHIEKb5o1/VhymhwuXBBYY4ztKKv9EKOu+ZMJfPtu
+XILgXUuwnv1jetUXT+SbwVcGj4DoE+LSV7pB65jdmwQePH0icjkFmUXMVW/Pml/J
+KBPuM4Ju4Wxt1+mLXp9maKICK3jJ8Gok2gi5x4axEHx3l8JOAIl+qA5gJ1N24yPl
+1pkJcoEByU1pL32jtDMEn1Isf+pBl9vj5MdKs6EDh+ZrJhovc5puSDfENY1bv/Q6
+IqzLu45TQX6MTqkmGoE8wMJ9MP6otLYEY836+gk5F1cdf9Yw/FiIS3oha8mzj9F3
+BUKZj6ot5/q6Fcr9AQU94hwuJpl7iKAeR3DkDl26lVhbtxtZy0v18bXcqL+iFtMX
+vlc8jAX2Aj8W5OgiAFq069W63Q9pa8HmkAQBoi62yRivJlcXpEoE0hn7en/Hmje1
+58OoiSGHM7c+FyYqBzXJg7j+hU5gn2hKm+PQD+Vyic/TC9mOJozuuOSMd8F94/4q
+2FX9wAyCsyfq6JtJZVjcLu/Xu1h8LfFEyFGDehL6wj1/T3+lkFjc06QY+m7giWmn
+J7ksUZOvZcpV8Z2LGMPZf2h+oOgfQ2df2qKCGz/2e4w5cu3wlZqd3+CxJU9cephZ
+KJl8NRd3LI8SCbVGS21/tRRj65d3jbHgkbN15zbyinWeoggCpKbK/04Pue3aHs77
+NlmPVQyI6Pevl8eJM1YdXrbQCO0zXSg6FdUMm6ACknjRYXgD8rb8HLDj69M5mj5q
+sCayfF0dsh20758w6E6BCtNo1RQyrvIc54SFWBXFwuxfpJmGgbp1jxQSx4ixRZ7i
+zj3JHhlq8ldczaKqiRHhrr3utwVvH5+X9Yw8Bh9wzUrSOFu4TTMPfA7Dl+RjXxg2
+ymX81nv8uSnLc9cnHptug/pIpJh6xBLMcl0rmT7h3hH0u3ahrnu+oAp+M3zNHrsa
+kUxOYe8bn9X2fVqN5rKCQe8OEpczXgtjS5C2DErciIWJhqaUTg3lAfN9xuaz4/KC
+4APc+d7aVMef1tsd3T9JaTdh2KxjgOzE3Af/d+VwOxFMv71+hUXF5zgK/bkg6LPk
+VGiRcShSbM7VbcAaCBMqY/7gz1m134FglMWCVmv9GCDR4AdAlD9KlQ9q0cfGaNJS
+jj86YIu3Z4kzd4pPsjy4bX9k9OOPZ/eO6oSDB2+LqFGn0vHj/zAxfEcWJDm30KhN
+Nkbwd5VFFkXdiQmePxAiGA==
-----END ENCRYPTED PRIVATE KEY-----
diff --git a/tests/wpt/web-platform-tests/tools/certs/cacert.pem b/tests/wpt/web-platform-tests/tools/certs/cacert.pem
index f450f014d9f..a8ce54be557 100644
--- a/tests/wpt/web-platform-tests/tools/certs/cacert.pem
+++ b/tests/wpt/web-platform-tests/tools/certs/cacert.pem
@@ -1,16 +1,16 @@
-----BEGIN CERTIFICATE-----
-MIJAhzCCP2+gAwIBAgIDC+NXMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
-Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA3MzAyMDEyNDhaFw0yMjEwMDgyMDEyNDha
+MIJAhzCCP2+gAwIBAgIDBsfzMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
+Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA5MTIwMDI1MzBaFw0yMTA5MTIwMDI1MzBa
MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAONFL+vCrQenoebExCh0nArZa2+BRz3NmEkS0z7EBtc0
-i6FDQr3lwo+b2zDSqllvrpQHCFReuSagHAW1wPRo0mHicdvhHOCfFc2+bBPXS4db
-8cUNUOc4ClRqOLPwGu+yPteWv/OJPx4nS9COU3HWj+KIAINtKtlxoRe6XbXs2D5J
-3iMfJcI3ZINVWmnhAlMTKqzMLjn8ouIDAsyCf7aZj+JS39B4GN1CzBbomXEeJHad
-36PChji2R+k7LJPK/4gwOsfSpiTfOoF0FK1IxZwQ9cWRhqEEgcFpt4CZSR0HadlG
-MYnrgG4a0v/A1BbBQYDe1M0UPttUOHy2+7XHaEdB/vUCAwEAAaOCPc4wgj3KMAwG
-A1UdEwQFMAMBAf8wHQYDVR0OBBYEFLN13aCb8lr+F42Asfynt8EreSkrMEcGA1Ud
-IwRAMD6AFLN13aCb8lr+F42Asfynt8EreSkroSGkHzAdMRswGQYDVQQDDBJ3ZWIt
-cGxhdGZvcm0tdGVzdHOCAwvjVzALBgNVHQ8EBAMCAgQwgh+bBgNVHR4Egh+SMIIf
+BQADggEPADCCAQoCggEBAJ4nWe+DDK0SJZPqgT0i9Cfx7Wg4v1vN+q4yh/sPNmQ+
+wcNbSu7/UwzhBj4SsP/Wpu4DYpnsn19IW3sAsIpkeLvTNGJThV9uc63UHKuT12wx
+LrXAVQogX7Ieou/WRKUUW+S6AMEP9Daa92UA0WPjlplW+l4HgDNStbXJEFF5zCZC
+ZvVO7hI4CzZxbx/o0komKTEklKcSoigsSMs/n9DUWqd+rd6lVQRIqKbowPzs65C2
+6BxT6YqVwD4QxGnRCv+T4EFxfT2GOmn9e5I3O6oN9pgOinzo8QG9ae9izhFHOnaG
++rgRWl430Djg9wQtv8BBSgxgT2swe6PYr9drE1w7Zi0CAwEAAaOCPc4wgj3KMAwG
+A1UdEwQFMAMBAf8wHQYDVR0OBBYEFBItKeGCg0NYb1P7c2KraTOzvBwVMEcGA1Ud
+IwRAMD6AFBItKeGCg0NYb1P7c2KraTOzvBwVoSGkHzAdMRswGQYDVQQDDBJ3ZWIt
+cGxhdGZvcm0tdGVzdHOCAwbH8zALBgNVHQ8EBAMCAgQwgh+bBgNVHR4Egh+SMIIf
jqCCH4owE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVb3A4LndlYi1wbGF0Zm9ybS50
ZXN0MBeCFW9wNy53ZWItcGxhdGZvcm0udGVzdDAXghVvcDkud2ViLXBsYXRmb3Jt
LnRlc3QwF4IVb3A0LndlYi1wbGF0Zm9ybS50ZXN0MBeCFW5vdC13ZWItcGxhdGZv
@@ -337,11 +337,11 @@ d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3dr
cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty
cWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0
gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4
-YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAHjDIDWw
-i7O1qdt/nBYLqerRN8HqAY6CRWENg50zWKGIPCr2lz2vLDfASy4pUH2ZgPVXWCrN
-Nkw2gHUtMYf1KdY6FOVvRvEWbccsUUR/mPDpjxXkbiALo1WHm/h7NSMg4aqyZi8q
-IJfWwVOgxCOYj5AroHguRG5NvyQ0pcvrVAYUN03DvnV0AT4jxzDi6mo9zLkpgmsM
-GLE4LaHgJfkbhuaX2g0tPSee7pJeXAz/2BaGWyPtb0XGTn5GEPLNDlMKuNCVZewX
-k1Ukk3EAUph+VJXTro3qscP4AJRknLLfoM7LIwPgVrN+4bvHA3w0XIlnreQ25dhF
-1Z567hdoFFgoHdY=
+YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBABJT/1Fz
+fcRod/d4XOiprc0e64D9Ohd91E6grSPdIt/xEt5NEUY+E2F4RSuEYcznruGmnYjG
+SqRaCk6GKRQRNopYH869EqvfvAuLwpL4ZhJZYlEkq2TVY9FHHyDIuSAZ0LbpNvcQ
+68W1hIs9jEJX/WGnaJtOFqrEBY5Ep22+Elm1I+mJmsEbyiKvyw9ovZGGG0HnHODs
+PwkQdfsNEgXnH2OcHZpDqt8xc9VWH2gNnJg2XfxfesUHcGhFY4joki+QiMdQRoHs
+gc8D0R7QauBhc4NLWwat8EIRjKavmZvr+6QN2kGM4w/LYdX/JW121JWP5PbdwS29
+aRxZsfc6+YK+O+k=
-----END CERTIFICATE-----
diff --git a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key
index 0d422053f76..c4f5dc3f2cf 100644
--- a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key
+++ b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key
@@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
-MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQDIC2Z1QbJG1A+y
-gY1nqcGHWaXyNIFx4uwS0h88ayz8kE6c2JEvUqfMYVuC40f1chv63rsruV9Pusn+
-fptnshAyOcbko5R6Hpw5hHFPGztfhmPMn8swt+FO8FpJNCyx0X5bRG6+N/UyQpra
-WsLpuYUNlIUCirZGBLFX6Uwk2gQWzxY9NUSBue8azNm3l6NskbyURReX27SxaKpW
-3Q8Yt3ay0j0QM6DD7KZ4Dvk9zlbLPStFB2lukV3a+M+YpAyG8jYR5Py40ZkJ4RIc
-yWLvel3dERHraxSAU2hTWsScxCli7mMhDbUtoCfkpP4Wh0H2hT5dIc/ATDbO39dJ
-l2vmphtNAgMBAAECggEAHQKKOTbtw5e9LwXam83iYt59UkKLAxkFYzVVkk14mKfU
-vqopY9N4wgrcWn7bUJzbseXa/txDFizgXie+IauQ7bezQDT4szz9KtoqFG6+jXvP
-vTzvGoGQCwKQFU2bra3TxSiHZs52oHNIQaIn4f0lbnK7V0MGa+ECVt1eTXnQXf4o
-M1dkN6NHvizwG9YWZf3EdgVRmSnFl2IoiCkw4kjh76iHD02OgOpMtFEKScirxGbo
-OFZGcQ3nID0rcGlPqA0IeM1LblS8qFH2DlE+I4cDDoLsHIREZaE6BZtttdvGnGo6
-2fNv6U5K/NFVonWXWQF9EIunm509LrIOcfttmOoMAQKBgQD30rrNOfeRxJ1F2Ucf
-1dEY0sI1KHJHkXYITWfsair39CqmObehICUN62vlp7dvcSJQ7H5QNNymbUoSWq5I
-jtUTpNV4GGpGREenx4CrXsJBcosoKX6SGuUrUk/kpvurgGaMphNEMnCjO9oEo6R2
-xPTy1mJN1HhOPrkgOnYyLOS3uQKBgQDOpRonk2i8+WZbmupP+jIiyrq0yudOEDlQ
-vEQxBqLKzCn+fgKFtu+9po5tXmnuweXvDZYPi+fISV1mrlEhdFL+ERt4rVQQexPb
-PdCR8R6Bi/pr7XE5ucAiGXYZPsssNa+5D7YU1wgvBthExHgUEQCdyb7bXlZB4nz8
-xLxjadGiNQKBgCVaV9mTASOxdNsQUs4Tlj6dlbQZcpAi9p1tvVo+7lcNMFh5npnk
-lHEyqMKmstlTPg7gdnF0ZkWXd3CoxlgdXzRkxeAiHfKVXA+H3Hb4A2OF9j+JcZBo
-CV6sO2qFWK2S3uIYLhM7XwrbfJLyb1mPejQX6B0/BxsUDSc0aJhLd/XRAn91Cw7F
-W7j3UEuplxUgN5YuHqWhwUtB6+6KzBfTrO6H7xvaCYVkNzmTMcN6Lv/RPAIAZLGa
-HKQrzWIZxqItULWxMf9dWs9ChnO4ukpoXynoNmCgwNxg1dT9e25o3ig14jKln0CC
-jUkVWcslKCLbOsYemSaBGe3BY4dnpAcQR991AoGAR5F0Q8rd8WleWFDJAOY2t5jR
-oqQ98iH2pQ23fFxwnebnPnyMsX0bG+zXuHtGpEEuFOGc7xqjNTm8MigLcLZ0PAzO
-tscuFcjPG6QwWVjylC2/7+DiAiOHrhsx8jEXMc63Rb9fn3ILH55ZOeZig+A3+ZLk
-pDcbFQ8tKaSChRCy6c0=
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDuGifF9hdWxBC2
+YF7bXIO7xXEREIQw97SL8LEuc7gHfG+0PCya8YNsDssxVdf0xb9Z0XbP4ApKn+Vg
+6aTiTHFYXrQdlyU/o5sVbC3dDInFA3BKBhDOIltHAqIcq1HlFJrq+5wheh+Wv22F
+i2Ceix8cVImA6aJdWLVds/bSLQgLPR0Ez1EP2FHaXZCZvtgFXk2oym6oei1OopZB
+l/AF9sOybD/U2cao6xIX6EIkwgLXrC+Bh7lJLKvX6I8nGKUF3KFwO5RsU50j7d5S
+3U+38QsB8n46QNGgCMAWwe0GoVRnH3SVgR9zGVsS02NLUi3ciGzHnahjYP3Tj8wM
+AR5KH+UbAgMBAAECggEBAIPNKrMklKrNActS8W9QeQOaOgqOL/7DP8gvRoVGPVq3
+gUYuASsMAgnw7n2y3UZ7qH7ZuoE7rba9aEYLT+CNHDkkw2OV5WKi+BgVuBWi+Sh7
+zM7NKMRStGBMjtx74WuDynXFLhpB9faGpOPF0Ygxztjp2uvnaJ9vmYXzNvAFSWye
+KHfj72vFTvLsyrwhEMz0+t6pviiXTZdqTBkZbkbEUN73YQFEsiCNxzoL8SAn4klh
+wFPJdC2AWGXd+FQYUkiYeoocGN01cSlVPCJgv7hwjPCM8ZPXwZWhUxg2RgQHgn8q
+mbPzk8m3gCgrHh5pMmm/V0Zwm3Y4SAEqcmXn9zDtl2ECgYEA+Pw5vKogtT0OC2aK
+SH4MRq9BU+LoC4XkoFilxvZ4n54hEwovau2f4l+fOhL37kWkzgMPHp15tfw3dhb4
+9KUVI7Lu4eNqcjxa0FWnmLxaJMKVo4/fuD3283Fy3feT4p8m8gowUT4fT9PaAQY1
+qwO6W2Y8KyAzb1EMDnjc0KYu5QkCgYEA9M9v3B901kPyi3IYZe/NYM7aUgluWodF
+ge5+6oX7uRsjBeQZgRvXz+8/gswpYkh4anHwqm2uiyy6NrNIRqY5oYpjf1131e/7
+rgkzKNqlscflHdbIw9Gg1PnPKb6qt/nBJtUebE7zOmaRIJq6ItPwB/8jsCm7zWqa
+hbnohqbNBgMCgYEAxjt6dH03AVUU43rGSiUg/P33kyQq/1GgzxEFG72MF/k79/65
+9fYuv3rGOOR1RN1p8yN4XDWge4XNWlW77Huqsvt5OZtoWn83BnvLrcz4MCBEJy8b
+PYMIJJaEj7jXoyx3Q2ldQrGlGFdhUENzYy7apn5lFSjUCqKKaNNNa0mEOJECgYAU
+Y1o7iNsgJRSEDIJ/qtL95vxDrMll/LILOiOTwIjQR7RI/1AocnsstA4kBIDF0KdG
+piqW5v+MU7NGbvPr/lf6Xh4fM1eRl6TsP5PlKSB3h+BK9eJOfJzaX9ui7GAnZkNx
+ynn4JzMWgAhCIOCzmdb5s4PzXeZoGyK3VF5LKIUWpQKBgFem49WIPYZwuJKO+Gjt
+9CdlY5bUyb1z//lxpSxX99YWn4Azo5cNjKI5wo+k/0b7DT1grUqiviv50UxE7XoW
++0DZvgDXvWrr/7c92ARazNGr/gTe2D7TWyIKhyQ9Zrv1dH1NIEjouvXzkLsfB0tY
+eiC3cV07lWvFpXUGIzkzIqpQ
-----END PRIVATE KEY-----
diff --git a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem
index e7b1b018466..438f504b2b6 100644
--- a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem
+++ b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem
@@ -1,43 +1,43 @@
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 779096 (0xbe358)
- Signature Algorithm: sha256WithRSAEncryption
+ Serial Number: 444404 (0x6c7f4)
+ Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=web-platform-tests
Validity
- Not Before: Jul 30 20:12:48 2020 GMT
- Not After : Oct 8 20:12:48 2022 GMT
+ Not Before: Sep 12 00:25:31 2020 GMT
+ Not After : Sep 12 00:25:31 2021 GMT
Subject: CN=web-platform.test
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- Public-Key: (2048 bit)
+ RSA Public-Key: (2048 bit)
Modulus:
- 00:c8:0b:66:75:41:b2:46:d4:0f:b2:81:8d:67:a9:
- c1:87:59:a5:f2:34:81:71:e2:ec:12:d2:1f:3c:6b:
- 2c:fc:90:4e:9c:d8:91:2f:52:a7:cc:61:5b:82:e3:
- 47:f5:72:1b:fa:de:bb:2b:b9:5f:4f:ba:c9:fe:7e:
- 9b:67:b2:10:32:39:c6:e4:a3:94:7a:1e:9c:39:84:
- 71:4f:1b:3b:5f:86:63:cc:9f:cb:30:b7:e1:4e:f0:
- 5a:49:34:2c:b1:d1:7e:5b:44:6e:be:37:f5:32:42:
- 9a:da:5a:c2:e9:b9:85:0d:94:85:02:8a:b6:46:04:
- b1:57:e9:4c:24:da:04:16:cf:16:3d:35:44:81:b9:
- ef:1a:cc:d9:b7:97:a3:6c:91:bc:94:45:17:97:db:
- b4:b1:68:aa:56:dd:0f:18:b7:76:b2:d2:3d:10:33:
- a0:c3:ec:a6:78:0e:f9:3d:ce:56:cb:3d:2b:45:07:
- 69:6e:91:5d:da:f8:cf:98:a4:0c:86:f2:36:11:e4:
- fc:b8:d1:99:09:e1:12:1c:c9:62:ef:7a:5d:dd:11:
- 11:eb:6b:14:80:53:68:53:5a:c4:9c:c4:29:62:ee:
- 63:21:0d:b5:2d:a0:27:e4:a4:fe:16:87:41:f6:85:
- 3e:5d:21:cf:c0:4c:36:ce:df:d7:49:97:6b:e6:a6:
- 1b:4d
+ 00:ee:1a:27:c5:f6:17:56:c4:10:b6:60:5e:db:5c:
+ 83:bb:c5:71:11:10:84:30:f7:b4:8b:f0:b1:2e:73:
+ b8:07:7c:6f:b4:3c:2c:9a:f1:83:6c:0e:cb:31:55:
+ d7:f4:c5:bf:59:d1:76:cf:e0:0a:4a:9f:e5:60:e9:
+ a4:e2:4c:71:58:5e:b4:1d:97:25:3f:a3:9b:15:6c:
+ 2d:dd:0c:89:c5:03:70:4a:06:10:ce:22:5b:47:02:
+ a2:1c:ab:51:e5:14:9a:ea:fb:9c:21:7a:1f:96:bf:
+ 6d:85:8b:60:9e:8b:1f:1c:54:89:80:e9:a2:5d:58:
+ b5:5d:b3:f6:d2:2d:08:0b:3d:1d:04:cf:51:0f:d8:
+ 51:da:5d:90:99:be:d8:05:5e:4d:a8:ca:6e:a8:7a:
+ 2d:4e:a2:96:41:97:f0:05:f6:c3:b2:6c:3f:d4:d9:
+ c6:a8:eb:12:17:e8:42:24:c2:02:d7:ac:2f:81:87:
+ b9:49:2c:ab:d7:e8:8f:27:18:a5:05:dc:a1:70:3b:
+ 94:6c:53:9d:23:ed:de:52:dd:4f:b7:f1:0b:01:f2:
+ 7e:3a:40:d1:a0:08:c0:16:c1:ed:06:a1:54:67:1f:
+ 74:95:81:1f:73:19:5b:12:d3:63:4b:52:2d:dc:88:
+ 6c:c7:9d:a8:63:60:fd:d3:8f:cc:0c:01:1e:4a:1f:
+ e5:1b
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
- D4:78:96:D1:22:40:93:76:CE:17:EB:B6:70:B6:09:05:E0:A3:17:F8
+ 69:30:CF:1C:78:FD:0E:13:3A:FC:91:6A:B2:1D:18:B3:F8:4F:C8:09
X509v3 Authority Key Identifier:
- keyid:B3:75:DD:A0:9B:F2:5A:FE:17:8D:80:B1:FC:A7:B7:C1:2B:79:29:2B
+ keyid:12:2D:29:E1:82:83:43:58:6F:53:FB:73:62:AB:69:33:B3:BC:1C:15
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
@@ -46,33 +46,33 @@ Certificate:
X509v3 Subject Alternative Name:
DNS:web-platform.test, DNS:op8.web-platform.test, DNS:op7.web-platform.test, DNS:op9.web-platform.test, DNS:op4.web-platform.test, DNS:not-web-platform.test, DNS:op6.web-platform.test, DNS:op3.web-platform.test, DNS:op2.web-platform.test, DNS:op1.web-platform.test, DNS:www.web-platform.test, DNS:op5.web-platform.test, DNS:op88.web-platform.test, DNS:op98.web-platform.test, DNS:op85.web-platform.test, DNS:op89.web-platform.test, DNS:op66.web-platform.test, DNS:op72.web-platform.test, DNS:op24.web-platform.test, DNS:op41.web-platform.test, DNS:op79.web-platform.test, DNS:op91.web-platform.test, DNS:op59.web-platform.test, DNS:op39.web-platform.test, DNS:op60.web-platform.test, DNS:op58.web-platform.test, DNS:op28.web-platform.test, DNS:www1.web-platform.test, DNS:op14.web-platform.test, DNS:op69.web-platform.test, DNS:op40.web-platform.test, DNS:op74.web-platform.test, DNS:op31.web-platform.test, DNS:op18.web-platform.test, DNS:op73.web-platform.test, DNS:op77.web-platform.test, DNS:op12.web-platform.test, DNS:op54.web-platform.test, DNS:op63.web-platform.test, DNS:op71.web-platform.test, DNS:op95.web-platform.test, DNS:op16.web-platform.test, DNS:op36.web-platform.test, DNS:op27.web-platform.test, DNS:op29.web-platform.test, DNS:op94.web-platform.test, DNS:op44.web-platform.test, DNS:op33.web-platform.test, DNS:op84.web-platform.test, DNS:op32.web-platform.test, DNS:op61.web-platform.test, DNS:op70.web-platform.test, DNS:www2.web-platform.test, DNS:op43.web-platform.test, DNS:op78.web-platform.test, DNS:op26.web-platform.test, DNS:op76.web-platform.test, DNS:op52.web-platform.test, DNS:op99.web-platform.test, DNS:op86.web-platform.test, DNS:op46.web-platform.test, DNS:op17.web-platform.test, DNS:op90.web-platform.test, DNS:op93.web-platform.test, DNS:op10.web-platform.test, DNS:op55.web-platform.test, DNS:op47.web-platform.test, DNS:op51.web-platform.test, DNS:op45.web-platform.test, DNS:op80.web-platform.test, DNS:op68.web-platform.test, DNS:op49.web-platform.test, DNS:op57.web-platform.test, DNS:op35.web-platform.test, DNS:op67.web-platform.test, DNS:op92.web-platform.test, DNS:op15.web-platform.test, DNS:op13.web-platform.test, DNS:op75.web-platform.test, DNS:op64.web-platform.test, DNS:op97.web-platform.test, DNS:op37.web-platform.test, DNS:op56.web-platform.test, DNS:op62.web-platform.test, DNS:op82.web-platform.test, DNS:op25.web-platform.test, DNS:op11.web-platform.test, DNS:op50.web-platform.test, DNS:op38.web-platform.test, DNS:op83.web-platform.test, DNS:op81.web-platform.test, DNS:op20.web-platform.test, DNS:op21.web-platform.test, DNS:op23.web-platform.test, DNS:op42.web-platform.test, DNS:op22.web-platform.test, DNS:op65.web-platform.test, DNS:op96.web-platform.test, DNS:op87.web-platform.test, DNS:op19.web-platform.test, DNS:op53.web-platform.test, DNS:op30.web-platform.test, DNS:op48.web-platform.test, DNS:op34.web-platform.test, DNS:op6.not-web-platform.test, DNS:op3.not-web-platform.test, DNS:op2.not-web-platform.test, DNS:op5.not-web-platform.test, DNS:www.not-web-platform.test, DNS:www.www.web-platform.test, DNS:op7.not-web-platform.test, DNS:op4.not-web-platform.test, DNS:op8.not-web-platform.test, DNS:op9.not-web-platform.test, DNS:op1.not-web-platform.test, DNS:op36.not-web-platform.test, DNS:op53.not-web-platform.test, DNS:op50.not-web-platform.test, DNS:op24.not-web-platform.test, DNS:op31.not-web-platform.test, DNS:op95.not-web-platform.test, DNS:op83.not-web-platform.test, DNS:www2.not-web-platform.test, DNS:op73.not-web-platform.test, DNS:op19.not-web-platform.test, DNS:op21.not-web-platform.test, DNS:op81.not-web-platform.test, DNS:op70.not-web-platform.test, DNS:op78.not-web-platform.test, DNS:op40.not-web-platform.test, DNS:op25.not-web-platform.test, DNS:op65.not-web-platform.test, DNS:www.www2.web-platform.test, DNS:op80.not-web-platform.test, DNS:op52.not-web-platform.test, DNS:op68.not-web-platform.test, DNS:op45.not-web-platform.test, DNS:op71.not-web-platform.test, DNS:op72.not-web-platform.test, DNS:op90.not-web-platform.test, DNS:op89.not-web-platform.test, DNS:op49.not-web-platform.test, DNS:op77.not-web-platform.test, DNS:op79.not-web-platform.test, DNS:op82.not-web-platform.test, DNS:www.www1.web-platform.test, DNS:op12.not-web-platform.test, DNS:op39.not-web-platform.test, DNS:op44.not-web-platform.test, DNS:www1.not-web-platform.test, DNS:op58.not-web-platform.test, DNS:op14.not-web-platform.test, DNS:op30.not-web-platform.test, DNS:op62.not-web-platform.test, DNS:op61.not-web-platform.test, DNS:op92.not-web-platform.test, DNS:op29.not-web-platform.test, DNS:op98.not-web-platform.test, DNS:op64.not-web-platform.test, DNS:op26.not-web-platform.test, DNS:op22.not-web-platform.test, DNS:op94.not-web-platform.test, DNS:op38.not-web-platform.test, DNS:op33.not-web-platform.test, DNS:op23.not-web-platform.test, DNS:op57.not-web-platform.test, DNS:op54.not-web-platform.test, DNS:op85.not-web-platform.test, DNS:op46.not-web-platform.test, DNS:op97.not-web-platform.test, DNS:op32.not-web-platform.test, DNS:op60.not-web-platform.test, DNS:op96.not-web-platform.test, DNS:op51.not-web-platform.test, DNS:op41.not-web-platform.test, DNS:op35.not-web-platform.test, DNS:op99.not-web-platform.test, DNS:op42.not-web-platform.test, DNS:op67.not-web-platform.test, DNS:op37.not-web-platform.test, DNS:op48.not-web-platform.test, DNS:op55.not-web-platform.test, DNS:op56.not-web-platform.test, DNS:op84.not-web-platform.test, DNS:op34.not-web-platform.test, DNS:op69.not-web-platform.test, DNS:op11.not-web-platform.test, DNS:op93.not-web-platform.test, DNS:www1.www.web-platform.test, DNS:op86.not-web-platform.test, DNS:op13.not-web-platform.test, DNS:op20.not-web-platform.test, DNS:op76.not-web-platform.test, DNS:op27.not-web-platform.test, DNS:op17.not-web-platform.test, DNS:op75.not-web-platform.test, DNS:op15.not-web-platform.test, DNS:op47.not-web-platform.test, DNS:op18.not-web-platform.test, DNS:op63.not-web-platform.test, DNS:op28.not-web-platform.test, DNS:op43.not-web-platform.test, DNS:op66.not-web-platform.test, DNS:www2.www.web-platform.test, DNS:op91.not-web-platform.test, DNS:op74.not-web-platform.test, DNS:op59.not-web-platform.test, DNS:op88.not-web-platform.test, DNS:op87.not-web-platform.test, DNS:op10.not-web-platform.test, DNS:op16.not-web-platform.test, DNS:www1.www2.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www.www.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www1.www.not-web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test
Signature Algorithm: sha256WithRSAEncryption
- 87:1a:f7:82:48:e1:85:0a:cd:c9:eb:26:3a:f0:d2:70:1e:cc:
- 1e:1e:8f:61:ed:41:a5:72:4c:0b:dd:7f:9f:6d:eb:f6:96:6c:
- f5:41:3d:78:6e:69:74:bb:49:d4:d1:8b:e1:5f:c9:1e:43:7f:
- 19:6b:db:fe:37:52:d7:3a:88:a9:29:df:64:63:ae:82:2d:e1:
- 8f:19:10:13:8a:73:c6:8d:ae:ca:99:50:89:49:90:a5:4f:cf:
- ec:13:5b:2f:eb:dc:a0:d2:53:15:1a:d1:93:4c:47:f0:9b:6f:
- 65:1a:51:e2:4b:73:56:de:57:2a:11:ad:5a:68:92:ad:36:be:
- b8:f5:b9:72:28:b8:ec:d7:55:d1:0d:e1:40:27:b9:e4:2b:c0:
- de:a1:e9:38:25:4e:b6:43:dc:1a:0b:38:96:2b:14:5f:88:1a:
- 75:92:fc:bf:76:3a:23:96:37:7f:f4:83:62:8e:fd:5f:29:06:
- 0c:52:2b:e5:23:95:9b:0f:b0:1e:1a:bb:99:b4:3c:1b:83:c9:
- 4d:f5:b7:2c:6b:98:fa:67:48:63:8a:9e:1e:6c:ef:cb:d4:eb:
- 82:a8:49:21:68:a2:d1:34:35:b0:9b:ef:a8:51:22:8b:3a:fd:
- 87:8e:5a:d6:1f:b2:1c:64:c3:10:e2:7d:b6:c9:ce:27:97:16:
- 1a:a6:66:4f
+ 70:a3:c2:d4:02:32:83:2c:57:4e:cf:42:0e:d6:50:c1:40:2f:
+ 75:84:54:26:ed:21:7b:5e:97:94:ed:ff:43:15:33:4c:fe:eb:
+ b8:d9:a2:ac:ca:ad:59:e7:52:cf:74:59:62:df:a6:01:e5:d5:
+ 53:04:6c:97:87:7e:2c:da:44:dd:64:ec:cc:1a:ab:38:99:65:
+ e1:f6:94:59:b7:65:b3:a6:e5:21:7d:96:04:0e:87:d9:13:32:
+ 27:50:11:7a:01:7d:6e:a9:42:b1:78:40:4f:0a:89:18:0b:8d:
+ 7a:a2:73:39:88:8c:49:da:17:91:6b:c7:2f:ee:7e:79:4e:f5:
+ aa:97:1a:28:c6:5d:89:eb:5e:bc:68:ac:e9:dd:c8:6f:89:50:
+ 34:c2:fe:69:70:7a:ce:6b:ef:09:fb:f6:9d:a1:d8:eb:2f:e6:
+ 44:1d:1d:f6:e4:97:e4:0e:3e:a5:cc:8b:5b:5b:8c:7c:8c:57:
+ b9:d3:c4:a2:ac:98:c2:91:8b:b9:7f:5a:a6:fb:e4:fb:5b:0b:
+ 11:c2:e2:4a:62:d0:98:d0:f9:77:c6:eb:72:b5:92:0d:e6:5d:
+ 3c:20:f9:d6:0e:60:2c:45:0f:b9:67:e7:b7:05:9c:a1:a0:e0:
+ 3b:40:52:56:fb:64:12:85:f7:56:9e:2d:8c:12:a0:c1:58:27:
+ 56:0d:af:d8
-----BEGIN CERTIFICATE-----
-MIIgvDCCH6SgAwIBAgIDC+NYMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
-Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA3MzAyMDEyNDhaFw0yMjEwMDgyMDEyNDha
+MIIgvDCCH6SgAwIBAgIDBsf0MA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
+Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA5MTIwMDI1MzFaFw0yMTA5MTIwMDI1MzFa
MBwxGjAYBgNVBAMMEXdlYi1wbGF0Zm9ybS50ZXN0MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAyAtmdUGyRtQPsoGNZ6nBh1ml8jSBceLsEtIfPGss/JBO
-nNiRL1KnzGFbguNH9XIb+t67K7lfT7rJ/n6bZ7IQMjnG5KOUeh6cOYRxTxs7X4Zj
-zJ/LMLfhTvBaSTQssdF+W0Ruvjf1MkKa2lrC6bmFDZSFAoq2RgSxV+lMJNoEFs8W
-PTVEgbnvGszZt5ejbJG8lEUXl9u0sWiqVt0PGLd2stI9EDOgw+ymeA75Pc5Wyz0r
-RQdpbpFd2vjPmKQMhvI2EeT8uNGZCeESHMli73pd3RER62sUgFNoU1rEnMQpYu5j
-IQ21LaAn5KT+FodB9oU+XSHPwEw2zt/XSZdr5qYbTQIDAQABo4IeBDCCHgAwCQYD
-VR0TBAIwADAdBgNVHQ4EFgQU1HiW0SJAk3bOF+u2cLYJBeCjF/gwHwYDVR0jBBgw
-FoAUs3XdoJvyWv4XjYCx/Ke3wSt5KSswCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG
+AAOCAQ8AMIIBCgKCAQEA7honxfYXVsQQtmBe21yDu8VxERCEMPe0i/CxLnO4B3xv
+tDwsmvGDbA7LMVXX9MW/WdF2z+AKSp/lYOmk4kxxWF60HZclP6ObFWwt3QyJxQNw
+SgYQziJbRwKiHKtR5RSa6vucIXoflr9thYtgnosfHFSJgOmiXVi1XbP20i0ICz0d
+BM9RD9hR2l2Qmb7YBV5NqMpuqHotTqKWQZfwBfbDsmw/1NnGqOsSF+hCJMIC16wv
+gYe5SSyr1+iPJxilBdyhcDuUbFOdI+3eUt1Pt/ELAfJ+OkDRoAjAFsHtBqFUZx90
+lYEfcxlbEtNjS1It3Ihsx52oY2D904/MDAEeSh/lGwIDAQABo4IeBDCCHgAwCQYD
+VR0TBAIwADAdBgNVHQ4EFgQUaTDPHHj9DhM6/JFqsh0Ys/hPyAkwHwYDVR0jBBgw
+FoAUEi0p4YKDQ1hvU/tzYqtpM7O8HBUwCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG
CCsGAQUFBwMBMIIdjwYDVR0RBIIdhjCCHYKCEXdlYi1wbGF0Zm9ybS50ZXN0ghVv
cDgud2ViLXBsYXRmb3JtLnRlc3SCFW9wNy53ZWItcGxhdGZvcm0udGVzdIIVb3A5
LndlYi1wbGF0Zm9ybS50ZXN0ghVvcDQud2ViLXBsYXRmb3JtLnRlc3SCFW5vdC13
@@ -231,10 +231,10 @@ NmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRl
c3SCQXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2
MjhhLndlYi1wbGF0Zm9ybS50ZXN0gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54
bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJ
-KoZIhvcNAQELBQADggEBAIca94JI4YUKzcnrJjrw0nAezB4ej2HtQaVyTAvdf59t
-6/aWbPVBPXhuaXS7SdTRi+FfyR5Dfxlr2/43Utc6iKkp32RjroIt4Y8ZEBOKc8aN
-rsqZUIlJkKVPz+wTWy/r3KDSUxUa0ZNMR/Cbb2UaUeJLc1beVyoRrVpokq02vrj1
-uXIouOzXVdEN4UAnueQrwN6h6TglTrZD3BoLOJYrFF+IGnWS/L92OiOWN3/0g2KO
-/V8pBgxSK+UjlZsPsB4au5m0PBuDyU31tyxrmPpnSGOKnh5s78vU64KoSSFootE0
-NbCb76hRIos6/YeOWtYfshxkwxDifbbJzieXFhqmZk8=
+KoZIhvcNAQELBQADggEBAHCjwtQCMoMsV07PQg7WUMFAL3WEVCbtIXtel5Tt/0MV
+M0z+67jZoqzKrVnnUs90WWLfpgHl1VMEbJeHfizaRN1k7MwaqziZZeH2lFm3ZbOm
+5SF9lgQOh9kTMidQEXoBfW6pQrF4QE8KiRgLjXqiczmIjEnaF5Frxy/ufnlO9aqX
+GijGXYnrXrxorOndyG+JUDTC/mlwes5r7wn79p2h2Osv5kQdHfbkl+QOPqXMi1tb
+jHyMV7nTxKKsmMKRi7l/Wqb75PtbCxHC4kpi0JjQ+XfG63K1kg3mXTwg+dYOYCxF
+D7ln57cFnKGg4DtAUlb7ZBKF91aeLYwSoMFYJ1YNr9g=
-----END CERTIFICATE-----
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
index 880e2bd43eb..486070ad86d 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
@@ -69,7 +69,6 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
# browsing context, whereas the CLI flag works for workers, too.
chrome_options["args"] = []
- chrome_options["args"].append("--ignore-certificate-errors")
chrome_options["args"].append("--ignore-certificate-errors-spki-list=%s" %
','.join(chrome_spki_certs.IGNORE_CERTIFICATE_ERRORS_SPKI_LIST))
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py
index e8971e7acde..289453bd080 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py
@@ -2,7 +2,7 @@
# DO NOT EDIT MANUALLY.
# tools/certs/web-platform.test.pem
-WPT_FINGERPRINT = 'VPzsk0tdACJMqhsnPpMDesIkQYZrI2RGR+UlPK4emE4='
+WPT_FINGERPRINT = 'Jjw17d8tPl/0TWUbC9g897DgEswu02sENyt5VUgT0wI='
# signed-exchange/resources/127.0.0.1.sxg.pem
SXG_WPT_FINGERPRINT = '0Rt4mT6SJXojEMHTnKnlJ/hBKMBcI4kteBlhR1eTTdk='
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py
index 0c2fc408138..cef01c4ffc5 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py
@@ -41,20 +41,38 @@ class ChromiumFormatter(base.BaseFormatter):
# Browser log for the current test under execution.
self.test_log = []
- def _append_test_message(self, test, subtest, status, expected, message):
+ def _append_test_message(self, test, subtest, wpt_actual_status, message):
"""
- Appends the message data for a test.
+ Appends the message data for a test or subtest.
:param str test: the name of the test
- :param str subtest: the name of the subtest with the message
- :param str status: the subtest status
- :param str expected: the expected subtest statuses
+ :param str subtest: the name of the subtest with the message. Will be
+ None if this is called for a test.
+ :param str wpt_actual_status: the test status as reported by WPT
:param str message: the string to append to the message for this test
Example:
- [subtest foo] [FAIL expected PASS] message
+ [test_or_subtest_name]
+ expected: FAIL
+ message: some test message eg assert failure
"""
- self.messages[test].append("[%s] [%s expected %s] %s" %
- (subtest, status, expected, message))
+ # NOTE: throughout this function we output a key called "expected" but
+ # fill it in with the actual status. This is by design. The goal of this
+ # output is to look exactly like WPT's expectation metadata so that it
+ # can be easily diff-ed.
+ if subtest:
+ result = " [%s]\n expected: %s\n" % (subtest, wpt_actual_status)
+ if message:
+ result += " message: %s\n" % message
+ self.messages[test].append(result)
+ else:
+ # No subtest, so this is the top-level test. The result must be
+ # prepended to the list of messages, so that the message for the
+ # test comes before any subtest messages.
+ test_name_last_part = test.split("/")[-1]
+ result = "[%s]\n expected: %s\n" % (test_name_last_part, wpt_actual_status)
+ if message:
+ result += " message: %s\n" % message
+ self.messages[test].insert(0, result)
def _append_artifact(self, cur_dict, artifact_name, artifact_value):
"""
@@ -175,15 +193,18 @@ class ChromiumFormatter(base.BaseFormatter):
def test_status(self, data):
test_name = data["test"]
- actual_status = self._map_status_name(data["status"])
+ wpt_actual_status = data["status"]
+ actual_status = self._map_status_name(wpt_actual_status)
expected_statuses = self._get_expected_status_from_data(actual_status, data)
is_unexpected = actual_status not in expected_statuses
if is_unexpected and test_name not in self.tests_with_subtest_fails:
self.tests_with_subtest_fails.add(test_name)
- self._append_test_message(test_name, data.get("subtest", ""),
- actual_status, expected_statuses,
- data.get("message", ""))
+ # We should always get a subtest in the data dict, but it's technically
+ # possible that it's missing. Be resilient here.
+ subtest_name = data.get("subtest", "UNKNOWN SUBTEST")
+ self._append_test_message(test_name, subtest_name,
+ wpt_actual_status, data.get("message", ""))
def test_end(self, data):
test_name = data["test"]
@@ -203,8 +224,7 @@ class ChromiumFormatter(base.BaseFormatter):
if actual_status == "PASS":
actual_status = "FAIL"
- self._append_test_message(test_name, "",
- actual_status, expected_statuses,
+ self._append_test_message(test_name, None, wpt_actual_status,
data.get("message", ""))
self._store_test_result(test_name,
actual_status,
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py
index 59f39c1e71b..8f8e732d473 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py
@@ -158,15 +158,15 @@ def test_subtest_messages(capfd):
t1_artifacts = output_json["tests"]["t1"]["artifacts"]
assert t1_artifacts["log"] == [
- "[t1_a] [FAIL expected PASS] t1_a_message",
- "[t1_b] [PASS expected PASS] t1_b_message",
- "[] [FAIL expected PASS] ",
+ "[t1]\n expected: PASS\n",
+ " [t1_a]\n expected: FAIL\n message: t1_a_message\n",
+ " [t1_b]\n expected: PASS\n message: t1_b_message\n",
]
assert t1_artifacts["wpt_subtest_failure"] == ["true"]
t2_artifacts = output_json["tests"]["t2"]["artifacts"]
assert t2_artifacts["log"] == [
- "[t2_a] [PASS expected PASS] ",
- "[] [TIMEOUT expected PASS] t2_message",
+ "[t2]\n expected: TIMEOUT\n message: t2_message\n",
+ " [t2_a]\n expected: PASS\n",
]
assert "wpt_subtest_failure" not in t2_artifacts.keys()
@@ -195,7 +195,7 @@ def test_subtest_failure(capfd):
# The test status is reported as a pass here because the harness was able to
# run the test to completion.
- logger.test_end("t1", status="PASS", expected="PASS")
+ logger.test_end("t1", status="PASS", expected="PASS", message="top_message")
logger.suite_end()
# check nothing got output to stdout/stderr
@@ -211,10 +211,10 @@ def test_subtest_failure(capfd):
test_obj = output_json["tests"]["t1"]
t1_artifacts = test_obj["artifacts"]
assert t1_artifacts["log"] == [
- "[t1_a] [FAIL expected PASS] t1_a_message",
- "[t1_b] [PASS expected PASS] t1_b_message",
- "[t1_c] [TIMEOUT expected PASS] t1_c_message",
- "[] [FAIL expected PASS] ",
+ "[t1]\n expected: PASS\n message: top_message\n",
+ " [t1_a]\n expected: FAIL\n message: t1_a_message\n",
+ " [t1_b]\n expected: PASS\n message: t1_b_message\n",
+ " [t1_c]\n expected: TIMEOUT\n message: t1_c_message\n",
]
assert t1_artifacts["wpt_subtest_failure"] == ["true"]
# The status of the test in the output is a failure because subtests failed,
@@ -252,7 +252,7 @@ def test_expected_subtest_failure(capfd):
# The test status is reported as a pass here because the harness was able to
# run the test to completion.
- logger.test_end("t1", status="PASS", expected="PASS")
+ logger.test_end("t1", status="OK", expected="OK")
logger.suite_end()
# check nothing got output to stdout/stderr
@@ -267,11 +267,12 @@ def test_expected_subtest_failure(capfd):
test_obj = output_json["tests"]["t1"]
t1_log = test_obj["artifacts"]["log"]
+ print("Lpz t1log=%s" % t1_log)
assert t1_log == [
- "[t1_a] [FAIL expected FAIL] t1_a_message",
- "[t1_b] [PASS expected PASS] t1_b_message",
- "[t1_c] [TIMEOUT expected TIMEOUT] t1_c_message",
- "[] [PASS expected PASS] ",
+ "[t1]\n expected: OK\n",
+ " [t1_a]\n expected: FAIL\n message: t1_a_message\n",
+ " [t1_b]\n expected: PASS\n message: t1_b_message\n",
+ " [t1_c]\n expected: TIMEOUT\n message: t1_c_message\n",
]
# The status of the test in the output is a pass because the subtest
# failures were all expected.
@@ -316,8 +317,8 @@ def test_unexpected_subtest_pass(capfd):
test_obj = output_json["tests"]["t1"]
t1_artifacts = test_obj["artifacts"]
assert t1_artifacts["log"] == [
- "[t1_a] [PASS expected FAIL] t1_a_message",
- "[] [FAIL expected PASS] ",
+ "[t1]\n expected: PASS\n",
+ " [t1_a]\n expected: PASS\n message: t1_a_message\n",
]
assert t1_artifacts["wpt_subtest_failure"] == ["true"]
# Since the subtest status is unexpected, we fail the test. But we report
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
index 28f407c8065..dbfe067ba7f 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
@@ -169,6 +169,10 @@ class Request(object):
Regexp match object from matching the request path to the route
selected for the request.
+ .. attribute:: client_address
+
+ Contains a tuple of the form (host, port) representing the client's address.
+
.. attribute:: protocol_version
HTTP version specified in the request.
@@ -245,6 +249,7 @@ class Request(object):
def __init__(self, request_handler):
self.doc_root = request_handler.server.router.doc_root
self.route_match = None # Set by the router
+ self.client_address = request_handler.client_address
self.protocol_version = request_handler.protocol_version
self.method = request_handler.command
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py
index 56342ed287d..d6718df3f52 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py
@@ -528,6 +528,7 @@ class H2HandlerCopy(object):
self.h2_stream_id = req_frame.stream_id
self.server = handler.server
self.protocol_version = handler.protocol_version
+ self.client_address = handler.client_address
self.raw_requestline = ''
self.rfile = rfile
self.request = handler.request
diff --git a/tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html b/tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html
index 1e0e78a3204..574a25b6816 100644
--- a/tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html
+++ b/tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html
@@ -16,6 +16,18 @@
}, "Subresource loading with WebBundle");
promise_test(async () => {
+ const response = await fetch('http://web-platform.test:8001/root.js');
+ const text = await response.text();
+ assert_equals(text, "export * from './submodule.js';\n");
+ }, "Subresource loading with WebBundle (Fetch API)");
+
+ promise_test(t => {
+ const url =
+ '/common/redirect.py?location=http://web-platform.test:8001/root.js';
+ return promise_rejects_js(t, TypeError, import(url));
+ }, "Subresource loading with WebBundle shouldn't affect redirect");
+
+ promise_test(async () => {
const link = document.createElement("link");
link.rel = "webbundle";
link.href = "../resources/wbn/dynamic1.wbn";
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html
new file mode 100644
index 00000000000..11fc4e4fa0c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<title>Test RTCPeerConnection.prototype.addIceCandidate</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="RTCPeerConnection-helper.js"></script>
+<script>
+ 'use strict';
+
+// This test may be flaky, so it's in its own file.
+// The test belongs in RTCPeerConnection-addIceCandidate.
+
+promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+ const transceiver = pc1.addTransceiver('video');
+
+ exchangeIceCandidates(pc1, pc2);
+ await exchangeOffer(pc1, pc2);
+ const answer = await pc2.createAnswer();
+ // Note that sequence of the following two calls is critical
+ // for test stability.
+ await pc1.setRemoteDescription(answer);
+ await pc2.setLocalDescription(answer);
+ await waitForState(transceiver.sender.transport, 'connected');
+}, 'Candidates are added dynamically; connection should work');
+
+promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+ const transceiver = pc1.addTransceiver('video');
+
+ let candidates1to2 = [];
+ let candidates2to1 = [];
+ pc1.onicecandidate = event => {
+ if (event.candidate) {
+ candidates1to2.push(event.candidate);
+ }
+ }
+ pc2.onicecandidate = event => {
+ if (event.candidate) {
+ candidates2to1.push(event.candidate);
+ }
+ }
+ const pc2GatheredCandidates = new Promise((resolve) => {
+ pc2.addEventListener('icegatheringstatechange', () => {
+ if (pc2.iceGatheringState == 'complete') {
+ resolve();
+ }
+ });
+ });
+ await exchangeOffer(pc1, pc2);
+ let answer = await pc2.createAnswer();
+ await pc1.setRemoteDescription(answer);
+ await pc2.setLocalDescription(answer);
+ await pc2GatheredCandidates;
+ // Add candidates to pc1, ensuring that it goes to "connecting" state before "connected".
+ for (let candidate of candidates2to1) {
+ await pc1.addIceCandidate(candidate);
+ }
+ await waitForState(transceiver.sender.transport, 'connecting');
+ await waitForState(transceiver.sender.transport, 'connected');
+}, 'Candidates are added at PC1; connection should work');
+
+promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+ const transceiver = pc1.addTransceiver('video');
+
+ let candidates1to2 = [];
+ let candidates2to1 = [];
+ pc1.onicecandidate = event => {
+ if (event.candidate) {
+ candidates1to2.push(event.candidate);
+ }
+ }
+ pc2.onicecandidate = event => {
+ if (event.candidate) {
+ candidates2to1.push(event.candidate);
+ }
+ }
+ const pc1GatheredCandidates = new Promise((resolve) => {
+ pc1.addEventListener('icegatheringstatechange', () => {
+ if (pc1.iceGatheringState == 'complete') {
+ resolve();
+ }
+ });
+ });
+ await exchangeOffer(pc1, pc2);
+ let answer = await pc2.createAnswer();
+ await pc1.setRemoteDescription(answer);
+ await pc2.setLocalDescription(answer);
+ await pc1GatheredCandidates;
+ // Add candidates to pc2
+ for (let candidate of candidates1to2) {
+ await pc2.addIceCandidate(candidate);
+ }
+ await waitForState(transceiver.sender.transport, 'connected');
+}, 'Candidates are added at PC2; connection should work');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html
index c68e442a2d5..5fcb6e864a8 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html
@@ -2,6 +2,7 @@
<title>Test RTCPeerConnection.prototype.addIceCandidate</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="RTCPeerConnection-helper.js"></script>
<script>
'use strict';
@@ -224,18 +225,20 @@ a=rtcp-rsize
pc.addIceCandidate({usernameFragment: "no such ufrag"}));
}, 'addIceCandidate({usernameFragment: "no such ufrag"}) should not work');
- promise_test(t => {
+ promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
- return pc.setRemoteDescription(sessionDesc)
- .then(() => pc.addIceCandidate({
+ await pc.setRemoteDescription(sessionDesc)
+ await pc.addIceCandidate({
candidate: candidateStr1,
sdpMid: sdpMid1,
sdpMLineIndex: sdpMLineIndex1,
usernameFragement: usernameFragment1
- }));
+ });
+ assert_candidate_line_after(pc.remoteDescription.sdp,
+ mediaLine1, candidateStr1);
}, 'Add ICE candidate after setting remote description should succeed');
promise_test(t => {
@@ -256,7 +259,6 @@ a=rtcp-rsize
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
-
return pc.setRemoteDescription(sessionDesc)
.then(() => pc.addIceCandidate({
candidate: candidateStr1,
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper-test.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper-test.html
new file mode 100644
index 00000000000..42f6652ac4c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper-test.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCPeerConnection-helper tests</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="RTCPeerConnection-helper.js"></script>
+<script>
+'use strict';
+
+promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ t.add_cleanup(() => pc2.close());
+ const transceiver = pc1.addTransceiver('video');
+
+ exchangeIceCandidates(pc1, pc2);
+ await exchangeOfferAnswer(pc1, pc2);
+ await waitForState(transceiver.sender.transport, 'connected');
+}, 'Setting up a connection using helpers and defaults should work');
+</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html
index a8056d473cd..9bbab30d56e 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html
@@ -248,18 +248,14 @@
const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer);
- assert_false(pc1.getTransceivers()[0].stopped, 'Transceiver is not stopped');
-
await pc2.setRemoteDescription(offer);
pc2.getTransceivers()[0].stop();
const answer = await pc2.createAnswer();
await pc1.setRemoteDescription(answer);
- assert_true(pc1.getTransceivers()[0].stopped, 'Transceiver is stopped');
- assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver');
- assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver');
- }, 'setRemoteDescription should stop the transceiver if its corresponding m section is rejected');
+ assert_equals(pc1.getTransceivers()[0].currentDirection, 'inactive', 'A stopped m-line should give an inactive transceiver');
+ }, 'setRemoteDescription should set transceiver inactive if its corresponding m section is rejected');
/*
TODO
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html
index 412736b1d19..2e1dcbb0d95 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html
@@ -199,7 +199,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
},
{
receiver: {track: {kind: "video", readyState: "live", muted: true}},
@@ -207,7 +206,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
}
]);
};
@@ -232,7 +230,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
},
{
receiver: {track: {kind: "video"}},
@@ -240,7 +237,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
}
]);
};
@@ -265,7 +261,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
},
{
receiver: {track: {kind: "video"}},
@@ -273,7 +268,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
}
]);
};
@@ -293,7 +287,6 @@
direction: "recvonly",
mid: null,
currentDirection: null,
- stopped: false
},
{
receiver: {track: {kind: "video"}},
@@ -301,7 +294,6 @@
direction: "recvonly",
mid: null,
currentDirection: null,
- stopped: false
}
]);
};
@@ -336,7 +328,6 @@
sender: {track: null},
direction: "recvonly",
currentDirection: null,
- stopped: false
}
]);
};
@@ -365,7 +356,6 @@
// rtcweb-jsep says this is recvonly, w3c-webrtc does not...
direction: "recvonly",
currentDirection: null,
- stopped: false
}
]);
};
@@ -435,7 +425,6 @@
sender: {track: null},
direction: "recvonly",
currentDirection: null,
- stopped: false
}
]);
@@ -466,7 +455,6 @@
sender: {track: {kind: "audio"}},
direction: "sendrecv",
currentDirection: null,
- stopped: false
}
]);
@@ -486,7 +474,6 @@
sender: {track: {kind: "audio"}},
direction: "sendrecv",
currentDirection: "sendonly",
- stopped: false,
mid: lastMid
}
]);
@@ -500,7 +487,6 @@
sender: {track: {kind: "audio"}},
direction: "sendrecv",
currentDirection: "sendonly",
- stopped: false,
mid: lastMid
}
]);
@@ -1253,15 +1239,14 @@
assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver');
await onended;
-
+ // The transceiver has [[stopping]] = true, [[stopped]] = false
hasPropsAndUniqueMids(pc1.getTransceivers(),
[
{
sender: {track: {kind: "audio"}},
receiver: {track: {kind: "audio", readyState: "ended"}},
- stopped: true,
- currentDirection: null,
- direction: "sendrecv"
+ currentDirection: "sendrecv",
+ direction: "stopped"
}
]);
@@ -1297,15 +1282,16 @@
await onended;
+ // pc2's transceiver was stopped remotely, so has
+ // [[stopping]] = true, [[stopped]] = true.
hasProps(pc2.getTransceivers(),
[
{
sender: {track: {kind: "audio"}},
receiver: {track: {kind: "audio", readyState: "ended"}},
- stopped: true,
mid: null,
- currentDirection: null,
- direction: "sendrecv"
+ currentDirection: "stopped",
+ direction: "stopped"
}
]);
@@ -1335,13 +1321,14 @@
let offer = await pc1.createOffer();
- pc1.getTransceivers()[0].stop();
-
+ const transceiverThatWasStopped = pc1.getTransceivers()[0];
+ transceiverThatWasStopped.stop();
await pc2.setRemoteDescription(offer)
trickle(t, pc1, pc2);
await pc1.setLocalDescription(offer);
let answer = await pc2.createAnswer();
+ const negotiationNeededAwaiter = negotiationNeeded(pc1);
const trackEvents = await setRemoteDescriptionReturnTrackEvents(pc1, answer);
// Spec language doesn't say anything about checking whether the transceiver
// is stopped here.
@@ -1353,16 +1340,20 @@
}
]);
+ assert_equals(transceiverThatWasStopped, pc1.getTransceivers()[0]);
+ // The transceiver should still be [[stopping]]=true, [[stopped]]=false.
hasPropsAndUniqueMids(pc1.getTransceivers(),
[
{
- stopped: true,
+ currentDirection: "sendrecv",
+ direction: "stopped"
}
]);
- await negotiationNeeded(pc1);
+ await negotiationNeededAwaiter;
trickle(t, pc2, pc1);
+
await pc2.setLocalDescription(answer);
await iceConnected(pc1);
@@ -1374,22 +1365,8 @@
answer = await pc2.createAnswer();
await pc2.setLocalDescription(answer);
await pc1.setRemoteDescription(answer);
-
- hasProps(pc1.getTransceivers(),
- [
- {
- stopped: true,
- mid: null
- }
- ]);
-
- hasProps(pc2.getTransceivers(),
- [
- {
- stopped: true,
- mid: null
- }
- ]);
+ assert_equals(pc1.getTransceivers().length, 0);
+ assert_equals(pc2.getTransceivers().length, 0);
};
const checkStopAfterSetLocalOffer = async t => {
@@ -1413,6 +1390,7 @@
pc1.getTransceivers()[0].stop();
let answer = await pc2.createAnswer();
+ const negotiationNeededAwaiter = negotiationNeeded(pc1);
const trackEvents = await setRemoteDescriptionReturnTrackEvents(pc1, answer);
// Spec language doesn't say anything about checking whether the transceiver
// is stopped here.
@@ -1427,10 +1405,11 @@
hasPropsAndUniqueMids(pc1.getTransceivers(),
[
{
- stopped: true,
+ direction: "stopped",
+ currentDirection: "sendrecv"
}
]);
- await negotiationNeeded(pc1);
+ await negotiationNeededAwaiter;
trickle(t, pc2, pc1);
await pc2.setLocalDescription(answer);
@@ -1445,21 +1424,8 @@
await pc2.setLocalDescription(answer);
await pc1.setRemoteDescription(answer);
- hasProps(pc1.getTransceivers(),
- [
- {
- stopped: true,
- mid: null
- }
- ]);
-
- hasProps(pc2.getTransceivers(),
- [
- {
- stopped: true,
- mid: null
- }
- ]);
+ assert_equals(pc1.getTransceivers().length, 0);
+ assert_equals(pc2.getTransceivers().length, 0);
};
const checkStopAfterSetRemoteOffer = async t => {
@@ -1479,22 +1445,35 @@
await pc2.setRemoteDescription(offer)
await pc1.setLocalDescription(offer);
- // Stop on _answerer_side now. Should take effect in answer.
+ // Stop on _answerer_ side now. Should not stop transceiver in answer,
+ // but cause firing of negotiationNeeded at pc2, and disabling
+ // of the transceiver with direction = inactive in answer.
pc2.getTransceivers()[0].stop();
+ assert_equals(pc2.getTransceivers()[0].direction, 'stopped');
const answer = await pc2.createAnswer();
const trackEvents = await setRemoteDescriptionReturnTrackEvents(pc1, answer);
hasProps(trackEvents, []);
- hasProps(pc1.getTransceivers(),
+ hasProps(pc2.getTransceivers(),
[
{
- stopped: true,
- mid: null
+ direction: "stopped",
+ currentDirection: null,
}
]);
+ const negotiationNeededAwaiter = negotiationNeeded(pc2);
await pc2.setLocalDescription(answer);
+ hasProps(pc2.getTransceivers(),
+ [
+ {
+ direction: "stopped",
+ currentDirection: "inactive",
+ }
+ ]);
+
+ await negotiationNeededAwaiter;
};
const checkStopAfterCreateAnswer = async t => {
@@ -1532,16 +1511,25 @@
hasPropsAndUniqueMids(pc2.getTransceivers(),
[
{
- stopped: true,
+ direction: "stopped",
+ currentDirection: null,
}
]);
trickle(t, pc2, pc1);
- // The negotiaionneeded event is fired during processing of
+ // The negotiationneeded event is fired during processing of
// setLocalDescription()
- const negotiationNeededWaiter = negotiationNeeded(pc2);
+ const negotiationNeededAwaiter = negotiationNeeded(pc2);
await pc2.setLocalDescription(answer);
- await negotiationNeededWaiter;
+ hasPropsAndUniqueMids(pc2.getTransceivers(),
+ [
+ {
+ direction: "stopped",
+ currentDirection: "sendrecv",
+ }
+ ]);
+
+ await negotiationNeededAwaiter;
await iceConnected(pc1);
await iceConnected(pc2);
@@ -1552,19 +1540,22 @@
await pc2.setLocalDescription(answer);
await pc1.setRemoteDescription(answer);
+ // Since this offer/answer exchange was initiated from pc1,
+ // pc2 still doesn't get to say that it has a stopped transceiver,
+ // but does get to set it to inactive.
hasProps(pc1.getTransceivers(),
[
{
- stopped: true,
- mid: null
+ direction: "sendrecv",
+ currentDirection: "inactive",
}
]);
hasProps(pc2.getTransceivers(),
[
{
- stopped: true,
- mid: null
+ direction: "stopped",
+ currentDirection: "inactive",
}
]);
};
@@ -1607,7 +1598,8 @@
hasPropsAndUniqueMids(pc2.getTransceivers(),
[
{
- stopped: true,
+ direction: "stopped",
+ currentDirection: "sendrecv",
}
]);
@@ -1615,28 +1607,17 @@
await iceConnected(pc1);
await iceConnected(pc2);
- offer = await pc1.createOffer();
- await pc1.setLocalDescription(offer);
- await pc2.setRemoteDescription(offer);
- answer = await pc2.createAnswer();
- await pc2.setLocalDescription(answer);
- await pc1.setRemoteDescription(answer);
-
- hasProps(pc1.getTransceivers(),
- [
- {
- stopped: true,
- mid: null
- }
- ]);
+ // Initiate an offer/answer exchange from pc2 in order
+ // to negotiate the stopped transceiver.
+ offer = await pc2.createOffer();
+ await pc2.setLocalDescription(offer);
+ await pc1.setRemoteDescription(offer);
+ answer = await pc1.createAnswer();
+ await pc1.setLocalDescription(answer);
+ await pc2.setRemoteDescription(answer);
- hasProps(pc2.getTransceivers(),
- [
- {
- stopped: true,
- mid: null
- }
- ]);
+ assert_equals(pc1.getTransceivers().length, 0);
+ assert_equals(pc2.getTransceivers().length, 0);
};
const checkStopAfterClose = async t => {
@@ -1683,7 +1664,6 @@
sender: {track},
direction: "sendrecv",
currentDirection: null,
- stopped: false
}
]);
@@ -1703,7 +1683,6 @@
direction: "sendonly",
mid: null,
currentDirection: null,
- stopped: false
}
]);
@@ -1713,7 +1692,11 @@
pc.getTransceivers()[0].stop();
await pc.setLocalDescription({type: "rollback"});
- hasProps(pc.getTransceivers(), [{ stopped: true }]);
+ hasProps(pc.getTransceivers(), [
+ {
+ direction: "stopped",
+ }
+ ]);
};
const checkRollbackAndSetRemoteOfferWithDifferentType = async t => {
@@ -1744,7 +1727,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
}
]);
@@ -1756,7 +1738,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
}
]);
@@ -1770,14 +1751,12 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
},
{
receiver: {track: {kind: "video"}},
sender: {track: null},
direction: "recvonly",
currentDirection: "recvonly",
- stopped: false
}
]);
@@ -1788,7 +1767,6 @@
sender: {track: videoTrack},
direction: "sendrecv",
currentDirection: "sendonly",
- stopped: false
}
]);
@@ -1823,7 +1801,6 @@
hasProps(removedTransceiver,
{
- stopped: true,
mid: null,
currentDirection: null
}
@@ -1834,7 +1811,6 @@
hasProps(removedTransceiver,
{
receiver: {track: {readyState: "ended"}},
- stopped: true,
mid: null,
currentDirection: null
}
@@ -1849,7 +1825,6 @@
sender: {track: null},
direction: "recvonly",
currentDirection: null,
- stopped: false
}
]);
@@ -1869,7 +1844,6 @@
direction: "sendrecv",
mid: mid0,
currentDirection: null,
- stopped: false
}
]);
@@ -1889,7 +1863,6 @@
direction: "recvonly",
mid: mid0,
currentDirection: null,
- stopped: false
}
]);
@@ -1903,7 +1876,6 @@
direction: "sendrecv",
mid: mid0,
currentDirection: null,
- stopped: false
}
]);
@@ -1917,7 +1889,6 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: false
}
]);
@@ -1954,7 +1925,6 @@
direction: "sendrecv",
mid: mid0,
currentDirection: "sendrecv",
- stopped: false
}
]);
@@ -1990,21 +1960,20 @@
direction: "sendrecv",
mid: null,
currentDirection: null,
- stopped: true
}
]);
// stop() cannot be rolled back!
+ // Transceiver should have [[stopping]]=true, [[stopped]]=false
await pc2.setRemoteDescription({type: "rollback"});
hasProps(pc2.getTransceivers(),
[
{
receiver: {track: {kind: "audio"}},
sender: {track: {kind: "audio"}},
- direction: "sendrecv",
+ direction: "stopped",
mid: null,
- currentDirection: null,
- stopped: true
+ currentDirection: "sendrecv",
}
]);
};
@@ -2062,7 +2031,6 @@
{
mid: null,
currentDirection: null,
- stopped: true
}
]);
@@ -2071,7 +2039,6 @@
{
mid: null,
currentDirection: null,
- stopped: true
}
]);
@@ -2087,7 +2054,6 @@
hasProps(pc1.getTransceivers(),
[
{
- stopped: true
},
{
sender: {track: track2}
@@ -2103,7 +2069,6 @@
hasProps(pc2.getTransceivers(),
[
{
- stopped: true
},
{
sender: {track}
@@ -2181,7 +2146,6 @@
},
{
mid: null,
- stopped: true
},
{
sender: {track: null},
@@ -2206,7 +2170,6 @@
[
{},
{
- stopped: true
},
{
mid: mid1,
diff --git a/tests/wpt/web-platform-tests/webstorage/set.window.js b/tests/wpt/web-platform-tests/webstorage/set.window.js
index 1c20907939a..8e671d2dedd 100644
--- a/tests/wpt/web-platform-tests/webstorage/set.window.js
+++ b/tests/wpt/web-platform-tests/webstorage/set.window.js
@@ -43,7 +43,7 @@
assert_equals(storage[key], proto);
assert_equals(storage.getItem(key), null);
assert_equals(storage[key] = value, value);
- // Hidden because no [LegacyOverrideBuiltins].
+ // Hidden because no [LegacyOverrideBuiltIns].
assert_equals(storage[key], proto);
assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
assert_equals(storage.getItem(key), value);
@@ -62,7 +62,7 @@
storage.setItem(key, existing);
- // Hidden because no [LegacyOverrideBuiltins].
+ // Hidden because no [LegacyOverrideBuiltIns].
assert_equals(storage[key], proto);
assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
assert_equals(storage.getItem(key), existing);
@@ -93,7 +93,7 @@
assert_equals(storage[key], proto);
assert_equals(storage.getItem(key), null);
assert_equals(storage[key] = value, value);
- // Property is hidden because no [LegacyOverrideBuiltins].
+ // Property is hidden because no [LegacyOverrideBuiltIns].
assert_equals(storage[key], proto);
assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
assert_equals(storage.getItem(key), value);