diff options
139 files changed, 3089 insertions, 807 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..947e223fb28 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 @@ -14,9 +14,6 @@ [Revoke blob URL after creating Request, will fetch] expected: FAIL - [Revoke blob URL after calling fetch, fetch should succeed] - expected: FAIL - [url-with-fetch.any.html] [Untitled] @@ -37,6 +34,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 725a69a820d..fcefdf9f231 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -19377,6 +19377,30 @@ {} ] ], + "animation-worklet/worklet-animation-pause-immediately.https.html": [ + [ + "/animation-worklet/worklet-animation-pause-immediately.https.html", + [ + [ + "/animation-worklet/references/translated-box-ref.html", + "==" + ] + ], + {} + ] + ], + "animation-worklet/worklet-animation-pause-resume.https.html": [ + [ + "/animation-worklet/worklet-animation-pause-resume.https.html", + [ + [ + "/animation-worklet/references/translated-box-ref.html", + "==" + ] + ], + {} + ] + ], "apng/animated-png-timeout.html": [ [ "/apng/animated-png-timeout.html", @@ -140533,6 +140557,18 @@ {} ] ], + "css/css-text/overflow-wrap/overflow-wrap-break-word-006.html": [ + [ + "/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html", + [ + [ + "/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [ [ "/css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html", @@ -142417,6 +142453,66 @@ {} ] ], + "css/css-text/white-space/break-spaces-004.html": [ + [ + "/css/css-text/white-space/break-spaces-004.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-005.html": [ + [ + "/css/css-text/white-space/break-spaces-005.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-006.html": [ + [ + "/css/css-text/white-space/break-spaces-006.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-007.html": [ + [ + "/css/css-text/white-space/break-spaces-007.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/break-spaces-008.html": [ + [ + "/css/css-text/white-space/break-spaces-008.html", + [ + [ + "/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/control-chars-000.html": [ [ "/css/css-text/white-space/control-chars-000.html", @@ -143341,6 +143437,18 @@ {} ] ], + "css/css-text/white-space/pre-wrap-016.html": [ + [ + "/css/css-text/white-space/pre-wrap-016.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/pre-wrap-float-001.html": [ [ "/css/css-text/white-space/pre-wrap-float-001.html", @@ -143901,6 +144009,30 @@ {} ] ], + "css/css-text/word-break/word-break-break-all-012.html": [ + [ + "/css/css-text/word-break/word-break-break-all-012.html", + [ + [ + "/css/css-text/word-break/reference/word-break-break-all-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/word-break/word-break-break-all-013.html": [ + [ + "/css/css-text/word-break/word-break-break-all-013.html", + [ + [ + "/css/css-text/word-break/reference/word-break-break-all-010-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/word-break/word-break-break-all-014.html": [ [ "/css/css-text/word-break/word-break-break-all-014.html", @@ -158221,6 +158353,66 @@ {} ] ], + "css/css-values/ic-unit-008.html": [ + [ + "/css/css-values/ic-unit-008.html", + [ + [ + "/css/css-values/reference/ic-unit-008-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-values/ic-unit-009.html": [ + [ + "/css/css-values/ic-unit-009.html", + [ + [ + "/css/css-values/reference/ic-unit-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-values/ic-unit-010.html": [ + [ + "/css/css-values/ic-unit-010.html", + [ + [ + "/css/css-values/reference/ic-unit-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-values/ic-unit-011.html": [ + [ + "/css/css-values/ic-unit-011.html", + [ + [ + "/css/css-values/reference/ic-unit-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-values/ic-unit-012.html": [ + [ + "/css/css-values/ic-unit-012.html", + [ + [ + "/css/css-values/reference/ic-unit-009-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-values/initial-background-color.html": [ [ "/css/css-values/initial-background-color.html", @@ -158257,6 +158449,30 @@ {} ] ], + "css/css-values/q-unit-case-insensitivity-001.html": [ + [ + "/css/css-values/q-unit-case-insensitivity-001.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "css/css-values/q-unit-case-insensitivity-002.html": [ + [ + "/css/css-values/q-unit-case-insensitivity-002.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-values/vh-calc-support-pct.html": [ [ "/css/css-values/vh-calc-support-pct.html", @@ -201908,6 +202124,11 @@ {} ] ], + "animation-worklet/references/translated-box-ref.html": [ + [ + {} + ] + ], "animation-worklet/resources/animator-iframe.html": [ [ {} @@ -272373,6 +272594,11 @@ {} ] ], + "css/css-text/white-space/reference/white-space-break-spaces-005-ref.html": [ + [ + {} + ] + ], "css/css-text/white-space/reference/white-space-intrinsic-size-001-ref.html": [ [ {} @@ -275708,6 +275934,16 @@ {} ] ], + "css/css-values/reference/ic-unit-008-ref.html": [ + [ + {} + ] + ], + "css/css-values/reference/ic-unit-009-ref.html": [ + [ + {} + ] + ], "css/css-values/reference/vh-support-atviewport-ref.htm": [ [ {} @@ -287248,11 +287484,21 @@ {} ] ], + "encrypted-media/scripts/check-encryption-scheme.js": [ + [ + {} + ] + ], "encrypted-media/scripts/check-initdata-type.js": [ [ {} ] ], + "encrypted-media/scripts/check-status-for-hdcp.js": [ + [ + {} + ] + ], "encrypted-media/scripts/clearkey-update-non-ascii-input.js": [ [ {} @@ -288028,6 +288274,16 @@ {} ] ], + "feature-policy/reporting/unoptimized-image.jpg": [ + [ + {} + ] + ], + "feature-policy/reporting/unoptimized-images-reporting.html.headers": [ + [ + {} + ] + ], "feature-policy/reporting/unsized-media-reporting.html.headers": [ [ {} @@ -312468,6 +312724,16 @@ {} ] ], + "storage/resources/appcache.manifest": [ + [ + {} + ] + ], + "storage/resources/iframe_with_appcache_manifest.html": [ + [ + {} + ] + ], "streams/META.yml": [ [ {} @@ -313523,11 +313789,6 @@ {} ] ], - "tools/ci/check_stability.py": [ - [ - {} - ] - ], "tools/ci/ci_built_diff.sh": [ [ {} @@ -335108,6 +335369,12 @@ {} ] ], + "accelerometer/Accelerometer-supported-by-feature-policy.html": [ + [ + "/accelerometer/Accelerometer-supported-by-feature-policy.html", + {} + ] + ], "accelerometer/Accelerometer.https.html": [ [ "/accelerometer/Accelerometer.https.html", @@ -335170,6 +335437,12 @@ {} ] ], + "ambient-light/AmbientLightSensor-supported-by-feature-policy.html": [ + [ + "/ambient-light/AmbientLightSensor-supported-by-feature-policy.html", + {} + ] + ], "ambient-light/AmbientLightSensor.https.html": [ [ "/ambient-light/AmbientLightSensor.https.html", @@ -335216,6 +335489,12 @@ {} ] ], + "animation-worklet/worklet-animation-pause.https.html": [ + [ + "/animation-worklet/worklet-animation-pause.https.html", + {} + ] + ], "animation-worklet/worklet-animation-with-fill-mode.https.html": [ [ "/animation-worklet/worklet-animation-with-fill-mode.https.html", @@ -346542,9 +346821,9 @@ {} ] ], - "css/css-shadow-parts/interaction-with-tree-abiding.html": [ + "css/css-shadow-parts/interaction-with-pseudo-elements.html": [ [ - "/css/css-shadow-parts/interaction-with-tree-abiding.html", + "/css/css-shadow-parts/interaction-with-pseudo-elements.html", {} ] ], @@ -347268,6 +347547,12 @@ {} ] ], + "css/css-syntax/charset-is-not-a-rule.html": [ + [ + "/css/css-syntax/charset-is-not-a-rule.html", + {} + ] + ], "css/css-syntax/charset/page-utf16-css-bomless-utf16.html": [ [ "/css/css-syntax/charset/page-utf16-css-bomless-utf16.html", @@ -365732,12 +366017,24 @@ {} ] ], + "encrypted-media/clearkey-check-encryption-scheme.https.html": [ + [ + "/encrypted-media/clearkey-check-encryption-scheme.https.html", + {} + ] + ], "encrypted-media/clearkey-check-initdata-type.https.html": [ [ "/encrypted-media/clearkey-check-initdata-type.https.html", {} ] ], + "encrypted-media/clearkey-check-status-for-hdcp.https.html": [ + [ + "/encrypted-media/clearkey-check-status-for-hdcp.https.html", + {} + ] + ], "encrypted-media/clearkey-events-session-closed-event.https.html": [ [ "/encrypted-media/clearkey-events-session-closed-event.https.html", @@ -366030,12 +366327,24 @@ {} ] ], + "encrypted-media/drm-check-encryption-scheme.https.html": [ + [ + "/encrypted-media/drm-check-encryption-scheme.https.html", + {} + ] + ], "encrypted-media/drm-check-initdata-type.https.html": [ [ "/encrypted-media/drm-check-initdata-type.https.html", {} ] ], + "encrypted-media/drm-check-status-for-hdcp.https.html": [ + [ + "/encrypted-media/drm-check-status-for-hdcp.https.html", + {} + ] + ], "encrypted-media/drm-events-session-closed-event.https.html": [ [ "/encrypted-media/drm-events-session-closed-event.https.html", @@ -366414,6 +366723,12 @@ {} ] ], + "encrypted-media/encrypted-media-supported-by-feature-policy.tentative.html": [ + [ + "/encrypted-media/encrypted-media-supported-by-feature-policy.tentative.html", + {} + ] + ], "encrypted-media/idlharness.https.html": [ [ "/encrypted-media/idlharness.https.html", @@ -366516,6 +366831,12 @@ {} ] ], + "event-timing/supported-types.window.js": [ + [ + "/event-timing/supported-types.window.html", + {} + ] + ], "eventsource/dedicated-worker/eventsource-close.htm": [ [ "/eventsource/dedicated-worker/eventsource-close.htm", @@ -367094,6 +367415,12 @@ {} ] ], + "feature-policy/payment-supported-by-feature-policy.tentative.html": [ + [ + "/feature-policy/payment-supported-by-feature-policy.tentative.html", + {} + ] + ], "feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ [ "/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html", @@ -367134,6 +367461,12 @@ } ] ], + "feature-policy/picture-in-picture-supported-by-feature-policy.html": [ + [ + "/feature-policy/picture-in-picture-supported-by-feature-policy.html", + {} + ] + ], "feature-policy/reporting/camera-report-only.https.html": [ [ "/feature-policy/reporting/camera-report-only.https.html", @@ -367282,6 +367615,12 @@ {} ] ], + "feature-policy/reporting/unoptimized-images-reporting.html": [ + [ + "/feature-policy/reporting/unoptimized-images-reporting.html", + {} + ] + ], "feature-policy/reporting/unsized-media-reporting.html": [ [ "/feature-policy/reporting/unsized-media-reporting.html", @@ -369172,6 +369511,12 @@ {} ] ], + "geolocation-sensor/GeolocationSensor-supported-by-feature-policy.html": [ + [ + "/geolocation-sensor/GeolocationSensor-supported-by-feature-policy.html", + {} + ] + ], "geolocation-sensor/GeolocationSensor.https.html": [ [ "/geolocation-sensor/GeolocationSensor.https.html", @@ -369232,6 +369577,12 @@ {} ] ], + "gyroscope/Gyroscope-supported-by-feature-policy.html": [ + [ + "/gyroscope/Gyroscope-supported-by-feature-policy.html", + {} + ] + ], "gyroscope/Gyroscope.https.html": [ [ "/gyroscope/Gyroscope.https.html", @@ -373204,6 +373555,12 @@ } ] ], + "html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html": [ + [ + "/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html", + {} + ] + ], "html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html": [ [ "/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html", @@ -383682,6 +384039,12 @@ {} ] ], + "magnetometer/Magnetometer-supported-by-feature-policy.html": [ + [ + "/magnetometer/Magnetometer-supported-by-feature-policy.html", + {} + ] + ], "magnetometer/Magnetometer.https.html": [ [ "/magnetometer/Magnetometer.https.html", @@ -384614,6 +384977,12 @@ {} ] ], + "mediacapture-streams/MediaStream-supported-by-feature-policy.html": [ + [ + "/mediacapture-streams/MediaStream-supported-by-feature-policy.html", + {} + ] + ], "mediacapture-streams/MediaStream-video-only.https.html": [ [ "/mediacapture-streams/MediaStream-video-only.https.html", @@ -384647,7 +385016,9 @@ "mediacapture-streams/MediaStreamTrack-getSettings.https.html": [ [ "/mediacapture-streams/MediaStreamTrack-getSettings.https.html", - {} + { + "timeout": "long" + } ] ], "mediacapture-streams/MediaStreamTrack-id.https.html": [ @@ -398828,6 +399199,12 @@ {} ] ], + "quirks/unitless-length/excluded-properties-003.html": [ + [ + "/quirks/unitless-length/excluded-properties-003.html", + {} + ] + ], "quirks/unitless-length/limited-quirks.html": [ [ "/quirks/unitless-length/limited-quirks.html", @@ -409954,6 +410331,12 @@ {} ] ], + "service-workers/service-worker/claim-fetch-with-appcache.https.html": [ + [ + "/service-workers/service-worker/claim-fetch-with-appcache.https.html", + {} + ] + ], "service-workers/service-worker/claim-fetch.https.html": [ [ "/service-workers/service-worker/claim-fetch.https.html", @@ -411744,9 +412127,33 @@ {} ] ], - "signed-exchange/sxg-referrer.tentative.https.html": [ + "signed-exchange/sxg-referrer-policy-header.tentative.https.html": [ + [ + "/signed-exchange/sxg-referrer-policy-header.tentative.https.html", + {} + ] + ], + "signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html": [ [ - "/signed-exchange/sxg-referrer.tentative.https.html", + "/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html", + {} + ] + ], + "signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html": [ + [ + "/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html", + {} + ] + ], + "signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html": [ + [ + "/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html", + {} + ] + ], + "signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html": [ + [ + "/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html", {} ] ], @@ -411856,6 +412263,22 @@ {} ] ], + "storage/estimate-usage-details-application-cache.https.tentative.html": [ + [ + "/storage/estimate-usage-details-application-cache.https.tentative.html", + {} + ] + ], + "storage/estimate-usage-details-caches.https.tentative.any.js": [ + [ + "/storage/estimate-usage-details-caches.https.tentative.any.html", + {} + ], + [ + "/storage/estimate-usage-details-caches.https.tentative.any.worker.html", + {} + ] + ], "storage/estimate-usage-details-indexeddb.https.tentative.any.js": [ [ "/storage/estimate-usage-details-indexeddb.https.tentative.any.html", @@ -411872,6 +412295,16 @@ {} ] ], + "storage/estimate-usage-details.https.tentative.any.js": [ + [ + "/storage/estimate-usage-details.https.tentative.any.html", + {} + ], + [ + "/storage/estimate-usage-details.https.tentative.any.worker.html", + {} + ] + ], "storage/idlharness.https.any.js": [ [ "/storage/idlharness.https.any.html", @@ -415698,6 +416131,12 @@ {} ] ], + "wake-lock/wakelock-supported-by-feature-policy.html": [ + [ + "/wake-lock/wakelock-supported-by-feature-policy.html", + {} + ] + ], "wake-lock/wakelock-type.https.html": [ [ "/wake-lock/wakelock-type.https.html", @@ -422138,6 +422577,12 @@ {} ] ], + "webusb/usb-supported-by-feature-policy.html": [ + [ + "/webusb/usb-supported-by-feature-policy.html", + {} + ] + ], "webusb/usb.https.any.js": [ [ "/webusb/usb.https.any.html", @@ -422328,6 +422773,12 @@ {} ] ], + "webvr/webvr-supported-by-feature-policy.html": [ + [ + "/webvr/webvr-supported-by-feature-policy.html", + {} + ] + ], "webvtt/api/VTTCue/align.html": [ [ "/webvtt/api/VTTCue/align.html", @@ -425972,6 +426423,12 @@ } ] ], + "xhr/sync-xhr-supported-by-feature-policy.html": [ + [ + "/xhr/sync-xhr-supported-by-feature-policy.html", + {} + ] + ], "xhr/template-element.html": [ [ "/xhr/template-element.html", @@ -446862,7 +447319,7 @@ }, "paths": { ".azure-pipelines.yml": [ - "387c55a5ec45ef3c27b2d5cd5f057f3067457aed", + "acfb09963915de916d13fe8c903eadac473afaa8", "support" ], ".codecov.yml": [ @@ -446882,7 +447339,7 @@ "support" ], ".taskcluster.yml": [ - "4a6de3b5b177a41dd2f5b7318a837e5e4eae54a8", + "ae99c0960acc56ca0970d9a03538e20c42179811", "support" ], ".travis.yml": [ @@ -451642,7 +452099,7 @@ "testharness" ], "IndexedDB/idb-explicit-commit.any.js": [ - "da4bd8c95269d6f0630d77ba4922a8251f7c18e6", + "12e56cc267a2a8ecb869b8b121f6e74047d0f73d", "testharness" ], "IndexedDB/idb_binary_key_conversion.htm": [ @@ -453913,6 +454370,10 @@ "6a8c9bcb7fc313e66421a7134b201cc3b956c8ec", "testharness" ], + "accelerometer/Accelerometer-supported-by-feature-policy.html": [ + "8e09c7acdfba7d77ce2a17c8a41ace0ee3a32cdc", + "testharness" + ], "accelerometer/Accelerometer.https.html": [ "b601c6120827078fd503e0a8c2609219a2c27f1e", "testharness" @@ -454745,6 +455206,10 @@ "9600843145cd2771629fea765bc853467a5d5bf9", "testharness" ], + "ambient-light/AmbientLightSensor-supported-by-feature-policy.html": [ + "d5c27c8bef29195641029009c9546f16e3758f22", + "testharness" + ], "ambient-light/AmbientLightSensor.https.html": [ "8fcc4c7cd227fee26907b7f0e0798ba6cd8f1a5d", "testharness" @@ -454774,7 +455239,7 @@ "testharness" ], "animation-worklet/common.js": [ - "eb114f24687289fcdd0515ead7dbbc074c7ccbba", + "15dff829774a49a1c17eacefebc7e5e34a422f9d", "support" ], "animation-worklet/current-time.https.html": [ @@ -454785,6 +455250,10 @@ "e821a2fee8a3ace54e8e7092ab17c490a0ded914", "testharness" ], + "animation-worklet/references/translated-box-ref.html": [ + "c73f5a177bf70f3a71d981bc9f04b38c5afe9f1c", + "support" + ], "animation-worklet/resources/animator-iframe.html": [ "e30cc281fcdefd8d029e7bf0ea92a1a9cd7af7e7", "support" @@ -454793,6 +455262,18 @@ "5b20f03bfadb5790c79ddd51e1f3d89a9f948852", "testharness" ], + "animation-worklet/worklet-animation-pause-immediately.https.html": [ + "f9dcf30bc908adb4e6b260dd00263e434a9b9ae4", + "reftest" + ], + "animation-worklet/worklet-animation-pause-resume.https.html": [ + "f26a93468c07de8e59a3826cb39c6bdf2618706f", + "reftest" + ], + "animation-worklet/worklet-animation-pause.https.html": [ + "4b7a9a0251da7c8179f68249578dc851b145c850", + "testharness" + ], "animation-worklet/worklet-animation-with-fill-mode.https.html": [ "49fead8bd39c56c6335c0748b01be0181767bbec", "testharness" @@ -456858,7 +457339,7 @@ "testharness" ], "background-fetch/fetch-uploads.https.window.js": [ - "4ee618a1292184420615c2f46b0860c1cc1a316f", + "f93f88a6bae7432ede7068934535e42fe2f5baee", "testharness" ], "background-fetch/fetch.https.window.js": [ @@ -571513,8 +571994,8 @@ "a064789f06111bf5ce791650207bcee195d346ab", "reftest" ], - "css/css-shadow-parts/interaction-with-tree-abiding.html": [ - "c11da7d12dea91306b79d141613ad6563dffb18f", + "css/css-shadow-parts/interaction-with-pseudo-elements.html": [ + "776ab2eb69dc77927c213a7fd99dd116376cf710", "testharness" ], "css/css-shadow-parts/invalidation-change-exportparts-forward.html": [ @@ -573193,6 +573674,10 @@ "17489e1bc2132f4c2acbc4ec901eccb8f7e4d365", "support" ], + "css/css-syntax/charset-is-not-a-rule.html": [ + "81b2a04dc5a0dd2f3434150f7bfb6a6d3f1cfef3", + "testharness" + ], "css/css-syntax/charset/.htaccess": [ "e14b20d395197af75339b2ae97864f526a698b39", "support" @@ -576738,21 +577223,25 @@ "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-break-word-002.html": [ - "660b7f163020a3f14385f77a43dbd6ab7fde32be", + "6f90f0c0cb8c00ee9552b9a0434c9d79fd8b7672", "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-break-word-003.html": [ - "6203b55e9c6fe73cd317c3d4968c56609209b38d", + "05e570bbb13e88dc8f47c09941d9c9a2017c5447", "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-break-word-004.html": [ - "b277319cd23831a4911978f450d0bc812aedb695", + "5f36410feba29162988ef6ae67fd0a139a6f90ba", "reftest" ], "css/css-text/overflow-wrap/overflow-wrap-break-word-005.html": [ "dd005a816f2febca4c41b52df75372019c5fb451", "reftest" ], + "css/css-text/overflow-wrap/overflow-wrap-break-word-006.html": [ + "6dc1b4dff52459d7f5516da64f4e09be313257d1", + "reftest" + ], "css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [ "2c83c46aa50f6d51efbb4d05635d86f7c166042d", "reftest" @@ -578369,6 +578858,26 @@ "dd9b9919fbb73ec843b5480bba3b7bfb21ed873f", "reftest" ], + "css/css-text/white-space/break-spaces-004.html": [ + "e2c043ec42ec13af1d4b8d4cca93ded78ec6519e", + "reftest" + ], + "css/css-text/white-space/break-spaces-005.html": [ + "d0dafd38c047c54e93ef197e0600aeafea4af6a6", + "reftest" + ], + "css/css-text/white-space/break-spaces-006.html": [ + "5f9d605866d7e7455ef399554b7d97238d5974a7", + "reftest" + ], + "css/css-text/white-space/break-spaces-007.html": [ + "77213618bd97299e87b2d6dc4040b78f87030dfc", + "reftest" + ], + "css/css-text/white-space/break-spaces-008.html": [ + "d183cac942f7ad982f582567fdad798b30460e59", + "reftest" + ], "css/css-text/white-space/control-chars-000.html": [ "b038fe9a90d3b8b9cb3bde7fd46396c7121688c9", "reftest" @@ -578677,6 +579186,10 @@ "b17af29bf54b573268522619d6e993750f9b51be", "reftest" ], + "css/css-text/white-space/pre-wrap-016.html": [ + "5f66a7be92b3c2a9aa9596c1237dd0ceaeac9b6d", + "reftest" + ], "css/css-text/white-space/pre-wrap-float-001.html": [ "6ef0faa0cf8e22ddea43dcd06ce3f9e5edf9cfd6", "reftest" @@ -578757,6 +579270,10 @@ "9f579f29e0c897c744e1b06d5d2d60e85612f823", "support" ], + "css/css-text/white-space/reference/white-space-break-spaces-005-ref.html": [ + "3247ae5a881ee513ae0b26821133b702fd473993", + "support" + ], "css/css-text/white-space/reference/white-space-intrinsic-size-001-ref.html": [ "1f1761d5a3de94e63cf231d892d50704ddee8d6b", "support" @@ -579170,11 +579687,19 @@ "reftest" ], "css/css-text/word-break/word-break-break-all-010.html": [ - "7d3bc056d822ca15b523f332c6c23ed22a85b340", + "be46d29d7ddf6a4b8013956a86828dbd10e6ca75", "reftest" ], "css/css-text/word-break/word-break-break-all-011.html": [ - "531c68d8cea3f3496e34b26ae51e1138385acbb8", + "fade439dd9a9d4505e3ab7b9060a2f962eb6fd95", + "reftest" + ], + "css/css-text/word-break/word-break-break-all-012.html": [ + "cd3d44056ec9715c0a9599bf5b7cad180620af74", + "reftest" + ], + "css/css-text/word-break/word-break-break-all-013.html": [ + "85dce08b6418088292c50e30dab9f497b31fb6ac", "reftest" ], "css/css-text/word-break/word-break-break-all-014.html": [ @@ -589330,7 +589855,7 @@ "reftest" ], "css/css-values/attr-color-invalid-fallback.html": [ - "92258893b9e886d6de6bd27ab37a3afcc673e3df", + "9e016d1630d37b3af41fbbd1f1231341ee54afcf", "reftest" ], "css/css-values/attr-color-valid.html": [ @@ -589338,11 +589863,11 @@ "reftest" ], "css/css-values/attr-invalid-type-001.html": [ - "c427adecbebf2795946d84e5817481d88a88aeb7", + "1f88c37c64038343b17d0960326c63fb8e625340", "reftest" ], "css/css-values/attr-invalid-type-002.html": [ - "797700ddacf7f72e8c65948de6d30ac0dc33f97e", + "dbdac8a4ba1cf15e583684c9c2b3ac158c0af614", "reftest" ], "css/css-values/attr-length-invalid-cast.html": [ @@ -589350,7 +589875,7 @@ "reftest" ], "css/css-values/attr-length-invalid-fallback.html": [ - "6a5d4dfe68af677986dae351cc629263648059a3", + "e68fe7a47015c5868e0efb78c26f44e17f3c8764", "reftest" ], "css/css-values/attr-length-valid-zero-nofallback.html": [ @@ -589370,7 +589895,7 @@ "reftest" ], "css/css-values/attr-px-invalid-fallback.html": [ - "778697d0d1f2381d71a5c45a7ac269ecd7394c41", + "f8f88f58094974ca284d0a99f486e33ed89fb550", "reftest" ], "css/css-values/attr-px-valid.html": [ @@ -589485,6 +590010,26 @@ "257a243359ad1604567bf10c52662c1fe12de6bf", "reftest" ], + "css/css-values/ic-unit-008.html": [ + "05ab218069871eb9d7d3df5e5d09be4f5dcc328a", + "reftest" + ], + "css/css-values/ic-unit-009.html": [ + "11ec5985c0288cef75d02869124eddfe131251fd", + "reftest" + ], + "css/css-values/ic-unit-010.html": [ + "ca963041a32b30c0aaa552e8093db32c7443b9c4", + "reftest" + ], + "css/css-values/ic-unit-011.html": [ + "584002247196c8b2af5becf89d9694379b1e0350", + "reftest" + ], + "css/css-values/ic-unit-012.html": [ + "ac281ccd4afb7ed68e67d286659ec89d3b8c4f23", + "reftest" + ], "css/css-values/initial-background-color.html": [ "f38226651774f9ac2151b9b951f47f519a4663ea", "reftest" @@ -589505,6 +590050,14 @@ "295b418f304a76cde4dba21a1d24022557882b18", "testharness" ], + "css/css-values/q-unit-case-insensitivity-001.html": [ + "b4a08aa117952c6f92e2aec6f57843b46a460104", + "reftest" + ], + "css/css-values/q-unit-case-insensitivity-002.html": [ + "328fcbd4aed6268e77ec19759a69f9eeb788951b", + "reftest" + ], "css/css-values/reference/200-200-green.html": [ "f3da3ddb3b8d90df91aa60d88f0c13d28eccef09", "support" @@ -589529,6 +590082,14 @@ "962a748d2c059b45fca4d7788b04b77c61e0b923", "support" ], + "css/css-values/reference/ic-unit-008-ref.html": [ + "6a27f6e820d565de02f998da3aa7e5e22129e2fb", + "support" + ], + "css/css-values/reference/ic-unit-009-ref.html": [ + "2ae37b8b619bf9adea6c4f39ae87836c551bfc37", + "support" + ], "css/css-values/reference/vh-support-atviewport-ref.htm": [ "cfa9e8d02d48436ee1c311da7c7bd65b0f4291cf", "support" @@ -614681,10 +615242,18 @@ "932c9962d53adc6fdd76a6efcbcefc3acb9fef50", "support" ], + "encrypted-media/clearkey-check-encryption-scheme.https.html": [ + "eb580ea5f87f465dff7e1b479cd28088c5f8c417", + "testharness" + ], "encrypted-media/clearkey-check-initdata-type.https.html": [ "00894338ae8a04fe62528771bfda3dc25496ce1f", "testharness" ], + "encrypted-media/clearkey-check-status-for-hdcp.https.html": [ + "5ec3b262852eebbe82afa68e4fad5db908744d90", + "testharness" + ], "encrypted-media/clearkey-events-session-closed-event.https.html": [ "ddf3ecbbbf78cce7c6ac985d85445f139b4e9c6c", "testharness" @@ -614917,10 +615486,18 @@ "659a61cdcf1270cb99a058f89d817f283436e2d9", "support" ], + "encrypted-media/drm-check-encryption-scheme.https.html": [ + "862591b1b897027d201384857fe37f73ac6b96e6", + "testharness" + ], "encrypted-media/drm-check-initdata-type.https.html": [ "6b3324027b8aad5f7da65c7ca9a8a3ce3c55c65f", "testharness" ], + "encrypted-media/drm-check-status-for-hdcp.https.html": [ + "68c45be69b7bfc317f0be2a55b4a38c6e959f55e", + "testharness" + ], "encrypted-media/drm-events-session-closed-event.https.html": [ "425d17646ca277ff811e55f3216d8a9570e848f5", "testharness" @@ -615125,6 +615702,10 @@ "a5114262ad070d9194a1299c2b1bceaaab1e5aba", "testharness" ], + "encrypted-media/encrypted-media-supported-by-feature-policy.tentative.html": [ + "5b2d2240c6ad5d15e17a877f5d06946fa137de6f", + "testharness" + ], "encrypted-media/idlharness.https.html": [ "6a2ae80a5384aa885d7a1545b19f41cc828c420e", "testharness" @@ -615181,10 +615762,18 @@ "3a4262b179c65c0cafad0a934b46397a2f5f6e95", "support" ], + "encrypted-media/scripts/check-encryption-scheme.js": [ + "5d629271b42ff374e1b40a9a3b4113b42d1afbaf", + "support" + ], "encrypted-media/scripts/check-initdata-type.js": [ "5c7cb6e4b9a427d4f15364027724e13ba836d89e", "support" ], + "encrypted-media/scripts/check-status-for-hdcp.js": [ + "ac3081969523864bc5396447c887dc7944c3d5db", + "support" + ], "encrypted-media/scripts/clearkey-update-non-ascii-input.js": [ "b34c493fd113a91780bf365800b71b98b6a3bfd6", "support" @@ -615561,6 +616150,10 @@ "5c2d1b1fc5d8e6518e6db1bca6f1947d615979d3", "support" ], + "event-timing/supported-types.window.js": [ + "c81d501f49fc583904ebf3fd4e83bb315e718d7e", + "testharness" + ], "eventsource/META.yml": [ "92f1036338515da7807fdbde7ab0a26f509cc986", "support" @@ -616205,6 +616798,10 @@ "a2836778bc5389fdb65e9f6d5f83c7967200866f", "support" ], + "feature-policy/payment-supported-by-feature-policy.tentative.html": [ + "07dec701769dfecabac636e7a33eddb254e0d629", + "testharness" + ], "feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ "a5ea5139a937984c98f169a088bc6d59f0ba4351", "testharness" @@ -616233,6 +616830,10 @@ "1759381fdc4141302f1b95868550ead76d9f5ca7", "support" ], + "feature-policy/picture-in-picture-supported-by-feature-policy.html": [ + "a65c682a6add63722cbb595d1639b6400356b978", + "testharness" + ], "feature-policy/reporting/camera-report-only.https.html": [ "c22e1a51740d4b27bcc4ae0efa4bdb0c4b8fcf39", "testharness" @@ -616425,6 +617026,18 @@ "21a909e1fb6d84f066f42c09488f1bef032171c9", "support" ], + "feature-policy/reporting/unoptimized-image.jpg": [ + "599137a55d710fe6b8d3052c05c81915622ea0d0", + "support" + ], + "feature-policy/reporting/unoptimized-images-reporting.html": [ + "fb27a13996a46b0e4592f4d28cc3574ae1745fb5", + "testharness" + ], + "feature-policy/reporting/unoptimized-images-reporting.html.headers": [ + "10b41235409ea38507d9ffe29a18547174351cc3", + "support" + ], "feature-policy/reporting/unsized-media-reporting.html": [ "bb81a496ca5b8128b7438e6f1dd4ed0dd574238c", "testharness" @@ -617670,7 +618283,7 @@ "testharness" ], "fetch/cross-origin-resource-policy/syntax.any.js": [ - "cf5b06d5c4f4b60749e38f6a469a85e5efff0ea6", + "dc874977a63e51978af6a4a6769d81750beec200", "testharness" ], "fetch/data-urls/README.md": [ @@ -619037,6 +619650,10 @@ "68a99029f63b04d3ce44f2564f39f31062376dfd", "testharness" ], + "geolocation-sensor/GeolocationSensor-supported-by-feature-policy.html": [ + "aa05f33a5e48dae1733c8a17c17fe0135885d8a9", + "testharness" + ], "geolocation-sensor/GeolocationSensor.https.html": [ "ef198438fdee21bb667f9e23795caea4dc23e833", "testharness" @@ -619125,6 +619742,10 @@ "02edf4bd232ec2878b3d9f5ff7a0bc976eb41e39", "testharness" ], + "gyroscope/Gyroscope-supported-by-feature-policy.html": [ + "06a4137f17dae94eb3b80edd625a0a382d693bb8", + "testharness" + ], "gyroscope/Gyroscope.https.html": [ "0c3f08f5f47c60817cfe0aed38829953459b9041", "testharness" @@ -621194,11 +621815,11 @@ "testharness" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [ - "caac56a176de5b05aed6cc83c9c7b730310870aa", + "888343b45bcd901b6b665453170c41ad4cc5a753", "testharness" ], "html/browsers/origin/cross-origin-objects/frame-with-then.html": [ - "96cdf1ea99b1c41f99ee50a795b308723a94bec7", + "1127995ea84dcd94fe87642b95b34e597f30abba", "support" ], "html/browsers/origin/cross-origin-objects/frame.html": [ @@ -629033,6 +629654,10 @@ "69ce436270a8715da3e7e4cea125824c2bbf57dc", "support" ], + "html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html": [ + "af4de6bf89d493c03545e1c6188dbbc0c8fc6a2e", + "testharness" + ], "html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html": [ "f687edf198dbb65064d90d4c3fc8baf4d684cde7", "testharness" @@ -638726,7 +639351,7 @@ "support" ], "interfaces/IndexedDB.idl": [ - "137528c148ae434141eb72e9720bd9e3eaf04a30", + "868338b3080ccad6195c5764e6b70eb4854a93c3", "support" ], "interfaces/InputDeviceCapabilities.idl": [ @@ -639022,7 +639647,7 @@ "support" ], "interfaces/mediastream-recording.idl": [ - "5bf661e6cc5e2141181fef1f01eafa6e4da82248", + "0be0538d1227147930cb03c52391cce7497eb2e4", "support" ], "interfaces/mst-content-hint.idl": [ @@ -639785,6 +640410,10 @@ "04c9800fc018dcb51584e204f453d74bd2647c2c", "testharness" ], + "magnetometer/Magnetometer-supported-by-feature-policy.html": [ + "a04936389507ca4b6da5ea727ef094ed6d39a77f", + "testharness" + ], "magnetometer/Magnetometer.https.html": [ "661ea68a82d6f066daa0bddf27780e10f92fd638", "testharness" @@ -641153,6 +641782,10 @@ "b934397914f39cee6bb9a52915959233c0ca84ca", "testharness" ], + "mediacapture-streams/MediaStream-supported-by-feature-policy.html": [ + "ef29ae6eec210a2d88064d6671f0cceb6137e05f", + "testharness" + ], "mediacapture-streams/MediaStream-video-only.https.html": [ "88200b23306ac4d7f7f39870f8b2642394acf977", "testharness" @@ -641178,7 +641811,7 @@ "testharness" ], "mediacapture-streams/MediaStreamTrack-getSettings.https.html": [ - "158c9014617744c7181fba4862bdb7ce7e672b9d", + "c062205f0d4bb6706170c07f0d58d4a63cdb7bca", "testharness" ], "mediacapture-streams/MediaStreamTrack-id.https.html": [ @@ -651270,7 +651903,7 @@ "testharness" ], "payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html": [ - "edde533be6b2e49415b81ae4df167139117a0d7c", + "45f3f0a5672cf64501718aa43dc5aac87249bab9", "manual" ], "payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html": [ @@ -651322,7 +651955,7 @@ "manual" ], "payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html": [ - "356f30da6b54bef4136a2b3a806313bf4bb1f766", + "c3e2ba713223c94689d4549aa90008fe91faeb7c", "manual" ], "payment-request/algorithms-manual.https.html": [ @@ -651398,7 +652031,7 @@ "testharness" ], "payment-request/historical.https.html": [ - "cbd29d4cff8698365c05acfe75504de5ec7e1aec", + "e681f6486b9bdd46d7420cac15855dc9acaa2ca7", "testharness" ], "payment-request/idlharness.https.window.js": [ @@ -652826,13 +653459,17 @@ "reftest" ], "quirks/unitless-length/excluded-properties-001.html": [ - "2e33cec0b33644576fb81e6fd9dbaf42bb02cf92", + "09fedcf6018a673d22f397936a0c6d25ae7fd9ae", "testharness" ], "quirks/unitless-length/excluded-properties-002.html": [ "5f98bc283ebc2b5d719815c59c3d1cd53acd2ed9", "testharness" ], + "quirks/unitless-length/excluded-properties-003.html": [ + "4cbe012a55e25510f5674875dddb6fb1fcb7173d", + "testharness" + ], "quirks/unitless-length/limited-quirks.html": [ "fab0b3b805bad3670ffce46f627ad4134c55a027", "testharness" @@ -662782,7 +663419,7 @@ "support" ], "resources/testharness.js": [ - "ed3ffb425a85cb8fabd8bba0d7a0a4f7b46437cd", + "fb86c580d22ca14159b19b21a55b2cabfc76a742", "support" ], "resources/testharness.js.headers": [ @@ -665094,13 +665731,17 @@ "testharness" ], "service-workers/service-worker/appcache-ordering-main.https.html": [ - "921dae015cb55cf805ad960e902bbb22890f80bc", + "a86671c1fe4ec94cec84d63bb7e30922b03cf11a", "testharness" ], "service-workers/service-worker/claim-affect-other-registration.https.html": [ "52555ac271b5bad279ab37352c9d9937c780909a", "testharness" ], + "service-workers/service-worker/claim-fetch-with-appcache.https.html": [ + "4890a84ba10fa186e2e213d66d58a4937d2c8609", + "testharness" + ], "service-workers/service-worker/claim-fetch.https.html": [ "6b7d353c6ae3b53c5c7d9398f09fb2f476201db1", "testharness" @@ -665818,7 +666459,7 @@ "support" ], "service-workers/service-worker/resources/appcache-ordering.manifest": [ - "0deed0e91a80214520673c188a3090ebb657f6c0", + "e6597ccb8acb0dceb4a990c3148debe3c4ff8f21", "support" ], "service-workers/service-worker/resources/blank.html": [ @@ -665862,7 +666503,7 @@ "support" ], "service-workers/service-worker/resources/claim-worker.js": [ - "53f210cf7634993f86310cdefec9a15fd6b699a0", + "18004079475e2bbd9d1a8d25ae4b26c7638de58e", "support" ], "service-workers/service-worker/resources/classic-worker.js": [ @@ -666830,7 +667471,7 @@ "support" ], "service-workers/service-worker/resources/test-helpers.sub.js": [ - "7efde354a8f9b3b157972dca8e5a3c5b5eb4116a", + "14101319fa9d9e4c76f33a471098d280f117a15f", "support" ], "service-workers/service-worker/resources/testharness-helpers.js": [ @@ -667910,7 +668551,7 @@ "support" ], "signed-exchange/resources/sxg-util.js": [ - "0d0e263fd620584b64b059fef1d11f315f4c2423", + "7d592ea21431802655ce3134d50718ef37394a42", "support" ], "signed-exchange/resources/sxg-version1b2.sxg": [ @@ -668025,8 +668666,24 @@ "5b60ab9e1a12e2b169c4972c422ddbe3ebc5f581", "testharness" ], - "signed-exchange/sxg-referrer.tentative.https.html": [ - "3be9b1ff9b430e986dc8784a680b11659ab480fa", + "signed-exchange/sxg-referrer-policy-header.tentative.https.html": [ + "5dff6af8cb08c665622b2c44437d6a51c537f4fc", + "testharness" + ], + "signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html": [ + "c2870fdd0afce54e66f19ceb0b88deb898cf5787", + "testharness" + ], + "signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html": [ + "b3c77d14273f2cca42c078862f2bae5be4d38690", + "testharness" + ], + "signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html": [ + "8a6cdd993af3aa0e8b047c94512454de76b35a8e", + "testharness" + ], + "signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html": [ + "88917167b9c8ffcf0e08a24cf09cbf76381623a3", "testharness" ], "signed-exchange/sxg-utf8-inner-url.tentative.html": [ @@ -668121,6 +668778,14 @@ "090f004b8514bc9c99e8f85f9e8f9073dff2a263", "testharness" ], + "storage/estimate-usage-details-application-cache.https.tentative.html": [ + "464a99887bdb1a5b38c3bce395552bf6b50ff0fe", + "testharness" + ], + "storage/estimate-usage-details-caches.https.tentative.any.js": [ + "bf889f84184f0c8cb17997d392f738d062cce908", + "testharness" + ], "storage/estimate-usage-details-indexeddb.https.tentative.any.js": [ "c854d5b8848638d11563a48348e7c3393ff58459", "testharness" @@ -668129,6 +668794,10 @@ "cf3a2aa9430d480df4fc7ff2487e7a42d5c15699", "testharness" ], + "storage/estimate-usage-details.https.tentative.any.js": [ + "2a1cea5fb8dfa78c320328e667bb7ffd940802b0", + "testharness" + ], "storage/helpers.js": [ "fbc746a30b6dfa6d00fc2db747c78ec09a7beefc", "support" @@ -668153,6 +668822,14 @@ "57e15f0e811de3e94652b2f16c5482a94be63c24", "testharness" ], + "storage/resources/appcache.manifest": [ + "ce90bafd21feba90680448fd930ad477bf188638", + "support" + ], + "storage/resources/iframe_with_appcache_manifest.html": [ + "8365ce41f494936a8f8f4b7c2be9d80ffbe38cf8", + "support" + ], "storage/storagemanager-estimate.https.any.js": [ "d1d2e21924cd016165b02436dea994f44c193cd9", "testharness" @@ -672553,10 +673230,6 @@ "ea53f969015f0f79a98a64abc968d4424b407a89", "support" ], - "tools/ci/check_stability.py": [ - "a71e0956629a86ff1769014767a894471e5b09bb", - "support" - ], "tools/ci/ci_built_diff.sh": [ "81bf098f56aad48b7b3fce2d7cabd606fefa2d4e", "support" @@ -672586,7 +673259,7 @@ "support" ], "tools/ci/commands.json": [ - "361c9e4f3de88b89019481af17875979dc532e5b", + "841fd855c8056829afd347e3067e55804ca65139", "support" ], "tools/ci/install.sh": [ @@ -672610,7 +673283,7 @@ "support" ], "tools/ci/start.sh": [ - "9f621b2326e7769a232cf620a4863f4104d35ed1", + "580bfb937ddc21c1ce1c6729b2b6ba12f7efe79d", "support" ], "tools/ci/tag_master.py": [ @@ -672638,7 +673311,7 @@ "support" ], "tools/docker/Dockerfile": [ - "20f6ef26c7ae54acf48cdba353d5b1970e97c989", + "53564ac135c909d19138bee24780c28ddba04a03", "support" ], "tools/docker/start.sh": [ @@ -673294,7 +673967,7 @@ "support" ], "tools/requirements_flake8.txt": [ - "d2e7dd64232ad76a71d00368d163957922aeedcb", + "00d182e2d0f5fc013056951229e3aa3f38143369", "support" ], "tools/runner/css/bootstrap-theme.min.css": [ @@ -677370,7 +678043,7 @@ "support" ], "tools/wpt/tests/test_wpt.py": [ - "bf6250f2903545cf510478fa079361aae917dd95", + "1ddac67a39a368e44b94150a502caa0e32f8044f", "support" ], "tools/wpt/tox.ini": [ @@ -677646,7 +678319,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/firefox.py": [ - "3b5c96caed66dd6e8fd3b639fa7c8f2aa79beb02", + "67d5b6ec2f5e97046c020947c8449d5205a713bf", "support" ], "tools/wptrunner/wptrunner/browsers/ie.py": [ @@ -677810,7 +678483,7 @@ "support" ], "tools/wptrunner/wptrunner/metadata.py": [ - "94560cd93ff14818ce3de60f3866714043c24236", + "b170fc663165af2c20061184ebea8a0a93cf3b01", "support" ], "tools/wptrunner/wptrunner/products.py": [ @@ -677934,7 +678607,7 @@ "support" ], "tools/wptrunner/wptrunner/wptcommandline.py": [ - "8443a01c7dea9d8839f9659e194614bcbf4caedb", + "0a3a8c2b6f7ea626b715b23b03b3765ef0c12808", "support" ], "tools/wptrunner/wptrunner/wptlogging.py": [ @@ -680661,6 +681334,10 @@ "98cebe01c1126e0ebdc26784e15e9a057d1a03fb", "testharness" ], + "wake-lock/wakelock-supported-by-feature-policy.html": [ + "d6289fff43c8717ac6e9ace59713e6fd70bd249d", + "testharness" + ], "wake-lock/wakelock-type.https.html": [ "2f9e1242614d57a79b2aada32cdd3d2cb3ae012d", "testharness" @@ -683306,11 +683983,11 @@ "wdspec" ], "webdriver/tests/new_window/new_tab.py": [ - "fbb249fd78361681fe755f72d14a6879d5725cbf", + "0bf94496572183709743a5f0566931f1871c0ba2", "wdspec" ], "webdriver/tests/new_window/new_window.py": [ - "eb4db6729ecaa2c6a8ba92f272c4dee90899e3a2", + "8b12248a5524f95aefb9ea6e6ae03c856fbfc751", "wdspec" ], "webdriver/tests/new_window/user_prompts.py": [ @@ -684162,7 +684839,7 @@ "support" ], "webrtc-quic/RTCQuicTransport.https.html": [ - "c64ed6af093c690ece59a5c68e949c4ae4f5e6af", + "82427e67cb4ab231f91d6e7d04bd25f79e5f94fa", "testharness" ], "webrtc-stats/META.yml": [ @@ -684178,7 +684855,7 @@ "testharness" ], "webrtc-stats/idlharness.window.js": [ - "23741201b61a63f9353161c3e610b50a835d947e", + "d98712fc485298a0455e44c9f29407dc232fca63", "testharness" ], "webrtc/META.yml": [ @@ -684334,7 +685011,7 @@ "support" ], "webrtc/RTCPeerConnection-iceConnectionState.html": [ - "4071033a3c9eff6e5b848531127c1b70ee90bb20", + "b647b3d3e35e31f16b33422f67cb30b917d1d0af", "testharness" ], "webrtc/RTCPeerConnection-iceGatheringState.html": [ @@ -685937,6 +686614,10 @@ "4fd1e269362c43d282ca8e3c5c35a5d648f0666b", "support" ], + "webusb/usb-supported-by-feature-policy.html": [ + "d5b585a094f516839dd897935839953d15043dce", + "testharness" + ], "webusb/usb.https.any.js": [ "109c82a415684b96e4e3a85ee09e773713b58b62", "testharness" @@ -686049,6 +686730,10 @@ "87d343d8f84d20d9b4cc12669318d6d2c3f9ae47", "support" ], + "webvr/webvr-supported-by-feature-policy.html": [ + "9487c3516b7ca6f6bbe1384e2083ad2281a669cc", + "testharness" + ], "webvtt/META.yml": [ "949f312d7acc3444b3c116a55d1175dd12be33ca", "support" @@ -692165,6 +692850,10 @@ "d23fbb8c66def47e31ad01aa7a311064ba8fddbd", "testharness" ], + "xhr/sync-xhr-supported-by-feature-policy.html": [ + "45588bf6af54b0136c72068544bc908378f286a2", + "testharness" + ], "xhr/template-element.html": [ "c23c99788e46dae24009b3c5092efeb5f93b8e1f", "testharness" diff --git a/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html.ini b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html.ini new file mode 100644 index 00000000000..b2783913393 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html.ini @@ -0,0 +1,2 @@ +[overflow-wrap-break-word-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-004.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-004.html.ini new file mode 100644 index 00000000000..3b579655b8e --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-004.html.ini @@ -0,0 +1,2 @@ +[break-spaces-004.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-005.html.ini new file mode 100644 index 00000000000..c2c621bfe62 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-005.html.ini @@ -0,0 +1,2 @@ +[break-spaces-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-006.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-006.html.ini new file mode 100644 index 00000000000..971ef8db445 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-006.html.ini @@ -0,0 +1,2 @@ +[break-spaces-006.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-007.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-007.html.ini new file mode 100644 index 00000000000..8f26da2e6ee --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-007.html.ini @@ -0,0 +1,2 @@ +[break-spaces-007.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/break-spaces-008.html.ini b/tests/wpt/metadata/css/css-text/white-space/break-spaces-008.html.ini new file mode 100644 index 00000000000..129efde61a2 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/break-spaces-008.html.ini @@ -0,0 +1,2 @@ +[break-spaces-008.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-012.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-012.html.ini new file mode 100644 index 00000000000..508737adbc1 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-012.html.ini @@ -0,0 +1,2 @@ +[word-break-break-all-012.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-013.html.ini b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-013.html.ini new file mode 100644 index 00000000000..9985af751f7 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/word-break/word-break-break-all-013.html.ini @@ -0,0 +1,2 @@ +[word-break-break-all-013.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini index 130c0181e43..442aa176ed7 100644 --- a/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini +++ b/tests/wpt/metadata/css/css-transitions/properties-value-001.html.ini @@ -1079,3 +1079,9 @@ [text-indent percentage(%) / values] expected: FAIL + [padding-left length(px) / values] + expected: FAIL + + [padding-bottom length(ex) / values] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/ic-unit-008.html.ini b/tests/wpt/metadata/css/css-values/ic-unit-008.html.ini new file mode 100644 index 00000000000..027af6d19c9 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/ic-unit-008.html.ini @@ -0,0 +1,2 @@ +[ic-unit-008.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-values/ic-unit-009.html.ini b/tests/wpt/metadata/css/css-values/ic-unit-009.html.ini new file mode 100644 index 00000000000..ec079625a5f --- /dev/null +++ b/tests/wpt/metadata/css/css-values/ic-unit-009.html.ini @@ -0,0 +1,2 @@ +[ic-unit-009.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-values/ic-unit-010.html.ini b/tests/wpt/metadata/css/css-values/ic-unit-010.html.ini new file mode 100644 index 00000000000..ed3149ae20c --- /dev/null +++ b/tests/wpt/metadata/css/css-values/ic-unit-010.html.ini @@ -0,0 +1,2 @@ +[ic-unit-010.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-values/ic-unit-011.html.ini b/tests/wpt/metadata/css/css-values/ic-unit-011.html.ini new file mode 100644 index 00000000000..fc139eb97d5 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/ic-unit-011.html.ini @@ -0,0 +1,2 @@ +[ic-unit-011.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-values/ic-unit-012.html.ini b/tests/wpt/metadata/css/css-values/ic-unit-012.html.ini new file mode 100644 index 00000000000..3c08ad5954f --- /dev/null +++ b/tests/wpt/metadata/css/css-values/ic-unit-012.html.ini @@ -0,0 +1,2 @@ +[ic-unit-012.html] + 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 95b74e19aec..1ba6fdcec47 100644 --- a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini +++ b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini @@ -2,7 +2,7 @@ type: testharness [single-byte-decoder.html?document] - expected: CRASH + expected: TIMEOUT [ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)] expected: FAIL @@ -32,7 +32,7 @@ [single-byte-decoder.html?XMLHttpRequest] - expected: TIMEOUT + expected: CRASH [ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)] expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index c0a9a81dbe6..18f786d4963 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -312,15 +312,3 @@ [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL - [<iframe>: combined response Content-Type: text/html */*] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html */*;charset=gbk] - expected: FAIL - - [<iframe>: separate response Content-Type: */* text/html] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html;x=" text/plain] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index b7052af5b5c..87c807a49ff 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,3 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff] - 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/media-elements/autoplay-supported-by-feature-policy.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html.ini new file mode 100644 index 00000000000..41e9161e0c2 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html.ini @@ -0,0 +1,4 @@ +[autoplay-supported-by-feature-policy.html] + [document.featurePolicy.features should advertise autoplay.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini deleted file mode 100644 index 178680e5d14..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[script-onerror-insertion-point-2.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini deleted file mode 100644 index 63682614c4f..00000000000 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[promise-rejection-events.html] - expected: TIMEOUT - [rejectionhandled is dispatched from a queued task, and not immediately] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini index 05a16975210..17feaebfc09 100644 --- a/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini +++ b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini @@ -143,3 +143,24 @@ [Property shape-margin does not support quirky length] expected: FAIL + [Property inset-inline-start does not support quirky length] + expected: FAIL + + [Property inset-block does not support quirky length] + expected: FAIL + + [Property inset-block-start does not support quirky length] + expected: FAIL + + [Property inset-inline does not support quirky length] + expected: FAIL + + [Property inset-inline-end does not support quirky length] + expected: FAIL + + [Property inset does not support quirky length] + expected: FAIL + + [Property inset-block-end does not support quirky length] + expected: FAIL + diff --git a/tests/wpt/metadata/quirks/unitless-length/excluded-properties-003.html.ini b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-003.html.ini new file mode 100644 index 00000000000..a239e5a07dd --- /dev/null +++ b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-003.html.ini @@ -0,0 +1,4 @@ +[excluded-properties-003.html] + [inset does not support quirky length values] + 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/metadata/webvr/webvr-supported-by-feature-policy.html.ini b/tests/wpt/metadata/webvr/webvr-supported-by-feature-policy.html.ini new file mode 100644 index 00000000000..25b0d2f6347 --- /dev/null +++ b/tests/wpt/metadata/webvr/webvr-supported-by-feature-policy.html.ini @@ -0,0 +1,4 @@ +[webvr-supported-by-feature-policy.html] + [document.featurePolicy.features should advertise xr.] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini index bf2a1d61bab..bfd4d6dd2d6 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/import-in-moduleworker.html.ini @@ -1,4 +1,5 @@ [import-in-moduleworker.html] + expected: ERROR [Base URL in module dedicated workers: import] expected: FAIL diff --git a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini index 650c91da4a6..333edb3a26e 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini @@ -1,5 +1,4 @@ [sharedworker-in-worker.html] - expected: ERROR [Base URL in workers: new SharedWorker()] expected: FAIL diff --git a/tests/wpt/metadata/xhr/sync-xhr-supported-by-feature-policy.html.ini b/tests/wpt/metadata/xhr/sync-xhr-supported-by-feature-policy.html.ini new file mode 100644 index 00000000000..cc8d8fcd5d0 --- /dev/null +++ b/tests/wpt/metadata/xhr/sync-xhr-supported-by-feature-policy.html.ini @@ -0,0 +1,4 @@ +[sync-xhr-supported-by-feature-policy.html] + [document.featurePolicy.features should advertise sync-xhr.] + expected: FAIL + diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini deleted file mode 100644 index dbea4f293ad..00000000000 --- a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[transition_calc_implicit.html] - expected: TIMEOUT diff --git a/tests/wpt/mozilla/meta/mozilla/paint_timing.html.ini b/tests/wpt/mozilla/meta/mozilla/paint_timing.html.ini new file mode 100644 index 00000000000..14a9e778f39 --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/paint_timing.html.ini @@ -0,0 +1,4 @@ +[paint_timing.html] + [Performance entries observer] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/.azure-pipelines.yml b/tests/wpt/web-platform-tests/.azure-pipelines.yml index 387c55a5ec4..acfb0996391 100644 --- a/tests/wpt/web-platform-tests/.azure-pipelines.yml +++ b/tests/wpt/web-platform-tests/.azure-pipelines.yml @@ -6,9 +6,13 @@ # https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/index # -# In addition to this configuration file, the "Build pull requests from forks -# of this repository" setting must also be enabled in the Azure DevOps project: -# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github#validate-contributions-from-forks +# In addition to this configuration file, some setup in the Azure DevOps +# project is required: +# - The "Build pull requests from forks of this repository" setting must be +# enabled: https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github#validate-contributions-from-forks +# - A scheduled build needs to be set up for the the epochs/daily branch. +# - To get results from scheduled builds into wpt.fyi, a service connection +# named wpt.fyi with URL https://wpt.fyi is needed. jobs: # The affected tests jobs are unconditional for speed, as most PRs have one or @@ -125,7 +129,7 @@ jobs: - job: all_macOS displayName: 'all tests (Safari Technology Preview)' - condition: eq(variables['Build.SourceBranch'], 'refs/heads/epochs/daily') + condition: eq(variables['Build.Reason'], 'Schedule') strategy: parallel: 4 # chosen to make runtime ~2h timeoutInMinutes: 360 @@ -148,3 +152,20 @@ jobs: inputs: artifactName: 'results' condition: succeededOrFailed() + +# The InvokeRESTAPI task can only run in a server job. +- job: all_post + displayName: 'all tests (wpt.fyi hook)' + dependsOn: all_macOS + pool: server + steps: + - task: InvokeRESTAPI@1 + displayName: 'Invoke wpt.fyi hook' + inputs: + serviceConnection: wpt.fyi + urlSuffix: /api/checks/azure/$(Build.BuildId) + - task: InvokeRESTAPI@1 + displayName: 'Invoke staging.wpt.fyi hook' + inputs: + serviceConnection: staging.wpt.fyi + urlSuffix: /api/checks/azure/$(Build.BuildId) diff --git a/tests/wpt/web-platform-tests/.taskcluster.yml b/tests/wpt/web-platform-tests/.taskcluster.yml index 4a6de3b5b17..ae99c0960ac 100644 --- a/tests/wpt/web-platform-tests/.taskcluster.yml +++ b/tests/wpt/web-platform-tests/.taskcluster.yml @@ -61,7 +61,7 @@ tasks: owner: ${event.pusher.email} source: ${event.repository.url} payload: - image: harjgam/web-platform-tests:0.25 + image: harjgam/web-platform-tests:0.26 maxRunTime: 7200 artifacts: public/results: @@ -136,7 +136,7 @@ tasks: owner: ${event.pull_request.user.login}@users.noreply.github.com source: ${event.repository.url} payload: - image: harjgam/web-platform-tests:0.25 + image: harjgam/web-platform-tests:0.26 maxRunTime: 7200 artifacts: public/results: diff --git a/tests/wpt/web-platform-tests/IndexedDB/idb-explicit-commit.any.js b/tests/wpt/web-platform-tests/IndexedDB/idb-explicit-commit.any.js index da4bd8c9526..12e56cc267a 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idb-explicit-commit.any.js +++ b/tests/wpt/web-platform-tests/IndexedDB/idb-explicit-commit.any.js @@ -188,20 +188,17 @@ promise_test(async testCase => { }); // Txn1 should commit before txn2, even though txn2 uses commit(). const txn1 = db.transaction(['books'], 'readwrite'); - const objectStore1 = txn1.objectStore('books'); - const putRequest1 = objectStore1.put({isbn:'one', title:'title1'}); + txn1.objectStore('books').put({isbn: 'one', title: 'title1'}); const releaseTxnFunction = keepAlive(testCase, txn1, 'books'); const txn2 = db.transaction(['books'], 'readwrite'); - const objectStore2 = txn2.objectStore('books'); - const putRequest2 = objectStore2.put({isbn:'one', title:'title2'}); + txn2.objectStore('books').put({isbn:'one', title:'title2'}); txn2.commit(); // Exercise the IndexedDB transaction ordering by executing one with a // different scope. const txn3 = db.transaction(['not_books'], 'readwrite'); - const objectStore3 = txn3.objectStore('not_books'); - objectStore3.put({'title': 'not_title'}, 'key'); + txn3.objectStore('not_books').put({'title': 'not_title'}, 'key'); txn3.oncomplete = function() { releaseTxnFunction(); } @@ -210,8 +207,7 @@ promise_test(async testCase => { // Read the data back to verify that txn2 executed last. const txn4 = db.transaction(['books'], 'readonly'); - const objectStore4 = txn4.objectStore('books'); - const getRequest4 = objectStore4.get('one'); + const getRequest4 = txn4.objectStore('books').get('one'); await promiseForTransaction(testCase, txn4); assert_equals(getRequest4.result.title, 'title2'); db.close(); @@ -225,8 +221,7 @@ promise_test(async testCase => { }); // Txn1 creates the book 'one' so the 'add()' below fails. const txn1 = db.transaction(['books'], 'readwrite'); - const objectStore1 = txn1.objectStore('books'); - const putRequest1 = objectStore1.add({isbn:'one', title:'title1'}); + txn1.objectStore('books').add({isbn:'one', title:'title1'}); txn1.commit(); await promiseForTransaction(testCase, txn1); @@ -235,15 +230,17 @@ promise_test(async testCase => { const txn2 = db.transaction(['books'], 'readwrite'); const objectStore2 = txn2.objectStore('books'); objectStore2.put({isbn:'two', title:'title2'}); - const addRequest2 = objectStore2.add({isbn:'one', title:'title2'}); + const addRequest = objectStore2.add({isbn:'one', title:'title2'}); txn2.commit(); - txn2.oncomplete = assert_unreached( - 'Transaction with invalid "add" call should not be completed.'); + txn2.oncomplete = () => { assert_unreached( + 'Transaction with invalid "add" call should not be completed.'); }; - var addWatcher = requestWatcher(testCase, addRequest2); - var txnWatcher = transactionWatcher(testCase, txn2); - await Promise.all([addWatcher.wait_for('error'), - txnWatcher.wait_for('error', 'abort')]); + // Wait for the transaction to complete. We have to explicitly wait for the + // error signal on the transaction because of the nature of the test tooling. + await Promise.all([ + requestWatcher(testCase, addRequest).wait_for('error'), + transactionWatcher(testCase, txn2).wait_for(['error', 'abort']) + ]); // Read the data back to verify that txn2 was aborted. const txn3 = db.transaction(['books'], 'readonly'); @@ -255,3 +252,41 @@ promise_test(async testCase => { assert_equals(getRequest2.result, 0); db.close(); }, 'Transactions that explicitly commit and have errors should abort.'); + + +promise_test(async testCase => { + const db = await createDatabase(testCase, db => { + createBooksStore(testCase, db); + }); + const txn1 = db.transaction(['books'], 'readwrite'); + txn1.objectStore('books').add({isbn: 'one', title: 'title1'}); + txn1.commit(); + await promiseForTransaction(testCase, txn1); + + // The second add request will throw an error, but the onerror handler will + // appropriately catch the error allowing the valid put request on the + // transaction to commit. + const txn2 = db.transaction(['books'], 'readwrite'); + const objectStore2 = txn2.objectStore('books'); + objectStore2.put({isbn: 'two', title:'title2'}); + const addRequest = objectStore2.add({isbn: 'one', title:'unreached_title'}); + addRequest.onerror = (event) => { + event.preventDefault(); + addRequest.transaction.commit(); + }; + + // Wait for the transaction to complete. We have to explicitly wait for the + // error signal on the transaction because of the nature of the test tooling. + await transactionWatcher(testCase,txn2).wait_for(['error', 'complete']) + + // Read the data back to verify that txn2 was committed. + const txn3 = db.transaction(['books'], 'readonly'); + const objectStore3 = txn3.objectStore('books'); + const getRequest1 = objectStore3.get('one'); + const getRequest2 = objectStore3.get('two'); + await promiseForTransaction(testCase, txn3); + assert_equals(getRequest1.result.title, 'title1'); + assert_equals(getRequest2.result.title, 'title2'); + db.close(); +}, 'Transactions that handle all errors properly should be behave as ' + + 'expected when an explicit commit is called in an onerror handler.'); diff --git a/tests/wpt/web-platform-tests/accelerometer/Accelerometer-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/accelerometer/Accelerometer-supported-by-feature-policy.html new file mode 100644 index 00000000000..8e09c7acdfb --- /dev/null +++ b/tests/wpt/web-platform-tests/accelerometer/Accelerometer-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that accelerometer is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('accelerometer', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise accelerometer.'); +</script> diff --git a/tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor-supported-by-feature-policy.html new file mode 100644 index 00000000000..d5c27c8bef2 --- /dev/null +++ b/tests/wpt/web-platform-tests/ambient-light/AmbientLightSensor-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that ambient-light-sensor is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('ambient-light-sensor', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise ambient-light-sensor.'); +</script> diff --git a/tests/wpt/web-platform-tests/animation-worklet/common.js b/tests/wpt/web-platform-tests/animation-worklet/common.js index eb114f24687..15dff829774 100644 --- a/tests/wpt/web-platform-tests/animation-worklet/common.js +++ b/tests/wpt/web-platform-tests/animation-worklet/common.js @@ -30,3 +30,9 @@ function waitForAsyncAnimationFrames(count) { // AnimationWorklet. return waitForAnimationFrames(count + 1); } + +async function waitForAnimationFrameWithCondition(condition) { + do { + await new Promise(window.requestAnimationFrame); + } while (!condition()) +}; diff --git a/tests/wpt/web-platform-tests/animation-worklet/references/translated-box-ref.html b/tests/wpt/web-platform-tests/animation-worklet/references/translated-box-ref.html new file mode 100644 index 00000000000..c73f5a177bf --- /dev/null +++ b/tests/wpt/web-platform-tests/animation-worklet/references/translated-box-ref.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<style> +#box { + width: 100px; + height: 100px; + transform: translateY(100px); + background-color: green; +} +</style> + +<div id="box"></div> diff --git a/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause-immediately.https.html b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause-immediately.https.html new file mode 100644 index 00000000000..f9dcf30bc90 --- /dev/null +++ b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause-immediately.https.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Verify that calling pause immediately after playing works as expected</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<link rel="match" href="references/translated-box-ref.html"> + +<script src="/common/reftest-wait.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="common.js"></script> +<style> +#box { + width: 100px; + height: 100px; + background-color: green; +} +</style> + +<div id="box"></div> + +<script> +registerPassthroughAnimator().then(async _ => { + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + { transform: ['translateY(100px)', 'translateY(200px)'] }, + { duration: 100, iterations: 1 } + ); + + const animation = new WorkletAnimation('passthrough', effect); + animation.play(); + // Immediately pausing animation should freeze the current time at 0. + animation.pause(); + // Wait at least one frame to ensure a paused animation actually freezes. + await waitForAsyncAnimationFrames(1); + takeScreenshot(); +}); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause-resume.https.html b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause-resume.https.html new file mode 100644 index 00000000000..f26a93468c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause-resume.https.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>Verify that calling pause immediately after playing works as expected</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<link rel="match" href="references/translated-box-ref.html"> + +<script src="/common/reftest-wait.js"></script> +<script src="common.js"></script> +<style> +#box { + width: 100px; + height: 100px; + background-color: green; +} +</style> + +<div id="box"></div> + +<script> +registerPassthroughAnimator().then(async _ => { + const duration = 18; // a bit longer than a frame + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + { transform: ['translateY(0px)', 'translateY(100px)'] }, + { duration: duration, iterations: 1, fill: 'forwards'} + ); + + const animation = new WorkletAnimation('passthrough', effect); + // Immediately pausing animation should freeze the current time at 0. + animation.pause(); + // Playing should cause animation to resume. + animation.play(); + // Wait until we ensure animation has reached completion. + await waitForAnimationFrameWithCondition( _ => { + return animation.currentTime >= duration; + }); + takeScreenshot(); +}); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause.https.html b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause.https.html new file mode 100644 index 00000000000..4b7a9a0251d --- /dev/null +++ b/tests/wpt/web-platform-tests/animation-worklet/worklet-animation-pause.https.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<title>Verify that currentTime and playState are correct when animation is paused</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="common.js"></script> + +<div id="box"></div> + +<script> + +setup(setupAndRegisterTests, {explicit_done: true}); + +function createAnimation() { + const box = document.getElementById('box'); + const effect = new KeyframeEffect(box, + { transform: ['translateY(100px)', 'translateY(200px)'] }, + { duration: 100, iterations: 1 } + ); + + return new WorkletAnimation('passthrough', effect); +} + +async function setupAndRegisterTests() { + await registerPassthroughAnimator(); + + promise_test(async t => { + const animation = createAnimation(); + animation.play(); + // Immediately pausing animation should freeze the current time at 0. + animation.pause(); + assert_equals(animation.currentTime, 0); + assert_equals(animation.playState, "paused"); + // Wait some time to ensure a paused animation actually freezes. + await waitForNextFrame(); + assert_equals(animation.currentTime, 0); + assert_equals(animation.playState, "paused"); + }, 'pausing an animation freezes its current time'); + + promise_test(async t => { + const animation = createAnimation(); + const startTime = document.timeline.currentTime; + animation.pause(); + animation.play(); + await waitForNextFrame(); + const timelineTime = document.timeline.currentTime; + assert_equals(animation.playState, "running"); + assert_greater_than(animation.currentTime, 0); + assert_times_equal(animation.currentTime, (timelineTime - startTime)); + }, 'playing a paused animation should resume it'); + + done(); +} + +</script> + diff --git a/tests/wpt/web-platform-tests/background-fetch/fetch-uploads.https.window.js b/tests/wpt/web-platform-tests/background-fetch/fetch-uploads.https.window.js index 4ee618a1292..f93f88a6bae 100644 --- a/tests/wpt/web-platform-tests/background-fetch/fetch-uploads.https.window.js +++ b/tests/wpt/web-platform-tests/background-fetch/fetch-uploads.https.window.js @@ -44,3 +44,21 @@ backgroundFetchTest(async (test, backgroundFetch) => { assert_equals(uploaded, uploadData.length); }, 'Progress event includes uploaded bytes'); + +backgroundFetchTest(async (test, backgroundFetch) => { + const uploadRequest1 = + new Request('resources/upload.py', {method: 'POST', body: 'upload1'}); + const uploadRequest2 = + new Request('resources/upload.py', {method: 'POST', body: 'upload2'}); + + await backgroundFetch.fetch(uniqueId(), [uploadRequest1, uploadRequest2]); + + const {type, eventRegistration, results} = await getMessageFromServiceWorker(); + assert_equals(type, 'backgroundfetchsuccess'); + assert_equals(results.length, 2); + assert_equals(eventRegistration.result, 'success'); + assert_equals(eventRegistration.failureReason, ''); + + assert_array_equals([results[0].text, results[1].text].sort(), + ['upload1', 'upload2']); +}, 'Duplicate upload requests work and can be distinguished.'); diff --git a/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-tree-abiding.html b/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-pseudo-elements.html index c11da7d12de..776ab2eb69d 100644 --- a/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-tree-abiding.html +++ b/tests/wpt/web-platform-tests/css/css-shadow-parts/interaction-with-pseudo-elements.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <html> <head> - <title>CSS Shadow Parts - Interaction with tree-abiding</title> + <title>CSS Shadow Parts - Interaction with pseudo-elements</title> <meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly"> <link href="http://www.google.com/" rel="author" title="Google"> <link href="https://drafts.csswg.org/css-shadow-parts/" rel="help"> @@ -14,6 +14,9 @@ #c-e::part(before-p)::before { color: green; } #c-e::part(after-p)::after { color: green; } #c-e::part(placeholder-p)::placeholder { color: green; } + #c-e::part(selection-p)::selection { color: green; } + #c-e::part(first-line-p)::first-line { color: green; } + #c-e::part(first-letter-p)::first-letter { color: green; } </style> <script>installCustomElement("custom-element", "custom-element-template");</script> <template id="custom-element-template"> @@ -21,6 +24,9 @@ #before-i::before { content: "this text"; color: red; } #after-i::after { content: "this text"; color: red; } #placeholder-i::placeholder { color: red; } + #selection-i::selection { color: red; } + #first-line-i::first-line { color: red; } + #first-letter-i::first-letter { color: red; } </style> <div> The following text should be green: @@ -34,6 +40,18 @@ The following text should be green: <input id="placeholder-i" part="placeholder-p" placeholder="this text"></input> </div> + <div> + The selected text should be green: + <div id="selection-i" part="selection-p">select some text</div> + </div> + <div> + The following text should be green: + <div id="first-line-i" part="first-line-p">this text<br>Not this</div> + </div> + <div> + The first letter should be green: + <div id="first-letter-i" part="first-letter-p"><p>this text</p></div> + </div> </template> <custom-element id="c-e"></custom-element> <script> @@ -51,6 +69,18 @@ const el = getElementByShadowIds(document, ["c-e", "placeholder-i"]); assert_equals(window.getComputedStyle(el, '::placeholder').color, colorGreen); }, "::placeholder in selected host is styled"); + test(function() { + const el = getElementByShadowIds(document, ["c-e", "selection-i"]); + assert_equals(window.getComputedStyle(el, '::selection').color, colorGreen); + }, "::selection in selected host is styled"); + test(function() { + const el = getElementByShadowIds(document, ["c-e", "first-line-i"]); + assert_equals(window.getComputedStyle(el, '::first-line').color, colorGreen); + }, "::first-line in selected host is styled"); + test(function() { + const el = getElementByShadowIds(document, ["c-e", "first-letter-i"]); + assert_equals(window.getComputedStyle(el, '::first-letter').color, colorGreen); + }, "::first-letter in selected host is styled"); </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-syntax/charset-is-not-a-rule.html b/tests/wpt/web-platform-tests/css/css-syntax/charset-is-not-a-rule.html new file mode 100644 index 00000000000..81b2a04dc5a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-syntax/charset-is-not-a-rule.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>@charset isn't a valid rule and should be dropped</title> +<meta name="author" title="Tab Atkins-Bittner"> +<link rel=help href="https://drafts.csswg.org/css-syntax/#charset-rule"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +@charset "utf-8"; +@charset "utf-8"; +foo { color: blue; } +@charset "utf-8"; +</style> +<script> +test(()=>{ + assert_true(document.styleSheets[0].cssRules.length == 1) +}, "@charset isn't a valid rule and shouldn't show up in the OM"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-002.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-002.html index 660b7f16302..6f90f0c0cb8 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-002.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-002.html @@ -22,7 +22,7 @@ div { </style> <p>This test passes if there is nothing below this sentence. -<div> FAIL <div> +<div> FAIL </div> <!-- white-space:break-spaces should cause the spaces at the end of the line to be preserved. Since there is an allowed break point between the first space and the F, diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-003.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-003.html index 6203b55e9c6..05e570bbb13 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-003.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-003.html @@ -22,4 +22,4 @@ div { </style> <p>This test passes if the word FAIL does not appear below. -<div>PASS FAIL<div> +<div>PASS FAIL</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html index b277319cd23..5f36410feba 100644 --- a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-004.html @@ -3,6 +3,7 @@ <title>CSS Text Test: overflow-wrap: break-word</title> <link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> <meta name="flags" content="ahem"> <link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> <meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken."> diff --git a/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html new file mode 100644 index 00000000000..6dc1b4dff52 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/overflow-wrap/overflow-wrap-break-word-006.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: break-word</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html"> +<meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: break-spaces' property, that must prevent the word to be broken."> +<style> +div { + position: relative; + font-size: 20px; + font-family: Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + line-height: 1em; + width: 5ch; + white-space: break-spaces; + overflow-wrap: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"><br>XXXXX</div> + <div class="test"> XXXXX </div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-004.html new file mode 100644 index 00000000000..e2c043ec42e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-004.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: break-spaces</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-word"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the 'white-space: break-spaces' value."> +<style> +div { + position: relative; + font: 20px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 2ch; + + white-space: break-spaces; + word-break: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail"><span>XX</span><br>XX</div> + <div class="test"> XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-005.html new file mode 100644 index 00000000000..d0dafd38c04 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-005.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="If 'white-space' is set to 'break-spaces', collapsing preserved white-spaces' advance width is not allowed, so that they can be wrapped honoring the 'white-space' propery."> +<style> +div { + position: relative; + font: 10px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 100px; + + white-space: break-spaces; +} + +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">XXXX<span>XXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XX</span>XXXX<span>XXXX</span></div> + <div class="test">XXXX XXXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-006.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-006.html new file mode 100644 index 00000000000..5f9d605866d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-006.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', but the words are broken, honring the 'word-beak: break-all' even though there are previous breaking opportunities in the white-spaces."> +<style> +div { + position: relative; + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + word-break: break-all; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail"><span>X</span>XXX<br>X<span>X</span>XX<br>X<span>XXX</span><br><span>XXXX</span></div> + <div class="test"> XXXX XXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-007.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-007.html new file mode 100644 index 00000000000..77213618bd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-007.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="A single leading white-space should be used, honoring white-space: break-spaces, to avoid overflow; however, a single preserved white-space at the end of the line cannot be wrapped, hence it hangs when breaking after it to move the rest of the text to the next line."> +<style> +div { + position: relative; + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail"><span>XXXX</span><br>XXXX<br>XXX<span>X</span><br><span>XXXX</span></div> + <div class="test"> XXXX XXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html new file mode 100644 index 00000000000..d183cac942f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space - break-spaces</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property"> +<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="match" href="reference/white-space-break-spaces-005-ref.html"> +<meta name="flags" content="ahem"> +<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', which may lead to overfow. However, we can break before the first white-space after the word honoring the 'break-all' value."> +<style> +div { + position: relative; + font: 25px/1 Ahem; +} +.fail { + position: absolute; + color: red; + z-index: -1; +} +span { color: green; } +.test { + color: green; + width: 4ch; + + white-space: break-spaces; + word-break: break-all; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="fail">XXXX<br><span>X</span>XX<span>X</span><br><span>XXXX</span><br><span>XXXX</span></div> + <div class="test">XXXX XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-016.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-016.html new file mode 100644 index 00000000000..5f66a7be92b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-016.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: white-space: pre-wrap</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-word"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the white-space: pre-wrap value."> +<style> +div { + position: relative; + font-size: 20px; + font-family: Ahem; +} +.red { + position: absolute; + white-space: pre; + background: green; + color: red; + width: 40px; + height: 40px; + z-index: -1; +} +.test { + color: green; + line-height: 1em; + width: 2ch; + + white-space: pre-wrap; + word-break: break-word; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"><br>XX</div> + <div class="test"> XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html new file mode 100644 index 00000000000..3247ae5a881 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-break-spaces-005-ref.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Reference File</title> +<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> +<style> +div { + position: relative; + width: 100px; + height: 100px; + background: green; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div></div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html index 7d3bc056d82..be46d29d7dd 100644 --- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-010.html @@ -1,8 +1,9 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text Test: overflow-wrap: break-word</title> +<title>CSS Text Test: word-break: break-all</title> <link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> <meta name="flags" content="ahem"> <link rel="match" href="reference/word-break-break-all-010-ref.html"> <meta name="assert" content="The word is broken even if pre-wrap provides a former breaking opportunity in leading white-space."> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html index 531c68d8cea..fade439dd9a 100644 --- a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-011.html @@ -1,8 +1,9 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text Test: overflow-wrap: break-word</title> +<title>CSS Text Test: word-break: break-all</title> <link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap"> <meta name="flags" content="ahem"> <link rel="match" href="reference/word-break-break-all-010-ref.html"> <meta name="assert" content="A single leading white-space should account as soft breaking opportunity, honoring the 'white-space: pre-wrap', on top to the ones provided by 'word-break: break-all'."> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-012.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-012.html new file mode 100644 index 00000000000..cd3d44056ec --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-012.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: overflow-wrap: break-word</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/word-break-break-all-010-ref.html"> +<meta name="assert" content="The word is broken even if white-space: break-spaces provides a former breaking opportunity in leading white-space."> +<style> +div { + position: relative; + font-size: 20px; + font-family: Ahem; +} +.red { + position: absolute; + white-space: pre; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + line-height: 1em; + width: 5ch; + + white-space: break-spaces; + word-break: break-all; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red"> XXXX<br>X</div> + <div class="test"> XXXXX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-013.html b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-013.html new file mode 100644 index 00000000000..85dce08b641 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/word-break/word-break-break-all-013.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text Test: word-break: break-all</title> +<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces"> +<meta name="flags" content="ahem"> +<link rel="match" href="reference/word-break-break-all-010-ref.html"> +<meta name="assert" content="A single leading white-space should account as soft breaking opportunity, honoring the 'white-space: break-spaces', on top to the ones provided by 'word-break: break-all'."> +<style> +div { + position: relative; + font-size: 20px; + font-family: Ahem; +} +.red { + position: absolute; + background: green; + color: red; + width: 100px; + height: 100px; + z-index: -1; +} +.test { + color: green; + background: green; + line-height: 1em; + width: 1ch; + white-space: break-spaces; + word-break: break-all; +} +</style> +<body> + <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + <div class="red">X<br>X<br>X</div> + <div class="test"> XX</div> +</body> diff --git a/tests/wpt/web-platform-tests/css/css-values/attr-color-invalid-fallback.html b/tests/wpt/web-platform-tests/css/css-values/attr-color-invalid-fallback.html index 92258893b9e..9e016d1630d 100644 --- a/tests/wpt/web-platform-tests/css/css-values/attr-color-invalid-fallback.html +++ b/tests/wpt/web-platform-tests/css/css-values/attr-color-invalid-fallback.html @@ -9,7 +9,7 @@ <meta name="assert" content=" When the fallback value of an attr() function is invalid, the delcaration is ignored. " /> - + <meta name="flags" content="invalid"> <link rel="author" title="François REMY" diff --git a/tests/wpt/web-platform-tests/css/css-values/attr-invalid-type-001.html b/tests/wpt/web-platform-tests/css/css-values/attr-invalid-type-001.html index c427adecbeb..1f88c37c640 100644 --- a/tests/wpt/web-platform-tests/css/css-values/attr-invalid-type-001.html +++ b/tests/wpt/web-platform-tests/css/css-values/attr-invalid-type-001.html @@ -9,7 +9,7 @@ <meta name="assert" content=" When the type of an attr() function is known and unexpected, the declaration is ignored " /> - + <meta name="flags" content="invalid"> <link rel="author" title="François REMY" diff --git a/tests/wpt/web-platform-tests/css/css-values/attr-invalid-type-002.html b/tests/wpt/web-platform-tests/css/css-values/attr-invalid-type-002.html index 797700ddacf..dbdac8a4ba1 100644 --- a/tests/wpt/web-platform-tests/css/css-values/attr-invalid-type-002.html +++ b/tests/wpt/web-platform-tests/css/css-values/attr-invalid-type-002.html @@ -9,7 +9,7 @@ <meta name="assert" content=" When the type of an attr() function is known and unexpected, the declaration is ignored " /> - + <meta name="flags" content="invalid"> <link rel="author" title="François REMY" diff --git a/tests/wpt/web-platform-tests/css/css-values/attr-length-invalid-fallback.html b/tests/wpt/web-platform-tests/css/css-values/attr-length-invalid-fallback.html index 6a5d4dfe68a..e68fe7a4701 100644 --- a/tests/wpt/web-platform-tests/css/css-values/attr-length-invalid-fallback.html +++ b/tests/wpt/web-platform-tests/css/css-values/attr-length-invalid-fallback.html @@ -9,7 +9,7 @@ <meta name="assert" content=" When the attr() fallback is an invalid length, the delcaration is correctly ignored. " /> - + <meta name="flags" content="invalid"> <link rel="author" title="François REMY" diff --git a/tests/wpt/web-platform-tests/css/css-values/attr-px-invalid-fallback.html b/tests/wpt/web-platform-tests/css/css-values/attr-px-invalid-fallback.html index 778697d0d1f..f8f88f58094 100644 --- a/tests/wpt/web-platform-tests/css/css-values/attr-px-invalid-fallback.html +++ b/tests/wpt/web-platform-tests/css/css-values/attr-px-invalid-fallback.html @@ -9,7 +9,7 @@ <meta name="assert" content=" When the fallback of a pixel attribute reference is invalid, the declaration is ignored. " /> - + <meta name="flags" content="invalid"> <link rel="author" title="François REMY" diff --git a/tests/wpt/web-platform-tests/css/css-values/ic-unit-008.html b/tests/wpt/web-platform-tests/css/css-values/ic-unit-008.html new file mode 100644 index 00000000000..05ab2180698 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/ic-unit-008.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test: ic unit in width (basic)</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths"> + <link rel="match" href="reference/ic-unit-008-ref.html"> + + <meta name="flags" content=""> + <meta name="assert" content="In this test, the ic unit is the advance width measure of the 水 (CJK water ideograph, U+6C34) glyph."> + + <style> + div + { + float: left; + font-size: 80px; /* arbitrary font size */ + } + + div#test-blue + { + background-color: blue; + height: 1.8em; + width: 5ic; + } + + div#reference-orange + { + background-color: orange; + clear: left; + color: orange; + line-height: 1.8; /* arbitrary line-height */ + } + </style> + + <p>Test passes if there is a blue rectangle with the <strong>same width</strong> as an orange rectangle. + + <div id="test-blue"></div> + + <div id="reference-orange">水水水水水</div> + + <!-- + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + --> diff --git a/tests/wpt/web-platform-tests/css/css-values/ic-unit-009.html b/tests/wpt/web-platform-tests/css/css-values/ic-unit-009.html new file mode 100644 index 00000000000..11ec5985c02 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/ic-unit-009.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test: ic unit in height (basic)</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths"> + <link rel="match" href="reference/ic-unit-009-ref.html"> + + <meta name="flags" content=""> + <meta name="assert" content="In this test, the ic unit is the advance height measure of the 水 (CJK water ideograph, U+6C34) glyph."> + + <style> + div + { + float: left; + font-size: 80px; /* arbitrary font size */ + writing-mode: vertical-rl; + } + + div#test-blue + { + background-color: blue; + height: 5ic; + width: 1.8em; + } + + div#reference-orange + { + background-color: orange; + color: orange; + line-height: 1.8; /* arbitrary line-height */ + } + </style> + + <p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle. + + <div id="test-blue"></div> + + <div id="reference-orange">水水水水水</div> + + <!-- + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + --> diff --git a/tests/wpt/web-platform-tests/css/css-values/ic-unit-010.html b/tests/wpt/web-platform-tests/css/css-values/ic-unit-010.html new file mode 100644 index 00000000000..ca963041a32 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/ic-unit-010.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test: ic unit in height with 'text-orientation: mixed'</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths"> + <link rel="match" href="reference/ic-unit-009-ref.html"> + + <meta name="flags" content=""> + <meta name="assert" content="In this test, the ic unit is the advance height measure of the 水 (CJK water ideograph, U+6C34) glyph."> + + <style> + div + { + float: left; + font-size: 80px; /* arbitrary font size */ + text-orientation: mixed; + writing-mode: vertical-rl; + } + + div#test-blue + { + background-color: blue; + height: 5ic; + width: 1.8em; + } + + div#reference-orange + { + background-color: orange; + color: orange; + line-height: 1.8; /* arbitrary line-height */ + } + </style> + + <p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle. + + <div id="test-blue"></div> + + <div id="reference-orange">水水水水水</div> + + <!-- + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + -->
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-values/ic-unit-011.html b/tests/wpt/web-platform-tests/css/css-values/ic-unit-011.html new file mode 100644 index 00000000000..58400224719 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/ic-unit-011.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test: ic unit in height with 'text-orientation: upright'</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths"> + <link rel="match" href="reference/ic-unit-009-ref.html"> + + <meta name="flags" content=""> + <meta name="assert" content="In this test, the ic unit is the advance height measure of the 水 (CJK water ideograph, U+6C34) glyph."> + + <style> + div + { + float: left; + font-size: 80px; /* arbitrary font size */ + text-orientation: upright; + writing-mode: vertical-rl; + } + + div#test-blue + { + background-color: blue; + height: 5ic; + width: 1.8em; + } + + div#reference-orange + { + background-color: orange; + color: orange; + line-height: 1.8; /* arbitrary line-height */ + } + </style> + + <p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle. + + <div id="test-blue"></div> + + <div id="reference-orange">水水水水水</div> + + <!-- + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + -->
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-values/ic-unit-012.html b/tests/wpt/web-platform-tests/css/css-values/ic-unit-012.html new file mode 100644 index 00000000000..ac281ccd4af --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/ic-unit-012.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test: ic unit in height with 'text-orientation: sideways'</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths"> + <link rel="match" href="reference/ic-unit-009-ref.html"> + + <meta name="flags" content=""> + <meta name="assert" content="In this test, the ic unit is the advance width measure of the 水 (CJK water ideograph, U+6C34) glyph."> + + <style> + div + { + float: left; + font-size: 80px; /* arbitrary font size */ + text-orientation: sideways; + writing-mode: vertical-rl; + } + + div#test-blue + { + background-color: blue; + height: 5ic; + width: 1.8em; + } + + div#reference-orange + { + background-color: orange; + color: orange; + line-height: 1.8; /* arbitrary line-height */ + } + </style> + + <p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle. + + <div id="test-blue"></div> + + <div id="reference-orange">水水水水水</div> + + <!-- + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + -->
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-values/q-unit-case-insensitivity-001.html b/tests/wpt/web-platform-tests/css/css-values/q-unit-case-insensitivity-001.html new file mode 100644 index 00000000000..b4a08aa1179 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/q-unit-case-insensitivity-001.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test: case-insensitivity of Q unit (quarter-millimeter)</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-values-3/#absolute-lengths"> + <link rel="help" href="https://www.w3.org/TR/CSS22/syndata.html#characters"> + <link rel="match" href="../reference/ref-filled-green-100px-square.xht"> + + <meta content="This test checks that 'Q' unit is case-insensitive." name="assert"> + <meta name="flags" content=""> + + <style> + div#test-overlapping-green + { + background-color: green; + height: 105.83333Q; + width: 1px; + width: 105.83333q; + } + + /* + + 25.4mm == 96px + Therefore, 26.45833mm == 100px + So, 26.45833 * 4 (Q per mm) == 105.83333Q == 100px + + */ + + div#reference-overlapped-red + { + background-color: red; + bottom: 100px; + height: 100px; + position: relative; + width: 100px; + z-index: -1; + } + </style> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div id="test-overlapping-green"></div> + + <div id="reference-overlapped-red"></div> diff --git a/tests/wpt/web-platform-tests/css/css-values/q-unit-case-insensitivity-002.html b/tests/wpt/web-platform-tests/css/css-values/q-unit-case-insensitivity-002.html new file mode 100644 index 00000000000..328fcbd4aed --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/q-unit-case-insensitivity-002.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test: case-insensitivity of Q unit (quarter-millimeter)</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + <link rel="help" href="https://www.w3.org/TR/css-values-3/#absolute-lengths"> + <link rel="help" href="https://www.w3.org/TR/CSS22/syndata.html#characters"> + <link rel="match" href="../reference/ref-filled-green-100px-square.xht"> + + <meta content="This test checks that 'Q' unit is case-insensitive." name="assert"> + <meta name="flags" content=""> + + <style> + div#test-overlapping-green + { + background-color: green; + height: 105.83333q; + width: 1px; + width: 105.83333Q; + } + + /* + + 25.4mm == 96px + Therefore, 26.45833mm == 100px + So, 26.45833 * 4 (Q per mm) == 105.83333Q == 100px + + */ + + div#reference-overlapped-red + { + background-color: red; + bottom: 100px; + height: 100px; + position: relative; + width: 100px; + z-index: -1; + } + </style> + + <p>Test passes if there is a filled green square and <strong>no red</strong>. + + <div id="test-overlapping-green"></div> + + <div id="reference-overlapped-red"></div> diff --git a/tests/wpt/web-platform-tests/css/css-values/reference/ic-unit-008-ref.html b/tests/wpt/web-platform-tests/css/css-values/reference/ic-unit-008-ref.html new file mode 100644 index 00000000000..6a27f6e820d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/reference/ic-unit-008-ref.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test Reference File</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + float: left; + font-size: 80px; /* arbitrary font size */ + line-height: 1.8; /* arbitrary line-height */ + } + + div#blue + { + background-color: blue; + color: blue; + } + + div#orange + { + background-color: orange; + color: orange; + clear: left; + } + </style> + + <p>Test passes if there is a blue rectangle with the <strong>same width</strong> as an orange rectangle. + + <div id="blue">水水水水水</div> + + <div id="orange">水水水水水</div> + + <!-- + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + --> diff --git a/tests/wpt/web-platform-tests/css/css-values/reference/ic-unit-009-ref.html b/tests/wpt/web-platform-tests/css/css-values/reference/ic-unit-009-ref.html new file mode 100644 index 00000000000..2ae37b8b619 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/reference/ic-unit-009-ref.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> + + <meta charset="UTF-8"> + + <title>CSS Values and Units Test Reference File</title> + + <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> + + <style> + div + { + float: left; + font-size: 80px; /* arbitrary font size */ + line-height: 1.8; /* arbitrary line-height */ + writing-mode: vertical-rl; + } + + div#blue + { + background-color: blue; + color: blue; + } + + div#orange + { + background-color: orange; + color: orange; + } + </style> + + <p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle. + + <div id="blue">水水水水水</div> + + <div id="orange">水水水水水</div> + + <!-- + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + 水 (CJK water ideograph, U+6C34) glyph == 水 + + --> diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-check-encryption-scheme.https.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-check-encryption-scheme.https.html new file mode 100644 index 00000000000..eb580ea5f87 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-check-encryption-scheme.https.html @@ -0,0 +1,32 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Encrypted Media Extensions: Check encryptionScheme with Clear Key</title> + <link rel="help" href="https://w3c.github.io/encrypted-media/"> + + <!-- Web Platform Test Harness scripts --> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + + <!-- Helper scripts for Encrypted Media Extensions tests --> + <script src=/encrypted-media/util/utils.js></script> + <script src=/encrypted-media/util/utf8.js></script> + + <!-- Content metadata --> + <!--<script src=/encrypted-media/content/content-metadata.js></script>--> + + <!-- The script for this specific test --> + <script src=/encrypted-media/scripts/check-encryption-scheme.js></script> + + </head> + <body> + <div id='log'></div> + + <script> + var config = { keysystem: 'org.w3.clearkey' } + + runTest(config); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/encrypted-media/clearkey-check-status-for-hdcp.https.html b/tests/wpt/web-platform-tests/encrypted-media/clearkey-check-status-for-hdcp.https.html new file mode 100644 index 00000000000..5ec3b262852 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/clearkey-check-status-for-hdcp.https.html @@ -0,0 +1,32 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Encrypted Media Extensions: Check HDCP status with Clear Key</title> + <link rel="help" href="https://w3c.github.io/encrypted-media/"> + + <!-- Web Platform Test Harness scripts --> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + + <!-- Helper scripts for Encrypted Media Extensions tests --> + <script src=/encrypted-media/util/utils.js></script> + <script src=/encrypted-media/util/utf8.js></script> + + <!-- Content metadata --> + <!--<script src=/encrypted-media/content/content-metadata.js></script>--> + + <!-- The script for this specific test --> + <script src=/encrypted-media/scripts/check-status-for-hdcp.js></script> + + </head> + <body> + <div id='log'></div> + + <script> + var config = { keysystem: 'org.w3.clearkey' } + + runTest(config); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-check-encryption-scheme.https.html b/tests/wpt/web-platform-tests/encrypted-media/drm-check-encryption-scheme.https.html new file mode 100644 index 00000000000..862591b1b89 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-check-encryption-scheme.https.html @@ -0,0 +1,32 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Encrypted Media Extensions: Check encryptionScheme with DRM</title> + <link rel="help" href="https://w3c.github.io/encrypted-media/"> + + <!-- Web Platform Test Harness scripts --> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + + <!-- Helper scripts for Encrypted Media Extensions tests --> + <script src=/encrypted-media/util/utils.js></script> + <script src=/encrypted-media/util/utf8.js></script> + + <!-- Content metadata --> + <!--<script src=/encrypted-media/content/content-metadata.js></script>--> + + <!-- The script for this specific test --> + <script src=/encrypted-media/scripts/check-encryption-scheme.js></script> + + </head> + <body> + <div id='log'></div> + + <script> + var config = { keysystem: getSupportedKeySystem() } + + runTest(config); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/encrypted-media/drm-check-status-for-hdcp.https.html b/tests/wpt/web-platform-tests/encrypted-media/drm-check-status-for-hdcp.https.html new file mode 100644 index 00000000000..68c45be69b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/drm-check-status-for-hdcp.https.html @@ -0,0 +1,32 @@ +<!doctype html> +<html> + <head> + <meta charset=utf-8> + <title>Encrypted Media Extensions: Check HDCP status with DRM</title> + <link rel="help" href="https://w3c.github.io/encrypted-media/"> + + <!-- Web Platform Test Harness scripts --> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + + <!-- Helper scripts for Encrypted Media Extensions tests --> + <script src=/encrypted-media/util/utils.js></script> + <script src=/encrypted-media/util/utf8.js></script> + + <!-- Content metadata --> + <!--<script src=/encrypted-media/content/content-metadata.js></script>--> + + <!-- The script for this specific test --> + <script src=/encrypted-media/scripts/check-status-for-hdcp.js></script> + + </head> + <body> + <div id='log'></div> + + <script> + var config = { keysystem: getSupportedKeySystem() } + + runTest(config); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/encrypted-media/encrypted-media-supported-by-feature-policy.tentative.html b/tests/wpt/web-platform-tests/encrypted-media/encrypted-media-supported-by-feature-policy.tentative.html new file mode 100644 index 00000000000..5b2d2240c6a --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/encrypted-media-supported-by-feature-policy.tentative.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that encrypted-media is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://github.com/w3c/encrypted-media/pull/432"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('encrypted-media', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise encrypted-media.'); +</script> diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/check-encryption-scheme.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/check-encryption-scheme.js new file mode 100644 index 00000000000..5d629271b42 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/check-encryption-scheme.js @@ -0,0 +1,41 @@ +function runTest(config, qualifier) +{ + function checkEncryptionScheme(encryptionScheme) + { + var simpleConfig = getSimpleConfiguration(); + assert_greater_than(simpleConfig[0].audioCapabilities.length, 0); + simpleConfig[0].audioCapabilities.forEach(function(capability) { + capability.encryptionScheme = encryptionScheme; + }); + + return navigator.requestMediaKeySystemAccess(config.keysystem, simpleConfig) + .then( + function(access) { + var actualConfiguration = access.getConfiguration(); + for (let i = 0; i < actualConfiguration.audioCapabilities.length; i++) { + const capability = actualConfiguration.audioCapabilities[i]; + + // If "encryptionScheme" is not supported, fail. + if (!('encryptionScheme' in capability)) { + return Promise.reject('Not implemented'); + } + + // If "encryptionScheme" is supported, it should be returned. + assert_equals(capability.encryptionScheme, encryptionScheme); + } + return Promise.resolve('Supported'); + }, + function error() { + // CDM does not support "encryptionScheme". Test should still pass. + return Promise.resolve('Not supported'); + }); + } + + promise_test( + () => checkEncryptionScheme('cenc'), + testnamePrefix(qualifier, config.keysystem) + ' support for "cenc" encryption scheme.'); + + promise_test( + () => checkEncryptionScheme('cbcs'), + testnamePrefix(qualifier, config.keysystem) + ' support for "cbcs" encryption scheme.'); +} diff --git a/tests/wpt/web-platform-tests/encrypted-media/scripts/check-status-for-hdcp.js b/tests/wpt/web-platform-tests/encrypted-media/scripts/check-status-for-hdcp.js new file mode 100644 index 00000000000..ac308196952 --- /dev/null +++ b/tests/wpt/web-platform-tests/encrypted-media/scripts/check-status-for-hdcp.js @@ -0,0 +1,26 @@ +function runTest(config, qualifier) +{ + function checkStatusForMinHdcpVersionPolicy(hdcpVersion) + { + return navigator.requestMediaKeySystemAccess(config.keysystem, getSimpleConfiguration()) + .then(function(access) { + return access.createMediaKeys(); + }) + .then(function(mediaKeys) { + // As HDCP policy depends on the hardware running this test, + // don't bother checking the result returned as it may or + // may not be supported. This simply verifies that + // getStatusForPolicy() exists and doesn't blow up. + return mediaKeys.getStatusForPolicy({minHdcpVersion: hdcpVersion}); + }); + } + + promise_test( + () => checkStatusForMinHdcpVersionPolicy(''), + testnamePrefix(qualifier, config.keysystem) + + ' support for empty HDCP version.'); + + promise_test( + () => checkStatusForMinHdcpVersionPolicy('1.0'), + testnamePrefix(qualifier, config.keysystem) + ' support for HDCP 1.0.'); +} diff --git a/tests/wpt/web-platform-tests/event-timing/supported-types.window.js b/tests/wpt/web-platform-tests/event-timing/supported-types.window.js new file mode 100644 index 00000000000..c81d501f49f --- /dev/null +++ b/tests/wpt/web-platform-tests/event-timing/supported-types.window.js @@ -0,0 +1,11 @@ +test(() => { + if (typeof PerformanceObserver.supportedEntryTypes === "undefined") + assert_unreached("supportedEntryTypes is not supported."); + const types = PerformanceObserver.supportedEntryTypes; + assert_true(types.includes("firstInput"), + "There should be 'firstInput' in PerformanceObserver.supportedEntryTypes"); + assert_true(types.includes("event"), + "There should be 'event' in PerformanceObserver.supportedEntryTypes"); + assert_greater_than(types.indexOf("firstInput"), types.indexOf('event'), + "The 'firstInput' entry should appear after the 'event' entry"); +}, "supportedEntryTypes contains 'event' and 'firstInput'."); diff --git a/tests/wpt/web-platform-tests/feature-policy/payment-supported-by-feature-policy.tentative.html b/tests/wpt/web-platform-tests/feature-policy/payment-supported-by-feature-policy.tentative.html new file mode 100644 index 00000000000..07dec701769 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/payment-supported-by-feature-policy.tentative.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that payment is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://github.com/w3c/payment-request/issues/600"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('payment', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise payment.'); +</script> diff --git a/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-supported-by-feature-policy.html new file mode 100644 index 00000000000..a65c682a6ad --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/picture-in-picture-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that picture-in-picture is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://wicg.github.io/picture-in-picture/#feature-policy"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('picture-in-picture', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise picture-in-picture.'); +</script> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-image.jpg b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-image.jpg Binary files differnew file mode 100644 index 00000000000..599137a55d7 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-image.jpg diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html new file mode 100644 index 00000000000..fb27a13996a --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> + <head> + <script src='/resources/testharness.js'></script> + <script src='/resources/testharnessreport.js'></script> + </head> + <body> + <img src="./unoptimized-image.jpg"> + <script> +var check_report_format = (reports, observer) => { + let report = reports[0]; + assert_equals(report.type, "feature-policy-violation"); + assert_equals(report.url, document.location.href); + assert_equals(report.body.featureId, "unoptimized-images"); + assert_equals(report.body.disposition, "enforce"); +}; + +async_test(t => { + new ReportingObserver(t.step_func_done(check_report_format), + {types: ['feature-policy-violation'], buffered: true}).observe(); +}, "unoptimized-images Report Format"); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html.headers new file mode 100644 index 00000000000..10b41235409 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unoptimized-images-reporting.html.headers @@ -0,0 +1 @@ +Feature-Policy: unoptimized-images 'none' diff --git a/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/syntax.any.js b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/syntax.any.js index cf5b06d5c4f..dc874977a63 100644 --- a/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/syntax.any.js +++ b/tests/wpt/web-platform-tests/fetch/cross-origin-resource-policy/syntax.any.js @@ -8,7 +8,8 @@ const crossOriginURL = get_host_info().HTTP_REMOTE_ORIGIN + "/fetch/cross-origin "SAME-ORIGIN", "Same-Origin", "same-origin, <>", - "same-origin, same-origin" + "same-origin, same-origin", + "https://www.example.com", // See https://github.com/whatwg/fetch/issues/760 ].forEach(incorrectHeaderValue => { // Note: an incorrect value results in a successful load, so this test is only meaningful in // implementations with support for the header. diff --git a/tests/wpt/web-platform-tests/geolocation-sensor/GeolocationSensor-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/geolocation-sensor/GeolocationSensor-supported-by-feature-policy.html new file mode 100644 index 00000000000..aa05f33a5e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/geolocation-sensor/GeolocationSensor-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that geolocation is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('geolocation', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise geolocation.'); +</script> diff --git a/tests/wpt/web-platform-tests/gyroscope/Gyroscope-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/gyroscope/Gyroscope-supported-by-feature-policy.html new file mode 100644 index 00000000000..06a4137f17d --- /dev/null +++ b/tests/wpt/web-platform-tests/gyroscope/Gyroscope-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that gyroscope is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('gyroscope', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise gyroscope.'); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html index caac56a176d..888343b45bc 100644 --- a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html +++ b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html @@ -106,16 +106,22 @@ addTest(function() { C.location[prop]; // Shouldn't throw. Object.getOwnPropertyDescriptor(C.location, prop); // Shouldn't throw. assert_true(Object.prototype.hasOwnProperty.call(C.location, prop), "hasOwnProperty for " + prop); + assert_throws("SecurityError", function() { C.location[prop] = undefined; }, "Should throw when writing to " + prop + " on Location"); + } + else if (prop == 'href') { + Object.getOwnPropertyDescriptor(C.location, prop); // Shouldn't throw. + assert_true(Object.prototype.hasOwnProperty.call(C.location, prop), "hasOwnProperty for " + prop); + assert_throws("SecurityError", function() { C.location[prop] }, + "Should throw reading href on Location"); } else { - assert_throws("SecurityError", function() { C[prop]; }, "Should throw when accessing " + prop + " on Location"); - assert_throws("SecurityError", function() { Object.getOwnPropertyDescriptor(C, prop); }, + assert_throws("SecurityError", function() { C.location[prop]; }, "Should throw when accessing " + prop + " on Location"); + assert_throws("SecurityError", function() { Object.getOwnPropertyDescriptor(C.location, prop); }, "Should throw when accessing property descriptor for " + prop + " on Location"); - assert_throws("SecurityError", function() { Object.prototype.hasOwnProperty.call(C, prop); }, + assert_throws("SecurityError", function() { Object.prototype.hasOwnProperty.call(C.location, prop); }, "Should throw when invoking hasOwnProperty for " + prop + " on Location"); + assert_throws("SecurityError", function() { C.location[prop] = undefined; }, "Should throw when writing to " + prop + " on Location"); } - if (prop != 'href') - assert_throws("SecurityError", function() { C[prop] = undefined; }, "Should throw when writing to " + prop + " on Location"); } }, "Only whitelisted properties are accessible cross-origin"); @@ -150,11 +156,22 @@ addTest(function() { assert_throws(new TypeError, function() { protoSetter.call(C, new Object()); }, "proto setter |call| on cross-origin Window"); assert_throws(new TypeError, function() { protoSetter.call(C.location, new Object()); }, "proto setter |call| on cross-origin Location"); }); + // Hack to avoid "duplicate test name" harness issues. + setters.forEach(function(protoSetter) { + test(function() { protoSetter.call(C, null); }, + "proto setter |call| on cross-origin Window with null (" + protoSetter + ")"); + test(function() { protoSetter.call(C.location, null); }, + "proto setter |call| on cross-origin Location with null (" + protoSetter + ")"); + }); if (Reflect.setPrototypeOf) { assert_false(Reflect.setPrototypeOf(C, new Object()), "Reflect.setPrototypeOf on cross-origin Window"); + assert_true(Reflect.setPrototypeOf(C, null), + "Reflect.setPrototypeOf on cross-origin Window with null"); assert_false(Reflect.setPrototypeOf(C.location, new Object()), "Reflect.setPrototypeOf on cross-origin Location"); + assert_true(Reflect.setPrototypeOf(C.location, null), + "Reflect.setPrototypeOf on cross-origin Location with null"); } }, "[[SetPrototypeOf]] should return false"); @@ -230,6 +247,19 @@ addTest(function() { assert_equals(typeof D.then, "object"); }, "[[GetOwnProperty]] - Subframe named 'then' should shadow the default 'then' value"); +addTest(function() { + assert_equals(typeof D.close, "function"); + assert_equals(typeof D.open, "object"); +}, "[[GetOwnProperty]] - Subframes should be visible cross-origin only if their names don't match the names of cross-origin-exposed IDL properties"); + +addTest(function() { + assert_equals(typeof Object.getOwnPropertyDescriptor(C, '0').value, "object"); + assert_equals(typeof Object.getOwnPropertyDescriptor(C, '1').value, "object"); + assert_throws("SecurityError", function() { + Object.getOwnPropertyDescriptor(C, '2'); + }); +}, "[[GetOwnProperty]] - Should be able to get a property descriptor for an indexed property only if it corresponds to a child window."); + /* * [[Delete]] */ diff --git a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/frame-with-then.html b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/frame-with-then.html index 96cdf1ea99b..1127995ea84 100644 --- a/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/frame-with-then.html +++ b/tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/frame-with-then.html @@ -6,5 +6,9 @@ <!-- A subframe to test "then" behavior --> <iframe name="then"></iframe> <iframe name="b"></iframe> + <!-- Two subframes with names corresponding to IDL-defined properties; one + a cross-origin-exposed property and one not exposed cross-origin --> + <iframe name="close"></iframe> + <iframe name="open"></iframe> </body> </html> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html new file mode 100644 index 00000000000..af4de6bf89d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that autoplay is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/infrastructure.html#policy-controlled-features"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('autoplay', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise autoplay.'); +</script> diff --git a/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl b/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl index 137528c148a..868338b3080 100644 --- a/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl +++ b/tests/wpt/web-platform-tests/interfaces/IndexedDB.idl @@ -200,6 +200,7 @@ interface IDBTransaction : EventTarget { readonly attribute DOMException error; IDBObjectStore objectStore(DOMString name); + void commit(); void abort(); // Event handlers: diff --git a/tests/wpt/web-platform-tests/interfaces/mediastream-recording.idl b/tests/wpt/web-platform-tests/interfaces/mediastream-recording.idl index 5bf661e6cc5..0be0538d122 100644 --- a/tests/wpt/web-platform-tests/interfaces/mediastream-recording.idl +++ b/tests/wpt/web-platform-tests/interfaces/mediastream-recording.idl @@ -18,7 +18,7 @@ interface MediaRecorder : EventTarget { readonly attribute unsigned long videoBitsPerSecond; readonly attribute unsigned long audioBitsPerSecond; - void start(optional long timeslice); + void start(optional unsigned long timeslice); void stop(); void pause(); void resume(); diff --git a/tests/wpt/web-platform-tests/magnetometer/Magnetometer-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/magnetometer/Magnetometer-supported-by-feature-policy.html new file mode 100644 index 00000000000..a0493638950 --- /dev/null +++ b/tests/wpt/web-platform-tests/magnetometer/Magnetometer-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that magnetometer is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('magnetometer', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise magnetometer.'); +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-supported-by-feature-policy.html new file mode 100644 index 00000000000..ef29ae6eec2 --- /dev/null +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-supported-by-feature-policy.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<title>Test that accelerometer is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://w3c.github.io/mediacapture-main/#feature-policy-integration"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('camera', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise camera.'); + +test(() => { + assert_in_array('microphone', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise microphone.'); +</script> diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html index 158c9014617..c062205f0d4 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStreamTrack-getSettings.https.html @@ -1,6 +1,7 @@ <!doctype html> <title>MediaStreamTrack GetSettings</title> <p class="instructions">When prompted, accept to share your video stream.</p> +<meta name=timeout content=long> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script> diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html index edde533be6b..45f3f0a5672 100644 --- a/tests/wpt/web-platform-tests/payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html @@ -68,7 +68,6 @@ function runManualTest(button, expected = {}) { <button onclick=" const expectedAddress = { country: 'AU', - regionCode: 'QLD', addressLine: '55 test st', city: 'Chapel Hill', dependentLocality: '', diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html index 356f30da6b5..c3e2ba71322 100644 --- a/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html @@ -82,11 +82,6 @@ function retryShowsShippingAddressMember(button, error) { </button> </li> <li> - <button onclick="retryShowsShippingAddressMember(this, { regionCode: 'REGIONCODE ERROR' });"> - The payment sheet shows "REGIONCODE ERROR" for the shipping address' region code. - </button> - </li> - <li> <button onclick="retryShowsShippingAddressMember(this, { sortingCode: 'SORTINGCODE ERROR' });"> The payment sheet shows "SORTINGCODE ERROR" for the shipping address' sorting code. </button> diff --git a/tests/wpt/web-platform-tests/payment-request/historical.https.html b/tests/wpt/web-platform-tests/payment-request/historical.https.html index cbd29d4cff8..e681f6486b9 100644 --- a/tests/wpt/web-platform-tests/payment-request/historical.https.html +++ b/tests/wpt/web-platform-tests/payment-request/historical.https.html @@ -21,6 +21,9 @@ // https://github.com/w3c/payment-request/pull/765 ["languageCode", "PaymentAddress"], + + // https://github.com/w3c/payment-request/pull/823 + ["regionCode", "PaymentAddress"], ].forEach(([member, interf]) => { test(() => { assert_false(member in window[interf].prototype); diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html index 2e33cec0b33..09fedcf6018 100644 --- a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html +++ b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html @@ -30,6 +30,13 @@ var properties = [ 'grid-template-columns', 'grid-template-rows', 'inline-size', + 'inset', + 'inset-block', + 'inset-block-end', + 'inset-block-start', + 'inset-inline', + 'inset-inline-end', + 'inset-inline-start', 'margin-block-end', 'margin-block-start', 'margin-inline-end', diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-003.html b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-003.html new file mode 100644 index 00000000000..4cbe012a55e --- /dev/null +++ b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-003.html @@ -0,0 +1,42 @@ +<html> +<head> +<meta charset="utf-8"> +<title>inset does not support quirky-length</title> +<link rel="help" href="https://quirks.spec.whatwg.org/#the-unitless-length-quirk"> +<meta name="assert" content="quirky-length is not supported by inset."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<div id="target"></div> +<script> +'use strict'; + +test(() => { + const quirky_values = [ + '1', + '1 2px', + '1px 2', + '1 2', + '1 2px 3px', + '1px 2 3px', + '1px 2px 3', + '1 2 3', + '1 2px 3px 4px', + '1px 2 3px 4px', + '1px 2px 3 4px', + '1px 2px 3px 4', + '1 2 3 4' + ]; + + target.style['inset'] = '5px 6px 7px 8px'; + + for (let value of quirky_values) { + target.style['inset'] = value; + assert_equals(target.style['inset'], '5px 6px 7px 8px', 'inset rejects quirky length "' + value + '"'); + } +}, 'inset does not support quirky length values'); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index ed3ffb425a8..fb86c580d22 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -2135,6 +2135,9 @@ policies and contribution forms [3]. } } else if (p == "timeout_multiplier") { this.timeout_multiplier = value; + if (this.timeout_length) { + this.timeout_length *= this.timeout_multiplier; + } } } } diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/appcache-ordering-main.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/appcache-ordering-main.https.html index 921dae015cb..a86671c1fe4 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/appcache-ordering-main.https.html +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/appcache-ordering-main.https.html @@ -5,7 +5,6 @@ <body> <script> -var INSTALL_APPCACHE_URL = "resources/appcache-ordering.install.html"; var IS_APPCACHED_URL = "resources/appcache-ordering.is-appcached.html"; var SERVICE_WORKER_SCOPE = "resources/appcache-ordering"; var SERVICE_WORKER_SCRIPT = "resources/empty-worker.js"; @@ -15,31 +14,6 @@ var reject_install_appcache = undefined; var frames = []; -// Called by the INSTALL_APPCACHE_URL child frame. -function notify_appcache_installed(success) { - if (success) - resolve_install_appcache(); - else - reject_install_appcache(); -} - -function install_appcache() { - return new Promise(function(resolve, reject) { - var frame = document.createElement('iframe'); - frames.push(frame); - frame.src = INSTALL_APPCACHE_URL; - document.body.appendChild(frame); - resolve_install_appcache = function() { - document.body.removeChild(frame); - resolve(); - }; - reject_install_appcache = function() { - document.body.removeChild(frame); - reject(); - }; - }); -} - var resolve_is_appcached = undefined; // Called by the IS_APPCACHED_URL child frame. @@ -63,7 +37,7 @@ function is_appcached() { promise_test(function(t) { return service_worker_unregister(t, SERVICE_WORKER_SCOPE) .then(function() { - return install_appcache(); + return install_appcache_ordering_manifest(); }) .then(function() { return is_appcached(); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/claim-fetch-with-appcache.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/claim-fetch-with-appcache.https.html new file mode 100644 index 00000000000..4890a84ba10 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/claim-fetch-with-appcache.https.html @@ -0,0 +1,81 @@ +<!doctype html> +<meta charset=utf-8> +<title></title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/test-helpers.sub.js"></script> +<body> +<script> + +// This test makes a frame controlled by AppCache, then registers a service +// worker that calls claim() to control the frame. AppCache should be completely +// bypassed once the service worker claims the frame. + +const fetch_text = async frame => { + const response = await + frame.contentWindow.fetch('appcache-ordering.is-appcached.js'); + return await response.text(); +}; + +const check_is_appcached = async frame => { + // This should FALLBACK to ordering.is_appcached.js as in the manifest + // if the appcache is effective. + const response = await + frame.contentWindow.fetch('appcache-ordering.is-appcached404.js'); + return await response.ok; +}; + +promise_test(async t => { + const scope = 'resources/'; + const script = 'resources/claim-worker.js'; + + await install_appcache_ordering_manifest(); + + // Create the test iframe. + const frame = await with_iframe('resources/blank.html'); + t.add_cleanup(async () => { + if (frame) frame.remove(); + return service_worker_unregister(t, scope); + }); + + // Check that the appcache controls the frame. + assert_equals(await check_is_appcached(frame), true, + 'AppCache should be present'); + + // Check the controller and test with fetch. + assert_equals(frame.contentWindow.navigator.controller, undefined, + 'Should have no controller.'); + assert_equals(await fetch_text(frame), 'var is_appcached = true;\n', + 'fetch() should not be intercepted.'); + + // Register a service worker. + let registration = await service_worker_unregister_and_register(t, script, scope); + const worker = registration.installing; + await wait_for_state(t, worker, 'activated'); + + // Let the service worker claim the iframe. + const channel = new MessageChannel(); + const check_message = new Promise(resolve => { + channel.port1.onmessage = async e => { + assert_equals(e.data, 'PASS', 'Worker call to claim() should fulfill.'); + resolve(); + }; + }); + worker.postMessage({port: channel.port2}, [channel.port2]); + await check_message; + + // Check that the appcache does NOT control the frame. + assert_equals(await check_is_appcached(frame), false, + 'AppCache should not be present'); + + // Check the controller and test with fetch. + registration = await + frame.contentWindow.navigator.serviceWorker.getRegistration(scope); + assert_equals(frame.contentWindow.navigator.serviceWorker.controller, + registration.active, 'iframe should be claimed.'); + assert_equals(await fetch_text(frame), 'Intercepted!', + 'fetch() should be intercepted.'); +}, 'fetch() should be intercepted after the client is claimed.') + +</script> +</body> diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/appcache-ordering.manifest b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/appcache-ordering.manifest index 0deed0e91a8..e6597ccb8ac 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/appcache-ordering.manifest +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/appcache-ordering.manifest @@ -1,6 +1,7 @@ CACHE MANIFEST appcache-ordering.is-appcached.html +blank.html FALLBACK: appcache-ordering.is-appcached404.js appcache-ordering.is-appcached.js diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/claim-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/claim-worker.js index 53f210cf763..18004079475 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/claim-worker.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/claim-worker.js @@ -14,5 +14,6 @@ self.addEventListener('message', function(event) { }); self.addEventListener('fetch', function(event) { - event.respondWith(new Response('Intercepted!')); -}); + if (!/404/.test(event.request.url)) + event.respondWith(new Response('Intercepted!')); + }); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/test-helpers.sub.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/test-helpers.sub.js index 7efde354a8f..14101319fa9 100644 --- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/test-helpers.sub.js +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/test-helpers.sub.js @@ -276,3 +276,33 @@ async function wait_for_activation_on_dummy_scope(t, window_or_workerglobalscope await wait_for_state(t, registration.installing, 'activated'); await registration.unregister(); } + +// This installs resources/appcache-ordering.manifest. +function install_appcache_ordering_manifest() { + let resolve_install_appcache; + let reject_install_appcache; + + // This is notified by the child iframe, i.e. appcache-ordering.install.html, + // that's to be created below. + window.notify_appcache_installed = success => { + if (success) + resolve_install_appcache(); + else + reject_install_appcache(); + }; + + return new Promise((resolve, reject) => { + const frame = document.createElement('iframe'); + frame.src = 'resources/appcache-ordering.install.html'; + document.body.appendChild(frame); + resolve_install_appcache = function() { + document.body.removeChild(frame); + resolve(); + }; + reject_install_appcache = function() { + document.body.removeChild(frame); + reject(); + }; + }); +} + diff --git a/tests/wpt/web-platform-tests/signed-exchange/resources/sxg-util.js b/tests/wpt/web-platform-tests/signed-exchange/resources/sxg-util.js index 0d0e263fd62..7d592ea2143 100644 --- a/tests/wpt/web-platform-tests/signed-exchange/resources/sxg-util.js +++ b/tests/wpt/web-platform-tests/signed-exchange/resources/sxg-util.js @@ -41,3 +41,27 @@ function loadScript(url) { function innerURLOrigin() { return 'https://127.0.0.1:8444'; } + +function runReferrerTests(test_cases) { + for (const i in test_cases) { + const test_case = test_cases[i]; + promise_test(async (t) => { + const sxgUrl = test_case.origin + '/signed-exchange/resources/sxg/' + + test_case.sxg; + const message = + await openSXGInIframeAndWaitForMessage( + t, sxgUrl, test_case.referrerPolicy); + assert_false(message.is_fallback); + assert_equals(message.referrer, test_case.expectedReferrer); + + const invalidSxgUrl = + test_case.origin + '/signed-exchange/resources/sxg/invalid-' + + test_case.sxg; + const fallbackMessage = + await openSXGInIframeAndWaitForMessage( + t, invalidSxgUrl, test_case.referrerPolicy); + assert_true(fallbackMessage.is_fallback); + assert_equals(fallbackMessage.referrer, test_case.expectedReferrer); + }, 'Referrer of SignedHTTPExchange test : ' + JSON.stringify(test_case)); + } +} diff --git a/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-policy-header.tentative.https.html b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-policy-header.tentative.https.html new file mode 100644 index 00000000000..5dff6af8cb0 --- /dev/null +++ b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-policy-header.tentative.https.html @@ -0,0 +1,62 @@ +<!DOCTYPE html> +<title>Referrer-Policy header in outer SXG response</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="./resources/sxg-util.js"></script> +<body> +<script> +(() => { + const SAME_ORIGIN = get_host_info().HTTPS_ORIGIN; + const SAME_ORIGIN_SXG = 'sxg-referrer-same-origin.sxg'; + const TEST_CASES = [ + // Referrer-Policy header in outer SXG response. + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,no-referrer)', + referrerPolicy: undefined, + expectedReferrer: '' + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG + + '?pipe=header(Referrer-Policy,no-referrer-when-downgrade)', + referrerPolicy: undefined, + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,origin)', + referrerPolicy: undefined, + expectedReferrer: document.location.origin + '/' + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,same-origin)', + referrerPolicy: undefined, + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,strict-origin)', + referrerPolicy: undefined, + expectedReferrer: document.location.origin + '/' + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG + + '?pipe=header(Referrer-Policy,strict-origin-when-cross-origin)', + referrerPolicy: undefined, + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,unsafe-url)', + referrerPolicy: undefined, + expectedReferrer: document.location.href + }, + ]; + runReferrerTests(TEST_CASES); +})(); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html new file mode 100644 index 00000000000..c2870fdd0af --- /dev/null +++ b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html @@ -0,0 +1,66 @@ +<!DOCTYPE html> +<title>Referrer of SignedHTTPExchange(physical:remote origin, logical:remote origin)</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="./resources/sxg-util.js"></script> +<body> +<script> +(() => { + const REMOTE_ORIGIN = get_host_info().HTTPS_REMOTE_ORIGIN; + const REMOTE_ORIGIN_SXG = 'sxg-referrer-remote-origin.sxg'; + const TEST_CASES = [ + // Physical origin = remote origin. Logical origin = remote origin. + { + origin: REMOTE_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: undefined, + expectedReferrer: document.location.href + }, + { + origin: REMOTE_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'no-referrer', + expectedReferrer: '' + }, + { + origin: REMOTE_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'no-referrer-when-downgrade', + expectedReferrer: document.location.href + }, + { + origin: REMOTE_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: REMOTE_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'same-origin', + expectedReferrer: '' + }, + { + origin: REMOTE_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'strict-origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: REMOTE_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'strict-origin-when-cross-origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: REMOTE_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'unsafe-url', + expectedReferrer: document.location.href + }, + ]; + runReferrerTests(TEST_CASES); +})(); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html new file mode 100644 index 00000000000..b3c77d14273 --- /dev/null +++ b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html @@ -0,0 +1,66 @@ +<!DOCTYPE html> +<title>Referrer of SignedHTTPExchange(physical:remote origin, logical:same origin)</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="./resources/sxg-util.js"></script> +<body> +<script> +(() => { + const REMOTE_ORIGIN = get_host_info().HTTPS_REMOTE_ORIGIN; + const SAME_ORIGIN_SXG = 'sxg-referrer-same-origin.sxg'; + const TEST_CASES = [ + // Physical origin = remote origin. Logical origin = same origin. + { + origin: REMOTE_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: undefined, + expectedReferrer: document.location.href + }, + { + origin: REMOTE_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'no-referrer', + expectedReferrer: '' + }, + { + origin: REMOTE_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'no-referrer-when-downgrade', + expectedReferrer: document.location.href + }, + { + origin: REMOTE_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: REMOTE_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'same-origin', + expectedReferrer: '' + }, + { + origin: REMOTE_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'strict-origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: REMOTE_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'strict-origin-when-cross-origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: REMOTE_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'unsafe-url', + expectedReferrer: document.location.href + }, + ]; + runReferrerTests(TEST_CASES); +})(); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html new file mode 100644 index 00000000000..8a6cdd993af --- /dev/null +++ b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html @@ -0,0 +1,66 @@ +<!DOCTYPE html> +<title>Referrer of SignedHTTPExchange(physical:same origin, logical:remote origin)</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="./resources/sxg-util.js"></script> +<body> +<script> +(() => { + const SAME_ORIGIN = get_host_info().HTTPS_ORIGIN; + const REMOTE_ORIGIN_SXG = 'sxg-referrer-remote-origin.sxg'; + const TEST_CASES = [ + // Physical origin = same origin. Logical origin = remote origin. + { + origin: SAME_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: undefined, + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'no-referrer', + expectedReferrer: '' + }, + { + origin: SAME_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'no-referrer-when-downgrade', + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: SAME_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'same-origin', + expectedReferrer: '' + }, + { + origin: SAME_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'strict-origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: SAME_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'strict-origin-when-cross-origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: SAME_ORIGIN, + sxg: REMOTE_ORIGIN_SXG, + referrerPolicy: 'unsafe-url', + expectedReferrer: document.location.href + }, + ]; + runReferrerTests(TEST_CASES); +})(); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html new file mode 100644 index 00000000000..88917167b9c --- /dev/null +++ b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html @@ -0,0 +1,66 @@ +<!DOCTYPE html> +<title>Referrer of SignedHTTPExchange(physical:same origin, logical:same origin)</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="./resources/sxg-util.js"></script> +<body> +<script> +(() => { + const SAME_ORIGIN = get_host_info().HTTPS_ORIGIN; + const SAME_ORIGIN_SXG = 'sxg-referrer-same-origin.sxg'; + const TEST_CASES = [ + // Physical origin = same origin. Logical origin = same origin. + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: undefined, + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'no-referrer', + expectedReferrer: '' + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'no-referrer-when-downgrade', + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'same-origin', + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'strict-origin', + expectedReferrer: document.location.origin + '/' + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'strict-origin-when-cross-origin', + expectedReferrer: document.location.href + }, + { + origin: SAME_ORIGIN, + sxg: SAME_ORIGIN_SXG, + referrerPolicy: 'unsafe-url', + expectedReferrer: document.location.href + }, + ]; + runReferrerTests(TEST_CASES); +})(); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer.tentative.https.html b/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer.tentative.https.html deleted file mode 100644 index 3be9b1ff9b4..00000000000 --- a/tests/wpt/web-platform-tests/signed-exchange/sxg-referrer.tentative.https.html +++ /dev/null @@ -1,284 +0,0 @@ -<!DOCTYPE html> -<title>Referrer of SignedHTTPExchange</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/common/get-host-info.sub.js"></script> -<script src="./resources/sxg-util.js"></script> -<body> -<script> -(() => { - const SAME_ORIGIN = get_host_info().HTTPS_ORIGIN; - const REMOTE_ORIGIN = get_host_info().HTTPS_REMOTE_ORIGIN; - const SAME_ORIGIN_SXG = 'sxg-referrer-same-origin.sxg'; - const REMOTE_ORIGIN_SXG = 'sxg-referrer-remote-origin.sxg'; - const TEST_CASES = [ - // Physical origin = same origin. Logical origin = same origin. - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: undefined, - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'no-referrer', - expectedReferrer: '' - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'no-referrer-when-downgrade', - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'same-origin', - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'strict-origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'strict-origin-when-cross-origin', - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'unsafe-url', - expectedReferrer: document.location.href - }, - - // Physical origin = same origin. Logical origin = remote origin. - { - origin: SAME_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: undefined, - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'no-referrer', - expectedReferrer: '' - }, - { - origin: SAME_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'no-referrer-when-downgrade', - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: SAME_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'same-origin', - expectedReferrer: '' - }, - { - origin: SAME_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'strict-origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: SAME_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'strict-origin-when-cross-origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: SAME_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'unsafe-url', - expectedReferrer: document.location.href - }, - - // Physical origin = remote origin. Logical origin = same origin. - { - origin: REMOTE_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: undefined, - expectedReferrer: document.location.href - }, - { - origin: REMOTE_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'no-referrer', - expectedReferrer: '' - }, - { - origin: REMOTE_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'no-referrer-when-downgrade', - expectedReferrer: document.location.href - }, - { - origin: REMOTE_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: REMOTE_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'same-origin', - expectedReferrer: '' - }, - { - origin: REMOTE_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'strict-origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: REMOTE_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'strict-origin-when-cross-origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: REMOTE_ORIGIN, - sxg: SAME_ORIGIN_SXG, - referrerPolicy: 'unsafe-url', - expectedReferrer: document.location.href - }, - - // Physical origin = remote origin. Logical origin = remote origin. - { - origin: REMOTE_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: undefined, - expectedReferrer: document.location.href - }, - { - origin: REMOTE_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'no-referrer', - expectedReferrer: '' - }, - { - origin: REMOTE_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'no-referrer-when-downgrade', - expectedReferrer: document.location.href - }, - { - origin: REMOTE_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: REMOTE_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'same-origin', - expectedReferrer: '' - }, - { - origin: REMOTE_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'strict-origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: REMOTE_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'strict-origin-when-cross-origin', - expectedReferrer: document.location.origin + '/' - }, - { - origin: REMOTE_ORIGIN, - sxg: REMOTE_ORIGIN_SXG, - referrerPolicy: 'unsafe-url', - expectedReferrer: document.location.href - }, - - // Referrer-Policy header in outer SXG response. - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,no-referrer)', - referrerPolicy: undefined, - expectedReferrer: '' - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG + - '?pipe=header(Referrer-Policy,no-referrer-when-downgrade)', - referrerPolicy: undefined, - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,origin)', - referrerPolicy: undefined, - expectedReferrer: document.location.origin + '/' - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,same-origin)', - referrerPolicy: undefined, - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,strict-origin)', - referrerPolicy: undefined, - expectedReferrer: document.location.origin + '/' - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG + - '?pipe=header(Referrer-Policy,strict-origin-when-cross-origin)', - referrerPolicy: undefined, - expectedReferrer: document.location.href - }, - { - origin: SAME_ORIGIN, - sxg: SAME_ORIGIN_SXG + '?pipe=header(Referrer-Policy,unsafe-url)', - referrerPolicy: undefined, - expectedReferrer: document.location.href - }, - ]; - for (const i in TEST_CASES) { - const test_case = TEST_CASES[i]; - promise_test(async (t) => { - const sxgUrl = test_case.origin + '/signed-exchange/resources/sxg/' + - test_case.sxg; - const message = - await openSXGInIframeAndWaitForMessage( - t, sxgUrl, test_case.referrerPolicy); - assert_false(message.is_fallback); - assert_equals(message.referrer, test_case.expectedReferrer); - - const invalidSxgUrl = - test_case.origin + '/signed-exchange/resources/sxg/invalid-' + - test_case.sxg; - const fallbackMessage = - await openSXGInIframeAndWaitForMessage( - t, invalidSxgUrl, test_case.referrerPolicy); - assert_true(fallbackMessage.is_fallback); - assert_equals(fallbackMessage.referrer, test_case.expectedReferrer); - }, 'Referrer of SignedHTTPExchange test : ' + JSON.stringify(test_case)); - } -})(); -</script> -</body> diff --git a/tests/wpt/web-platform-tests/storage/estimate-usage-details-application-cache.https.tentative.html b/tests/wpt/web-platform-tests/storage/estimate-usage-details-application-cache.https.tentative.html new file mode 100644 index 00000000000..464a99887bd --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/estimate-usage-details-application-cache.https.tentative.html @@ -0,0 +1,29 @@ +<!doctype html> +<html> +<title>Quota Estimate: usage details reflect application cache changes.</title> +<meta charset='utf-8'> +<link rel='author' href='jarrydg@chromium.org' title='Jarryd Goodman'> +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> +<script src='../cookie-store/resources/helpers.js'></script> +<script> +'use strict'; + +promise_test(async t => { + let estimate = await navigator.storage.estimate(); + + const usageBeforeCreate = estimate.usageDetails.applicationCache || 0; + + const iframe = await + createIframe('./resources/iframe_with_appcache_manifest.html', t); + await waitForMessage(); + + estimate = await navigator.storage.estimate(); + assert_true('applicationCache' in estimate.usageDetails); + const usageAfterCreate = estimate.usageDetails.applicationCache; + + assert_greater_than( + usageAfterCreate, usageBeforeCreate); +}, 'estimate() shows usage increase after app is cached'); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/storage/estimate-usage-details-caches.https.tentative.any.js b/tests/wpt/web-platform-tests/storage/estimate-usage-details-caches.https.tentative.any.js new file mode 100644 index 00000000000..bf889f84184 --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/estimate-usage-details-caches.https.tentative.any.js @@ -0,0 +1,20 @@ +// META: title=StorageManager: estimate() for caches + +promise_test(async t => { + let estimate = await navigator.storage.estimate(); + + const cachesUsageBeforeCreate = estimate.usageDetails.caches || 0; + + const cacheName = 'testCache'; + const cache = await caches.open(cacheName); + t.add_cleanup(() => caches.delete(cacheName)); + + await cache.put('/test.json', new Response('x'.repeat(1024*1024))); + + estimate = await navigator.storage.estimate(); + assert_true('caches' in estimate.usageDetails); + const cachesUsageAfterPut = estimate.usageDetails.caches; + assert_greater_than( + cachesUsageAfterPut, cachesUsageBeforeCreate, + 'estimated usage should increase after value is stored'); +}, 'estimate() shows usage increase after large value is stored'); diff --git a/tests/wpt/web-platform-tests/storage/estimate-usage-details.https.tentative.any.js b/tests/wpt/web-platform-tests/storage/estimate-usage-details.https.tentative.any.js new file mode 100644 index 00000000000..2a1cea5fb8d --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/estimate-usage-details.https.tentative.any.js @@ -0,0 +1,12 @@ +// META: title=StorageManager: estimate() should have usage details + +promise_test(async t => { + const estimate = await navigator.storage.estimate(); + assert_equals(typeof estimate, 'object'); + assert_true('usage' in estimate); + assert_equals(typeof estimate.usage, 'number'); + assert_true('quota' in estimate); + assert_equals(typeof estimate.quota, 'number'); + assert_true('usageDetails' in estimate); + assert_equals(typeof estimate.usageDetails, 'object'); +}, 'estimate() resolves to dictionary with members, including usageDetails'); diff --git a/tests/wpt/web-platform-tests/storage/resources/appcache.manifest b/tests/wpt/web-platform-tests/storage/resources/appcache.manifest new file mode 100644 index 00000000000..ce90bafd21f --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/resources/appcache.manifest @@ -0,0 +1,3 @@ +CACHE MANIFEST +# iframe_with_appcache_manifest.html references this manifest to get cached in +# AppCache. diff --git a/tests/wpt/web-platform-tests/storage/resources/iframe_with_appcache_manifest.html b/tests/wpt/web-platform-tests/storage/resources/iframe_with_appcache_manifest.html new file mode 100644 index 00000000000..8365ce41f49 --- /dev/null +++ b/tests/wpt/web-platform-tests/storage/resources/iframe_with_appcache_manifest.html @@ -0,0 +1,17 @@ +<!doctype html> +<html manifest="appcache.manifest"> +<title>Iframe that will be cached using application cache.</title> +<meta charset='utf-8'> +<link rel='author' href='jarrydg@chromium.org' title='Jarryd Goodman'> +<script> +(async () => { + const initPromise = new Promise(resolve => { + applicationCache.addEventListener('cached', resolve); + applicationCache.addEventListener('noupdate', resolve); + }); + await initPromise; + + window.parent.postMessage('document cached'); +})(); +</script> +</html> diff --git a/tests/wpt/web-platform-tests/tools/ci/check_stability.py b/tests/wpt/web-platform-tests/tools/ci/check_stability.py deleted file mode 100644 index a71e0956629..00000000000 --- a/tests/wpt/web-platform-tests/tools/ci/check_stability.py +++ /dev/null @@ -1,318 +0,0 @@ -from __future__ import print_function - -import argparse -import logging -import os -import subprocess -import sys -from ConfigParser import SafeConfigParser - -here = os.path.dirname(__file__) -wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir)) -sys.path.insert(0, wpt_root) - -from tools.wpt import run as wptrun, testfiles -from tools.wpt.testfiles import get_git_cmd -from tools.wpt.virtualenv import Virtualenv -from tools.wpt.utils import Kwargs -from tools.wpt.run import create_parser, setup_wptrunner -from tools.wpt import markdown -from tools import localpaths # noqa: F401 - -logger = None -run_step, write_inconsistent, write_slow_tests, write_results = None, None, None, None -wptrunner = None - -def setup_logging(): - """Set up basic debug logger.""" - global logger - logger = logging.getLogger(here) - handler = logging.StreamHandler(sys.stdout) - formatter = logging.Formatter(logging.BASIC_FORMAT, None) - handler.setFormatter(formatter) - logger.addHandler(handler) - logger.setLevel(logging.DEBUG) - wptrun.setup_logging({}) - -def do_delayed_imports(): - global wptrunner, run_step, write_inconsistent, write_slow_tests, write_results - from wptrunner import wptrunner - from wptrunner.stability import run_step, write_inconsistent, write_slow_tests, write_results - - -class TravisFold(object): - """Context for TravisCI folding mechanism. Subclasses object. - - See: https://blog.travis-ci.com/2013-05-22-improving-build-visibility-log-folds/ - """ - - def __init__(self, name): - """Register TravisCI folding section name.""" - self.name = name - - def __enter__(self): - """Emit fold start syntax.""" - print("travis_fold:start:%s" % self.name, file=sys.stderr) - - def __exit__(self, type, value, traceback): - """Emit fold end syntax.""" - print("travis_fold:end:%s" % self.name, file=sys.stderr) - - -class FilteredIO(object): - """Wrap a file object, invoking the provided callback for every call to - `write` and only proceeding with the operation when that callback returns - True.""" - def __init__(self, original, on_write): - self.original = original - self.on_write = on_write - - def __getattr__(self, name): - return getattr(self.original, name) - - def disable(self): - self.write = lambda msg: None - - def write(self, msg): - encoded = msg.encode("utf8", "backslashreplace").decode("utf8") - if self.on_write(self.original, encoded) is True: - self.original.write(encoded) - - -def replace_streams(capacity, warning_msg): - # Value must be boxed to support modification from inner function scope - count = [0] - capacity -= 2 + len(warning_msg) - stderr = sys.stderr - - def on_write(handle, msg): - length = len(msg) - count[0] += length - - if count[0] > capacity: - wrapped_stdout.disable() - wrapped_stderr.disable() - handle.write(msg[0:capacity - count[0]]) - handle.flush() - stderr.write("\n%s\n" % warning_msg) - return False - - return True - - # Store local references to the replaced streams to guard against the case - # where other code replace the global references. - sys.stdout = wrapped_stdout = FilteredIO(sys.stdout, on_write) - sys.stderr = wrapped_stderr = FilteredIO(sys.stderr, on_write) - - -def call(*args): - """Log terminal command, invoke it as a subprocess. - - Returns a bytestring of the subprocess output if no error. - """ - logger.debug(" ".join(args)) - try: - return subprocess.check_output(args) - except subprocess.CalledProcessError as e: - logger.critical("%s exited with return code %i" % - (e.cmd, e.returncode)) - logger.critical(e.output) - raise - - -def fetch_wpt(user, *args): - git = get_git_cmd(wpt_root) - git("fetch", "https://github.com/%s/web-platform-tests.git" % user, *args) - - -def get_sha1(): - """ Get and return sha1 of current git branch HEAD commit.""" - git = get_git_cmd(wpt_root) - return git("rev-parse", "HEAD").strip() - - -def deepen_checkout(user): - """Convert from a shallow checkout to a full one""" - fetch_args = [user, "+refs/heads/*:refs/remotes/origin/*"] - if os.path.exists(os.path.join(wpt_root, ".git", "shallow")): - fetch_args.insert(1, "--unshallow") - fetch_wpt(*fetch_args) - - -def get_parser(): - """Create and return script-specific argument parser.""" - description = """Detect instabilities in new tests by executing tests - repeatedly and comparing results between executions.""" - parser = argparse.ArgumentParser(description=description) - parser.add_argument("--user", - action="store", - # Travis docs say do not depend on USER env variable. - # This is a workaround to get what should be the same value - default=os.environ.get("TRAVIS_REPO_SLUG", "w3c").split('/')[0], - help="Travis user name") - parser.add_argument("--output-bytes", - action="store", - type=int, - help="Maximum number of bytes to write to standard output/error") - parser.add_argument("--metadata", - dest="metadata_root", - action="store", - default=wpt_root, - help="Directory that will contain MANIFEST.json") - parser.add_argument("--config-file", - action="store", - type=str, - help="Location of ini-formatted configuration file", - default="check_stability.ini") - parser.add_argument("--rev", - action="store", - default=None, - help="Commit range to use") - return parser - - -def pr(): - pr = os.environ.get("TRAVIS_PULL_REQUEST", "false") - return pr if pr != "false" else None - - -def get_changed_files(manifest_path, rev, ignore_changes): - if not rev: - branch_point = testfiles.branch_point() - revish = "%s..HEAD" % branch_point - else: - revish = rev - - files_changed, files_ignored = testfiles.files_changed(revish, ignore_changes) - - if files_ignored: - logger.info("Ignoring %s changed files:\n%s" % - (len(files_ignored), "".join(" * %s\n" % item for item in files_ignored))) - - tests_changed, files_affected = testfiles.affected_testfiles(files_changed, - manifest_path=manifest_path) - - return tests_changed, files_affected - - -def main(): - """Perform check_stability functionality and return exit code.""" - - venv = Virtualenv(os.environ.get("VIRTUAL_ENV", os.path.join(wpt_root, "_venv"))) - venv.install_requirements(os.path.join(wpt_root, "tools", "wptrunner", "requirements.txt")) - - args, wpt_args = get_parser().parse_known_args() - return run(venv, wpt_args, **vars(args)) - - -def run(venv, wpt_args, **kwargs): - do_delayed_imports() - - setup_logging() - - retcode = 0 - - wpt_args = create_parser().parse_args(wpt_args) - - with open(kwargs["config_file"], 'r') as config_fp: - config = SafeConfigParser() - config.readfp(config_fp) - ignore_changes = set(config.get("file detection", "ignore_changes").split()) - - if kwargs["output_bytes"] is not None: - replace_streams(kwargs["output_bytes"], - "Log reached capacity (%s bytes); output disabled." % kwargs["output_bytes"]) - - - wpt_args.metadata_root = kwargs["metadata_root"] - try: - os.makedirs(wpt_args.metadata_root) - except OSError: - pass - - pr_number = pr() - - with TravisFold("browser_setup"): - logger.info(markdown.format_comment_title(wpt_args.product)) - - if pr is not None: - deepen_checkout(kwargs["user"]) - - # Ensure we have a branch called "master" - fetch_wpt(kwargs["user"], "master:master") - - head_sha1 = get_sha1() - logger.info("Testing web-platform-tests at revision %s" % head_sha1) - - wpt_kwargs = Kwargs(vars(wpt_args)) - - if not wpt_kwargs["test_list"]: - manifest_path = os.path.join(wpt_kwargs["metadata_root"], "MANIFEST.json") - tests_changed, files_affected = get_changed_files(manifest_path, kwargs["rev"], - ignore_changes) - - if not (tests_changed or files_affected): - logger.info("No tests changed") - return 0 - - if tests_changed: - logger.debug("Tests changed:\n%s" % "".join(" * %s\n" % item for item in tests_changed)) - - if files_affected: - logger.debug("Affected tests:\n%s" % "".join(" * %s\n" % item for item in files_affected)) - - wpt_kwargs["test_list"] = list(tests_changed | files_affected) - - do_delayed_imports() - - wpt_kwargs["prompt"] = False - wpt_kwargs["install_browser"] = wpt_kwargs["product"].split(":")[0] == "firefox" - - wpt_kwargs["pause_after_test"] = False - wpt_kwargs["verify_log_full"] = False - if wpt_kwargs["repeat"] == 1: - wpt_kwargs["repeat"] = 10 - wpt_kwargs["headless"] = False - - wpt_kwargs["log_tbpl"] = [sys.stdout] - - wpt_kwargs = setup_wptrunner(venv, **wpt_kwargs) - - logger.info("Using binary %s" % wpt_kwargs["binary"]) - - - with TravisFold("running_tests"): - logger.info("Starting tests") - - wpt_logger = wptrunner.logger - results, inconsistent, slow, iterations = run_step(wpt_logger, wpt_kwargs["repeat"], True, {}, **wpt_kwargs) - - if results: - if inconsistent: - write_inconsistent(logger.error, inconsistent, iterations) - retcode = 2 - elif slow: - write_slow_tests(logger.error, slow) - retcode = 2 - else: - logger.info("All results were stable\n") - with TravisFold("full_results"): - write_results(logger.info, results, iterations, - pr_number=pr_number, - use_details=True) - else: - logger.info("No tests run.") - # Be conservative and only return errors when we know for sure tests are changed. - if tests_changed: - retcode = 3 - - return retcode - - -if __name__ == "__main__": - try: - sys.exit(main()) - except Exception: - import traceback - traceback.print_exc() - sys.exit(1) diff --git a/tests/wpt/web-platform-tests/tools/ci/commands.json b/tests/wpt/web-platform-tests/tools/ci/commands.json index 361c9e4f3de..841fd855c80 100644 --- a/tests/wpt/web-platform-tests/tools/ci/commands.json +++ b/tests/wpt/web-platform-tests/tools/ci/commands.json @@ -6,20 +6,6 @@ "help": "List test jobs that should run for a set of commits", "virtualenv": false }, - "check-stability": { - "path": "check_stability.py", - "script": "run", - "parser": "get_parser", - "parse_known": true, - "help": "Check test stability", - "virtualenv": true, - "install": [ - "requests" - ], - "requirements": [ - "../wptrunner/requirements.txt" - ] - }, "make-hosts-file": { "path": "make_hosts_file.py", "script": "run", diff --git a/tests/wpt/web-platform-tests/tools/ci/start.sh b/tests/wpt/web-platform-tests/tools/ci/start.sh index 9f621b2326e..580bfb937dd 100644 --- a/tests/wpt/web-platform-tests/tools/ci/start.sh +++ b/tests/wpt/web-platform-tests/tools/ci/start.sh @@ -28,3 +28,4 @@ then fi sudo Xvfb $DISPLAY -screen 0 ${SCREEN_WIDTH}x${SCREEN_HEIGHT}x${SCREEN_DEPTH} & +sudo fluxbox -display $DISPLAY & diff --git a/tests/wpt/web-platform-tests/tools/docker/Dockerfile b/tests/wpt/web-platform-tests/tools/docker/Dockerfile index 20f6ef26c7a..53564ac135c 100644 --- a/tests/wpt/web-platform-tests/tools/docker/Dockerfile +++ b/tests/wpt/web-platform-tests/tools/docker/Dockerfile @@ -11,6 +11,7 @@ RUN apt-get -qqy update \ ca-certificates \ dbus-x11 \ earlyoom \ + fluxbox \ gdebi \ git \ locales \ diff --git a/tests/wpt/web-platform-tests/tools/requirements_flake8.txt b/tests/wpt/web-platform-tests/tools/requirements_flake8.txt index d2e7dd64232..00d182e2d0f 100644 --- a/tests/wpt/web-platform-tests/tools/requirements_flake8.txt +++ b/tests/wpt/web-platform-tests/tools/requirements_flake8.txt @@ -1,4 +1,4 @@ flake8==3.6.0 pycodestyle==2.4.0 -pyflakes==2.0.0 +pyflakes==2.1.0 pep8-naming==0.7.0 diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py index bf6250f2903..1ddac67a39a 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py @@ -412,6 +412,5 @@ def test_serve(): # The following commands are slow running and used implicitly in other CI # jobs, so we skip them here: -# wpt check-stability # wpt manifest # wpt lint diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py index 3b5c96caed6..67d5b6ec2f5 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py @@ -76,6 +76,7 @@ def browser_kwargs(test_type, run_info_data, config, **kwargs): "certutil_binary": kwargs["certutil_binary"], "ca_certificate_path": config.ssl_config["ca_cert_path"], "e10s": kwargs["gecko_e10s"], + "lsan_dir": kwargs["lsan_dir"], "stackfix_dir": kwargs["stackfix_dir"], "binary_args": kwargs["binary_args"], "timeout_multiplier": get_timeout_multiplier(test_type, @@ -181,7 +182,7 @@ class FirefoxBrowser(Browser): def __init__(self, logger, binary, prefs_root, test_type, extra_prefs=None, debug_info=None, symbols_path=None, stackwalk_binary=None, certutil_binary=None, - ca_certificate_path=None, e10s=False, stackfix_dir=None, + ca_certificate_path=None, e10s=False, lsan_dir=None, stackfix_dir=None, binary_args=None, timeout_multiplier=None, leak_check=False, asan=False, stylo_threads=1, chaos_mode_flags=None, config=None, headless=None, **kwargs): Browser.__init__(self, logger) @@ -210,6 +211,7 @@ class FirefoxBrowser(Browser): self.init_timeout = self.init_timeout * timeout_multiplier self.asan = asan + self.lsan_dir = lsan_dir self.lsan_allowed = None self.lsan_max_stack_depth = None self.leak_check = leak_check @@ -243,7 +245,7 @@ class FirefoxBrowser(Browser): env = test_environment(xrePath=os.path.dirname(self.binary), debugger=self.debug_info is not None, log=self.logger, - lsanPath=self.prefs_root) + lsanPath=self.lsan_dir) env["STYLO_THREADS"] = str(self.stylo_threads) if self.chaos_mode_flags is not None: diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py index 94560cd93ff..b170fc66316 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/metadata.py @@ -479,7 +479,7 @@ class PackedResultList(object): prop = prop_intern.get((packed & 0xF000) >> 12) value_idx = (packed & 0x0F00) >> 8 - if value_idx is 0: + if value_idx == 0: value = self.raw_data[idx] else: value = status_intern.get(value_idx) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py index 8443a01c7de..0a3a8c2b6f7 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py @@ -256,6 +256,8 @@ scheme host and port.""") help="Run tests without electrolysis preferences") gecko_group.add_argument("--stackfix-dir", dest="stackfix_dir", action="store", help="Path to directory containing assertion stack fixing scripts") + gecko_group.add_argument("--lsan-dir", dest="lsan_dir", action="store", + help="Path to directory containing LSAN suppressions file") gecko_group.add_argument("--setpref", dest="extra_prefs", action='append', default=[], metavar="PREF=VALUE", help="Defines an extra user preference (overrides those in prefs_root)") @@ -527,6 +529,9 @@ def check_args(kwargs): if kwargs["reftest_internal"] is None: kwargs["reftest_internal"] = True + if kwargs["lsan_dir"] is None: + kwargs["lsan_dir"] = kwargs["prefs_root"] + return kwargs diff --git a/tests/wpt/web-platform-tests/wake-lock/wakelock-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/wake-lock/wakelock-supported-by-feature-policy.html new file mode 100644 index 00000000000..d6289fff43c --- /dev/null +++ b/tests/wpt/web-platform-tests/wake-lock/wakelock-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that wake-lock is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://w3c.github.io/wake-lock/#dfn-wake-lock-feature"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('wake-lock', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise wake-lock.'); +</script> diff --git a/tests/wpt/web-platform-tests/webdriver/tests/new_window/new_tab.py b/tests/wpt/web-platform-tests/webdriver/tests/new_window/new_tab.py index fbb249fd783..0bf94496572 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/new_window/new_tab.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/new_window/new_tab.py @@ -26,7 +26,7 @@ def test_new_tab_opens_about_blank(session): value = assert_success(response) assert value["type"] == "tab" - session.handle = value["handle"] + session.window_handle = value["handle"] assert session.url == "about:blank" @@ -35,7 +35,7 @@ def test_new_tab_sets_no_window_name(session): value = assert_success(response) assert value["type"] == "tab" - session.handle = value["handle"] + session.window_handle = value["handle"] assert window_name(session) == "" @@ -44,5 +44,5 @@ def test_new_tab_sets_no_opener(session): value = assert_success(response) assert value["type"] == "tab" - session.handle = value["handle"] + session.window_handle = value["handle"] assert opener(session) is None diff --git a/tests/wpt/web-platform-tests/webdriver/tests/new_window/new_window.py b/tests/wpt/web-platform-tests/webdriver/tests/new_window/new_window.py index eb4db6729ec..8b12248a552 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/new_window/new_window.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/new_window/new_window.py @@ -26,7 +26,7 @@ def test_new_window_opens_about_blank(session): value = assert_success(response) assert value["type"] == "window" - session.handle = value["handle"] + session.window_handle = value["handle"] assert session.url == "about:blank" @@ -35,7 +35,7 @@ def test_new_window_sets_no_window_name(session): value = assert_success(response) assert value["type"] == "window" - session.handle = value["handle"] + session.window_handle = value["handle"] assert window_name(session) == "" @@ -44,5 +44,5 @@ def test_new_window_sets_no_opener(session): value = assert_success(response) assert value["type"] == "window" - session.handle = value["handle"] + session.window_handle = value["handle"] assert opener(session) is None diff --git a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport.https.html b/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport.https.html index c64ed6af093..82427e67cb4 100644 --- a/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport.https.html +++ b/tests/wpt/web-platform-tests/webrtc-quic/RTCQuicTransport.https.html @@ -5,6 +5,7 @@ <script src="/resources/testharnessreport.js"></script> <script src="../webrtc/RTCIceTransport-extension-helper.js"></script> <script src="RTCQuicTransport-helper.js"></script> +<script src="../webrtc/dictionary-helper.js"></script> <script> 'use strict'; @@ -21,6 +22,7 @@ // makeStandaloneQuicTransport // makeAndStartTwoQuicTransports // makeTwoConnectedQuicTransports +// sleep test(t => { const iceTransport = makeIceTransport(t); @@ -174,5 +176,93 @@ test(t => { assert_not_equals(update_key, new Uint8Array(new_key)); }, 'Cannot mutate key retrieved from getKey().'); +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + makeAndStartTwoQuicTransports(t); + const stats = await localQuicTransport.getStats(); + assert_number_field(stats, 'timestamp'); + assert_unsigned_int_field(stats, 'bytesSent'); + assert_unsigned_int_field(stats, 'packetsSent'); + assert_unsigned_int_field(stats, 'streamBytesSent'); + assert_unsigned_int_field(stats, 'streamBytesReceived'); + assert_unsigned_int_field(stats, 'numOutgoingStreamsCreated'); + assert_unsigned_int_field(stats, 'numIncomingStreamsCreated'); + assert_unsigned_int_field(stats, 'bytesReceived'); + assert_unsigned_int_field(stats, 'packetsReceived'); + assert_unsigned_int_field(stats, 'packetsProcessed'); + assert_unsigned_int_field(stats, 'bytesRetransmitted'); + assert_unsigned_int_field(stats, 'packetsRetransmitted'); + assert_unsigned_int_field(stats, 'packetsLost'); + assert_unsigned_int_field(stats, 'packetsDropped'); + assert_unsigned_int_field(stats, 'cryptoRetransmitCount'); + assert_unsigned_int_field(stats, 'minRttUs'); + assert_unsigned_int_field(stats, 'smoothedRttUs'); + assert_unsigned_int_field(stats, 'maxPacketSize'); + assert_unsigned_int_field(stats, 'maxReceivedPacketSize'); + assert_unsigned_int_field(stats, 'estimatedBandwidthBps'); + assert_unsigned_int_field(stats, 'packetsReordered'); + assert_unsigned_int_field(stats, 'blockedFramesReceived'); + assert_unsigned_int_field(stats, 'blockedFramesSent'); + assert_unsigned_int_field(stats, 'connectivityProbingPacketsReceived'); +}, 'Stats returned by getStats() are present.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const localStream = localQuicTransport.createStream(); + localStream.write({ finish: true }); + const remoteWatcher = new EventWatcher(t, remoteQuicTransport, 'quicstream'); + await remoteWatcher.wait_for('quicstream'); + const localStats = await localQuicTransport.getStats(); + const remoteStats = await remoteQuicTransport.getStats(); + assert_equals(localStats.numOutgoingStreamsCreated, 1); + assert_equals(localStats.numIncomingStreamsCreated, 0); + assert_equals(remoteStats.numOutgoingStreamsCreated, 0); + assert_equals(remoteStats.numIncomingStreamsCreated, 1); +}, 'getStats() returns proper stream counts after creating streams.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + makeAndStartTwoQuicTransports(t); + const stats1 = await localQuicTransport.getStats(); + await new Promise(resolve => t.step_timeout(resolve, 20)); + const stats2 = await localQuicTransport.getStats(); + assert_greater_than(stats2.timestamp, stats1.timestamp); +}, 'Two separate stats returned by getStats() give different timestamps.'); + +promise_test(async t => { + const quicTransport = makeStandaloneQuicTransport(t); + const promise = quicTransport.getStats(); + promise_rejects(t, 'InvalidStateError', promise); +}, 'getStats() promises immediately rejected with InvalidStateError ' + + `if called before 'connecting'.`); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const promise = localQuicTransport.getStats(); + localQuicTransport.stop(); + promise_rejects(t, 'InvalidStateError', promise); +}, 'getStats() promises rejected with InvalidStateError if stop() ' + + 'is called before being fulfilled.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + const promise = localQuicTransport.getStats(); + localQuicTransport.transport.stop(); + promise_rejects(t, 'InvalidStateError', promise); +}, 'getStats() promises rejected with InvalidStateError if ' + + 'RTCIceTransport calls stop() before being fulfilled.'); + +promise_test(async t => { + const [ localQuicTransport, remoteQuicTransport ] = + await makeTwoConnectedQuicTransports(t); + localQuicTransport.transport.stop(); + const promise = localQuicTransport.getStats(); + promise_rejects(t, 'InvalidStateError', promise); +}, 'getStats() promises immediately rejected if called after' + + `'closed' state.`); + </script> diff --git a/tests/wpt/web-platform-tests/webrtc-stats/idlharness.window.js b/tests/wpt/web-platform-tests/webrtc-stats/idlharness.window.js index 23741201b61..d98712fc485 100644 --- a/tests/wpt/web-platform-tests/webrtc-stats/idlharness.window.js +++ b/tests/wpt/web-platform-tests/webrtc-stats/idlharness.window.js @@ -7,7 +7,7 @@ idl_test( ['webrtc-stats'], - [], // No deps + ['webrtc'], idl_array => { // No interfaces to test } diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html index 4071033a3c9..b647b3d3e35 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-iceConnectionState.html @@ -64,6 +64,12 @@ assert_equals(pc.iceConnectionState, 'new'); }, 'Initial iceConnectionState should be new'); + test(t => { + const pc = new RTCPeerConnection(); + pc.close(); + assert_equals(pc.iceConnectionState, 'closed'); + }, 'Closing the connection should set iceConnectionState to closed'); + /* 4.4.4 RTCIceConnectionState Enum checking @@ -106,6 +112,35 @@ const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + let had_checking = false; + + const onIceConnectionStateChange = t.step_func(() => { + const {iceConnectionState} = pc1; + if (iceConnectionState === 'checking') { + had_checking = true; + } else if (iceConnectionState === 'connected' || + iceConnectionState === 'completed') { + assert_true(had_checking, 'state should pass checking before' + + ' reaching connected or completed'); + t.done(); + } + }); + + pc1.createDataChannel('test'); + + pc1.addEventListener('iceconnectionstatechange', onIceConnectionStateChange); + + exchangeIceCandidates(pc1, pc2); + doSignalingHandshake(pc1, pc2); + }, 'connection with one data channel should eventually have connected or ' + + 'completed connection state'); + +async_test(t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); t.add_cleanup(() => pc2.close()); @@ -116,19 +151,22 @@ const iceTransport = pc1.sctp.transport.transport; assert_equals(iceTransport.state, 'checking', - 'Expect ICE transport to be in checking state when iceConnectionState is checking'); + 'Expect ICE transport to be in checking state when' + + ' iceConnectionState is checking'); } else if(iceConnectionState === 'connected') { const iceTransport = pc1.sctp.transport.transport; assert_equals(iceTransport.state, 'connected', - 'Expect ICE transport to be in connected state when iceConnectionState is connected'); + 'Expect ICE transport to be in connected state when' + + ' iceConnectionState is connected'); } else if(iceConnectionState === 'completed') { const iceTransport = pc1.sctp.transport.transport; assert_equals(iceTransport.state, 'completed', - 'Expect ICE transport to be in connected state when iceConnectionState is completed'); + 'Expect ICE transport to be in connected state when' + + ' iceConnectionState is completed'); } }); @@ -141,7 +179,8 @@ exchangeIceCandidates(pc1, pc2); doSignalingHandshake(pc1, pc2); - }, 'connection with one data channel should eventually have connected connection state'); + }, 'connection with one data channel should eventually ' + + 'have connected connection state'); /* TODO diff --git a/tests/wpt/web-platform-tests/webusb/usb-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/webusb/usb-supported-by-feature-policy.html new file mode 100644 index 00000000000..d5b585a094f --- /dev/null +++ b/tests/wpt/web-platform-tests/webusb/usb-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that usb is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://wicg.github.io/webusb/#feature-policy"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('usb', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise usb.'); +</script> diff --git a/tests/wpt/web-platform-tests/webvr/webvr-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/webvr/webvr-supported-by-feature-policy.html new file mode 100644 index 00000000000..9487c3516b7 --- /dev/null +++ b/tests/wpt/web-platform-tests/webvr/webvr-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that xr is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://immersive-web.github.io/webxr/#feature-policy"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('xr', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise xr.'); +</script> diff --git a/tests/wpt/web-platform-tests/xhr/sync-xhr-supported-by-feature-policy.html b/tests/wpt/web-platform-tests/xhr/sync-xhr-supported-by-feature-policy.html new file mode 100644 index 00000000000..45588bf6af5 --- /dev/null +++ b/tests/wpt/web-platform-tests/xhr/sync-xhr-supported-by-feature-policy.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>Test that sync-xhr is advertised in the feature list</title> +<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features"> +<link rel="help" href="https://xhr.spec.whatwg.org/#feature-policy-integration"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(() => { + assert_in_array('sync-xhr', document.featurePolicy.features()); +}, 'document.featurePolicy.features should advertise sync-xhr.'); +</script> |