diff options
226 files changed, 4495 insertions, 903 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini index 3a3d15b8406..6a3af4e2ece 100644 --- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini @@ -37,6 +37,3 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL - [Revoke blob URL after calling fetch, fetch should succeed] - expected: FAIL - diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index bf86c885749..b7fc9784d75 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -13795,6 +13795,12 @@ {} ] ], + "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", @@ -107203,6 +107209,18 @@ {} ] ], + "css/css-backgrounds/box-shadow-body.html": [ + [ + "/css/css-backgrounds/box-shadow-body.html", + [ + [ + "/css/css-backgrounds/reference/box-shadow-body-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-backgrounds/box-shadow-inset-spread-without-border-radius.html": [ [ "/css/css-backgrounds/box-shadow-inset-spread-without-border-radius.html", @@ -107491,6 +107509,18 @@ {} ] ], + "css/css-break/line-after-unbreakable-float-after-padding.html": [ + [ + "/css/css-break/line-after-unbreakable-float-after-padding.html", + [ + [ + "/css/css-break/line-after-unbreakable-float-after-padding-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-break/widows-orphans-001.html": [ [ "/css/css-break/widows-orphans-001.html", @@ -113911,6 +113941,18 @@ {} ] ], + "css/css-flexbox/align-content-wrap-004.html": [ + [ + "/css/css-flexbox/align-content-wrap-004.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-flexbox/align-items-001.htm": [ [ "/css/css-flexbox/align-items-001.htm", @@ -121143,6 +121185,18 @@ {} ] ], + "css/css-grid/alignment/grid-self-alignment-stretch-input-range.html": [ + [ + "/css/css-grid/alignment/grid-self-alignment-stretch-input-range.html", + [ + [ + "/css/css-grid/alignment/grid-self-alignment-stretch-input-range-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html": [ [ "/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html", @@ -124527,6 +124581,18 @@ {} ] ], + "css/css-logical/logical-values-float-clear-reftest.html": [ + [ + "/css/css-logical/logical-values-float-clear-reftest.html", + [ + [ + "/css/css-logical/reference/logical-values-float-clear-reftest-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-masking/clip-path-svg-content/clip-path-clip-nested-twice.svg": [ [ "/css/css-masking/clip-path-svg-content/clip-path-clip-nested-twice.svg", @@ -141831,6 +141897,66 @@ {} ] ], + "css/css-text/writing-system/writing-system-font-001.html": [ + [ + "/css/css-text/writing-system/writing-system-font-001.html", + [ + [ + "/css/css-text/writing-system/reference/writing-system-font-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/writing-system/writing-system-line-break-001.html": [ + [ + "/css/css-text/writing-system/writing-system-line-break-001.html", + [ + [ + "/css/css-text/writing-system/reference/writing-system-line-break-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/writing-system/writing-system-line-break-002.html": [ + [ + "/css/css-text/writing-system/writing-system-line-break-002.html", + [ + [ + "/css/css-text/writing-system/reference/writing-system-line-break-002-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/writing-system/writing-system-segment-break-001.html": [ + [ + "/css/css-text/writing-system/writing-system-segment-break-001.html", + [ + [ + "/css/css-text/writing-system/reference/writing-system-segment-break-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/writing-system/writing-system-text-transform-001.html": [ + [ + "/css/css-text/writing-system/writing-system-text-transform-001.html", + [ + [ + "/css/css-text/writing-system/reference/writing-system-text-transform-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-transforms/2d-rotate-001.html": [ [ "/css/css-transforms/2d-rotate-001.html", @@ -167799,6 +167925,30 @@ {} ] ], + "css/filter-effects/backdrop-filter-clip-rect.html": [ + [ + "/css/filter-effects/backdrop-filter-clip-rect.html", + [ + [ + "/css/filter-effects/backdrop-filter-paint-order-ref.html", + "==" + ] + ], + {} + ] + ], + "css/filter-effects/backdrop-filter-edge-pixels.html": [ + [ + "/css/filter-effects/backdrop-filter-edge-pixels.html", + [ + [ + "/css/filter-effects/backdrop-filter-edge-pixels-ref.html", + "==" + ] + ], + {} + ] + ], "css/filter-effects/backdrop-filter-isolation-isolate.html": [ [ "/css/filter-effects/backdrop-filter-isolation-isolate.html", @@ -167823,6 +167973,18 @@ {} ] ], + "css/filter-effects/backdrop-filter-paint-order.html": [ + [ + "/css/filter-effects/backdrop-filter-paint-order.html", + [ + [ + "/css/filter-effects/backdrop-filter-paint-order-ref.html", + "==" + ] + ], + {} + ] + ], "css/filter-effects/blur-clip-stacking-context-001.html": [ [ "/css/filter-effects/blur-clip-stacking-context-001.html", @@ -250326,6 +250488,11 @@ {} ] ], + "css/css-backgrounds/reference/box-shadow-body-ref.html": [ + [ + {} + ] + ], "css/css-backgrounds/reference/box-shadow-inset-spread-without-border-radius.html": [ [ {} @@ -250826,6 +250993,11 @@ {} ] ], + "css/css-break/line-after-unbreakable-float-after-padding-ref.html": [ + [ + {} + ] + ], "css/css-break/reference/widows-orphans-001-ref.html": [ [ {} @@ -261781,6 +261953,11 @@ {} ] ], + "css/css-grid/alignment/grid-self-alignment-stretch-input-range-ref.html": [ + [ + {} + ] + ], "css/css-grid/alignment/support/100x100-green.png": [ [ {} @@ -262486,6 +262663,11 @@ {} ] ], + "css/css-logical/reference/logical-values-float-clear-reftest-ref.html": [ + [ + {} + ] + ], "css/css-logical/resources/test-box-properties.js": [ [ {} @@ -268841,6 +269023,31 @@ {} ] ], + "css/css-text/writing-system/reference/writing-system-font-001-ref.html": [ + [ + {} + ] + ], + "css/css-text/writing-system/reference/writing-system-line-break-001-ref.html": [ + [ + {} + ] + ], + "css/css-text/writing-system/reference/writing-system-line-break-002-ref.html": [ + [ + {} + ] + ], + "css/css-text/writing-system/reference/writing-system-segment-break-001-ref.html": [ + [ + {} + ] + ], + "css/css-text/writing-system/reference/writing-system-text-transform-001-ref.html": [ + [ + {} + ] + ], "css/css-transforms/META.yml": [ [ {} @@ -275521,11 +275728,26 @@ {} ] ], + "css/filter-effects/backdrop-filter-clip-rect-ref.html": [ + [ + {} + ] + ], + "css/filter-effects/backdrop-filter-edge-pixels-ref.html": [ + [ + {} + ] + ], "css/filter-effects/backdrop-filter-isolation-ref.html": [ [ {} ] ], + "css/filter-effects/backdrop-filter-paint-order-ref.html": [ + [ + {} + ] + ], "css/filter-effects/blur-clip-stacking-context-ref.html": [ [ {} @@ -283736,6 +283958,16 @@ {} ] ], + "feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.headers": [ + [ + {} + ] + ], + "feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.headers": [ + [ + {} + ] + ], "feature-policy/experimental-features/lazyload/lazyload-disabled-image-tentative.sub.html.headers": [ [ {} @@ -283751,6 +283983,11 @@ {} ] ], + "feature-policy/experimental-features/resources/animation-property-height.js": [ + [ + {} + ] + ], "feature-policy/experimental-features/resources/async-script.js": [ [ {} @@ -283941,31 +284178,61 @@ {} ] ], + "feature-policy/reporting/camera-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/camera-reporting.https.html.headers": [ [ {} ] ], + "feature-policy/reporting/document-write-report-only.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/document-write-reporting.html.headers": [ [ {} ] ], + "feature-policy/reporting/encrypted-media-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/encrypted-media-reporting.https.html.headers": [ [ {} ] ], + "feature-policy/reporting/fullscreen-report-only.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/fullscreen-reporting.html.headers": [ [ {} ] ], + "feature-policy/reporting/generic-sensor-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/generic-sensor-reporting.https.html.headers": [ [ {} ] ], + "feature-policy/reporting/geolocation-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/geolocation-reporting.https.html.headers": [ [ {} @@ -283976,26 +284243,51 @@ {} ] ], + "feature-policy/reporting/microphone-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/microphone-reporting.https.html.headers": [ [ {} ] ], + "feature-policy/reporting/midi-report-only.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/midi-reporting.html.headers": [ [ {} ] ], + "feature-policy/reporting/payment-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/payment-reporting.https.html.headers": [ [ {} ] ], + "feature-policy/reporting/picture-in-picture-report-only.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/picture-in-picture-reporting.html.headers": [ [ {} ] ], + "feature-policy/reporting/sync-xhr-report-only.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/sync-xhr-reporting.html.headers": [ [ {} @@ -284006,16 +284298,31 @@ {} ] ], + "feature-policy/reporting/usb-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/usb-reporting.https.html.headers": [ [ {} ] ], + "feature-policy/reporting/vr-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/vr-reporting.https.html.headers": [ [ {} ] ], + "feature-policy/reporting/xr-report-only.https.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/xr-reporting.https.html.headers": [ [ {} @@ -303511,6 +303818,11 @@ {} ] ], + "resources/test/tests/functional/worker-dedicated-uncaught-allow.html": [ + [ + {} + ] + ], "resources/test/tests/functional/worker-dedicated-uncaught-single.html": [ [ {} @@ -303536,6 +303848,11 @@ {} ] ], + "resources/test/tests/functional/worker-uncaught-allow.js": [ + [ + {} + ] + ], "resources/test/tests/functional/worker-uncaught-single.js": [ [ {} @@ -306256,6 +306573,11 @@ {} ] ], + "service-workers/service-worker/resources/clients-get-resultingClientId-worker.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/clients-get-worker.js": [ [ {} @@ -337224,6 +337546,24 @@ {} ] ], + "css/css-flexbox/align-content-wrap-001.html": [ + [ + "/css/css-flexbox/align-content-wrap-001.html", + {} + ] + ], + "css/css-flexbox/align-content-wrap-002.html": [ + [ + "/css/css-flexbox/align-content-wrap-002.html", + {} + ] + ], + "css/css-flexbox/align-content-wrap-003.html": [ + [ + "/css/css-flexbox/align-content-wrap-003.html", + {} + ] + ], "css/css-flexbox/display_flex_exist.html": [ [ "/css/css-flexbox/display_flex_exist.html", @@ -348082,9 +348422,9 @@ {} ] ], - "css/selectors/invalidation/matches.html": [ + "css/selectors/invalidation/is.html": [ [ - "/css/selectors/invalidation/matches.html", + "/css/selectors/invalidation/is.html", {} ] ], @@ -348112,15 +348452,15 @@ {} ] ], - "css/selectors/matches-nested.html": [ + "css/selectors/is-nested.html": [ [ - "/css/selectors/matches-nested.html", + "/css/selectors/is-nested.html", {} ] ], - "css/selectors/matches-specificity.html": [ + "css/selectors/is-specificity.html": [ [ - "/css/selectors/matches-specificity.html", + "/css/selectors/is-specificity.html", {} ] ], @@ -360184,6 +360524,18 @@ {} ] ], + "feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html": [ + [ + "/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html", + {} + ] + ], + "feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html": [ + [ + "/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html", + {} + ] + ], "feature-policy/experimental-features/layout-animations-enabled-tentative.html": [ [ "/feature-policy/experimental-features/layout-animations-enabled-tentative.html", @@ -360394,60 +360746,128 @@ } ] ], + "feature-policy/reporting/camera-report-only.https.html": [ + [ + "/feature-policy/reporting/camera-report-only.https.html", + { + "testdriver": true + } + ] + ], "feature-policy/reporting/camera-reporting.https.html": [ [ "/feature-policy/reporting/camera-reporting.https.html", {} ] ], + "feature-policy/reporting/document-write-report-only.html": [ + [ + "/feature-policy/reporting/document-write-report-only.html", + {} + ] + ], "feature-policy/reporting/document-write-reporting.html": [ [ "/feature-policy/reporting/document-write-reporting.html", {} ] ], + "feature-policy/reporting/encrypted-media-report-only.https.html": [ + [ + "/feature-policy/reporting/encrypted-media-report-only.https.html", + {} + ] + ], "feature-policy/reporting/encrypted-media-reporting.https.html": [ [ "/feature-policy/reporting/encrypted-media-reporting.https.html", {} ] ], + "feature-policy/reporting/fullscreen-report-only.html": [ + [ + "/feature-policy/reporting/fullscreen-report-only.html", + { + "testdriver": true + } + ] + ], "feature-policy/reporting/fullscreen-reporting.html": [ [ "/feature-policy/reporting/fullscreen-reporting.html", {} ] ], + "feature-policy/reporting/generic-sensor-report-only.https.html": [ + [ + "/feature-policy/reporting/generic-sensor-report-only.https.html", + {} + ] + ], "feature-policy/reporting/generic-sensor-reporting.https.html": [ [ "/feature-policy/reporting/generic-sensor-reporting.https.html", {} ] ], + "feature-policy/reporting/geolocation-report-only.https.html": [ + [ + "/feature-policy/reporting/geolocation-report-only.https.html", + {} + ] + ], "feature-policy/reporting/geolocation-reporting.https.html": [ [ "/feature-policy/reporting/geolocation-reporting.https.html", {} ] ], + "feature-policy/reporting/microphone-report-only.https.html": [ + [ + "/feature-policy/reporting/microphone-report-only.https.html", + { + "testdriver": true + } + ] + ], "feature-policy/reporting/microphone-reporting.https.html": [ [ "/feature-policy/reporting/microphone-reporting.https.html", {} ] ], + "feature-policy/reporting/midi-report-only.html": [ + [ + "/feature-policy/reporting/midi-report-only.html", + {} + ] + ], "feature-policy/reporting/midi-reporting.html": [ [ "/feature-policy/reporting/midi-reporting.html", {} ] ], + "feature-policy/reporting/payment-report-only.https.html": [ + [ + "/feature-policy/reporting/payment-report-only.https.html", + {} + ] + ], "feature-policy/reporting/payment-reporting.https.html": [ [ "/feature-policy/reporting/payment-reporting.https.html", {} ] ], + "feature-policy/reporting/picture-in-picture-report-only.html": [ + [ + "/feature-policy/reporting/picture-in-picture-report-only.html", + { + "testdriver": true + } + ] + ], "feature-policy/reporting/picture-in-picture-reporting.html": [ [ "/feature-policy/reporting/picture-in-picture-reporting.html", @@ -360456,6 +360876,12 @@ } ] ], + "feature-policy/reporting/sync-xhr-report-only.html": [ + [ + "/feature-policy/reporting/sync-xhr-report-only.html", + {} + ] + ], "feature-policy/reporting/sync-xhr-reporting.html": [ [ "/feature-policy/reporting/sync-xhr-reporting.html", @@ -360468,18 +360894,38 @@ {} ] ], + "feature-policy/reporting/usb-report-only.https.html": [ + [ + "/feature-policy/reporting/usb-report-only.https.html", + { + "testdriver": true + } + ] + ], "feature-policy/reporting/usb-reporting.https.html": [ [ "/feature-policy/reporting/usb-reporting.https.html", {} ] ], + "feature-policy/reporting/vr-report-only.https.html": [ + [ + "/feature-policy/reporting/vr-report-only.https.html", + {} + ] + ], "feature-policy/reporting/vr-reporting.https.html": [ [ "/feature-policy/reporting/vr-reporting.https.html", {} ] ], + "feature-policy/reporting/xr-report-only.https.html": [ + [ + "/feature-policy/reporting/xr-report-only.https.html", + {} + ] + ], "feature-policy/reporting/xr-reporting.https.html": [ [ "/feature-policy/reporting/xr-reporting.https.html", @@ -362160,6 +362606,14 @@ {} ] ], + "fullscreen/rendering/fullscreen-css-transition.html": [ + [ + "/fullscreen/rendering/fullscreen-css-transition.html", + { + "testdriver": true + } + ] + ], "gamepad/idlharness.window.js": [ [ "/gamepad/idlharness.window.html", @@ -370206,6 +370660,12 @@ {} ] ], + "html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html": [ + [ + "/html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html", + {} + ] + ], "html/semantics/forms/the-input-element/time.html": [ [ "/html/semantics/forms/the-input-element/time.html", @@ -390964,14 +391424,6 @@ {} ] ], - "pointerevents/pointerevent_pointermove.html": [ - [ - "/pointerevents/pointerevent_pointermove.html", - { - "testdriver": true - } - ] - ], "pointerevents/pointerevent_touch-action-illegal.html": [ [ "/pointerevents/pointerevent_touch-action-illegal.html", @@ -404756,6 +405208,12 @@ {} ] ], + "svg/geometry/parsing/cx-computed.svg": [ + [ + "/svg/geometry/parsing/cx-computed.svg", + {} + ] + ], "svg/geometry/parsing/cx-invalid.svg": [ [ "/svg/geometry/parsing/cx-invalid.svg", @@ -404768,6 +405226,12 @@ {} ] ], + "svg/geometry/parsing/cy-computed.svg": [ + [ + "/svg/geometry/parsing/cy-computed.svg", + {} + ] + ], "svg/geometry/parsing/cy-invalid.svg": [ [ "/svg/geometry/parsing/cy-invalid.svg", @@ -404780,6 +405244,12 @@ {} ] ], + "svg/geometry/parsing/r-computed.svg": [ + [ + "/svg/geometry/parsing/r-computed.svg", + {} + ] + ], "svg/geometry/parsing/r-invalid.svg": [ [ "/svg/geometry/parsing/r-invalid.svg", @@ -404792,6 +405262,12 @@ {} ] ], + "svg/geometry/parsing/rx-computed.svg": [ + [ + "/svg/geometry/parsing/rx-computed.svg", + {} + ] + ], "svg/geometry/parsing/rx-invalid.svg": [ [ "/svg/geometry/parsing/rx-invalid.svg", @@ -404804,6 +405280,12 @@ {} ] ], + "svg/geometry/parsing/ry-computed.svg": [ + [ + "/svg/geometry/parsing/ry-computed.svg", + {} + ] + ], "svg/geometry/parsing/ry-invalid.svg": [ [ "/svg/geometry/parsing/ry-invalid.svg", @@ -404816,6 +405298,12 @@ {} ] ], + "svg/geometry/parsing/x-computed.svg": [ + [ + "/svg/geometry/parsing/x-computed.svg", + {} + ] + ], "svg/geometry/parsing/x-invalid.svg": [ [ "/svg/geometry/parsing/x-invalid.svg", @@ -404828,6 +405316,12 @@ {} ] ], + "svg/geometry/parsing/y-computed.svg": [ + [ + "/svg/geometry/parsing/y-computed.svg", + {} + ] + ], "svg/geometry/parsing/y-invalid.svg": [ [ "/svg/geometry/parsing/y-invalid.svg", @@ -404870,6 +405364,18 @@ {} ] ], + "svg/interact/script-common.html": [ + [ + "/svg/interact/script-common.html", + {} + ] + ], + "svg/interact/script-content.svg": [ + [ + "/svg/interact/script-content.svg", + {} + ] + ], "svg/linking/scripted/a-download-click.svg": [ [ "/svg/linking/scripted/a-download-click.svg", @@ -404936,6 +405442,12 @@ {} ] ], + "svg/painting/scripted/paint-order-computed-value-01.svg": [ + [ + "/svg/painting/scripted/paint-order-computed-value-01.svg", + {} + ] + ], "svg/path/error-handling/bounding.svg": [ [ "/svg/path/error-handling/bounding.svg", @@ -405982,6 +406494,12 @@ {} ] ], + "user-timing/mark-measure-return-null.html": [ + [ + "/user-timing/mark-measure-return-null.html", + {} + ] + ], "user-timing/mark.any.js": [ [ "/user-timing/mark.any.html", @@ -437810,11 +438328,11 @@ "support" ], ".taskcluster.yml": [ - "bcac7f5abbc4b32be599475a5506df9e2e135abd", + "35aad403ce7e49616d76258c2d07c574bb066ec4", "support" ], ".travis.yml": [ - "d89fadae77d2e6d2d6b03c640d715da96c0a7226", + "8d4152f0285cd0c2e03a4e7fc411a29f15a0f5f5", "support" ], ".well-known/README.md": [ @@ -442650,15 +443168,15 @@ "testharness" ], "IndexedDB/idbcursor_advance_index2.htm": [ - "539c824e61e23a9409f6723c95a73898ce7c2fff", + "8df0af0d2335036463bae6d5e4be75e2bc8ee48e", "testharness" ], "IndexedDB/idbcursor_advance_index3.htm": [ - "5adf3f077fd9df4ff01d621c438b4879d5e572ba", + "ca5e0da8eaef1e0b342fafb4abec0703c01570d6", "testharness" ], "IndexedDB/idbcursor_advance_index5.htm": [ - "452c0f142f6496e9147b67372cadb8b092a8303b", + "a9b9977d0e680098e46b7c69fcf65ea19d4166e6", "testharness" ], "IndexedDB/idbcursor_advance_index6.htm": [ @@ -442714,11 +443232,11 @@ "testharness" ], "IndexedDB/idbcursor_continue_index5.htm": [ - "abe0e658b018ac00fff9368d8e1a732d2b78ddc2", + "20db8d0d8330ca2eed4ba15934b57bde50dba8f6", "testharness" ], "IndexedDB/idbcursor_continue_index6.htm": [ - "cf5bd4066e83fd6b2f8c94d3984dacddf1cf168d", + "9182b02f1492b17851857bdcbca3d706de46c4f9", "testharness" ], "IndexedDB/idbcursor_continue_index7.htm": [ @@ -442730,7 +443248,7 @@ "testharness" ], "IndexedDB/idbcursor_continue_invalid.htm": [ - "dea07bc911214bd5b58d69a30e3a09d551452daa", + "9b4d7b70bb674f75d25c6262b3ff0efe41abf738", "testharness" ], "IndexedDB/idbcursor_continue_objectstore.htm": [ @@ -442798,23 +443316,23 @@ "testharness" ], "IndexedDB/idbcursor_iterating.htm": [ - "d9be6b6ad6a43f68ea6c61e65be50c6a14b93a4a", + "f67265aa8556d9647e51d64c92c7bfcf4cb8edd9", "testharness" ], "IndexedDB/idbcursor_iterating_index.htm": [ - "559cce6db54f7f5ba126ce206d1535328300d5fb", + "4b0fbba0937bd98bc825d2875fa73a3c20b5ef31", "testharness" ], "IndexedDB/idbcursor_iterating_index2.htm": [ - "91a8383500c8e88f579041179e801347eb9305c5", + "689b891527827e22c1bf2c8d56ac5b420d8bcca6", "testharness" ], "IndexedDB/idbcursor_iterating_objectstore.htm": [ - "c4c8d57148de9185403d4c9934dba2efdbc9a773", + "8a9dcfa107fa19f3b2ada3c727c04ba03bc00caf", "testharness" ], "IndexedDB/idbcursor_iterating_objectstore2.htm": [ - "899b2ac0e6da416d1cdcc3177159a1762d242ef5", + "992d0ea425658ee29cc429ed572eec15d8563fc0", "testharness" ], "IndexedDB/idbcursor_update_index.htm": [ @@ -442862,7 +443380,7 @@ "testharness" ], "IndexedDB/idbcursor_update_objectstore4.htm": [ - "cbd0b1f92a66a0a2cfd0b544ffd9a676edc86a9a", + "cb35b103509833079e706cf0aaf81f2bcdda2f86", "testharness" ], "IndexedDB/idbcursor_update_objectstore5.htm": [ @@ -442914,7 +443432,7 @@ "testharness" ], "IndexedDB/idbdatabase_createObjectStore10-1000ends.htm": [ - "d6e4a48ed1c95ae3ef65048f9a2e788b3390dc91", + "747a655ecb76ed2f2ee8179e038c971ea846dfd4", "testharness" ], "IndexedDB/idbdatabase_createObjectStore10-emptyname.htm": [ @@ -442946,7 +443464,7 @@ "testharness" ], "IndexedDB/idbdatabase_createObjectStore7.htm": [ - "358baeeecabb260d19f206753c72902f1b72417a", + "9833c5336961a874c8b0dfdeda396650c1689ac5", "testharness" ], "IndexedDB/idbdatabase_createObjectStore8-parameters.htm": [ @@ -442970,7 +443488,7 @@ "testharness" ], "IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm": [ - "1cb6ff1ace474c8adf7508b91cce4ea8b99f2f13", + "5332205db7ce030c8f4dc17f34e3033983c17653", "testharness" ], "IndexedDB/idbdatabase_transaction.htm": [ @@ -442986,7 +443504,7 @@ "testharness" ], "IndexedDB/idbdatabase_transaction4.htm": [ - "515c499b0c8be787c3b43a94d932fa2c9168409a", + "2ba36feee7087f897a9061e605e9ba3a59906519", "testharness" ], "IndexedDB/idbdatabase_transaction5.htm": [ @@ -443042,7 +443560,7 @@ "testharness" ], "IndexedDB/idbfactory_deleteDatabase3.htm": [ - "e1cab41a5c123c50d7f0ff1a7178ce867f50c536", + "7299bfb5673558ca19fa61113cdfa4796d8bed91", "testharness" ], "IndexedDB/idbfactory_deleteDatabase4.htm": [ @@ -443054,15 +443572,15 @@ "testharness" ], "IndexedDB/idbfactory_open10.htm": [ - "c0ac71ae8576f7ab632d9be12c6d7db56c2e39da", + "0a9a12d8dfd9ac1d2a0a24f55579e124ef1631cd", "testharness" ], "IndexedDB/idbfactory_open11.htm": [ - "88c59bd9f65c5d2886c723ca32d9010e7c560318", + "6a77b13b0883e3b0c98ada994f31dd1ba172ad1d", "testharness" ], "IndexedDB/idbfactory_open12.htm": [ - "763c4805155d5dfebb0284f09f0e128448d04d9a", + "f6a13104341bf80025a0f2d6d0d4a72ce4174cc4", "testharness" ], "IndexedDB/idbfactory_open2.htm": [ @@ -443106,15 +443624,15 @@ "testharness" ], "IndexedDB/idbindex-multientry-arraykeypath.htm": [ - "3e584a6c4e22e49e03d0b06b79003efe0353ca64", + "31ae61cfc42794d014ee2ec4aad3059db28f9e6a", "testharness" ], "IndexedDB/idbindex-multientry-big.htm": [ - "4f9df36e2044e525332fdd43308a4a660aeff7eb", + "f0743866910556cb9e22f87cf2cc7be79ddf342c", "testharness" ], "IndexedDB/idbindex-multientry.htm": [ - "5077f48469bc012ebfc034f15ed31471e9e6f794", + "6b5b06cf807c7cc205b08413f381441a180196ad", "testharness" ], "IndexedDB/idbindex-objectStore-SameObject.html": [ @@ -443230,7 +443748,7 @@ "testharness" ], "IndexedDB/idbindex_indexNames.htm": [ - "3099b45e91f9e5bb662d9b259499c3081911b947", + "023903f19f72dbf099ac3232e672bfaca73bf8e1", "testharness" ], "IndexedDB/idbindex_openCursor.htm": [ @@ -443454,27 +443972,27 @@ "testharness" ], "IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm": [ - "f4b9b984f05c94311d1913d02b3caae627342d81", + "5156e61e65f89af830bff2814aec023abc695f7e", "testharness" ], "IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm": [ - "228dfc457c2fb4a9c6e8420872bf68225b84ba15", + "937ae58c3b3f7176a1217f80f19d54b2a3a14d7f", "testharness" ], "IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm": [ - "29fadc00e3f91b8faa416c9defb5a388b974649b", + "14ddb924ffee36919cfcb59ca95a7fb264bc3620", "testharness" ], "IndexedDB/idbobjectstore_createIndex6-event_order.htm": [ - "3dcb7330a8a25a2ef8f1d895a2c4bcf23784533e", + "a636226968e5d55bd730bec47fd30d9d49746f24", "testharness" ], "IndexedDB/idbobjectstore_createIndex7-event_order.htm": [ - "682307c90184163e44c8d74bc29b2f03e12d02d6", + "8d2725a9f0e3310b003d4fad24ae33588e4b9775", "testharness" ], "IndexedDB/idbobjectstore_createIndex8-valid_keys.htm": [ - "6174523e4786cd81d1c72f65f7d64db77b7a514d", + "ea90f50dde1e9d3b734328065076ab4e7a3b1d31", "testharness" ], "IndexedDB/idbobjectstore_createIndex9-emptyname.htm": [ @@ -443514,7 +444032,7 @@ "testharness" ], "IndexedDB/idbobjectstore_deleted.htm": [ - "74934636a1b60536f34d3693bfb1f8331f71aa8e", + "c26145c1d5cea51197e827f8f94ed66b2bd3d023", "testharness" ], "IndexedDB/idbobjectstore_get.htm": [ @@ -443662,7 +444180,7 @@ "testharness" ], "IndexedDB/idbtransaction-oncomplete.htm": [ - "7c295c7c15045e3aa8bd39319589189aae6c173f", + "e2cad729397ddf89bf80537e93d3bffcc6ce5ccb", "testharness" ], "IndexedDB/idbtransaction.htm": [ @@ -443670,7 +444188,7 @@ "testharness" ], "IndexedDB/idbtransaction_abort.htm": [ - "1f37bb40101caa1c689c4898bfb53a56796d797a", + "4300e2f01c80ee81df79b3d181ab673e3c9b130c", "testharness" ], "IndexedDB/idbtransaction_objectStoreNames.html": [ @@ -443678,7 +444196,7 @@ "testharness" ], "IndexedDB/idbversionchangeevent.htm": [ - "36b997f2f639cd9c981964104868953455960098", + "e776f14c629942c7e7e527efe41d89fcb61e18df", "testharness" ], "IndexedDB/idbworker.js": [ @@ -443738,7 +444256,7 @@ "testharness" ], "IndexedDB/keygenerator-constrainterror.htm": [ - "ee2e24799e3ff42cb34387859eec34397ef8b76d", + "205785f3bd739465cbbad8e657802ef015f35936", "testharness" ], "IndexedDB/keygenerator-explicit.html": [ @@ -443750,7 +444268,7 @@ "testharness" ], "IndexedDB/keygenerator-overflow.htm": [ - "d069f0a2b5fb19d16ce6cc733587632c0cd59560", + "a7bc09fc8d50c57d82f9db6663bf640a2be70d9b", "testharness" ], "IndexedDB/keygenerator.htm": [ @@ -443758,7 +444276,7 @@ "testharness" ], "IndexedDB/keyorder.htm": [ - "1896333f93640e9ff51e4f038d5d5c3afcdeab97", + "7f073ddb9a24e141bc26d9342caf38255b60041d", "testharness" ], "IndexedDB/keypath-exceptions.htm": [ @@ -443778,7 +444296,7 @@ "testharness" ], "IndexedDB/keypath_maxsize.htm": [ - "835b7a33b44ee99d016b3b5e4dd7a2b2504674ec", + "83bd9cc3138e4cc3a637adfebc45e26bda912e81", "testharness" ], "IndexedDB/large-requests-abort.html": [ @@ -443830,7 +444348,7 @@ "testharness" ], "IndexedDB/request_bubble-and-capture.htm": [ - "319f228c8351d0761d41814254ef08891fa587c4", + "f43fd10a34fa31c9910598dd6678c0654129cc77", "testharness" ], "IndexedDB/string-list-ordering.htm": [ @@ -443874,7 +444392,7 @@ "testharness" ], "IndexedDB/transaction-lifetime-blocked.htm": [ - "b0c91ec845792be6a465b448704a67d544e74816", + "a6ef34b19cb304a873b72837ff7d8a1fbda958a1", "testharness" ], "IndexedDB/transaction-lifetime-empty.html": [ @@ -443882,15 +444400,15 @@ "testharness" ], "IndexedDB/transaction-lifetime.htm": [ - "c646286f43adb57d4b43ab076938f19a87bfdb18", + "9c66c54c40fc3c9ab8c2b12008bcbf630dac6d15", "testharness" ], "IndexedDB/transaction-requestqueue.htm": [ - "b5706fe81d7ce97aa2d708a1dc49d9580f96d412", + "081ea2e19a1b23344922a88fe1479cc5f238d8d8", "testharness" ], "IndexedDB/transaction_bubble-and-capture.htm": [ - "f4b5ec0ae58427d4a57bb4f878c423101fd3b4c7", + "ff48fb48234bfe93a5254cdb48f6c6ba18b7835c", "testharness" ], "IndexedDB/upgrade-transaction-deactivation-timing.html": [ @@ -443918,7 +444436,7 @@ "testharness" ], "IndexedDB/writer-starvation.htm": [ - "412308387fcea53499ca7c57d0c38cfeebc1007e", + "cdc7b1e8774f8e4d486d220f5c4ee1996ab7a901", "testharness" ], "LICENSE": [ @@ -535053,6 +535571,10 @@ "705ced279d30e6113eed68b819b287f7e48219cd", "reftest" ], + "css/css-backgrounds/box-shadow-body.html": [ + "88d888a7710c7bdd2831a4908a30108b3a34670a", + "reftest" + ], "css/css-backgrounds/box-shadow-inset-spread-without-border-radius.html": [ "0e74fbf5b64581d3940bd6c374a7972b9a6e7b76", "reftest" @@ -535481,6 +536003,10 @@ "81a5cbf6b8e06f6435bc133287f128ed6af8ed62", "support" ], + "css/css-backgrounds/reference/box-shadow-body-ref.html": [ + "d2ae1ebd84b7ed80bcee9e0b457a41c0b8f17cf9", + "support" + ], "css/css-backgrounds/reference/box-shadow-inset-spread-without-border-radius.html": [ "5e9cf0d34ec1510d8f8c879baf88720b861a75a5", "support" @@ -536041,6 +536567,14 @@ "e0be119e4002b1d637ebdfc464d87ef88ab83106", "testharness" ], + "css/css-break/line-after-unbreakable-float-after-padding-ref.html": [ + "9a329b2446849d8f13b9d88cb5f73934536c3767", + "support" + ], + "css/css-break/line-after-unbreakable-float-after-padding.html": [ + "d3a4018cd809fc09eb68c1b25f4dda4736e64131", + "reftest" + ], "css/css-break/reference/widows-orphans-001-ref.html": [ "06108ac800c19c68841f2a0e8867fb05e868c1ab", "support" @@ -540201,6 +540735,22 @@ "88156a2f32f9a9ced2802ef7cdbb59b8187bf65a", "reftest" ], + "css/css-flexbox/align-content-wrap-001.html": [ + "1e0ce42c75f462aea952113582e743bf8bda4dd8", + "testharness" + ], + "css/css-flexbox/align-content-wrap-002.html": [ + "a15f7ea844d112ab696a03d994cb17ed1fe47074", + "testharness" + ], + "css/css-flexbox/align-content-wrap-003.html": [ + "3e07338745b0aaaf9315eed7159f5db2ff0f4e7f", + "testharness" + ], + "css/css-flexbox/align-content-wrap-004.html": [ + "161832190a2a3088ab3b9ad198d4e3083a291551", + "reftest" + ], "css/css-flexbox/align-content_center.html": [ "3bd0dc415f94539126a8848cf82ff0bb8932ba58", "visual" @@ -552169,6 +552719,14 @@ "723b348d01048e280a4cf709b13f41fb1fd9b5d0", "testharness" ], + "css/css-grid/alignment/grid-self-alignment-stretch-input-range-ref.html": [ + "ad71302aef9bcf50fbfb3cedf84db670a9aec4b4", + "support" + ], + "css/css-grid/alignment/grid-self-alignment-stretch-input-range.html": [ + "fb17f3a4a8b25503a61e786bde78e0726105a74e", + "reftest" + ], "css/css-grid/alignment/grid-self-alignment-stretch-vertical-lr-001.html": [ "66686fd6589a3573c831ea6b895cf59ea4ac47db", "testharness" @@ -553006,27 +553564,27 @@ "testharness" ], "css/css-grid/grid-model/grid-container-scrollbar-001-ref.html": [ - "31a9ef3db8e08d76b218a4f2bf1ea5cde5d889b3", + "f304cedfeaba12968d075784f87fbb28c73851d4", "support" ], "css/css-grid/grid-model/grid-container-scrollbar-001.html": [ - "1b3c6eef691d9959b4bc899b3d88c9c7e3f57e28", + "b4ecd188db70e404d1738a0bfc56df1b8e25e681", "reftest" ], "css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001-ref.html": [ - "512fb8a81d57788eb06e004982de9c897df3dd0f", + "e6640cc749e945b0fb78026b7b984d3c72c4c0f0", "support" ], "css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html": [ - "ecdc7b768406922628b1bcf2e17b6ba7ee6b162b", + "6733759cf00b264f4920ef9bca51a0e4a3f4dc63", "reftest" ], "css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001-ref.html": [ - "d8eeedfa07d572d5150e2e480b572769273fc1f3", + "2b1bbaebb46e937d9f915d2907564e3061c1cd83", "support" ], "css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html": [ - "f2ab39ff505401436e23947feea4bffbff12629c", + "a3de9386a81af4058246842200d889a603d98fd2", "reftest" ], "css/css-grid/grid-model/grid-display-grid-001.html": [ @@ -554433,6 +554991,10 @@ "f90346b839c07a457aeb2be4b085cbf0a27606e9", "testharness" ], + "css/css-logical/logical-values-float-clear-reftest.html": [ + "c0fe9a52bc4acc02f7a1df96d2af9c526d3e4430", + "reftest" + ], "css/css-logical/logical-values-float-clear.html": [ "e82765809f4834d0b1d061c9b936d409852b9ba0", "testharness" @@ -554461,12 +555023,16 @@ "3e133db880cd32d963d701bb184d28faae959aa5", "testharness" ], + "css/css-logical/reference/logical-values-float-clear-reftest-ref.html": [ + "28c275ebb307a3db20c019daebe140e3fa591971", + "support" + ], "css/css-logical/resources/test-box-properties.js": [ "1f17ff296ff2c3dcf81db1a112bda24ef04eb126", "support" ], "css/css-logical/resources/test-logical-values.js": [ - "c34b4ee9f913013720a2ad0083cb3ed63a9c71b6", + "7a039379cbddcbd3df0bf793636b932fe2fafbbc", "support" ], "css/css-logical/resources/test-shared.js": [ @@ -558090,7 +558656,7 @@ "testharness" ], "css/css-properties-values-api/var-reference-registered-properties.html": [ - "5de6d20f11b1aec41c7b54653ef482db6c7d8c93", + "166754574faa025807847209f1ab157111a4a6d8", "testharness" ], "css/css-pseudo/META.yml": [ @@ -568013,6 +568579,46 @@ "e1a67bb1dc7d157d4bf57e1af40c039d67001923", "reftest" ], + "css/css-text/writing-system/reference/writing-system-font-001-ref.html": [ + "f0bd7fe2629f3461f22c6290e1468a85800c02c5", + "support" + ], + "css/css-text/writing-system/reference/writing-system-line-break-001-ref.html": [ + "6ff3ef1e64627c25d14b6eefa6c31dfcdcd9f2c7", + "support" + ], + "css/css-text/writing-system/reference/writing-system-line-break-002-ref.html": [ + "2855797d355113ce051e2552f7760978702f6a21", + "support" + ], + "css/css-text/writing-system/reference/writing-system-segment-break-001-ref.html": [ + "f451a74a51d74fff950aa2675059e9eb6024ae4e", + "support" + ], + "css/css-text/writing-system/reference/writing-system-text-transform-001-ref.html": [ + "9b50fb133122f718ba828617833203c8ff96f558", + "support" + ], + "css/css-text/writing-system/writing-system-font-001.html": [ + "a8d4549279b16ad82d814a2ee4105573b857b046", + "reftest" + ], + "css/css-text/writing-system/writing-system-line-break-001.html": [ + "4ecb5ae7734a7a131fedd9a6bd8191ee6f14f519", + "reftest" + ], + "css/css-text/writing-system/writing-system-line-break-002.html": [ + "a973560a6e2717449578ad83fc3aca49c0e3a0e2", + "reftest" + ], + "css/css-text/writing-system/writing-system-segment-break-001.html": [ + "1d560d9f497cbfdefd69ad59220a19bb8b84d397", + "reftest" + ], + "css/css-text/writing-system/writing-system-text-transform-001.html": [ + "209d56c95144e10c649cad32ec1b5a5a5e5ea300", + "reftest" + ], "css/css-timing/frames-timing-functions-output.html": [ "40e03286e71f7126bfbbdd50bc74e25c191a4d30", "testharness" @@ -568050,7 +568656,7 @@ "testharness" ], "css/css-transforms/animation/resources/interpolation-testcommon.js": [ - "3791b0af9db63fe7c8ef6baad4cc566e4a3e950a", + "73ce9ceefb38654c480bf41b8ce542efcc3701c3", "support" ], "css/css-transforms/animation/rotate-interpolation.html": [ @@ -586506,7 +587112,7 @@ "support" ], "css/filter-effects/backdrop-filter-basic-background-color.html": [ - "c8d1a3ede5d58bc3179c2d66183957540778c5d2", + "39febb17d2df21456b8f8ea4a42407e799a6eb2b", "reftest" ], "css/filter-effects/backdrop-filter-basic-opacity-ref.html": [ @@ -586514,7 +587120,7 @@ "support" ], "css/filter-effects/backdrop-filter-basic-opacity.html": [ - "23e40a7ccdd7b78fbc7847797d4c40cad8c3ad5d", + "e3ad8a20afafce2d03e64668a3bdee9c3f3c1446", "reftest" ], "css/filter-effects/backdrop-filter-basic-ref.html": [ @@ -586522,7 +587128,7 @@ "support" ], "css/filter-effects/backdrop-filter-basic.html": [ - "8f24c9b44a484a19d0169c632665c2facece6a64", + "711064e4de375df9f2fa819b4fff209b87721f8d", "reftest" ], "css/filter-effects/backdrop-filter-border-radius-ref.html": [ @@ -586530,11 +587136,27 @@ "support" ], "css/filter-effects/backdrop-filter-border-radius.html": [ - "d6d1f4b813011cc7a4a814c9f4382425087eaf00", + "fc212501ad52ca7cd1e0a2fd35b7654c8233eea2", + "reftest" + ], + "css/filter-effects/backdrop-filter-clip-rect-ref.html": [ + "a51d81f85193257d28f7e9b096d6cec06dd704d0", + "support" + ], + "css/filter-effects/backdrop-filter-clip-rect.html": [ + "8b5d9f4e34f8f4fd04c988f99f03685c3fbf58c9", + "reftest" + ], + "css/filter-effects/backdrop-filter-edge-pixels-ref.html": [ + "1960435775c24f7b7464e1f42cd9da15766c2b5e", + "support" + ], + "css/filter-effects/backdrop-filter-edge-pixels.html": [ + "1e29d725ebcd8d78350ba2a2fcff50b3b239f88a", "reftest" ], "css/filter-effects/backdrop-filter-isolation-isolate.html": [ - "dba157c87c76b74ec75015be92ce0eea2348219f", + "99fa69d03fa6fac067a375a951ccb292183dc8df", "reftest" ], "css/filter-effects/backdrop-filter-isolation-ref.html": [ @@ -586542,7 +587164,15 @@ "support" ], "css/filter-effects/backdrop-filter-isolation.html": [ - "dc7bd107c32a6032d9dd751d2e2d580abd520fc2", + "e41772578e5d2ccea955bb9f65cfa77771a36027", + "reftest" + ], + "css/filter-effects/backdrop-filter-paint-order-ref.html": [ + "bd82e520f0e70b75e45c687cb46f957a579e2358", + "support" + ], + "css/filter-effects/backdrop-filter-paint-order.html": [ + "88531532fc33296e8c8eca5452da04d5d612662d", "reftest" ], "css/filter-effects/blur-clip-stacking-context-001.html": [ @@ -588013,8 +588643,8 @@ "9792fd0ebe1c77307ec1cfb6f572fc5d8e139e6a", "testharness" ], - "css/selectors/invalidation/matches.html": [ - "634ded3c7d760f6dccb2c14e87cf67f1c1320da5", + "css/selectors/invalidation/is.html": [ + "0d905dcd4f6c4796095b06d24a8e9e11a01782bc", "testharness" ], "css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html": [ @@ -588038,15 +588668,15 @@ "reftest" ], "css/selectors/invalidation/where.html": [ - "1c6432f46eb4f2b424fdd3ca9c453925a23710ed", + "170398300f0b4359139c597937f84e69e774a71e", "testharness" ], - "css/selectors/matches-nested.html": [ - "b82d43d09017955af2904f6362e858929a6d4399", + "css/selectors/is-nested.html": [ + "7c3973ae058edfcead691242479777aab1f5d35a", "testharness" ], - "css/selectors/matches-specificity.html": [ - "41d7251a3d74efbdf69407889418797a80289316", + "css/selectors/is-specificity.html": [ + "bf3dbc6bb9fc105d87a63ddbef65ade931f223f0", "testharness" ], "css/selectors/missing-right-token.html": [ @@ -589534,7 +590164,7 @@ "support" ], "css/support/computed-testcommon.js": [ - "0999418e748162bcee4d062b010bca45bd7cfdfe", + "2cc19c176fa4147f3a30c8fcb251450938a3213b", "support" ], "css/support/green.ico": [ @@ -604097,6 +604727,22 @@ "7c441bbba555d9da8c2cfc34de2ddaf2a52074f4", "support" ], + "feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html": [ + "b45d8c3d4483ae309f87d6a26552636efa44e407", + "testharness" + ], + "feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.headers": [ + "7c441bbba555d9da8c2cfc34de2ddaf2a52074f4", + "support" + ], + "feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html": [ + "0701c50f6cac4cef768cf94ce8cd1764a885a14e", + "testharness" + ], + "feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.headers": [ + "7c441bbba555d9da8c2cfc34de2ddaf2a52074f4", + "support" + ], "feature-policy/experimental-features/layout-animations-enabled-tentative.html": [ "cf396e9022344f059223421808dd36c7e67b3a54", "testharness" @@ -604133,12 +604779,16 @@ "6111e691c82be97a0a040053b673d663cb404eb7", "testharness" ], + "feature-policy/experimental-features/resources/animation-property-height.js": [ + "79316cb488fade6e877c690f90c74961ff944f52", + "support" + ], "feature-policy/experimental-features/resources/async-script.js": [ "3c0ee6d02343891b0234f31c0fb229929ae1b24b", "support" ], "feature-policy/experimental-features/resources/common.js": [ - "64cfca59d6c801e59dfe2a5684b99780413a8ba6", + "42790b8a2e79cc03b27b646deaf542635e19d439", "support" ], "feature-policy/experimental-features/resources/defer-script.js": [ @@ -604409,48 +605059,96 @@ "1759381fdc4141302f1b95868550ead76d9f5ca7", "support" ], + "feature-policy/reporting/camera-report-only.https.html": [ + "26488687e6fc75247356d716fa32134dc695fadf", + "testharness" + ], + "feature-policy/reporting/camera-report-only.https.html.headers": [ + "46b84811f55556b8dc4cbc87c174e1175b73e47b", + "support" + ], "feature-policy/reporting/camera-reporting.https.html": [ - "14b2ed1d37c6d79c9e011a35b9fece0cddc0ac76", + "ced585139b3ee3f706599f15581349e5608cf74a", "testharness" ], "feature-policy/reporting/camera-reporting.https.html.headers": [ "2adc5e237fcec874767ff8f5ab38e3456c02cbf0", "support" ], + "feature-policy/reporting/document-write-report-only.html": [ + "ab0bb827166327228e825f9f9c5a0447666d17e1", + "testharness" + ], + "feature-policy/reporting/document-write-report-only.html.headers": [ + "63e43f1d719302760ccdd902439c32913bda375c", + "support" + ], "feature-policy/reporting/document-write-reporting.html": [ - "cb08b8d72d1851ca02c51abf5713519d52f1ecf4", + "93672fac35b6cfa06f3102d859a15ae6333a1bae", "testharness" ], "feature-policy/reporting/document-write-reporting.html.headers": [ "57102d5ee7c072e433fa44c0c13521573b32f469", "support" ], + "feature-policy/reporting/encrypted-media-report-only.https.html": [ + "20e44b2fd5db2ac6f54b67c909f6d31099edfaa3", + "testharness" + ], + "feature-policy/reporting/encrypted-media-report-only.https.html.headers": [ + "a2c8fbb44259448cadc9290aad6853051a28aba6", + "support" + ], "feature-policy/reporting/encrypted-media-reporting.https.html": [ - "d309d5390f1ec5f6f3edd00327e9a36b54926499", + "c3b63936b3a8310f873c748947f0fc0633928a9b", "testharness" ], "feature-policy/reporting/encrypted-media-reporting.https.html.headers": [ "73753a2e41d10b0a0398831350b1f17e586ab847", "support" ], + "feature-policy/reporting/fullscreen-report-only.html": [ + "a6b3d5adeed5654942aba43dc65d627fa7c35ae0", + "testharness" + ], + "feature-policy/reporting/fullscreen-report-only.html.headers": [ + "33defa88f6ef9842e4b388dc853ff88c2947e81d", + "support" + ], "feature-policy/reporting/fullscreen-reporting.html": [ - "83d97c91fab60e593cf3bf0cceff4db80552ef02", + "4190fdd19260cd60317e8789553f49f39f9ebae5", "testharness" ], "feature-policy/reporting/fullscreen-reporting.html.headers": [ "d35e48ba40dc65a3b043a3e41a11332c42bfdba9", "support" ], + "feature-policy/reporting/generic-sensor-report-only.https.html": [ + "deb6adeb73679e3e456787c23ee1a9acad1b8901", + "testharness" + ], + "feature-policy/reporting/generic-sensor-report-only.https.html.headers": [ + "26605eb0fa6c46f9991071f32f9ca35adf00acb2", + "support" + ], "feature-policy/reporting/generic-sensor-reporting.https.html": [ - "c60e3e81a1dddbdc000d799c19719c48ad55376c", + "517c7f6872146a66b02982c0d9e895b60f6d89af", "testharness" ], "feature-policy/reporting/generic-sensor-reporting.https.html.headers": [ "80cc02753044a3730695bce65bc2b4c22d7a8a6b", "support" ], + "feature-policy/reporting/geolocation-report-only.https.html": [ + "cf2a75b766c3e60b988a0e6e70f65d13b2b79fcf", + "testharness" + ], + "feature-policy/reporting/geolocation-report-only.https.html.headers": [ + "fc9859000f566801a83d89f1b1371017847c9eb6", + "support" + ], "feature-policy/reporting/geolocation-reporting.https.html": [ - "22e258563b799c7d48db2452f15eb6124d1f2d0e", + "05445fc1f1c04c39e39e9f6d06cdcd5022e9ba1a", "testharness" ], "feature-policy/reporting/geolocation-reporting.https.html.headers": [ @@ -604461,40 +605159,80 @@ "c059b96d97fc3701ce4325165b79948f69189135", "support" ], + "feature-policy/reporting/microphone-report-only.https.html": [ + "2d7b4d960d8b5f1c16be272f39c22947370a2611", + "testharness" + ], + "feature-policy/reporting/microphone-report-only.https.html.headers": [ + "7673d05b9485d7d2aba2e1d952b65797fdbb0827", + "support" + ], "feature-policy/reporting/microphone-reporting.https.html": [ - "7347a2332bc8184b2437a965e95b54ff5fcac22f", + "246484fd6cfe879d6cff1867c3161325f077745c", "testharness" ], "feature-policy/reporting/microphone-reporting.https.html.headers": [ "a86e0a077851a84f704e2aa4df1d526ecd9a55b2", "support" ], + "feature-policy/reporting/midi-report-only.html": [ + "e466ce0dc412e14296755c2608dc9b4ac1bdc4f6", + "testharness" + ], + "feature-policy/reporting/midi-report-only.html.headers": [ + "3c6a2d4fbb320425b3850eaea2eceaf038b0ba62", + "support" + ], "feature-policy/reporting/midi-reporting.html": [ - "8303b7adce4de654e3a846bbbe1cba035ac9a284", + "c5627e5a2136277bf9fce812d2a4a9b66c17e7b6", "testharness" ], "feature-policy/reporting/midi-reporting.html.headers": [ "0e145978a014f08fb5faff42750e9338da0f9ede", "support" ], + "feature-policy/reporting/payment-report-only.https.html": [ + "6a7678b51e759eef7c90e924a596bbf5c1364e15", + "testharness" + ], + "feature-policy/reporting/payment-report-only.https.html.headers": [ + "6411478e4ca37bd2eab26a35b5ae0e6e39ddf066", + "support" + ], "feature-policy/reporting/payment-reporting.https.html": [ - "03eaebea58fb603f5121f6836c85c2c6773c3a5d", + "828054a6caff34136817b3e0e55290b97c2c6b76", "testharness" ], "feature-policy/reporting/payment-reporting.https.html.headers": [ "a2836778bc5389fdb65e9f6d5f83c7967200866f", "support" ], + "feature-policy/reporting/picture-in-picture-report-only.html": [ + "157670f2cab802bf3f07343eab6649152b08c126", + "testharness" + ], + "feature-policy/reporting/picture-in-picture-report-only.html.headers": [ + "0df90a3e94a3f4997b97dccac3b18aa2830045e8", + "support" + ], "feature-policy/reporting/picture-in-picture-reporting.html": [ - "e3cbf1036871a40163a67aab22930fb7dcde8338", + "f15f47c549d9f03c6b2c49d4e00112900491174d", "testharness" ], "feature-policy/reporting/picture-in-picture-reporting.html.headers": [ "1759381fdc4141302f1b95868550ead76d9f5ca7", "support" ], + "feature-policy/reporting/sync-xhr-report-only.html": [ + "f841f63d6ed3503e7370d11a5305cd95588b1ff9", + "testharness" + ], + "feature-policy/reporting/sync-xhr-report-only.html.headers": [ + "79a82cfb6351efe60fca8945e11d8ec58719dc8d", + "support" + ], "feature-policy/reporting/sync-xhr-reporting.html": [ - "2c76390847be29c5bb2f3ec8605d1cb746c33e00", + "82200cdfbccc420568713808509855342c6c2bab", "testharness" ], "feature-policy/reporting/sync-xhr-reporting.html.headers": [ @@ -604502,35 +605240,59 @@ "support" ], "feature-policy/reporting/unsized-media-reporting.html": [ - "8bd793189501a94564044a3c2fa3757a69f13085", + "00a15587d440641986fd55e9af90fd2210f2166e", "testharness" ], "feature-policy/reporting/unsized-media-reporting.html.headers": [ "db2dcbc1929b9e1264855e9b80f77dfbda5d4f38", "support" ], + "feature-policy/reporting/usb-report-only.https.html": [ + "e44c6c528fd4fc9b1d7d96ea65d68a922748bc47", + "testharness" + ], + "feature-policy/reporting/usb-report-only.https.html.headers": [ + "bd2e3c6fe5085b0faa97c2439920d39175497acb", + "support" + ], "feature-policy/reporting/usb-reporting.https.html": [ - "f90c602e449bd00e1d773edbce01e4fab63341e2", + "0ddff455537c7ad1ae077d8ac8b15e24f3fc64a3", "testharness" ], "feature-policy/reporting/usb-reporting.https.html.headers": [ "4fd1e269362c43d282ca8e3c5c35a5d648f0666b", "support" ], + "feature-policy/reporting/vr-report-only.https.html": [ + "91016d388532c5528f02e31b308178573191e2ef", + "testharness" + ], + "feature-policy/reporting/vr-report-only.https.html.headers": [ + "b54cad2af941d68b2d395e7d0b9f0af3931bbd01", + "support" + ], "feature-policy/reporting/vr-reporting.https.html": [ - "12cae052a167b47d020dcb8ec7887e5578ce48c5", + "e0bb63531171ff596cbb5aa1a71e757f0239e4ad", "testharness" ], "feature-policy/reporting/vr-reporting.https.html.headers": [ "d021af75636de273c868412cd98dfff50576151d", "support" ], + "feature-policy/reporting/xr-report-only.https.html": [ + "5d4fb062c1ea2b49fff4068f33926f5afdf8c446", + "testharness" + ], + "feature-policy/reporting/xr-report-only.https.html.headers": [ + "b54cad2af941d68b2d395e7d0b9f0af3931bbd01", + "support" + ], "feature-policy/reporting/xr-reporting.https.html": [ - "a7a122237bb0bdef6d35954697c5a80dbebb8b0f", + "0844860ad79efe76abcda1a41561a7ef28130ec0", "testharness" ], "feature-policy/reporting/xr-reporting.https.html.headers": [ - "d021af75636de273c868412cd98dfff50576151d", + "ea8722131ce0d9ca4a05390500d03b8f94394401", "support" ], "feature-policy/resources/autoplay.js": [ @@ -604846,7 +605608,7 @@ "testharness" ], "fetch/api/headers/headers-no-cors.window.js": [ - "aa6562b7d377f4ad74456a87d7e37bf0bd18cb2b", + "ebf0142e280c668ac2adf5205e7e26712598e203", "testharness" ], "fetch/api/headers/headers-normalize.html": [ @@ -606861,6 +607623,10 @@ "ba92037b9c015aabde265746b9c4404281cb5394", "manual" ], + "fullscreen/rendering/fullscreen-css-transition.html": [ + "1d50502ee3bdb9b58eab3b516f1f743fa4e3a2f2", + "testharness" + ], "fullscreen/rendering/fullscreen-pseudo-class-manual.html": [ "0c06ba3c6df7d23a7c47de24411279d6401a1307", "manual" @@ -620809,6 +621575,10 @@ "0ffec33bf531a55c9b878d2b7e5db7fa69043863", "testharness" ], + "html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html": [ + "95ccb1ff69ba9b86f47ad4fdf7468aa1d83f3eb6", + "testharness" + ], "html/semantics/forms/the-input-element/time.html": [ "ad4e38cbc74f50dc764fc958b8cf68f4dd790cbe", "testharness" @@ -626274,7 +627044,7 @@ "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini": [ - "8edb44d4148739d5fccfe61460f298e642285d7c", + "6644d52d1ff5f9faa1101c539afd35e6e94be182", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/elementTiming.html.ini": [ @@ -626282,7 +627052,7 @@ "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini": [ - "8c60a97ad955a8f02e45657d36b2ffa4f6a476a0", + "bfb5c0ae4bd5350c6a540fa48a5d2896d5be9503", "support" ], "infrastructure/metadata/infrastructure/testdriver/actions/multiDevice.html.ini": [ @@ -626430,7 +627200,7 @@ "testharness" ], "infrastructure/testdriver/actions/elementPosition.html": [ - "ab9fb31ad093b129b2d1c0f4b471d4c6c5000866", + "145852e7b51bd0cdc9e7b4ef5ebddcbf1c0235c5", "testharness" ], "infrastructure/testdriver/actions/elementTiming.html": [ @@ -626438,7 +627208,7 @@ "testharness" ], "infrastructure/testdriver/actions/eventOrder.html": [ - "bd7fef41e9af2909fa8e375867240a552f13d715", + "c85b861c7fd9b199ce7baa5c9eac49525db4754b", "testharness" ], "infrastructure/testdriver/actions/multiDevice.html": [ @@ -626738,7 +627508,7 @@ "support" ], "interfaces/geometry.idl": [ - "733a111e38bb62eb94d1c508a9109e68ecab32bb", + "b5b56e780542ec0e623b47fc6a8b76dd0c3bb6f1", "support" ], "interfaces/gyroscope.idl": [ @@ -627366,7 +628136,7 @@ "support" ], "lint.whitelist": [ - "99b1d6a2be10de0f35b571431310a05dd7ff99c2", + "dd90081c83eb6f575b510d9768c55a030bc0b60c", "support" ], "longtask-timing/META.yml": [ @@ -627378,35 +628148,35 @@ "testharness" ], "longtask-timing/longtask-attributes.html": [ - "6af90cd9eef7ca4433c5a330e167678c39bfcfb7", + "b5d44b0db5d33ee44abf2690b27a233088491ab8", "testharness" ], "longtask-timing/longtask-in-childiframe-crossorigin.html": [ - "17b0fd2412b16ba30f23c9d89cf16d7014470eb3", + "aaabce5d79da192b2319d8ab4baa2c7056185373", "testharness" ], "longtask-timing/longtask-in-childiframe.html": [ - "b7137043ad01de4ee10b1a2a7424e1c2e12370e3", + "34b802cb69676e16648879a46178fb472e8f5d42", "testharness" ], "longtask-timing/longtask-in-externalscript.html": [ - "51c58afff0558ce3870aeeaf8d5cbed5eff7ed57", + "076f0f2291400aaa0a2c0608f204844b7b13a1f4", "testharness" ], "longtask-timing/longtask-in-parentiframe.html": [ - "2e7a9990dd059b6b4142636c58c884431b74f878", + "778edc1000ffce314c064d2f2bc83e2e2a2b33f6", "testharness" ], "longtask-timing/longtask-in-raf.html": [ - "8a5a7290ac9f5a4a0517f77a825700c8081e4dc0", + "2d30ac36b96339238d18f596379b0784d9dcd79f", "testharness" ], "longtask-timing/longtask-in-sibling-iframe-crossorigin.html": [ - "cfcc1895a190a613a67cbd4674b7fb7379abafaa", + "b73112e3abf8c88567964690c18e797f10d15ad2", "testharness" ], "longtask-timing/longtask-in-sibling-iframe.html": [ - "e6041e48a665d5df4bbd03d11f30c0c59dfa35aa", + "b8a4270163a1ef4de3a0dfd4aaf82f9404497882", "testharness" ], "longtask-timing/longtask-tojson.html": [ @@ -639501,9 +640271,9 @@ "bb6dcc4236b0cc5183855275d85208db6460a5cb", "manual" ], - "pointerevents/pointerevent_pointermove.html": [ - "4b168439a4ee1455e5a5960b48a0c3192e767edf", - "testharness" + "pointerevents/pointerevent_pointermove-manual.html": [ + "cf1a1ee4ee852e94cef7010fd2f2351e974d23b9", + "manual" ], "pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown-manual.html": [ "b43d59f4f6e822f3d03d25b17015cd50d332ed7b", @@ -649193,6 +649963,10 @@ "b6d30eab0f0ca1fa4024b8576e7cbfb8a4c7bad3", "support" ], + "resources/test/tests/functional/worker-dedicated-uncaught-allow.html": [ + "33543d0b4e70e64a0dc664707bb3912046b963d4", + "support" + ], "resources/test/tests/functional/worker-dedicated-uncaught-single.html": [ "760151832e81f8ef61d510b252d0cd1d7d843495", "support" @@ -649213,6 +649987,10 @@ "5d098de9105fbaba3c17a4576af8f1b687c1b597", "support" ], + "resources/test/tests/functional/worker-uncaught-allow.js": [ + "957131a890e007bd8ad1e111064849d1e65dd90e", + "support" + ], "resources/test/tests/functional/worker-uncaught-single.js": [ "d7f00382c0b92ff29bd8bcb7fceebec727df4ef7", "support" @@ -649310,7 +650088,7 @@ "support" ], "resources/testdriver-actions.js": [ - "82cac85347bfa6f65a3757fa8e3c76d113ce06be", + "46c68858e4574646ad3efaa5a6dba10127b27a29", "support" ], "resources/testdriver-vendor.js": [ @@ -649322,7 +650100,7 @@ "support" ], "resources/testdriver.js": [ - "8ffd765072c4e7351e95f221b447a9d8ecde5152", + "e0741e8d61d4d67c99ccbfc860f65e796c44c78a", "support" ], "resources/testdriver.js.headers": [ @@ -649334,7 +650112,7 @@ "support" ], "resources/testharness.js": [ - "18a6f70beab26b474b0f684842a5735def02610a", + "2e14c30730d2efaf8fab98328f0a07d270627802", "support" ], "resources/testharness.js.headers": [ @@ -651666,7 +652444,7 @@ "testharness" ], "service-workers/service-worker/clients-get.https.html": [ - "68c6d7f7ac02a316856a405f6579eb191e738924", + "b05274039082a8b25384a87dceb46a005f95fd89", "testharness" ], "service-workers/service-worker/clients-matchall-client-types.https.html": [ @@ -651846,7 +652624,7 @@ "testharness" ], "service-workers/service-worker/fetch-event.https.html": [ - "78e099b8b553ea150f170acfa99d9191c39e3326", + "169a0b17d6230335fb0c83988039875c815d99e1", "testharness" ], "service-workers/service-worker/fetch-frame-resource.https.html": [ @@ -651938,7 +652716,7 @@ "testharness" ], "service-workers/service-worker/import-module-scripts.https.html": [ - "e82911a1bd002d1039ba5a5ae31b51a3a90e1905", + "7bca8de64f5bc9664911bd1c5dc883567681afb8", "testharness" ], "service-workers/service-worker/import-scripts-mime-types.https.html": [ @@ -652433,6 +653211,10 @@ "6342fe04f404e36e2fd7c8f91960ded2ae1c91ee", "support" ], + "service-workers/service-worker/resources/clients-get-resultingClientId-worker.js": [ + "153a8e3f5b94059e643daa30b1eb4a821ef886f3", + "support" + ], "service-workers/service-worker/resources/clients-get-worker.js": [ "87368ae7617575da4281aff678c27c2d37118966", "support" @@ -652654,7 +653436,7 @@ "support" ], "service-workers/service-worker/resources/fetch-event-test-worker.js": [ - "d503a6609d695821e207217811b53f957027d118", + "0a52a8201ea96d50d3fa6ee302f6aa90b4435da6", "support" ], "service-workers/service-worker/resources/fetch-event-within-sw-worker.js": [ @@ -653166,7 +653948,7 @@ "support" ], "service-workers/service-worker/resources/registration-tests-scope.js": [ - "51b0ab4ad51a3c0a2a7b683413ca6aeba7ec6191", + "6c097ad8d1f8b8f9a4fe95f7c6ebd04edb5cfd9c", "support" ], "service-workers/service-worker/resources/registration-tests-script-url.js": [ @@ -653178,7 +653960,7 @@ "support" ], "service-workers/service-worker/resources/registration-tests-security-error.js": [ - "c84bb66e042e1354165de3efd291f2aa2b97b9c5", + "a72d3bac291c6f42acf264926b858a0f3964ed42", "support" ], "service-workers/service-worker/resources/registration-worker.js": [ @@ -656041,6 +656823,10 @@ "760328ac31818d86a9410fd7c412d803e30416a2", "testharness" ], + "svg/geometry/parsing/cx-computed.svg": [ + "5a408ba4d28f1acf36f2bde6767b65bc5401cf48", + "testharness" + ], "svg/geometry/parsing/cx-invalid.svg": [ "4b1b90158fcc7c1747f8b1ab382cd78f394f142c", "testharness" @@ -656049,6 +656835,10 @@ "e7f627ac721fcc90597314ef0c97765566c343b3", "testharness" ], + "svg/geometry/parsing/cy-computed.svg": [ + "97a41aed9c1621c8da0f5318cf1a08339867d03f", + "testharness" + ], "svg/geometry/parsing/cy-invalid.svg": [ "528eed02ceadb26ff53a42c9950bf508170c2c83", "testharness" @@ -656057,6 +656847,10 @@ "4372c36ea225328926030830e895f64858e73784", "testharness" ], + "svg/geometry/parsing/r-computed.svg": [ + "fc8ea983ff00e82e61fbc8b974657c1956391f8e", + "testharness" + ], "svg/geometry/parsing/r-invalid.svg": [ "a14c52266ce2b7b66847a18327cab0346d083115", "testharness" @@ -656065,6 +656859,10 @@ "70cd5503b795cef3f5db7eb4db1034d63b3e63fc", "testharness" ], + "svg/geometry/parsing/rx-computed.svg": [ + "7e4c42d29304a1f03e712149960356c5e0c7464b", + "testharness" + ], "svg/geometry/parsing/rx-invalid.svg": [ "9ce0603bea13ceb2cf06c7da8ba0ac2b4ccb04a1", "testharness" @@ -656073,6 +656871,10 @@ "e2b628f1de4bd8e2a3fec98fda1aa76b6af79b87", "testharness" ], + "svg/geometry/parsing/ry-computed.svg": [ + "390d63dc7e5aa9802edea9ad2193695e1dbdb688", + "testharness" + ], "svg/geometry/parsing/ry-invalid.svg": [ "7a25a1ec0e61e4a36e65b7884d9667bb1614adfa", "testharness" @@ -656081,6 +656883,10 @@ "4ce5bec4084cf0e6cf1e6744701b756cc18e2f91", "testharness" ], + "svg/geometry/parsing/x-computed.svg": [ + "f7da0ed9564380250bff469f388bf1a88d31a43a", + "testharness" + ], "svg/geometry/parsing/x-invalid.svg": [ "31ad29524e11dc5fe95c970506691953f0e611d0", "testharness" @@ -656089,6 +656895,10 @@ "5ff2fbd831d7373faee706538f08528dc4ac8a99", "testharness" ], + "svg/geometry/parsing/y-computed.svg": [ + "83ef887da671eb532661c00e113118d6daa2e4b4", + "testharness" + ], "svg/geometry/parsing/y-invalid.svg": [ "d6ea944dbd649d1ec73da75e162f2ac3a3dfa818", "testharness" @@ -658317,6 +659127,14 @@ "643ddba1664fd5d2155aec05af8518188fdc354c", "testharness" ], + "svg/interact/script-common.html": [ + "fc2ae3ba01a0ac512f4a4c180890f03260442bc6", + "testharness" + ], + "svg/interact/script-content.svg": [ + "94836f7c0331cb8a1caebacef02a75018b2b4ddb", + "testharness" + ], "svg/linking/reftests/href-a-element-attr-change.html": [ "c74b2e015613a09d1cecb5a0c3136d26f07e2a5b", "reftest" @@ -658525,6 +659343,10 @@ "c8d60bd5bf68d0dc5f56fb360acdd2bac5aa1aa2", "reftest" ], + "svg/painting/scripted/paint-order-computed-value-01.svg": [ + "7ea669f1508283f498e9b38030022deac3b091a0", + "testharness" + ], "svg/path/bearing/absolute-ref.svg": [ "85b20271a1179500e145ef48260888978dea484a", "support" @@ -664446,7 +665268,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/fennec.py": [ - "15396fba22c2a39a9ccfce439cf7e477dc5e1378", + "01fed66d0e909a7491d8003850a2f425781a4ff1", "support" ], "tools/wptrunner/wptrunner/browsers/firefox.py": [ @@ -665122,7 +665944,7 @@ "support" ], "tools/wptserve/wptserve/server.py": [ - "848fbb74c7b952a825ecbcda30cc1c4808e441fc", + "d57a36b133844b1146c4ab44ae411ea94222cc6d", "support" ], "tools/wptserve/wptserve/sslutils/__init__.py": [ @@ -666077,6 +666899,10 @@ "e47a3ba7a981e978cdf015f8fc6bfbae6762dba9", "testharness" ], + "user-timing/mark-measure-return-null.html": [ + "5afd9633f24751eb40e3bd5e1d73c47922639f0c", + "testharness" + ], "user-timing/mark.any.js": [ "781bbcbfca6cc042b7ef4d493f46215cf7a0d7df", "testharness" @@ -667626,7 +668452,7 @@ "testharness" ], "wasm/webapi/abort.any.js": [ - "cc0f5d9f34ff0cc43df0b0dff097869502da448d", + "839de16108ef255855b365b43dfdfce927543be9", "testharness" ], "wasm/webapi/body.any.js": [ @@ -669850,7 +670676,7 @@ "wdspec" ], "webdriver/tests/maximize_window/stress.py": [ - "daa8a911928f42fabdde73c3749d96691f039167", + "4527c64a28844b009f33b8051194a6f624899ba5", "wdspec" ], "webdriver/tests/maximize_window/user_prompts.py": [ @@ -670806,7 +671632,7 @@ "testharness" ], "webrtc/RTCConfiguration-rtcpMuxPolicy.html": [ - "1d99aa29d85a5dabddf21bc4d758c6cdf96ff9c2", + "7d0c81f5eabfddd5fbe66a2eab60ebb6fcec33f5", "testharness" ], "webrtc/RTCDTMFSender-helper.js": [ @@ -670866,7 +671692,7 @@ "testharness" ], "webrtc/RTCPeerConnection-addIceCandidate.html": [ - "1dd1350acd25ea865631c45f7345cb3d06822f3b", + "2283c6835e1401f3416d79a6281f25c09f1b3022", "testharness" ], "webrtc/RTCPeerConnection-addTrack.https.html": [ @@ -670926,7 +671752,7 @@ "testharness" ], "webrtc/RTCPeerConnection-iceGatheringState.html": [ - "fb9e514194b98062acc3fdd33111a2d740bb9d52", + "e6d8d062701a795a289ad011fa4cfae143a342e9", "testharness" ], "webrtc/RTCPeerConnection-ondatachannel.html": [ @@ -670934,7 +671760,7 @@ "testharness" ], "webrtc/RTCPeerConnection-onnegotiationneeded.html": [ - "8f9ea2be7806efc18b7511d27634d4c1f5dacf0c", + "7e55ac3fadd046f8805174c3d9b1de92f704ca12", "testharness" ], "webrtc/RTCPeerConnection-ontrack.https.html": [ @@ -670966,7 +671792,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription-rollback.html": [ - "0147b3185cce20c7345fe640dd6e466209d0e3ca", + "630f84faa47f2d8589989674a2cb6d39797520ac", "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription.html": [ @@ -670978,7 +671804,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-offer.html": [ - "565fddc59be02c409835749aac090db1af7a38af", + "cae62b24b6c180c06be87dd48ffac364427624db", "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html": [ @@ -670990,7 +671816,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-rollback.html": [ - "ec90e561cbcf76559356dcd46c77547fb8262dcb", + "c317f3e1ae690a3e0101a5c596f0108ff23e822a", "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html": [ @@ -671018,7 +671844,7 @@ "support" ], "webrtc/RTCQuicStream.https.html": [ - "b147414794ecc208c918834110f5513e5075172d", + "eed7cffc37fe76cee939b78c612505c31c4f17b1", "testharness" ], "webrtc/RTCQuicTransport-helper.js": [ diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-delay-computed.html.ini deleted file mode 100644 index f0e5fb9fccf..00000000000 --- a/tests/wpt/metadata/css/css-animations/parsing/animation-delay-computed.html.ini +++ /dev/null @@ -1,10 +0,0 @@ -[animation-delay-computed.html] - [Property animation-delay value '20s, 10s' computes to '20s, 10s'] - expected: FAIL - - [Property animation-delay value 'calc(2 * 3s)' computes to '6s'] - expected: FAIL - - [Property animation-delay value '-500ms' computes to '-0.5s'] - expected: FAIL - diff --git a/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini b/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini deleted file mode 100644 index 210014a5890..00000000000 --- a/tests/wpt/metadata/css/css-animations/parsing/animation-duration-computed.html.ini +++ /dev/null @@ -1,10 +0,0 @@ -[animation-duration-computed.html] - [Property animation-duration value '20s, 10s' computes to '20s, 10s'] - expected: FAIL - - [Property animation-duration value 'calc(2 * 3s)' computes to '6s'] - expected: FAIL - - [Property animation-duration value '500ms' computes to '0.5s'] - expected: FAIL - diff --git a/tests/wpt/metadata/css/css-flexbox/align-content-wrap-001.html.ini b/tests/wpt/metadata/css/css-flexbox/align-content-wrap-001.html.ini new file mode 100644 index 00000000000..12e0f627837 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/align-content-wrap-001.html.ini @@ -0,0 +1,13 @@ +[align-content-wrap-001.html] + [.default, .verticalWriting 10] + expected: FAIL + + [.default, .verticalWriting 12] + expected: FAIL + + [.default, .verticalWriting 9] + expected: FAIL + + [.default, .verticalWriting 6] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/align-content-wrap-002.html.ini b/tests/wpt/metadata/css/css-flexbox/align-content-wrap-002.html.ini new file mode 100644 index 00000000000..512db4fcf03 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/align-content-wrap-002.html.ini @@ -0,0 +1,10 @@ +[align-content-wrap-002.html] + [.flex-horizontal, .flex-vertical 1] + expected: FAIL + + [.flex-horizontal, .flex-vertical 5] + expected: FAIL + + [.flex-horizontal, .flex-vertical 6] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/align-content-wrap-003.html.ini b/tests/wpt/metadata/css/css-flexbox/align-content-wrap-003.html.ini new file mode 100644 index 00000000000..8ae79171efe --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/align-content-wrap-003.html.ini @@ -0,0 +1,70 @@ +[align-content-wrap-003.html] + [.flexbox 6] + expected: FAIL + + [.flexbox 33] + expected: FAIL + + [.flexbox 12] + expected: FAIL + + [.flexbox 13] + expected: FAIL + + [.flexbox 11] + expected: FAIL + + [.flexbox 34] + expected: FAIL + + [.flexbox 35] + expected: FAIL + + [.flexbox 36] + expected: FAIL + + [.flexbox 32] + expected: FAIL + + [.flexbox 30] + expected: FAIL + + [.flexbox 31] + expected: FAIL + + [.flexbox 29] + expected: FAIL + + [.flexbox 28] + expected: FAIL + + [.flexbox 27] + expected: FAIL + + [.flexbox 26] + expected: FAIL + + [.flexbox 25] + expected: FAIL + + [.flexbox 24] + expected: FAIL + + [.flexbox 23] + expected: FAIL + + [.flexbox 21] + expected: FAIL + + [.flexbox 44] + expected: FAIL + + [.flexbox 41] + expected: FAIL + + [.flexbox 43] + expected: FAIL + + [.flexbox 42] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-text/writing-system/writing-system-line-break-002.html.ini b/tests/wpt/metadata/css/css-text/writing-system/writing-system-line-break-002.html.ini new file mode 100644 index 00000000000..447719ca0bd --- /dev/null +++ b/tests/wpt/metadata/css/css-text/writing-system/writing-system-line-break-002.html.ini @@ -0,0 +1,2 @@ +[writing-system-line-break-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/writing-system/writing-system-segment-break-001.html.ini b/tests/wpt/metadata/css/css-text/writing-system/writing-system-segment-break-001.html.ini new file mode 100644 index 00000000000..7a96cf71dd7 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/writing-system/writing-system-segment-break-001.html.ini @@ -0,0 +1,2 @@ +[writing-system-segment-break-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/parsing/transition-duration-computed.html.ini b/tests/wpt/metadata/css/css-transitions/parsing/transition-duration-computed.html.ini deleted file mode 100644 index da05b3d994a..00000000000 --- a/tests/wpt/metadata/css/css-transitions/parsing/transition-duration-computed.html.ini +++ /dev/null @@ -1,10 +0,0 @@ -[transition-duration-computed.html] - [Property transition-duration value '500ms' computes to '0.5s'] - expected: FAIL - - [Property transition-duration value 'calc(2 * 3s)' computes to '6s'] - expected: FAIL - - [Property transition-duration value '20s, 10s' computes to '20s, 10s'] - 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 08392616318..8850ec200da 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,9 +71,6 @@ [text-indent intermediate] expected: FAIL - [border-top-width end] - expected: FAIL - - [border-bottom-width end] + [opacity end] expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/backdrop-filter-clip-rect.html.ini b/tests/wpt/metadata/css/filter-effects/backdrop-filter-clip-rect.html.ini new file mode 100644 index 00000000000..3a98309a68b --- /dev/null +++ b/tests/wpt/metadata/css/filter-effects/backdrop-filter-clip-rect.html.ini @@ -0,0 +1,2 @@ +[backdrop-filter-clip-rect.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/filter-effects/parsing/backdrop-filter-computed.html.ini b/tests/wpt/metadata/css/filter-effects/parsing/backdrop-filter-computed.html.ini deleted file mode 100644 index b89270eb2c2..00000000000 --- a/tests/wpt/metadata/css/filter-effects/parsing/backdrop-filter-computed.html.ini +++ /dev/null @@ -1,85 +0,0 @@ -[backdrop-filter-computed.html] - [Property backdrop-filter value 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)' computes to 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)'] - expected: FAIL - - [Property backdrop-filter value 'contrast()' computes to 'contrast(1)'] - expected: FAIL - - [Property backdrop-filter value 'grayscale(50%)' computes to 'grayscale(0.5)'] - expected: FAIL - - [Property backdrop-filter value 'opacity(100%)' computes to 'opacity(1)'] - expected: FAIL - - [Property backdrop-filter value 'invert()' computes to 'invert(0)'] - expected: FAIL - - [Property backdrop-filter value 'saturate(0)' computes to 'saturate(0)'] - expected: FAIL - - [Property backdrop-filter value 'invert(0)' computes to 'invert(0)'] - expected: FAIL - - [Property backdrop-filter value 'hue-rotate()' computes to 'hue-rotate(0deg)'] - expected: FAIL - - [Property backdrop-filter value 'drop-shadow(1px 2px)' computes to 'drop-shadow(rgb(0, 255, 0) 1px 2px 0px)'] - expected: FAIL - - [Property backdrop-filter value 'brightness(0)' computes to 'brightness(0)'] - expected: FAIL - - [Property backdrop-filter value 'opacity()' computes to 'opacity(1)'] - expected: FAIL - - [Property backdrop-filter value 'brightness(300%)' computes to 'brightness(3)'] - expected: FAIL - - [Property backdrop-filter value 'blur()' computes to 'blur(0px)'] - expected: FAIL - - [Property backdrop-filter value 'sepia()' computes to 'sepia(1)'] - expected: FAIL - - [Property backdrop-filter value 'grayscale()' computes to 'grayscale(1)'] - expected: FAIL - - [Property backdrop-filter value 'sepia(100%)' computes to 'sepia(1)'] - expected: FAIL - - [Property backdrop-filter value 'sepia(0)' computes to 'sepia(0)'] - expected: FAIL - - [Property backdrop-filter value 'brightness()' computes to 'brightness(0)'] - expected: FAIL - - [Property backdrop-filter value 'invert(100%)' computes to 'invert(1)'] - expected: FAIL - - [Property backdrop-filter value 'saturate(300%)' computes to 'saturate(3)'] - expected: FAIL - - [Property backdrop-filter value 'hue-rotate(90deg)' computes to 'hue-rotate(90deg)'] - expected: FAIL - - [Property backdrop-filter value 'contrast(0)' computes to 'contrast(0)'] - expected: FAIL - - [Property backdrop-filter value 'none' computes to 'none'] - expected: FAIL - - [Property backdrop-filter value 'contrast(300%)' computes to 'contrast(3)'] - expected: FAIL - - [Property backdrop-filter value 'drop-shadow(rgb(4, 5, 6) 1px 2px 0px)' computes to 'drop-shadow(rgb(4, 5, 6) 1px 2px 0px)'] - expected: FAIL - - [Property backdrop-filter value 'opacity(0)' computes to 'opacity(0)'] - expected: FAIL - - [Property backdrop-filter value 'saturate()' computes to 'saturate(1)'] - expected: FAIL - - [Property backdrop-filter value 'blur(100px)' computes to 'blur(100px)'] - expected: FAIL - diff --git a/tests/wpt/metadata/css/filter-effects/parsing/filter-computed.html.ini b/tests/wpt/metadata/css/filter-effects/parsing/filter-computed.html.ini index 06721ce5928..cf8a1a8765b 100644 --- a/tests/wpt/metadata/css/filter-effects/parsing/filter-computed.html.ini +++ b/tests/wpt/metadata/css/filter-effects/parsing/filter-computed.html.ini @@ -1,79 +1,31 @@ [filter-computed.html] - [Property filter value 'invert(0)' computes to 'invert(0)'] - expected: FAIL - - [Property filter value 'brightness(0)' computes to 'brightness(0)'] - expected: FAIL - - [Property filter value 'invert(100%)' computes to 'invert(1)'] - expected: FAIL - - [Property filter value 'sepia(0)' computes to 'sepia(0)'] - expected: FAIL - - [Property filter value 'saturate(0)' computes to 'saturate(0)'] - expected: FAIL - - [Property filter value 'contrast(0)' computes to 'contrast(0)'] - expected: FAIL - - [Property filter value 'hue-rotate(90deg)' computes to 'hue-rotate(90deg)'] - expected: FAIL - [Property filter value 'brightness()' computes to 'brightness(0)'] expected: FAIL - [Property filter value 'blur(100px)' computes to 'blur(100px)'] - expected: FAIL - [Property filter value 'sepia()' computes to 'sepia(1)'] expected: FAIL - [Property filter value 'grayscale(50%)' computes to 'grayscale(0.5)'] - expected: FAIL - [Property filter value 'saturate()' computes to 'saturate(1)'] expected: FAIL [Property filter value 'grayscale()' computes to 'grayscale(1)'] expected: FAIL - [Property filter value 'contrast(300%)' computes to 'contrast(3)'] - expected: FAIL - - [Property filter value 'none' computes to 'none'] - expected: FAIL - - [Property filter value 'brightness(300%)' computes to 'brightness(3)'] - expected: FAIL - [Property filter value 'invert()' computes to 'invert(0)'] expected: FAIL [Property filter value 'hue-rotate()' computes to 'hue-rotate(0deg)'] expected: FAIL - [Property filter value 'opacity(0)' computes to 'opacity(0)'] - expected: FAIL - - [Property filter value 'opacity(100%)' computes to 'opacity(1)'] - expected: FAIL - [Property filter value 'drop-shadow(1px 2px)' computes to 'drop-shadow(rgb(0, 255, 0) 1px 2px 0px)'] expected: FAIL - [Property filter value 'sepia(100%)' computes to 'sepia(1)'] - expected: FAIL - [Property filter value 'blur()' computes to 'blur(0px)'] expected: FAIL [Property filter value 'drop-shadow(rgb(4, 5, 6) 1px 2px 0px)' computes to 'drop-shadow(rgb(4, 5, 6) 1px 2px 0px)'] expected: FAIL - [Property filter value 'saturate(300%)' computes to 'saturate(3)'] - expected: FAIL - [Property filter value 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)' computes to 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)'] expected: FAIL diff --git a/tests/wpt/metadata/css/geometry/interfaces.html.ini b/tests/wpt/metadata/css/geometry/interfaces.html.ini index fc7bf385e0f..01d6a39eb03 100644 --- a/tests/wpt/metadata/css/geometry/interfaces.html.ini +++ b/tests/wpt/metadata/css/geometry/interfaces.html.ini @@ -375,3 +375,12 @@ [Geometry APIs interface IDL tests] expected: FAIL + [DOMMatrixReadOnly interface: calling scaleNonUniform(unrestricted double, unrestricted double) on new DOMMatrixReadOnly() with too few arguments must throw TypeError] + expected: FAIL + + [DOMMatrixReadOnly interface: new DOMMatrixReadOnly() must inherit property "scaleNonUniform(unrestricted double, unrestricted double)" with the proper type] + expected: FAIL + + [DOMMatrixReadOnly interface: operation scaleNonUniform(unrestricted double, unrestricted double)] + expected: FAIL + diff --git a/tests/wpt/metadata/css/geometry/interfaces.worker.js.ini b/tests/wpt/metadata/css/geometry/interfaces.worker.js.ini index 994ddcf717a..3d74ff822d0 100644 --- a/tests/wpt/metadata/css/geometry/interfaces.worker.js.ini +++ b/tests/wpt/metadata/css/geometry/interfaces.worker.js.ini @@ -98,3 +98,12 @@ [interfaces] expected: FAIL + [DOMMatrixReadOnly interface: calling scaleNonUniform(unrestricted double, unrestricted double) on new DOMMatrixReadOnly() with too few arguments must throw TypeError] + expected: FAIL + + [DOMMatrixReadOnly interface: new DOMMatrixReadOnly() must inherit property "scaleNonUniform(unrestricted double, unrestricted double)" with the proper type] + expected: FAIL + + [DOMMatrixReadOnly interface: operation scaleNonUniform(unrestricted double, unrestricted double)] + expected: FAIL + diff --git a/tests/wpt/metadata/css/selectors/invalidation/is.html.ini b/tests/wpt/metadata/css/selectors/invalidation/is.html.ini new file mode 100644 index 00000000000..6afc2497a09 --- /dev/null +++ b/tests/wpt/metadata/css/selectors/invalidation/is.html.ini @@ -0,0 +1,19 @@ +[is.html] + [Invalidate :is() for compound selector arguments.] + expected: FAIL + + [Preconditions.] + expected: FAIL + + [Test specificity of :is().] + expected: FAIL + + [Invalidate :is() for complex selector arguments.] + expected: FAIL + + [Invalidate :is() for simple selector arguments.] + expected: FAIL + + [Invalidate nested :is().] + expected: FAIL + diff --git a/tests/wpt/metadata/css/selectors/is-nested.html.ini b/tests/wpt/metadata/css/selectors/is-nested.html.ini new file mode 100644 index 00000000000..d18898442a3 --- /dev/null +++ b/tests/wpt/metadata/css/selectors/is-nested.html.ini @@ -0,0 +1,7 @@ +[is-nested.html] + [Test nested :is() chooses highest specificity for class outside :is().] + expected: FAIL + + [Test nested :is() specificity for class within arguments.] + expected: FAIL + diff --git a/tests/wpt/metadata/css/selectors/is-specificity.html.ini b/tests/wpt/metadata/css/selectors/is-specificity.html.ini new file mode 100644 index 00000000000..96a4e2ad64d --- /dev/null +++ b/tests/wpt/metadata/css/selectors/is-specificity.html.ini @@ -0,0 +1,4 @@ +[is-specificity.html] + [Test :is() uses highest possible specificity] + expected: FAIL + diff --git a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini index 59aab785e91..0f798a6df5b 100644 --- a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini +++ b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini @@ -509,7 +509,7 @@ [single-byte-decoder.html?XMLHttpRequest] - expected: CRASH + expected: TIMEOUT [ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)] expected: FAIL @@ -532,7 +532,7 @@ expected: FAIL [windows-1252: iso_8859-1:1987 (XMLHttpRequest)] - expected: FAIL + expected: TIMEOUT [windows-1254: iso_8859-9:1989 (XMLHttpRequest)] expected: TIMEOUT @@ -606,5 +606,35 @@ [windows-1256: windows-1256 (XMLHttpRequest)] expected: TIMEOUT + [windows-1253: x-cp1253 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: latin1 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1254: cp1254 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1253: windows-1253 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1253: cp1253 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1254: l5 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: x-cp1252 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: l1 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: windows-1252 (XMLHttpRequest)] + expected: TIMEOUT + + [windows-1252: us-ascii (XMLHttpRequest)] + expected: TIMEOUT + [single-byte-decoder.html?TextDecoder] diff --git a/tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini b/tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini index c303da569b9..6c1059dbd29 100644 --- a/tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini +++ b/tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini @@ -20,3 +20,15 @@ ["no-cors" Headers object cannot have accept/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 as header] expected: FAIL + ["no-cors" Headers object cannot have content-type set to text/plain;ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, text/plain] + expected: FAIL + + ["no-cors" Headers object cannot have accept set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss] + expected: FAIL + + ["no-cors" Headers object cannot have accept-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss] + expected: FAIL + + ["no-cors" Headers object cannot have content-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini deleted file mode 100644 index dc2e45516de..00000000000 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[traverse_the_history_5.html] - [Multiple history traversals, last would be aborted] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini deleted file mode 100644 index 8cc42056d34..00000000000 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini +++ /dev/null @@ -1,10 +0,0 @@ -[non-active-document.html] - [DOMParser] - expected: FAIL - - [createHTMLDocument] - expected: FAIL - - [<template>] - 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 25f0d603b3d..2314441517b 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,3 +9,6 @@ [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 99a24216c88..7725b118e9d 100644 --- a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini +++ b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini @@ -12,3 +12,6 @@ [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/no-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini index 818a429ed39..c7e9c7434f5 100644 --- a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini +++ b/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini @@ -1,4 +1,4 @@ -[no-quirks.html] +[limited-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 deleted file mode 100644 index 2ed601c6ff4..00000000000 --- a/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini +++ /dev/null @@ -1,283 +0,0 @@ -[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/wasm/webapi/abort.any.js.ini b/tests/wpt/metadata/wasm/webapi/abort.any.js.ini index 0c0f8773158..87102ca31d1 100644 --- a/tests/wpt/metadata/wasm/webapi/abort.any.js.ini +++ b/tests/wpt/metadata/wasm/webapi/abort.any.js.ini @@ -11,6 +11,12 @@ [compileStreaming() synchronously followed by abort should reject with AbortError] expected: FAIL + [compileStreaming() asynchronously racing with abort should succeed or reject with AbortError] + expected: FAIL + + [instantiateStreaming() asynchronously racing with abort should succeed or reject with AbortError] + expected: FAIL + [abort.any.html] [instantiateStreaming() on an already-aborted request should reject with AbortError] @@ -25,3 +31,9 @@ [compileStreaming() synchronously followed by abort should reject with AbortError] expected: FAIL + [compileStreaming() asynchronously racing with abort should succeed or reject with AbortError] + expected: FAIL + + [instantiateStreaming() asynchronously racing with abort should succeed or reject with AbortError] + expected: FAIL + diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini index a56bad443a2..66bd350083b 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini @@ -1,5 +1,4 @@ [realtimeanalyser-fft-scaling.html] - expected: TIMEOUT [X 2048-point FFT peak position is not equal to 64. Got 0.] expected: FAIL diff --git a/tests/wpt/web-platform-tests/.taskcluster.yml b/tests/wpt/web-platform-tests/.taskcluster.yml index bcac7f5abbc..35aad403ce7 100644 --- a/tests/wpt/web-platform-tests/.taskcluster.yml +++ b/tests/wpt/web-platform-tests/.taskcluster.yml @@ -149,12 +149,9 @@ tasks: ${browser.name} ${browser.channel}; cd ~/web-platform-tests; - result=0; ./tools/ci/taskcluster-run.py --commit-range HEAD^ ${browser.name} -- --channel=${browser.channel} - ${operation.extra_args} || result=$?; - echo $result > ../artifacts/run-return-code.txt; - echo "Command exited with code $result (failures are allowed while this task is being vetted)." + ${operation.extra_args}; diff --git a/tests/wpt/web-platform-tests/.travis.yml b/tests/wpt/web-platform-tests/.travis.yml index d89fadae77d..8d4152f0285 100644 --- a/tests/wpt/web-platform-tests/.travis.yml +++ b/tests/wpt/web-platform-tests/.travis.yml @@ -51,8 +51,7 @@ matrix: apt: packages: - libnss3-tools - env: - - JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=firefox:nightly + env: JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=firefox:nightly - name: "stability (Chrome Dev)" if: type = pull_request os: linux @@ -62,8 +61,7 @@ matrix: packages: - libappindicator1 - fonts-liberation - env: - - JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=chrome:dev + env: JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=chrome:dev - name: "tools/ unittests (Python 2)" if: type = pull_request os: linux @@ -103,6 +101,8 @@ matrix: - env: # exclude empty env from the top-level above allow_failures: - env: JOB=build_css SCRIPT=css/build-css-testsuites.sh + - env: JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=firefox:nightly + - env: JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=chrome:dev script: - ./tools/ci/run.sh cache: diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index2.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index2.htm index 539c824e61e..8df0af0d233 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index2.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index2.htm @@ -10,7 +10,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" }, { pKey: "primaryKey_1", iKey: "indexKey_1" } ]; diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index3.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index3.htm index 5adf3f077fd..ca5e0da8eae 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index3.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index3.htm @@ -10,7 +10,7 @@ <script type="text/javascript"> var db, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" }, { pKey: "primaryKey_1", iKey: "indexKey_1" } ]; diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index5.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index5.htm index 452c0f142f6..a9b9977d0e6 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index5.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_advance_index5.htm @@ -11,7 +11,7 @@ <script> var db, count = 0, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" }, { pKey: "primaryKey_1", iKey: "indexKey_1" }, { pKey: "primaryKey_1-2", iKey: "indexKey_1" } ], diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_index5.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_index5.htm index abe0e658b01..20db8d0d833 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_index5.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_index5.htm @@ -11,7 +11,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" }, { pKey: "primaryKey_1", iKey: "indexKey_1" }, { pKey: "primaryKey_1-2", iKey: "indexKey_1" }, diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_index6.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_index6.htm index cf5bd4066e8..9182b02f149 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_index6.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_index6.htm @@ -11,7 +11,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" }, { pKey: "primaryKey_1", iKey: "indexKey_1" }, { pKey: "primaryKey_1-2", iKey: "indexKey_1" }, diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_invalid.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_invalid.htm index dea07bc9112..9b4d7b70bb6 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_invalid.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_continue_invalid.htm @@ -8,7 +8,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}); + t = async_test(document.title); var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating.htm index d9be6b6ad6a..f67265aa855 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating.htm @@ -8,7 +8,7 @@ <script> var db, count = 0, - t = async_test(document.title, {timeout: 10000}); + t = async_test(document.title); var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_index.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_index.htm index 559cce6db54..4b0fbba0937 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_index.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_index.htm @@ -8,7 +8,7 @@ <script> var db, count = 0, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0", obj: { iKey: "iKey_0" }}, { pKey: "primaryKey_1", obj: { iKey: "iKey_1" }}, { pKey: "primaryKey_2", obj: { iKey: "iKey_2" }} ], diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_index2.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_index2.htm index 91a8383500c..689b8915278 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_index2.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_index2.htm @@ -8,7 +8,7 @@ <script> var db, count = 0, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0", obj: { iKey: "iKey_0" }}, { pKey: "primaryKey_2", obj: { iKey: "iKey_2" }} ], diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_objectstore.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_objectstore.htm index c4c8d57148d..8a9dcfa107f 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_objectstore.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_objectstore.htm @@ -8,7 +8,7 @@ <script> var db, count = 0, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }, { pKey: "primaryKey_2" } ], diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_objectstore2.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_objectstore2.htm index 899b2ac0e6d..992d0ea4256 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_objectstore2.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_iterating_objectstore2.htm @@ -8,7 +8,7 @@ <script> var db, count = 0, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), records = [ { pKey: "primaryKey_0" }, { pKey: "primaryKey_2" } ], expected_records = [ { pKey: "primaryKey_0" }, diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_update_objectstore4.htm b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_update_objectstore4.htm index cbd0b1f92a6..cb35b103509 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbcursor_update_objectstore4.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbcursor_update_objectstore4.htm @@ -8,7 +8,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}) + t = async_test(document.title) var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm b/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm index d6e4a48ed1c..747a655ecb7 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_createObjectStore10-1000ends.htm @@ -7,7 +7,7 @@ <script> var db, - t = async_test(document.title, {timeout: 600000}), + t = async_test(document.title), open_rq = createdb(t) open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_createObjectStore7.htm b/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_createObjectStore7.htm index 358baeeecab..9833c533696 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_createObjectStore7.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_createObjectStore7.htm @@ -7,7 +7,7 @@ <script> -var t = async_test(document.title, {timeout: 10000}), +var t = async_test(document.title), open_rq = createdb(t) open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm b/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm index 1cb6ff1ace4..5332205db7c 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_deleteObjectStore4-not_reused.htm @@ -8,7 +8,7 @@ <script> -var t = async_test(document.title, {timeout: 10000}), +var t = async_test(document.title), keys = [], open_rq = createdb(t) diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_transaction4.htm b/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_transaction4.htm index 515c499b0c8..2ba36feee70 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_transaction4.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbdatabase_transaction4.htm @@ -7,7 +7,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbfactory_deleteDatabase3.htm b/tests/wpt/web-platform-tests/IndexedDB/idbfactory_deleteDatabase3.htm index e1cab41a5c1..7299bfb5673 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbfactory_deleteDatabase3.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbfactory_deleteDatabase3.htm @@ -9,7 +9,7 @@ <script> var db - var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9) + var open_rq = createdb(async_test(document.title), undefined, 9) open_rq.onupgradeneeded = function(e) { db = e.target.result diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open10.htm b/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open10.htm index c0ac71ae857..0a9a12d8dfd 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open10.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open10.htm @@ -7,7 +7,7 @@ <script> var db, db2; - var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9); + var open_rq = createdb(async_test(document.title), undefined, 9); open_rq.onupgradeneeded = function(e) { db = e.target.result; diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open11.htm b/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open11.htm index 88c59bd9f65..6a77b13b088 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open11.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open11.htm @@ -8,7 +8,7 @@ <script> var db; var count_done = 0; - var open_rq = createdb(async_test(document.title, {timeout: 10000})); + var open_rq = createdb(async_test(document.title)); open_rq.onupgradeneeded = function(e) { db = e.target.result; diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open12.htm b/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open12.htm index 763c4805155..f6a13104341 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open12.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbfactory_open12.htm @@ -7,7 +7,7 @@ <script> var db; - var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9); + var open_rq = createdb(async_test(document.title), undefined, 9); var open2_t = async_test(document.title + " - second upgrade"); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry-arraykeypath.htm b/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry-arraykeypath.htm index 3e584a6c4e2..31ae61cfc42 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry-arraykeypath.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry-arraykeypath.htm @@ -9,7 +9,7 @@ <script src="support.js"></script> <script> - createdb(async_test(document.title, {timeout: 10000})).onupgradeneeded = function(e) { + createdb(async_test(document.title)).onupgradeneeded = function(e) { var store = e.target.result.createObjectStore("store"); assert_throws('InvalidAccessError', function() { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry-big.htm b/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry-big.htm index 4f9df36e204..f0743866910 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry-big.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry-big.htm @@ -10,8 +10,8 @@ <script> var db, - t_add = async_test("Adding one item with 1000 multiEntry keys", { timeout: 10000 }), - t_get = async_test("Getting the one item by 1000 indeced keys ", { timeout: 10000 }); + t_add = async_test("Adding one item with 1000 multiEntry keys"), + t_get = async_test("Getting the one item by 1000 indeced keys "); var open_rq = createdb(t_add); var obj = { test: 'yo', idxkeys: [] }; diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry.htm b/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry.htm index 5077f48469b..6b5b06cf807 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex-multientry.htm @@ -12,7 +12,7 @@ var db, expected_keys = [1, 2, 2, 3, 3]; - var open_rq = createdb(async_test(document.title, {timeout: 10000})) + var open_rq = createdb(async_test(document.title)) open_rq.onupgradeneeded = function(e) { db = e.target.result; diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex_indexNames.htm b/tests/wpt/web-platform-tests/IndexedDB/idbindex_indexNames.htm index 3099b45e91f..023903f19f7 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbindex_indexNames.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex_indexNames.htm @@ -8,7 +8,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}); + t = async_test(document.title); var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm index f4b9b984f05..5156e61e65f 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex3-usable-right-away.htm @@ -9,7 +9,7 @@ <script> var db, aborted, - t = async_test(document.title, {timeout:19000}) + t = async_test(document.title) var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm index 228dfc457c2..937ae58c3b3 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex4-deleteIndex-event_order.htm @@ -9,7 +9,7 @@ <script> var db, events = [], - t = async_test(document.title, {timeout: 10000}) + t = async_test(document.title) var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm index 29fadc00e3f..14ddb924ffe 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex5-emptykeypath.htm @@ -8,7 +8,7 @@ <script> var db, aborted, - t = async_test(document.title, {timeout: 10000}) + t = async_test(document.title) var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex6-event_order.htm b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex6-event_order.htm index 3dcb7330a8a..a636226968e 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex6-event_order.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex6-event_order.htm @@ -16,7 +16,7 @@ var db, events = [], - t = async_test(document.title, {timeout: 10000}) + t = async_test(document.title) var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex7-event_order.htm b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex7-event_order.htm index 682307c9018..8d2725a9f0e 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex7-event_order.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex7-event_order.htm @@ -18,7 +18,7 @@ var db, events = [], - t = async_test(document.title, {timeout: 10000}) + t = async_test(document.title) var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm index 6174523e478..ea90f50dde1 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_createIndex8-valid_keys.htm @@ -9,7 +9,7 @@ <script> var db, - t = async_test(document.title, {timeout:19000}), + t = async_test(document.title), now = new Date(), mar18 = new Date(1111111111111), ar = ["Yay", 2, -Infinity], diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_deleted.htm b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_deleted.htm index 74934636a1b..c26145c1d5c 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_deleted.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbobjectstore_deleted.htm @@ -11,7 +11,7 @@ <script> var db, add_success = false, - t = async_test(document.title, {timeout: 10000}) + t = async_test(document.title) var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-oncomplete.htm b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-oncomplete.htm index 7c295c7c150..e2cad729397 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-oncomplete.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction-oncomplete.htm @@ -7,7 +7,7 @@ <script> var db, store, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), open_rq = createdb(t), stages = []; diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction_abort.htm b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction_abort.htm index 1f37bb40101..4300e2f01c8 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbtransaction_abort.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbtransaction_abort.htm @@ -8,7 +8,7 @@ <script> var db, aborted, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), record = { indexedProperty: "bar" }; var open_rq = createdb(t); diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbversionchangeevent.htm b/tests/wpt/web-platform-tests/IndexedDB/idbversionchangeevent.htm index 36b997f2f63..e776f14c629 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbversionchangeevent.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbversionchangeevent.htm @@ -13,7 +13,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}); + t = async_test(document.title); t.step(function() { var openrq = indexedDB.open('db', 3); diff --git a/tests/wpt/web-platform-tests/IndexedDB/keygenerator-constrainterror.htm b/tests/wpt/web-platform-tests/IndexedDB/keygenerator-constrainterror.htm index ee2e24799e3..205785f3bd7 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/keygenerator-constrainterror.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/keygenerator-constrainterror.htm @@ -9,7 +9,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), objects = [1, null, {id: 2}, null, 2.00001, 5, null, {id: 6} ], expected = [1, 2, 2.00001, 3, 5, 6], errors = 0; diff --git a/tests/wpt/web-platform-tests/IndexedDB/keygenerator-overflow.htm b/tests/wpt/web-platform-tests/IndexedDB/keygenerator-overflow.htm index d069f0a2b5f..a7bc09fc8d5 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/keygenerator-overflow.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/keygenerator-overflow.htm @@ -11,7 +11,7 @@ <script> var db, - t = async_test(document.title, {timeout: 10000}), + t = async_test(document.title), overflow_error_fired = false, objects = [9007199254740991, null, "error", 2, "error" ], expected_keys = [2, 9007199254740991, 9007199254740992]; diff --git a/tests/wpt/web-platform-tests/IndexedDB/keyorder.htm b/tests/wpt/web-platform-tests/IndexedDB/keyorder.htm index 1896333f936..7f073ddb9a2 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/keyorder.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/keyorder.htm @@ -22,7 +22,7 @@ function keysort(desc, unsorted, expected) { var db, - t = async_test("Database readback sort - " + desc, { timeout: 10000 }), + t = async_test("Database readback sort - " + desc), store_name = 'store-' + Date.now() + Math.random(); // The database test diff --git a/tests/wpt/web-platform-tests/IndexedDB/keypath_maxsize.htm b/tests/wpt/web-platform-tests/IndexedDB/keypath_maxsize.htm index 835b7a33b44..83bd9cc3138 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/keypath_maxsize.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/keypath_maxsize.htm @@ -11,7 +11,7 @@ <script> function keypath(keypath, objects, expected_keys, desc) { var db, - t = async_test(document.title + " - " + (desc ? desc : keypath), { timeout: 10000 }), + t = async_test(document.title + " - " + (desc ? desc : keypath)), open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { diff --git a/tests/wpt/web-platform-tests/IndexedDB/request_bubble-and-capture.htm b/tests/wpt/web-platform-tests/IndexedDB/request_bubble-and-capture.htm index 319f228c835..f43fd10a34f 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/request_bubble-and-capture.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/request_bubble-and-capture.htm @@ -9,7 +9,7 @@ <script> var events = []; - var open_rq = createdb(async_test(document.title, {timeout: 10000})); + var open_rq = createdb(async_test(document.title)); open_rq.onupgradeneeded = function(e) { var db = e.target.result; var txn = e.target.transaction; diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-lifetime-blocked.htm b/tests/wpt/web-platform-tests/IndexedDB/transaction-lifetime-blocked.htm index b0c91ec8457..a6ef34b19cb 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/transaction-lifetime-blocked.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-lifetime-blocked.htm @@ -11,7 +11,7 @@ var db, db_got_versionchange, db2, events = [], - t = async_test(document.title, {timeout: 10000}); + t = async_test(document.title); t.step(function() { var openrq = indexedDB.open('db', 3); diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-lifetime.htm b/tests/wpt/web-platform-tests/IndexedDB/transaction-lifetime.htm index c646286f43a..9c66c54c40f 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/transaction-lifetime.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-lifetime.htm @@ -11,7 +11,7 @@ var db, db_got_versionchange, db2, events = [], - t = async_test(document.title, {timeout: 10000}); + t = async_test(document.title); t.step(function() { var openrq = indexedDB.open('db', 3); diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-requestqueue.htm b/tests/wpt/web-platform-tests/IndexedDB/transaction-requestqueue.htm index b5706fe81d7..081ea2e19a1 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/transaction-requestqueue.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-requestqueue.htm @@ -8,7 +8,7 @@ <script> -var db, t = async_test(document.title, {timeout: 10000}), +var db, t = async_test(document.title), keys = { txn: [], txn2: [] }, open_rq = createdb(t) diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction_bubble-and-capture.htm b/tests/wpt/web-platform-tests/IndexedDB/transaction_bubble-and-capture.htm index f4b5ec0ae58..ff48fb48234 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/transaction_bubble-and-capture.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction_bubble-and-capture.htm @@ -9,7 +9,7 @@ <script> var events = []; - var open_rq = createdb(async_test(document.title, {timeout: 10000})); + var open_rq = createdb(async_test(document.title)); open_rq.onupgradeneeded = function(e) { var db = e.target.result; var txn = e.target.transaction; diff --git a/tests/wpt/web-platform-tests/IndexedDB/writer-starvation.htm b/tests/wpt/web-platform-tests/IndexedDB/writer-starvation.htm index 412308387fc..cdc7b1e8774 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/writer-starvation.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/writer-starvation.htm @@ -12,7 +12,7 @@ var write_request_count = 0, write_success_count = 0; var RQ_COUNT = 25; - var open_rq = createdb(async_test(undefined, {timeout: 20000})); + var open_rq = createdb(async_test(undefined)); open_rq.onupgradeneeded = function(e) { db = e.target.result; db.createObjectStore("s") diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/box-shadow-body.html b/tests/wpt/web-platform-tests/css/css-backgrounds/box-shadow-body.html new file mode 100644 index 00000000000..88d888a7710 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/box-shadow-body.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> + <title>CSS box-shadow Test: <body> shadow should look the same regardless of background color</title> + <link rel="author" title="fmalita" href="mailto:fmalita@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-backgrounds-3/#the-box-shadow"> + <link rel="match" href="reference/box-shadow-body-ref.html"> + <style type="text/css"> + body { + position: relative; + box-shadow: 0 0 0 4px red; + height: 300px; + width: 600px; + margin: 20px auto; + background-color: white; + } + </style> +</head> +<body></body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/reference/box-shadow-body-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/box-shadow-body-ref.html new file mode 100644 index 00000000000..d2ae1ebd84b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-backgrounds/reference/box-shadow-body-ref.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> + <title>CSS box-shadow Test Reference</title> + <link rel="author" title="fmalita" href="mailto:fmalita@chromium.org"> + <style type="text/css"> + html { + background-color: white; + } + body { + position: relative; + box-shadow: 0 0 0 4px red; + height: 300px; + width: 600px; + margin: 20px auto; + } + </style> +</head> +<body></body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-break/line-after-unbreakable-float-after-padding-ref.html b/tests/wpt/web-platform-tests/css/css-break/line-after-unbreakable-float-after-padding-ref.html new file mode 100644 index 00000000000..9a329b24468 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/line-after-unbreakable-float-after-padding-ref.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> +<p>The word "PASS" should be seen below.</p> +<div style="margin-left:2ch; font-family:monospace; line-height:50px;"> + <div style="float:left;">PA</div> + <div style="float:left;">SS</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-break/line-after-unbreakable-float-after-padding.html b/tests/wpt/web-platform-tests/css/css-break/line-after-unbreakable-float-after-padding.html new file mode 100644 index 00000000000..d3a4018cd80 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-break/line-after-unbreakable-float-after-padding.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-break-3/#unforced-breaks"> +<link rel="match" href="line-after-unbreakable-float-after-padding-ref.html"> +<p>The word "PASS" should be seen below.</p> +<div style="columns:3; column-gap:0; column-fill:auto; font-family:monospace; line-height:50px; width:6ch; height:101px; orphans:1; widows:1;"> + <div style="padding-top:100px;"> + <div style="float:left; break-inside:avoid; width:100%; height:75px;">PA</div> + SS + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-001.html new file mode 100644 index 00000000000..1e0ce42c75f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-001.html @@ -0,0 +1,77 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-align-content" /> +<title>css-flexbox: Tests align-content with single-line flex-wrap: wrap</title> +<style> +.default { + display: flex; + flex-wrap: wrap; + position: relative; + height: 70px; + border: 1px solid red; + margin: 5px; +} + +.default > div { + height: 20px; +} + +.verticalWriting { + display: flex; + flex-wrap: wrap; + position: relative; + width: 70px; + border: 1px solid red; + margin: 5px; + writing-mode: vertical-lr; +} + +.verticalWriting > div { + width: 20px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +</head> +<body onload="checkLayout('.default, .verticalWriting'); "> +<div id=log></div> +<p>Test that we honor align-content even in single-line flex containers</p> +<div class="default" style="align-content: flex-start"> +<div data-offset-y="0">This text should be at the top of its container</div> +</div> +<div class="default" style="align-content: flex-end"> +<div data-offset-y="50">This text should be at the bottom of its container</div> +</div> +<div class="default" style="align-content: center"> +<div data-offset-y="25">This text should be centered in its container</div> +</div> +<div class="default" style="align-content: space-between"> +<div data-offset-y="0">This text should be at the top of its container</div> +</div> +<div class="default" style="align-content: space-around"> +<div data-offset-y="25">This text should be centered in its container</div> +</div> +<div class="default" style="align-content: space-evenly"> +<div data-offset-y="25">This text should be centered in its container</div> +</div> +<div class="default" style="align-content: stretch"> +<div data-offset-y="0">This text should be at the top of its container</div> +</div> +<div class="verticalWriting" style="align-content: flex-start"> +<div data-offset-x="0">This text should be at the left of its container</div> +</div> +<div class="verticalWriting" style="align-content: flex-end"> +<div data-offset-x="50">This text should be at the right of its container</div> +</div> +<div class="verticalWriting" style="align-content: center"> +<div data-offset-x="25">This text should be centered in its container</div> +</div> +<div class="verticalWriting" style="align-content: space-between"> +<div data-offset-x="0">This text should be at the left of its container</div> +</div> +<div class="verticalWriting" style="align-content: space-around"> +<div data-offset-x="25">This text should be centered in its container</div> +</div> +<div class="verticalWriting" style="align-content: stretch"> +<div data-offset-x="0">This text should be at the left of its container</div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-002.html b/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-002.html new file mode 100644 index 00000000000..a15f7ea844d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-002.html @@ -0,0 +1,108 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-align-content" /> +<title>css-flexbox: Tests align-content with flex-wrap: wrap</title> +<style> +.flex-horizontal { + width:600px; + display:flex; + height:100px; + background:gray; + margin-bottom:100px; +} +.flex-vertical { + width:100px; + display:flex; + flex-direction: column; + height:600px; + background:gray; + margin-top:200px; + margin-bottom:100px; +} +.item-horizontal { + width:150px; + background:yellow; + margin:10px; + flex:none; +} +.item-vertical { + height:150px; + background:yellow; + margin:10px; + flex:none; +} +.content1-horizontal { + width:100px; + height:150px; + background:red; +} +.content2-horizontal { + width:100px; + height:100px; + background:red; +} +.content3-horizontal { + width:100px; + height:50px; + background:red; +} +.content1-vertical { + width:150px; + height:100px; + background:red; +} +.content2-vertical { + width:100px; + height:100px; + background:red; +} +.content3-vertical { + width:50px; + height:100px; + background:red; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.flex-horizontal, .flex-vertical');"> +<div id=log></div> +<p>Test for crbug.com/362848: Flex box word-wrap is not adhering to spec</p> +<div class="flex-horizontal"> + <div class="item-horizontal" data-expected-height="80"><div class="content1-horizontal"></div></div> + <div class="item-horizontal" data-expected-height="80"><div class="content2-horizontal"></div></div> + <div class="item-horizontal" data-expected-height="80"><div class="content3-horizontal"></div></div> +</div> + +<div class="flex-horizontal" style="flex-wrap:wrap;"> + <div class="item-horizontal" data-expected-height="150"><div class="content1-horizontal"></div></div> + <div class="item-horizontal" data-expected-height="150"><div class="content2-horizontal"></div></div> + <div class="item-horizontal" data-expected-height="150"><div class="content3-horizontal"></div></div> +</div> + +<div class="flex-horizontal" style="flex-wrap:wrap;"> + <div class="item-horizontal" data-expected-height="150"><div class="content1-horizontal"></div></div> + <div class="item-horizontal" data-expected-height="150"><div class="content2-horizontal"></div></div> + <div class="item-horizontal" data-expected-height="150"><div class="content3-horizontal"></div></div> + <div class="item-horizontal" data-expected-height="150"><div class="content1-horizontal"></div></div> + <div class="item-horizontal" data-expected-height="150"><div class="content2-horizontal"></div></div> +</div> + +<div class="flex-vertical"> + <div class="item-vertical" data-expected-width="80"><div class="content1-vertical"></div></div> + <div class="item-vertical" data-expected-width="80"><div class="content2-vertical"></div></div> + <div class="item-vertical" data-expected-width="80"><div class="content3-vertical"></div></div> +</div> + +<div class="flex-vertical" style="flex-wrap:wrap;"> + <div class="item-vertical" data-expected-width="150"><div class="content1-vertical"></div></div> + <div class="item-vertical" data-expected-width="150"><div class="content2-vertical"></div></div> + <div class="item-vertical" data-expected-width="150"><div class="content3-vertical"></div></div> +</div> + +<div class="flex-vertical" style="flex-wrap:wrap;"> + <div class="item-vertical" data-expected-width="150"><div class="content1-vertical"></div></div> + <div class="item-vertical" data-expected-width="150"><div class="content2-vertical"></div></div> + <div class="item-vertical" data-expected-width="150"><div class="content3-vertical"></div></div> + <div class="item-vertical" data-expected-width="150"><div class="content1-vertical"></div></div> + <div class="item-vertical" data-expected-width="150"><div class="content2-vertical"></div></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-003.html b/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-003.html new file mode 100644 index 00000000000..3e07338745b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-003.html @@ -0,0 +1,330 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#propdef-align-content" /> +<title>css-flexbox: Tests align-content with flex-wrap: wrap</title> +<style> +.flexbox { + display: flex; + background-color: #aaa; + position: relative; + flex-wrap: wrap; +} + +.horizontal { + width: 200px; + height: 120px; +} +.horizontal > div { + min-height: 20px; +} +.horizontal > :nth-child(1) { + width: 100px; + min-height: 10px; +} +.horizontal > :nth-child(2) { + width: 100px; +} +.horizontal > :nth-child(3) { + width: 200px; +} +.horizontal > :nth-child(4) { + width: 50px; +} + +.vertical-rl { + writing-mode: vertical-rl; + width: 120px; + height: 20px; +} +.vertical-rl > div { + min-width: 20px; +} +.vertical-rl > :nth-child(1) { + height: 10px; + min-width: 10px; +} +.vertical-rl > :nth-child(2) { + height: 10px; +} +.vertical-rl > :nth-child(3) { + height: 20px; +} +.vertical-rl > :nth-child(4) { + height: 5px; +} + +.flexbox :nth-child(1) { + background-color: lightblue; +} +.flexbox :nth-child(2) { + background-color: lightgreen; +} +.flexbox :nth-child(3) { + background-color: pink; +} +.flexbox :nth-child(4) { + background-color: yellow; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.flexbox')"> +<div id=log></div> +<p>Test to make sure that align-content works properly.</p> + +<div data-expected-height="120" class="flexbox horizontal"> + <div data-offset-x="0" data-offset-y="0" data-expected-height="40"></div> + <div data-offset-x="100" data-offset-y="0" data-expected-height="40"></div> + <div data-offset-x="0" data-offset-y="40" data-expected-height="40"></div> + <div data-offset-x="0" data-offset-y="80" data-expected-height="40"></div> +</div> + +<div data-expected-height="120" class="flexbox horizontal" style="align-content: flex-start"> + <div data-offset-x="0" data-offset-y="0" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="0" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="20" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="40" data-expected-height="20"></div> +</div> + +<div data-expected-height="120" class="flexbox horizontal" style="align-content: flex-end"> + <div data-offset-x="0" data-offset-y="60" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="60" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="80" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="100" data-expected-height="20"></div> +</div> + +<div data-expected-height="120" class="flexbox horizontal" style="align-content: center"> + <div data-offset-x="0" data-offset-y="30" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="30" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="50" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="70" data-expected-height="20"></div> +</div> + +<div data-expected-height="120" class="flexbox horizontal" style="align-content: space-between"> + <div data-offset-x="0" data-offset-y="0" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="0" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="50" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="100" data-expected-height="20"></div> +</div> + +<div data-expected-height="120" class="flexbox horizontal" style="align-content: space-evenly"> + <div data-offset-x="0" data-offset-y="15" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="15" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="50" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="85" data-expected-height="20"></div> +</div> + +<div data-expected-height="120" class="flexbox horizontal" style="align-content: space-around"> + <div data-offset-x="0" data-offset-y="10" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="10" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="50" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="90" data-expected-height="20"></div> +</div> + +<div data-expected-height="120" class="flexbox horizontal" style="align-content: stretch"> + <div data-offset-x="0" data-offset-y="0" data-expected-height="40"></div> + <div data-offset-x="100" data-offset-y="0" data-expected-height="40"></div> + <div data-offset-x="0" data-offset-y="40" data-expected-height="40"></div> + <div data-offset-x="0" data-offset-y="80" data-expected-height="40"></div> +</div> + +<!-- Negative overflow goes out the top. --> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: flex-end; height: 30px"> + <div data-offset-x="0" data-offset-y="-30" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="-30" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="-10" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="10" data-expected-height="20"></div> +</div> + +<!-- If we overflow, we should true center. --> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: center; height: 30px"> + <div data-offset-x="0" data-offset-y="-15" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="-15" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="5" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="25" data-expected-height="20"></div> +</div> + +<!-- If we overflow, we should be the same as flex-start. --> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-between; height: 30px"> + <div data-offset-x="0" data-offset-y="0" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="0" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="20" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="40" data-expected-height="20"></div> +</div> + +<!-- If we overflow, we should true center. --> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-around; height: 30px"> + <div data-offset-x="0" data-offset-y="-15" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="-15" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="5" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="25" data-expected-height="20"></div> +</div> + +<!-- If we overflow, we should true center. --> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-evenly; height: 30px"> + <div data-offset-x="0" data-offset-y="-15" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="-15" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="5" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="25" data-expected-height="20"></div> +</div> + +<!-- Stretch should only grow, not shrink. --> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: stretch; height: 30px"> + <div data-offset-x="0" data-offset-y="0" data-expected-height="20"></div> + <div data-offset-x="100" data-offset-y="0" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="20" data-expected-height="20"></div> + <div data-offset-x="0" data-offset-y="40" data-expected-height="20"></div> +</div> + +<!-- 0 lines should not crash. --> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-between; height: 30px"> +</div> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-around; height: 30px"> +</div> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-evenly; height: 30px"> +</div> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: stretch; height: 30px"> +</div> + +<!-- 1 line should not crash. --> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-between; height: 30px"> + <div data-offset-x="0" data-offset-y="0" data-expected-height="10"></div> +</div> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-around; height: 30px"> + <div data-offset-x="0" data-offset-y="10" data-expected-height="10"></div> +</div> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: space-evenly; height: 30px"> + <div data-offset-x="0" data-offset-y="10" data-expected-height="10"></div> +</div> +<div data-expected-height="30" class="flexbox horizontal" style="align-content: stretch; height: 30px"> + <div data-offset-x="0" data-offset-y="0" data-expected-height="30"></div> +</div> + + +<div data-expected-width="120" class="flexbox vertical-rl"> + <div data-offset-x="80" data-offset-y="0" data-expected-width="40"></div> + <div data-offset-x="80" data-offset-y="10" data-expected-width="40"></div> + <div data-offset-x="40" data-offset-y="0" data-expected-width="40"></div> + <div data-offset-x="0" data-offset-y="0" data-expected-width="40"></div> +</div> + +<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: flex-start"> + <div data-offset-x="100" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="100" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="80" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="60" data-offset-y="0" data-expected-width="20"></div> +</div> + +<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: flex-end"> + <div data-offset-x="40" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="40" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="20" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="0" data-offset-y="0" data-expected-width="20"></div> +</div> + +<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: center"> + <div data-offset-x="70" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="70" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="50" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="30" data-offset-y="0" data-expected-width="20"></div> +</div> + +<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: space-between"> + <div data-offset-x="100" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="100" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="50" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="0" data-offset-y="0" data-expected-width="20"></div> +</div> + +<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: space-around"> + <div data-offset-x="90" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="90" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="50" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="10" data-offset-y="0" data-expected-width="20"></div> +</div> + +<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: space-evenly"> + <div data-offset-x="85" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="85" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="50" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="15" data-offset-y="0" data-expected-width="20"></div> +</div> + +<div data-expected-width="120" class="flexbox vertical-rl" style="align-content: stretch"> + <div data-offset-x="80" data-offset-y="0" data-expected-width="40"></div> + <div data-offset-x="80" data-offset-y="10" data-expected-width="40"></div> + <div data-offset-x="40" data-offset-y="0" data-expected-width="40"></div> + <div data-offset-x="0" data-offset-y="0" data-expected-width="40"></div> +</div> + +<!-- Negative overflow goes out the right. --> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: flex-end; width: 30px;"> + <div data-offset-x="40" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="40" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="20" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="0" data-offset-y="0" data-expected-width="20"></div> +</div> + +<!-- If we overflow, we should true center. --> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: center; width: 30px;"> + <div data-offset-x="25" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="25" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="5" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="-15" data-offset-y="0" data-expected-width="20"></div> +</div> + +<!-- If we overflow, we should be the same as flex-start. --> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-between; width: 30px;"> + <div data-offset-x="10" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="10" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="-10" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="-30" data-offset-y="0" data-expected-width="20"></div> +</div> + +<!-- If we overflow, we should true center. --> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-around; width: 30px;"> + <div data-offset-x="25" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="25" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="5" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="-15" data-offset-y="0" data-expected-width="20"></div> +</div> + +<!-- If we overflow, we should true center. --> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-evenly; width: 30px;"> + <div data-offset-x="25" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="25" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="5" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="-15" data-offset-y="0" data-expected-width="20"></div> +</div> + +<!-- Stretch should only grow, not shrink. --> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: stretch; width: 30px;"> + <div data-offset-x="10" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="10" data-offset-y="10" data-expected-width="20"></div> + <div data-offset-x="-10" data-offset-y="0" data-expected-width="20"></div> + <div data-offset-x="-30" data-offset-y="0" data-expected-width="20"></div> +</div> + +<!-- 0 lines should not crash. --> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-between; width: 30px"> +</div> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-around; width: 30px"> +</div> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-evenly; width: 30px"> +</div> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: stretch; width: 30px"> +</div> + +<!-- 1 line should not crash. --> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-between; width: 30px"> + <div data-offset-x="20" data-offset-y="0" data-expected-width="10"></div> +</div> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-around; width: 30px"> + <div data-offset-x="10" data-offset-y="0" data-expected-width="10"></div> +</div> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: space-evenly; width: 30px"> + <div data-offset-x="10" data-offset-y="0" data-expected-width="10"></div> +</div> +<div data-expected-width="30" class="flexbox vertical-rl" style="align-content: stretch; width: 30px"> + <div data-offset-x="0" data-offset-y="0" data-expected-width="30"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-004.html b/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-004.html new file mode 100644 index 00000000000..161832190a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/align-content-wrap-004.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<link rel="author" title="Google LLC" href="http://www.google.com" /> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#cross-sizing" /> +<title>css-flexbox: Tests that we size items in a wrapping column flexbox as fit-content</title> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht" /> + +<style> +.flex { + display: flex; + flex-wrap: wrap; + align-content: center; + flex-direction: column; + align-items: flex-start; + width: 100px; + line-height: 1; +} +.flex > div { + min-height: 0; + background: green; +} +.flex * { + vertical-align: top; +} +</style> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + +<div class="flex"> + <div style="align-self: stretch;"> + <div style="display: inline-block; width: 20px; height: 40px;"></div> + </div> + <div style="height: 60px;"> + <div style="display: inline-block; height: 15px; width: 20px;"></div> + <div style="display: inline-block; height: 15px; width: 100px;"></div> + <div style="display: inline-block; height: 15px; width: 100px;"></div> + <div style="display: inline-block; height: 15px; width: 100px;"></div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-input-range-ref.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-input-range-ref.html new file mode 100644 index 00000000000..ad71302aef9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-input-range-ref.html @@ -0,0 +1,61 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Reference: align/justify-self on range INPUT items</title> + <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id="> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; +} + +input { + margin:0; + padding:0; + border:none; /* NOTE: On Windows, GetWidgetBorder returns 1px on all sides, + so we need the next declaration for the width/height to match: */ + box-sizing: border-box; + width:300px; + height:80px; +} + +.grid { + display: inline-grid; + grid: 80px / 300px; + place-items: stretch; + border:1px solid; +} + +.zero { grid:0/0; } +.zero input { width:0; height:0; } + +.none input { -webkit-appearance:none; } + + </style> +</head> +<body> + +<div class="grid"><input type=range></div> +<br> +<div class="grid zero"><input type=range></div> +<br> +<div class="grid"><input type=range style="place-self:normal"></div> +<br> +<div class="grid zero"><input type=range style="place-self:normal"></div> +<br> + +<div class="none"> +<div class="grid"><input type=range></div> +<br> +<div class="grid zero"><input type=range></div> +<br> +<div class="grid"><input type=range style="place-self:normal"></div> +<br> +<div class="grid zero"><input type=range style="place-self:normal"></div> +</div> + +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-input-range.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-input-range.html new file mode 100644 index 00000000000..fb17f3a4a8b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-input-range.html @@ -0,0 +1,58 @@ +<!DOCTYPE HTML> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html><head> + <meta charset="utf-8"> + <title>CSS Grid Test: align/justify-self on range INPUT items</title> + <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id="> + <link rel="help" href="https://drafts.csswg.org/css-align-3/#align-self-property"> + <link rel="match" href="grid-self-alignment-stretch-input-range-ref.html"> + <style> +html,body { + color:black; background-color:white; font:16px/1 monospace; +} + +input { + margin:0; + padding:0; + border:none; +} + +.grid { + display: inline-grid; + grid: 80px / 300px; + place-items: stretch; + border:1px solid; +} + +.zero { grid:0/0; } + +.none input { -webkit-appearance:none; } + + </style> +</head> +<body> + +<div class="grid"><input type=range></div> +<br> +<div class="grid zero"><input type=range></div> +<br> +<div class="grid"><input type=range style="place-self:normal"></div> +<br> +<div class="grid zero"><input type=range style="place-self:normal"></div> +<br> + +<div class="none"> +<div class="grid"><input type=range></div> +<br> +<div class="grid zero"><input type=range></div> +<br> +<div class="grid"><input type=range style="place-self:normal"></div> +<br> +<div class="grid zero"><input type=range style="place-self:normal"></div> +</div> + +</body> +</html> 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 index 31a9ef3db8e..f304cedfeab 100644 --- 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 @@ -4,6 +4,7 @@ <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> <style> .container { + font: 10px/1 Ahem; margin: 10px; background: grey; } @@ -32,7 +33,7 @@ } </style> -<p>The test passes if it has the same output than the reference.</p> +<p>The test passes if it has the same output as the reference.</p> <div style="float: left; width: 350px;"> 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 index 1b3c6eef691..b4ecd188db7 100644 --- 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 @@ -4,10 +4,11 @@ <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-grid/#grid-model"> <link rel="match" href="grid-container-scrollbar-001-ref.html"> -<meta name="assert" content="This test verifes that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction."> +<meta name="assert" content="This test verifies that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction."> <link href="support/grid.css" rel="stylesheet"> <style> .grid { + font: 10px/1 Ahem; margin: 10px; } @@ -29,7 +30,7 @@ } </style> -<p>The test passes if it has the same output than the reference.</p> +<p>The test passes if it has the same output as the reference.</p> <div style="float: left; width: 350px;"> 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 index 512fb8a81d5..e6640cc749e 100644 --- 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 @@ -4,6 +4,7 @@ <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> <style> .container { + font: 10px/1 Ahem; margin: 10px; background: grey; writing-mode: vertical-lr; @@ -33,7 +34,7 @@ } </style> -<p>The test passes if it has the same output than the reference.</p> +<p>The test passes if it has the same output as the reference.</p> <div style="float: left; width: 350px;"> 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 index ecdc7b76840..6733759cf00 100644 --- 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 @@ -4,10 +4,11 @@ <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-grid/#grid-model"> <link rel="match" href="grid-container-scrollbar-vertical-lr-001-ref.html"> -<meta name="assert" content="This test verifes that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction."> +<meta name="assert" content="This test verifies that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction."> <link href="support/grid.css" rel="stylesheet"> <style> .grid { + font: 10px/1 Ahem; margin: 10px; writing-mode: vertical-lr; } @@ -30,7 +31,7 @@ } </style> -<p>The test passes if it has the same output than the reference.</p> +<p>The test passes if it has the same output as the reference.</p> <div style="float: left; width: 350px;"> 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 index d8eeedfa07d..2b1bbaebb46 100644 --- 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 @@ -4,6 +4,7 @@ <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> <style> .container { + font: 10px/1 Ahem; margin: 10px; background: grey; writing-mode: vertical-rl; @@ -33,7 +34,7 @@ } </style> -<p>The test passes if it has the same output than the reference.</p> +<p>The test passes if it has the same output as the reference.</p> <div style="float: left; width: 350px;"> 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 index f2ab39ff505..a3de9386a81 100644 --- 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 @@ -4,10 +4,11 @@ <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-grid/#grid-model"> <link rel="match" href="grid-container-scrollbar-vertical-rl-001-ref.html"> -<meta name="assert" content="This test verifes that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction."> +<meta name="assert" content="This test verifies that scrollbars are properly painted on grid containers, and are shown in the expected position depending on the direction."> <link href="support/grid.css" rel="stylesheet"> <style> .grid { + font: 10px/1 Ahem; margin: 10px; writing-mode: vertical-rl; } @@ -30,7 +31,7 @@ } </style> -<p>The test passes if it has the same output than the reference.</p> +<p>The test passes if it has the same output as the reference.</p> <div style="float: left; width: 350px;"> diff --git a/tests/wpt/web-platform-tests/css/css-logical/logical-values-float-clear-reftest.html b/tests/wpt/web-platform-tests/css/css-logical/logical-values-float-clear-reftest.html new file mode 100644 index 00000000000..c0fe9a52bc4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-logical/logical-values-float-clear-reftest.html @@ -0,0 +1,68 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Logical Values: Flow-Relative Values for the 'float' property</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" /> +<link rel="help" href="https://drafts.csswg.org/css-logical/#float-clear"> +<meta name="assert" content="This test checks that the 'inline-start' and 'inline-end' values of the 'float' and 'clear' properties map to the correct physical value." /> +<link rel="match" href="reference/logical-values-float-clear-reftest-ref.html"> +<style> +.test { + display: block; + overflow: hidden; + width: 300px; +} +.inline { + display: inline; +} +.float, .clear { + display: block; + overflow: hidden; + height: 3px; + width: 100px; + background: #f0f; +} +.clear { + background: #0ff; +} +</style> +<body> +<script> +const sides = ["inline-start", "inline-end"]; +const directions = ["ltr", "rtl"]; +for (const floatSide of sides) { + for (const clearSide of sides) { + for (const containerDirection of directions) { + for (const inlineParentDirection of [null, ...directions]) { + for (const floatDirection of directions) { + for (const clearDirection of directions) { + const containerEl = document.createElement("div"); + containerEl.className = "test"; + containerEl.style.direction = containerDirection; + const floatEl = document.createElement("div"); + floatEl.className = "float"; + floatEl.style.direction = floatDirection; + floatEl.style.float = floatSide; + const clearEl = document.createElement("div"); + clearEl.className = "clear"; + clearEl.style.direction = floatDirection; + clearEl.style.clear = clearSide; + if (inlineParentDirection) { + const inlineParent = document.createElement("div"); + inlineParent.className = "inline"; + inlineParent.style.direction = inlineParentDirection; + inlineParent.appendChild(floatEl); + inlineParent.appendChild(clearEl); + containerEl.appendChild(inlineParent); + } else { + containerEl.appendChild(floatEl); + containerEl.appendChild(clearEl); + } + document.body.appendChild(containerEl); + } + } + } + } + } +} +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-logical/reference/logical-values-float-clear-reftest-ref.html b/tests/wpt/web-platform-tests/css/css-logical/reference/logical-values-float-clear-reftest-ref.html new file mode 100644 index 00000000000..28c275ebb30 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-logical/reference/logical-values-float-clear-reftest-ref.html @@ -0,0 +1,68 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSS Reftest Reference</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com" /> +<style> +.test { + display: block; + overflow: hidden; + width: 300px; +} +.inline { + display: inline; +} +.float, .clear { + display: block; + overflow: hidden; + height: 3px; + width: 100px; + background: #f0f; +} +.clear { + background: #0ff; +} +</style> +<body> +<script> +function physicalValue(value, containerDirection) { + return ((value === "inline-start") === (containerDirection === "ltr")) ? "left" : "right"; +} +const sides = ["inline-start", "inline-end"]; +const directions = ["ltr", "rtl"]; +for (const floatSide of sides) { + for (const clearSide of sides) { + for (const containerDirection of directions) { + for (const inlineParentDirection of [null, ...directions]) { + for (const floatDirection of directions) { + for (const clearDirection of directions) { + const containerEl = document.createElement("div"); + containerEl.className = "test"; + containerEl.style.direction = containerDirection; + const floatEl = document.createElement("div"); + floatEl.className = "float"; + floatEl.style.direction = floatDirection; + floatEl.style.float = physicalValue(floatSide, containerDirection); + const clearEl = document.createElement("div"); + clearEl.className = "clear"; + clearEl.style.direction = floatDirection; + clearEl.style.clear = physicalValue(clearSide, containerDirection); + if (inlineParentDirection) { + const inlineParent = document.createElement("div"); + inlineParent.className = "inline"; + inlineParent.style.direction = inlineParentDirection; + inlineParent.appendChild(floatEl); + inlineParent.appendChild(clearEl); + containerEl.appendChild(inlineParent); + } else { + containerEl.appendChild(floatEl); + containerEl.appendChild(clearEl); + } + document.body.appendChild(containerEl); + } + } + } + } + } +} +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-logical/resources/test-logical-values.js b/tests/wpt/web-platform-tests/css/css-logical/resources/test-logical-values.js index c34b4ee9f91..7a039379cbd 100644 --- a/tests/wpt/web-platform-tests/css/css-logical/resources/test-logical-values.js +++ b/tests/wpt/web-platform-tests/css/css-logical/resources/test-logical-values.js @@ -21,27 +21,7 @@ export function runTests(property, values) { style.cssText = ""; style.setProperty(property, value); testCSSValues("logical values in inline style", style, [[property, value]]); + testComputedValues("logical values in computed style", style, [[property, value]]); }, `Test that '${property}: ${value}' is supported.`); - - const camelCase = value.replace(/-(.)/g, (match, $1) => $1.toUpperCase()); - for (const writingMode of writingModes) { - for (const style of writingMode.styles) { - const writingModeDecl = makeDeclaration(style); - test(function() { - const physicalSide = writingMode[camelCase]; - let expected; - if (physicalSide === writingMode.lineLeft) { - expected = "left"; - } else if (physicalSide === writingMode.lineRight) { - expected = "right"; - } else { - expected = physicalSide; - } - testComputedValues(`computed value`, - `.test { ${writingModeDecl} }`, - [[property, expected]]); - }, `Test '${property}: ${value}' with '${writingModeDecl}'.`); - } - } } } diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html index 5de6d20f11b..166754574fa 100644 --- a/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html +++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html @@ -2,6 +2,7 @@ <link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api/#dom-css-registerproperty" /> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="./resources/utils.js"></script> <style> div { --registered-length-1: 10px; @@ -135,4 +136,38 @@ test(function(){ element.style = ''; }, 'Lists with relative units are absolutized when substituting'); +function test_valid_fallback(syntax, value, fallback) { + test(function(){ + let name = generate_property(syntax); + try { + element.style = `${name}: ${value}; --x:var(${name},${fallback})`; + let computedStyle = getComputedStyle(element); + assert_equals(computedStyle.getPropertyValue('--x'), value); + } finally { + element.style = ''; + } + }, `Valid fallback does not invalidate var()-reference [${syntax}, ${fallback}]`); +} + +function test_invalid_fallback(syntax, value, fallback) { + test(function(){ + let name = generate_property(syntax); + try { + element.style = `${name}: ${value}; --x:var(${name},${fallback})`; + let computedStyle = getComputedStyle(element); + assert_equals(computedStyle.getPropertyValue('--x'), ''); + } finally { + element.style = ''; + } + }, `Invalid fallback invalidates var()-reference [${syntax}, ${fallback}]`); +} + +test_valid_fallback('<length>', '40px', '10px'); +test_valid_fallback('<length> | <color>', '40px', 'red'); +test_valid_fallback('<length> | none', '40px', 'none'); + +test_invalid_fallback('<length>', '40px', 'red'); +test_invalid_fallback('<length> | none', '40px', 'nolength'); +test_invalid_fallback('<length>', '40px', 'var(--novar)'); + </script> diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-font-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-font-001-ref.html new file mode 100644 index 00000000000..f0bd7fe2629 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-font-001-ref.html @@ -0,0 +1,20 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test reference</title> +<link rel=author title="Ambrose Li" href="http://port.ambroseli.ca/"> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> + +<p>The test passes if the word pairs below are all displayed in the same font. + +<table> + <tr> + <td>ping4 on1 + <td>salaam + <td>shalom + <tr> + <td>ping4 on1 + <td>salaam + <td>shalom +</table> + diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-line-break-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-line-break-001-ref.html new file mode 100644 index 00000000000..6ff3ef1e646 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-line-break-001-ref.html @@ -0,0 +1,14 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test reference</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<style> +div { + font-family: monospace; +} +</style> + +<p>The test passes if the first line below ends with a hyphen. + +<div lang=ja-Latn>Fushimi‐<br>ku</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-line-break-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-line-break-002-ref.html new file mode 100644 index 00000000000..2855797d355 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-line-break-002-ref.html @@ -0,0 +1,11 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test reference</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<style> +</style> + +<p>The test passes if the question mark in the phrase below is alone on the second line. + +<div lang=en-Hrkt>ハロー、ハウアーユー<br>?</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-segment-break-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-segment-break-001-ref.html new file mode 100644 index 00000000000..f451a74a51d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-segment-break-001-ref.html @@ -0,0 +1,10 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test reference</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> + +<p>The test passes if the both lines are identical, including the spacing of the characters. + +<div lang=ain-Kana>“アイヌイタㇰ”</div> +<div lang=ain-Kana>“アイヌイタㇰ”</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-text-transform-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-text-transform-001-ref.html new file mode 100644 index 00000000000..9b50fb13312 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/reference/writing-system-text-transform-001-ref.html @@ -0,0 +1,13 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test reference</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<style> +div { + font-size: 3em; +} +</style> +<p>Test passes if the two words below are identical: there must be a dot on the “i” letter at the beginning of the word. +<div lang=tr-Cyrl>iстанбул</div> +<div lang=tr-Cyrl>iстанбул</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-font-001.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-font-001.html new file mode 100644 index 00000000000..a8d4549279b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-font-001.html @@ -0,0 +1,25 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test: font selection and writing sytem</title> +<link rel=author title="Ambrose Li" href="http://port.ambroseli.ca/"> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#languages"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging"> +<link rel=help href="https://drafts.csswg.org/css-fonts-4/#language-specific-support"> +<link rel=match href="reference/writing-system-font-001-ref.html"> +<meta name=assert content="An explicit writing system takes precedence over the content language for font selection"> + +<p>The test passes if the word pairs below are all displayed in the same font. + +<table> + <tr> + <td>ping4 on1 + <td>salaam + <td>shalom + <tr> + <td><span lang=zh-yue-latn>ping4 on1</span> + <td><span lang=ar-latn>salaam</span> + <td><span lang=he-latn>shalom</span> +</table> + diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-line-break-001.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-line-break-001.html new file mode 100644 index 00000000000..4ecb5ae7734 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-line-break-001.html @@ -0,0 +1,22 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test: writing system and line breaking</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#languages"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#propdef-line-break"> +<link rel=match href="reference/writing-system-line-break-001-ref.html"> +<meta name=assert content="breaks before hyphens when line-break is loose are allowed if the content language is Japanese, +but not when the writing system is Latin."> +<style> +div { + font-family: monospace; + width: 7ch; + line-break: loose; +} +</style> + +<p>The test passes if the first line below ends with a hyphen. + +<div lang=ja-Latn>Fushimi‐ku</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-line-break-002.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-line-break-002.html new file mode 100644 index 00000000000..a973560a6e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-line-break-002.html @@ -0,0 +1,22 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test: writing system and line breaking</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#languages"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#propdef-line-break"> +<link rel=match href="reference/writing-system-line-break-002-ref.html"> +<meta name=assert content="breaks before U+FF1F when line-break is loose are allowed +if the writing system is Japanese (which includes Hrkt), +but even when the language not Japanese."> +<style> +div { + width: 10em; + line-break: loose; +} +</style> + +<p>The test passes if the question mark in the phrase below is alone on the second line. + +<div lang=en-Hrkt>ハロー、ハウアーユー?</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-segment-break-001.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-segment-break-001.html new file mode 100644 index 00000000000..1d560d9f497 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-segment-break-001.html @@ -0,0 +1,27 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test: writing system and segment break transformation</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#languages"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#line-break-transform"> +<link rel=match href="reference/writing-system-segment-break-001-ref.html"> +<meta name=assert content="If the writing system of the segment break is Chinese, Japanese, or Yi, +and the character before or after the segment break is punctuation or a symbol (Unicode general category P* or S*) +and has an East Asian Width property of A or is Emoji, +and the character on the other side of the segment break is F, W, or H, and not Hangul or Emoji, +then the segment break is removed."> +<!-- +In this case, checking with “ and ” which are punctuation with East Asian Width of A, +next to Katakana letters (which are W), +while the writing system is Katakana, which is classified as Japanese, +despite a non Japanese content language (Ainu). +--> + +<p>The test passes if the both lines are identical, including the spacing of the characters. + +<div lang=ain-Kana>“ +アイヌイタㇰ +”</div> +<div lang=ain-Kana>“アイヌイタㇰ”</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-text-transform-001.html b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-text-transform-001.html new file mode 100644 index 00000000000..209d56c9514 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/writing-system/writing-system-text-transform-001.html @@ -0,0 +1,19 @@ +<!doctype html> +<html lang=en> +<meta charset=utf-8> +<title>CSS test: text-transform and writing systems</title> +<link rel=author title="Florian Rivoal" href="https://florian.rivoal.net"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#languages"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#script-tagging"> +<link rel=help href="https://drafts.csswg.org/css-text-3/#propdef-text-transform"> +<link rel=match href="reference/writing-system-text-transform-001-ref.html"> +<meta name=assert content="text transform rules that depend on the language are overriden by a contradicting explicit script tag."> +<style> +div { + text-transform: lowercase; + font-size: 3em; +} +</style> +<p>Test passes if the two words below are identical: there must be a dot on the “i” letter at the beginning of the word. +<div lang=tr-Cyrl>IСТАНБУЛ</div> +<div lang=tr-Cyrl>iстанбул</div> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js b/tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js index 3791b0af9db..73ce9ceefb3 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js +++ b/tests/wpt/web-platform-tests/css/css-transforms/animation/resources/interpolation-testcommon.js @@ -11,6 +11,28 @@ function test_interpolation(settings, expectations, name) { return 'cubic-bezier(0, ' + y + ', 1, ' + y + ')'; } + function RoundMatrix(style) { + var matrixMatch = style.match(/^(matrix(3d)?)\(.+\)$/); + if (!!matrixMatch) { + var matrixType = matrixMatch[1]; + var matrixArgs = style.substr(matrixType.length); + var extractmatrix = function(matrixStr) { + var list = []; + var regex = /[+\-]?[0-9]+[.]?[0-9]*(e[+/-][0-9]+)?/g; + var match = undefined; + do { + match = regex.exec(matrixStr); + if (match) { + list.push(parseFloat(parseFloat(match[0]).toFixed(6))); + } + } while (match); + return list; + } + return matrixType + '(' + extractmatrix(matrixArgs).join(', ') + ')'; + } + return style; + } + test(function(){ assert_true(CSS.supports(settings.property, settings.from), 'Value "' + settings.from + '" is supported by ' + settings.property); assert_true(CSS.supports(settings.property, settings.to), 'Value "' + settings.to + '" is supported by ' + settings.property); @@ -49,7 +71,9 @@ function test_interpolation(settings, expectations, name) { document.body.appendChild(reference); reference.style = ''; - assert_equals(getComputedStyle(target)[settings.property], getComputedStyle(reference)[settings.property]); + var observed = RoundMatrix(getComputedStyle(target)[settings.property]); + var expected = RoundMatrix(getComputedStyle(reference)[settings.property]); + assert_equals(observed, expected); }, message_prefix + 'Animation between "' + settings.from + '" and "' + settings.to + '" at progress ' + progress); } } 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 index c8d1a3ede5d..39febb17d2d 100644 --- 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 @@ -28,7 +28,6 @@ height: 100px; left: 50px; top: 50px; - -webkit-backdrop-filter: invert(1); backdrop-filter: invert(1); opacity: 0.5; background: blue; 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 index 23e40a7ccdd..e3ad8a20afa 100644 --- 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 @@ -28,7 +28,6 @@ height: 100px; left: 50px; top: 50px; - -webkit-backdrop-filter: invert(1); backdrop-filter: invert(1); opacity: 0.5; } 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 index 8f24c9b44a4..711064e4de3 100644 --- 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 @@ -28,7 +28,6 @@ height: 100px; left: 50px; top: 50px; - -webkit-backdrop-filter: invert(1); backdrop-filter: invert(1); opacity: 1.0; } 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 index d6d1f4b8130..fc212501ad5 100644 --- 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 @@ -29,7 +29,6 @@ div { } .filter { opacity: 0.7; - -webkit-backdrop-filter: invert(1); backdrop-filter: invert(1); } </style> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-clip-rect-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-clip-rect-ref.html new file mode 100644 index 00000000000..a51d81f8519 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-clip-rect-ref.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>backdrop-filter: Clip the filter at border box of element</title> +<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org"> + + + +<div> + <p>Expected: A green box, blurred inside the short, wide white box with a<br> + blue border, and not blurred anywhere else. In particular, there should be<br> + no blurring inside the tall, narrow white box, or anywhere outside that.</p> +</div> +<div class="box"></div> +<div class="navbar"></div> +<div class="menu"></div> + +<style> +div { + position: absolute; +} +.box { + width: 200px; + height: 200px; + top: 100px; + left: 100px; + background: green; +} +.navbar { + width: 300px; + height: 50px; + top: 150px; + left: 50px; + border: 1px solid blue; + backdrop-filter: blur(20px); +} +.menu { + width: 100px; + height: 150px; + top: 201px; + left: 146px; + border: 1px solid blue; +} +</style> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-clip-rect.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-clip-rect.html new file mode 100644 index 00000000000..8b5d9f4e34f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-clip-rect.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>backdrop-filter: Clip the filter at border box of element</title> +<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="backdrop-filter-paint-order-ref.html"> + +<div> + <p>Expected: A green box, blurred inside the short, wide white box with a<br> + blue border, and not blurred anywhere else. In particular, there should be<br> + no blurring inside the tall, narrow white box, or anywhere outside that.</p> +</div> +<div class="box"></div> +<div class="navbar"> + <div class="menu"></div> +</div> +<style> +div { + position: absolute; +} +.box { + width: 200px; + height: 200px; + top: 100px; + left: 100px; + background: green; +} +.navbar { + width: 300px; + height: 50px; + top: 150px; + left: 50px; + border: 1px solid blue; + backdrop-filter: blur(20px); +} +.menu { + width: 100px; + height: 150px; + top: 50px; + left: 95px; + border: 1px solid blue; +} +</style> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-edge-pixels-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-edge-pixels-ref.html new file mode 100644 index 00000000000..1960435775c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-edge-pixels-ref.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>backdrop-filter: Edge pixels shouldn't get filtered</title> +<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org"> + + + +<div class="box"></div> +<div style="position:absolute;top:100px;"> + <p>Expected above: A pure white box with a blue border.<br> + No dark/black should be observed within the white box.</p> +</div> + +<style> +.box { + position: absolute; + width: 100px; + height: 100px; + top: 0px; + left: 0px; + border: 1px solid blue; + + +} +</style> diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-edge-pixels.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-edge-pixels.html new file mode 100644 index 00000000000..1e29d725ebc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-edge-pixels.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>backdrop-filter: Edge pixels shouldn't get filtered</title> +<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="backdrop-filter-edge-pixels-ref.html"> + +<div class="box"></div> +<div style="position:absolute;top:100px;"> + <p>Expected above: A pure white box with a blue border.<br> + No dark/black should be observed within the white box.</p> +</div> + +<style> +.box { + position: absolute; + width: 100px; + height: 100px; + top: 0px; + left: 0px; + border: 1px solid blue; + backdrop-filter: blur(30px); +} +</style> 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 index dba157c87c7..99fa69d03fa 100644 --- 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 @@ -35,7 +35,6 @@ div { top: 30px; left: -90px; opacity: 0.3; - -webkit-backdrop-filter: invert(1); backdrop-filter: invert(1); background: yellow; } 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 index dc7bd107c32..e41772578e5 100644 --- 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 @@ -35,7 +35,6 @@ div { top: 30px; left: -90px; opacity: 0.3; - -webkit-backdrop-filter: invert(1); backdrop-filter: invert(1); background: yellow; } diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-paint-order-ref.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-paint-order-ref.html new file mode 100644 index 00000000000..bd82e520f0e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-paint-order-ref.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>backdrop-filter: Only filter objects painted before</title> +<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org"> + + + +<div> + <p>Expected: A pure white box with a blue border, surrounded by green.<br> + No green should be observed within the white box.<br> + No dark/black should be observed within the white box either.</p> +</div> + +<div class="filterbox"></div> +<div class="greenbox top"></div> +<div class="greenbox right"></div> +<div class="greenbox bottom"></div> +<style> +.filterbox { + position: absolute; + width: 100px; + height: 100px; + top: 150px; + left: 0px; + border: 1px solid blue; + + +} +.greenbox { + position:absolute; + width: 150px; + height: 50px; + background: green; +} +.top { + top:100px; + left: 10px; +} +.right { + top:130px; + left: 102px; + width: 58px; + height: 150px; +} +.bottom { + top:252px; + left: 10px; +} +</style> + diff --git a/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-paint-order.html b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-paint-order.html new file mode 100644 index 00000000000..88531532fc3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/filter-effects/backdrop-filter-paint-order.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>backdrop-filter: Only filter objects painted before</title> +<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org"> +<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty"> +<link rel="match" href="backdrop-filter-paint-order-ref.html"> + +<div> + <p>Expected: A pure white box with a blue border, surrounded by green.<br> + No green should be observed within the white box.<br> + No dark/black should be observed within the white box either.</p> +</div> + +<div class="filterbox"></div> +<div class="greenbox top"></div> +<div class="greenbox right"></div> +<div class="greenbox bottom"></div> +<style> +.filterbox { + position: absolute; + width: 100px; + height: 100px; + top: 150px; + left: 0px; + border: 1px solid blue; + backdrop-filter: blur(20px); +} +.greenbox { + position:absolute; + width: 150px; + height: 50px; + background: green; +} +.top { + top:100px; + left: 10px; +} +.right { + top:130px; + left: 102px; + width: 58px; + height: 150px; +} +.bottom { + top:252px; + left: 10px; +} +</style> + diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/matches.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/is.html index 634ded3c7d7..0d905dcd4f6 100644 --- a/tests/wpt/web-platform-tests/css/selectors/invalidation/matches.html +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/is.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <html> <head> - <title>CSS Selectors Invalidation: :matches()</title> + <title>CSS Selectors Invalidation: :is()</title> <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com"> <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> - <meta name="assert" content="This tests that the :matches() selector is effective"> + <meta name="assert" content="This tests that the :is() selector is effective"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <style> @@ -12,18 +12,18 @@ color: yellow; } /*Simple selector arguments */ - .a :matches(.b, .c) { + .a :is(.b, .c) { color: red; } /*Compound selector arguments */ - .a :matches(.c#d, .e) { + .a :is(.c#d, .e) { color: green; } /* Complex selector arguments */ .a .g>.b { color: black; } - .a :matches(.e+.f, .g>.b, .h) { + .a :is(.e+.f, .g>.b, .h) { color: blue; } .g>.b { @@ -39,7 +39,7 @@ .c>.a+.e { color: black; } - .a+:matches(.b+.f, :matches(.c>.e, .g)) { + .a+:is(.b+.f, :is(.c>.e, .g)) { color: red; } .c>.e { @@ -108,32 +108,32 @@ assert_equals(getComputedStyle(b1).color, red); assert_equals(getComputedStyle(b3).color, red); assert_equals(getComputedStyle(c1).color, red); - }, "Invalidate :matches() for simple selector arguments."); + }, "Invalidate :is() for simple selector arguments."); test(() => { a1.className = "a"; assert_equals(getComputedStyle(d).color, green); - }, "Invalidate :matches() for compound selector arguments."); + }, "Invalidate :is() for compound selector arguments."); test(() => { a1.className = "a"; assert_equals(getComputedStyle(b2).color, blue); assert_equals(getComputedStyle(b3).color, red); assert_equals(getComputedStyle(f1).color, blue); - }, "Invalidate :matches() for complex selector arguments."); + }, "Invalidate :is() for complex selector arguments."); test(() => { a1.className = "a"; assert_equals(getComputedStyle(e2).color, black); a2.className = "a"; assert_equals(getComputedStyle(e2).color, red); - }, "Invalidate nested :matches()."); + }, "Invalidate nested :is()."); test(() => { a1.className = "a"; assert_equals(getComputedStyle(b2).color, blue); assert_equals(getComputedStyle(h1).color, black); - }, "Test specificity of :matches()."); + }, "Test specificity of :is()."); </script> </body> </html>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/selectors/invalidation/where.html b/tests/wpt/web-platform-tests/css/selectors/invalidation/where.html index 1c6432f46eb..170398300f0 100644 --- a/tests/wpt/web-platform-tests/css/selectors/invalidation/where.html +++ b/tests/wpt/web-platform-tests/css/selectors/invalidation/where.html @@ -33,7 +33,7 @@ :where(.a>:where(.g+.h, .b)~.i) { color: blue; } - :where(:matches(.a~.h)) { + :where(:is(.a~.h)) { color: yellow; } </style> diff --git a/tests/wpt/web-platform-tests/css/selectors/matches-nested.html b/tests/wpt/web-platform-tests/css/selectors/is-nested.html index b82d43d0901..7c3973ae058 100644 --- a/tests/wpt/web-platform-tests/css/selectors/matches-nested.html +++ b/tests/wpt/web-platform-tests/css/selectors/is-nested.html @@ -1,31 +1,31 @@ <!DOCTYPE html> <html> <head> - <title>CSS Selectors: :matches()</title> + <title>CSS Selectors: :is()</title> <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com"> <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> - <meta name="assert" content="This tests that the :matches() selector is effective when nested"> + <meta name="assert" content="This tests that the :is() selector is effective when nested"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <style> - /* Testing that highest specificity is chosen for class outside of :matches() */ + /* Testing that highest specificity is chosen for class outside of :is() */ .a+.b+.c>.e+.d { color: black; font-size: 10px; width: 10px; } - .a+:matches(.b+.f, .b+:matches(*, .c>.e, .g, *))+.d { + .a+:is(.b+.f, .b+:is(*, .c>.e, .g, *))+.d { color: red; font-size: 20px; } .a+.b+.c>.e+.d { color: yellow; } - /* Testing specificty of a class within :matches() */ + /* Testing specificty of a class within :is() */ .a+.c>.e { color: black; } - .a+:matches(.b+.f, :matches(.c>.e, .g)) { + .a+:is(.b+.f, :is(.c>.e, .g)) { color: red; } .c>.e { @@ -61,11 +61,11 @@ assert_equals(getComputedStyle(d1).color, yellow); assert_equals(getComputedStyle(d1).fontSize, "20px"); assert_equals(getComputedStyle(d1).width, "10px"); - }, "Test nested :matches() chooses highest specificity for class outside :matches()."); + }, "Test nested :is() chooses highest specificity for class outside :is()."); test(() => { assert_equals(getComputedStyle(e1).color, red); - }, "Test nested :matches() specificity for class within arguments."); + }, "Test nested :is() specificity for class within arguments."); </script> </body> diff --git a/tests/wpt/web-platform-tests/css/selectors/matches-specificity.html b/tests/wpt/web-platform-tests/css/selectors/is-specificity.html index 41d7251a3d7..bf3dbc6bb9f 100644 --- a/tests/wpt/web-platform-tests/css/selectors/matches-specificity.html +++ b/tests/wpt/web-platform-tests/css/selectors/is-specificity.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <html> <head> - <title>CSS Selectors: :matches()</title> + <title>CSS Selectors: :is()</title> <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com"> <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> - <meta name="assert" content="This tests that the :matches() selector chooses the correct specificity"> + <meta name="assert" content="This tests that the :is() selector chooses the correct specificity"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <style> @@ -13,7 +13,7 @@ height: 10px; width: 10px; } - :matches(.a, .b.c + .d, .e) + :matches(* + .p, .q.r + .s, * + .t) + #target { + :is(.a, .b.c + .d, .e) + :is(* + .p, .q.r + .s, * + .t) + #target { height: 20px; width: 20px; } @@ -34,7 +34,7 @@ assert_equals(getComputedStyle(target).width, "30px"); assert_equals(getComputedStyle(target).height, "20px"); assert_equals(getComputedStyle(target).fontSize, "10px"); - }, "Test :matches() uses highest possible specificity"); + }, "Test :is() uses highest possible specificity"); </script> </body> diff --git a/tests/wpt/web-platform-tests/css/support/computed-testcommon.js b/tests/wpt/web-platform-tests/css/support/computed-testcommon.js index 0999418e748..2cc19c176fa 100644 --- a/tests/wpt/web-platform-tests/css/support/computed-testcommon.js +++ b/tests/wpt/web-platform-tests/css/support/computed-testcommon.js @@ -13,10 +13,16 @@ function test_computed_value(property, specified, computed) { if (!computed) computed = specified; test(() => { + const target = document.getElementById('target'); if (!getComputedStyle(target)[property]) return; target.style[property] = ''; target.style[property] = specified; assert_equals(getComputedStyle(target)[property], computed); + if (computed !== specified) { + target.style[property] = ''; + target.style[property] = computed; + assert_equals(getComputedStyle(target)[property], computed, 'computed value should round-trip'); + } }, "Property " + property + " value '" + specified + "' computes to '" + computed + "'"); } diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html new file mode 100644 index 00000000000..b45d8c3d448 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/experimental-features/resources/common.js"></script> +<title> 'layout-animations' Policy : violation reports from javascript +</title> +<body> +<script> + test(() => { + document.policy.allowedFeatures().forEach((enabled_feature) => { + assert_not_equals(enabled_feature, "layout-animations"); + }); + }, + "Verify 'layout-animations' is not in document's feature list."); + + promise_test(async () => { + let promise = wait_for_violation_in_file( + "layout-animations", + "animation-property-height.js"); + let script = document.createElement("script"); + script.src = "/feature-policy/experimental-features/resources/" + + "animation-property-height.js"; + document.body.appendChild(script); + await promise; + }, + "Verify that when 'layout-animations' is disabled, an 'element.animate' " + + "API including a keyframe that uses a blocked property generates violation " + + "report (linked scripts)."); + + promise_test(async () => { + let promise = wait_for_violation_in_file( + "layout-animations", + "layout-animations-disabled-violation-report-js-tentative.html"); + let div = document.createElement("div"); + document.body.appendChild(div); + div.animate([{width: "100px"}, {width: "200px"}]); + await promise; + }, + "Verify that when 'layout-animations' is disabled, an 'element.animate' " + + "API including a keyframe that uses a blocked property generates violation " + + "report (inline scripts)."); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.headers b/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.headers new file mode 100644 index 00000000000..7c441bbba55 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html.headers @@ -0,0 +1 @@ +Feature-Policy: layout-animations 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html new file mode 100644 index 00000000000..0701c50f6ca --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/feature-policy/experimental-features/resources/common.js"></script> +<title> 'layout-animations' Policy : violation reports from CSS keyframes +</title> +<body> +<script> + test(() => { + document.policy.allowedFeatures().forEach((enabled_feature) => { + assert_not_equals(enabled_feature, "layout-animations"); + }); + }, + "Sanity-check: 'layout-animations' is not in document's feature list."); + + promise_test(async () => { + let promise = wait_for_violation_in_file( + "layout-animations", null /* source not specified */); + let style = document.createElement("style"); + style.innerHTML = `@keyframes animation_property_top { + from { top: 0px } + to { top: 100px } + }`; + document.body.appendChild(style); + await promise; + }, + "Verify that when 'layout-animations' is disabled, a keyframes which " + + "includes a blocked property generates violation report."); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.headers b/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.headers new file mode 100644 index 00000000000..7c441bbba55 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html.headers @@ -0,0 +1 @@ +Feature-Policy: layout-animations 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/animation-property-height.js b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/animation-property-height.js new file mode 100644 index 00000000000..79316cb488f --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/animation-property-height.js @@ -0,0 +1,3 @@ +let div = document.createElement("div"); +document.body.appendChild(div); +div.animate([{"height": "0px"}, {"height": "100px"}]); diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/common.js b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/common.js index 64cfca59d6c..42790b8a2e7 100644 --- a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/common.js +++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/common.js @@ -64,4 +64,29 @@ function wait_for_load(e) { return new Promise((resolve) => { e.addEventListener("load", resolve); }); -}
\ No newline at end of file +} + +window.reporting_observer_instance = new ReportingObserver((reports, observer) => { + if (window.reporting_observer_callback) { + reports.forEach(window.reporting_observer_callback); + } +}, {types: ["feature-policy"]}); +window.reporting_observer_instance.observe(); +window.reporting_observer_callback = null; + +// Waits for a violation in |feature| and source file containing |file_name|. +function wait_for_violation_in_file(feature, file_name) { + return new Promise( (resolve) => { + assert_equals(null, window.reporting_observer_callback); + window.reporting_observer_callback = (report) => { + var feature_match = (feature === report.body.feature); + var file_name_match = + !file_name || + (report.body.sourceFile.indexOf(file_name) !== -1); + if (feature_match && file_name_match) { + window.reporting_observer_callback = null; + resolve(report); + } + }; + }); +} diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/camera-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-report-only.https.html new file mode 100644 index 00000000000..26488687e6f --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-report-only.https.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + <script src='/resources/testdriver.js'></script> + <script src="/resources/testdriver-vendor.js"></script> + </head> + <body> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "camera"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + await test_driver.bless('Activate document for user media'); + await navigator.mediaDevices.getUserMedia({video: true}); + check_report_format(await report); +}, "Camera report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/camera-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-report-only.https.html.headers new file mode 100644 index 00000000000..46b84811f55 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: camera-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html index 14b2ed1d37c..ced585139b3 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html @@ -10,17 +10,18 @@ var t = async_test("Camera Report Format"); var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "camera"); + assert_equals(report.body.featureId, "camera"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); navigator.mediaDevices.getUserMedia({video: true}).then( t.unreached_func("UserMedia camera access should not be allowed in this document.") diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-report-only.html b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-report-only.html new file mode 100644 index 00000000000..ab0bb827166 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-report-only.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "document-write"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + document.write("This should be written into the document"); + check_report_format(await report); +}, "Document-write report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-report-only.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-report-only.html.headers new file mode 100644 index 00000000000..63e43f1d719 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-report-only.html.headers @@ -0,0 +1 @@ +Feature-Policy: document-write-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html index cb08b8d72d1..93672fac35b 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html @@ -10,17 +10,18 @@ var t = async_test("Document-write Report Format"); var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "document-write"); + assert_equals(report.body.featureId, "document-write"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); t.step_func(() => { assert_throws('NotAllowedError', diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-report-only.https.html new file mode 100644 index 00000000000..20e44b2fd5d --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-report-only.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "encrypted-media"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + await navigator.requestMediaKeySystemAccess("org.w3.clearkey", + [{ + initDataTypes: ["webm"], + videoCapabilities: [{contentType: 'video/webm;codecs="vp8"'}], + }]); + check_report_format(await report); +}, "Encrypted Media report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-report-only.https.html.headers new file mode 100644 index 00000000000..a2c8fbb4425 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: encrypted-media-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-reporting.https.html index d309d5390f1..c3b63936b3a 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/encrypted-media-reporting.https.html @@ -11,6 +11,7 @@ var check_report_format = (reports, observer) => { assert_equals(report.type, "feature-policy"); assert_equals(report.url, document.location.href); assert_equals(report.body.feature, "encrypted-media"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-report-only.html b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-report-only.html new file mode 100644 index 00000000000..a6b3d5adeed --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-report-only.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + <script src='/resources/testdriver.js'></script> + <script src="/resources/testdriver-vendor.js"></script> + </head> + <body> + <div id='fs'></div> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "fullscreen"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + await test_driver.bless('Activate document for fullscreen'); + await document.getElementById('fs').requestFullscreen(); + check_report_format(await report); + document.exitFullscreen(); +}, "Fullscreen report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-report-only.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-report-only.html.headers new file mode 100644 index 00000000000..33defa88f6e --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-report-only.html.headers @@ -0,0 +1 @@ +Feature-Policy: fullscreen-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html index 83d97c91fab..4190fdd1926 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html @@ -9,18 +9,19 @@ <script> var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "fullscreen"); + assert_equals(report.body.featureId, "fullscreen"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; async_test(t => { new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); document.getElementById('fs').requestFullscreen().then(t.unreached_func( "Fullscreen should not be allowed in this document.")).catch(()=>{}); }, "Fullscreen Report Format"); diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-report-only.https.html new file mode 100644 index 00000000000..deb6adeb736 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-report-only.https.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var sensor_features_verified = { + "accelerometer": false, + "ambient-light-sensor": false, + "magnetometer": false, + "gyroscope": false +}; + +var check_report_format = function(reports, observer) { + // Check each report in this batch. This observer callback may be called + // multiple times before all reports have been processed. + for (const report of reports) { + + // Validate that the reported feature is one of the sensor features, and that + // we have not seen a report for this feature before. + assert_true(sensor_features_verified.hasOwnProperty(report.body.feature)); + assert_false(sensor_features_verified[report.body.feature]); + + // Validate the remainder of the report + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.disposition, "report"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); + + sensor_features_verified[report.body.feature] = true; + } + + // Test is only done when reports for all features have been seen + for (let result of Object.values(sensor_features_verified)) { + if (!result) + return; + } + this.done(); +}; + +async_test(t => { + new ReportingObserver(t.step_func(check_report_format), + {types: ['feature-policy']}).observe(); + new Accelerometer(); + new AmbientLightSensor(); + new Gyroscope(); + new Magnetometer(); +}, "Generic Sensor report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-report-only.https.html.headers new file mode 100644 index 00000000000..26605eb0fa6 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: ambient-light-sensor-report-only 'none'; accelerometer-report-only 'none'; gyroscope-report-only 'none'; magnetometer-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-reporting.https.html index c60e3e81a1d..517c7f68721 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/generic-sensor-reporting.https.html @@ -26,6 +26,7 @@ var check_report_format = function(reports, observer) { // Validate the remainder of the report assert_equals(report.type, "feature-policy"); assert_equals(report.url, document.location.href); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-report-only.https.html new file mode 100644 index 00000000000..cf2a75b766c --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-report-only.https.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "geolocation"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + try { + await new Promise((resolve, reject) => { + navigator.geolocation.getCurrentPosition(resolve, reject); + }); + check_report_format(await report); + } catch (err) { + // In case the getCurrentPosition call was rejected due to user permissions, + // the report should be generated anyway. Wait for it and check the format + // before failing this test. + check_report_format(await report); + throw err; + } +}, "Geolocation report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-report-only.https.html.headers new file mode 100644 index 00000000000..fc9859000f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: geolocation-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html index 22e258563b7..05445fc1f1c 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html @@ -10,17 +10,19 @@ var t = async_test("Geolocation Report Format"); var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "geolocation"); + assert_equals(report.body.featureId, "geolocation"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); navigator.geolocation.getCurrentPosition( t.unreached_func("geolocation should be disabled in this document"), diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-report-only.https.html new file mode 100644 index 00000000000..2d7b4d960d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-report-only.https.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + <script src='/resources/testdriver.js'></script> + <script src="/resources/testdriver-vendor.js"></script> + </head> + <body> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "microphone"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + await test_driver.bless('Activate document for user media'); + await navigator.mediaDevices.getUserMedia({audio: true}); + check_report_format(await report); +}, "Microphone report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-report-only.https.html.headers new file mode 100644 index 00000000000..7673d05b948 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: microphone-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html index 7347a2332bc..246484fd6cf 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html @@ -10,17 +10,18 @@ var t = async_test("Microphone Report Format"); var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "microphone"); + assert_equals(report.body.featureId, "microphone"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); navigator.mediaDevices.getUserMedia({audio: true}).then( t.unreached_func("UserMedia microphone access should not be allowed in this document.") diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/midi-report-only.html b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-report-only.html new file mode 100644 index 00000000000..e466ce0dc41 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-report-only.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "midi"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + try { + await navigator.requestMIDIAccess(); + check_report_format(await report); + } catch (err) { + // In case the requestMIDIAccess call was rejected due to user permissions, + // the report should be generated anyway. Wait for it and check the format + // before failing this test. + check_report_format(await report); + throw err; + } +}, "MIDI report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/midi-report-only.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-report-only.html.headers new file mode 100644 index 00000000000..3c6a2d4fbb3 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-report-only.html.headers @@ -0,0 +1 @@ +Feature-Policy: midi-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html index 8303b7adce4..c5627e5a213 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html @@ -8,19 +8,20 @@ <script> var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "midi"); + assert_equals(report.body.featureId, "midi"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; promise_test(async (t) => { const report = new Promise(resolve => { new ReportingObserver((reports, observer) => resolve([reports, observer]), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); }); await promise_rejects(t, 'SecurityError', navigator.requestMIDIAccess(), "MIDI device access should not be allowed in this document."); diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/payment-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-report-only.https.html new file mode 100644 index 00000000000..6a7678b51e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-report-only.https.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "payment"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + try { + const request = new PaymentRequest( + [{ supportedMethods: 'basic-card' }], + { total: { label: 'Total', amount: { currency: 'USD', value: 0 }}}, + {}); + await request.show() + check_report_format(await report); + } catch (err) { + // In case the show call was rejected, the report should be generated + // anyway. Wait for it and check the format before failing this test. + check_report_format(await report); + throw err; + } +}, "PaymentRequest report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/payment-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-report-only.https.html.headers new file mode 100644 index 00000000000..6411478e4ca --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: payment-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html index 03eaebea58f..828054a6caf 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html @@ -10,17 +10,18 @@ var t = async_test("PaymentRequest Report Format"); var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "payment"); + assert_equals(report.body.featureId, "payment"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); t.step_func(() => { assert_throws('SecurityError', diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-report-only.html b/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-report-only.html new file mode 100644 index 00000000000..157670f2cab --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-report-only.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/common/media.js'></script> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src='../resources/picture-in-picture.js'></script> + </head> + <body> + <script> +const check_report_format = ([reports, observer]) => { + const report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "picture-in-picture"); + assert_equals(report.body.disposition, "report"); +}; + +const loadVideo = () => new Promise(resolve => { + const video = document.createElement('video'); + video.src = getVideoURI('/media/movie_5'); + video.addEventListener('loadedmetadata', () => { + resolve(video); + }, { once: true }); +}); + +promise_pip_test(async (t) => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + const videoElement = await loadVideo(); + await test_driver.bless('picture-in-picture'); + await videoElement.requestPictureInPicture(); + check_report_format(await report); +}, "Picture-in-Picture report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-report-only.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-report-only.html.headers new file mode 100644 index 00000000000..0df90a3e94a --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-report-only.html.headers @@ -0,0 +1 @@ +Feature-Policy: picture-in-picture-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-reporting.html index e3cbf103687..f15f47c549d 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-reporting.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/picture-in-picture-reporting.html @@ -15,6 +15,7 @@ const check_report_format = (reports, observer) => { assert_equals(report.type, "feature-policy"); assert_equals(report.url, document.location.href); assert_equals(report.body.feature, "picture-in-picture"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-report-only.html b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-report-only.html new file mode 100644 index 00000000000..f841f63d6ed --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-report-only.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +const check_report_format = ([reports, observer]) => { + const report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "sync-xhr"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + const xhr = new XMLHttpRequest(); + xhr.open("GET", document.location.href, false); + xhr.send(); + check_report_format(await report); +}, "Sync-xhr report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-report-only.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-report-only.html.headers new file mode 100644 index 00000000000..79a82cfb635 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-report-only.html.headers @@ -0,0 +1 @@ +Feature-Policy: sync-xhr-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html index 2c76390847b..82200cdfbcc 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html @@ -10,17 +10,18 @@ var t = async_test("Sync-xhr Report Format"); var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "sync-xhr"); + assert_equals(report.body.featureId, "sync-xhr"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); t.step_func(() => { var xhr = new XMLHttpRequest(); diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html index 8bd79318950..00a15587d44 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html @@ -9,15 +9,15 @@ <script> var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "unsized-media"); + assert_equals(report.body.featureId, "unsized-media"); assert_equals(typeof report.body.message, "string"); }; async_test(t => { new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy'], buffered: true}).observe(); + {types: ['feature-policy-violation'], buffered: true}).observe(); }, "Unsized-media Report Format"); </script> </body> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/usb-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-report-only.https.html new file mode 100644 index 00000000000..e44c6c528fd --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-report-only.https.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + <script src='/resources/testdriver.js'></script> + <script src="/resources/testdriver-vendor.js"></script> + </head> + <body> + <div id='fs'></div> + <script> +var check_report_format = ([reports, observer]) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.body.feature, "usb"); + assert_equals(report.body.disposition, "report"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + await test_driver.bless('Activate document for USB'); + await navigator.usb.getDevices(); + check_report_format(await report); +}, "USB report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/usb-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-report-only.https.html.headers new file mode 100644 index 00000000000..bd2e3c6fe50 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: usb-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html index f90c602e449..0ddff455537 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html @@ -10,17 +10,18 @@ var t = async_test("USB Report Format"); var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "usb"); + assert_equals(report.body.featureId, "usb"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; new ReportingObserver(t.step_func_done(check_report_format), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); navigator.usb.getDevices().then( t.unreached_func("USB device access should not be allowed in this document.") diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/vr-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/vr-report-only.https.html new file mode 100644 index 00000000000..91016d38853 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/vr-report-only.https.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +const check_report_format = ([reports, observer]) => { + const report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "vr"); + assert_equals(report.body.disposition, "report"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + await navigator.getVRDisplays(); + check_report_format(await report); +}, "VR report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/vr-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/vr-report-only.https.html.headers new file mode 100644 index 00000000000..b54cad2af94 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/vr-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: vr-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/vr-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/vr-reporting.https.html index 12cae052a16..e0bb6353117 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/vr-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/vr-reporting.https.html @@ -8,19 +8,20 @@ <script> var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "vr"); + assert_equals(report.body.featureId, "vr"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; promise_test(async (t) => { const report = new Promise(resolve => { new ReportingObserver((reports, observer) => resolve([reports, observer]), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); }); await promise_rejects(t, 'SecurityError', navigator.getVRDisplays(), "VR device access should not be allowed in this document."); diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html new file mode 100644 index 00000000000..5d4fb062c1e --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <script> +const check_report_format = ([reports, observer]) => { + const report = reports[0]; + assert_equals(report.type, "feature-policy"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.feature, "vr"); + assert_equals(report.body.disposition, "report"); + assert_equals(report.body.sourceFile, document.location.href); + assert_equals(typeof report.body.message, "string"); + assert_equals(typeof report.body.lineNumber, "number"); + assert_equals(typeof report.body.columnNumber, "number"); +}; + +promise_test(async t => { + const report = new Promise(resolve => { + new ReportingObserver((reports, observer) => resolve([reports, observer]), + {types: ['feature-policy']}).observe(); + }); + try { + await navigator.xr.requestDevice(); + } catch (err) { + // If no XR devices are available, requestDevice() will throw NotFoundError, + // but the report should be generated anyway. + assert_equals(err.name, 'NotFoundError'); + } + check_report_format(await report); +}, "XR report only mode"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html.headers new file mode 100644 index 00000000000..b54cad2af94 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html.headers @@ -0,0 +1 @@ +Feature-Policy: vr-report-only 'none' diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html index a7a122237bb..0844860ad79 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html @@ -8,19 +8,20 @@ <script> var check_report_format = (reports, observer) => { let report = reports[0]; - assert_equals(report.type, "feature-policy"); + assert_equals(report.type, "feature-policy-violation"); assert_equals(report.url, document.location.href); - assert_equals(report.body.feature, "vr"); + assert_equals(report.body.featureId, "vr"); + assert_equals(report.body.disposition, "enforce"); assert_equals(report.body.sourceFile, document.location.href); - assert_equals(typeof report.body.message, "string"); assert_equals(typeof report.body.lineNumber, "number"); assert_equals(typeof report.body.columnNumber, "number"); + assert_equals(report.body.disposition, "enforce"); }; promise_test(async (t) => { const report = new Promise(resolve => { new ReportingObserver((reports, observer) => resolve([reports, observer]), - {types: ['feature-policy']}).observe(); + {types: ['feature-policy-violation']}).observe(); }); await promise_rejects(t, 'SecurityError', navigator.xr.requestDevice(), "XR device access should not be allowed in this document."); diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html.headers index d021af75636..ea8722131ce 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html.headers +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html.headers @@ -1 +1 @@ -Feature-Policy: vr 'none' +Feature-Policy: xr 'none' diff --git a/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js b/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js index aa6562b7d37..ebf0142e280 100644 --- a/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js +++ b/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js @@ -1,5 +1,32 @@ promise_test(() => fetch("../cors/resources/not-cors-safelisted.json").then(res => res.json().then(runTests)), "Loading data…"); +const longValue = "s".repeat(127); + +[ + { + "headers": ["accept", "accept-language", "content-language"], + "values": [longValue, "", longValue] + }, + { + "headers": ["content-type"], + "values": ["text/plain;" + "s".repeat(116), "text/plain"] + } +].forEach(testItem => { + testItem.headers.forEach(header => { + test(() => { + const noCorsHeaders = new Request("about:blank", { mode: "no-cors" }).headers; + testItem.values.forEach((value) => { + noCorsHeaders.append(header, value); + assert_equals(noCorsHeaders.get(header), testItem.values[0]); + }); + noCorsHeaders.set(header, values.join(", ")); + assert_equals(noCorsHeaders.get(header), testItem.values[0]); + noCorsHeaders.delete(header); + assert_false(noCorsHeaders.has(header)); + }, "\"no-cors\" Headers object cannot have " + header + " set to " + testItem.values.join(", ")); + }); +}); + function runTests(testArray) { testArray = testArray.concat([ ["dpr", "2"], @@ -14,6 +41,8 @@ function runTests(testArray) { const noCorsHeaders = new Request("about:blank", { mode: "no-cors" }).headers; noCorsHeaders.append(headerName, headerValue); assert_false(noCorsHeaders.has(headerName)); + noCorsHeaders.set(headerName, headerValue); + assert_false(noCorsHeaders.has(headerName)); }, "\"no-cors\" Headers object cannot have " + headerName + "/" + headerValue + " as header"); }); } diff --git a/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-css-transition.html b/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-css-transition.html new file mode 100644 index 00000000000..1d50502ee3b --- /dev/null +++ b/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-css-transition.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<title>Transitions should not be stopped by going fullscreen</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<style> + #trans { + transition: color steps(1, end) 100s; + color: green; + } +</style> +<div id="trans">Should be green</div> +<script> + async_test(t => { + document.onfullscreenchange = t.step_func_done(() => { + assert_equals(document.fullscreenElement, trans); + assert_equals(getComputedStyle(trans).color, "rgb(0, 128, 0)", "Transition is in progress - still green"); + }); + trans.addEventListener('click', e => { + trans.style.color = "red"; + trans.offsetTop; + trans.requestFullscreen(); + }, {once: true}); + test_driver.click(trans); + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html new file mode 100644 index 00000000000..95ccb1ff69b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html @@ -0,0 +1,31 @@ +<!doctype html> +<meta charset=utf-8> +<title>input type=date and input type=datetime handle focus state correctly</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/input.html#time-state-(type=time)"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1450219"> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<input type="time"> +<input type="text"> +<script> +let t = async_test("Time input handles focus correctly when value changes"); +window.onload = t.step_func_done(function() { + let time = document.querySelector("input[type=time]"); + let text = document.querySelector("input[type=text]"); + time.focus(); + assert_true(time.matches(":focus")); + assert_equals(document.activeElement, time); + time.value = "08:10:10"; + assert_true(time.matches(":focus")); + assert_equals(document.activeElement, time); + time.value = "08:10"; + assert_true(time.matches(":focus")); + assert_equals(document.activeElement, time); + text.focus(); + assert_true(text.matches(":focus")); + assert_false(time.matches(":focus")); + assert_equals(document.activeElement, text); +}); +</script> diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini index 8edb44d4148..6644d52d1ff 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/elementPosition.html.ini @@ -1,3 +1,3 @@ [elementPosition.html] - [TestDriver actions: element position] - expected: FAIL + expected: + if product == "chrome" or product == "safari" or product == "safari_webdriver": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini index 8c60a97ad95..bfb5c0ae4bd 100644 --- a/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini +++ b/tests/wpt/web-platform-tests/infrastructure/metadata/infrastructure/testdriver/actions/eventOrder.html.ini @@ -1,3 +1,3 @@ [eventOrder.html] - [TestDriver actions: event order] - expected: FAIL + expected: + if product == "chrome" or product == "safari" or product == "safari_webdriver": ERROR diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html index ab9fb31ad09..145852e7b51 100644 --- a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/elementPosition.html @@ -34,7 +34,7 @@ async_test(t => { let div = document.getElementById("test"); let actions = new test_driver.Actions() .pointerMove(0, 0, {origin: test}) - .pointerDown(0, 0, {origin: test}) + .pointerDown() .pointerUp() .send() .then(t.step_func_done(() => assert_array_equals(events, [50, 25]))) diff --git a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html index bd7fef41e9a..c85b861c7fd 100644 --- a/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html +++ b/tests/wpt/web-platform-tests/infrastructure/testdriver/actions/eventOrder.html @@ -17,17 +17,19 @@ let events = []; async_test(t => { Array.prototype.forEach.call(document.getElementsByTagName("button"), - (x) => x.addEventListener("pointerdown", () => {events.push(x.id)})); + (x) => x.addEventListener("mousedown", () => {events.push(x.id)})); let button_a = document.getElementById("a"); let button_b = document.getElementById("b"); let actions = new test_driver.Actions() - .addPointer("pointer1", "touch") - .addPointer("pointer2", "touch") - .pointerDown(0, 0, {origin: button_a, sourceName: "pointer1"}) - .pointerDown(0, 0, {origin: button_b, sourceName: "pointer2"}) - .pointerUp({sourceName: "pointer1"}) + .addPointer("pointer1") + .addPointer("pointer2") + .pointerMove(0, 0, {origin: button_a, sourceName: "pointer1"}) + .pointerMove(0, 0, {origin: button_b, sourceName: "pointer2"}) + .pointerDown({sourceName: "pointer2"}) + .pointerDown({sourceName: "pointer1"}) .pointerUp({sourceName: "pointer2"}) + .pointerUp({sourceName: "pointer1"}) .send() .then(t.step_func_done(() => assert_array_equals(events, ["a", "b"]))) .catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e))); diff --git a/tests/wpt/web-platform-tests/interfaces/geometry.idl b/tests/wpt/web-platform-tests/interfaces/geometry.idl index 733a111e38b..b5b56e78054 100644 --- a/tests/wpt/web-platform-tests/interfaces/geometry.idl +++ b/tests/wpt/web-platform-tests/interfaces/geometry.idl @@ -156,6 +156,8 @@ interface DOMMatrixReadOnly { optional unrestricted double originX = 0, optional unrestricted double originY = 0, optional unrestricted double originZ = 0); + [NewObject] DOMMatrix scaleNonUniform(optional unrestricted double scaleX = 1, + optional unrestricted double scaleY = 1); [NewObject] DOMMatrix scale3d(optional unrestricted double scale = 1, optional unrestricted double originX = 0, optional unrestricted double originY = 0, diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 99b1d6a2be1..dd90081c83e 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -311,6 +311,7 @@ SET TIMEOUT: resources/test/tests/functional/add_cleanup_async_rejection.html SET TIMEOUT: resources/test/tests/functional/add_cleanup_async_rejection_after_load.html SET TIMEOUT: resources/test/tests/functional/api-tests-1.html SET TIMEOUT: resources/test/tests/functional/worker.js +SET TIMEOUT: resources/test/tests/functional/worker-uncaught-allow.js SET TIMEOUT: resources/test/tests/unit/exceptional-cases.html SET TIMEOUT: resources/testharness.js diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-attributes.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-attributes.html index 6af90cd9eef..b5d44b0db5d 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-attributes.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-attributes.html @@ -32,7 +32,7 @@ 'Exactly one attribution entry is expected'); const attribution = longtask.attribution[0]; assert_equals(attribution.entryType, 'taskattribution'); - assert_equals(attribution.name, 'script'); + assert_equals(attribution.name, 'unknown'); assert_equals(attribution.duration, 0); assert_equals(attribution.startTime, 0); assert_equals(attribution.containerId, ''); @@ -52,4 +52,4 @@ }, 'Performance longtask entries are observable.'); </script> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-childiframe-crossorigin.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-childiframe-crossorigin.html index 17b0fd2412b..aaabce5d79d 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-childiframe-crossorigin.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-childiframe-crossorigin.html @@ -33,7 +33,7 @@ 'Exactly one attribution entry is expected'); const attribution = longtask.attribution[0]; assert_equals(attribution.entryType, 'taskattribution'); - assert_equals(attribution.name, 'script'); + assert_equals(attribution.name, 'unknown'); assert_equals(attribution.duration, 0); assert_equals(attribution.startTime, 0); assert_equals(attribution.containerId, 'child-iframe-id'); diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-childiframe.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-childiframe.html index b7137043ad0..34b802cb696 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-childiframe.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-childiframe.html @@ -38,7 +38,7 @@ 'Exactly one attribution entry is expected'); const attribution = longtask.attribution[0]; assert_equals(attribution.entryType, 'taskattribution'); - assert_equals(attribution.name, 'script'); + assert_equals(attribution.name, 'unknown'); assert_equals(attribution.duration, 0); assert_equals(attribution.startTime, 0); assert_equals(attribution.containerId, 'child-iframe-id'); diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-externalscript.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-externalscript.html index 51c58afff05..076f0f22914 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-externalscript.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-externalscript.html @@ -29,7 +29,7 @@ 'Exactly one attribution entry is expected'); const attribution = longtask.attribution[0]; assert_equals(attribution.entryType, 'taskattribution'); - assert_equals(attribution.name, 'script'); + assert_equals(attribution.name, 'unknown'); assert_equals(attribution.duration, 0); assert_equals(attribution.startTime, 0); assert_equals(attribution.containerId, ''); @@ -47,4 +47,4 @@ } }, 'Performance longtask entries are observable.'); </script> -</body>
\ No newline at end of file +</body> diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-parentiframe.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-parentiframe.html index 2e7a9990dd0..778edc1000f 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-parentiframe.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-parentiframe.html @@ -15,7 +15,7 @@ window.addEventListener('message', t.step_func(e => { assert_equals(e.data['entryType'], 'longtask'); assert_equals(e.data['frame-attribution'], 'same-origin-ancestor'); - assert_equals(e.data['task-attribution'], 'script'); + assert_equals(e.data['task-attribution'], 'unknown'); assert_equals(e.data['containerId'], ''); assert_equals(e.data['containerName'], ''); assert_equals(e.data['containerSrc'], ''); diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-raf.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-raf.html index 8a5a7290ac9..2d30ac36b96 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-raf.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-raf.html @@ -29,7 +29,7 @@ 'Exactly one attribution entry is expected'); const attribution = longtask.attribution[0]; assert_equals(attribution.entryType, 'taskattribution'); - assert_equals(attribution.name, 'script'); + assert_equals(attribution.name, 'unknown'); assert_equals(attribution.duration, 0); assert_equals(attribution.startTime, 0); assert_equals(attribution.containerId, ''); diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-sibling-iframe-crossorigin.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-sibling-iframe-crossorigin.html index cfcc1895a19..b73112e3abf 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-sibling-iframe-crossorigin.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-sibling-iframe-crossorigin.html @@ -15,7 +15,7 @@ window.addEventListener('message', t.step_func(e => { assert_equals(e.data['entryType'], 'longtask'); assert_equals(e.data['frame-attribution'], 'cross-origin-unreachable'); - assert_equals(e.data['task-attribution'], 'script'); + assert_equals(e.data['task-attribution'], 'unknown'); assert_equals(e.data['containerId'], ''); assert_equals(e.data['containerName'], ''); assert_equals(e.data['containerSrc'], ''); diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-sibling-iframe.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-sibling-iframe.html index e6041e48a66..b8a4270163a 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-sibling-iframe.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-sibling-iframe.html @@ -15,7 +15,7 @@ window.addEventListener('message', t.step_func(e => { assert_equals(e.data['entryType'], 'longtask'); assert_equals(e.data['frame-attribution'], 'same-origin'); - assert_equals(e.data['task-attribution'], 'script'); + assert_equals(e.data['task-attribution'], 'unknown'); assert_equals(e.data['containerId'], 'longtask-iframe-id'); assert_equals(e.data['containerName'], 'longtask-iframe-name'); assert_equals(e.data['containerSrc'], 'resources/subframe-with-longtask.html'); diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove-manual.html index 4b168439a4e..cf1a1ee4ee8 100644 --- a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove.html +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove-manual.html @@ -7,9 +7,6 @@ <link rel="stylesheet" type="text/css" href="pointerevent_styles.css"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> - <script src="/resources/testdriver.js"></script> - <script src="/resources/testdriver-actions.js"></script> - <script src="/resources/testdriver-vendor.js"></script> <!-- Additional helper script for common checks across event types --> <script type="text/javascript" src="pointerevent_support.js"></script> </head> @@ -35,9 +32,6 @@ eventTested = true; } }); - - // Inject the inputs to run this test. - new test_driver.Actions().pointerMove(0, 0, {origin: target0}).send(); } </script> <h1>Pointer Events pointermove Tests</h1> diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-dedicated-uncaught-allow.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-dedicated-uncaught-allow.html new file mode 100644 index 00000000000..33543d0b4e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-dedicated-uncaught-allow.html @@ -0,0 +1,48 @@ +<!DOCTYPE HTML> +<html> +<head> +<meta name="variant" content=""> +<meta name="variant" content="?keep-promise"> +<title>Dedicated Worker Tests - Allowed Uncaught Exception</title> +<script src="../../variants.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<h1>Dedicated Web Worker Tests - Allowed Uncaught Exception</h1> +<p>Demonstrates running <tt>testharness</tt> based tests inside a dedicated web worker. +<p>The test harness is expected to pass despite an uncaught exception in a worker because that worker is configured to allow uncaught exceptions.</p> +<div id="log"></div> + +<script> +test(function(t) { + assert_true("Worker" in self, "Browser should support Workers"); + }, + "Browser supports Workers"); + +fetch_tests_from_worker(new Worker("worker-uncaught-allow.js")); +</script> +<script type="text/json" id="expected"> +{ + "summarized_status": { + "status_string": "OK", + "message": null + }, + "summarized_tests": [ + { + "status_string": "PASS", + "name": "Browser supports Workers", + "properties": {}, + "message": null + }, + { + "status_string": "PASS", + "name": "onerror event is triggered", + "properties": {}, + "message": null + } + ], + "type": "complete" +} +</script> +</body> diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-allow.js b/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-allow.js new file mode 100644 index 00000000000..957131a890e --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/worker-uncaught-allow.js @@ -0,0 +1,17 @@ +importScripts("/resources/testharness.js"); + +setup({allow_uncaught_exception:true}); + +async_test(function(t) { + onerror = function() { + // Further delay the test's completion to ensure that the worker's + // `onerror` handler does not influence results in the parent context. + setTimeout(function() { + t.done(); + }, 0); + }; + + setTimeout(function() { + throw new Error("This error is expected."); + }, 0); +}, 'onerror event is triggered'); diff --git a/tests/wpt/web-platform-tests/resources/testdriver-actions.js b/tests/wpt/web-platform-tests/resources/testdriver-actions.js index 82cac85347b..46c68858e45 100644 --- a/tests/wpt/web-platform-tests/resources/testdriver-actions.js +++ b/tests/wpt/web-platform-tests/resources/testdriver-actions.js @@ -22,14 +22,6 @@ } Actions.prototype = { - ButtonType: { - LEFT: 0, - MIDDLE: 1, - RIGHT: 2, - BACK: 3, - FORWARD: 4, - }, - /** * Generate the action sequence suitable for passing to * test_driver.action_sequence @@ -106,7 +98,7 @@ * @returns {Actions} */ addKeyboard: function(name, set=true) { - this.createSource("key", name); + this.createSource("key", name, true); if (set) { this.setKeyboard(name); } @@ -133,7 +125,7 @@ * @returns {Actions} */ addPointer: function(name, pointerType="mouse", set=true) { - this.createSource("pointer", name, {pointerType: pointerType}); + this.createSource("pointer", name, true, {pointerType: pointerType}); if (set) { this.setPointer(name); } @@ -233,9 +225,9 @@ * pointer source * @returns {Actions} */ - pointerDown: function(x, y, {origin="viewport", button=this.ButtonType.LEFT, sourceName=null}={}) { + pointerDown: function({button=0, sourceName=null}={}) { let source = this.getSource("pointer", sourceName); - source.pointerDown(this, button, x, y, origin); + source.pointerDown(this, button); return this; }, @@ -247,7 +239,7 @@ * source * @returns {Actions} */ - pointerUp: function({button=this.ButtonType.LEFT, sourceName=null}={}) { + pointerUp: function({button=0, sourceName=null}={}) { let source = this.getSource("pointer", sourceName); source.pointerUp(this, button); return this; @@ -367,12 +359,12 @@ return data; }, - pointerDown: function(actions, button, x, y, origin) { + pointerDown: function(actions, button) { let tick = actions.tickIdx; if (this.actions.has(tick)) { tick = actions.addTick().tickIdx; } - this.actions.set(tick, {type: "pointerDown", button, x, y, origin}); + this.actions.set(tick, {type: "pointerDown", button}); }, pointerUp: function(actions, button) { diff --git a/tests/wpt/web-platform-tests/resources/testdriver.js b/tests/wpt/web-platform-tests/resources/testdriver.js index 8ffd765072c..e0741e8d61d 100644 --- a/tests/wpt/web-platform-tests/resources/testdriver.js +++ b/tests/wpt/web-platform-tests/resources/testdriver.js @@ -192,7 +192,7 @@ * @returns {Promise} fufiled after the actions are performed, or rejected in * the cases the WebDriver command errors */ - action_sequence: function(actions) { + action_sequence(actions) { return window.test_driver_internal.action_sequence(actions); } }; @@ -233,7 +233,7 @@ /** * Send a sequence of pointer actions * - * @returns {Promise} fulfilled after actions are sent, rejected if any actions + * @returns {Promise} fufilled after actions are sent, rejected if any actions * fail */ action_sequence: function(actions) { diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index 18a6f70beab..2e14c30730d 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -1904,7 +1904,9 @@ policies and contribution forms [3]. */ function RemoteContext(remote, message_target, message_filter) { this.running = true; + this.started = false; this.tests = new Array(); + this.early_exception = null; var this_obj = this; // If remote context is cross origin assigning to onerror is not @@ -1943,6 +1945,21 @@ policies and contribution forms [3]. } RemoteContext.prototype.remote_error = function(error) { + if (error.preventDefault) { + error.preventDefault(); + } + + // Defer interpretation of errors until the testing protocol has + // started and the remote test's `allow_uncaught_exception` property + // is available. + if (!this.started) { + this.early_exception = error; + } else if (!this.allow_uncaught_exception) { + this.report_uncaught(error); + } + }; + + RemoteContext.prototype.report_uncaught = function(error) { var message = error.message || String(error); var filename = (error.filename ? " " + error.filename: ""); // FIXME: Display remote error states separately from main document @@ -1950,9 +1967,14 @@ policies and contribution forms [3]. tests.set_status(tests.status.ERROR, "Error in remote" + filename + ": " + message, error.stack); + }; - if (error.preventDefault) { - error.preventDefault(); + RemoteContext.prototype.start = function(data) { + this.started = true; + this.allow_uncaught_exception = data.properties.allow_uncaught_exception; + + if (this.early_exception && !this.allow_uncaught_exception) { + this.report_uncaught(this.early_exception); } }; @@ -2002,6 +2024,7 @@ policies and contribution forms [3]. }; RemoteContext.prototype.message_handlers = { + start: RemoteContext.prototype.start, test_state: RemoteContext.prototype.test_state, result: RemoteContext.prototype.test_done, complete: RemoteContext.prototype.remote_done diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get.https.html index 68c6d7f7ac0..b0527403908 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/clients-get.https.html @@ -49,6 +49,162 @@ promise_test(function(t) { }); }, 'Test Clients.get()'); +promise_test((t) => { + let frame = null; + const scope = 'resources/simple.html'; + const outerSwContainer = navigator.serviceWorker; + let innerSwReg = null; + let innerSw = null; + + return service_worker_unregister_and_register( + t, 'resources/clients-get-resultingClientId-worker.js', scope) + .then((registration) => { + innerSwReg = registration; + add_completion_callback(function() { registration.unregister(); }); + return wait_for_state(t, registration.installing, 'activated'); + }) + .then(() => { + // load frame and get resulting client id + let channel = new MessageChannel(); + innerSw = innerSwReg.active; + + let p = new Promise(resolve => { + function getResultingClientId(e) { + if (e.data.msg == 'getResultingClientId') { + const { resultingClientId } = e.data; + + channel.port1.removeEventListener('message', getResultingClientId); + + resolve({ resultingClientId, port: channel.port1 }); + } + } + + channel.port1.onmessage = getResultingClientId; + }); + + + return with_iframe(scope).then((iframe) => { + innerSw.postMessage( + { port: channel.port2, msg: 'getResultingClientId' }, + [channel.port2], + ); + + frame = iframe; + frame.focus(); + add_completion_callback(() => iframe.remove()); + + return p; + }); + }) + .then(({ resultingClientId, port }) => { + // query service worker for clients.get(resultingClientId) + let channel = new MessageChannel(); + + let p = new Promise(resolve => { + function getIsResultingClientUndefined(e) { + if (e.data.msg == 'getIsResultingClientUndefined') { + let { isResultingClientUndefined } = e.data; + + port.removeEventListener('message', getIsResultingClientUndefined); + + resolve(isResultingClientUndefined); + } + } + + port.onmessage = getIsResultingClientUndefined; + }); + + innerSw.postMessage( + { port: channel.port2, msg: 'getIsResultingClientUndefined', resultingClientId }, + [channel.port2], + ); + + return p; + }) + .then((isResultingClientUndefined) => { + assert_false(isResultingClientUndefined, 'Clients.get(FetchEvent.resultingClientId) resolved with a Client'); + }); +}, 'Test successful Clients.get(FetchEvent.resultingClientId)'); + +promise_test((t) => { + const scope = 'resources/simple.html?fail'; + const outerSwContainer = navigator.serviceWorker; + let innerSwReg = null; + let innerSw = null; + + return service_worker_unregister_and_register( + t, 'resources/clients-get-resultingClientId-worker.js', scope) + .then((registration) => { + innerSwReg = registration; + add_completion_callback(function() { registration.unregister(); }); + return wait_for_state(t, registration.installing, 'activated'); + }) + .then(() => { + // load frame, destroying it while loading, and get resulting client id + innerSw = innerSwReg.active; + + let iframe = document.createElement('iframe'); + iframe.className = 'test-iframe'; + iframe.src = scope; + + function destroyIframe(e) { + if (e.data.msg == 'destroyResultingClient') { + iframe.remove(); + iframe = null; + + innerSw.postMessage({ msg: 'resultingClientDestroyed' }); + } + } + + outerSwContainer.addEventListener('message', destroyIframe); + + let p = new Promise(resolve => { + function resultingClientDestroyedAck(e) { + if (e.data.msg == 'resultingClientDestroyedAck') { + let { resultingDestroyedClientId } = e.data; + + outerSwContainer.removeEventListener('message', resultingClientDestroyedAck); + resolve(resultingDestroyedClientId); + } + } + + outerSwContainer.addEventListener('message', resultingClientDestroyedAck); + }); + + document.body.appendChild(iframe); + + return p; + }) + .then((resultingDestroyedClientId) => { + // query service worker for clients.get(resultingDestroyedClientId) + let channel = new MessageChannel(); + + let p = new Promise((resolve, reject) => { + function getIsResultingClientUndefined(e) { + if (e.data.msg == 'getIsResultingClientUndefined') { + let { isResultingClientUndefined } = e.data; + + channel.port1.removeEventListener('message', getIsResultingClientUndefined); + + resolve(isResultingClientUndefined); + } + } + + channel.port1.onmessage = getIsResultingClientUndefined; + }); + + innerSw.postMessage( + { port: channel.port2, msg: 'getIsResultingClientUndefined', resultingClientId: resultingDestroyedClientId }, + [channel.port2], + ); + + return p; + }) + .then((isResultingClientUndefined) => { + assert_true(isResultingClientUndefined, 'Clients.get(FetchEvent.resultingClientId) resolved with `undefined`'); + }); +}, 'Test unsuccessful Clients.get(FetchEvent.resultingClientId)'); + function wait_for_clientId() { return new Promise(function(resolve, reject) { function get_client_id(e) { diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html index 78e099b8b55..169a0b17d62 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/fetch-event.https.html @@ -116,7 +116,6 @@ promise_test(t => { }) .then(function(response) { return response.text(); }) .then(function(response_text) { - var new_client_id = response_text.substr(17); assert_equals( response_text.substr(0, 15), 'Client ID Found', @@ -125,6 +124,28 @@ promise_test(t => { }, 'Service Worker responds to fetch event with an existing client id'); promise_test(t => { + const page_url = 'resources/simple.html?resultingClientId'; + const expected_found = 'Resulting Client ID Found'; + const expected_not_found = 'Resulting Client ID Not Found'; + return with_iframe(page_url) + .then(function(frame) { + t.add_cleanup(() => { frame.remove(); }); + assert_equals( + frame.contentDocument.body.textContent.substr(0, expected_found.length), + expected_found, + 'Service Worker should respond with an existing resulting client id for non-subresource requests'); + return frame.contentWindow.fetch('resources/other.html?resultingClientId'); + }) + .then(function(response) { return response.text(); }) + .then(function(response_text) { + assert_equals( + response_text.substr(0), + expected_not_found, + 'Service Worker should respond with an empty resulting client id for subresource requests'); + }); + }, 'Service Worker responds to fetch event with the correct resulting client id'); + +promise_test(t => { const page_url = 'resources/simple.html?ignore'; return with_iframe(page_url) .then(function(frame) { diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/import-module-scripts.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/import-module-scripts.https.html index e82911a1bd0..7bca8de64f5 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/import-module-scripts.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/import-module-scripts.https.html @@ -13,6 +13,7 @@ function import_test(testCase) { navigator.serviceWorker.onmessage = resolve; }); await service_worker_unregister(t, testCase.scriptURL); + t.add_cleanup(() => service_worker_unregister(t, testCase.scriptURL)); const registration = await navigator.serviceWorker.register( testCase.scriptURL, { scope: testCase.scriptURL, type: 'module' }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-resultingClientId-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-resultingClientId-worker.js new file mode 100644 index 00000000000..153a8e3f5b9 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/clients-get-resultingClientId-worker.js @@ -0,0 +1,64 @@ +let savedPort = null; +let savedResultingClientId = null; + +async function destroyResultingClient(e) { + const outer = await self.clients.matchAll({ type: 'window', includeUncontrolled: true }) + .then((clientList) => { + for (let c of clientList) { + if (c.url.endsWith('clients-get.https.html')) { + c.focus(); + return c; + } + } + }); + + const p = new Promise(resolve => { + function resultingClientDestroyed(evt) { + if (evt.data.msg == 'resultingClientDestroyed') { + self.removeEventListener('message', resultingClientDestroyed); + resolve(outer); + } + } + + self.addEventListener('message', resultingClientDestroyed); + }); + + outer.postMessage({ msg: 'destroyResultingClient' }); + + return await p; +} + +self.addEventListener('fetch', async (e) => { + let { resultingClientId } = e; + savedResultingClientId = resultingClientId; + + if (e.request.url.endsWith('simple.html?fail')) { + e.waitUntil(new Promise(async (resolve) => { + let outer = await destroyResultingClient(e); + + outer.postMessage({ msg: 'resultingClientDestroyedAck', + resultingDestroyedClientId: savedResultingClientId }); + resolve(); + })); + } else { + e.respondWith(fetch(e.request)); + } +}); + +self.addEventListener('message', (e) => { + let { msg, port, resultingClientId } = e.data; + savedPort = savedPort || port; + + if (msg == 'getIsResultingClientUndefined') { + self.clients.get(resultingClientId).then((client) => { + let isUndefined = typeof client == 'undefined'; + savedPort.postMessage({ msg: 'getIsResultingClientUndefined', + isResultingClientUndefined: isUndefined }); + }); + } + + if (msg == 'getResultingClientId') { + savedPort.postMessage({ msg: 'getResultingClientId', + resultingClientId: savedResultingClientId }); + } +}); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js index d503a6609d6..0a52a8201ea 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/fetch-event-test-worker.js @@ -37,6 +37,16 @@ function handleClientId(event) { event.respondWith(new Response(body)); } +function handleResultingClientId(event) { + var body; + if (event.resultingClientId !== "") { + body = 'Resulting Client ID Found: ' + event.resultingClientId; + } else { + body = 'Resulting Client ID Not Found'; + } + event.respondWith(new Response(body)); +} + function handleNullBody(event) { event.respondWith(new Response()); } @@ -155,6 +165,7 @@ self.addEventListener('fetch', function(event) { { pattern: '?referrerPolicy', fn: handleReferrerPolicy }, { pattern: '?referrer', fn: handleReferrer }, { pattern: '?clientId', fn: handleClientId }, + { pattern: '?resultingClientId', fn: handleResultingClientId }, { pattern: '?ignore', fn: function() {} }, { pattern: '?null', fn: handleNullBody }, { pattern: '?fetch', fn: handleFetch }, diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-scope.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-scope.js index 51b0ab4ad51..6c097ad8d1f 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-scope.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-scope.js @@ -94,9 +94,9 @@ function registration_tests_scope(register_method, check_error_types) { var script = 'resources/empty-worker.js'; var scope = 'filesystem:' + normalizeURL('resources/scope/filesystem-scope-url'); return promise_rejects(t, - check_error_types ? 'SecurityError' : null, + check_error_types ? new TypeError : null, register_method(script, {scope: scope}), 'Registering with the scope that has same-origin filesystem: URL ' + - 'should fail with SecurityError.'); + 'should fail with TypeError.'); }, 'Scope URL is same-origin filesystem: URL'); } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-security-error.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-security-error.js index c84bb66e042..a72d3bac291 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-security-error.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/registration-tests-security-error.js @@ -70,9 +70,9 @@ function registration_tests_security_error(register_method, check_error_types) { var script = 'filesystem:' + normalizeURL('resources/empty-worker.js'); var scope = 'resources/scope/filesystem-script-url'; return promise_rejects(t, - check_error_types ? 'SecurityError' : null, + check_error_types ? new TypeError : null, register_method(script, {scope: scope}), 'Registering a script which has same-origin filesystem: URL should ' + - 'fail with SecurityError.'); + 'fail with TypeError.'); }, 'Script URL is same-origin filesystem: URL'); } diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-computed.svg new file mode 100644 index 00000000000..5a408ba4d28 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/cx-computed.svg @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml" + width="800px" height="8000px"> + <title>SVG Geometry Properties: getComputedValue().cx</title> + <metadata> + <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#CX"/> + </metadata> + <g id="target"></g> + <style> + #target { + font-size: 40px; + } + </style> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <h:script src="/css/support/computed-testcommon.js"/> + <script><![CDATA[ + +test_computed_value("cx", "-10px"); +test_computed_value("cx", "0.5em", "20px"); +test_computed_value("cx", "calc(10px + 0.5em)", "30px"); +test_computed_value("cx", "40%"); +test_computed_value("cx", "calc(50% + 60x)"); + + ]]></script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-computed.svg new file mode 100644 index 00000000000..97a41aed9c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/cy-computed.svg @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml" + width="800px" height="8000px"> + <title>SVG Geometry Properties: getComputedValue().cy</title> + <metadata> + <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#CY"/> + </metadata> + <g id="target"></g> + <style> + #target { + font-size: 40px; + } + </style> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <h:script src="/css/support/computed-testcommon.js"/> + <script><![CDATA[ + +test_computed_value("cy", "-10px"); +test_computed_value("cy", "0.5em", "20px"); +test_computed_value("cy", "calc(10px + 0.5em)", "30px"); +test_computed_value("cy", "40%"); +test_computed_value("cy", "calc(50% + 60x)"); + + ]]></script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/r-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/r-computed.svg new file mode 100644 index 00000000000..fc8ea983ff0 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/r-computed.svg @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml" + width="800px" height="8000px"> + <title>SVG Geometry Properties: getComputedValue().r</title> + <metadata> + <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#R"/> + </metadata> + <g id="target"></g> + <style> + #target { + font-size: 40px; + } + </style> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <h:script src="/css/support/computed-testcommon.js"/> + <script><![CDATA[ + +test_computed_value("r", "10px"); +test_computed_value("r", "0.5em", "20px"); +test_computed_value("r", "calc(10px + 0.5em)", "30px"); +test_computed_value("r", "40%"); +test_computed_value("r", "calc(50% + 60x)"); + + ]]></script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-computed.svg new file mode 100644 index 00000000000..7e4c42d2930 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/rx-computed.svg @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml" + width="800px" height="8000px"> + <title>SVG Geometry Properties: getComputedValue().rx</title> + <metadata> + <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#RX"/> + </metadata> + <g id="target"></g> + <style> + #target { + font-size: 40px; + } + </style> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <h:script src="/css/support/computed-testcommon.js"/> + <script><![CDATA[ + +test_computed_value("rx", "auto"); + +test_computed_value("rx", "10px"); +test_computed_value("rx", "0.5em", "20px"); +test_computed_value("rx", "calc(10px + 0.5em)", "30px"); +test_computed_value("rx", "40%"); +test_computed_value("rx", "calc(50% + 60x)"); + + ]]></script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-computed.svg new file mode 100644 index 00000000000..390d63dc7e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/ry-computed.svg @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml" + width="800px" height="8000px"> + <title>SVG Geometry Properties: getComputedValue().ry</title> + <metadata> + <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#RY"/> + </metadata> + <g id="target"></g> + <style> + #target { + font-size: 40px; + } + </style> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <h:script src="/css/support/computed-testcommon.js"/> + <script><![CDATA[ + +test_computed_value("ry", "auto"); + +test_computed_value("ry", "10px"); +test_computed_value("ry", "0.5em", "20px"); +test_computed_value("ry", "calc(10px + 0.5em)", "30px"); +test_computed_value("ry", "40%"); +test_computed_value("ry", "calc(50% + 60x)"); + + ]]></script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/x-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/x-computed.svg new file mode 100644 index 00000000000..f7da0ed9564 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/x-computed.svg @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml" + width="800px" height="8000px"> + <title>SVG Geometry Properties: getComputedValue().x</title> + <metadata> + <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#X"/> + </metadata> + <g id="target"></g> + <style> + #target { + font-size: 40px; + } + </style> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <h:script src="/css/support/computed-testcommon.js"/> + <script><![CDATA[ + +test_computed_value("x", "-10px"); +test_computed_value("x", "0.5em", "20px"); +test_computed_value("x", "calc(10px + 0.5em)", "30px"); +test_computed_value("x", "40%"); +test_computed_value("x", "calc(50% + 60x)"); + + ]]></script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/y-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/y-computed.svg new file mode 100644 index 00000000000..83ef887da67 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/y-computed.svg @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml" + width="800px" height="8000px"> + <title>SVG Geometry Properties: getComputedValue().y</title> + <metadata> + <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#Y"/> + </metadata> + <g id="target"></g> + <style> + #target { + font-size: 40px; + } + </style> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <h:script src="/css/support/computed-testcommon.js"/> + <script><![CDATA[ + +test_computed_value("y", "-10px"); +test_computed_value("y", "0.5em", "20px"); +test_computed_value("y", "calc(10px + 0.5em)", "30px"); +test_computed_value("y", "40%"); +test_computed_value("y", "calc(50% + 60x)"); + + ]]></script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/interact/script-common.html b/tests/wpt/web-platform-tests/svg/interact/script-common.html new file mode 100644 index 00000000000..fc2ae3ba01a --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/interact/script-common.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test: </title> +<link rel="help" href="https://svgwg.org/svg2-draft/interact.html#ScriptElement"> +<meta name="assert" content="The same scripts can work on both HTML and SVG elements."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<script>var total = 0;</script> +<script>function s0() { total += 100; return s1(); }</script> +<svg> + <script>function s1() { total += 20; return s2(); }</script> + <g> + <script>function s2() { return s3(); }</script> + <circle id="spot"><clipPath id="spot-first-child"/> + <script>function s3() { return s4(); }</script> + </circle> + </g> + <desc> + <script>function s4() { return s5(); }</script> + </desc> + <filter> + <script>function s5() { return s6(); }</script> + <feFlood> + <script>function s6() { return s7(); }</script> + </feFlood> + </filter> + <text> + <script>function s7() { return s8(); }</script> + <tspan> + <script>function s8() { return s9(); }</script> + </tspan> + </text> + <use href="spot"> + <script>function s9() { return s10(); }</script> + </use> +</svg> +<div id="box"><script id="box-first-child">function s10() { total += 3; return s11(); }</script> + <span> + <script>function s11() { return 'same'; }</script> + </span> +</div> + +<script> +test(function(){ + assert_equals(s0(), 'same'); + assert_equals(total, 123); + + for (let elementName of ['spot', 'box']) { + let element = document.getElementById(elementName); + let firstChild = element.firstChild; + assert_equals(firstChild.id, elementName + '-first-child'); + } +}, 'The same scripts work on both HTML and SVG elements'); +</script> diff --git a/tests/wpt/web-platform-tests/svg/interact/script-content.svg b/tests/wpt/web-platform-tests/svg/interact/script-content.svg new file mode 100644 index 00000000000..94836f7c033 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/interact/script-content.svg @@ -0,0 +1,239 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:h="http://www.w3.org/1999/xhtml"> + <h:link rel="help" href="https://svgwg.org/svg2-draft/interact.html#ScriptElement"/> + <h:meta name="assert" content="The script element is in the content model of all elements."/> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + +<script>function s0() { return s1(); }</script> + +<a> + <script>function s1() { return s2(); }</script> +</a> + +<g> + <script>function s2() { return s3(); }</script> +</g> + +<animate> + <script>function s3() { return s4(); }</script> +</animate> + +<animateMotion> + <script>function s4() { return s5(); }</script> + <mPath> + <script>function s5() { return s6(); }</script> + </mPath> +</animateMotion> + +<animateTransform> + <script>function s6() { return s7(); }</script> +</animateTransform> + +<circle> + <script>function s7() { return s8(); }</script> + <clipPath> + <script>function s8() { return s9(); }</script> + </clipPath> +</circle> + +<defs> + <script>function s9() { return s10(); }</script> +</defs> + +<desc> + <script>function s10() { return s11(); }</script> +</desc> + +<!-- Becomes https://svgwg.org/svg2-draft/struct.html#UnknownElement + if the implementation does not support <discard> --> +<discard> + <script>function s11() { return s12(); }</script> +</discard> + +<ellipse> + <script>function s12() { return s13(); }</script> +</ellipse> + +<filter> + <script>function s13() { return s14(); }</script> + <feBlend> + <script>function s14() { return s15(); }</script> + </feBlend> + <feColorMatrix> + <script>function s15() { return s16(); }</script> + </feColorMatrix> + <feComponentTransfer> + <script>function s16() { return s17(); }</script> + </feComponentTransfer> + <feComposite> + <script>function s17() { return s18(); }</script> + </feComposite> + <feConvolveMatrix> + <script>function s18() { return s19(); }</script> + </feConvolveMatrix> + <feDiffuseLighting> + <script>function s19() { return s20(); }</script> + </feDiffuseLighting> + <feDisplacementMap> + <script>function s20() { return s21(); }</script> + </feDisplacementMap> + <feDistantLight> + <script>function s21() { return s22(); }</script> + </feDistantLight> + <feDropShadow> + <script>function s22() { return s23(); }</script> + </feDropShadow> + <feFlood> + <script>function s23() { return s24(); }</script> + </feFlood> + <feFuncA> + <script>function s24() { return s25(); }</script> + </feFuncA> + <feFuncB> + <script>function s25() { return s26(); }</script> + </feFuncB> + <feFuncG> + <script>function s26() { return s27(); }</script> + </feFuncG> + <feFuncR> + <script>function s27() { return s28(); }</script> + </feFuncR> + <feGaussianBlur> + <script>function s28() { return s29(); }</script> + </feGaussianBlur> + <feImage> + <script>function s29() { return s30(); }</script> + </feImage> + <feMerge> + <script>function s30() { return s31(); }</script> + </feMerge> + <feMergeNode> + <script>function s31() { return s32(); }</script> + </feMergeNode> + <feMorphology> + <script>function s32() { return s33(); }</script> + </feMorphology> + <feOffset> + <script>function s33() { return s34(); }</script> + </feOffset> + <fePointLight> + <script>function s34() { return s35(); }</script> + </fePointLight> + <feSpecularLighting> + <script>function s35() { return s36(); }</script> + </feSpecularLighting> + <feSpotLight> + <script>function s36() { return s37(); }</script> + </feSpotLight> + <feTile> + <script>function s37() { return s38(); }</script> + </feTile> + <feTurbulence> + <script>function s38() { return s39(); }</script> + </feTurbulence> +</filter> + +<foreignObject> + <script>function s39() { return s40(); }</script> +</foreignObject> + +<g> + <script>function s40() { return s41(); }</script> +</g> + +<image> + <script>function s41() { return s42(); }</script> +</image> + +<line> + <script>function s42() { return s43(); }</script> +</line> + +<linearGradient> + <script>function s43() { return s44(); }</script> +</linearGradient> + +<marker> + <script>function s44() { return s45(); }</script> +</marker> + +<mask> + <script>function s45() { return s46(); }</script> +</mask> + +<path> + <script>function s46() { return s47(); }</script> +</path> + +<pattern> + <script>function s47() { return s48(); }</script> +</pattern> + +<polygon> + <script>function s48() { return s49(); }</script> +</polygon> + +<polyline> + <script>function s49() { return s50(); }</script> +</polyline> + +<radialGradient> + <script>function s50() { return s51(); }</script> +</radialGradient> + +<rect> + <script>function s51() { return s52(); }</script> +</rect> + +<set> + <script>function s52() { return s53(); }</script> +</set> + +<stop> + <script>function s53() { return s54(); }</script> +</stop> + +<svg> + <script>function s54() { return s55(); }</script> +</svg> + +<symbol> + <script>function s55() { return s56(); }</script> +</symbol> + +<text> + <script>function s56() { return s57(); }</script> +</text> + +<textPath> + <script>function s57() { return s58(); }</script> +</textPath> + +<title> + <script>function s58() { return s59(); }</script> +</title> + +<tspan> + <script>function s59() { return s60(); }</script> +</tspan> + +<use> + <script>function s60() { return s61(); }</script> +</use> + +<view> + <script>function s61() { return s62(); }</script> +</view> + +<script> +function s62() { + return 'success'; +} + +test(function(){ + assert_equals(s0(), 'success'); +}, "script element is in elements' content model"); +</script> +</svg> diff --git a/tests/wpt/web-platform-tests/svg/painting/scripted/paint-order-computed-value-01.svg b/tests/wpt/web-platform-tests/svg/painting/scripted/paint-order-computed-value-01.svg new file mode 100644 index 00000000000..7ea669f1508 --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/painting/scripted/paint-order-computed-value-01.svg @@ -0,0 +1,62 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml"> + <title>'paint-order' computed style serialization</title> + <h:script src="/resources/testharness.js"/> + <h:script src="/resources/testharnessreport.js"/> + <text id="text" x="100" y="100"/> + <script><![CDATA[ + 'use strict'; + + function make_tests(check, type) { + let tests = [ + // Single keyword + ["normal", "normal"], + ["fill", "fill"], + ["stroke", "stroke"], + ["markers", "markers"], + // Two keywords + ["fill stroke", "fill"], + ["fill markers", "fill markers"], + ["stroke fill", "stroke"], + ["stroke markers", "stroke markers"], + ["markers fill", "markers"], + ["markers stroke", "markers stroke"], + // Three keywords + ["fill stroke markers", "fill"], + ["fill markers stroke", "fill markers"], + ["stroke fill markers", "stroke"], + ["stroke markers fill", "stroke markers"], + ["markers fill stroke", "markers"], + ["markers stroke fill", "markers stroke"], + // Invalid + ["foo", "normal"], + ["fill foo", "normal"], + ["stroke foo", "normal"], + ["markers foo", "normal"], + ["normal foo", "normal"], + ["fill markers stroke foo", "normal"], + ]; + for (let [value, expected] of tests) { + test(() => { + check(value, expected); + }, `${document.title}, "${value}" => "${expected}" (${type})`); + } + } + + const text = document.getElementById("text"); + + make_tests((value, expected) => { + text.setAttribute("style", "paint-order: " + value); + let actual = getComputedStyle(text).paintOrder; + text.removeAttribute("style"); + assert_equals(actual, expected, value); + }, "property"); + + make_tests((value, expected) => { + text.setAttribute("paint-order", value); + let actual = getComputedStyle(text).paintOrder; + text.removeAttribute("paint-order"); + assert_equals(actual, expected, value); + }, "presentation attribute"); + ]]> + </script> +</svg> diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py index 15396fba22c..01fed66d0e9 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py @@ -36,8 +36,9 @@ class FennecProfile(FirefoxProfile): "app.normandy.api_url": "", # Increase the APZ content response timeout in tests to 1 minute. "apz.content_response_timeout": 60000, - # Enable output of dump() + # Enable output for dump() and chrome console API "browser.dom.window.dump.enabled": True, + "devtools.console.stdout.chrome": True, # Disable safebrowsing components "browser.safebrowsing.blockedURIs.enabled": False, "browser.safebrowsing.downloads.enabled": False, 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 848fbb74c7b..d57a36b1338 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py @@ -621,7 +621,7 @@ class WebTestHttpd(object): .. attribute:: started - Boolean indictating whether the server is running + Boolean indicating whether the server is running """ def __init__(self, host="127.0.0.1", port=8000, diff --git a/tests/wpt/web-platform-tests/user-timing/mark-measure-return-null.html b/tests/wpt/web-platform-tests/user-timing/mark-measure-return-null.html new file mode 100644 index 00000000000..5afd9633f24 --- /dev/null +++ b/tests/wpt/web-platform-tests/user-timing/mark-measure-return-null.html @@ -0,0 +1,46 @@ +<!DOCTYPE HTML> +<meta charset=utf-8> +<title>User Timing: L2 APIs return null</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>User Timing: L2 APIs return null</p> +<div id="log"></div> +<script> + async_test(function (t) { + self.performance.clearMeasures(); + const measure = self.performance.measure("measure1"); + assert_equals(measure, null); + t.done(); + }, "L2: performance.measure(name) should return null."); + + async_test(function (t) { + self.performance.clearMeasures(); + self.performance.mark("1"); + const measure = self.performance.measure("measure2", 1); + assert_equals(measure, null); + t.done(); + }, "L2: performance.measure(name, param1) should return null."); + + async_test(function (t) { + self.performance.clearMeasures(); + self.performance.mark("1"); + self.performance.mark("2"); + const measure = self.performance.measure("measure3", 1, 2); + assert_equals(measure, null); + t.done(); + }, "L2: performance.measure(name, param1, param2) should return null."); + + async_test(function (t) { + self.performance.clearMarks(); + const mark = self.performance.mark("mark1"); + assert_equals(mark, null); + t.done(); + }, "L2: performance.mark(name) should return null."); + + async_test(function (t) { + self.performance.clearMarks(); + const mark = self.performance.mark("mark2", { startTime: 34 }); + assert_equals(mark, null); + t.done(); + }, "L2: performance.mark(name, param) should return null."); +</script> diff --git a/tests/wpt/web-platform-tests/wasm/webapi/abort.any.js b/tests/wpt/web-platform-tests/wasm/webapi/abort.any.js index cc0f5d9f34f..839de16108e 100644 --- a/tests/wpt/web-platform-tests/wasm/webapi/abort.any.js +++ b/tests/wpt/web-platform-tests/wasm/webapi/abort.any.js @@ -21,4 +21,17 @@ for (const method of methods) { controller.abort(); return promise_rejects(t, 'AbortError', promise, `${method} should reject`); }, `${method}() synchronously followed by abort should reject with AbortError`); + + promise_test(async t => { + const controller = new AbortController(); + const signal = controller.signal; + return fetch('../incrementer.wasm', { signal }) + .then(response => { + Promise.resolve().then(() => controller.abort()); + return WebAssembly[method](response); + }) + .catch(err => { + assert_true(err.name === "AbortError"); + }); + }, `${method}() asynchronously racing with abort should succeed or reject with AbortError`); } 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 index daa8a911928..4527c64a288 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/stress.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/maximize_window/stress.py @@ -40,3 +40,4 @@ def test_stress(session, i): t_end = time.time() + 3 while time.time() < t_end: assert session.window.size == size_after_maximize + time.sleep(.1) diff --git a/tests/wpt/web-platform-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html b/tests/wpt/web-platform-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html index 1d99aa29d85..7d0c81f5eab 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCConfiguration-rtcpMuxPolicy.html @@ -3,6 +3,7 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="RTCConfiguration-helper.js"></script> +<script src="RTCPeerConnection-helper.js"></script> <script> 'use strict'; @@ -188,8 +189,8 @@ const pc = new RTCPeerConnection({rtcpMuxPolicy: 'require'}); t.add_cleanup(() => pc.close()); - await pc.createOffer({offerToReceiveAudio: true}) - .then(offer => pc.setLocalDescription(offer)); + const offer = await generateAudioReceiveOnlyOffer(pc); + await pc.setLocalDescription(offer); return promise_rejects(t, 'InvalidAccessError', pc.setRemoteDescription({type: 'answer', sdp})); }, 'setRemoteDescription throws InvalidAccessError when called with an answer without rtcp-mux and rtcpMuxPolicy is set to require'); </script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html index 1dd1350acd2..2283c6835e1 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html @@ -61,9 +61,9 @@ a=rtcp-rsize const sessionDesc = { type: 'offer', sdp }; // valid candidate attributes - const sdpMid = 'a1'; - const sdpMLineIndex = 0; - const usernameFragment = 'ETEn'; + const sdpMid1 = 'a1'; + const sdpMLineIndex1 = 0; + const usernameFragment1 = 'ETEn'; const sdpMid2 = 'v1'; const sdpMLineIndex2 = 1; @@ -138,7 +138,9 @@ a=rtcp-rsize return promise_rejects(t, 'InvalidStateError', pc.addIceCandidate({ candidate: candidateStr1, - sdpMid, sdpMLineIndex, usernameFragment + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + usernameFragment: usernameFragment1 })); }, 'Add ICE candidate before setting remote description should reject with InvalidStateError'); @@ -153,7 +155,9 @@ a=rtcp-rsize return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate({ candidate: candidateStr1, - sdpMid, sdpMLineIndex, usernameFragment + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + usernameFragement: usernameFragment1 })); }, 'Add ICE candidate after setting remote description should succeed'); @@ -165,7 +169,9 @@ a=rtcp-rsize return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate(new RTCIceCandidate({ candidate: candidateStr1, - sdpMid, sdpMLineIndex, usernameFragment + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + usernameFragement: usernameFragment1 }))); }, 'Add ICE candidate with RTCIceCandidate should succeed'); @@ -175,7 +181,9 @@ a=rtcp-rsize t.add_cleanup(() => pc.close()); return pc.setRemoteDescription(sessionDesc) - .then(() => pc.addIceCandidate({ sdpMid })); + .then(() => pc.addIceCandidate({ + candidate: candidateStr1, + sdpMid: sdpMid1 })); }, 'Add candidate with only valid sdpMid should succeed'); promise_test(t => { @@ -184,7 +192,9 @@ a=rtcp-rsize t.add_cleanup(() => pc.close()); return pc.setRemoteDescription(sessionDesc) - .then(() => pc.addIceCandidate({ sdpMLineIndex })); + .then(() => pc.addIceCandidate({ + candidate: candidateStr1, + sdpMLineIndex: sdpMLineIndex1 })); }, 'Add candidate with only valid sdpMLineIndex should succeed'); /* @@ -206,7 +216,9 @@ a=rtcp-rsize return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate({ candidate: candidateStr1, - sdpMid, sdpMLineIndex, usernameFragment + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + usernameFragement: usernameFragment1 })) .then(() => { assert_candidate_line_between(pc.remoteDescription.sdp, @@ -240,8 +252,9 @@ a=rtcp-rsize return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate({ candidate: candidateStr1, - sdpMid, sdpMLineIndex, - usernameFragment: null + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + ufrag: null })) .then(() => { assert_candidate_line_between(pc.remoteDescription.sdp, @@ -257,7 +270,9 @@ a=rtcp-rsize return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate({ candidate: candidateStr1, - sdpMid, sdpMLineIndex, usernameFragment + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + usernameFragement: usernameFragment1 })) .then(() => pc.addIceCandidate({ candidate: candidateStr2, @@ -296,12 +311,15 @@ a=rtcp-rsize return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate({ candidate: candidateStr1, - sdpMid, sdpMLineIndex, usernameFragment + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + usernameFragement: usernameFragment1 })) .then(() => pc.addIceCandidate({ candidate: '', - sdpMid, sdpMLineIndex, - usernameFragment + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + usernameFragement: usernameFragment1 })) .then(() => { assert_candidate_line_between(pc.remoteDescription.sdp, @@ -404,7 +422,9 @@ a=rtcp-rsize promise_rejects(t, 'OperationError', pc.addIceCandidate({ candidate: candidateStr1, - sdpMid: 'invalid', sdpMLineIndex, usernameFragment + sdpMid: 'invalid', + sdpMLineIndex: sdpMLineIndex1, + usernameFragement: usernameFragment1 }))); }, 'Add candidate with invalid sdpMid should reject with OperationError'); @@ -427,7 +447,7 @@ a=rtcp-rsize pc.addIceCandidate({ candidate: candidateStr1, sdpMLineIndex: 2, - usernameFragment + usernameFragement: usernameFragment1 }))); }, 'Add candidate with invalid sdpMLineIndex should reject with OperationError'); @@ -441,9 +461,9 @@ a=rtcp-rsize return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate({ candidate: candidateStr1, - sdpMid, + sdpMid: sdpMid1, sdpMLineIndex: 2, - usernameFragment + usernameFragement: usernameFragment1 })); }, 'Invalid sdpMLineIndex should be ignored if valid sdpMid is provided'); @@ -482,8 +502,9 @@ a=rtcp-rsize promise_rejects(t, 'OperationError', pc.addIceCandidate({ candidate: candidateStr1, - sdpMid, sdpMLineIndex, - usernameFragment: 'invalid' + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + ufrag: 'invalid' }))); }, 'Add candidate with invalid usernameFragment should reject with OperationError'); @@ -504,7 +525,9 @@ a=rtcp-rsize promise_rejects(t, 'OperationError', pc.addIceCandidate({ candidate: invalidCandidateStr, - sdpMid, sdpMLineIndex, usernameFragment + sdpMid: sdpMid1, + sdpMLineIndex: sdpMLineIndex1, + usernameFragement: usernameFragment1 }))); }, 'Add candidate with invalid candidate string should reject with OperationError'); @@ -520,7 +543,7 @@ a=rtcp-rsize candidate: candidateStr2, sdpMid: sdpMid2, sdpMLineIndex: sdpMLineIndex2, - usernameFragment + usernameFragement: usernameFragment1 }))); }, 'Add candidate with sdpMid belonging to different usernameFragment should reject with OperationError'); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html index fb9e514194b..e6d8d062701 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html @@ -11,8 +11,9 @@ // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html // The following helper functions are called from RTCPeerConnection-helper.js: - // exchangeIceCandidates // doSignalingHandshake + // exchangeIceCandidates + // generateAudioReceiveOnlyOffer /* 4.3.2. Interface Definition @@ -72,7 +73,7 @@ pc.addEventListener('icegatheringstatechange', onIceGatheringStateChange); - pc.createOffer({ offerToReceiveAudio: true }) + generateAudioReceiveOnlyOffer(pc) .then(offer => pc.setLocalDescription(offer)) .then(err => t.step_func(err => assert_unreached(`Unhandled rejection ${err.name}: ${err.message}`))); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html index 8f9ea2be780..7e55ac3fadd 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-onnegotiationneeded.html @@ -12,6 +12,7 @@ // The following helper functions are called from RTCPeerConnection-helper.js: // generateAnswer + // generateAudioReceiveOnlyOffer // test_never_resolve // Listen to the negotiationneeded event on a peer connection @@ -165,7 +166,7 @@ const pc = new RTCPeerConnection(); const negotiated = awaitNegotiation(pc); - return pc.createOffer({ offerToReceiveAudio: true }) + return generateAudioReceiveOnlyOffer(pc) .then(offer => pc.setLocalDescription(offer)) .then(() => negotiated) .then(({nextPromise}) => { @@ -190,7 +191,7 @@ return assert_first_promise_fulfill_after_second( awaitNegotiation(pc), - pc.createOffer({ offerToReceiveAudio: true }) + generateAudioReceiveOnlyOffer(pc) .then(offer => pc.setLocalDescription(offer) .then(() => { diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html index 0147b3185cc..630f84faa47 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-rollback.html @@ -12,6 +12,7 @@ // The following helper functions are called from RTCPeerConnection-helper.js: // assert_session_desc_similar + // generateAudioReceiveOnlyOffer /* 4.3.2. Interface Definition @@ -105,7 +106,7 @@ promise_test(t => { const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - return pc.createOffer({ offerToReceiveAudio: true }) + return generateAudioReceiveOnlyOffer(pc) .then(offer => pc.setRemoteDescription(offer) .then(() => pc.createAnswer())) diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html index 565fddc59be..cae62b24b6c 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html @@ -12,6 +12,7 @@ // The following helper functions are called from RTCPeerConnection-helper.js: // assert_session_desc_similar() + // generateAudioReceiveOnlyOffer /* 4.3.2. Interface Definition @@ -115,7 +116,7 @@ .then(offer1 => { return pc1.setLocalDescription(offer1) .then(()=> { - return pc1.createOffer({ offerToReceiveAudio: true }) + return generateAudioReceiveOnlyOffer(pc1) .then(offer2 => { assert_session_desc_not_similar(offer1, offer2); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html index ec90e561cbc..c317f3e1ae6 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html @@ -11,8 +11,9 @@ // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html // The following helper functions are called from RTCPeerConnection-helper.js: - // generateDataChannelOffer // assert_session_desc_similar + // generateAudioReceiveOnlyOffer + // generateDataChannelOffer /* 4.3.2. Interface Definition @@ -105,7 +106,7 @@ promise_test(t => { const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - return pc.createOffer({ offerToReceiveAudio: true }) + return generateAudioReceiveOnlyOffer(pc) .then(offer => pc.setRemoteDescription(offer)) .then(() => pc.setRemoteDescription({ type: 'rollback', diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html index b147414794e..eed7cffc37f 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html @@ -55,10 +55,8 @@ promise_test(async t => { promise_test(async t => { const [ localQuicTransport, remoteQuicTransport ] = await makeTwoConnectedQuicTransports(t); - const firstLocalStream = localQuicTransport.createStream(); - firstLocalStream.finish(); - const secondLocalStream = localQuicTransport.createStream(); - secondLocalStream.finish(); + localQuicTransport.createStream().finish(); + localQuicTransport.createStream().finish(); const remoteWatcher = new EventWatcher(t, remoteQuicTransport, [ 'quicstream', 'statechange' ]); const { stream: firstRemoteStream } = @@ -109,20 +107,6 @@ promise_test(async t => { const [ localQuicTransport, remoteQuicTransport ] = await makeTwoConnectedQuicTransports(t); const localStream = localQuicTransport.createStream(); - localStream.finish(); - const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream'); - const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); - assert_equals(remoteStream.state, 'open'); - const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange'); - await remoteStreamWatcher.wait_for('statechange'); - assert_equals(remoteStream.state, 'closing'); -}, 'createStream() followed by finish() fires a quicstream event followed by ' + - `a statechange event to 'closing' on the remote side.`); - -promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - const localStream = localQuicTransport.createStream(); localStream.reset(); const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream'); const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); @@ -135,33 +119,6 @@ promise_test(async t => { promise_test(async t => { const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - remoteQuicTransport.onquicstream = ({ stream }) => stream.reset(); - const localStream = localQuicTransport.createStream(); - localStream.finish(); - const localWatcher = new EventWatcher(t, localStream, 'statechange'); - await localWatcher.wait_for('statechange'); - assert_equals(localStream.state, 'closed'); -}, 'finish() on a remote stream that has already finished fires a ' + - `statechange event to 'closed' on the remote side.`); - -promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = - await makeTwoConnectedQuicTransports(t); - const localStream = localQuicTransport.createStream(); - localStream.finish(); - localStream.reset(); - const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream'); - const { stream: remoteStream } = await remoteWatcher.wait_for('quicstream'); - const remoteStreamWatcher = new EventWatcher(t, remoteStream, 'statechange'); - await remoteStreamWatcher.wait_for('statechange'); - assert_equals(remoteStream.state, 'closing'); - await remoteStreamWatcher.wait_for('statechange'); - assert_equals(remoteStream.state, 'closed'); -}, 'finish() then reset() fires two statechange events on the remote side.'); - -promise_test(async t => { - const [ localQuicTransport, remoteQuicTransport ] = await makeTwoConnectedQuicTransports(t); const localStream = localQuicTransport.createStream(); localStream.write(new Uint8Array(0)); @@ -217,6 +174,24 @@ promise_test(async t => { const [ localQuicTransport, remoteQuicTransport ] = await makeTwoConnectedQuicTransports(t); const localStream = localQuicTransport.createStream(); + localStream.write(new Uint8Array(10)); + const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream'); + await remoteWatcher.wait_for('quicstream'); +}, 'write() causes quicstream event to fire on the remote transport.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + localStream.finish(); + const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream'); + await remoteWatcher.wait_for('quicstream'); +}, 'finish() causes quicstream event to fire on the remote transport.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); localStream.finish(); assert_throws('InvalidStateError', () => localStream.write(new Uint8Array())); @@ -253,4 +228,66 @@ promise_test(async t => { assert_equals(localStream.writeBufferedAmount, 10); }, 'writeBufferedAmount maintained after finish() has been called.'); +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + await localStream.waitForWriteBufferedAmountBelow(0); +}, 'waitForWriteBufferedAmountBelow(0) resolves immediately.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + await localStream.waitForWriteBufferedAmountBelow( + localStream.maxWriteBufferedAmount); +}, 'waitForWriteBufferedAmountBelow(maxWriteBufferedAmount) resolves ' + + 'immediately.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + localStream.write(new Uint8Array(localStream.maxWriteBufferedAmount)); + const promise1 = localStream.waitForWriteBufferedAmountBelow(0); + const promise2 = localStream.waitForWriteBufferedAmountBelow(0); + localStream.finish(); + await Promise.all([ + promise_rejects(t, 'InvalidStateError', promise1), + promise_rejects(t, 'InvalidStateError', promise2)]); +}, 'Pending waitForWriteBufferedAmountBelow() promises rejected after ' + + 'finish().'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + localStream.write(new Uint8Array(localStream.maxWriteBufferedAmount)); + const promise1 = localStream.waitForWriteBufferedAmountBelow(0); + const promise2 = localStream.waitForWriteBufferedAmountBelow(0); + localStream.reset(); + await Promise.all([ + promise_rejects(t, 'InvalidStateError', promise1), + promise_rejects(t, 'InvalidStateError', promise2)]); +}, 'Pending waitForWriteBufferedAmountBelow() promises rejected after ' + + 'reset().'); + +closed_stream_test(async (t, stream) => { + await promise_rejects(t, 'InvalidStateError', + stream.waitForWriteBufferedAmountBelow(0)); +}, 'waitForWriteBufferedBelow() rejects with InvalidStateError.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + assert_object_equals( + localStream.readInto(new Uint8Array(10)), + { amount: 0, finished: false }); +}, 'readInto() on new local stream returns amount 0.'); + +closed_stream_test(async (t, stream) => { + assert_throws('InvalidStateError', () => stream.readInto(new Uint8Array(1))); +}, 'readInto() throws InvalidStateError.'); + </script> |