diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index d9ddaeefa1f..1ece24f4d06 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -13795,12 +13795,6 @@ {} ] ], - "pointerevents/pointerevent_pointermove-manual.html": [ - [ - "/pointerevents/pointerevent_pointermove-manual.html", - {} - ] - ], "pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html": [ [ "/pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html", @@ -104077,6 +104071,18 @@ {} ] ], + "css/css-backgrounds/background-size-one-value-1x1-image.html": [ + [ + "/css/css-backgrounds/background-size-one-value-1x1-image.html", + [ + [ + "/css/css-backgrounds/reference/background-size-one-value-1x1-image-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-backgrounds/background-size-with-negative-value.html": [ [ "/css/css-backgrounds/background-size-with-negative-value.html", @@ -113749,66 +113755,6 @@ {} ] ], - "css/css-filter/blur-clip-stacking-context-001.html": [ - [ - "/css/css-filter/blur-clip-stacking-context-001.html", - [ - [ - "/css/css-filter/blur-clip-stacking-context-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-filter/blur-clip-stacking-context-002.html": [ - [ - "/css/css-filter/blur-clip-stacking-context-002.html", - [ - [ - "/css/css-filter/blur-clip-stacking-context-ref.html", - "!=" - ] - ], - {} - ] - ], - "css/css-filter/filtered-block-is-container.html": [ - [ - "/css/css-filter/filtered-block-is-container.html", - [ - [ - "/css/css-filter/filtered-block-is-container-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-filter/filtered-html-is-not-container.html": [ - [ - "/css/css-filter/filtered-html-is-not-container.html", - [ - [ - "/css/css-filter/filtered-html-is-not-container-ref.html", - "==" - ] - ], - {} - ] - ], - "css/css-filter/filtered-inline-is-container.html": [ - [ - "/css/css-filter/filtered-inline-is-container.html", - [ - [ - "/css/css-filter/filtered-inline-is-container-ref.html", - "==" - ] - ], - {} - ] - ], "css/css-flexbox/Flexible-order.html": [ [ "/css/css-flexbox/Flexible-order.html", @@ -115405,6 +115351,30 @@ {} ] ], + "css/css-flexbox/flex-wrap-002.html": [ + [ + "/css/css-flexbox/flex-wrap-002.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-flexbox/flex-wrap-003.html": [ + [ + "/css/css-flexbox/flex-wrap-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/flexbox-flex-direction-column-reverse.htm": [ [ "/css/css-flexbox/flexbox-flex-direction-column-reverse.htm", @@ -122445,6 +122415,42 @@ {} ] ], + "css/css-grid/grid-model/grid-container-scrollbar-001.html": [ + [ + "/css/css-grid/grid-model/grid-container-scrollbar-001.html", + [ + [ + "/css/css-grid/grid-model/grid-container-scrollbar-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html": [ + [ + "/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html", + [ + [ + "/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html": [ + [ + "/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html", + [ + [ + "/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/grid-model/grid-display-grid-001.html": [ [ "/css/css-grid/grid-model/grid-display-grid-001.html", @@ -127437,6 +127443,18 @@ {} ] ], + "css/css-multicol/multicol-margin-003.html": [ + [ + "/css/css-multicol/multicol-margin-003.html", + [ + [ + "/css/reference/ref-filled-green-100px-square-only.html", + "==" + ] + ], + {} + ] + ], "css/css-multicol/multicol-margin-child-001.xht": [ [ "/css/css-multicol/multicol-margin-child-001.xht", @@ -127989,6 +128007,174 @@ {} ] ], + "css/css-multicol/multicol-span-all-dynamic-add-001.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-001.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-002.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-002.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-003.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-003.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-004.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-004.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-005.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-005.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-006.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-006.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-007.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-007.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-007-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-008.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-008.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-add-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-001.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-001.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-002.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-002.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-003.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-003.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-004.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-004.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-004-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-005.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-005.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-006.html": [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-006.html", + [ + [ + "/css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-multicol/multicol-span-all-margin-001.xht": [ [ "/css/css-multicol/multicol-span-all-margin-001.xht", @@ -128061,6 +128247,54 @@ {} ] ], + "css/css-multicol/multicol-span-all-restyle-001.html": [ + [ + "/css/css-multicol/multicol-span-all-restyle-001.html", + [ + [ + "/css/css-multicol/multicol-span-all-restyle-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-restyle-002.html": [ + [ + "/css/css-multicol/multicol-span-all-restyle-002.html", + [ + [ + "/css/css-multicol/multicol-span-all-restyle-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-restyle-003.html": [ + [ + "/css/css-multicol/multicol-span-all-restyle-003.html", + [ + [ + "/css/css-multicol/multicol-span-all-restyle-003-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-multicol/multicol-span-all-restyle-004.html": [ + [ + "/css/css-multicol/multicol-span-all-restyle-004.html", + [ + [ + "/css/css-multicol/multicol-span-all-restyle-004-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-multicol/multicol-span-float-001.xht": [ [ "/css/css-multicol/multicol-span-float-001.xht", @@ -140857,6 +141091,30 @@ {} ] ], + "css/css-text/white-space/tab-stop-threshold-001.html": [ + [ + "/css/css-text/white-space/tab-stop-threshold-001.html", + [ + [ + "/css/css-text/white-space/reference/tab-stop-threshold-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/tab-stop-threshold-002.html": [ + [ + "/css/css-text/white-space/tab-stop-threshold-002.html", + [ + [ + "/css/css-text/white-space/reference/tab-stop-threshold-002-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/textarea-break-spaces-001.html": [ [ "/css/css-text/white-space/textarea-break-spaces-001.html", @@ -167493,6 +167751,102 @@ {} ] ], + "css/filter-effects/backdrop-filter-basic-background-color.html": [ + [ + "/css/filter-effects/backdrop-filter-basic-background-color.html", + [ + [ + "/css/filter-effects/backdrop-filter-basic-background-color-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/backdrop-filter-basic-opacity.html": [ + [ + "/css/filter-effects/backdrop-filter-basic-opacity.html", + [ + [ + "/css/filter-effects/backdrop-filter-basic-opacity-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/backdrop-filter-basic.html": [ + [ + "/css/filter-effects/backdrop-filter-basic.html", + [ + [ + "/css/filter-effects/backdrop-filter-basic-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/backdrop-filter-border-radius.html": [ + [ + "/css/filter-effects/backdrop-filter-border-radius.html", + [ + [ + "/css/filter-effects/backdrop-filter-border-radius-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/backdrop-filter-isolation-isolate.html": [ + [ + "/css/filter-effects/backdrop-filter-isolation-isolate.html", + [ + [ + "/css/filter-effects/backdrop-filter-isolation-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/backdrop-filter-isolation.html": [ + [ + "/css/filter-effects/backdrop-filter-isolation.html", + [ + [ + "/css/filter-effects/backdrop-filter-isolation-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/blur-clip-stacking-context-001.html": [ + [ + "/css/filter-effects/blur-clip-stacking-context-001.html", + [ + [ + "/css/filter-effects/blur-clip-stacking-context-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/blur-clip-stacking-context-002.html": [ + [ + "/css/filter-effects/blur-clip-stacking-context-002.html", + [ + [ + "/css/filter-effects/blur-clip-stacking-context-ref.html", + "!=" + ] + ], + {} + ] + ], "css/filter-effects/css-filters-animation-blur.html": [ [ "/css/filter-effects/css-filters-animation-blur.html", @@ -167865,6 +168219,42 @@ {} ] ], + "css/filter-effects/filtered-block-is-container.html": [ + [ + "/css/filter-effects/filtered-block-is-container.html", + [ + [ + "/css/filter-effects/filtered-block-is-container-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/filtered-html-is-not-container.html": [ + [ + "/css/filter-effects/filtered-html-is-not-container.html", + [ + [ + "/css/filter-effects/filtered-html-is-not-container-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/filtered-inline-is-container.html": [ + [ + "/css/filter-effects/filtered-inline-is-container.html", + [ + [ + "/css/filter-effects/filtered-inline-is-container-ref.html", + "==" + ] + ], + {} + ] + ], "css/filter-effects/filters-drop-shadow.html": [ [ "/css/filter-effects/filters-drop-shadow.html", @@ -227126,12 +227516,7 @@ {} ] ], - "cors/resources/access-control-expose-headers-parsing-2.asis": [ - [ - {} - ] - ], - "cors/resources/access-control-expose-headers-parsing.asis": [ + "cors/resources/access-control-expose-headers.json": [ [ {} ] @@ -227161,6 +227546,11 @@ {} ] ], + "cors/resources/expose-headers.py": [ + [ + {} + ] + ], "cors/resources/image-tainting-checker.sub.html": [ [ {} @@ -249886,6 +250276,11 @@ {} ] ], + "css/css-backgrounds/reference/background-size-one-value-1x1-image-ref.html": [ + [ + {} + ] + ], "css/css-backgrounds/reference/background-size-ref.html": [ [ {} @@ -251451,31 +251846,6 @@ {} ] ], - "css/css-filter/META.yml": [ - [ - {} - ] - ], - "css/css-filter/blur-clip-stacking-context-ref.html": [ - [ - {} - ] - ], - "css/css-filter/filtered-block-is-container-ref.html": [ - [ - {} - ] - ], - "css/css-filter/filtered-html-is-not-container-ref.html": [ - [ - {} - ] - ], - "css/css-filter/filtered-inline-is-container-ref.html": [ - [ - {} - ] - ], "css/css-flexbox/META.yml": [ [ {} @@ -261501,6 +261871,21 @@ {} ] ], + "css/css-grid/grid-model/grid-container-scrollbar-001-ref.html": [ + [ + {} + ] + ], + "css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html": [ + [ + {} + ] + ], + "css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html": [ + [ + {} + ] + ], "css/css-grid/grid-model/support/grid.css": [ [ {} @@ -262826,6 +263211,56 @@ {} ] ], + "css/css-multicol/multicol-span-all-dynamic-add-001-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-002-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-003-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-004-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-007-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-add-008-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-002-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-004-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-dynamic-remove-005-ref.html": [ + [ + {} + ] + ], "css/css-multicol/multicol-span-all-margin-001-ref.xht": [ [ {} @@ -262851,6 +263286,26 @@ {} ] ], + "css/css-multicol/multicol-span-all-restyle-001-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-restyle-002-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-restyle-003-ref.html": [ + [ + {} + ] + ], + "css/css-multicol/multicol-span-all-restyle-004-ref.html": [ + [ + {} + ] + ], "css/css-multicol/multicol-span-float-001-ref.xht": [ [ {} @@ -268151,6 +268606,16 @@ {} ] ], + "css/css-text/white-space/reference/tab-stop-threshold-001-ref.html": [ + [ + {} + ] + ], + "css/css-text/white-space/reference/tab-stop-threshold-002-ref.html": [ + [ + {} + ] + ], "css/css-text/white-space/reference/textarea-pre-wrap-001-ref.html": [ [ {} @@ -275036,6 +275501,36 @@ {} ] ], + "css/filter-effects/backdrop-filter-basic-background-color-ref.html": [ + [ + {} + ] + ], + "css/filter-effects/backdrop-filter-basic-opacity-ref.html": [ + [ + {} + ] + ], + "css/filter-effects/backdrop-filter-basic-ref.html": [ + [ + {} + ] + ], + "css/filter-effects/backdrop-filter-border-radius-ref.html": [ + [ + {} + ] + ], + "css/filter-effects/backdrop-filter-isolation-ref.html": [ + [ + {} + ] + ], + "css/filter-effects/blur-clip-stacking-context-ref.html": [ + [ + {} + ] + ], "css/filter-effects/css-filters-animation-blur-ref.html": [ [ {} @@ -275126,11 +275621,6 @@ {} ] ], - "css/filter-effects/filter-external-002-filter.svg": [ - [ - {} - ] - ], "css/filter-effects/filter-grayscale-ref.html": [ [ {} @@ -275166,6 +275656,21 @@ {} ] ], + "css/filter-effects/filtered-block-is-container-ref.html": [ + [ + {} + ] + ], + "css/filter-effects/filtered-html-is-not-container-ref.html": [ + [ + {} + ] + ], + "css/filter-effects/filtered-inline-is-container-ref.html": [ + [ + {} + ] + ], "css/filter-effects/filters-drop-shadow-ref.html": [ [ {} @@ -275291,6 +275796,11 @@ {} ] ], + "css/filter-effects/support/filter-external-002-filter.svg": [ + [ + {} + ] + ], "css/filter-effects/support/import-green.css": [ [ {} @@ -298826,6 +299336,21 @@ {} ] ], + "network-error-logging/support/cached-for-one-minute.png": [ + [ + {} + ] + ], + "network-error-logging/support/cached-for-one-minute.png.sub.headers": [ + [ + {} + ] + ], + "network-error-logging/support/cached-with-validation.py": [ + [ + {} + ] + ], "network-error-logging/support/clear-policy-pass.png": [ [ {} @@ -298861,6 +299386,11 @@ {} ] ], + "network-error-logging/support/redirect.py": [ + [ + {} + ] + ], "network-error-logging/support/report.py": [ [ {} @@ -299336,6 +299866,11 @@ {} ] ], + "preload/resources/cross-origin-module.py": [ + [ + {} + ] + ], "preload/resources/dummy-preloads-subresource.css": [ [ {} @@ -305661,6 +306196,11 @@ {} ] ], + "service-workers/service-worker/resources/classic-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/client-id-worker.js": [ [ {} @@ -306361,6 +306901,11 @@ {} ] ], + "service-workers/service-worker/resources/module-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/multipart-image-iframe.html": [ [ {} @@ -314416,6 +314961,11 @@ {} ] ], + "tools/wpt/create.py": [ + [ + {} + ] + ], "tools/wpt/install.py": [ [ {} @@ -315351,11 +315901,46 @@ {} ] ], + "tools/wptserve/tests/functional/docroot/bar.any.worker.js": [ + [ + {} + ] + ], "tools/wptserve/tests/functional/docroot/document.txt": [ [ {} ] ], + "tools/wptserve/tests/functional/docroot/foo.any.html": [ + [ + {} + ] + ], + "tools/wptserve/tests/functional/docroot/foo.any.serviceworker.html": [ + [ + {} + ] + ], + "tools/wptserve/tests/functional/docroot/foo.any.sharedworker.html": [ + [ + {} + ] + ], + "tools/wptserve/tests/functional/docroot/foo.any.worker.html": [ + [ + {} + ] + ], + "tools/wptserve/tests/functional/docroot/foo.window.html": [ + [ + {} + ] + ], + "tools/wptserve/tests/functional/docroot/foo.worker.html": [ + [ + {} + ] + ], "tools/wptserve/tests/functional/docroot/invalid.py": [ [ {} @@ -315541,6 +316126,11 @@ {} ] ], + "tools/wptserve/tests/test_stash.py": [ + [ + {} + ] + ], "tools/wptserve/wptserve/__init__.py": [ [ {} @@ -317451,6 +318041,11 @@ {} ] ], + "webrtc/RTCQuicStream-helper.js": [ + [ + {} + ] + ], "webrtc/RTCQuicTransport-helper.js": [ [ {} @@ -320746,6 +321341,11 @@ {} ] ], + "worklets/resources/import-insecure-origin-redirected-empty-worklet-script.sub.js": [ + [ + {} + ] + ], "worklets/resources/import-nested-internal-worklet-script.js": [ [ {} @@ -320776,6 +321376,11 @@ {} ] ], + "worklets/resources/import-remote-origin-redirected-empty-worklet-script.sub.js": [ + [ + {} + ] + ], "worklets/resources/import-remote-origin-referrer-checker-worklet-script.sub.js": [ [ {} @@ -334893,6 +335498,16 @@ {} ] ], + "cors/cors-safelisted-request-header.any.js": [ + [ + "/cors/cors-safelisted-request-header.any.html", + {} + ], + [ + "/cors/cors-safelisted-request-header.any.worker.html", + {} + ] + ], "cors/credentials-flag.htm": [ [ "/cors/credentials-flag.htm", @@ -339911,6 +340526,12 @@ {} ] ], + "css/css-scroll-snap/nested-scrollIntoView-snaps.html": [ + [ + "/css/css-scroll-snap/nested-scrollIntoView-snaps.html", + {} + ] + ], "css/css-scroll-snap/overflowing-snap-areas.html": [ [ "/css/css-scroll-snap/overflowing-snap-areas.html", @@ -358461,6 +359082,12 @@ {} ] ], + "encoding/utf-32-from-win1252.html": [ + [ + "/encoding/utf-32-from-win1252.html", + {} + ] + ], "encoding/utf-32.html": [ [ "/encoding/utf-32.html", @@ -363125,6 +363752,12 @@ {} ] ], + "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html": [ + [ + "/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html", + {} + ] + ], "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html": [ [ "/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html", @@ -365173,6 +365806,12 @@ {} ] ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-no-alt-replaced.html": [ + [ + "/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-no-alt-replaced.html", + {} + ] + ], "html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html": [ [ "/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-iframe-auto.html", @@ -376665,6 +377304,12 @@ {} ] ], + "mediacapture-streams/MediaDevices-getSupportedConstraints.html": [ + [ + "/mediacapture-streams/MediaDevices-getSupportedConstraints.html", + {} + ] + ], "mediacapture-streams/MediaDevices-getUserMedia.https.html": [ [ "/mediacapture-streams/MediaDevices-getUserMedia.https.html", @@ -379893,6 +380538,12 @@ {} ] ], + "network-error-logging/no-report-on-unexpired-cached-response.https.html": [ + [ + "/network-error-logging/no-report-on-unexpired-cached-response.https.html", + {} + ] + ], "network-error-logging/reports-are-not-observable.https.html": [ [ "/network-error-logging/reports-are-not-observable.https.html", @@ -379905,6 +380556,18 @@ {} ] ], + "network-error-logging/sends-report-on-cache-validation.https.html": [ + [ + "/network-error-logging/sends-report-on-cache-validation.https.html", + {} + ] + ], + "network-error-logging/sends-report-on-redirect.https.html": [ + [ + "/network-error-logging/sends-report-on-redirect.https.html", + {} + ] + ], "network-error-logging/sends-report-on-subdomain-dns-failure.https.html": [ [ "/network-error-logging/sends-report-on-subdomain-dns-failure.https.html", @@ -390217,6 +390880,14 @@ } ] ], + "picture-in-picture/mediastream.html": [ + [ + "/picture-in-picture/mediastream.html", + { + "testdriver": true + } + ] + ], "picture-in-picture/picture-in-picture-element.html": [ [ "/picture-in-picture/picture-in-picture-element.html", @@ -390293,6 +390964,14 @@ {} ] ], + "pointerevents/pointerevent_pointermove.html": [ + [ + "/pointerevents/pointerevent_pointermove.html", + { + "testdriver": true + } + ] + ], "pointerevents/pointerevent_touch-action-illegal.html": [ [ "/pointerevents/pointerevent_touch-action-illegal.html", @@ -399867,6 +400546,12 @@ {} ] ], + "screen-capture/historical.https.html": [ + [ + "/screen-capture/historical.https.html", + {} + ] + ], "screen-capture/idlharness.window.js": [ [ "/screen-capture/idlharness.window.html", @@ -404065,6 +404750,96 @@ {} ] ], + "svg/geometry/inheritance.svg": [ + [ + "/svg/geometry/inheritance.svg", + {} + ] + ], + "svg/geometry/parsing/cx-invalid.svg": [ + [ + "/svg/geometry/parsing/cx-invalid.svg", + {} + ] + ], + "svg/geometry/parsing/cx-valid.svg": [ + [ + "/svg/geometry/parsing/cx-valid.svg", + {} + ] + ], + "svg/geometry/parsing/cy-invalid.svg": [ + [ + "/svg/geometry/parsing/cy-invalid.svg", + {} + ] + ], + "svg/geometry/parsing/cy-valid.svg": [ + [ + "/svg/geometry/parsing/cy-valid.svg", + {} + ] + ], + "svg/geometry/parsing/r-invalid.svg": [ + [ + "/svg/geometry/parsing/r-invalid.svg", + {} + ] + ], + "svg/geometry/parsing/r-valid.svg": [ + [ + "/svg/geometry/parsing/r-valid.svg", + {} + ] + ], + "svg/geometry/parsing/rx-invalid.svg": [ + [ + "/svg/geometry/parsing/rx-invalid.svg", + {} + ] + ], + "svg/geometry/parsing/rx-valid.svg": [ + [ + "/svg/geometry/parsing/rx-valid.svg", + {} + ] + ], + "svg/geometry/parsing/ry-invalid.svg": [ + [ + "/svg/geometry/parsing/ry-invalid.svg", + {} + ] + ], + "svg/geometry/parsing/ry-valid.svg": [ + [ + "/svg/geometry/parsing/ry-valid.svg", + {} + ] + ], + "svg/geometry/parsing/x-invalid.svg": [ + [ + "/svg/geometry/parsing/x-invalid.svg", + {} + ] + ], + "svg/geometry/parsing/x-valid.svg": [ + [ + "/svg/geometry/parsing/x-valid.svg", + {} + ] + ], + "svg/geometry/parsing/y-invalid.svg": [ + [ + "/svg/geometry/parsing/y-invalid.svg", + {} + ] + ], + "svg/geometry/parsing/y-valid.svg": [ + [ + "/svg/geometry/parsing/y-valid.svg", + {} + ] + ], "svg/historical.html": [ [ "/svg/historical.html", @@ -404155,6 +404930,12 @@ {} ] ], + "svg/painting/inheritance.svg": [ + [ + "/svg/painting/inheritance.svg", + {} + ] + ], "svg/path/error-handling/bounding.svg": [ [ "/svg/path/error-handling/bounding.svg", @@ -404275,6 +405056,12 @@ {} ] ], + "svg/text/inheritance.svg": [ + [ + "/svg/text/inheritance.svg", + {} + ] + ], "svg/types/elements/SVGGeometryElement-rect.svg": [ [ "/svg/types/elements/SVGGeometryElement-rect.svg", @@ -409206,7 +409993,9 @@ "webrtc/RTCPeerConnection-track-stats.https.html": [ [ "/webrtc/RTCPeerConnection-track-stats.https.html", - {} + { + "timeout": "long" + } ] ], "webrtc/RTCPeerConnection-transceivers.https.html": [ @@ -436411,6 +437200,14 @@ {} ] ], + "webdriver/tests/fullscreen_window/stress.py": [ + [ + "/webdriver/tests/fullscreen_window/stress.py", + { + "timeout": "long" + } + ] + ], "webdriver/tests/fullscreen_window/user_prompts.py": [ [ "/webdriver/tests/fullscreen_window/user_prompts.py", @@ -436661,6 +437458,14 @@ {} ] ], + "webdriver/tests/maximize_window/stress.py": [ + [ + "/webdriver/tests/maximize_window/stress.py", + { + "timeout": "long" + } + ] + ], "webdriver/tests/maximize_window/user_prompts.py": [ [ "/webdriver/tests/maximize_window/user_prompts.py", @@ -436677,6 +437482,14 @@ } ] ], + "webdriver/tests/minimize_window/stress.py": [ + [ + "/webdriver/tests/minimize_window/stress.py", + { + "timeout": "long" + } + ] + ], "webdriver/tests/minimize_window/user_prompts.py": [ [ "/webdriver/tests/minimize_window/user_prompts.py", @@ -447493,7 +448306,7 @@ "testharness" ], "bluetooth/resources/bluetooth-helpers.js": [ - "725e56d3f340ea429ee0dd199151bcc85e9f048e", + "9b23d650baf2a77c105f61df2d8f197812aefce0", "support" ], "bluetooth/resources/health-thermometer-iframe.html": [ @@ -471901,7 +472714,7 @@ "support" ], "cors/access-control-expose-headers-parsing.window.js": [ - "58e7395cf83f7328fc54bbad78636c70cece25e8", + "a139ff6f1e71d3839c167f5ee8fa77d026fd2ca5", "testharness" ], "cors/basic.htm": [ @@ -471912,6 +472725,10 @@ "ee6c7ea7e86f032e3da96e99747c743a16ba44e2", "testharness" ], + "cors/cors-safelisted-request-header.any.js": [ + "d7bb5e70b8e739dbdd57b0bf61d50dd62d4d3765", + "testharness" + ], "cors/credentials-flag.htm": [ "45a714368560936439889855c36453463295ae51", "testharness" @@ -471968,12 +472785,8 @@ "2fc83b9aea3879320a76d7df44eca8f16f050bb2", "support" ], - "cors/resources/access-control-expose-headers-parsing-2.asis": [ - "9628a67ff14501f4a76252ad7263395a5b052f7e", - "support" - ], - "cors/resources/access-control-expose-headers-parsing.asis": [ - "7a4b2a12b603bd837e4ebd661f73a021a8a4f7b9", + "cors/resources/access-control-expose-headers.json": [ + "e8915f7ffe1533eb9b00292552ea216cc818c0ca", "support" ], "cors/resources/cache-304.py": [ @@ -471996,6 +472809,10 @@ "eab35eedfc9afbbf3896c31c473fb56468e2eaa8", "support" ], + "cors/resources/expose-headers.py": [ + "c350b3b87be64ee40e4d9bd033caae7f3f29953d", + "support" + ], "cors/resources/image-tainting-checker.sub.html": [ "59de9e7a23ce6ef949d03db610609c61ce4d98c1", "support" @@ -532348,6 +533165,10 @@ "6328af2ba20745f2926dc7e6778b61fef7255a46", "reftest" ], + "css/css-backgrounds/background-size-one-value-1x1-image.html": [ + "5caf2d49566331c496a71c6c6e00342a5522ea6f", + "reftest" + ], "css/css-backgrounds/background-size-with-negative-value.html": [ "a9d57f86d604a9b01e9ace6d7fce0f8a34cdbc5d", "reftest" @@ -534620,6 +535441,10 @@ "ea0dd78ba0e46ee2044128db8d44002ddac77ec7", "support" ], + "css/css-backgrounds/reference/background-size-one-value-1x1-image-ref.html": [ + "0a0404a9b5c29cd8d84615485064bd8dda4fdd51", + "support" + ], "css/css-backgrounds/reference/background-size-ref.html": [ "eabf1f8d6503537462853721180284e4ca4688ca", "support" @@ -539320,46 +540145,6 @@ "af56147f52291a8b4515c67f843505703875c594", "support" ], - "css/css-filter/META.yml": [ - "8d0683319b0fbbd1262cbdd12cdbcb727b2aa9a0", - "support" - ], - "css/css-filter/blur-clip-stacking-context-001.html": [ - "a96994a8afe126e474f9ee015338749f0015dc1f", - "reftest" - ], - "css/css-filter/blur-clip-stacking-context-002.html": [ - "0473f12949446da04849386ffea69e7436703010", - "reftest" - ], - "css/css-filter/blur-clip-stacking-context-ref.html": [ - "82b907334fd71791cd2f6530e2e85169e29afa41", - "support" - ], - "css/css-filter/filtered-block-is-container-ref.html": [ - "fc9467f8717dfc722dcb6dbbbb31bfd8c2baee3b", - "support" - ], - "css/css-filter/filtered-block-is-container.html": [ - "6f99f364e638028098ae10319290e8bf2a9a9457", - "reftest" - ], - "css/css-filter/filtered-html-is-not-container-ref.html": [ - "c1f179a676a5072e83cd6e376d98653880563e9e", - "support" - ], - "css/css-filter/filtered-html-is-not-container.html": [ - "8adc302f31cf747ae3ab55c271bbd43acc1d1552", - "reftest" - ], - "css/css-filter/filtered-inline-is-container-ref.html": [ - "aa6c12e33b5bc3779c9a49ee3c9edd69ffe2ed8f", - "support" - ], - "css/css-filter/filtered-inline-is-container.html": [ - "56f1d91ff9009ceebafc69f39f70cd7bc9200dbf", - "reftest" - ], "css/css-flexbox/Flexible-order.html": [ "9b61e1e8a8fd4cc41e461b10b86051ed0e536ef5", "reftest" @@ -540048,6 +540833,14 @@ "127100ac0ad9dc5c14e170a346dce38d114a0c99", "visual" ], + "css/css-flexbox/flex-wrap-002.html": [ + "d2e07afb45f88611f149a4acfa38928a50571e02", + "reftest" + ], + "css/css-flexbox/flex-wrap-003.html": [ + "a76e4449fb2e56a779c45c3a1c1c20ec31a093cf", + "reftest" + ], "css/css-flexbox/flex-wrap_nowrap.html": [ "ef53bb2decb00a9ee881ddcc96d350428b036595", "visual" @@ -552212,6 +553005,30 @@ "140d7bf115115043a844ac83852efc842340d42c", "testharness" ], + "css/css-grid/grid-model/grid-container-scrollbar-001-ref.html": [ + "31a9ef3db8e08d76b218a4f2bf1ea5cde5d889b3", + "support" + ], + "css/css-grid/grid-model/grid-container-scrollbar-001.html": [ + "1b3c6eef691d9959b4bc899b3d88c9c7e3f57e28", + "reftest" + ], + "css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html": [ + "512fb8a81d57788eb06e004982de9c897df3dd0f", + "support" + ], + "css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html": [ + "ecdc7b768406922628b1bcf2e17b6ba7ee6b162b", + "reftest" + ], + "css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html": [ + "d8eeedfa07d572d5150e2e480b572769273fc1f3", + "support" + ], + "css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html": [ + "f2ab39ff505401436e23947feea4bffbff12629c", + "reftest" + ], "css/css-grid/grid-model/grid-display-grid-001.html": [ "732d67c8ec1a55adc09af9bf7a3cae59d03152aa", "reftest" @@ -552441,7 +553258,7 @@ "testharness" ], "css/css-grid/parsing/grid-template-areas-valid.html": [ - "8d8f6823267eea15e987ea89e992f1ed0b2f7726", + "9c9bd47ec894ccc0e389287120082fb4bf5c9905", "testharness" ], "css/css-grid/placement/grid-layout-grid-span.html": [ @@ -555112,6 +555929,10 @@ "8a91cd1f6b7bbf859bd5210a6a410a64dd7b30b9", "reftest" ], + "css/css-multicol/multicol-margin-003.html": [ + "b509d2eed75aaf0ada80611375ff6c82f5b85709", + "reftest" + ], "css/css-multicol/multicol-margin-child-001-ref.xht": [ "db9a49db40c3c7edce1bfc61a15d7df5caf21b18", "support" @@ -555452,6 +556273,102 @@ "83debd12d20b9f78d5beaf338ae7f068ed6bf693", "support" ], + "css/css-multicol/multicol-span-all-dynamic-add-001-ref.html": [ + "9f76ea15a0daa7753e76ad9b9a99948988c702d3", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-add-001.html": [ + "82b240cb91f934688c961ff55b13923d5b9b4946", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-add-002-ref.html": [ + "94f3028a473a9b59dcd96fb22ff688807c91049b", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-add-002.html": [ + "67eeff63ebf2882cdc18273b8247b21f97c895b5", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-add-003-ref.html": [ + "da623535087b3bb91e9555320b4ac55d07269e82", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-add-003.html": [ + "a9dd225aca1ff12dd4f5099c4530134a447dbbad", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-add-004-ref.html": [ + "1afda92071fc819561e413dd5a67e8badb7cfc6a", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-add-004.html": [ + "646fb332451020da46b12b073d6b9243124fb548", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-add-005.html": [ + "87d7f1b7fda867542ace30ad766faf549355c02d", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-add-006.html": [ + "9b5c1dced06508f8329ec5471ca4a8573ea7b557", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-add-007-ref.html": [ + "7f68a45a2c4af495261b610457e1ff7385665cd8", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-add-007.html": [ + "cdaaf430f55b09915ea2ca9fdbb42a00bfb49a0d", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-add-008-ref.html": [ + "c2df383b9394999fc1d3d7cdfd690791a3ef2d3e", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-add-008.html": [ + "14aeac8bca2b40634ce6a7e469b9e48e82479b24", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html": [ + "83c9fd4880f246e77a5f93dcc2755f4f2d812801", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-001.html": [ + "50a59d1225b65ee346619e837954458c322c87cd", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-002-ref.html": [ + "5bccbd7637850befb4e2e2a865ee85d3090a3cff", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-002.html": [ + "a6e297726982e75744fae6e7995d5c22235b7da6", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-003.html": [ + "fa6f167bd93c065ece33222a70cd2a98eb02a9e8", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-004-ref.html": [ + "d6e44f35f8406a3a940d98eb9bdc3a983b236cc6", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-004.html": [ + "99ea3d744d63226c05d7d789c80e5b878a8e89d9", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-005-ref.html": [ + "f0c6149b5c28732e4edd733ee2abb20d5a45d864", + "support" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-005.html": [ + "c0d868885cae8aa90717ef8fb2da8540eb3ad914", + "reftest" + ], + "css/css-multicol/multicol-span-all-dynamic-remove-006.html": [ + "bbcce11c40fb0ef58b686cd4879103bcdfabc479", + "reftest" + ], "css/css-multicol/multicol-span-all-margin-001-ref.xht": [ "6605ad8efb3ea3b3e5e6396dbbf31eb572613fef", "support" @@ -555496,6 +556413,38 @@ "c2977be7c7142b6d2b30f28a9cc4ddf2bff64f2e", "support" ], + "css/css-multicol/multicol-span-all-restyle-001-ref.html": [ + "41bf8631e04b3e9786ac8c0406847f4e5e923b93", + "support" + ], + "css/css-multicol/multicol-span-all-restyle-001.html": [ + "8d942c13b5c97ae665a6c0e79c454bd9a00858f6", + "reftest" + ], + "css/css-multicol/multicol-span-all-restyle-002-ref.html": [ + "92d469ab78b9183919cb4610b05a788d74ad6b47", + "support" + ], + "css/css-multicol/multicol-span-all-restyle-002.html": [ + "e8ad19e8bc11bee768bda13a5382799f0b950819", + "reftest" + ], + "css/css-multicol/multicol-span-all-restyle-003-ref.html": [ + "1396f66dcb79e1a14a7d8dc8c5f4e0de40bbcbde", + "support" + ], + "css/css-multicol/multicol-span-all-restyle-003.html": [ + "7190f8f87943f9a55c9538b05cf7df1bd20d862f", + "reftest" + ], + "css/css-multicol/multicol-span-all-restyle-004-ref.html": [ + "cd562cc1e1bf2120e973d1c53d4f8874f3c794e1", + "support" + ], + "css/css-multicol/multicol-span-all-restyle-004.html": [ + "41ac007f00009d60c43b034bce68ded4cf23a007", + "reftest" + ], "css/css-multicol/multicol-span-float-001-ref.xht": [ "50addc37797b085d7c59e7389f99fca1c54c50c1", "support" @@ -557137,7 +558086,7 @@ "testharness" ], "css/css-properties-values-api/var-reference-registered-properties-cycles.html": [ - "58d6c846ae3a4a1c62f239786dfe8827eb921d05", + "65d11697355c17fca39b4e9fa0dcf0db404e22eb", "testharness" ], "css/css-properties-values-api/var-reference-registered-properties.html": [ @@ -559844,6 +560793,10 @@ "b380cb400f2c291832fdfeeab72e9b5561b3c847", "testharness" ], + "css/css-scroll-snap/nested-scrollIntoView-snaps.html": [ + "b335de2c7f40dbcf07416c0a1283e20039ebb058", + "testharness" + ], "css/css-scroll-snap/overflowing-snap-areas.html": [ "6d3c1865fe7b1e05ea7897db4118abeabb73d02f", "testharness" @@ -564817,15 +565770,15 @@ "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html": [ - "e4a7ef4a3852d328e8410b81ef20c4d3de0d771e", + "608d4853a2425d9b4157bbe331fd78763985cecd", "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-min-content-size-002.html": [ - "5b3b1f19d7ae6374224da75567b3ba5279d16127", + "52f34023b820b31f7bc5d1bde75d05210a97f6a3", "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-min-content-size-003.html": [ - "d1af28ffad4161c1dba7567cacb3b06098b155fa", + "43dc1767856fde826a275b8dbf61d47f58fa8f27", "reftest" ], "css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html": [ @@ -566461,7 +567414,7 @@ "reftest" ], "css/css-text/white-space/pre-wrap-002.html": [ - "c0db9e671104d7dbe4ff404bfe150c0724686924", + "e42bd32f938eccca581eac5f3888131fe228f7e1", "reftest" ], "css/css-text/white-space/pre-wrap-003.html": [ @@ -566520,6 +567473,14 @@ "8a8b5132db197bb9a76b1b44e461405f4cd9d1bc", "support" ], + "css/css-text/white-space/reference/tab-stop-threshold-001-ref.html": [ + "5694dd2f526176b1a662f5e06c2b1d97cff425df", + "support" + ], + "css/css-text/white-space/reference/tab-stop-threshold-002-ref.html": [ + "35c568bbcac27aab56cf283a366969a9799b921b", + "support" + ], "css/css-text/white-space/reference/textarea-pre-wrap-001-ref.html": [ "d09873a64634fb1b1cb00cc0bb6f9bea07874651", "support" @@ -566628,6 +567589,14 @@ "52b7ce1f6ab15ac1833067cdf957b1e4c6b4af21", "testharness" ], + "css/css-text/white-space/tab-stop-threshold-001.html": [ + "dae6012bf7f42bfa4154f2c88c439db6959e80cb", + "reftest" + ], + "css/css-text/white-space/tab-stop-threshold-002.html": [ + "1147e4b04111a99b095bcb8755b6b4677111a5f9", + "reftest" + ], "css/css-text/white-space/textarea-break-spaces-001.html": [ "b109f45913ca9db04157ade71d90803fa56826b5", "reftest" @@ -568201,7 +569170,7 @@ "testharness" ], "css/css-transforms/parsing/rotate-parsing-valid.html": [ - "c82f6be8c5d75e4c323c0f2701cfa9d0a0540b4b", + "63243b5e9856f0223cefc02ec41f53666b95b918", "testharness" ], "css/css-transforms/parsing/scale-parsing-invalid.html": [ @@ -568241,7 +569210,7 @@ "testharness" ], "css/css-transforms/parsing/translate-parsing-valid.html": [ - "fe16d545e1f92f0086aa5bba0dd221c591696255", + "e000f6a7f577a1578c4796ee903cd1bab38bdb80", "testharness" ], "css/css-transforms/patternTransform/reference/svg-patternTransform-combination-ref.html": [ @@ -571593,7 +572562,7 @@ "reftest" ], "css/css-transforms/transforms-support-calc.html": [ - "71a046f56b0107fbe40f73477f5c1e1b67331d84", + "1ad1bcc4b68c5419e2fa0651dad1a3386223e36b", "testharness" ], "css/css-transforms/translate-getComputedStyle.html": [ @@ -585532,6 +586501,62 @@ "930b762b01a1a75e5b5ab4fb18dedd5939618fe1", "support" ], + "css/filter-effects/backdrop-filter-basic-background-color-ref.html": [ + "44dd8d44d64c1d89d09a2a35b76c86acfff87d51", + "support" + ], + "css/filter-effects/backdrop-filter-basic-background-color.html": [ + "c8d1a3ede5d58bc3179c2d66183957540778c5d2", + "reftest" + ], + "css/filter-effects/backdrop-filter-basic-opacity-ref.html": [ + "26d7715e15f3a8af09d697982df020b367e556e3", + "support" + ], + "css/filter-effects/backdrop-filter-basic-opacity.html": [ + "23e40a7ccdd7b78fbc7847797d4c40cad8c3ad5d", + "reftest" + ], + "css/filter-effects/backdrop-filter-basic-ref.html": [ + "049e7c888dcb08ba131ecf437e1fa100b9fad917", + "support" + ], + "css/filter-effects/backdrop-filter-basic.html": [ + "8f24c9b44a484a19d0169c632665c2facece6a64", + "reftest" + ], + "css/filter-effects/backdrop-filter-border-radius-ref.html": [ + "eabcd996697024260a5936f8f81a77f9d1decb48", + "support" + ], + "css/filter-effects/backdrop-filter-border-radius.html": [ + "d6d1f4b813011cc7a4a814c9f4382425087eaf00", + "reftest" + ], + "css/filter-effects/backdrop-filter-isolation-isolate.html": [ + "dba157c87c76b74ec75015be92ce0eea2348219f", + "reftest" + ], + "css/filter-effects/backdrop-filter-isolation-ref.html": [ + "58f5a7ec1edc11d59c2ef789bf078bace7dceb71", + "support" + ], + "css/filter-effects/backdrop-filter-isolation.html": [ + "dc7bd107c32a6032d9dd751d2e2d580abd520fc2", + "reftest" + ], + "css/filter-effects/blur-clip-stacking-context-001.html": [ + "a96994a8afe126e474f9ee015338749f0015dc1f", + "reftest" + ], + "css/filter-effects/blur-clip-stacking-context-002.html": [ + "0473f12949446da04849386ffea69e7436703010", + "reftest" + ], + "css/filter-effects/blur-clip-stacking-context-ref.html": [ + "82b907334fd71791cd2f6530e2e85169e29afa41", + "support" + ], "css/filter-effects/css-filters-animation-blur-ref.html": [ "3bde6f1826f7620fc0754fff46ed5ef382de3d4d", "support" @@ -585553,7 +586578,7 @@ "support" ], "css/filter-effects/css-filters-animation-combined-001.html": [ - "5b37d57f49e82e504973a5451c51d410aa7bab12", + "874f6e4a5070dffd0bd01aecf3c10e9f321b4097", "reftest" ], "css/filter-effects/css-filters-animation-contrast-ref.html": [ @@ -585565,11 +586590,11 @@ "reftest" ], "css/filter-effects/css-filters-animation-drop-shadow-ref.html": [ - "e1802341f74b2e8f1aca054b01a5a5bd61fe8f77", + "d6be73bcbdc0dd1db9084091ab161a3fda0db877", "support" ], "css/filter-effects/css-filters-animation-drop-shadow.html": [ - "e27bf4339077a5ffd4efa7ce56c19e61f7667985", + "9496bdb234d058ce8f1d530d6e32d1ad3e043c9c", "reftest" ], "css/filter-effects/css-filters-animation-grayscale-ref.html": [ @@ -585585,7 +586610,7 @@ "support" ], "css/filter-effects/css-filters-animation-hue-rotate.html": [ - "7c55b5011df9a3e04291da2acc23d8a1b51a5a69", + "1ebf2778bf8601717c6a2fbfd6ec7f5e9749a769", "reftest" ], "css/filter-effects/css-filters-animation-invert-ref.html": [ @@ -585609,7 +586634,7 @@ "support" ], "css/filter-effects/css-filters-animation-saturate.html": [ - "ed5207f457e9230c35a551a64318a52e72e3a35d", + "63de30aa89121f72bc9fe36a36b739d455d3abdb", "reftest" ], "css/filter-effects/css-filters-animation-sepia-ref.html": [ @@ -585621,11 +586646,11 @@ "reftest" ], "css/filter-effects/fecolormatrix-type-ref.html": [ - "bba0c091a29d94615609d11eb23ce28bf8d57b87", + "182b4b547c0d8f45c0b55a290d7d5b83e297364c", "support" ], "css/filter-effects/fecolormatrix-type.html": [ - "8caaede02f27a120278d9d1512084e6fd57ab27f", + "5d003f7f9c5175edfa869567d2fe69b95160644d", "reftest" ], "css/filter-effects/filter-cb-abspos-inline-001-ref.html": [ @@ -585669,27 +586694,23 @@ "support" ], "css/filter-effects/filter-contrast-003.html": [ - "8b324c770d51fe82946599958077be573662fe4f", + "255c4a0289508de1723614d1b375b7ebcdfc56bf", "reftest" ], "css/filter-effects/filter-external-001-ref.html": [ - "915cccd07f421857d6962d6632ad76e09b7b9fd1", + "794674da48456eeaee84710ddff8c2197de7cf9e", "support" ], "css/filter-effects/filter-external-001-test.html": [ - "c84c0524fc4c8ba84f144ee40138d9cabcf12327", + "ecef5571750142a20e03c3c3d97137f90290becb", "reftest" ], - "css/filter-effects/filter-external-002-filter.svg": [ - "638f5331f02a396d9c73d73b99ff8a4918242780", - "support" - ], "css/filter-effects/filter-external-002-test.html": [ - "65475b4021904359b19e9f1e6bb223657b960b8f", + "cb2d6554a08eb6dd1a175da2e0e71a093690505f", "reftest" ], "css/filter-effects/filter-grayscale-001.html": [ - "7027ee06fd9143ba4e0578e14ceb5a29894df745", + "c6fc1be727c3964368120a878166dbaaa41df0ed", "reftest" ], "css/filter-effects/filter-grayscale-002.html": [ @@ -585701,15 +586722,15 @@ "reftest" ], "css/filter-effects/filter-grayscale-004.html": [ - "b63d9c211c17b0ccc76612cd051028bc78575cc2", + "8b7d11a42ae75d5bf08d3adb25d72632da24bb20", "reftest" ], "css/filter-effects/filter-grayscale-005.html": [ - "110ce4d554c6f0fb9e11bac8c185a9b8199c94f9", + "0aa4a3b6bdc0c8e0e3a907789d22ad2bad81a215", "reftest" ], "css/filter-effects/filter-grayscale-ref.html": [ - "72700c2fe96a40d208402ddc5da96855de841358", + "beaa72aaa3c3e9a6fdbf95ef3f50c7c515a77b44", "support" ], "css/filter-effects/filter-hue_rotate-001-ref.html": [ @@ -585760,6 +586781,30 @@ "d00c1ce8c4c606c088efc9322301f71a8d1ce0d5", "reftest" ], + "css/filter-effects/filtered-block-is-container-ref.html": [ + "fc9467f8717dfc722dcb6dbbbb31bfd8c2baee3b", + "support" + ], + "css/filter-effects/filtered-block-is-container.html": [ + "6f99f364e638028098ae10319290e8bf2a9a9457", + "reftest" + ], + "css/filter-effects/filtered-html-is-not-container-ref.html": [ + "c1f179a676a5072e83cd6e376d98653880563e9e", + "support" + ], + "css/filter-effects/filtered-html-is-not-container.html": [ + "8adc302f31cf747ae3ab55c271bbd43acc1d1552", + "reftest" + ], + "css/filter-effects/filtered-inline-is-container-ref.html": [ + "aa6c12e33b5bc3779c9a49ee3c9edd69ffe2ed8f", + "support" + ], + "css/filter-effects/filtered-inline-is-container.html": [ + "56f1d91ff9009ceebafc69f39f70cd7bc9200dbf", + "reftest" + ], "css/filter-effects/filters-drop-shadow-ref.html": [ "3776a006095dd3ec5b9ea826e3260c91469711b6", "support" @@ -585813,7 +586858,7 @@ "reftest" ], "css/filter-effects/filters-test-brightness-003.html": [ - "9ecef28aa54d133dfaea55551dbed91305cf9d0e", + "69a7d54a7f82d96a419002e2e90c959af29e8b9a", "reftest" ], "css/filter-effects/inheritance.html": [ @@ -585940,6 +586985,10 @@ "85dd7324815b8f8ef1a1d0496224c1a0661db9d8", "support" ], + "css/filter-effects/support/filter-external-002-filter.svg": [ + "0d5fc65c6fdfe2b4f507326fb379e468dbe85d46", + "support" + ], "css/filter-effects/support/import-green.css": [ "537104e663364492c6ef388e4afce190e9c5bc58", "support" @@ -598269,7 +599318,7 @@ "support" ], "docs/_writing-tests/testharness-api.md": [ - "e7e53e4c3b629d1e5a48fb5830c71107a591f789", + "5d23e253946d17e1f497d1e7487605292a079db3", "support" ], "docs/_writing-tests/testharness.md": [ @@ -601745,35 +602794,35 @@ "support" ], "encoding/resources/utf-32-big-endian-bom.html": [ - "79679cac759429625fde26de63a959d9f4bcb782", + "db551fa89470cd864c5b671bb648d96e173c175a", "support" ], "encoding/resources/utf-32-big-endian-bom.xml": [ - "399c35af827db47ca43d09d552b973ef31208a08", + "c97662aa163f0bb609ed7bb468e3d6086f94911f", "support" ], "encoding/resources/utf-32-big-endian-nobom.html": [ - "fa2d3fe4a7d0bb1c664225b88fedd1c582a20b4e", + "fe32ab0408c4c6cc072e74b0c30a202326e8e59d", "support" ], "encoding/resources/utf-32-big-endian-nobom.xml": [ - "a237e853a08218858c343050c5a2ab6390218c77", + "f704501ccae0d6945406666ebd1e1c13eb747458", "support" ], "encoding/resources/utf-32-little-endian-bom.html": [ - "5648fca2835289424b07dcd7b9e7ee83e5eca8b9", + "432b96f26a0d6700cbab27b2657342c7b2e2600d", "support" ], "encoding/resources/utf-32-little-endian-bom.xml": [ - "8f5e8cba40093c5171366d217b72806fb488ca54", + "f896b511c7119a4e8f030bbb7db77cfd198dc3d1", "support" ], "encoding/resources/utf-32-little-endian-nobom.html": [ - "eda12372134a86d2954b39c882b2d3135e5360de", + "2de355aab17a4f7fdcc435bb8079d0824020bdc9", "support" ], "encoding/resources/utf-32-little-endian-nobom.xml": [ - "a9a7bf96e6efa908325bcbcc13595d13d1b5c907", + "465f44df5f782aea8c4e1a4b0cec04acd1d8c72e", "support" ], "encoding/single-byte-decoder.html": [ @@ -601884,8 +602933,12 @@ "461188ea2b4f7c74524970d906f945bb1aa64128", "testharness" ], + "encoding/utf-32-from-win1252.html": [ + "7b4a3d0c956bd519f09a68d322f22969eafa3cda", + "testharness" + ], "encoding/utf-32.html": [ - "7b173055d35ced56acf7910e70b8e512046144b9", + "ec72eb6fbf64706791ceaf51ed11347c31335d11", "testharness" ], "encrypted-media/META.yml": [ @@ -602617,7 +603670,7 @@ "manual" ], "entries-api/file-webkitRelativePath-manual.html": [ - "e36b821c9d30bf7703b12da542e642d48f8bfe30", + "695ccc47c37d52e0fa279f3e32f93ca71efb239f", "manual" ], "entries-api/filesystem-manual.html": [ @@ -604897,7 +605950,7 @@ "support" ], "fetch/sec-metadata/resources/record-header.py": [ - "4c30d1e52ac8bfb24c890f790df154ea17947043", + "b81e93ec3c09a4bbfae7190e39508b31b68edfd7", "support" ], "fetch/sec-metadata/resources/sharedWorker.js": [ @@ -608164,6 +609217,10 @@ "d3af35c6d7ac50de4fd8942066875d52229634f2", "testharness" ], + "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html": [ + "e50e5e1657f11cc8484d864080e2c8e2b2a1922a", + "testharness" + ], "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html": [ "a55d85dfdf293adc0b7160ed1bce213967d9822e", "testharness" @@ -609137,7 +610194,7 @@ "support" ], "html/dom/elements-obsolete.js": [ - "e37e34280f69aec0e37d6b9f277f36d53d7ff330", + "7f673cb7f0ee9bbeae746448163bbc11e31a1220", "support" ], "html/dom/elements-sections.js": [ @@ -615312,6 +616369,10 @@ "2d636c9417738423141203001302eb344151e295", "reftest" ], + "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-no-alt-replaced.html": [ + "896c7363113ca8872208059bbac51f7616b05f3f", + "testharness" + ], "html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img_border-ref.xhtml": [ "0050c542cde7b176d0332af8da4687592b9fe3c3", "support" @@ -619753,7 +620814,7 @@ "testharness" ], "html/semantics/forms/the-input-element/type-change-state.html": [ - "de068f17a735c09d9ed2727bbab45b102f3ad23e", + "dc5dcbfdece11d08cfadabf14bc34e64bb5c012d", "testharness" ], "html/semantics/forms/the-input-element/url.html": [ @@ -621313,7 +622374,7 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/module/credentials.sub.html": [ - "cf23e67ae40c59c7707e90bba642fc4f18ff99ae", + "983961ae44c596e937280b95197fc96c1cabc6f9", "testharness" ], "html/semantics/scripting-1/the-script-element/module/crossorigin-common.js": [ @@ -625213,7 +626274,7 @@ "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [ - "6644d52d1ff5f9faa1101c539afd35e6e94be182", + "8edb44d4148739d5fccfe61460f298e642285d7c", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini": [ @@ -625221,7 +626282,7 @@ "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini": [ - "bfb5c0ae4bd5350c6a540fa48a5d2896d5be9503", + "8c60a97ad955a8f02e45657d36b2ffa4f6a476a0", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [ @@ -625369,7 +626430,7 @@ "testharness" ], "infrastructure/testdriver/actions/elementPosition.html": [ - "145852e7b51bd0cdc9e7b4ef5ebddcbf1c0235c5", + "ab9fb31ad093b129b2d1c0f4b471d4c6c5000866", "testharness" ], "infrastructure/testdriver/actions/elementTiming.html": [ @@ -625377,7 +626438,7 @@ "testharness" ], "infrastructure/testdriver/actions/eventOrder.html": [ - "c85b861c7fd9b199ce7baa5c9eac49525db4754b", + "bd7fef41e9af2909fa8e375867240a552f13d715", "testharness" ], "infrastructure/testdriver/actions/multiDevice.html": [ @@ -625605,7 +626666,7 @@ "support" ], "interfaces/css-transitions.idl": [ - "20669f4f6415071faec7247bc9b0053b56943d54", + "129f1463ed86523f9dedfaaf1dd0d460178c414c", "support" ], "interfaces/css-typed-om.idl": [ @@ -625869,7 +626930,7 @@ "support" ], "interfaces/selection-api.idl": [ - "b63951790b61f283cf68e206537201dac3952cfb", + "049759b799ef5e648af670398840e461ccf2c9c0", "support" ], "interfaces/server-timing.idl": [ @@ -625981,7 +627042,7 @@ "support" ], "interfaces/webrtc.idl": [ - "7496fff41dcbbeda6759977d56e12c21568b49f5", + "9cfd687c18b7802dd814f9a447dd75bb38c1f694", "support" ], "interfaces/webusb.idl": [ @@ -626305,7 +627366,7 @@ "support" ], "lint.whitelist": [ - "3de5698c229d7c8b7f32207030540283b9efec63", + "99b1d6a2be10de0f35b571431310a05dd7ff99c2", "support" ], "longtask-timing/META.yml": [ @@ -627680,6 +628741,10 @@ "c66251a03f30f2100670d07508fcb449f8609510", "testharness" ], + "mediacapture-streams/MediaDevices-getSupportedConstraints.html": [ + "fff4f349e1ccc01481be36c0ab0ff7c174fea681", + "testharness" + ], "mediacapture-streams/MediaDevices-getUserMedia.https.html": [ "afa3abeb6408261497936607d3e7b556d161488d", "testharness" @@ -627809,15 +628874,15 @@ "support" ], "mimesniff/mime-types/README.md": [ - "89e1bf426be66eea1be33c40f5d1da910bb4ab54", + "3a2681ec74fe698912594e8be311b3b3b0196488", "support" ], "mimesniff/mime-types/charset-parameter.window.js": [ - "c288de8349a252f53f41b4bb58250c2655b3822c", + "ddac81b74d3b41652e28d39c299d4f8ebf0c118c", "testharness" ], "mimesniff/mime-types/parsing.any.js": [ - "beacada1b10f4bfd5c635cc1d367629e48cb56d5", + "640a46b9e98ee145cdfaf44cc458023e1f1ac4bd", "testharness" ], "mimesniff/mime-types/resources/generated-mime-types.json": [ @@ -627829,11 +628894,11 @@ "support" ], "mimesniff/mime-types/resources/mime-charset.py": [ - "433a5bb74b924a0195e117fc0386dcd5e7d14a02", + "a4f90f52c323fc6df7957f956f0727c9f4f54a38", "support" ], "mimesniff/mime-types/resources/mime-types.json": [ - "8918b355bf5a4f287904834a14378be94eb26dca", + "64654b90d5aca0832c645e6e17bd79ee47cd9937", "support" ], "mixed-content/META.yml": [ @@ -630776,6 +631841,10 @@ "5fd6d4fb41231c5ca5f345b890927c5d1b9411ab", "testharness" ], + "network-error-logging/no-report-on-unexpired-cached-response.https.html": [ + "8248aa52ecb1ea7b425bb348f182a4e539dc316e", + "testharness" + ], "network-error-logging/reports-are-not-observable.https.html": [ "35ab4f3c23507617c4f26981339741d9b3c385be", "testharness" @@ -630784,6 +631853,14 @@ "38bdc014501e90f5a99bae1ac0d433191f557afb", "testharness" ], + "network-error-logging/sends-report-on-cache-validation.https.html": [ + "b87053cb7f7519c67f7592cabc68c8359201fb36", + "testharness" + ], + "network-error-logging/sends-report-on-redirect.https.html": [ + "c9ba405f6faa638701af43cde94c270382fffb9d", + "testharness" + ], "network-error-logging/sends-report-on-subdomain-dns-failure.https.html": [ "8913857af8acb01760589b6a7546a110a359f192", "testharness" @@ -630796,6 +631873,18 @@ "68fddaa0c70b8dd0fd22194b351ba1157f836bdc", "testharness" ], + "network-error-logging/support/cached-for-one-minute.png": [ + "2fa1e0ac0663a65deae6602621521cc2844b93de", + "support" + ], + "network-error-logging/support/cached-for-one-minute.png.sub.headers": [ + "63d4c4de0303b75221dc2b6f450d2e7357b2ba1b", + "support" + ], + "network-error-logging/support/cached-with-validation.py": [ + "f98a503a51ed8ccd79da1952a9aaa6c2987ff55e", + "support" + ], "network-error-logging/support/clear-policy-pass.png": [ "2fa1e0ac0663a65deae6602621521cc2844b93de", "support" @@ -630809,7 +631898,7 @@ "support" ], "network-error-logging/support/nel.sub.js": [ - "c6b4783bd94c00579047627b6c2b137478ae1c2e", + "759d0337fa677da751c93146f057b05c53f9fa57", "support" ], "network-error-logging/support/no-policy-pass.png": [ @@ -630824,8 +631913,12 @@ "70796e913ace97d4d1a21ac0b1c19f6fbb6d01fc", "support" ], + "network-error-logging/support/redirect.py": [ + "00813504da6e39fda4e95782e3b16bf4e1cdff99", + "support" + ], "network-error-logging/support/report.py": [ - "7c05b51b9eb011f4d32bd5e774f6a0d3ead2cd9c", + "49af9fe34ccac87f3dffa7c9da9b4486eb140764", "support" ], "network-error-logging/support/subdomains-pass.png": [ @@ -638208,6 +639301,10 @@ "04de95e47ecc6373fd45906b28ba88ad46f4fcc8", "testharness" ], + "picture-in-picture/mediastream.html": [ + "7a2cc958eacdd7e7bd2d074fcc909813fdeeeaa3", + "testharness" + ], "picture-in-picture/picture-in-picture-element.html": [ "2763eca476d716aeb88bf923f32279a3bc55998a", "testharness" @@ -638229,7 +639326,7 @@ "support" ], "picture-in-picture/shadow-dom.html": [ - "17816b93c94b1de504062f934437ecc090213819", + "2bf4374607522dcf6d1840eaab1de23a684f8c8e", "testharness" ], "pointerevents/META.yml": [ @@ -638404,9 +639501,9 @@ "bb6dcc4236b0cc5183855275d85208db6460a5cb", "manual" ], - "pointerevents/pointerevent_pointermove-manual.html": [ - "cf1a1ee4ee852e94cef7010fd2f2351e974d23b9", - "manual" + "pointerevents/pointerevent_pointermove.html": [ + "4b168439a4ee1455e5a5960b48a0c3192e767edf", + "testharness" ], "pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html": [ "b43d59f4f6e822f3d03d25b17015cd50d332ed7b", @@ -638749,7 +639846,7 @@ "support" ], "preload/modulepreload.html": [ - "addd67d46ac76e928bfa766a656921a97a3456c0", + "8950daf1f87403e8799570cb8019a2af03bda0c6", "testharness" ], "preload/onerror-event.html": [ @@ -638788,6 +639885,10 @@ "360e6686bfb65ed33d811d15e1ba7183a736d552", "support" ], + "preload/resources/cross-origin-module.py": [ + "f771c967124f25f694349874fa192918ae2c1d77", + "support" + ], "preload/resources/dummy-preloads-subresource.css": [ "5097166a058a166a3b2aded255744d8c70774282", "support" @@ -647893,7 +648994,7 @@ "support" ], "resources/idlharness.js": [ - "9e6ed236b0a43f32ffaecbbbb2b8fbe7540b83c5", + "926a615e59c9cd6f602c6e700494d1600ac6d0a5", "support" ], "resources/idlharness.js.headers": [ @@ -647997,7 +649098,7 @@ "support" ], "resources/test/tests/functional/idlharness/IdlInterface/test_partial_interface_of.html": [ - "ee42a37355e5b9c93607f517dc0bb2a6876b7357", + "0c752bdc6cd2c50796175a383e862af0d2bd3341", "support" ], "resources/test/tests/functional/idlharness/IdlInterface/test_primary_interface_of.html": [ @@ -648209,7 +649310,7 @@ "support" ], "resources/testdriver-actions.js": [ - "46c68858e4574646ad3efaa5a6dba10127b27a29", + "82cac85347bfa6f65a3757fa8e3c76d113ce06be", "support" ], "resources/testdriver-vendor.js": [ @@ -648221,7 +649322,7 @@ "support" ], "resources/testdriver.js": [ - "e0741e8d61d4d67c99ccbfc860f65e796c44c78a", + "8ffd765072c4e7351e95f221b447a9d8ecde5152", "support" ], "resources/testdriver.js.headers": [ @@ -649081,7 +650182,11 @@ "support" ], "screen-capture/getdisplaymedia.https.html": [ - "36e0f22933a08921b7aea57f29191b477f767e1d", + "2dd01777687bdfc18526857ee286735910bfc5aa", + "testharness" + ], + "screen-capture/historical.https.html": [ + "d510bc42089b8b386b9469c3ce99ba810ae37b63", "testharness" ], "screen-capture/idlharness.window.js": [ @@ -649369,7 +650474,7 @@ "testharness" ], "selection/idlharness.window.js": [ - "b211797777ddbca73d26372a62c27813583a5734", + "543fcb3eff5bb4fd0c51c7e4cc1e5338a0b74cbc", "testharness" ], "selection/isCollapsed.html": [ @@ -651045,7 +652150,7 @@ "testharness" ], "service-workers/service-worker/navigation-redirect.https.html": [ - "6f03fd8f2f0db54f4895d284a2ced78723d9965c", + "e8b8e9afd5820acf9422d11f4410c0158fa31732", "testharness" ], "service-workers/service-worker/navigation-timing.https.html": [ @@ -651280,6 +652385,10 @@ "53f210cf7634993f86310cdefec9a15fd6b699a0", "support" ], + "service-workers/service-worker/resources/classic-worker.js": [ + "36a32b1a1f84daaac25032261c80d173ce7ba899", + "support" + ], "service-workers/service-worker/resources/client-id-worker.js": [ "ec71b3458b7214fc7675f6f75997cc82a47cac82", "support" @@ -651840,6 +652949,10 @@ "cbe70304d89c3835663d6ab9782a44482134af7c", "support" ], + "service-workers/service-worker/resources/module-worker.js": [ + "385fe7101503cb4c7ca77e95e023459b29267741", + "support" + ], "service-workers/service-worker/resources/multipart-image-iframe.html": [ "c59b95594ff505913e856377459eba28b00b8c6d", "support" @@ -652021,7 +653134,7 @@ "support" ], "service-workers/service-worker/resources/redirect-worker.js": [ - "0c5bc3bd9aa5bff83df74ce5e0a8a244f21a85a7", + "ddcc2cf5478942292dc8c5e30d156dc42886365e", "support" ], "service-workers/service-worker/resources/redirect.py": [ @@ -652457,7 +653570,7 @@ "testharness" ], "service-workers/service-worker/update-registration-with-type.https.html": [ - "00c8a3345bb3d837c7f0004ce7436065b655476c", + "b712c30f71e9a81a2832c0cd5afe7f5630e34071", "testharness" ], "service-workers/service-worker/update-result.https.html": [ @@ -654924,6 +656037,66 @@ "000c107b53b70e4548ee320331c2ab33be967a9c", "testharness" ], + "svg/geometry/inheritance.svg": [ + "760328ac31818d86a9410fd7c412d803e30416a2", + "testharness" + ], + "svg/geometry/parsing/cx-invalid.svg": [ + "4b1b90158fcc7c1747f8b1ab382cd78f394f142c", + "testharness" + ], + "svg/geometry/parsing/cx-valid.svg": [ + "e7f627ac721fcc90597314ef0c97765566c343b3", + "testharness" + ], + "svg/geometry/parsing/cy-invalid.svg": [ + "528eed02ceadb26ff53a42c9950bf508170c2c83", + "testharness" + ], + "svg/geometry/parsing/cy-valid.svg": [ + "4372c36ea225328926030830e895f64858e73784", + "testharness" + ], + "svg/geometry/parsing/r-invalid.svg": [ + "a14c52266ce2b7b66847a18327cab0346d083115", + "testharness" + ], + "svg/geometry/parsing/r-valid.svg": [ + "70cd5503b795cef3f5db7eb4db1034d63b3e63fc", + "testharness" + ], + "svg/geometry/parsing/rx-invalid.svg": [ + "9ce0603bea13ceb2cf06c7da8ba0ac2b4ccb04a1", + "testharness" + ], + "svg/geometry/parsing/rx-valid.svg": [ + "e2b628f1de4bd8e2a3fec98fda1aa76b6af79b87", + "testharness" + ], + "svg/geometry/parsing/ry-invalid.svg": [ + "7a25a1ec0e61e4a36e65b7884d9667bb1614adfa", + "testharness" + ], + "svg/geometry/parsing/ry-valid.svg": [ + "4ce5bec4084cf0e6cf1e6744701b756cc18e2f91", + "testharness" + ], + "svg/geometry/parsing/x-invalid.svg": [ + "31ad29524e11dc5fe95c970506691953f0e611d0", + "testharness" + ], + "svg/geometry/parsing/x-valid.svg": [ + "5ff2fbd831d7373faee706538f08528dc4ac8a99", + "testharness" + ], + "svg/geometry/parsing/y-invalid.svg": [ + "d6ea944dbd649d1ec73da75e162f2ac3a3dfa818", + "testharness" + ], + "svg/geometry/parsing/y-valid.svg": [ + "24885ccfc7059dd9e26e57e3839571d2883f73c3", + "testharness" + ], "svg/historical.html": [ "1b73ca8d2236c7afdb9b331c532c84b6083f2968", "testharness" @@ -657316,6 +658489,10 @@ "bff502c22bab402ca2ef2fbd2ced5c06f1de9dcd", "reftest" ], + "svg/painting/inheritance.svg": [ + "4499b9249a84a9d7de4a5a101993ad14f9cc21c9", + "testharness" + ], "svg/painting/reftests/markers-orient-001-ref.svg": [ "871003f3a2303404696d467a7cfaad729b811206", "support" @@ -657780,6 +658957,10 @@ "51303171f09d28e3958ab74ecdce7f9cf120bd12", "testharness" ], + "svg/text/inheritance.svg": [ + "1f4609d7ac6c5384f68d109733be01c7ea915df4", + "testharness" + ], "svg/text/reftests/text-complex-001-ref.svg": [ "5ade69dce1de95954861271c0e523767230ae275", "support" @@ -658165,7 +659346,7 @@ "support" ], "tools/ci/check_stability.py": [ - "fa0cc3ba88a15e9280f04bf9ddee34e0af71db00", + "cbed7a3521d3ba7ea2b5a21dc7daa14bcdff88d7", "support" ], "tools/ci/ci_built_diff.sh": [ @@ -662953,11 +664134,15 @@ "support" ], "tools/wpt/browser.py": [ - "46afdfed64b607d09faa092eea746916f27c9d06", + "16cb075ad2dde0d42fd208ac8371d9d9c0c26d27", "support" ], "tools/wpt/commands.json": [ - "0ea6b25276ff481340b54b4c72340a3790403837", + "161a9defbd1400c69985e031e2edfc4800929359", + "support" + ], + "tools/wpt/create.py": [ + "696609a68ce28c3755620d0255fccbc47481b686", "support" ], "tools/wpt/install.py": [ @@ -662977,7 +664162,7 @@ "support" ], "tools/wpt/run.py": [ - "1894492d267532fdfdefc14a96a4eab97b42635a", + "e10f895294f7d193cfd1dcb26eed0fc9a424887a", "support" ], "tools/wpt/testfiles.py": [ @@ -662993,7 +664178,7 @@ "support" ], "tools/wpt/tests/test_run.py": [ - "94b1202736f5de76b189e3a3b2f30346f6d6727c", + "aaff0fa5331498f898dc36fcf36186cebe989927", "support" ], "tools/wpt/tests/test_wpt.py": [ @@ -663245,7 +664430,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/chrome.py": [ - "d7c21cddfd60a4077b4fe803379ca89f0109dcde", + "061e549685cad2f58b45bbad572325cbdfe87d8c", "support" ], "tools/wptrunner/wptrunner/browsers/chrome_android.py": [ @@ -663473,7 +664658,7 @@ "support" ], "tools/wptrunner/wptrunner/testloader.py": [ - "2313a80c745bfac9946119926411234c506c6654", + "8e563b85a5ab663d092ebc6c4669068d1ef9ce47", "support" ], "tools/wptrunner/wptrunner/testrunner.py": [ @@ -663589,7 +664774,7 @@ "support" ], "tools/wptrunner/wptrunner/wptmanifest/parser.py": [ - "82aad5f61350795eb9e807ca33015762e1a9f581", + "9e0ff029b847a4599f7844bec7d63e4b5834afc0", "support" ], "tools/wptrunner/wptrunner/wptmanifest/serializer.py": [ @@ -663673,7 +664858,7 @@ "support" ], "tools/wptserve/docs/pipes.rst": [ - "8faeee489c9fab71387540f996023e01a46955d7", + "df0746fd0fdeee0e4402e5a21945b198824d7483", "support" ], "tools/wptserve/docs/request.rst": [ @@ -663705,13 +664890,41 @@ "support" ], "tools/wptserve/tests/functional/base.py": [ - "190e385f1020a7a5184fa34ad5bd59a75920a15c", + "b08f5eabe46ccdb27553babbd159b1dc6287efe8", + "support" + ], + "tools/wptserve/tests/functional/docroot/bar.any.worker.js": [ + "66b7be39049eeda1dc5d83d2e00aba4fbf88dee3", "support" ], "tools/wptserve/tests/functional/docroot/document.txt": [ "611dccd84487e6429631bd7ae92268a58efdda6b", "support" ], + "tools/wptserve/tests/functional/docroot/foo.any.html": [ + "88e2665c66904211d0d8417a057df2997af8e802", + "support" + ], + "tools/wptserve/tests/functional/docroot/foo.any.serviceworker.html": [ + "8dcb11a37687ff76d84a3dba51309dc0339e6b18", + "support" + ], + "tools/wptserve/tests/functional/docroot/foo.any.sharedworker.html": [ + "277101697ff8cbe76af107826ad0fa243b75b048", + "support" + ], + "tools/wptserve/tests/functional/docroot/foo.any.worker.html": [ + "f77edd971a4ec0c5dfd48789a889f7d3c3b10a09", + "support" + ], + "tools/wptserve/tests/functional/docroot/foo.window.html": [ + "04c694ddf2aba20ec4bace871a7d3b451d5b255d", + "support" + ], + "tools/wptserve/tests/functional/docroot/foo.worker.html": [ + "3eddf36f1c3a911973b6ae31fa0c6162bcb56ecb", + "support" + ], "tools/wptserve/tests/functional/docroot/invalid.py": [ "017d4d9d697b9e4117c7c03af7b1f8eac2197105", "support" @@ -663821,11 +665034,11 @@ "support" ], "tools/wptserve/tests/functional/test_cookies.py": [ - "6bcb842e62561b5fe0f7c95b3faf5eb8a527672b", + "2e2d0d6771ba26a1fbe7e8fc8bb2e2598bc34223", "support" ], "tools/wptserve/tests/functional/test_handlers.py": [ - "759a096b79957079429ae387186d6e7891651ecf", + "db119616bd673e0b3fb4784fff0d603c7b6a05ab", "support" ], "tools/wptserve/tests/functional/test_input_file.py": [ @@ -663860,12 +665073,16 @@ "8d0f25058d49205155b84d1619f06a3a7d14cf5a", "support" ], + "tools/wptserve/tests/test_stash.py": [ + "4813504a7e1fa3ded7ef60aec5d7f063af09fec7", + "support" + ], "tools/wptserve/wptserve/__init__.py": [ "a286bfe0b3b718d3acb033d019ce955bfc68b210", "support" ], "tools/wptserve/wptserve/config.py": [ - "cb5435fdef4c20c65989f330392b918d171fad1a", + "57368f794d2344f364a44e3a0308e5f16cb8ccf2", "support" ], "tools/wptserve/wptserve/constants.py": [ @@ -663881,7 +665098,7 @@ "support" ], "tools/wptserve/wptserve/pipes.py": [ - "cbae6d6fcb93ada3773fb58e73b43c7da8b267e2", + "bb24cd310068a953bec34ac6d224e42bae3ddb3e", "support" ], "tools/wptserve/wptserve/ranges.py": [ @@ -663889,7 +665106,7 @@ "support" ], "tools/wptserve/wptserve/request.py": [ - "990774cbb9e6a1666dfd3356266ae024ea5f68db", + "b248a054d3b1f3b141d94125da9406463e5a894f", "support" ], "tools/wptserve/wptserve/response.py": [ @@ -663905,11 +665122,11 @@ "support" ], "tools/wptserve/wptserve/server.py": [ - "802ae9ca9a98feddcb68077985cf4be536d72f78", + "848fbb74c7b952a825ecbcda30cc1c4808e441fc", "support" ], "tools/wptserve/wptserve/sslutils/__init__.py": [ - "6699edb5964530e7e352497de43ff1e154b52a1d", + "e89bb96f82fbcc09a0ac792bedae8c64e838d8aa", "support" ], "tools/wptserve/wptserve/sslutils/base.py": [ @@ -663925,7 +665142,7 @@ "support" ], "tools/wptserve/wptserve/stash.py": [ - "ae48a86112333bb5ffcdf76c100d929de2b6fd91", + "d13703c16ebb2a6d7b497733dad1776760be00e0", "support" ], "tools/wptserve/wptserve/utils.py": [ @@ -664009,7 +665226,7 @@ "testharness" ], "trusted-types/HTMLElement-generic.tentative.html": [ - "2d38104511879943a4d538c9dc5b0031d7596b23", + "d1fafa70cd2768e7b98b5eab6da9f5eb77175fbc", "testharness" ], "trusted-types/Location-assign.tentative.html": [ @@ -664101,7 +665318,7 @@ "testharness" ], "trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html": [ - "2a7edab9db4aec7daa7c4e46769392f25676b07b", + "5fce3ff59e6e998bff8588acf73539147ccd8257", "testharness" ], "trusted-types/block-string-assignment-to-Location-assign.tentative.html": [ @@ -666489,7 +667706,7 @@ "support" ], "web-animations/animation-model/animation-types/property-types.js": [ - "a71783b99e14322639251f5b58ede826696a7c3a", + "519e38ae8aea2a6e5d762af56069ebddbb231838", "support" ], "web-animations/animation-model/animation-types/visibility.html": [ @@ -668205,7 +669422,7 @@ "wdspec" ], "webdriver/tests/element_click/center_point.py": [ - "21bf8f31fd8dd1c961008ab74330956dd11e14f2", + "da60a087277dc96ec456d250072a441fa78aec75", "wdspec" ], "webdriver/tests/element_click/click.py": [ @@ -668225,7 +669442,7 @@ "wdspec" ], "webdriver/tests/element_click/scroll_into_view.py": [ - "dde83a4244cb175c0ec7eafc179aacc053606682", + "5891be572fef6b4df849305d7c2475f1d42b09a5", "wdspec" ], "webdriver/tests/element_click/select.py": [ @@ -668404,6 +669621,10 @@ "3194426e1ae80f59262f8a8910494fb4507068ca", "wdspec" ], + "webdriver/tests/fullscreen_window/stress.py": [ + "b907a31f17e0167ff27a4e8ceb2ad44cd372b537", + "wdspec" + ], "webdriver/tests/fullscreen_window/user_prompts.py": [ "106bc457f0c18769afe1d9f76c39937d17783666", "wdspec" @@ -668628,6 +669849,10 @@ "b3ed7a680a9f320012b548a22a6042ab981bf449", "wdspec" ], + "webdriver/tests/maximize_window/stress.py": [ + "daa8a911928f42fabdde73c3749d96691f039167", + "wdspec" + ], "webdriver/tests/maximize_window/user_prompts.py": [ "032edc893a53a05dd0272cc081265bde6f0b5d53", "wdspec" @@ -668640,6 +669865,10 @@ "279511caf0afca09352fc312bb4f6b92b56af538", "wdspec" ], + "webdriver/tests/minimize_window/stress.py": [ + "8990f12669d70aa9693d798c6d75105c6075c3d6", + "wdspec" + ], "webdriver/tests/minimize_window/user_prompts.py": [ "19059b3c395ecd22690d999f60838257cbe93449", "wdspec" @@ -668861,7 +670090,7 @@ "support" ], "webdriver/tests/set_window_rect/set.py": [ - "c6eae2886e9e0a86f7889ddcd9a3487dca7d6d41", + "4017bc198e41ea618e73c2d71cfcb68312b0c4d0", "wdspec" ], "webdriver/tests/set_window_rect/user_prompts.py": [ @@ -668893,7 +670122,7 @@ "support" ], "webdriver/tests/support/helpers.py": [ - "6c62d756259b6677bd5e77fc6b6a48def4b3b46b", + "c955135f814c580dd93a5272987e3e508d07609b", "support" ], "webdriver/tests/support/http_request.py": [ @@ -668941,7 +670170,7 @@ "wdspec" ], "webdriver/tests/take_element_screenshot/__init__.py": [ - "d289ee3b912001e63cf3a34331098ce7b7258aa6", + "cf3b21905b774d55e7aed660fd232d60a7f99973", "support" ], "webdriver/tests/take_element_screenshot/screenshot.py": [ @@ -668953,7 +670182,7 @@ "wdspec" ], "webdriver/tests/take_screenshot/__init__.py": [ - "d38c8a0f79f81d5977d0a8dfa1a9f63e236988fb", + "13d7a623eda6a909c5fb3508f478ed989ac15907", "support" ], "webdriver/tests/take_screenshot/screenshot.py": [ @@ -669689,7 +670918,7 @@ "testharness" ], "webrtc/RTCPeerConnection-helper.js": [ - "8529fb4ef3cdf509a519608fbb4a5919c44f3e37", + "df277ff6d35585452a3a4c2af8dbde5542971794", "support" ], "webrtc/RTCPeerConnection-iceConnectionState.html": [ @@ -669729,7 +670958,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription-offer.html": [ - "49eb522881a9abb914566b42a5e7aae7063fdb8b", + "41662f3158fe886b848121ffbc9e970160666a01", "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription-pranswer.html": [ @@ -669773,7 +671002,7 @@ "testharness" ], "webrtc/RTCPeerConnection-track-stats.https.html": [ - "682e7e57e465ccde77c3d8887ce80cb5ea01bf54", + "3809530b74cac30b9f66398eaa59a97af0f81736", "testharness" ], "webrtc/RTCPeerConnection-transceivers.https.html": [ @@ -669784,8 +671013,12 @@ "7de7fcaeb10ef209ece63ad346f668e1c634c4db", "testharness" ], + "webrtc/RTCQuicStream-helper.js": [ + "a87668f5a21eebd64f810029330989c5be10f037", + "support" + ], "webrtc/RTCQuicStream.https.html": [ - "68c88e2757c2ab35736d3480dfbc6095580b06d3", + "b147414794ecc208c918834110f5513e5075172d", "testharness" ], "webrtc/RTCQuicTransport-helper.js": [ @@ -669873,7 +671106,7 @@ "testharness" ], "webrtc/RTCRtpTransceiver.https.html": [ - "7d16deaa8c7633928b39e1ed638f26e820e1e8d8", + "1614a11c1a1d6f6de8660117a47753d2c4154726", "testharness" ], "webrtc/RTCSctpTransport-constructor.html": [ @@ -671249,7 +672482,7 @@ "support" ], "webusb/resources/usb-helpers.js": [ - "161a7d270bbad085dc34300b389286dd045123a1", + "0abca1691a3aa320a82672a5f776abbfe19775b1", "support" ], "webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ @@ -675853,7 +677086,7 @@ "support" ], "worklets/resources/csp-tests.js": [ - "0de1daae22853fb4480b7d21dd1029f312215fd6", + "d2ca05f399829122136f00a720106e3dc1875c47", "support" ], "worklets/resources/empty-worklet-script-with-cors-header.js": [ @@ -675881,7 +677114,11 @@ "support" ], "worklets/resources/import-insecure-origin-empty-worklet-script.sub.js": [ - "cc7f5f348a116af3bb5b6a1dd22e0e4709448e53", + "a04a2edf81212287dac386c9d8f70f7cf18026c5", + "support" + ], + "worklets/resources/import-insecure-origin-redirected-empty-worklet-script.sub.js": [ + "888d876bff9fa6490369932a96a92f5474794e53", "support" ], "worklets/resources/import-nested-internal-worklet-script.js": [ @@ -675905,7 +677142,11 @@ "support" ], "worklets/resources/import-remote-origin-empty-worklet-script.sub.js": [ - "c30889873393c351356706b2957b65c0c0ecbac7", + "06c1f87618cf07ffbfe916820ac9533558cf38af", + "support" + ], + "worklets/resources/import-remote-origin-redirected-empty-worklet-script.sub.js": [ + "7afa3523b9f30d7cee0de68a13c452a9f59c3691", "support" ], "worklets/resources/import-remote-origin-referrer-checker-worklet-script.sub.js": [ @@ -675921,7 +677162,7 @@ "support" ], "worklets/resources/import-tests.js": [ - "5ab841cd4a6c3f42e75d8837bc333f316f66e148", + "f504588cdb065cd0616cbde27a6747beb2e145f2", "support" ], "worklets/resources/referrer-checker.py": [ @@ -675937,7 +677178,7 @@ "support" ], "worklets/resources/service-worker-interception-tests.js": [ - "16d298737772507ee0616ab138adfc227aac3619", + "1298a626e4efbea9862f5be70c16909dc3f24c78", "support" ], "worklets/resources/service-worker.js": [ diff --git a/tests/wpt/metadata/cors/access-control-expose-headers-parsing.window.js.ini b/tests/wpt/metadata/cors/access-control-expose-headers-parsing.window.js.ini index efbfad792a9..3975e0c21ed 100644 --- a/tests/wpt/metadata/cors/access-control-expose-headers-parsing.window.js.ini +++ b/tests/wpt/metadata/cors/access-control-expose-headers-parsing.window.js.ini @@ -5,3 +5,27 @@ [Access-Control-Expose-Headers parsing: #2] expected: FAIL + [Parsing: Access-Control-Expose-Headers%3A%20bb-8%2C%20no%20no] + expected: FAIL + + [Parsing: Access-Control-Expose-Headers%3A%20bb-8%0B] + expected: FAIL + + [Parsing: Access-Control-Expose-Headers%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cbb-8] + expected: FAIL + + [Parsing: Access-Control-Expose-Headers%3A%20bb-8%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] + expected: FAIL + + [Parsing: Access-Control-Expose-Headers%3A%20%22bb-8%22%2Cbb-8] + expected: FAIL + + [Parsing: Access-Control-Expose-Headers%3A%20bb-8%0B%2Cbb-8] + expected: FAIL + + [Parsing: Access-Control-Expose-Headers%3A%20bb-8%0D%0AAccess-Control-Expose-Headers%3A%20no%20no] + expected: FAIL + + [Parsing: Access-Control-Expose-Headers%3A%20bb-8%0C] + expected: FAIL + diff --git a/tests/wpt/metadata/cors/cors-safelisted-request-header.any.js.ini b/tests/wpt/metadata/cors/cors-safelisted-request-header.any.js.ini new file mode 100644 index 00000000000..654464bc02d --- /dev/null +++ b/tests/wpt/metadata/cors/cors-safelisted-request-header.any.js.ini @@ -0,0 +1,39 @@ +[cors-safelisted-request-header.any.worker.html] + [No preflight for {"content-type":"text/plain;"}] + expected: FAIL + + [Preflight for {"content-type":"text/plain\\f"}] + expected: FAIL + + [Preflight for {"content-type":"application/x-www-form-urlencoded;"}] + expected: FAIL + + [No preflight for {"content-type":"text/plain;garbage"}] + expected: FAIL + + [Preflight for {"content-type":"text/plain;garbage\\u0001\\u0002"}] + expected: FAIL + + [Preflight for {"content-type":"text/plain\\u000b"}] + expected: FAIL + + +[cors-safelisted-request-header.any.html] + [No preflight for {"content-type":"text/plain;"}] + expected: FAIL + + [Preflight for {"content-type":"text/plain\\f"}] + expected: FAIL + + [Preflight for {"content-type":"application/x-www-form-urlencoded;"}] + expected: FAIL + + [No preflight for {"content-type":"text/plain;garbage"}] + expected: FAIL + + [Preflight for {"content-type":"text/plain;garbage\\u0001\\u0002"}] + expected: FAIL + + [Preflight for {"content-type":"text/plain\\u000b"}] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/flex-wrap-002.html.ini b/tests/wpt/metadata/css/css-flexbox/flex-wrap-002.html.ini new file mode 100644 index 00000000000..4de5819c0b2 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/flex-wrap-002.html.ini @@ -0,0 +1,2 @@ +[flex-wrap-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/tab-stop-threshold-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/tab-stop-threshold-001.html.ini new file mode 100644 index 00000000000..745df31c422 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/tab-stop-threshold-001.html.ini @@ -0,0 +1,2 @@ +[tab-stop-threshold-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/tab-stop-threshold-002.html.ini b/tests/wpt/metadata/css/css-text/white-space/tab-stop-threshold-002.html.ini new file mode 100644 index 00000000000..03ea5114da9 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/tab-stop-threshold-002.html.ini @@ -0,0 +1,2 @@ +[tab-stop-threshold-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/parsing/rotate-parsing-valid.html.ini b/tests/wpt/metadata/css/css-transforms/parsing/rotate-parsing-valid.html.ini index 789ea6f6fcc..bc107c5939d 100644 --- a/tests/wpt/metadata/css/css-transforms/parsing/rotate-parsing-valid.html.ini +++ b/tests/wpt/metadata/css/css-transforms/parsing/rotate-parsing-valid.html.ini @@ -20,3 +20,12 @@ [e.style['rotate'\] = "400grad z" should set the property value] expected: FAIL + [e.style['rotate'\] = "1 0 0 400grad" should set the property value] + expected: FAIL + + [e.style['rotate'\] = "0 1 0 400grad" should set the property value] + expected: FAIL + + [e.style['rotate'\] = "0 0 1 400grad" should set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini index 8850ec200da..08392616318 100644 --- a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini +++ b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini @@ -71,6 +71,9 @@ [text-indent intermediate] expected: FAIL - [opacity end] + [border-top-width end] + expected: FAIL + + [border-bottom-width end] 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 new file mode 100644 index 00000000000..23f053f4f4a --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini @@ -0,0 +1,4 @@ +[elementsFromPoint-invalid-cases.html] + [The root element is the last element returned for valid queries] + expected: FAIL + diff --git a/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic-background-color.html.ini b/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic-background-color.html.ini new file mode 100644 index 00000000000..7bf80abd498 --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic-background-color.html.ini @@ -0,0 +1,2 @@ +[backdrop-filter-basic-background-color.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic-opacity.html.ini b/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic-opacity.html.ini new file mode 100644 index 00000000000..549ec344384 --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic-opacity.html.ini @@ -0,0 +1,2 @@ +[backdrop-filter-basic-opacity.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic.html.ini b/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic.html.ini new file mode 100644 index 00000000000..41f934fc9fe --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/backdrop-filter-basic.html.ini @@ -0,0 +1,2 @@ +[backdrop-filter-basic.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/backdrop-filter-border-radius.html.ini b/tests/wpt/metadata/css/filter-effects/backdrop-filter-border-radius.html.ini new file mode 100644 index 00000000000..e65378d0e3f --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/backdrop-filter-border-radius.html.ini @@ -0,0 +1,2 @@ +[backdrop-filter-border-radius.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/backdrop-filter-isolation-isolate.html.ini b/tests/wpt/metadata/css/filter-effects/backdrop-filter-isolation-isolate.html.ini new file mode 100644 index 00000000000..fba10fccfed --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/backdrop-filter-isolation-isolate.html.ini @@ -0,0 +1,2 @@ +[backdrop-filter-isolation-isolate.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/backdrop-filter-isolation.html.ini b/tests/wpt/metadata/css/filter-effects/backdrop-filter-isolation.html.ini new file mode 100644 index 00000000000..ac98c983cc8 --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/backdrop-filter-isolation.html.ini @@ -0,0 +1,2 @@ +[backdrop-filter-isolation.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/filter-contrast-003.html.ini b/tests/wpt/metadata/css/filter-effects/filter-contrast-003.html.ini deleted file mode 100644 index 1aa79453005..00000000000 --- a/tests/wpt/metadata/css/filter-effects/filter-contrast-003.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[filter-contrast-003.html] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/filter-grayscale-002.html.ini b/tests/wpt/metadata/css/filter-effects/filter-grayscale-002.html.ini deleted file mode 100644 index 92dcd8011eb..00000000000 --- a/tests/wpt/metadata/css/filter-effects/filter-grayscale-002.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[filter-grayscale-002.html] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/filter-grayscale-003.html.ini b/tests/wpt/metadata/css/filter-effects/filter-grayscale-003.html.ini deleted file mode 100644 index 23655f850b3..00000000000 --- a/tests/wpt/metadata/css/filter-effects/filter-grayscale-003.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[filter-grayscale-003.html] - type: reftest - expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/filtered-block-is-container.html.ini b/tests/wpt/metadata/css/filter-effects/filtered-block-is-container.html.ini new file mode 100644 index 00000000000..34cbb382e03 --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/filtered-block-is-container.html.ini @@ -0,0 +1,2 @@ +[filtered-block-is-container.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/filtered-html-is-not-container.html.ini b/tests/wpt/metadata/css/filter-effects/filtered-html-is-not-container.html.ini new file mode 100644 index 00000000000..b366310b98b --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/filtered-html-is-not-container.html.ini @@ -0,0 +1,2 @@ +[filtered-html-is-not-container.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/filters-test-brightness-003.html.ini b/tests/wpt/metadata/css/filter-effects/filters-test-brightness-003.html.ini new file mode 100644 index 00000000000..df5382158af --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/filters-test-brightness-003.html.ini @@ -0,0 +1,2 @@ +[filters-test-brightness-003.html] + expected: FAIL diff --git a/tests/wpt/metadata/encoding/utf-32-from-win1252.html.ini b/tests/wpt/metadata/encoding/utf-32-from-win1252.html.ini new file mode 100644 index 00000000000..e4de65f4aa2 --- /dev/null +++ b/tests/wpt/metadata/encoding/utf-32-from-win1252.html.ini @@ -0,0 +1,16 @@ +[utf-32-from-win1252.html] + [Expect resources/utf-32-little-endian-bom.xml to parse as UTF-16LE] + expected: FAIL + + [Expect resources/utf-32-little-endian-bom.html to parse as UTF-16LE] + expected: FAIL + + [Expect resources/utf-32-big-endian-bom.html to parse as windows-1252] + expected: FAIL + + [Expect resources/utf-32-little-endian-nobom.html to parse as windows-1252] + expected: FAIL + + [Expect resources/utf-32-big-endian-nobom.html to parse as windows-1252] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html.ini b/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html.ini new file mode 100644 index 00000000000..310f1af3ccf --- /dev/null +++ b/tests/wpt/metadata/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html.ini @@ -0,0 +1,11 @@ +[document_domain_feature_policy.tentative.sub.html] + expected: TIMEOUT + [Default "document-domain" feature policy ["*"\] allows cross-origin iframes.] + expected: TIMEOUT + + [Default "document-domain" feature policy ["*"\] allows same-origin iframes.] + expected: TIMEOUT + + [Feature policy "document-domain" can be disabled in cross-origin iframes using "allow" attribute.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini index 22d1f1d6900..a6f7ac6f249 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html.ini @@ -5,5 +5,5 @@ expected: NOTRUN [calling play() on a sufficiently long video should trigger timeupdate event] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini index 5125b59a955..e879de13c09 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini @@ -5,14 +5,29 @@ expected: TIMEOUT [picture: source (max-width:500px) valid image, img valid image, resize to wide] - expected: TIMEOUT + expected: FAIL [picture: source (max-width:500px) valid image, img broken image, resize to narrow] expected: TIMEOUT [picture: source (max-width:500px) valid image, img valid image, resize to narrow] - expected: TIMEOUT + expected: FAIL [picture: same URL in source (max-width:500px) and img, resize to narrow] expected: FAIL + [picture: source (max-width:500px) broken image, img valid image, resize to narrow] + expected: FAIL + + [img (srcset 1 cand) valid image, resize to wide] + expected: FAIL + + [picture: same URL in source (max-width:500px) and img, resize to wide] + expected: FAIL + + [img (srcset 1 cand) valid image, resize to narrow] + expected: FAIL + + [picture: source (max-width:500px) valid image, img broken image, resize to wide] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini index 72a023d1ce4..caa0aa5f39e 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini @@ -1,5 +1,4 @@ [parse-a-sizes-attribute-standards-mode.html] - expected: TIMEOUT [ ref sizes="1px" (standards mode)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini b/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini index b4e046a284f..46cbb336bee 100644 --- a/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/the-input-element/type-change-state.html.ini @@ -36,45 +36,12 @@ [change state from tel to range] expected: FAIL - [change state from url to text] - expected: FAIL - - [change state from url to search] - expected: FAIL - - [change state from url to tel] - expected: FAIL - - [change state from url to password] - expected: FAIL - [change state from url to datetime] expected: FAIL [change state from url to range] expected: FAIL - [change state from email to hidden] - expected: FAIL - - [change state from email to checkbox] - expected: FAIL - - [change state from email to radio] - expected: FAIL - - [change state from email to submit] - expected: FAIL - - [change state from email to image] - expected: FAIL - - [change state from email to reset] - expected: FAIL - - [change state from email to button] - expected: FAIL - [change state from email to datetime] expected: FAIL @@ -141,27 +108,6 @@ [change state from number to range] expected: FAIL - [change state from range to hidden] - expected: FAIL - - [change state from range to checkbox] - expected: FAIL - - [change state from range to radio] - expected: FAIL - - [change state from range to submit] - expected: FAIL - - [change state from range to image] - expected: FAIL - - [change state from range to reset] - expected: FAIL - - [change state from range to button] - expected: FAIL - [change state from range to email] expected: FAIL @@ -222,21 +168,6 @@ [change state from datetime-local to range] expected: FAIL - [change state from range to text] - expected: FAIL - - [change state from range to search] - expected: FAIL - - [change state from range to tel] - expected: FAIL - - [change state from range to url] - expected: FAIL - - [change state from range to password] - expected: FAIL - [change state from color to range] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini deleted file mode 100644 index 9e522297c94..00000000000 --- a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini +++ /dev/null @@ -1,7 +0,0 @@ -[toggleEvent.html] - [Calling open twice on 'details' fires only one toggle event] - expected: FAIL - - [Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element] - expected: FAIL - diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-xml.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-xml.window.js.ini index 2314441517b..25f0d603b3d 100644 --- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-xml.window.js.ini +++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-exception-vs-return-xml.window.js.ini @@ -9,6 +9,3 @@ [document.open should throw an InvalidStateError with XML document even when the ignore-opens-during-unload counter is greater than 0 (during pagehide event)] expected: FAIL - [document.open should throw an InvalidStateError with XML document even when there is an active parser executing script] - expected: FAIL - diff --git a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini index 7725b118e9d..99a24216c88 100644 --- a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini +++ b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini @@ -12,6 +12,3 @@ [Verifies the resolution of entry.startTime is at least 5 microseconds.] expected: TIMEOUT - [Verifies the resolution of performance.now() is at least 5 microseconds.] - expected: FAIL - diff --git a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini similarity index 99% rename from tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini rename to tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini index c7e9c7434f5..818a429ed39 100644 --- a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini +++ b/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini @@ -1,4 +1,4 @@ -[limited-quirks.html] +[no-quirks.html] [top: -\\31 .5] expected: FAIL diff --git a/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini new file mode 100644 index 00000000000..2ed601c6ff4 --- /dev/null +++ b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini @@ -0,0 +1,283 @@ +[quirks.html] + [top: -\\31 .5] + expected: FAIL + + [bottom: -1A] + expected: FAIL + + [bottom: -1a] + expected: FAIL + + [top: @1] + expected: FAIL + + [top: "1a"] + expected: FAIL + + [top: @a] + expected: FAIL + + [bottom: "1"] + expected: FAIL + + [bottom: -/**/1] + expected: FAIL + + [top: +/**/1] + expected: FAIL + + [bottom: @1a] + expected: FAIL + + [top: 1\\31 ] + expected: FAIL + + [top: url('1')] + expected: FAIL + + [bottom: -\\31 ] + expected: FAIL + + [top: calc(1)] + expected: FAIL + + [top: \\31 ] + expected: FAIL + + [bottom: +1\\31 ] + expected: FAIL + + [bottom: 1\\31 .5] + expected: FAIL + + [bottom: #0001] + expected: FAIL + + [top: calc(2 * 2px)] + expected: FAIL + + [bottom: 1a] + expected: FAIL + + [bottom: A] + expected: FAIL + + [bottom: #01] + expected: FAIL + + [top: +\\31 .5] + expected: FAIL + + [bottom: #1] + expected: FAIL + + [top: -/**/1] + expected: FAIL + + [bottom: +\\31 .5] + expected: FAIL + + [bottom: \\31 ] + expected: FAIL + + [bottom: calc(1)] + expected: FAIL + + [top: #001] + expected: FAIL + + [top: +\\31 ] + expected: FAIL + + [bottom: +\\31 ] + expected: FAIL + + [top: +1.5] + expected: FAIL + + [top: +1\\31 ] + expected: FAIL + + [bottom: @a] + expected: FAIL + + [bottom: @1] + expected: FAIL + + [top: #1] + expected: FAIL + + [top: 1a] + expected: FAIL + + [bottom: +1a] + expected: FAIL + + [bottom: +1A] + expected: FAIL + + [bottom: "a"] + expected: FAIL + + [top: #00001] + expected: FAIL + + [bottom: -1\\31 .5] + expected: FAIL + + [top: "1"] + expected: FAIL + + [bottom: 1.5] + expected: FAIL + + [bottom: -\\31 .5] + expected: FAIL + + [bottom: url('1')] + expected: FAIL + + [bottom: -1.5] + expected: FAIL + + [top: \\31 .5] + expected: FAIL + + [bottom: "1a"] + expected: FAIL + + [bottom: calc(2 * 2px)] + expected: FAIL + + [bottom: +1\\31 .5] + expected: FAIL + + [bottom: 1\\31 ] + expected: FAIL + + [bottom: +/**/1] + expected: FAIL + + [bottom: #00001] + expected: FAIL + + [top: url(1)] + expected: FAIL + + [bottom: #001] + expected: FAIL + + [top: +1\\31 .5] + expected: FAIL + + [top: -1a] + expected: FAIL + + [top: -1A] + expected: FAIL + + [bottom: url(1)] + expected: FAIL + + [top: a] + expected: FAIL + + [top: A] + expected: FAIL + + [top: #000001] + expected: FAIL + + [top: 1] + expected: FAIL + + [top: 1\\31 .5] + expected: FAIL + + [bottom: a] + expected: FAIL + + [bottom: 1] + expected: FAIL + + [bottom: +1] + expected: FAIL + + [bottom: #000001] + expected: FAIL + + [bottom: +a] + expected: FAIL + + [bottom: +A] + expected: FAIL + + [top: 1.5] + expected: FAIL + + [top: +A] + expected: FAIL + + [top: +a] + expected: FAIL + + [top: +1] + expected: FAIL + + [top: -1.5] + expected: FAIL + + [top: -1\\31 .5] + expected: FAIL + + [top: +1a] + expected: FAIL + + [top: +1A] + expected: FAIL + + [top: @1a] + expected: FAIL + + [bottom: \\31 .5] + expected: FAIL + + [top: "a"] + expected: FAIL + + [top: #01] + expected: FAIL + + [bottom: +1.5] + expected: FAIL + + [bottom: -A] + expected: FAIL + + [bottom: -a] + expected: FAIL + + [bottom: -1\\31 ] + expected: FAIL + + [top: #0001] + expected: FAIL + + [bottom: -1] + expected: FAIL + + [top: -\\31 ] + expected: FAIL + + [top: -A] + expected: FAIL + + [top: -a] + expected: FAIL + + [top: -1] + expected: FAIL + + [top: -1\\31 ] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini index 9d72f08e38e..f806a845a2a 100644 --- a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini +++ b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini @@ -1,5 +1,6 @@ [005.html] type: testharness + expected: ERROR [dedicated worker in shared worker in dedicated worker] expected: FAIL diff --git a/tests/wpt/metadata/xhr/overridemimetype-blob.html.ini b/tests/wpt/metadata/xhr/overridemimetype-blob.html.ini index 92513ff0e20..e6daede70e3 100644 --- a/tests/wpt/metadata/xhr/overridemimetype-blob.html.ini +++ b/tests/wpt/metadata/xhr/overridemimetype-blob.html.ini @@ -210,3 +210,171 @@ [39) MIME types need to be parsed and serialized: x/x;test] expected: FAIL + [16) MIME types need to be parsed and serialized: text/html;charset='gbk'] + expected: FAIL + + [63) MIME types need to be parsed and serialized: ] + expected: FAIL + + [23) MIME types need to be parsed and serialized: text/html;";charset=gbk] + expected: FAIL + + [13) MIME types need to be parsed and serialized: text/html;charset=\x0cgbk] + expected: FAIL + + [47) MIME types need to be parsed and serialized: x/x\n\r\t ;x=x] + expected: FAIL + + [60) MIME types need to be parsed and serialized: bogus/] + expected: FAIL + + [37) MIME types need to be parsed and serialized: text/html;charset=";charset=GBK] + expected: FAIL + + [61) MIME types need to be parsed and serialized: bogus/ ] + expected: FAIL + + [30) MIME types need to be parsed and serialized: text/html;charset=gbk"] + expected: FAIL + + [29) MIME types need to be parsed and serialized: text/html;charset="gbk] + expected: FAIL + + [57) MIME types need to be parsed and serialized: \t] + expected: FAIL + + [27) MIME types need to be parsed and serialized: text/html;charset=";charset=foo";charset=GBK] + expected: FAIL + + [14) MIME types need to be parsed and serialized: text/html;\x0bcharset=gbk] + expected: FAIL + + [56) MIME types need to be parsed and serialized: ] + expected: FAIL + + [65) MIME types need to be parsed and serialized: ÿ/ÿ] + expected: FAIL + + [59) MIME types need to be parsed and serialized: bogus] + expected: FAIL + + [51) MIME types need to be parsed and serialized: x/x;test=�;x=x] + expected: FAIL + + [64) MIME types need to be parsed and serialized: (/)] + expected: FAIL + + [44) MIME types need to be parsed and serialized: x/x;test="\\] + expected: FAIL + + [26) MIME types need to be parsed and serialized: text/html;charset= ";charset=GBK] + expected: FAIL + + [17) MIME types need to be parsed and serialized: text/html;charset='gbk] + expected: FAIL + + [25) MIME types need to be parsed and serialized: text/html;;;;charset=gbk] + expected: FAIL + + [66) MIME types need to be parsed and serialized: text/html(;doesnot=matter] + expected: FAIL + + [19) MIME types need to be parsed and serialized: text/html;charset=';charset=GBK] + expected: FAIL + + [21) MIME types need to be parsed and serialized: text/html;test=;charset=gbk] + expected: FAIL + + [20) MIME types need to be parsed and serialized: text/html;test;charset=gbk] + expected: FAIL + + [15) MIME types need to be parsed and serialized: text/html;\x0ccharset=gbk] + expected: FAIL + + [62) MIME types need to be parsed and serialized: bogus/bogus/;] + expected: FAIL + + [33) MIME types need to be parsed and serialized: text/html;charset="\\ gbk"] + expected: FAIL + + [67) MIME types need to be parsed and serialized: {/}] + expected: FAIL + + [35) MIME types need to be parsed and serialized: text/html;charset="gbk"x] + expected: FAIL + + [28) MIME types need to be parsed and serialized: text/html;charset="gbk"] + expected: FAIL + + [46) MIME types need to be parsed and serialized: x/x;x=\t] + expected: FAIL + + [68) MIME types need to be parsed and serialized: Ā/Ā] + expected: FAIL + + [50) MIME types need to be parsed and serialized: text/html;test=ÿ;charset=gbk] + expected: FAIL + + [41) MIME types need to be parsed and serialized: !#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz] + expected: FAIL + + [54) MIME types need to be parsed and serialized: x/x\x0b] + expected: FAIL + + [42) MIME types need to be parsed and serialized: x/x;x="\t !\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"] + expected: FAIL + + [43) MIME types need to be parsed and serialized: x/x;test] + expected: FAIL + + [36) MIME types need to be parsed and serialized: text/html;charset="";charset=GBK] + expected: FAIL + + [38) MIME types need to be parsed and serialized: text/html;charset={gbk}] + expected: FAIL + + [34) MIME types need to be parsed and serialized: text/html;charset="\\g\\b\\k"] + expected: FAIL + + [45) MIME types need to be parsed and serialized: x/x;x= ] + expected: FAIL + + [52) MIME types need to be parsed and serialized: \x0bx/x] + expected: FAIL + + [48) MIME types need to be parsed and serialized: \n\r\t x/x;x=x\n\r\t ] + expected: FAIL + + [31) MIME types need to be parsed and serialized: text/html;charset=" gbk"] + expected: FAIL + + [49) MIME types need to be parsed and serialized: x/x;\n\r\t x=x\n\r\t ;x=y] + expected: FAIL + + [22) MIME types need to be parsed and serialized: text/html;';charset=gbk] + expected: FAIL + + [58) MIME types need to be parsed and serialized: /] + expected: FAIL + + [12) MIME types need to be parsed and serialized: text/html;charset=\x0bgbk] + expected: FAIL + + [32) MIME types need to be parsed and serialized: text/html;charset="gbk "] + expected: FAIL + + [53) MIME types need to be parsed and serialized: \x0cx/x] + expected: FAIL + + [55) MIME types need to be parsed and serialized: x/x\x0c] + expected: FAIL + + [24) MIME types need to be parsed and serialized: text/html ; ; charset=gbk] + expected: FAIL + + [18) MIME types need to be parsed and serialized: text/html;charset=gbk'] + expected: FAIL + + [39) MIME types need to be parsed and serialized: text/html;0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789=x;charset=gbk] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js b/tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js index 725e56d3f34..9b23d650baf 100644 --- a/tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js +++ b/tests/wpt/web-platform-tests/bluetooth/resources/bluetooth-helpers.js @@ -26,8 +26,9 @@ function performChromiumSetup() { // Load the Chromium-specific resources. let prefix = '/resources/chromium'; let extra = []; - if (window.location.pathname.includes('/LayoutTests/')) { - let root = window.location.pathname.match(/.*LayoutTests/); + const pathname = window.location.pathname; + if (pathname.includes('/LayoutTests/') || pathname.includes('/web_tests/')) { + let root = pathname.match(/.*(?:LayoutTests|web_tests)/); prefix = `${root}/external/wpt/resources/chromium`; extra = [ `${root}/resources/bluetooth/bluetooth-fake-adapter.js`, diff --git a/tests/wpt/web-platform-tests/cors/access-control-expose-headers-parsing.window.js b/tests/wpt/web-platform-tests/cors/access-control-expose-headers-parsing.window.js index 58e7395cf83..a139ff6f1e7 100644 --- a/tests/wpt/web-platform-tests/cors/access-control-expose-headers-parsing.window.js +++ b/tests/wpt/web-platform-tests/cors/access-control-expose-headers-parsing.window.js @@ -1,13 +1,15 @@ -function exposeTest(resource, desc) { - const url = new URL("resources/" + resource, location.href).href.replace("://", "://élève."); +promise_test(() => fetch("resources/access-control-expose-headers.json").then(res => res.json()).then(runTests), "Loading JSON…"); - promise_test(() => { - return fetch(url).then(res => { - assert_equals(res.headers.get("content-language"), "sure") - assert_equals(res.headers.get("x-custom"), null); - }) - }, "Access-Control-Expose-Headers parsing: " + desc); +function runTests(allTestData) { + allTestData.forEach(testData => { + const encodedInput = encodeURIComponent(testData.input); + promise_test(() => { + const relativeURL = "resources/expose-headers.py?expose=" + encodedInput, + url = new URL(relativeURL, location.href).href.replace("://", "://élève."); + return fetch(url).then(res => { + assert_equals(res.headers.get("content-language"), "mkay"); + assert_equals(res.headers.get("bb-8"), (testData.exposed ? "hey" : null)); + }); + }, "Parsing: " + encodedInput); + }) } - -exposeTest("access-control-expose-headers-parsing.asis", "#1"); -exposeTest("access-control-expose-headers-parsing-2.asis", "#2") diff --git a/tests/wpt/web-platform-tests/cors/cors-safelisted-request-header.any.js b/tests/wpt/web-platform-tests/cors/cors-safelisted-request-header.any.js new file mode 100644 index 00000000000..d7bb5e70b8e --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/cors-safelisted-request-header.any.js @@ -0,0 +1,43 @@ +// META: script=support.js?pipe=sub +// META: script=/common/utils.js + +// This is based on simple-requests.htm, with modifications to make the code more modern and test +// more esoteric cases of header value parsing. + +function safelist(headers, expectPreflight = false) { + promise_test(async t => { + const uuid = token(), + url = CROSSDOMAIN + "resources/preflight.py?token=" + uuid, + checkURL = "resources/preflight.py?check&token=" + uuid, + request = () => fetch(url, { method: "POST", headers, body: "data" }); + if (expectPreflight) { + await promise_rejects(t, TypeError(), request()); + } else { + const response = await request(); + assert_equals(response.headers.get("content-type"), "text/plain"); + assert_equals(await response.text(), "NO"); + } + const checkResponse = await fetch(checkURL, { method: "POST", body: "data" }); + assert_equals(await checkResponse.text(), (expectPreflight ? "1" : "0")); + }, (expectPreflight ? "Preflight" : "No preflight") + " for " + JSON.stringify(headers)); +} + +[ + ["text /plain", true], + ["text\t/\tplain", true], + ["text/plain;"], + ["text/plain;garbage"], + ["text/plain;garbage\u0001\u0002", true], + ["text/plain,", true], + [",text/plain", true], + ["text/plain,text/plain", true], + ["text/plain,x/x", true], + ["text/plain\u000B", true], + ["text/plain\u000C", true], + ["application/www-form-urlencoded", true], + ["application/x-www-form-urlencoded;\u007F", true], + ["multipart/form-data"], + ["multipart/form-data;\"", true] +].forEach(([mimeType, preflight = false]) => { + safelist({"content-type": mimeType}, preflight); +}) diff --git a/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing-2.asis b/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing-2.asis deleted file mode 100644 index 9628a67ff14..00000000000 --- a/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing-2.asis +++ /dev/null @@ -1,8 +0,0 @@ -HTTP/1.1 200 OK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: not valid -Access-Control-Expose-Headers: x-custom -X-Custom: test -Content-Language: sure - -TEST diff --git a/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing.asis b/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing.asis deleted file mode 100644 index 7a4b2a12b60..00000000000 --- a/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers-parsing.asis +++ /dev/null @@ -1,7 +0,0 @@ -HTTP/1.1 200 OK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: not valid, x-custom -X-Custom: test -Content-Language: sure - -TEST diff --git a/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers.json b/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers.json new file mode 100644 index 00000000000..e8915f7ffe1 --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/resources/access-control-expose-headers.json @@ -0,0 +1,62 @@ +[ + { + "input": "access-control-expose-headers: BB-8", + "exposed": true + }, + { + "input": "Access-Control-Expose-Headers: bb-8,,@#$#%%&^&^*()()11!", + "exposed": false + }, + { + "input": "Access-Control-Expose-Headers: bb-8, no no", + "exposed": false + }, + { + "input": "Access-Control-Expose-Headers: @#$#%%&^&^*()()11!,bb-8", + "exposed": false + }, + { + "input": "Access-Control-Expose-Headers: bb-8\r\nAccess-Control-Expose-Headers: no", + "exposed": true + }, + { + "input": "Access-Control-Expose-Headers: bb-8\r\nAccess-Control-Expose-Headers: no no", + "exposed": false + }, + { + "input": "Access-Control-Expose-Headers: no\r\nAccess-Control-Expose-Headers: bb-8", + "exposed": true + }, + { + "input": "Access-Control-Expose-Headers:\r\nAccess-Control-Expose-Headers: bb-8", + "exposed": true + }, + { + "input": "Access-Control-Expose-Headers: ,bb-8", + "exposed": true + }, + { + "input": "Access-Control-Expose-Headers: bb-8\u000C", + "exposed": false + }, + { + "input": "Access-Control-Expose-Headers: bb-8\u000B", + "exposed": false + }, + { + "input": "Access-Control-Expose-Headers: bb-8\u000B,bb-8", + "exposed": false + }, + { + "input": "Access-Control-Expose-Headers: 'bb-8'", + "exposed": false + }, + { + "input": "Access-Control-Expose-Headers: 'bb-8',bb-8", + "exposed": true + }, + { + "input": "Access-Control-Expose-Headers: \"bb-8\",bb-8", + "exposed": false + } +] diff --git a/tests/wpt/web-platform-tests/cors/resources/expose-headers.py b/tests/wpt/web-platform-tests/cors/resources/expose-headers.py new file mode 100644 index 00000000000..c350b3b87be --- /dev/null +++ b/tests/wpt/web-platform-tests/cors/resources/expose-headers.py @@ -0,0 +1,10 @@ +def main(request, response): + response.add_required_headers = False + output = "HTTP/1.1 221 ALL YOUR BASE BELONG TO H1\r\n" + output += "Access-Control-Allow-Origin: *\r\n" + output += "BB-8: hey\r\n" + output += "Content-Language: mkay\r\n" + output += request.GET.first("expose") + "\r\n" + output += "\r\n" + response.writer.write(output) + response.close_connection = True diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size-one-value-1x1-image.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size-one-value-1x1-image.html new file mode 100644 index 00000000000..5caf2d49566 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size-one-value-1x1-image.html @@ -0,0 +1,22 @@ + + + + CSS Background Test: A single size value with a 1x1 image should work as intended + + + + + + +
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/background-size-one-value-1x1-image-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/background-size-one-value-1x1-image-ref.html new file mode 100644 index 00000000000..0a0404a9b5c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/background-size-one-value-1x1-image-ref.html @@ -0,0 +1,20 @@ + + + + CSS Background Test Reference + + + + +
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-filter/META.yml b/tests/wpt/web-platform-tests/css/css-filter/META.yml deleted file mode 100644 index 8d0683319b0..00000000000 --- a/tests/wpt/web-platform-tests/css/css-filter/META.yml +++ /dev/null @@ -1,3 +0,0 @@ -spec: https://drafts.fxtf.org/filter-effects/ -suggested_reviewers: - - chrishtr diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/flex-wrap-002.html b/tests/wpt/web-platform-tests/css/css-flexbox/flex-wrap-002.html new file mode 100644 index 00000000000..d2e07afb45f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/flex-wrap-002.html @@ -0,0 +1,30 @@ + + + +css-flexbox: Tests that we size items in a wrapping column flexbox as fit-content + + + +

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

+ + +
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/flex-wrap-003.html b/tests/wpt/web-platform-tests/css/css-flexbox/flex-wrap-003.html new file mode 100644 index 00000000000..a76e4449fb2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/flex-wrap-003.html @@ -0,0 +1,23 @@ + + + +css-flexbox: Tests that we size items in a wrapping column flexbox as fit-content + + + +

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

+ + +
+ +
+
+ +
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-001-ref.html new file mode 100644 index 00000000000..31a9ef3db8e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-001-ref.html @@ -0,0 +1,95 @@ + + +CSS container Layout Test Reference + + + +

The test passes if it has the same output than the reference.

+ +
+ +

direction: ltr;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+ +
+ +

direction: rtl;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-001.html new file mode 100644 index 00000000000..1b3c6eef691 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-001.html @@ -0,0 +1,92 @@ + + +CSS Grid Layout Test: Grid container with scrollbars + + + + + + + +

The test passes if it has the same output than the reference.

+ +
+ +

direction: ltr;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+ +
+ +

direction: rtl;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html new file mode 100644 index 00000000000..512fb8a81d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html @@ -0,0 +1,96 @@ + + +CSS container Layout Test Reference + + + +

The test passes if it has the same output than the reference.

+ +
+ +

direction: ltr;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+ +
+ +

direction: rtl;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html new file mode 100644 index 00000000000..ecdc7b76840 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html @@ -0,0 +1,93 @@ + + +CSS Grid Layout Test: Grid container with scrollbars + + + + + + + +

The test passes if it has the same output than the reference.

+ +
+ +

direction: ltr;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+ +
+ +

direction: rtl;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html new file mode 100644 index 00000000000..d8eeedfa07d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html @@ -0,0 +1,96 @@ + + +CSS container Layout Test Reference + + + +

The test passes if it has the same output than the reference.

+ +
+ +

direction: ltr;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+ +
+ +

direction: rtl;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html new file mode 100644 index 00000000000..f2ab39ff505 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html @@ -0,0 +1,93 @@ + + +CSS Grid Layout Test: Grid container with scrollbars + + + + + + + +

The test passes if it has the same output than the reference.

+ +
+ +

direction: ltr;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+ +
+ +

direction: rtl;

+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
+
item
+
+ +
diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-areas-valid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-areas-valid.html index 8d8f6823267..9c9bd47ec89 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-areas-valid.html +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-areas-valid.html @@ -19,11 +19,10 @@ test_valid_value("grid-template-areas", '"1st 2nd 3rd"'); test_valid_value("grid-template-areas", '"first second" "third fourth"'); test_valid_value("grid-template-areas", '"first second" "third ." "1st 2nd" "3rd 4th"'); -// Firefox preserves specific whitespace and full stop sequences. -// Other browsers consolidate to ' ' and '.' -test_valid_value("grid-template-areas", '" a \t b "', '"a b"'); // Fails in Firefox -test_valid_value("grid-template-areas", '"c\td"', ['"c d"', '"c\\9 d"']); -test_valid_value("grid-template-areas", '"first ..."', ['"first ."', '"first ..."']); +// https://github.com/w3c/csswg-drafts/issues/3261 +test_valid_value("grid-template-areas", '" a \t b "', '"a b"'); +test_valid_value("grid-template-areas", '"c\td"', '"c d"'); +test_valid_value("grid-template-areas", '"first ..."', '"first ."'); diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-margin-003.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-margin-003.html new file mode 100644 index 00000000000..b509d2eed75 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-margin-003.html @@ -0,0 +1,49 @@ + + + + CSS Multi-column Layout Test: multi-column and margin bottom of last child + + + + + + + + + +

Test passes if there is a filled green square.

+
+
a1 a2 a3 a4
+
a5
+
+
b1 b2
+ + + + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-001-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-001-ref.html new file mode 100644 index 00000000000..9f76ea15a0d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-001-ref.html @@ -0,0 +1,28 @@ + + + + CSS Multi-column Layout Test Reference: Add the spanner as the first child of the columns + + + + + + +
+

spanner

+
block1
+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-001.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-001.html new file mode 100644 index 00000000000..82b240cb91f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-001.html @@ -0,0 +1,46 @@ + + + + CSS Multi-column Layout Test: Add the spanner as the first child of the columns + + + + + + + + + + + +
+
block1
+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-002-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-002-ref.html new file mode 100644 index 00000000000..94f3028a473 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-002-ref.html @@ -0,0 +1,28 @@ + + + + CSS Multi-column Layout Test Reference: Add the spanner as the second child of the columns + + + + + + +
+
block1
+

spanner

+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-002.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-002.html new file mode 100644 index 00000000000..67eeff63ebf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-002.html @@ -0,0 +1,46 @@ + + + + CSS Multi-column Layout Test: Add the spanner as the second child of the columns + + + + + + + + + + + +
+
block1
+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-003-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-003-ref.html new file mode 100644 index 00000000000..da623535087 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-003-ref.html @@ -0,0 +1,27 @@ + + + + CSS Multi-column Layout Test Reference: Add the spanner in block1. It should correctly span across all columns + + + + + + +
+
block1

spanner

+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-003.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-003.html new file mode 100644 index 00000000000..a9dd225aca1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-003.html @@ -0,0 +1,46 @@ + + + + CSS Multi-column Layout Test: Add the spanner in block1. It should correctly span across all columns + + + + + + + + + + + +
+
block1
+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-004-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-004-ref.html new file mode 100644 index 00000000000..1afda92071f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-004-ref.html @@ -0,0 +1,37 @@ + + + + CSS Multi-column Layout Test Reference: Add the spanner to the inner column + + + + + + +
+
+
inner block1
+

spanner

+
inner block2
+
+
+
inner block3
+

static spanner

+
inner block4
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-004.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-004.html new file mode 100644 index 00000000000..646fb332451 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-004.html @@ -0,0 +1,55 @@ + + + + CSS Multi-column Layout Test: Add the spanner to the inner column + + + + + + + + + + + +
+
+
inner block1
+
inner block2
+
+
+
inner block3
+

static spanner

+
inner block4
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-005.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-005.html new file mode 100644 index 00000000000..87d7f1b7fda --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-005.html @@ -0,0 +1,48 @@ + + + + CSS Multi-column Layout Test: Add block1 before block2. It should join the column content box with + block2, not with the spanner + + + + + + + + + + + +
+

spanner

+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-006.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-006.html new file mode 100644 index 00000000000..9b5c1dced06 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-006.html @@ -0,0 +1,44 @@ + + + + CSS Multi-column Layout Test: Append a text in column-span + + + + + + + + + + + +
+
block1
+

+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-007-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-007-ref.html new file mode 100644 index 00000000000..7f68a45a2c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-007-ref.html @@ -0,0 +1,32 @@ + + + + CSS Multi-column Layout Test Reference: Append the block to the inline element which contains "column-span" + + + + + + +
+ + inline1 +

spanner

+
block1
+ inline2 +
block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-007.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-007.html new file mode 100644 index 00000000000..cdaaf430f55 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-007.html @@ -0,0 +1,50 @@ + + + + CSS Multi-column Layout Test: Append the block to the inline element which contains "column-span" + + + + + + + + + + + +
+ + inline1 +

spanner

+
block1
+ inline2 +
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-008-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-008-ref.html new file mode 100644 index 00000000000..c2df383b939 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-008-ref.html @@ -0,0 +1,30 @@ + + + + CSS Multi-column Layout Test Reference: Add a nested multi-column spanner to the outer column + + + + + + +
+
block1
+

multi-column spanner

+

spanner

+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-008.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-008.html new file mode 100644 index 00000000000..14aeac8bca2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-add-008.html @@ -0,0 +1,48 @@ + + + + CSS Multi-column Layout Test: Add a nested multi-column spanner to the outer column + + + + + + + + + + + +
+
block1
+

spanner

+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html new file mode 100644 index 00000000000..83c9fd4880f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-001-ref.html @@ -0,0 +1,27 @@ + + + + CSS Multi-column Layout Test Reference: Remove the spanner as the first child + + + + + + +
+
block1
+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-001.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-001.html new file mode 100644 index 00000000000..50a59d1225b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-001.html @@ -0,0 +1,41 @@ + + + + CSS Multi-column Layout Test: Remove the spanner as the first child + + + + + + + + + + + +
+

spanner

+
block1
+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-002-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-002-ref.html new file mode 100644 index 00000000000..5bccbd76378 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-002-ref.html @@ -0,0 +1,28 @@ + + + + CSS Multi-column Layout Test Reference: Remove the spanner in nested blocks + + + + + + +
+
block1
+
+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-002.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-002.html new file mode 100644 index 00000000000..a6e29772698 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-002.html @@ -0,0 +1,41 @@ + + + + CSS Multi-column Layout Test: Remove the spanner in nested blocks + + + + + + + + + + + +
+
block1
+

spanner

+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-003.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-003.html new file mode 100644 index 00000000000..fa6f167bd93 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-003.html @@ -0,0 +1,40 @@ + + + + CSS Multi-column Layout Test: Remove the spanner in a block + + + + + + + + + + + +
+
block1

spanner

+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-004-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-004-ref.html new file mode 100644 index 00000000000..d6e44f35f84 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-004-ref.html @@ -0,0 +1,31 @@ + + + + CSS Multi-column Layout Test Reference: Remove the spanner with block siblings in an inline element + + + + + + +
+ + inline1 +
block1
+ inline2 +
block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-004.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-004.html new file mode 100644 index 00000000000..99ea3d744d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-004.html @@ -0,0 +1,45 @@ + + + + CSS Multi-column Layout Test: Remove the spanner with a block sibling in an inline element + + + + + + + + + + + +
+ + inline1 +

spanner

+
block1
+ inline2 +
block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-005-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-005-ref.html new file mode 100644 index 00000000000..f0c6149b5c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-005-ref.html @@ -0,0 +1,27 @@ + + + + CSS Multi-column Layout Test Reference: Remove a block with spanner siblings + + + + + + +
+

spanner1

+

spanner2

+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-005.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-005.html new file mode 100644 index 00000000000..c0d868885ca --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-005.html @@ -0,0 +1,44 @@ + + + + CSS Multi-column Layout Test: Remove a tall block (spliting across the three columns) with spanner siblings + + + + + + + + + + + +
+

spanner1

+
block
+

spanner2

+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-006.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-006.html new file mode 100644 index 00000000000..bbcce11c40f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-dynamic-remove-006.html @@ -0,0 +1,44 @@ + + + + CSS Multi-column Layout Test: Remove the parent of a column-spanner + + + + + + + + + + + +
+
block1
+
+

inner spanner

+
inner block
+
+
block2
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-001-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-001-ref.html new file mode 100644 index 00000000000..41bf8631e04 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-001-ref.html @@ -0,0 +1,31 @@ + + + + CSS Multi-column Layout Test Reference: Restyle column-span's parent that is a block + + + + + + +
+
+
yellow block1
+

spanner (no background-color)

+
yellow block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-001.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-001.html new file mode 100644 index 00000000000..8d942c13b5c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-001.html @@ -0,0 +1,43 @@ + + + + CSS Multi-column Layout Test: Restyle column-span's parent that is a block + + + + + + + + + + + + +
+
+
yellow block1
+

spanner (no background-color)

+
yellow block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-002-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-002-ref.html new file mode 100644 index 00000000000..92d469ab78b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-002-ref.html @@ -0,0 +1,33 @@ + + + + CSS Multi-column Layout Test Reference: Restyle column-span's parent that is an inline + + + + + + +
+ + All text should be offset 200px, except the spanner +

Spanner

+
Some more text
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-002.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-002.html new file mode 100644 index 00000000000..e8ad19e8bc1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-002.html @@ -0,0 +1,49 @@ + + + + CSS Multi-column Layout Test: Restyle column-span's parent that is an inline + + + + + + + + + + + + +
+ + All text should be offset 200px, except the spanner +

Spanner

+
Some more text
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-003-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-003-ref.html new file mode 100644 index 00000000000..1396f66dcb7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-003-ref.html @@ -0,0 +1,32 @@ + + + + CSS Multi-column Layout Test Reference: Restyle column-span's multi-column container + + + + + + +
+
+
block1
+

spanner

+
block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-003.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-003.html new file mode 100644 index 00000000000..7190f8f8794 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-003.html @@ -0,0 +1,43 @@ + + + + CSS Multi-column Layout Test: Restyle column-span's multi-column container + + + + + + + + + + + + +
+
+
block1
+

spanner

+
block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-004-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-004-ref.html new file mode 100644 index 00000000000..cd562cc1e1b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-004-ref.html @@ -0,0 +1,29 @@ + + + + CSS Multi-column Layout Test Reference: Restyle the column-span itself + + + + + + +
+
+
block1
+

yellow spanner

+
block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-004.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-004.html new file mode 100644 index 00000000000..41ac007f000 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-restyle-004.html @@ -0,0 +1,43 @@ + + + + CSS Multi-column Layout Test: Restyle the column-span itself + + + + + + + + + + + + +
+
+
block1
+

yellow spanner

+
block2
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties-cycles.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties-cycles.html index 58d6c846ae3..65d11697355 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties-cycles.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties-cycles.html @@ -25,14 +25,13 @@ test(function() { CSS.registerProperty({name: '--registered-1-d', syntax: '', initialValue: '4px', inherits: false}); computedStyle = getComputedStyle(test1); - assert_equals(computedStyle.getPropertyValue('--registered-1-a'), '1px'); - assert_equals(computedStyle.getPropertyValue('--registered-1-b'), '2px'); - - assert_equals(computedStyle.getPropertyValue('--registered-1-c'), '2px'); - assert_equals(computedStyle.getPropertyValue('--registered-1-d'), '2px'); - assert_equals(computedStyle.getPropertyValue('--unregistered-1-a'), '1px'); - assert_equals(computedStyle.left, '1px'); - assert_equals(computedStyle.top, '2px'); + assert_equals(computedStyle.getPropertyValue('--registered-1-a'), ''); + assert_equals(computedStyle.getPropertyValue('--registered-1-b'), ''); + assert_equals(computedStyle.getPropertyValue('--registered-1-c'), '30px'); + assert_equals(computedStyle.getPropertyValue('--registered-1-d'), '4px'); + assert_equals(computedStyle.getPropertyValue('--unregistered-1-a'), ''); + assert_equals(computedStyle.left, '50px'); + assert_equals(computedStyle.top, '60px'); }, "A var() cycle between two registered properties is handled correctly."); @@ -63,18 +62,18 @@ test(function() { CSS.registerProperty({name: '--registered-2-e', syntax: '', initialValue: '5px', inherits: false}); computedStyle = getComputedStyle(test2); - assert_equals(computedStyle.getPropertyValue('--registered-2-a'), '1px'); + assert_equals(computedStyle.getPropertyValue('--registered-2-a'), ''); assert_equals(computedStyle.getPropertyValue('--unregistered-2-a'), ''); - assert_equals(computedStyle.getPropertyValue('--registered-2-b'), '1px'); - assert_equals(computedStyle.getPropertyValue('--registered-2-c'), '1px'); + assert_equals(computedStyle.getPropertyValue('--registered-2-b'), '30px'); + assert_equals(computedStyle.getPropertyValue('--registered-2-c'), '3px'); assert_equals(computedStyle.getPropertyValue('--registered-2-d'), '40px'); assert_equals(computedStyle.getPropertyValue('--registered-2-e'), '5px'); - assert_equals(computedStyle.getPropertyValue('--unregistered-2-b'), '1px'); - assert_equals(computedStyle.getPropertyValue('--unregistered-2-c'), '1px'); + assert_equals(computedStyle.getPropertyValue('--unregistered-2-b'), '50px'); + assert_equals(computedStyle.getPropertyValue('--unregistered-2-c'), ''); assert_equals(computedStyle.getPropertyValue('--unregistered-2-d'), '60px'); assert_equals(computedStyle.getPropertyValue('--unregistered-2-e'), ''); - assert_equals(computedStyle.left, '1px'); + assert_equals(computedStyle.left, '70px'); assert_equals(computedStyle.top, '80px'); }, "A var() cycle between a registered properties and an unregistered property is handled correctly."); diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/nested-scrollIntoView-snaps.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/nested-scrollIntoView-snaps.html new file mode 100644 index 00000000000..b335de2c7f4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/nested-scrollIntoView-snaps.html @@ -0,0 +1,104 @@ + + + + + + +
+
+
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html index e4a7ef4a385..608d4853a24 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html @@ -1,14 +1,14 @@ -CSS Text Test: overflow-wrap: break-word and intrinsic sizing +CSS Text Test: overflow-wrap: anywhere and intrinsic sizing - + + +

Test passes if the 4 letters bellow are vertically aligned. +

P
+
A
+
S
+
S
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/tab-stop-threshold-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/tab-stop-threshold-002-ref.html new file mode 100644 index 00000000000..35c568bbcac --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/tab-stop-threshold-002-ref.html @@ -0,0 +1,16 @@ + + +CSS test reference + + +

Test passes if the 4 letters bellow are vertically aligned. +

P
+
A
+
S
+
S
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/tab-stop-threshold-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/tab-stop-threshold-001.html new file mode 100644 index 00000000000..dae6012bf7f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/tab-stop-threshold-001.html @@ -0,0 +1,25 @@ + + +CSS Text level 3 Test: the nearest tab stop is more than 0.5 ch away + + + + + + + +

Test passes if the 4 letters bellow are vertically aligned. +

P
+
A
+
S
+
S
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/tab-stop-threshold-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/tab-stop-threshold-002.html new file mode 100644 index 00000000000..1147e4b0411 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/tab-stop-threshold-002.html @@ -0,0 +1,25 @@ + + +CSS Text level 3 Test: the nearest tab stop is less than 0.5 ch away + + + + + + + +

Test passes if the 4 letters bellow are vertically aligned. +

P
+
A
+
S
+
S
diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/rotate-parsing-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/rotate-parsing-valid.html index c82f6be8c5d..63243b5e985 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/parsing/rotate-parsing-valid.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/rotate-parsing-valid.html @@ -19,14 +19,17 @@ test_valid_value("rotate", "0deg"); test_valid_value("rotate", "100 200 300 400grad"); test_valid_value("rotate", "400grad 100 200 300", "100 200 300 400grad"); -test_valid_value("rotate", "x 400grad", "1 0 0 400grad"); -test_valid_value("rotate", "400grad x", "1 0 0 400grad"); +test_valid_value("rotate", "x 400grad"); +test_valid_value("rotate", "400grad x", "x 400grad"); +test_valid_value("rotate", "1 0 0 400grad", "x 400grad"); -test_valid_value("rotate", "y 400grad", "0 1 0 400grad"); -test_valid_value("rotate", "400grad y", "0 1 0 400grad"); +test_valid_value("rotate", "y 400grad"); +test_valid_value("rotate", "400grad y", "y 400grad"); +test_valid_value("rotate", "0 1 0 400grad", "y 400grad"); -test_valid_value("rotate", "z 400grad", "0 0 1 400grad"); -test_valid_value("rotate", "400grad z", "0 0 1 400grad"); +test_valid_value("rotate", "z 400grad"); +test_valid_value("rotate", "400grad z", "z 400grad"); +test_valid_value("rotate", "0 0 1 400grad", "z 400grad"); diff --git a/tests/wpt/web-platform-tests/css/css-transforms/parsing/translate-parsing-valid.html b/tests/wpt/web-platform-tests/css/css-transforms/parsing/translate-parsing-valid.html index fe16d545e1f..e000f6a7f57 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/parsing/translate-parsing-valid.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/parsing/translate-parsing-valid.html @@ -17,9 +17,12 @@ test_valid_value("translate", "none"); test_valid_value("translate", "0px"); test_valid_value("translate", "100%"); +test_valid_value("translate", "100px 0px", "100px"); +test_valid_value("translate", "100px 0%", "100px"); test_valid_value("translate", "100px 200%"); test_valid_value("translate", "100% 200px"); +test_valid_value("translate", "100px 200px 0px"); test_valid_value("translate", "100px 200px 300px"); test_valid_value("translate", "100% 200% 300px"); diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transforms-support-calc.html b/tests/wpt/web-platform-tests/css/css-transforms/transforms-support-calc.html index 71a046f56b0..1ad1bcc4b68 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/transforms-support-calc.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/transforms-support-calc.html @@ -31,7 +31,7 @@ test(function(){ target.style = 'translate: calc(30px + 20%) calc(-200px + 100%);'; - assert_equals(getComputedStyle(target).translate, 'calc(30px + 20%) calc(-200px + 100%)'); + assert_equals(getComputedStyle(target).translate, 'calc(20% + 30px) calc(100% - 200px)'); }, 'translate supports calc'); test(function(){ diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-background-color-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-background-color-ref.html new file mode 100644 index 00000000000..44dd8d44d64 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-background-color-ref.html @@ -0,0 +1,42 @@ + + +backdrop-filter: Basic operation of filter with background color + + + + +
+

Expected: A green box and an overlapping blue box, with a purple
+ overlapping region.

+
+
+
+
+ + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-background-color.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-background-color.html new file mode 100644 index 00000000000..c8d1a3ede5d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-background-color.html @@ -0,0 +1,36 @@ + + +backdrop-filter: Basic operation of filter with background color + + + + +
+

Expected: A green box and an overlapping blue box, with a purple
+ overlapping region.

+
+
+
+
+ + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-opacity-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-opacity-ref.html new file mode 100644 index 00000000000..26d7715e15f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-opacity-ref.html @@ -0,0 +1,42 @@ + + +backdrop-filter: Basic operation of filter with opacity + + + + +
+

Expected: A green box and an overlapping black box, with a magenta
+ overlapping region.

+
+
+
+
+ + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-opacity.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-opacity.html new file mode 100644 index 00000000000..23e40a7ccdd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-opacity.html @@ -0,0 +1,36 @@ + + +backdrop-filter: Basic operation of filter with opacity + + + + +
+

Expected: A green box and an overlapping black box, with a magenta
+ overlapping region.

+
+
+
+
+ + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-ref.html new file mode 100644 index 00000000000..049e7c888dc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic-ref.html @@ -0,0 +1,42 @@ + + +backdrop-filter: Basic operation of filter + + + + +
+

Expected: A green box and an overlapping black box, with a magenta
+ overlapping region.

+
+
+
+
+ + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic.html new file mode 100644 index 00000000000..8f24c9b44a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-basic.html @@ -0,0 +1,36 @@ + + +backdrop-filter: Basic operation of filter + + + + +
+

Expected: A green box and an overlapping black box, with a magenta
+ overlapping region.

+
+
+
+
+ + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-border-radius-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-border-radius-ref.html new file mode 100644 index 00000000000..eabcd996697 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-border-radius-ref.html @@ -0,0 +1,39 @@ + + +backdrop-filter: Should clip using border radius. + + + + +
+
+
+
+ + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-border-radius.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-border-radius.html new file mode 100644 index 00000000000..d6d1f4b8130 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-border-radius.html @@ -0,0 +1,35 @@ + + +backdrop-filter: Should clip using border radius. + + + + +
+
+ +
+ + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation-isolate.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation-isolate.html new file mode 100644 index 00000000000..dba157c87c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation-isolate.html @@ -0,0 +1,43 @@ + + +backdrop-filter: Should not filter outside parent stacking context. + + + + +
+
+
+
+
+
+ + + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation-ref.html new file mode 100644 index 00000000000..58f5a7ec1ed --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation-ref.html @@ -0,0 +1,42 @@ + + +backdrop-filter: Should not filter outside parent stacking context. + + + + +
+
+
+
+
+
+
+ + + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation.html new file mode 100644 index 00000000000..dc7bd107c32 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-isolation.html @@ -0,0 +1,43 @@ + + +backdrop-filter: Should not filter outside parent stacking context. + + + + +
+
+
+
+
+
+ + + + diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html b/tests/wpt/web-platform-tests/css/filter-effects/blur-clip-stacking-context-001.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html rename to tests/wpt/web-platform-tests/css/filter-effects/blur-clip-stacking-context-001.html diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html b/tests/wpt/web-platform-tests/css/filter-effects/blur-clip-stacking-context-002.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html rename to tests/wpt/web-platform-tests/css/filter-effects/blur-clip-stacking-context-002.html diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/blur-clip-stacking-context-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html rename to tests/wpt/web-platform-tests/css/filter-effects/blur-clip-stacking-context-ref.html diff --git a/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-combined-001.html b/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-combined-001.html index 5b37d57f49e..874f6e4a507 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-combined-001.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-combined-001.html @@ -28,7 +28,7 @@ saturate(0%) hue-rotate(90deg) invert(100%) - opacity(100%) + opacity(0%) } 100% { filter: none; diff --git a/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-drop-shadow-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-drop-shadow-ref.html index e1802341f74..d6be73bcbdc 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-drop-shadow-ref.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-drop-shadow-ref.html @@ -10,7 +10,7 @@ width: 100px; height: 100px; background: blue; - filter: drop-shadow(15px 15px 0px gray); + filter: drop-shadow(15px 15px 0px rgba(0, 0, 0, 0.5)); } diff --git a/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-drop-shadow.html b/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-drop-shadow.html index e27bf433907..9496bdb234d 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-drop-shadow.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/css-filters-animation-drop-shadow.html @@ -9,7 +9,7 @@ - + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/fecolormatrix-type.html b/tests/wpt/web-platform-tests/css/filter-effects/fecolormatrix-type.html index 8caaede02f2..5d003f7f9c5 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/fecolormatrix-type.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/fecolormatrix-type.html @@ -28,7 +28,7 @@
- + @@ -14,7 +14,7 @@ div { width: 200px; height: 200px; - background-color: #400000; + background-color: #3f0000; filter: contrast(200%); } diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-external-001-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-external-001-ref.html index 915cccd07f4..794674da484 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/filter-external-001-ref.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-external-001-ref.html @@ -8,7 +8,7 @@ div { width: 200px; height: 200px; - background: #00b60d; + background: rgb(0%, 46.896%, 0.396%); } diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-external-001-test.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-external-001-test.html index c84c0524fc4..ecef5571750 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/filter-external-001-test.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-external-001-test.html @@ -26,7 +26,7 @@
- + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-external-002-filter.svg b/tests/wpt/web-platform-tests/css/filter-effects/filter-external-002-filter.svg deleted file mode 100644 index 638f5331f02..00000000000 --- a/tests/wpt/web-platform-tests/css/filter-effects/filter-external-002-filter.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-external-002-test.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-external-002-test.html index 65475b40219..cb2d6554a08 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/filter-external-002-test.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-external-002-test.html @@ -15,7 +15,7 @@ width: 200px; height: 200px; background: red; - filter: url( filter-external-002-filter.svg#filter ); + filter: url( support/filter-external-002-filter.svg#filter ); } diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-001.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-001.html index 7027ee06fd9..c6fc1be727c 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-001.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-001.html @@ -22,9 +22,9 @@ -

The test passes if the little box looks grey. (and not blue)

+

The test passes if the little box looks grey.

- \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-004.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-004.html index b63d9c211c1..8b7d11a42ae 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-004.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-004.html @@ -22,9 +22,9 @@ -

The test passes if the little box looks grey. (and not blue)

+

The test passes if the little box looks grey.

- \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-005.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-005.html index 110ce4d554c..0aa4a3b6bdc 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-005.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-005.html @@ -22,9 +22,9 @@ -

The test passes if the little box looks grey. (and not blue)

+

The test passes if the little box looks grey.

- \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-ref.html index 72700c2fe96..beaa72aaa3c 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-ref.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/filter-grayscale-ref.html @@ -16,9 +16,9 @@ -

The test passes if the little box looks grey. (and not blue)

+

The test passes if the little box looks grey.

- \ No newline at end of file + diff --git a/tests/wpt/web-platform-tests/css/css-filter/filtered-block-is-container-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/filtered-block-is-container-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/filtered-block-is-container-ref.html rename to tests/wpt/web-platform-tests/css/filter-effects/filtered-block-is-container-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-filter/filtered-block-is-container.html b/tests/wpt/web-platform-tests/css/filter-effects/filtered-block-is-container.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/filtered-block-is-container.html rename to tests/wpt/web-platform-tests/css/filter-effects/filtered-block-is-container.html diff --git a/tests/wpt/web-platform-tests/css/css-filter/filtered-html-is-not-container-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/filtered-html-is-not-container-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/filtered-html-is-not-container-ref.html rename to tests/wpt/web-platform-tests/css/filter-effects/filtered-html-is-not-container-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-filter/filtered-html-is-not-container.html b/tests/wpt/web-platform-tests/css/filter-effects/filtered-html-is-not-container.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/filtered-html-is-not-container.html rename to tests/wpt/web-platform-tests/css/filter-effects/filtered-html-is-not-container.html diff --git a/tests/wpt/web-platform-tests/css/css-filter/filtered-inline-is-container-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/filtered-inline-is-container-ref.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/filtered-inline-is-container-ref.html rename to tests/wpt/web-platform-tests/css/filter-effects/filtered-inline-is-container-ref.html diff --git a/tests/wpt/web-platform-tests/css/css-filter/filtered-inline-is-container.html b/tests/wpt/web-platform-tests/css/filter-effects/filtered-inline-is-container.html similarity index 100% rename from tests/wpt/web-platform-tests/css/css-filter/filtered-inline-is-container.html rename to tests/wpt/web-platform-tests/css/filter-effects/filtered-inline-is-container.html diff --git a/tests/wpt/web-platform-tests/css/filter-effects/filters-test-brightness-003.html b/tests/wpt/web-platform-tests/css/filter-effects/filters-test-brightness-003.html index 9ecef28aa54..69a7d54a7f8 100644 --- a/tests/wpt/web-platform-tests/css/filter-effects/filters-test-brightness-003.html +++ b/tests/wpt/web-platform-tests/css/filter-effects/filters-test-brightness-003.html @@ -1,7 +1,7 @@ - CSS Writing Modes Test: drop-shadow offset test + CSS Filter Effects: brightness(...) without argument @@ -16,6 +16,7 @@ width: 200px; height: 200px; background-color: rgb(0, 255, 0); + filter: brightness(0); filter: brightness(); } diff --git a/tests/wpt/web-platform-tests/css/filter-effects/support/filter-external-002-filter.svg b/tests/wpt/web-platform-tests/css/filter-effects/support/filter-external-002-filter.svg new file mode 100644 index 00000000000..0d5fc65c6fd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/support/filter-external-002-filter.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md index e7e53e4c3b6..5d23e253946 100644 --- a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md +++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md @@ -434,7 +434,7 @@ is called, the two conditions above apply like normal. Dedicated and shared workers don't have an event that corresponds to the `load` event in a document. Therefore these worker tests always behave as if the `explicit_done` property is set to true. Service workers depend on the -[install](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-global-scope-install-event) +[install](https://w3c.github.io/ServiceWorker/#service-worker-global-scope-install-event) event which is fired following the completion of [running the worker](https://html.spec.whatwg.org/multipage/workers.html#run-a-worker). @@ -610,7 +610,7 @@ capable of accessing the browsing context as either an ancestor or opener. The `testharness.js` script can be used from within [dedicated workers, shared workers](https://html.spec.whatwg.org/multipage/workers.html) and [service -workers](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/). +workers](https://w3c.github.io/ServiceWorker/). Testing from a worker script is different from testing from an HTML document in several ways: @@ -637,7 +637,7 @@ several ways: complete](#determining-when-all-tests-are-complete)). So these worker tests behave as if they were started with the `explicit_done` option. Service workers depend on the - [oninstall](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-global-scope-install-event) + [oninstall](https://w3c.github.io/ServiceWorker/#service-worker-global-scope-install-event) event and don't require an explicit `done` call. Here's an example that uses a dedicated worker. @@ -674,7 +674,7 @@ fetch_tests_from_worker(new Worker("worker.js")); The argument to the `fetch_tests_from_worker` function can be a [`Worker`](https://html.spec.whatwg.org/multipage/workers.html#dedicated-workers-and-the-worker-interface), a [`SharedWorker`](https://html.spec.whatwg.org/multipage/workers.html#shared-workers-and-the-sharedworker-interface) -or a [`ServiceWorker`](https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#service-worker-obj). +or a [`ServiceWorker`](https://w3c.github.io/ServiceWorker/#serviceworker-interface). Once called, the containing document fetches all the tests from the worker and behaves as if those tests were running in the containing document itself. diff --git a/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-bom.html b/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-bom.html index 79679cac759..db551fa8947 100644 Binary files a/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-bom.html and b/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-bom.html differ diff --git a/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-bom.xml b/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-bom.xml index 399c35af827..c97662aa163 100644 Binary files a/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-bom.xml and b/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-bom.xml differ diff --git a/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-nobom.html b/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-nobom.html index fa2d3fe4a7d..fe32ab0408c 100644 Binary files a/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-nobom.html and b/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-nobom.html differ diff --git a/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-nobom.xml b/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-nobom.xml index a237e853a08..f704501ccae 100644 Binary files a/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-nobom.xml and b/tests/wpt/web-platform-tests/encoding/resources/utf-32-big-endian-nobom.xml differ diff --git a/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-bom.html b/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-bom.html index 5648fca2835..432b96f26a0 100644 Binary files a/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-bom.html and b/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-bom.html differ diff --git a/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-bom.xml b/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-bom.xml index 8f5e8cba400..f896b511c71 100644 Binary files a/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-bom.xml and b/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-bom.xml differ diff --git a/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-nobom.html b/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-nobom.html index eda12372134..2de355aab17 100644 Binary files a/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-nobom.html and b/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-nobom.html differ diff --git a/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-nobom.xml b/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-nobom.xml index a9a7bf96e6e..465f44df5f7 100644 Binary files a/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-nobom.xml and b/tests/wpt/web-platform-tests/encoding/resources/utf-32-little-endian-nobom.xml differ diff --git a/tests/wpt/web-platform-tests/encoding/utf-32-from-win1252.html b/tests/wpt/web-platform-tests/encoding/utf-32-from-win1252.html new file mode 100644 index 00000000000..7b4a3d0c956 --- /dev/null +++ b/tests/wpt/web-platform-tests/encoding/utf-32-from-win1252.html @@ -0,0 +1,71 @@ + + +Character Decoding: UTF-32 (not supported) subresource of windows-1252 document + + + + + diff --git a/tests/wpt/web-platform-tests/encoding/utf-32.html b/tests/wpt/web-platform-tests/encoding/utf-32.html index 7b173055d35..ec72eb6fbf6 100644 --- a/tests/wpt/web-platform-tests/encoding/utf-32.html +++ b/tests/wpt/web-platform-tests/encoding/utf-32.html @@ -1,37 +1,71 @@ -Character Decoding: UTF-32 (not supported) + +Character Decoding: UTF-32 (not supported) subresource of UTF-8 document diff --git a/tests/wpt/web-platform-tests/entries-api/file-webkitRelativePath-manual.html b/tests/wpt/web-platform-tests/entries-api/file-webkitRelativePath-manual.html index e36b821c9d3..695ccc47c37 100644 --- a/tests/wpt/web-platform-tests/entries-api/file-webkitRelativePath-manual.html +++ b/tests/wpt/web-platform-tests/entries-api/file-webkitRelativePath-manual.html @@ -23,9 +23,10 @@ promise_test(t => filesPromise.then(files => { (a, b) => a.name < b.name ? -1 : b.name < a.name ? 1 : 0); assert_equals(files[0].name, '1.txt'); assert_equals(files[1].name, '2.txt'); - assert_equals(files[0].webkitRelativePath, 'c/d/1.txt'); - assert_equals(files[1].webkitRelativePath, 'c/d/2.txt'); - assert_equals(files[2].webkitRelativePath, 'c/3.txt'); + assert_equals(files[2].name, '3.txt'); + assert_equals(files[0].webkitRelativePath, 'a/b/c/d/1.txt'); + assert_equals(files[1].webkitRelativePath, 'a/b/c/d/2.txt'); + assert_equals(files[2].webkitRelativePath, 'a/b/c/3.txt'); }), 'webkitRelativePath is shortest common ancestor'); diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py index 4c30d1e52ac..b81e93ec3c0 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py @@ -3,10 +3,7 @@ import uuid import hashlib import time -resourcePath = os.getcwd() + "/fetch/sec-metadata/resources/" - def main(request, response): - ## Get the query parameter (key) from URL ## ## Tests will record POST requests (CSP Report) and GET (rest) ## if request.GET: @@ -57,7 +54,8 @@ def main(request, response): ## Return a valid SharedWorker ## if key.startswith("sharedworker"): response.headers.set("Content-Type", "application/javascript") - file = open(resourcePath + "sharedWorker.js", "r") + file = open(os.path.join(request.doc_root, "fetch", "sec-metadata", + "resources", "sharedWorker.js"), "r") shared_worker = file.read() file.close() return shared_worker diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html b/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html new file mode 100644 index 00000000000..e50e5e1657f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_feature_policy.tentative.sub.html @@ -0,0 +1,22 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/dom/elements-obsolete.js b/tests/wpt/web-platform-tests/html/dom/elements-obsolete.js index e37e34280f6..7f673cb7f0e 100644 --- a/tests/wpt/web-platform-tests/html/dom/elements-obsolete.js +++ b/tests/wpt/web-platform-tests/html/dom/elements-obsolete.js @@ -13,9 +13,21 @@ var obsoleteElements = { width: "string", }, marquee: { - behavior: "string", + behavior: { + type: { + type: "enum", + keywords: ["scroll", "slide", "alternate"], + defaultVal: "scroll" + }, + }, bgColor: "string", - direction: "string", + direction: { + type: { + type: "enum", + keywords: ["up", "right", "down", "left"], + defaultVal: "left" + }, + }, height: "string", hspace: "unsigned long", scrollAmount: {type: "unsigned long", defaultVal: 6}, diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-no-alt-replaced.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-no-alt-replaced.html new file mode 100644 index 00000000000..896c7363113 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-no-alt-replaced.html @@ -0,0 +1,25 @@ + +Images without alt attribute or with an empty alt attribute render as replaced elements regardless of src + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html index de068f17a73..dc5dcbfdece 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html @@ -7,22 +7,70 @@
- - - + + + + diff --git a/tests/wpt/web-platform-tests/mimesniff/mime-types/README.md b/tests/wpt/web-platform-tests/mimesniff/mime-types/README.md index 89e1bf426be..3a2681ec74f 100644 --- a/tests/wpt/web-platform-tests/mimesniff/mime-types/README.md +++ b/tests/wpt/web-platform-tests/mimesniff/mime-types/README.md @@ -15,14 +15,11 @@ A wrapper for these JSON MIME type tests needs to take care that not all `input` function isByteCompatible(str) { for(let i = 0; i < str.length; i++) { const charCode = str.charCodeAt(i); - // See https://github.com/web-platform-tests/wpt/issues/8372 for 0x0B and 0x0C - // See https://fetch.spec.whatwg.org/#concept-header-value for the remainder + // See https://fetch.spec.whatwg.org/#concept-header-value if(charCode > 0xFF) { return "incompatible"; } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) { return "header-value-incompatible"; - } else if(charCode === 0x0B || charCode === 0x0C) { - return "wptserve-incompatible"; } } return "compatible"; diff --git a/tests/wpt/web-platform-tests/mimesniff/mime-types/charset-parameter.window.js b/tests/wpt/web-platform-tests/mimesniff/mime-types/charset-parameter.window.js index c288de8349a..ddac81b74d3 100644 --- a/tests/wpt/web-platform-tests/mimesniff/mime-types/charset-parameter.window.js +++ b/tests/wpt/web-platform-tests/mimesniff/mime-types/charset-parameter.window.js @@ -6,14 +6,11 @@ promise_test(() => { function isByteCompatible(str) { for(let i = 0; i < str.length; i++) { const charCode = str.charCodeAt(i); - // See https://github.com/web-platform-tests/wpt/issues/8372 for 0x0B and 0x0C - // See https://fetch.spec.whatwg.org/#concept-header-value for the remainder + // See https://fetch.spec.whatwg.org/#concept-header-value if(charCode > 0xFF) { return "incompatible"; } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) { return "header-value-incompatible"; - } else if(charCode === 0x0B || charCode === 0x0C) { - return "wptserve-incompatible"; } } return "compatible"; diff --git a/tests/wpt/web-platform-tests/mimesniff/mime-types/parsing.any.js b/tests/wpt/web-platform-tests/mimesniff/mime-types/parsing.any.js index beacada1b10..640a46b9e98 100644 --- a/tests/wpt/web-platform-tests/mimesniff/mime-types/parsing.any.js +++ b/tests/wpt/web-platform-tests/mimesniff/mime-types/parsing.any.js @@ -10,14 +10,11 @@ promise_test(() => { function isByteCompatible(str) { for(let i = 0; i < str.length; i++) { const charCode = str.charCodeAt(i); - // See https://github.com/web-platform-tests/wpt/issues/8372 for 0x0B and 0x0C - // See https://fetch.spec.whatwg.org/#concept-header-value for the remainder + // See https://fetch.spec.whatwg.org/#concept-header-value if(charCode > 0xFF) { return "incompatible"; } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) { return "header-value-incompatible"; - } else if(charCode === 0x0B || charCode === 0x0C) { - return "wptserve-incompatible"; } } return "compatible"; diff --git a/tests/wpt/web-platform-tests/mimesniff/mime-types/resources/mime-charset.py b/tests/wpt/web-platform-tests/mimesniff/mime-types/resources/mime-charset.py index 433a5bb74b9..a4f90f52c32 100644 --- a/tests/wpt/web-platform-tests/mimesniff/mime-types/resources/mime-charset.py +++ b/tests/wpt/web-platform-tests/mimesniff/mime-types/resources/mime-charset.py @@ -1,3 +1,16 @@ def main(request, response): - response.headers.set("Content-Type", request.GET.first("type")); - response.content = "\n" + content = "\n" + + # This uses the following rather than + # response.headers.set("Content-Type", request.GET.first("type")); + # response.content = content + # to work around https://github.com/web-platform-tests/wpt/issues/8372. + + response.add_required_headers = False + output = "HTTP/1.1 200 OK\r\n" + output += "Content-Length: " + str(len(content)) + "\r\n" + output += "Content-Type: " + request.GET.first("type") + "\r\n" + output += "\r\n" + output += content + response.writer.write(output) + response.close_connection = True diff --git a/tests/wpt/web-platform-tests/mimesniff/mime-types/resources/mime-types.json b/tests/wpt/web-platform-tests/mimesniff/mime-types/resources/mime-types.json index 8918b355bf5..64654b90d5a 100644 --- a/tests/wpt/web-platform-tests/mimesniff/mime-types/resources/mime-types.json +++ b/tests/wpt/web-platform-tests/mimesniff/mime-types/resources/mime-types.json @@ -69,6 +69,31 @@ "navigable": true, "encoding": null }, + "0x0B and 0x0C", + { + "input": "text/html;charset=\u000Bgbk", + "output": "text/html", + "navigable": true, + "encoding": null + }, + { + "input": "text/html;charset=\u000Cgbk", + "output": "text/html", + "navigable": true, + "encoding": null + }, + { + "input": "text/html;\u000Bcharset=gbk", + "output": "text/html", + "navigable": true, + "encoding": null + }, + { + "input": "text/html;\u000Ccharset=gbk", + "output": "text/html", + "navigable": true, + "encoding": null + }, "Single quotes are a token, not a delimiter", { "input": "text/html;charset='gbk'", @@ -250,6 +275,18 @@ "input": "x/x;x=\t", "output": "x/x" }, + { + "input": "x/x\n\r\t ;x=x", + "output": "x/x;x=x" + }, + { + "input": "\n\r\t x/x;x=x\n\r\t ", + "output": "x/x;x=x" + }, + { + "input": "x/x;\n\r\t x=x\n\r\t ;x=y", + "output": "x/x;x=x" + }, "Latin1", { "input": "text/html;test=\u00FF;charset=gbk", @@ -263,6 +300,22 @@ "output": "x/x;x=x" }, "Failure", + { + "input": "\u000Bx/x", + "output": null + }, + { + "input": "\u000Cx/x", + "output": null + }, + { + "input": "x/x\u000B", + "output": null + }, + { + "input": "x/x\u000C", + "output": null + }, { "input": "", "output": null diff --git a/tests/wpt/web-platform-tests/network-error-logging/no-report-on-unexpired-cached-response.https.html b/tests/wpt/web-platform-tests/network-error-logging/no-report-on-unexpired-cached-response.https.html new file mode 100644 index 00000000000..8248aa52ecb --- /dev/null +++ b/tests/wpt/web-platform-tests/network-error-logging/no-report-on-unexpired-cached-response.https.html @@ -0,0 +1,33 @@ + + + + + Test that NEL reports are not sent for cached responses that don't hit the + network + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/network-error-logging/sends-report-on-cache-validation.https.html b/tests/wpt/web-platform-tests/network-error-logging/sends-report-on-cache-validation.https.html new file mode 100644 index 00000000000..b87053cb7f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/network-error-logging/sends-report-on-cache-validation.https.html @@ -0,0 +1,42 @@ + + + + + Test that NEL reports are sent for cache validation requests + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/network-error-logging/sends-report-on-redirect.https.html b/tests/wpt/web-platform-tests/network-error-logging/sends-report-on-redirect.https.html new file mode 100644 index 00000000000..c9ba405f6fa --- /dev/null +++ b/tests/wpt/web-platform-tests/network-error-logging/sends-report-on-redirect.https.html @@ -0,0 +1,55 @@ + + + + + Test that NEL reports are sent for redirects + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/cached-for-one-minute.png b/tests/wpt/web-platform-tests/network-error-logging/support/cached-for-one-minute.png new file mode 100644 index 00000000000..2fa1e0ac066 Binary files /dev/null and b/tests/wpt/web-platform-tests/network-error-logging/support/cached-for-one-minute.png differ diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/cached-for-one-minute.png.sub.headers b/tests/wpt/web-platform-tests/network-error-logging/support/cached-for-one-minute.png.sub.headers new file mode 100644 index 00000000000..63d4c4de030 --- /dev/null +++ b/tests/wpt/web-platform-tests/network-error-logging/support/cached-for-one-minute.png.sub.headers @@ -0,0 +1 @@ +Cache-Control: public, max-age=60, must-revalidate diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/cached-with-validation.py b/tests/wpt/web-platform-tests/network-error-logging/support/cached-with-validation.py new file mode 100644 index 00000000000..f98a503a51e --- /dev/null +++ b/tests/wpt/web-platform-tests/network-error-logging/support/cached-with-validation.py @@ -0,0 +1,17 @@ +ETAG = '"123abc"' +CONTENT_TYPE = "text/plain" +CONTENT = "lorem ipsum dolor sit amet" + +def main(request, response): + # let caching kick in if possible (conditional GET) + etag = request.headers.get("If-None-Match", None) + if etag == ETAG: + response.headers.set("X-HTTP-STATUS", 304) + response.status = (304, "Not Modified") + return "" + + # cache miss, so respond with the actual content + response.status = (200, "OK") + response.headers.set("ETag", ETAG) + response.headers.set("Content-Type", CONTENT_TYPE) + return CONTENT diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/nel.sub.js b/tests/wpt/web-platform-tests/network-error-logging/support/nel.sub.js index c6b4783bd94..759d0337fa6 100644 --- a/tests/wpt/web-platform-tests/network-error-logging/support/nel.sub.js +++ b/tests/wpt/web-platform-tests/network-error-logging/support/nel.sub.js @@ -106,13 +106,53 @@ function fetchMissingResource(subdomain) { return fetch(url, {mode: "no-cors"}); } +/* + * Fetches a resource that can be cached without validation. + */ + +function getURLForCachedResource(subdomain) { + return _getNELResourceURL(subdomain, "cached-for-one-minute.png"); +} + +function fetchCachedResource(subdomain) { + const url = getURLForCachedResource(subdomain); + return fetch(url, {mode: "no-cors"}); +} + +/* + * Fetches a resource that can be cached but requires validation. + */ + +function getURLForValidatedCachedResource(subdomain) { + return _getNELResourceURL(subdomain, "cached-with-validation.py"); +} + +function fetchValidatedCachedResource(subdomain) { + const url = getURLForValidatedCachedResource(subdomain); + return fetch(url, {mode: "no-cors"}); +} + +/* + * Fetches a resource that redirects once before returning a successful + * response. + */ + +function getURLForRedirectedResource(subdomain) { + return _getNELResourceURL(subdomain, "redirect.py?id="+reportID); +} + +function fetchRedirectedResource(subdomain) { + const url = getURLForRedirectedResource(subdomain); + return fetch(url, {mode: "no-cors"}); +} + /* * Fetches resources that clear out any existing Reporting or NEL configurations * for all origins that any test case might use. */ function getURLForClearingConfiguration(subdomain) { - return _getNELResourceURL(subdomain, "clear-pass.png?id="+reportID); + return _getNELResourceURL(subdomain, "clear-policy-pass.png?id="+reportID); } async function clearReportingAndNELConfigurations(subdomain) { diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/redirect.py b/tests/wpt/web-platform-tests/network-error-logging/support/redirect.py new file mode 100644 index 00000000000..00813504da6 --- /dev/null +++ b/tests/wpt/web-platform-tests/network-error-logging/support/redirect.py @@ -0,0 +1,3 @@ +# Always redirects to no-policy-pass.png. +def main(request, response): + return 302, [("Location", "no-policy-pass.png")], "" 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 7c05b51b9eb..49af9fe34cc 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 @@ -8,6 +8,7 @@ def retrieve_from_stash(request, key, timeout, default_value): time.sleep(0.5) value = request.server.stash.take(key=key) if value is not None: + request.server.stash.put(key=key, value=value) return json.dumps(value) return default_value diff --git a/tests/wpt/web-platform-tests/picture-in-picture/mediastream.html b/tests/wpt/web-platform-tests/picture-in-picture/mediastream.html new file mode 100644 index 00000000000..7a2cc958eac --- /dev/null +++ b/tests/wpt/web-platform-tests/picture-in-picture/mediastream.html @@ -0,0 +1,31 @@ + +Test mediastream video in Picture-in-Picture + + + + + + + diff --git a/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html b/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html index 17816b93c94..2bf43746075 100644 --- a/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html +++ b/tests/wpt/web-platform-tests/picture-in-picture/shadow-dom.html @@ -58,5 +58,6 @@ promise_test(async t => { assert_equals(ids.root4.pictureInPictureElement, null); assert_equals(ids.root5.pictureInPictureElement, null); }) + .then(() => document.exitPictureInPicture()); }); diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove-manual.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove.html similarity index 86% rename from tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove-manual.html rename to tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove.html index cf1a1ee4ee8..4b168439a4e 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove-manual.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove.html @@ -7,6 +7,9 @@ + + + @@ -32,6 +35,9 @@ eventTested = true; } }); + + // Inject the inputs to run this test. + new test_driver.Actions().pointerMove(0, 0, {origin: target0}).send(); }

Pointer Events pointermove Tests

diff --git a/tests/wpt/web-platform-tests/preload/modulepreload.html b/tests/wpt/web-platform-tests/preload/modulepreload.html index addd67d46ac..8950daf1f87 100644 --- a/tests/wpt/web-platform-tests/preload/modulepreload.html +++ b/tests/wpt/web-platform-tests/preload/modulepreload.html @@ -1,8 +1,10 @@ + + + diff --git a/tests/wpt/web-platform-tests/selection/idlharness.window.js b/tests/wpt/web-platform-tests/selection/idlharness.window.js index b211797777d..543fcb3eff5 100644 --- a/tests/wpt/web-platform-tests/selection/idlharness.window.js +++ b/tests/wpt/web-platform-tests/selection/idlharness.window.js @@ -7,7 +7,7 @@ idl_test( ['selection-api'], - ['dom', 'html'], + ['html', 'dom'], idlArray => { idlArray.add_objects({ Window: ['window'], diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html index 6f03fd8f2f0..e8b8e9afd58 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html @@ -97,7 +97,7 @@ function check_clients(clients, Object.keys(clients).forEach(key => { const info = clients[key]; if (info.found) { - assert_true(expected_final_client_tag, + assert_true(!!expected_final_client_tag, `${worker_name} client tag exists`); assert_equals(key, expected_final_client_tag, `${worker_name} client tag matches`); @@ -120,10 +120,10 @@ function check_resulting_client_ids(infos, expected_infos, actual_ids, worker) { assert_equals(typeof(actual_id), 'string', `resultingClientId for ${url} request to ${worker}`); if (expected_id) { - assert_equals(requestInfos[0], expected_id, + assert_equals(actual_id, expected_id, `resultingClientId for ${url} request to ${worker}`); } else { - actual_ids[key] = actual_id; + actual_ids[tag] = actual_id; } } } @@ -489,7 +489,7 @@ redirect_test( url1, url2, [[{url: url1, resultingClientIdTag: 'a'}], [], []], - 'x', + null, 'SW-fallbacked redirect to other-origin out-scope.'); url1 = SCOPE1 + 'url=' + encodeURIComponent(OTHER_ORIGIN_SCOPE); @@ -530,8 +530,8 @@ url2 = OUT_SCOPE; redirect_test( url1, url2, - [[{url: url1, resultingClientIdTag: 'a'}], [], []], - null, + [[{url: url1, resultingClientIdTag: 'x'}], [], []], + 'x', 'SW-generated redirect to same-origin out-scope.'); url1 = SCOPE1 + 'sw=gen&url=' + encodeURIComponent(OUT_SCOPE) + '#ref'; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/classic-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/classic-worker.js new file mode 100644 index 00000000000..36a32b1a1f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/classic-worker.js @@ -0,0 +1 @@ +importScripts('./imported-classic-script.js'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/module-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/module-worker.js new file mode 100644 index 00000000000..385fe710150 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/module-worker.js @@ -0,0 +1 @@ +import * as module from './imported-module-script.js'; diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/redirect-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/redirect-worker.js index 0c5bc3bd9aa..ddcc2cf5478 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/redirect-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/redirect-worker.js @@ -114,7 +114,7 @@ self.addEventListener('fetch', function(event) { return; } - event.respondWith(waitUntilPromise.then(function() { + event.respondWith(waitUntilPromise.then(async () => { if (params['sw'] == 'gen') { return Response.redirect(params['url']); } else if (params['sw'] == 'fetch') { @@ -126,18 +126,13 @@ self.addEventListener('fetch', function(event) { } else if (params['sw'] == 'manual') { return fetch(new Request(event.request.url, {redirect: 'manual'})); } else if (params['sw'] == 'manualThroughCache') { - var url = event.request.url; - var cache; - return caches.delete(url) - .then(function() { return self.caches.open(url); }) - .then(function(c) { - cache = c; - return fetch(new Request(url, {redirect: 'manual'})); - }) - .then(function(res) { return cache.put(event.request, res); }) - .then(function() { return cache.match(url); }); + const url = event.request.url; + await caches.delete(url) + const cache = await self.caches.open(url); + const response = await fetch(new Request(url, {redirect: 'manual'})); + await cache.put(event.request, response); + return cache.match(url); } - // unexpected... trigger an interception failure })); }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/update-registration-with-type.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/update-registration-with-type.https.html index 00c8a3345bb..b712c30f71e 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/update-registration-with-type.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/update-registration-with-type.https.html @@ -7,8 +7,8 @@ diff --git a/tests/wpt/web-platform-tests/svg/geometry/inheritance.svg b/tests/wpt/web-platform-tests/svg/geometry/inheritance.svg new file mode 100644 index 00000000000..760328ac318 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/inheritance.svg @@ -0,0 +1,28 @@ + + + Inheritance of geometry properties + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-invalid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-invalid.svg new file mode 100644 index 00000000000..4b1b90158fc --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-invalid.svg @@ -0,0 +1,21 @@ + + + SVG Geometry Properties: parsing cx with invalid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-valid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-valid.svg new file mode 100644 index 00000000000..e7f627ac721 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-valid.svg @@ -0,0 +1,22 @@ + + + SVG Geometry Properties: parsing cx with valid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-invalid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-invalid.svg new file mode 100644 index 00000000000..528eed02cea --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-invalid.svg @@ -0,0 +1,21 @@ + + + SVG Geometry Properties: parsing cy with invalid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-valid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-valid.svg new file mode 100644 index 00000000000..4372c36ea22 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-valid.svg @@ -0,0 +1,22 @@ + + + SVG Geometry Properties: parsing cy with valid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/r-invalid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/r-invalid.svg new file mode 100644 index 00000000000..a14c52266ce --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/r-invalid.svg @@ -0,0 +1,23 @@ + + + SVG Geometry Properties: parsing r with invalid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/r-valid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/r-valid.svg new file mode 100644 index 00000000000..70cd5503b79 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/r-valid.svg @@ -0,0 +1,23 @@ + + + SVG Geometry Properties: parsing r with valid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-invalid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-invalid.svg new file mode 100644 index 00000000000..9ce0603bea1 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-invalid.svg @@ -0,0 +1,22 @@ + + + SVG Geometry Properties: parsing rx with invalid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-valid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-valid.svg new file mode 100644 index 00000000000..e2b628f1de4 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-valid.svg @@ -0,0 +1,24 @@ + + + SVG Geometry Properties: parsing rx with valid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-invalid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-invalid.svg new file mode 100644 index 00000000000..7a25a1ec0e6 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-invalid.svg @@ -0,0 +1,22 @@ + + + SVG Geometry Properties: parsing rx with invalid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-valid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-valid.svg new file mode 100644 index 00000000000..4ce5bec4084 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-valid.svg @@ -0,0 +1,24 @@ + + + SVG Geometry Properties: parsing rx with valid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/x-invalid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/x-invalid.svg new file mode 100644 index 00000000000..31ad29524e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/x-invalid.svg @@ -0,0 +1,21 @@ + + + SVG Geometry Properties: parsing x with invalid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/x-valid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/x-valid.svg new file mode 100644 index 00000000000..5ff2fbd831d --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/x-valid.svg @@ -0,0 +1,22 @@ + + + SVG Geometry Properties: parsing x with valid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/y-invalid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/y-invalid.svg new file mode 100644 index 00000000000..d6ea944dbd6 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/y-invalid.svg @@ -0,0 +1,21 @@ + + + SVG Geometry Properties: parsing y with invalid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/y-valid.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/y-valid.svg new file mode 100644 index 00000000000..24885ccfc70 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/y-valid.svg @@ -0,0 +1,22 @@ + + + SVG Geometry Properties: parsing y with valid values + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/painting/inheritance.svg b/tests/wpt/web-platform-tests/svg/painting/inheritance.svg new file mode 100644 index 00000000000..4499b9249a8 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/painting/inheritance.svg @@ -0,0 +1,41 @@ + + + Inheritance of SVG painting properties + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/svg/text/inheritance.svg b/tests/wpt/web-platform-tests/svg/text/inheritance.svg new file mode 100644 index 00000000000..1f4609d7ac6 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/text/inheritance.svg @@ -0,0 +1,28 @@ + + + Inheritance of text properties + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/tools/ci/check_stability.py b/tests/wpt/web-platform-tests/tools/ci/check_stability.py index fa0cc3ba88a..cbed7a3521d 100644 --- a/tests/wpt/web-platform-tests/tools/ci/check_stability.py +++ b/tests/wpt/web-platform-tests/tools/ci/check_stability.py @@ -11,7 +11,7 @@ here = os.path.dirname(__file__) wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir)) sys.path.insert(0, wpt_root) -from tools.wpt import testfiles +from tools.wpt import run as wptrun, testfiles from tools.wpt.testfiles import get_git_cmd from tools.wpt.virtualenv import Virtualenv from tools.wpt.utils import Kwargs @@ -32,7 +32,7 @@ def setup_logging(): handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.DEBUG) - + wptrun.setup_logging({}) def do_delayed_imports(): global wptrunner, run_step, write_inconsistent, write_slow_tests, write_results @@ -208,6 +208,8 @@ def main(): def run(venv, wpt_args, **kwargs): do_delayed_imports() + setup_logging() + retcode = 0 wpt_args = create_parser().parse_args(wpt_args) @@ -229,8 +231,6 @@ def run(venv, wpt_args, **kwargs): except OSError: pass - setup_logging() - pr_number = pr() with TravisFold("browser_setup"): diff --git a/tests/wpt/web-platform-tests/tools/wpt/browser.py b/tests/wpt/web-platform-tests/tools/wpt/browser.py index 46afdfed64b..16cb075ad2d 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/browser.py +++ b/tests/wpt/web-platform-tests/tools/wpt/browser.py @@ -67,22 +67,28 @@ class Firefox(Browser): platform_ini = "browsers/firefox/platform.ini" requirements = "requirements_firefox.txt" - def platform_string_geckodriver(self): - platform = { - "Linux": "linux", - "Windows": "win", - "Darwin": "macos" - }.get(uname[0]) + platform = { + "Linux": "linux", + "Windows": "win", + "Darwin": "macos" + }.get(uname[0]) - if platform is None: + application_name = { + "stable": "Firefox.app", + "beta": "Firefox.app", + "nightly": "Firefox Nightly.app" + } + + def platform_string_geckodriver(self): + if self.platform is None: raise ValueError("Unable to construct a valid Geckodriver package name for current platform") - if platform in ("linux", "win"): + if self.platform in ("linux", "win"): bits = "64" if uname[4] == "x86_64" else "32" else: bits = "" - return "%s%s" % (platform, bits) + return "%s%s" % (self.platform, bits) def install(self, dest=None, channel="nightly"): """Install Firefox.""" @@ -102,24 +108,14 @@ class Firefox(Browser): "beta": "latest-beta", "nightly": "latest" } - application_name = { - "stable": "Firefox.app", - "beta": "Firefox.app", - "nightly": "Firefox Nightly.app" - } + if channel not in branch: raise ValueError("Unrecognised release channel: %s" % channel) from mozdownload import FactoryScraper import mozinstall - platform = { - "Linux": "linux", - "Windows": "win", - "Darwin": "mac" - }.get(uname[0]) - - if platform is None: + if self.platform is None: raise ValueError("Unable to construct a valid Firefox package name for current platform") if dest is None: @@ -136,10 +132,10 @@ class Firefox(Browser): try: mozinstall.install(filename, dest) except mozinstall.mozinstall.InstallError: - if platform == "mac" and os.path.exists(os.path.join(dest, application_name[channel])): + if self.platform == "macos" and os.path.exists(os.path.join(dest, self.application_name.get(channel, "Firefox Nightly.app"))): # mozinstall will fail if nightly is already installed in the venv because # mac installation uses shutil.copy_tree - mozinstall.uninstall(os.path.join(dest, application_name[channel])) + mozinstall.uninstall(os.path.join(dest, self.application_name.get(channel, "Firefox Nightly.app"))) mozinstall.install(filename, dest) else: raise @@ -150,46 +146,31 @@ class Firefox(Browser): def find_binary_path(self,path=None, channel="nightly"): """Looks for the firefox binary in the virtual environment""" - platform = { - "Linux": "linux", - "Windows": "win", - "Darwin": "mac" - }.get(uname[0]) - - application_name = { - "stable": "Firefox.app", - "beta": "Firefox.app", - "nightly": "Firefox Nightly.app" - }.get(channel) - if path is None: #os.getcwd() doesn't include the venv path path = os.path.join(os.getcwd(), "_venv", "browsers", channel) binary = None - if platform == "linux": + if self.platform == "linux": binary = find_executable("firefox", os.path.join(path, "firefox")) - elif platform == "win": + elif self.platform == "win": import mozinstall binary = mozinstall.get_binary(path, "firefox") - elif platform == "mac": - binary = find_executable("firefox", os.path.join(path, application_name, + elif self.platform == "macos": + binary = find_executable("firefox", os.path.join(path, self.application_name.get(channel, "Firefox Nightly.app"), "Contents", "MacOS")) return binary - def find_binary(self, venv_path=None, channel=None): + def find_binary(self, venv_path=None, channel="nightly"): if venv_path is None: venv_path = os.path.join(os.getcwd(), "_venv") - if channel is None: - channel = "nightly" - path = os.path.join(venv_path, "browsers", channel) binary = self.find_binary_path(path, channel) - if not binary and uname[0] == "Darwin": + if not binary and self.platform == "macos": macpaths = ["/Applications/Firefox Nightly.app/Contents/MacOS", os.path.expanduser("~/Applications/Firefox Nightly.app/Contents/MacOS"), "/Applications/Firefox Developer Edition.app/Contents/MacOS", @@ -282,7 +263,7 @@ class Firefox(Browser): url = self.get_profile_bundle_url(version, channel) - print("Installing test prefs from %s" % url) + logger.info("Installing test prefs from %s" % url) try: extract_dir = tempfile.mkdtemp() unzip(get(url).raw, dest=extract_dir) @@ -294,7 +275,7 @@ class Firefox(Browser): finally: shutil.rmtree(extract_dir) else: - print("Using cached test prefs from %s" % dest) + logger.info("Using cached test prefs from %s" % dest) return dest diff --git a/tests/wpt/web-platform-tests/tools/wpt/commands.json b/tests/wpt/web-platform-tests/tools/wpt/commands.json index 0ea6b25276f..161a9defbd1 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/commands.json +++ b/tests/wpt/web-platform-tests/tools/wpt/commands.json @@ -1,6 +1,7 @@ { "run": {"path": "run.py", "script": "run", "parser": "create_parser", "help": "Run tests in a browser", "virtualenv": true, "install": ["requests"], "requirements": ["../wptrunner/requirements.txt"]}, + "create": {"path": "create.py", "script": "run", "parser": "get_parser", "help": "Create a new wpt test"}, "update-expectations": {"path": "update.py", "script": "update_expectations", "parser": "create_parser_update", "help": "Update expectations files from raw logs.", "virtualenv": true, "install": ["requests"], diff --git a/tests/wpt/web-platform-tests/tools/wpt/create.py b/tests/wpt/web-platform-tests/tools/wpt/create.py new file mode 100644 index 00000000000..696609a68ce --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wpt/create.py @@ -0,0 +1,131 @@ +import subprocess +import os + +here = os.path.dirname(__file__) + +template_prefix = """ +%(documentElement)s +""" +template_long_timeout = "\n" + +template_body_th = """ + + + +""" + +template_body_reftest = """ + +""" + +template_body_reftest_wait = """ +""" + +def get_parser(): + import argparse + p = argparse.ArgumentParser() + p.add_argument("--no-editor", action="store_true", + help="Don't try to open the test in an editor") + p.add_argument("-e", "--editor", action="store", help="Editor to use") + p.add_argument("--long-timeout", action="store_true", + help="Test should be given a long timeout (typically 60s rather than 10s, but varies depending on environment)") + p.add_argument("--overwrite", action="store_true", + help="Allow overwriting an existing test file") + p.add_argument("-r", "--reftest", action="store_true", + help="Create a reftest rather than a testharness (js) test"), + p.add_argument("-m", "--reference", dest="ref", help="Path to the reference file") + p.add_argument("--mismatch", action="store_true", + help="Create a mismatch reftest") + p.add_argument("--wait", action="store_true", + help="Create a reftest that waits until takeScreenshot() is called") + p.add_argument("--tests-root", action="store", default=os.path.join(here, "..", ".."), + help="Path to the root of the wpt directory") + p.add_argument("path", action="store", help="Path to the test file") + return p + + + +def rel_path(path, tests_root): + if path is None: + return + + abs_path = os.path.normpath(os.path.abspath(path)) + return os.path.relpath(abs_path, tests_root) + + +def run(_venv, **kwargs): + path = rel_path(kwargs["path"], kwargs["tests_root"]) + ref_path = rel_path(kwargs["ref"], kwargs["tests_root"]) + + if kwargs["ref"]: + kwargs["reftest"] = True + + if ".." in path: + print("""Test path %s is not under wpt root.""" % path) + return 1 + + if ref_path and ".." in ref_path: + print("""Reference path %s is not under wpt root""" % ref_path) + return 1 + + + if os.path.exists(path) and not kwargs["overwrite"]: + print("Test path already exists, pass --overwrite to replace") + return 1 + + if kwargs["mismatch"] and not kwargs["reftest"]: + print("--mismatch only makes sense for a reftest") + return 1 + + if kwargs["wait"] and not kwargs["reftest"]: + print("--wait only makes sense for a reftest") + return 1 + + args = {"documentElement": "\n" if kwargs["wait"] else ""} + template = template_prefix % args + if kwargs["long_timeout"]: + template += template_long_timeout + + if kwargs["reftest"]: + args = {"match": "match" if not kwargs["mismatch"] else "mismatch", + "ref": os.path.relpath(ref_path, path) if kwargs["ref"] else '""'} + template += template_body_reftest % args + if kwargs["wait"]: + template += template_body_reftest_wait + else: + template += template_body_th + try: + os.makedirs(os.path.dirname(path)) + except OSError: + pass + with open(path, "w") as f: + f.write(template) + + ref_path = kwargs["ref"] + if ref_path and not os.path.exists(ref_path): + with open(ref_path, "w") as f: + f.write(template_prefix % {"documentElement": ""}) + + if kwargs["no_editor"]: + editor = None + elif kwargs["editor"]: + editor = kwargs["editor"] + elif "VISUAL" in os.environ: + editor = os.environ["VISUAL"] + elif "EDITOR" in os.environ: + editor = os.environ["EDITOR"] + else: + editor = None + + proc = None + if editor: + if ref_path: + path = "%s %s" % (path, ref_path) + proc = subprocess.Popen("%s %s" % (editor, path), shell=True) + else: + print("Created test %s" % path) + + if proc: + proc.wait() diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index 1894492d267..e10f895294f 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -179,6 +179,7 @@ class Firefox(BrowserSetup): def setup_kwargs(self, kwargs): if kwargs["binary"] is None: if kwargs["browser_channel"] is None: + kwargs["browser_channel"] = "nightly" logger.info("No browser channel specified. Running nightly instead.") binary = self.browser.find_binary(self.venv.path, @@ -197,7 +198,7 @@ Install Firefox or use --binary to set the binary path""") logger.info("""Can't find certutil, certificates will not be checked. Consider installing certutil via your OS package manager or directly.""") else: - print("Using certutil %s" % certutil) + logger.info("Using certutil %s" % certutil) kwargs["certutil_binary"] = certutil @@ -208,15 +209,15 @@ Consider installing certutil via your OS package manager or directly.""") install = self.prompt_install("geckodriver") if install: - print("Downloading geckodriver") + logger.info("Downloading geckodriver") webdriver_binary = self.browser.install_webdriver(dest=self.venv.bin_path) else: - print("Using webdriver binary %s" % webdriver_binary) + logger.info("Using webdriver binary %s" % webdriver_binary) if webdriver_binary: kwargs["webdriver_binary"] = webdriver_binary else: - print("Unable to find or install geckodriver, skipping wdspec tests") + logger.info("Unable to find or install geckodriver, skipping wdspec tests") kwargs["test_types"].remove("wdspec") if kwargs["prefs_root"] is None: @@ -229,6 +230,11 @@ Consider installing certutil via your OS package manager or directly.""") kwargs["headless"] = True logger.info("Running in headless mode, pass --no-headless to disable") + # Turn off Firefox WebRTC ICE logging on WPT (turned on by mozrunner) + os.unsetenv('R_LOG_LEVEL') + os.unsetenv('R_LOG_DESTINATION') + os.unsetenv('R_LOG_VERBOSE') + # Allow WebRTC tests to call getUserMedia. kwargs["extra_prefs"].append("media.navigator.streams.fake=true") @@ -253,10 +259,10 @@ class Chrome(BrowserSetup): install = self.prompt_install("chromedriver") if install: - print("Downloading chromedriver") + logger.info("Downloading chromedriver") webdriver_binary = self.browser.install_webdriver(dest=self.venv.bin_path) else: - print("Using webdriver binary %s" % webdriver_binary) + logger.info("Using webdriver binary %s" % webdriver_binary) if webdriver_binary: kwargs["webdriver_binary"] = webdriver_binary @@ -287,10 +293,10 @@ class ChromeAndroid(BrowserSetup): install = self.prompt_install("chromedriver") if install: - print("Downloading chromedriver") + logger.info("Downloading chromedriver") webdriver_binary = self.browser.install_webdriver(dest=self.venv.bin_path) else: - print("Using webdriver binary %s" % webdriver_binary) + logger.info("Using webdriver binary %s" % webdriver_binary) if webdriver_binary: kwargs["webdriver_binary"] = webdriver_binary @@ -310,10 +316,10 @@ class Opera(BrowserSetup): install = self.prompt_install("operadriver") if install: - print("Downloading operadriver") + logger.info("Downloading operadriver") webdriver_binary = self.browser.install_webdriver(dest=self.venv.bin_path) else: - print("Using webdriver binary %s" % webdriver_binary) + logger.info("Using webdriver binary %s" % webdriver_binary) if webdriver_binary: kwargs["webdriver_binary"] = webdriver_binary @@ -454,18 +460,12 @@ product_setup = { } -def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs): - from wptrunner import wptrunner, wptcommandline +def setup_logging(kwargs): import mozlog + from wptrunner import wptrunner global logger - kwargs = utils.Kwargs(kwargs.iteritems()) - - product_parts = kwargs["product"].split(":") - kwargs["product"] = product_parts[0] - sub_product = product_parts[1:] - # Use the grouped formatter by default where mozlog 3.9+ is installed if hasattr(mozlog.formatters, "GroupingFormatter"): default_formatter = "grouped" @@ -474,6 +474,16 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs): wptrunner.setup_logging(kwargs, {default_formatter: sys.stdout}) logger = wptrunner.logger + +def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs): + from wptrunner import wptcommandline + + kwargs = utils.Kwargs(kwargs.iteritems()) + + product_parts = kwargs["product"].split(":") + kwargs["product"] = product_parts[0] + sub_product = product_parts[1:] + check_environ(kwargs["product"]) args_general(kwargs) @@ -516,6 +526,8 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs): def run(venv, **kwargs): + setup_logging(kwargs) + # Remove arguments that aren't passed to wptrunner prompt = kwargs.pop("prompt", True) install_browser = kwargs.pop("install_browser", False) diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py index 94b1202736f..aaff0fa5331 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py @@ -39,6 +39,11 @@ def venv(): shutil.rmtree(venv.path) +@pytest.fixture(scope="module") +def logger(): + run.setup_logging({}) + + @pytest.mark.parametrize("platform", ["Windows", "Linux", "Darwin"]) def test_check_environ_fail(platform): m_open = mock.mock_open(read_data=b"") @@ -53,7 +58,7 @@ def test_check_environ_fail(platform): @pytest.mark.parametrize("product", product_list) -def test_setup_wptrunner(venv, product): +def test_setup_wptrunner(venv, logger, product): parser = run.create_parser() kwargs = vars(parser.parse_args(["--channel=nightly", product])) kwargs["prompt"] = False 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 d7c21cddfd6..061e549685c 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 @@ -37,8 +37,6 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data, capabilities = { "browserName": "chrome", - "platform": "ANY", - "version": "", "goog:chromeOptions": { "prefs": { "profile": { diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py index 2313a80c745..8e563b85a5a 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py @@ -15,15 +15,13 @@ from mozlog import structured manifest = None manifest_update = None download_from_github = None -manifest_log = None def do_delayed_imports(): # This relies on an already loaded module having set the sys.path correctly :( - global manifest, manifest_update, download_from_github, manifest_log + global manifest, manifest_update, download_from_github from manifest import manifest from manifest import update as manifest_update from manifest.download import download_from_github - from manifest import log as manifest_log class TestChunker(object): @@ -406,7 +404,6 @@ class ManifestLoader(object): def update_manifest(self, manifest_path, tests_path, url_base="/", recreate=False, download=False): self.logger.info("Updating test manifest %s" % manifest_path) - manifest_log.setup() json_data = None if download: diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/parser.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/parser.py index 82aad5f6135..9e0ff029b84 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/parser.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptmanifest/parser.py @@ -531,10 +531,12 @@ class Parser(object): def expect(self, type, value=None): if self.token[0] != type: - raise ParseError + raise ParseError(self.tokenizer.filename, self.tokenizer.line_number, + "Token '{}' doesn't equal expected type '{}'".format(self.token[0], type)) if value is not None: if self.token[1] != value: - raise ParseError + raise ParseError(self.tokenizer.filename, self.tokenizer.line_number, + "Token '{}' doesn't equal expected value '{}'".format(self.token[1], value)) self.consume() @@ -553,7 +555,8 @@ class Parser(object): while self.token == (token_types.paren, "["): self.consume() if self.token[0] != token_types.string: - raise ParseError + raise ParseError(self.tokenizer.filename, self.tokenizer.line_number, + "Token '{}' is not a string".format(self.token[0])) self.tree.append(DataNode(self.token[1])) self.consume() self.expect(token_types.paren, "]") @@ -582,7 +585,8 @@ class Parser(object): elif self.token[0] == token_types.atom: self.atom() else: - raise ParseError + raise ParseError(self.tokenizer.filename, self.tokenizer.line_number, + "Token '{}' is not a known type".format(self.token[0])) def list_value(self): self.tree.append(ListNode()) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/docs/pipes.rst b/tests/wpt/web-platform-tests/tools/wptserve/docs/pipes.rst index 8faeee489c9..df0746fd0fd 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/docs/pipes.rst +++ b/tests/wpt/web-platform-tests/tools/wptserve/docs/pipes.rst @@ -56,7 +56,7 @@ and `}}`. Inside the block the following variables are available: The query parameters for the request e.g. `{{GET[id]}}` for an id parameter sent with the request. -So, for example, to write a javascript file called `xhr.js` that +So, for example, to write a JavaScript file called `xhr.js` that depends on the host name of the server, without hardcoding, one might write:: diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py index 190e385f102..b08f5eabe46 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py @@ -108,3 +108,50 @@ class TestUsingH2Server: def teardown_method(self, test_method): self.conn.close() self.server.stop() + + +class TestWrapperHandlerUsingServer(TestUsingServer): + '''For a wrapper handler, a .js dummy testing file is requried to render + the html file. This class extends the TestUsingServer and do some some + extra work: it tries to generate the dummy .js file in setUp and + remove it in tearDown.''' + dummy_js_files = {} + + def gen_js_file(self, filename, empty=True, content=b''): + self.remove_js_file(filename) + + with open(filename, 'wb') as fp: + if not empty: + fp.write(content) + + def remove_js_file(self, filename): + if os.path.exists(filename): + os.remove(filename) + + def setUp(self): + super(TestWrapperHandlerUsingServer, self).setUp() + + for filename, content in self.dummy_js_files.items(): + filepath = os.path.join(doc_root, filename) + if content == '': + self.gen_js_file(filepath) + else: + self.gen_js_file(filepath, False, content) + + def run_wrapper_test(self, req_file, header_data, wrapper_handler): + route = ('GET', req_file, wrapper_handler()) + self.server.router.register(*route) + + resp = self.request(route[1]) + self.assertEqual(200, resp.getcode()) + self.assertEqual(header_data, resp.info()['Content-Type']) + + with open(os.path.join(doc_root, req_file), 'rb') as fp: + self.assertEqual(fp.read(), resp.read()) + + def tearDown(self): + super(TestWrapperHandlerUsingServer, self).tearDown() + + for filename, _ in self.dummy_js_files.items(): + filepath = os.path.join(doc_root, filename) + self.remove_js_file(filepath) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/bar.any.worker.js b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/bar.any.worker.js new file mode 100644 index 00000000000..66b7be39049 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/bar.any.worker.js @@ -0,0 +1,9 @@ + +self.GLOBAL = { + isWindow: function() { return false; }, + isWorker: function() { return true; }, +}; +importScripts("/resources/testharness.js"); + +importScripts("/bar.any.js"); +done(); diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.html b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.html new file mode 100644 index 00000000000..88e2665c669 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.html @@ -0,0 +1,14 @@ + + + + + + + +
+ diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.serviceworker.html b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.serviceworker.html new file mode 100644 index 00000000000..8dcb11a3768 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.serviceworker.html @@ -0,0 +1,15 @@ + + + + + +
+ diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.sharedworker.html b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.sharedworker.html new file mode 100644 index 00000000000..277101697ff --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.sharedworker.html @@ -0,0 +1,9 @@ + + + + + +
+ diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.worker.html b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.worker.html new file mode 100644 index 00000000000..f77edd971a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.any.worker.html @@ -0,0 +1,9 @@ + + + + + +
+ diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.window.html b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.window.html new file mode 100644 index 00000000000..04c694ddf2a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.window.html @@ -0,0 +1,8 @@ + + + + + + +
+ diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.worker.html b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.worker.html new file mode 100644 index 00000000000..3eddf36f1c3 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/docroot/foo.worker.html @@ -0,0 +1,9 @@ + + + + + +
+ diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py index 6bcb842e625..2e2d0d6771b 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_cookies.py @@ -1,4 +1,3 @@ -import sys import unittest import pytest @@ -51,7 +50,6 @@ class TestResponseSetCookie(TestUsingServer): #Should also check that expires is in the past class TestRequestCookies(TestUsingServer): - @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2") def test_set_cookie(self): @wptserve.handlers.handler def handler(request, response): diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py index 759a096b799..db119616bd6 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py @@ -9,7 +9,9 @@ from six.moves.urllib.error import HTTPError wptserve = pytest.importorskip("wptserve") from .base import TestUsingServer, TestUsingH2Server, doc_root +from .base import TestWrapperHandlerUsingServer +from serve import serve class TestFileHandler(TestUsingServer): def test_GET(self): @@ -388,5 +390,58 @@ class TestH2Handler(TestUsingH2Server): assert resp.read() == '' +class TestWorkersHandler(TestWrapperHandlerUsingServer): + dummy_js_files = {'foo.worker.js': b'', + 'foo.any.js': b''} + + def test_any_worker_html(self): + self.run_wrapper_test('foo.any.worker.html', + 'text/html', serve.WorkersHandler) + + def test_worker_html(self): + self.run_wrapper_test('foo.worker.html', + 'text/html', serve.WorkersHandler) + + +class TestWindowHandler(TestWrapperHandlerUsingServer): + dummy_js_files = {'foo.window.js': b''} + + def test_window_html(self): + self.run_wrapper_test('foo.window.html', + 'text/html', serve.WindowHandler) + + +class TestAnyHtmlHandler(TestWrapperHandlerUsingServer): + dummy_js_files = {'foo.any.js': b''} + + def test_any_html(self): + self.run_wrapper_test('foo.any.html', + 'text/html', serve.AnyHtmlHandler) + + +class TestSharedWorkersHandler(TestWrapperHandlerUsingServer): + dummy_js_files = {'foo.any.js': b'// META: global=sharedworker\n'} + + def test_any_sharedworkers_html(self): + self.run_wrapper_test('foo.any.sharedworker.html', + 'text/html', serve.SharedWorkersHandler) + + +class TestServiceWorkersHandler(TestWrapperHandlerUsingServer): + dummy_js_files = {'foo.any.js': b'// META: global=serviceworker\n'} + + def test_serviceworker_html(self): + self.run_wrapper_test('foo.any.serviceworker.html', + 'text/html', serve.ServiceWorkersHandler) + + +class TestAnyWorkerHandler(TestWrapperHandlerUsingServer): + dummy_js_files = {'bar.any.js': b''} + + def test_any_work_js(self): + self.run_wrapper_test('bar.any.worker.js', 'text/javascript', + serve.AnyWorkerHandler) + + if __name__ == '__main__': unittest.main() diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/test_stash.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_stash.py new file mode 100644 index 00000000000..4813504a7e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/test_stash.py @@ -0,0 +1,130 @@ +import threading +import multiprocessing +from multiprocessing.managers import BaseManager + +import pytest + +Stash = pytest.importorskip("wptserve.stash").Stash + +@pytest.fixture() +def add_cleanup(): + fns = [] + + def add(fn): + fns.append(fn) + + yield add + + for fn in fns: + fn() + +def run(process_queue, request_lock, response_lock): + """Create two Stash instances in parallel threads. Use the provided locks + to ensure the first thread is actively establishing an interprocess + communication channel at the moment the second thread executes.""" + + def target(thread_queue): + stash = Stash("/", ("localhost", 4543), b"some key") + + # The `lock` property of the Stash instance should always be set + # immediately following initialization. These values are asserted in + # the active test. + thread_queue.put(stash.lock is None) + + thread_queue = multiprocessing.Queue() + first = threading.Thread(target=target, args=(thread_queue,)) + second = threading.Thread(target=target, args=(thread_queue,)) + + request_lock.acquire() + response_lock.acquire() + first.start() + + request_lock.acquire() + + # At this moment, the `first` thread is waiting for a proxied object. + # Create a second thread in order to inspect the behavior of the Stash + # constructor at this moment. + + second.start() + + # Allow the `first` thread to proceed + + response_lock.release() + + # Wait for both threads to complete and report their stateto the test + process_queue.put(thread_queue.get()) + process_queue.put(thread_queue.get()) + + +def test_delayed_lock(add_cleanup): + """Ensure that delays in proxied Lock retrieval do not interfere with + initialization in parallel threads.""" + + class SlowLock(BaseManager): + pass + + request_lock = multiprocessing.Lock() + response_lock = multiprocessing.Lock() + + queue = multiprocessing.Queue() + + def mutex_lock_request(): + """This request handler allows the caller to delay execution of a + thread which has requested a proxied representation of the `lock` + property, simulating a "slow" interprocess communication channel.""" + + request_lock.release() + response_lock.acquire() + return threading.Lock() + + SlowLock.register("get_dict", callable=lambda: {}) + SlowLock.register("Lock", callable=mutex_lock_request) + + slowlock = SlowLock(("localhost", 4543), b"some key") + slowlock.start() + add_cleanup(lambda: slowlock.shutdown()) + + parallel = multiprocessing.Process(target=run, + args=(queue, request_lock, response_lock)) + parallel.start() + add_cleanup(lambda: parallel.terminate()) + + assert [queue.get(), queue.get()] == [False, False], ( + "both instances had valid locks") + +def test_delayed_dict(add_cleanup): + """Ensure that delays in proxied `dict` retrieval do not interfere with + initialization in parallel threads.""" + + class SlowDict(BaseManager): + pass + + request_lock = multiprocessing.Lock() + response_lock = multiprocessing.Lock() + + queue = multiprocessing.Queue() + + # This request handler allows the caller to delay execution of a thread + # which has requested a proxied representation of the "get_dict" property. + def mutex_dict_request(): + """This request handler allows the caller to delay execution of a + thread which has requested a proxied representation of the `get_dict` + property, simulating a "slow" interprocess communication channel.""" + request_lock.release() + response_lock.acquire() + return {} + + SlowDict.register("get_dict", callable=mutex_dict_request) + SlowDict.register("Lock", callable=lambda: threading.Lock()) + + slowdict = SlowDict(("localhost", 4543), b"some key") + slowdict.start() + add_cleanup(lambda: slowdict.shutdown()) + + parallel = multiprocessing.Process(target=run, + args=(queue, request_lock, response_lock)) + parallel.start() + add_cleanup(lambda: parallel.terminate()) + + assert [queue.get(), queue.get()] == [False, False], ( + "both instances had valid locks") diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py index cb5435fdef4..57368f794d2 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/config.py @@ -101,7 +101,7 @@ class ConfigBuilder(object): The properties on the final configuration include those explicitly supplied and computed properties. The computed properties are - defined byt the computed_properites attribute on the class. This + defined by the computed_properties attribute on the class. This is a list of property names, each corresponding to a _get_ method on the class. These methods are called in the order defined in computed_properties and are passed a single argument, a diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py index cbae6d6fcb9..bb24cd31006 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py @@ -329,7 +329,7 @@ def sub(request, response, escape_type="html"): "html" and "none", with "html" the default for historic reasons. The format is a very limited template language. Substitutions are - enclosed by {{ and }}. There are several avaliable substitutions: + enclosed by {{ and }}. There are several available substitutions: host A simple string value and represents the primary host from which the 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 990774cbb9e..b248a054d3b 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py @@ -1,7 +1,7 @@ import base64 import cgi from six.moves.http_cookies import BaseCookie -from six import BytesIO, binary_type, text_type +from six import BytesIO, binary_type, text_type, iteritems, PY3 import tempfile from six.moves.urllib.parse import parse_qsl, urlsplit @@ -319,9 +319,11 @@ class Request(object): if self._cookies is None: parser = BaseCookie() cookie_headers = self.headers.get("cookie", b"") + if PY3: + cookie_headers = cookie_headers.decode("iso-8859-1") parser.load(cookie_headers) cookies = Cookies() - for key, value in parser.iteritems(): + for key, value in iteritems(parser): cookies[key] = CookieValue(value) self._cookies = cookies return self._cookies @@ -619,7 +621,7 @@ class Authentication(object): header, or None Both attributes are binary strings (`str` in Py2, `bytes` in Py3), since - RFC7617 Section 2.1 does not specify the encoding for username & passsword + RFC7617 Section 2.1 does not specify the encoding for username & password (as long it's compatible with ASCII). UTF-8 should be a relatively safe choice if callers need to decode them as most browsers use it. """ 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 802ae9ca9a9..848fbb74c7b 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py @@ -44,7 +44,7 @@ for parsing the incoming request. A RequestRewriter is then applied and may change the request data if it matches a supplied rule. -Once the request data had been finalised, Request and Reponse +Once the request data had been finalised, Request and Response objects are constructed. These are used by the other parts of the system to read information about the request and manipulate the response. @@ -154,7 +154,7 @@ class WebTestServer(ThreadingMixIn, BaseHTTPServer.HTTPServer): port specified in the server_address parameter. False to bind the server only to the port in the server_address parameter, but not to the address. - :param latency: Delay in ms to wait before seving each response, or + :param latency: Delay in ms to wait before serving each response, or callable that returns a delay in ms """ self.router = router @@ -591,7 +591,7 @@ class WebTestHttpd(object): :param config: Dictionary holding environment configuration settings for handlers to read, or None to use the default values. :param bind_address: Boolean indicating whether to bind server to IP address. - :param latency: Delay in ms to wait before seving each response, or + :param latency: Delay in ms to wait before serving each response, or callable that returns a delay in ms HTTP server designed for testing scenarios. @@ -621,7 +621,7 @@ class WebTestHttpd(object): .. attribute:: started - Boolean indictaing whether the server is running + Boolean indictating whether the server is running """ def __init__(self, host="127.0.0.1", port=8000, diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py index 6699edb5964..e89bb96f82f 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/sslutils/__init__.py @@ -11,4 +11,4 @@ def get_cls(name): try: return environments[name] except KeyError: - raise ValueError("%s is not a vaid ssl type." % name) + raise ValueError("%s is not a valid SSL type." % name) diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/stash.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/stash.py index ae48a861123..d13703c16eb 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/stash.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/stash.py @@ -104,6 +104,7 @@ class Stash(object): _proxy = None lock = None + _initializing = threading.Lock() def __init__(self, default_path, address=None, authkey=None): self.default_path = default_path @@ -115,7 +116,16 @@ class Stash(object): Stash._proxy = {} Stash.lock = threading.Lock() - if Stash._proxy is None: + # Initializing the proxy involves connecting to the remote process and + # retrieving two proxied objects. This process is not inherently + # atomic, so a lock must be used to make it so. Atomicity ensures that + # only one thread attempts to initialize the connection and that any + # threads running in parallel correctly wait for initialization to be + # fully complete. + with Stash._initializing: + if Stash.lock: + return + manager = ClientDictManager(address, authkey) manager.connect() Stash._proxy = manager.get_dict() diff --git a/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html b/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html index 2d381045118..d1fafa70cd2 100644 --- a/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html @@ -8,7 +8,7 @@ diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html index 2a7edab9db4..5fce3ff59e6 100644 --- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html +++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html @@ -89,4 +89,20 @@ assert_element_accepts_trusted_type(c[0], c[1], null, "null"); }, c[0] + "." + c[1] + " accepts string and null after default policy was created"); }); + + // TrustedScript Assignments + const scriptTestCases = [ + [ 'script', 'text' ], + [ 'script', 'innerText' ], + [ 'script', 'textContent' ] + ]; + + testnb = 0; + scriptTestCases.forEach(c => { + test(t => { + assert_element_accepts_trusted_script(window, ++testnb, t, c[0], c[1], RESULTS.SCRIPT); + assert_throws_no_trusted_type(c[0], c[1], 'A string'); + assert_throws_no_trusted_type(c[0], c[1], null); + }, c[0] + "." + c[1] + " accepts only TrustedScript"); + }); diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-types.js b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-types.js index a71783b99e1..519e38ae8ae 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-types.js +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-types.js @@ -1720,7 +1720,7 @@ const rotateListType = { 1000); testAnimationSamples(animation, idlName, - [{ time: 500, expected: '0 1 0 45deg' }]); + [{ time: 500, expected: 'y 45deg' }]); }, `${property} with rotation axes`); test(t => { @@ -1733,7 +1733,7 @@ const rotateListType = { 1000); testAnimationSamples(animation, idlName, - [{ time: 250, expected: '0 1 0 180deg' }]); + [{ time: 250, expected: 'y 180deg' }]); }, `${property} with rotation axes and range over 360 degrees`); test(t => { @@ -1768,15 +1768,15 @@ const rotateListType = { // Rotation specified in transform property should not affect the computed // value of |property|. target.style.transform = 'rotate(20deg)'; - target.style[idlName] = '0 1 0 -45deg'; + target.style[idlName] = 'y -45deg'; const animation = target.animate({ [idlName]: ['0 1 0 90deg', '0 1 0 180deg'] }, { duration: 1000, fill: 'both', composite: 'add' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '0 1 0 45deg' }, - { time: 1000, expected: '0 1 0 135deg' }]); + [{ time: 0, expected: 'y 45deg' }, + { time: 1000, expected: 'y 135deg' }]); }, `${property} with underlying transform`); test(t => { @@ -1816,8 +1816,8 @@ const rotateListType = { { duration: 1000, fill: 'both', composite: 'accumulate' }); testAnimationSamples(animation, idlName, - [{ time: 0, expected: '1 0 0 45deg' }, - { time: 1000, expected: '1 0 0 135deg' }]); + [{ time: 0, expected: 'x 45deg' }, + { time: 1000, expected: 'x 135deg' }]); }, `${property} with underlying transform`); test(t => { @@ -1885,7 +1885,7 @@ const translateListType = { 1000 ); testAnimationSamples(animation, idlName, - [{ time: 500, expected: '200px -25.5px 200px' }]); + [{ time: 500, expected: '200px calc(25% - 50.5px) 200px' }]); }, `${property} with combination of percentages and lengths`); }, testAddition: function(property, setup) { @@ -1924,8 +1924,8 @@ const translateListType = { { duration: 1000, fill: 'both', composite: 'add' }); testAnimationSamples(animation, idlName, - [ { time: 0, expected: '-150px' }, - { time: 1000, expected: '550px' }]); + [ { time: 0, expected: 'calc(50% - 200px)' }, + { time: 1000, expected: 'calc(50% + 500px)' }]); }, `${property} with underlying percentage value`); }, @@ -2181,7 +2181,7 @@ const filterListType = { const animation = target.animate( { [idlName]: // To make missing filter-function-lists, specified the opacity. - ['opoacity(1)', + ['opacity(1)', 'opacity(0) grayscale(1) invert(1) sepia(1) blur(10px)'] }, 1000); diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/center_point.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/center_point.py index 21bf8f31fd8..da60a087277 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/center_point.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/center_point.py @@ -1,7 +1,7 @@ -import math import pytest from tests.support.asserts import assert_error, assert_success +from tests.support.helpers import center_point from tests.support.inline import inline @@ -12,28 +12,6 @@ def element_click(session, element): element_id=element.id)) -def center_point(element): - """Calculates the in-view center point of a web element.""" - inner_width, inner_height = element.session.execute_script( - "return [window.innerWidth, window.innerHeight]") - rect = element.rect - - # calculate the intersection of the rect that is inside the viewport - visible = { - "left": max(0, min(rect["x"], rect["x"] + rect["width"])), - "right": min(inner_width, max(rect["x"], rect["x"] + rect["width"])), - "top": max(0, min(rect["y"], rect["y"] + rect["height"])), - "bottom": min(inner_height, max(rect["y"], rect["y"] + rect["height"])), - } - - # arrive at the centre point of the visible rectangle - x = (visible["left"] + visible["right"]) / 2.0 - y = (visible["top"] + visible["bottom"]) / 2.0 - - # convert to CSS pixels, as centre point can be float - return (math.floor(x), math.floor(y)) - - def square(size): return inline(""" + +
+ + + """.format(offset=offset)) + target = session.find.css("div", all=False) + assert session.execute_script("return window.scrollY") == 0 + + response = element_click(session, target) + assert_success(response) + assert session.execute_script("return window.scrollY") == 0 + click_point = assert_one_click(session) + assert click_point == center_point(target) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/stress.py b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/stress.py new file mode 100644 index 00000000000..b907a31f17e --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/fullscreen_window/stress.py @@ -0,0 +1,19 @@ +# META: timeout=long + +import pytest + +from tests.support.asserts import assert_success +from tests.support.helpers import is_fullscreen + + +def fullscreen_window(session): + return session.transport.send( + "POST", "session/{session_id}/window/fullscreen".format(**vars(session))) + + +@pytest.mark.parametrize("i", range(5)) +def test_stress(session, i): + assert not is_fullscreen(session) + response = fullscreen_window(session) + assert_success(response) + assert is_fullscreen(session) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/stress.py b/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/stress.py new file mode 100644 index 00000000000..daa8a911928 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/stress.py @@ -0,0 +1,42 @@ +# META: timeout=long + +import time + +import pytest + +from tests.support.asserts import assert_success +from tests.support.helpers import document_hidden + + +def maximize_window(session): + response = session.transport.send( + "POST", "session/{session_id}/window/maximize".format(**vars(session))) + rect = assert_success(response) + return (rect["width"], rect["height"]) + + +@pytest.mark.parametrize("i", range(5)) +def test_stress(session, i): + """ + Without defining the heuristics of each platform WebDriver runs on, + the best we can do is to test that maximization occurs synchronously. + + Not all systems and window managers support maximizing the window, + but they are expected to do their best. The minimum requirement + is that the maximized window is larger than its original size. + + To ensure the maximization happened synchronously, we test + that the size hasn't changed after a short amount of time, + using a thread suspend. This is not ideal, but the best we + can do given the level of platform ambiguity implied by WebDriver. + """ + session.window.size = (100, 100) + session.window.position = (0, 0) + original_size = session.window.size + + size_after_maximize = maximize_window(session) + assert size_after_maximize > original_size + + t_end = time.time() + 3 + while time.time() < t_end: + assert session.window.size == size_after_maximize diff --git a/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/stress.py b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/stress.py new file mode 100644 index 00000000000..8990f12669d --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/minimize_window/stress.py @@ -0,0 +1,19 @@ +# META: timeout=long + +import pytest + +from tests.support.asserts import assert_success +from tests.support.helpers import document_hidden + + +def minimize_window(session): + return session.transport.send( + "POST", "session/{session_id}/window/minimize".format(**vars(session))) + + +@pytest.mark.parametrize("i", range(5)) +def test_stress(session, i): + assert not document_hidden(session) + response = minimize_window(session) + assert_success(response) + assert document_hidden(session) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py index c6eae2886e9..4017bc198e4 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/set_window_rect/set.py @@ -5,7 +5,8 @@ import pytest from webdriver.transport import Response from tests.support.asserts import assert_error, assert_success -from tests.support.helpers import document_hidden, is_fullscreen +from tests.support.helpers import (available_screen_size, document_hidden, + is_fullscreen, screen_size) def set_window_rect(session, rect): @@ -172,38 +173,31 @@ def test_height_width(session): session.window.position = (50, 50) original = session.window.rect - max = session.execute_script(""" - return { - width: window.screen.availWidth, - height: window.screen.availHeight, - }""") + screen_width, screen_height = screen_size(session) response = set_window_rect(session, { - "width": max["width"] - 100, - "height": max["height"] - 100 + "width": screen_width - 100, + "height": screen_height - 100 }) assert_success(response, { "x": original["x"], "y": original["y"], - "width": max["width"] - 100, - "height": max["height"] - 100 + "width": screen_width - 100, + "height": screen_height - 100, }) def test_height_width_larger_than_max(session): - max = session.execute_script(""" - return { - width: window.screen.availWidth, - height: window.screen.availHeight, - }""") + screen_width, screen_height = screen_size(session) + avail_width, avail_height = available_screen_size(session) response = set_window_rect(session, { - "width": max["width"] + 100, - "height": max["height"] + 100 + "width": screen_width + 100, + "height": screen_height + 100 }) rect = assert_success(response) - assert rect["width"] >= max["width"] - assert rect["height"] >= max["height"] + assert rect["width"] >= avail_width + assert rect["height"] >= avail_height def test_height_width_as_current(session): diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py index 6c62d756259..c955135f814 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/helpers.py @@ -1,5 +1,6 @@ from __future__ import print_function +import math import sys import webdriver @@ -107,11 +108,33 @@ def clear_all_cookies(session): def document_dimensions(session): return tuple(session.execute_script(""" - let {width, height} = document.documentElement.getBoundingClientRect(); - return [width, height]; + let rect = document.documentElement.getBoundingClientRect(); + return [rect.width, rect.height]; """)) +def center_point(element): + """Calculates the in-view center point of a web element.""" + inner_width, inner_height = element.session.execute_script( + "return [window.innerWidth, window.innerHeight]") + rect = element.rect + + # calculate the intersection of the rect that is inside the viewport + visible = { + "left": max(0, min(rect["x"], rect["x"] + rect["width"])), + "right": min(inner_width, max(rect["x"], rect["x"] + rect["width"])), + "top": max(0, min(rect["y"], rect["y"] + rect["height"])), + "bottom": min(inner_height, max(rect["y"], rect["y"] + rect["height"])), + } + + # arrive at the centre point of the visible rectangle + x = (visible["left"] + visible["right"]) / 2.0 + y = (visible["top"] + visible["bottom"]) / 2.0 + + # convert to CSS pixels, as centre point can be float + return (math.floor(x), math.floor(y)) + + def document_hidden(session): """Polls for the document to become hidden.""" def hidden(session): @@ -122,13 +145,13 @@ def document_hidden(session): def element_rect(session, element): return session.execute_script(""" let element = arguments[0]; - let {height, left, top, width} = element.getBoundingClientRect(); + let rect = element.getBoundingClientRect(); return { - x: left + window.pageXOffset, - y: top + window.pageYOffset, - width: width, - height: height, + x: rect.left + window.pageXOffset, + y: rect.top + window.pageYOffset, + width: rect.width, + height: rect.height, }; """, args=(element,)) @@ -158,3 +181,34 @@ def is_fullscreen(session): return session.execute_script(""" return !!(window.fullScreen || document.webkitIsFullScreen) """) + + +def document_dimensions(session): + return tuple(session.execute_script(""" + let {devicePixelRatio} = window; + let {width, height} = document.documentElement.getBoundingClientRect(); + return [width * devicePixelRatio, height * devicePixelRatio]; + """)) + + +def screen_size(session): + """Returns the available width/height size of the screen.""" + return tuple(session.execute_script(""" + return [ + screen.availWidth, + screen.availHeight, + ]; + """)) + + +def available_screen_size(session): + """ + Returns the effective available screen width/height size, + excluding any fixed window manager elements. + """ + return tuple(session.execute_script(""" + return [ + screen.availWidth - screen.availLeft, + screen.availHeight - screen.availTop, + ]; + """)) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py index d289ee3b912..cf3b21905b7 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py @@ -1,6 +1,6 @@ def element_rect(session, element): return session.execute_script(""" - let {devicePixelRatio} = window; + let devicePixelRatio = window.devicePixelRatio; let rect = arguments[0].getBoundingClientRect(); return { diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py index d38c8a0f79f..13d7a623eda 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py @@ -1,6 +1,6 @@ def document_dimensions(session): return tuple(session.execute_script(""" - let {devicePixelRatio} = window; - let {width, height} = document.documentElement.getBoundingClientRect(); - return [Math.floor(width * devicePixelRatio), Math.floor(height * devicePixelRatio)]; + let devicePixelRatio = window.devicePixelRatio; + let rect = document.documentElement.getBoundingClientRect(); + return [Math.floor(rect.width * devicePixelRatio), Math.floor(rect.height * devicePixelRatio)]; """)) diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js index 8529fb4ef3c..df277ff6d35 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper.js @@ -249,6 +249,19 @@ function createDataChannelPair( }); } +// Wait for RTP and RTCP stats to arrive +async function waitForRtpAndRtcpStats(pc) { + while (true) { + const report = await pc.getStats(); + const stats = [...report.values()].filter(({type}) => type.endsWith("bound-rtp")); + // Each RTP and RTCP stat has a reference + // to the matching stat in the other direction + if (stats.length && stats.every(({localId, remoteId}) => localId || remoteId)) { + break; + } + } +} + // Wait for a single message event and return // a promise that resolve when the event fires function awaitMessage(channel) { diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html index 49eb522881a..41662f3158f 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html @@ -146,7 +146,7 @@ generateVideoReceiveOnlyOffer(pc) .then(offer2 => pc.setLocalDescription(offer2) - .then(offer2 => { + .then(() => { assert_session_desc_not_similar(offer1, offer2); assert_equals(pc.signalingState, 'have-local-offer'); assert_session_desc_similar(pc.localDescription, offer2); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html index 682e7e57e46..3809530b74c 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html @@ -1,5 +1,6 @@ + RTCPeerConnection.prototype.getStats @@ -12,6 +13,7 @@ // The following helper functions are called from RTCPeerConnection-helper.js: // doSignalingHandshake // getUserMediaTracksAndStreams + // waitForRtpAndRtcpStats // The following helper functions are called from RTCStats-helper.js // (depends on dictionary-helper.js): @@ -504,6 +506,10 @@ await doSignalingHandshake(caller, callee); await onIceConnectionStateCompleted(caller); + // Wait until RTCP has arrived so that it can not arrive between + // the two get stats calls. + await waitForRtpAndRtcpStats(caller); + let senderReport = await sender.getStats(); let trackReport = await caller.getStats(sender.track); @@ -532,6 +538,10 @@ await onIceConnectionStateCompleted(caller); let receiver = caller.getReceivers()[0]; + // Wait until RTCP has arrived so that it can not arrive between + // the two get stats calls. + await waitForRtpAndRtcpStats(caller); + let receiverReport = await receiver.getStats(); let trackReport = await caller.getStats(receiver.track); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream-helper.js new file mode 100644 index 00000000000..a87668f5a21 --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream-helper.js @@ -0,0 +1,62 @@ +'use strict'; + +// This file depends on RTCQuicTransport-helper.js which should be loaded from +// the main HTML file. +// The following helper methods are called from RTCQuicTransport-helper.js: +// makeTwoConnectedQuicTransports + +// Run a test function for as many ways as an RTCQuicStream can transition to +// the 'closed' state. +// |test_func| will be called with the test as the first argument and the closed +// RTCQuicStream as the second argument. +function closed_stream_test(test_func, description) { + promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + localStream.reset(); + assert_equals(localStream.state, 'closed'); + return test_func(t, localStream); + }, 'Stream closed by local reset(): ' + description); + + promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + localStream.write(new Uint8Array(1)); + const remoteWatcher = + new EventWatcher(t, remoteQuicTransport, 'quicstream'); + const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); + localStream.reset(); + const remoteStreamWatcher = + new EventWatcher(t, remoteStream, 'statechange'); + await remoteStreamWatcher.wait_for('statechange'); + assert_equals(remoteStream.state, 'closed'); + return test_func(t, remoteStream); + }, 'Stream closed by remote reset(): ' + description); + + promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + localQuicTransport.stop(); + assert_equals(localStream.state, 'closed'); + return test_func(t, localStream); + }, 'Stream closed by local RTCQuicTransport stop(): ' + description); + + promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + localStream.write(new Uint8Array(1)); + const remoteWatcher = + new EventWatcher(t, remoteQuicTransport, + [ 'quicstream', 'statechange' ]); + const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); + localQuicTransport.stop(); + await remoteWatcher.wait_for('statechange'); + assert_equals(localStream.state, 'closed'); + return test_func(t, localStream); + }, 'Stream closed by remote RTCQuicTransport stop(): ' + description); +} + diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html index 68c88e2757c..b147414794e 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html @@ -5,6 +5,7 @@ + diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html index 7d16deaa8c7..1614a11c1a1 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html @@ -2129,6 +2129,7 @@ const tests = [ checkAddTransceiverWithTrack, checkAddTransceiverWithAddTrack, checkAddTransceiverWithDirection, + checkMsidNoTrackId, checkAddTransceiverWithSetRemoteOfferSending, checkAddTransceiverWithSetRemoteOfferNoSend, checkAddTransceiverBadKind, diff --git a/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js b/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js index 161a7d270bb..0abca1691a3 100644 --- a/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js +++ b/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js @@ -14,8 +14,9 @@ if ('MojoInterfaceInterceptor' in self) { let prefix = '/resources/chromium'; if ('window' in self) { - if (window.location.pathname.includes('/LayoutTests/')) { - let root = window.location.pathname.match(/.*LayoutTests/); + const pathname = window.location.pathname; + if (pathname.includes('/LayoutTests/') || pathname.includes('/web_tests/')) { + let root = pathname.match(/.*(?:LayoutTests|web_tests)/); prefix = `${root}/external/wpt/resources/chromium`; } } diff --git a/tests/wpt/web-platform-tests/worklets/resources/csp-tests.js b/tests/wpt/web-platform-tests/worklets/resources/csp-tests.js index 0de1daae228..d2ca05f3998 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/csp-tests.js +++ b/tests/wpt/web-platform-tests/worklets/resources/csp-tests.js @@ -22,109 +22,165 @@ function openWindowAndExpectResult(windowURL, scriptURL, type, expectation) { // Usage: // runContentSecurityPolicyTests("paint"); function runContentSecurityPolicyTests(workletType) { - promise_test(t => { - const kWindowURL = - 'resources/addmodule-window.html?pipe=header(' + - 'Content-Security-Policy, script-src \'self\' \'unsafe-inline\')'; - const kScriptURL = - get_host_info().HTTPS_REMOTE_ORIGIN + - '/worklets/resources/import-empty-worklet-script-with-cors-header.js'; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'REJECTED'); - }, 'Importing a remote-origin worklet script should be blocked by the ' + - 'script-src \'self\' directive.'); - - promise_test(t => { - const kWindowURL = - 'resources/addmodule-window.html?pipe=header(' + - 'Content-Security-Policy, script-src \'self\' \'unsafe-inline\')'; - const kScriptURL = 'import-remote-origin-empty-worklet-script.sub.js'; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'REJECTED'); - }, 'Importing a remote-origin script from a same-origin worklet script ' + - 'should be blocked by the script-src \'self\' directive.'); - - promise_test(t => { - const kWindowURL = - 'resources/addmodule-window.html?pipe=header(' + - 'Content-Security-Policy, script-src * \'unsafe-inline\')'; - const kScriptURL = - get_host_info().HTTPS_REMOTE_ORIGIN + - '/worklets/resources/empty-worklet-script-with-cors-header.js'; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'RESOLVED'); - }, 'Importing a remote-origin worklet script should not be blocked ' + - 'because the script-src * directive allows it.'); - - promise_test(t => { - const kWindowURL = - 'resources/addmodule-window.html?pipe=header(' + - 'Content-Security-Policy, script-src * \'unsafe-inline\')'; - // A worklet on HTTPS_REMOTE_ORIGIN will import a child script on - // HTTPS_REMOTE_ORIGIN. - const kScriptURL = - get_host_info().HTTPS_REMOTE_ORIGIN + - '/worklets/resources/import-empty-worklet-script-with-cors-header.js'; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'RESOLVED'); - }, 'Importing a remote-origin script from a remote-origin worklet script '+ - 'should not be blocked because the script-src * directive allows it.'); - - promise_test(t => { - const kWindowURL = - 'resources/addmodule-window.html?pipe=header(' + - 'Content-Security-Policy, worker-src \'self\' \'unsafe-inline\')'; - const kScriptURL = - get_host_info().HTTPS_REMOTE_ORIGIN + - '/worklets/resources/empty-worklet-script-with-cors-header.js'; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'RESOLVED'); - }, 'Importing a remote-origin worklet script should not be blocked by ' + - 'the worker-src directive because worklets obey the script-src ' + - 'directive.'); - - promise_test(t => { - const kWindowURL = 'resources/addmodule-window.html'; - const kScriptURL = - get_host_info().HTTP_ORIGIN + - '/worklets/resources/empty-worklet-script.js'; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'REJECTED'); - }, 'Importing an insecure-origin worklet script should be blocked because ' + - 'of mixed contents.'); - - promise_test(t => { - const kWindowURL = 'resources/addmodule-window.html?pipe=header(' + - 'Content-Security-Policy, upgrade-insecure-requests)'; - // This test relies on some unintuitive cleverness due to WPT's test setup: - // 'Upgrade-Insecure-Requests' does not upgrade the port number, so we use - // URLs in the form `http://[host]:[https-port]`. If the upgrade fails, the - // load will fail, as we don't serve HTTP over the secure port. - const kHost = get_host_info().ORIGINAL_HOST; - const kPort = get_host_info().HTTPS_PORT; - const kScriptURL = - `http://${kHost}:${kPort}/worklets/resources/empty-worklet-script.js`; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'RESOLVED'); - }, 'Importing an insecure-origin worklet script should not be blocked ' + - 'because the upgrade-insecure-requests directive translates it as the ' + - 'secure origin.'); - - promise_test(t => { - const kWindowURL = 'resources/addmodule-window.html'; - const kScriptURL = 'import-insecure-origin-empty-worklet-script.sub.js'; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'REJECTED'); - }, 'Importing an insecure-origin script from a secure-origin worklet ' + - 'script should be blocked because of mixed contents.'); - - promise_test(t => { - const kWindowURL = 'resources/addmodule-window.html?pipe=header(' + - 'Content-Security-Policy, upgrade-insecure-requests)'; - const kScriptURL = 'import-insecure-origin-empty-worklet-script.sub.js'; - return openWindowAndExpectResult( - kWindowURL, kScriptURL, workletType, 'RESOLVED'); - }, 'Importing an insecure-origin script from a secure-origin worklet ' + - 'script should not be blocked because the upgrade-insecure-requests ' + - 'directive translates it as the secure origin.'); + runSrcTests(workletType); + runMixedContentTests(workletType); + runUpgradeInsecureRequestsTests(workletType); +} + +// script-src and worker-src tests. +function runSrcTests(workletType) { + const kWindowConfigs = [ + { + 'windowURL': + 'resources/addmodule-window.html?pipe=header(' + + 'Content-Security-Policy, script-src \'self\' \'unsafe-inline\')', + 'crossOriginExpectation': 'REJECTED', + 'message': 'should be blocked by the script-src \'self\' directive.' + }, + { + 'windowURL': + 'resources/addmodule-window.html?pipe=header(' + + 'Content-Security-Policy, script-src ' + location.origin + ' ' + + get_host_info().HTTPS_REMOTE_ORIGIN + ' \'unsafe-inline\')', + 'crossOriginExpectation': 'RESOLVED', + 'message': + 'should not be blocked because the script-src directive ' + + 'specifying the origin allows it.' + }, + { + 'windowURL': + 'resources/addmodule-window.html?pipe=header(' + + 'Content-Security-Policy, script-src * \'unsafe-inline\')', + 'crossOriginExpectation': 'RESOLVED', + 'message': + 'should not be blocked because the script-src * directive allows it.' + }, + { + 'windowURL': + 'resources/addmodule-window.html?pipe=header(' + + 'Content-Security-Policy, worker-src \'self\' \'unsafe-inline\')', + 'crossOriginExpectation': 'RESOLVED', + 'message': + 'should not be blocked by the worker-src directive ' + + 'because worklets obey the script-src directive.' + } + ]; + for (const windowConfig of kWindowConfigs) { + promise_test(t => { + const kScriptURL = + get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/empty-worklet-script-with-cors-header.js'; + return openWindowAndExpectResult( + windowConfig.windowURL, kScriptURL, workletType, + windowConfig.crossOriginExpectation); + }, + 'A remote-origin worklet ' + windowConfig.message); + + promise_test(t => { + const kScriptURL = 'import-remote-origin-empty-worklet-script.sub.js'; + return openWindowAndExpectResult( + windowConfig.windowURL, kScriptURL, workletType, + windowConfig.crossOriginExpectation); + }, + 'A same-origin worklet importing a remote-origin script ' + + windowConfig.message); + + promise_test(t => { + // A worklet on HTTPS_REMOTE_ORIGIN will import a child script on + // HTTPS_REMOTE_ORIGIN. + const kScriptURL = + get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/import-empty-worklet-script-with-cors-header.js'; + return openWindowAndExpectResult( + windowConfig.windowURL, kScriptURL, workletType, + windowConfig.crossOriginExpectation); + }, + 'A remote-origin worklet importing a remote-origin script ' + + windowConfig.message); + + promise_test(t => { + const kScriptURL = + '/common/redirect.py?location=' + encodeURIComponent( + get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/empty-worklet-script-with-cors-header.js'); + return openWindowAndExpectResult( + windowConfig.windowURL, kScriptURL, workletType, + windowConfig.crossOriginExpectation); + }, + 'A remote-origin-redirected worklet ' + windowConfig.message); + + promise_test(t => { + const kScriptURL = + 'import-remote-origin-redirected-empty-worklet-script.sub.js'; + return openWindowAndExpectResult( + windowConfig.windowURL, kScriptURL, workletType, + windowConfig.crossOriginExpectation); + }, + 'A same-origin worklet importing a remote-origin-redirected script ' + + windowConfig.message); + } +} + +// Mixed content tests. +function runMixedContentTests(workletType) { + const kInsecureURL = + get_host_info().HTTP_ORIGIN + + '/worklets/resources/empty-worklet-script-with-cors-header.js'; + const kScriptConfigs = [ + {URL: kInsecureURL, + message: 'An insecure-origin worklet'}, + {URL: '/common/redirect.py?location=' + encodeURIComponent(kInsecureURL), + message: 'An insecure-origin-redirected worklet'}, + {URL: 'import-insecure-origin-empty-worklet-script.sub.js', + message: 'A same-origin worklet importing an insecure-origin script'}, + {URL: 'import-insecure-origin-redirected-empty-worklet-script.sub.js', + message: 'A same-origin worklet ' + + 'importing an insecure-origin-redirected script'} + ]; + for (const scriptConfig of kScriptConfigs) { + promise_test(t => { + const kWindowURL = 'resources/addmodule-window.html'; + return openWindowAndExpectResult( + kWindowURL, scriptConfig.URL, workletType, 'REJECTED'); + }, + scriptConfig.message + ' should be blocked because of mixed contents.'); + } +} + +// upgrade-insecure-requests tests. +function runUpgradeInsecureRequestsTests(workletType) { + // |kToBeUpgradedURL| is expected to upgraded/loaded successfully with + // upgrade-insecure-requests is specified. + // This relies on some unintuitive cleverness due to WPT's test setup: + // 'Upgrade-Insecure-Requests' does not upgrade the port number, so we use + // URLs in the form `http://[host]:[https-port]`. If the upgrade fails, the + // load will fail, as we don't serve HTTP over the secure port. + const kHost = get_host_info().ORIGINAL_HOST; + const kPort = get_host_info().HTTPS_PORT; + const kToBeUpgradedURL = + `http://${kHost}:${kPort}/worklets/resources/empty-worklet-script-with-cors-header.js`; + + const kScriptConfigs = [ + {URL: kToBeUpgradedURL, + message: 'An insecure-origin worklet'}, + {URL: '/common/redirect.py?location=' + + encodeURIComponent(kToBeUpgradedURL), + message: 'An insecure-origin-redirected worklet'}, + {URL: 'import-insecure-origin-empty-worklet-script.sub.js', + message: 'A same-origin worklet importing an insecure-origin script'}, + {URL: 'import-insecure-origin-redirected-empty-worklet-script.sub.js', + message: 'A same-origin worklet ' + + 'importing an insecure-origin-redirected script'} + ]; + for (const scriptConfig of kScriptConfigs) { + promise_test(t => { + const kWindowURL = + 'resources/addmodule-window.html?pipe=header(' + + 'Content-Security-Policy, upgrade-insecure-requests)'; + return openWindowAndExpectResult( + kWindowURL, scriptConfig.URL, workletType, 'RESOLVED'); + }, + scriptConfig.message + + ' should not be blocked because of upgrade-insecure-requests.'); + } } diff --git a/tests/wpt/web-platform-tests/worklets/resources/import-insecure-origin-empty-worklet-script.sub.js b/tests/wpt/web-platform-tests/worklets/resources/import-insecure-origin-empty-worklet-script.sub.js index cc7f5f348a1..a04a2edf812 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/import-insecure-origin-empty-worklet-script.sub.js +++ b/tests/wpt/web-platform-tests/worklets/resources/import-insecure-origin-empty-worklet-script.sub.js @@ -2,4 +2,4 @@ // 'Upgrade-Insecure-Requests' does not upgrade the port number, so we use URLs // in the form `http://[host]:[https-port]`. If the upgrade fails, the load will // fail, as we don't serve HTTP over the secure port. -import 'http://{{host}}:{{ports[https][0]}}/worklets/resources/empty-worklet-script.js'; +import 'http://{{host}}:{{ports[https][0]}}/worklets/resources/empty-worklet-script-with-cors-header.js'; diff --git a/tests/wpt/web-platform-tests/worklets/resources/import-insecure-origin-redirected-empty-worklet-script.sub.js b/tests/wpt/web-platform-tests/worklets/resources/import-insecure-origin-redirected-empty-worklet-script.sub.js new file mode 100644 index 00000000000..888d876bff9 --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/resources/import-insecure-origin-redirected-empty-worklet-script.sub.js @@ -0,0 +1,5 @@ +// Some tests rely on some unintuitive cleverness due to WPT's test setup: +// 'Upgrade-Insecure-Requests' does not upgrade the port number, so we use URLs +// in the form `http://[host]:[https-port]`. If the upgrade fails, the load will +// fail, as we don't serve HTTP over the secure port. +import '/common/redirect.py?location=http://{{host}}:{{ports[https][0]}}/worklets/resources/empty-worklet-script-with-cors-header.js'; diff --git a/tests/wpt/web-platform-tests/worklets/resources/import-remote-origin-empty-worklet-script.sub.js b/tests/wpt/web-platform-tests/worklets/resources/import-remote-origin-empty-worklet-script.sub.js index c3088987339..06c1f87618c 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/import-remote-origin-empty-worklet-script.sub.js +++ b/tests/wpt/web-platform-tests/worklets/resources/import-remote-origin-empty-worklet-script.sub.js @@ -1 +1 @@ -import 'https://{{domains[www1]}}:{{ports[https][0]}}/worklets/resources/empty-worklet-script.js'; +import 'https://{{domains[www1]}}:{{ports[https][0]}}/worklets/resources/empty-worklet-script-with-cors-header.js'; diff --git a/tests/wpt/web-platform-tests/worklets/resources/import-remote-origin-redirected-empty-worklet-script.sub.js b/tests/wpt/web-platform-tests/worklets/resources/import-remote-origin-redirected-empty-worklet-script.sub.js new file mode 100644 index 00000000000..7afa3523b9f --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/resources/import-remote-origin-redirected-empty-worklet-script.sub.js @@ -0,0 +1 @@ +import '/common/redirect.py?location=https://{{domains[www1]}}:{{ports[https][0]}}/worklets/resources/empty-worklet-script-with-cors-header.js'; diff --git a/tests/wpt/web-platform-tests/worklets/resources/import-tests.js b/tests/wpt/web-platform-tests/worklets/resources/import-tests.js index 5ab841cd4a6..f504588cdb0 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/import-tests.js +++ b/tests/wpt/web-platform-tests/worklets/resources/import-tests.js @@ -114,6 +114,29 @@ function runImportTests(worklet_type) { }, 'Importing a cross origin resource without the ' + 'Access-Control-Allow-Origin header should reject the given promise'); + promise_test(() => { + const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/empty-worklet-script.js' + + '?pipe=header(Access-Control-Allow-Origin, ' + + location.origin + ')'; + return worklet.addModule('/common/redirect.py?location=' + + encodeURIComponent(kScriptURL)) + .then(undefined_arg => { + assert_equals(undefined_arg, undefined); + }); + }, 'Importing a cross-origin-redirected resource with the ' + + 'Access-Control-Allow-Origin header should resolve the given promise'); + + promise_test(t => { + const kScriptURL = get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/empty-worklet-script.js'; + return promise_rejects(t, new DOMException('', 'AbortError'), + worklet.addModule( + '/common/redirect.py?location=' + + encodeURIComponent(kScriptURL))); + }, 'Importing a cross-origin-redirected resource without the ' + + 'Access-Control-Allow-Origin header should reject the given promise'); + promise_test(t => { const kScriptURL = 'resources/syntax-error-worklet-script.js'; return promise_rejects(t, new DOMException('', 'AbortError'), diff --git a/tests/wpt/web-platform-tests/worklets/resources/service-worker-interception-tests.js b/tests/wpt/web-platform-tests/worklets/resources/service-worker-interception-tests.js index 16d29873777..1298a626e4e 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/service-worker-interception-tests.js +++ b/tests/wpt/web-platform-tests/worklets/resources/service-worker-interception-tests.js @@ -1,12 +1,12 @@ -function openWindow(url) { +function openWindow(t, url) { return new Promise(resolve => { - let win = window.open(url, '_blank'); - add_result_callback(() => win.close()); - window.onmessage = e => { - assert_equals(e.data, 'LOADED'); - resolve(win); - }; - }); + const win = window.open(url, '_blank'); + t.add_cleanup(() => win.close()); + window.onmessage = e => { + assert_equals(e.data, 'LOADED'); + resolve(win); + }; + }); } // Runs a series of tests related to service worker interception for a worklet. @@ -14,110 +14,95 @@ function openWindow(url) { // Usage: // runServiceWorkerInterceptionTests("paint"); function runServiceWorkerInterceptionTests(worklet_type) { - const worklet = get_worklet(worklet_type); + const worklet = get_worklet(worklet_type); - // Tests that a worklet should be served by the owner document's service - // worker. - // - // [Current document] registers a service worker for Window's URL. - // --(open)--> [Window] should be controlled by the service worker. - // --(addModule)--> [Worklet] should be served by the service worker. - promise_test(t => { - const kWindowURL = 'resources/addmodule-window.html'; - const kServiceWorkerScriptURL = 'resources/service-worker.js'; - // This doesn't contain the 'resources/' prefix because this will be - // imported from a html file under resources/. - const kWorkletScriptURL = 'non-existent-worklet-script.js'; + // Tests that a worklet should be served by the owner document's service + // worker. + // + // [Current document] registers a service worker for Window's URL. + // --(open)--> [Window] should be controlled by the service worker. + // --(addModule)--> [Worklet] should be served by the service worker. + promise_test(async t => { + const kWindowURL = 'resources/addmodule-window.html'; + const kServiceWorkerScriptURL = 'resources/service-worker.js'; + // This doesn't contain the 'resources/' prefix because this will be + // imported from a html file under resources/. + const kWorkletScriptURL = 'non-existent-worklet-script.js'; - return service_worker_unregister_and_register( - t, kServiceWorkerScriptURL, kWindowURL) - .then(r => { - add_result_callback(() => r.unregister()); - return wait_for_state(t, r.installing, 'activated'); - }) - .then(() => openWindow(kWindowURL)) - .then(win => { - assert_not_equals(win.navigator.serviceWorker.controller, null, - 'The document should be controlled.'); - const promise = new Promise(r => window.onmessage = r); - // The worklet script on kWorkletScriptURL doesn't exist but the - // service worker serves it, so the addModule() should succeed. - win.postMessage({ type: worklet_type, - script_url: kWorkletScriptURL }, '*'); - return promise; - }) - .then(msg_event => assert_equals(msg_event.data, 'RESOLVED')); - }, 'addModule() on a controlled document should be intercepted by a ' + - 'service worker.'); + const registration = await service_worker_unregister_and_register( + t, kServiceWorkerScriptURL, kWindowURL); + t.add_cleanup(() => registration.unregister()); + await wait_for_state(t, registration.installing, 'activated'); - // Tests that a worklet should not be served by a service worker other than - // the owner document's service worker. - // - // [Current document] registers a service worker for Worklet's URL. - // --(open)--> [Window] should not be controlled by the service worker. - // --(addModule)--> [Worklet] should not be served by the service worker. - promise_test(t => { - const kWindowURL = 'resources/addmodule-window.html'; - const kServiceWorkerScriptURL = 'resources/service-worker.js'; - // This doesn't contain the 'resources/' prefix because this will be - // imported from a html file under resources/. - const kWorkletScriptURL = 'non-existent-worklet-script.js'; + const win = await openWindow(t, kWindowURL); + assert_not_equals(win.navigator.serviceWorker.controller, null, + 'The document should be controlled.'); - return service_worker_unregister_and_register( - t, kServiceWorkerScriptURL, 'resources/' + kWorkletScriptURL) - .then(r => { - add_result_callback(() => r.unregister()); - return wait_for_state(t, r.installing, 'activated'); - }) - .then(() => openWindow(kWindowURL)) - .then(win => { - assert_equals(win.navigator.serviceWorker.controller, null, - 'The document should not be controlled.'); - const promise = new Promise(r => window.onmessage = r); - // The worklet script on kWorkletScriptURL doesn't exist and the - // service worker doesn't serve it, so the addModule() should - // fail. - win.postMessage({ type: worklet_type, - script_url: kWorkletScriptURL }, '*'); - return promise; - }) - .then(msg_event => assert_equals(msg_event.data, 'REJECTED')); - }, 'addModule() on a non-controlled document should not be intercepted ' + - 'by a service worker even if the script is under the service worker ' + - 'scope.'); + // The worklet script on kWorkletScriptURL doesn't exist but the service + // worker serves it, so the addModule() should succeed. + win.postMessage({ type: worklet_type, script_url: kWorkletScriptURL }, '*'); + const msgEvent = await new Promise(resolve => window.onmessage = resolve); + assert_equals(msgEvent.data, 'RESOLVED'); + }, 'addModule() on a controlled document should be intercepted by a ' + + 'service worker.'); - // Tests that static import should be served by the owner document's service - // worker. - // - // [Current document] registers a service worker for Window's URL. - // --(open)--> [Window] should be controlled by the service worker. - // --(addModule)--> [Worklet] should be served by the service worker. - // --(static import)--> [Script] should be served by the service worker. - promise_test(t => { - const kWindowURL = 'resources/addmodule-window.html'; - const kServiceWorkerScriptURL = 'resources/service-worker.js'; - // This doesn't contain the 'resources/' prefix because this will be - // imported from a html file under resources/. - const kWorkletScriptURL = 'import-non-existent-worklet-script.js'; + // Tests that a worklet should not be served by a service worker other than + // the owner document's service worker. + // + // [Current document] registers a service worker for Worklet's URL. + // --(open)--> [Window] should not be controlled by the service worker. + // --(addModule)--> [Worklet] should not be served by the service worker. + promise_test(async t => { + const kWindowURL = 'resources/addmodule-window.html'; + const kServiceWorkerScriptURL = 'resources/service-worker.js'; + // This doesn't contain the 'resources/' prefix because this will be + // imported from a html file under resources/. + const kWorkletScriptURL = 'non-existent-worklet-script.js'; - return service_worker_unregister_and_register( - t, kServiceWorkerScriptURL, kWindowURL) - .then(r => { - add_result_callback(() => r.unregister()); - return wait_for_state(t, r.installing, 'activated'); - }) - .then(() => openWindow(kWindowURL)) - .then(win => { - assert_not_equals(win.navigator.serviceWorker.controller, null, - 'The document should be controlled.'); - const promise = new Promise(r => window.onmessage = r); - // A script statically imported by the worklet doesn't exist but - // the service worker serves it, so the addModule() should - // succeed. - win.postMessage({ type: worklet_type, - script_url: kWorkletScriptURL }, '*'); - return promise; - }) - .then(msg_event => assert_equals(msg_event.data, 'RESOLVED')); - }, 'Static import should be intercepted by a service worker.'); + const registration = await service_worker_unregister_and_register( + t, kServiceWorkerScriptURL, 'resources/' + kWorkletScriptURL); + t.add_cleanup(() => registration.unregister()); + await wait_for_state(t, registration.installing, 'activated'); + + const win = await openWindow(t, kWindowURL); + assert_equals(win.navigator.serviceWorker.controller, null, + 'The document should not be controlled.'); + + // The worklet script on kWorkletScriptURL doesn't exist and the service + // worker doesn't serve it, so the addModule() should fail. + win.postMessage({ type: worklet_type, script_url: kWorkletScriptURL }, '*'); + const msgEvent = await new Promise(resolve => window.onmessage = resolve); + assert_equals(msgEvent.data, 'REJECTED'); + }, 'addModule() on a non-controlled document should not be intercepted by ' + + 'a service worker even if the script is under the service worker scope.'); + + // Tests that static import should be served by the owner document's service + // worker. + // + // [Current document] registers a service worker for Window's URL. + // --(open)--> [Window] should be controlled by the service worker. + // --(addModule)--> [Worklet] should be served by the service worker. + // --(static import)--> [Script] should be served by the service worker. + promise_test(async t => { + const kWindowURL = 'resources/addmodule-window.html'; + const kServiceWorkerScriptURL = 'resources/service-worker.js'; + // This doesn't contain the 'resources/' prefix because this will be + // imported from a html file under resources/. + const kWorkletScriptURL = 'import-non-existent-worklet-script.js'; + + const registration = await service_worker_unregister_and_register( + t, kServiceWorkerScriptURL, kWindowURL); + t.add_cleanup(() => registration.unregister()); + await wait_for_state(t, registration.installing, 'activated'); + + const win = await openWindow(t, kWindowURL); + assert_not_equals(win.navigator.serviceWorker.controller, null, + 'The document should be controlled.'); + + // A script statically imported by the worklet doesn't exist but the service + // worker serves it, so the addModule() should succeed. + win.postMessage({ type: worklet_type, script_url: kWorkletScriptURL }, '*'); + const msgEvent = await new Promise(resolve => window.onmessage = resolve); + assert_equals(msgEvent.data, 'RESOLVED'); + }, 'Static import should be intercepted by a service worker.'); }