diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2019-09-26 14:21:05 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-26 14:21:05 -0400 |
commit | 9e6c0de73d489e3c48bc00b71bea56938f200edc (patch) | |
tree | ad71b590d3549419b21af315b14f9ffaee45c7c9 | |
parent | 31869f3204695f38156b91cf71a38c1ec3840cf2 (diff) | |
parent | 613dcfb51c91d56590678a90ac6eec0036cbcd33 (diff) | |
download | servo-9e6c0de73d489e3c48bc00b71bea56938f200edc.tar.gz servo-9e6c0de73d489e3c48bc00b71bea56938f200edc.zip |
Auto merge of #24301 - servo-wpt-sync:wpt_update_26-09-2019, r=jdm
Sync WPT with upstream (26-09-2019)
Automated downstream sync of changes from upstream as of 26-09-2019.
[no-wpt-sync]
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/24301)
<!-- Reviewable:end -->
122 files changed, 2585 insertions, 569 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 947e223fb28..6a3af4e2ece 100644 --- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini @@ -14,6 +14,9 @@ [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] diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index fe2077f0d1f..e6476761ebf 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -110793,6 +110793,18 @@ {} ] ], + "css/css-color/opacity-overlapping-letters.html": [ + [ + "css/css-color/opacity-overlapping-letters.html", + [ + [ + "/css/css-color/opacity-overlapping-letters-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-color/rgb-001.html": [ [ "css/css-color/rgb-001.html", @@ -152151,6 +152163,54 @@ {} ] ], + "css/css-text/white-space/pre-wrap-017.html": [ + [ + "css/css-text/white-space/pre-wrap-017.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-018.html": [ + [ + "css/css-text/white-space/pre-wrap-018.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-018-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-019.html": [ + [ + "css/css-text/white-space/pre-wrap-019.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-019-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/white-space/pre-wrap-020.html": [ + [ + "css/css-text/white-space/pre-wrap-020.html", + [ + [ + "/css/css-text/white-space/reference/pre-wrap-020-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/white-space/pre-wrap-float-001.html": [ [ "css/css-text/white-space/pre-wrap-float-001.html", @@ -152636,7 +152696,7 @@ "css/css-text/white-space/textarea-pre-wrap-012.html", [ [ - "/css/css-text/white-space/reference/textarea-pre-wrap-001-ref.html", + "/css/css-text/white-space/reference/pre-wrap-012-ref.html", "==" ] ], @@ -152648,7 +152708,7 @@ "css/css-text/white-space/textarea-pre-wrap-013.html", [ [ - "/css/css-text/white-space/reference/textarea-pre-wrap-001-ref.html", + "/css/css-text/white-space/reference/pre-wrap-013-ref.html", "==" ] ], @@ -152660,7 +152720,7 @@ "css/css-text/white-space/textarea-pre-wrap-014.html", [ [ - "/css/css-text/white-space/reference/textarea-pre-wrap-001-ref.html", + "/css/css-text/white-space/reference/textarea-pre-wrap-014-ref.html", "==" ] ], @@ -157795,9 +157855,21 @@ {} ] ], - "css/css-transforms/transform-box/fill-box-mutation.html": [ + "css/css-transforms/transform-box/fill-box-mutation-001.html": [ [ - "css/css-transforms/transform-box/fill-box-mutation.html", + "css/css-transforms/transform-box/fill-box-mutation-001.html", + [ + [ + "/css/css-transforms/transform-box/reference/greensquare200x200.html", + "==" + ] + ], + {} + ] + ], + "css/css-transforms/transform-box/fill-box-mutation-002.html": [ + [ + "css/css-transforms/transform-box/fill-box-mutation-002.html", [ [ "/css/css-transforms/transform-box/reference/greensquare200x200.html", @@ -212820,6 +212892,12 @@ "battery-status/META.yml": [ [] ], + "battery-status/battery-allowed-by-feature-policy.https.sub.html.headers": [ + [] + ], + "battery-status/battery-disabled-by-feature-policy.https.sub.html.headers": [ + [] + ], "battery-status/support-iframe.html": [ [] ], @@ -243018,6 +243096,9 @@ "css/css-color/lab-007-ref.html": [ [] ], + "css/css-color/opacity-overlapping-letters-ref.html": [ + [] + ], "css/css-color/rebeccapurple-ref.html": [ [] ], @@ -255012,6 +255093,15 @@ "css/css-text/white-space/reference/pre-wrap-014-ref.html": [ [] ], + "css/css-text/white-space/reference/pre-wrap-018-ref.html": [ + [] + ], + "css/css-text/white-space/reference/pre-wrap-019-ref.html": [ + [] + ], + "css/css-text/white-space/reference/pre-wrap-020-ref.html": [ + [] + ], "css/css-text/white-space/reference/pre-wrap-float-001-ref.html": [ [] ], @@ -255033,6 +255123,9 @@ "css/css-text/white-space/reference/textarea-pre-wrap-001-ref.html": [ [] ], + "css/css-text/white-space/reference/textarea-pre-wrap-014-ref.html": [ + [] + ], "css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html": [ [] ], @@ -263238,6 +263331,9 @@ "docs/running-tests/safari.md": [ [] ], + "docs/running-tests/webkitgtk_minibrowser.md": [ + [] + ], "docs/test-suite-design.md": [ [] ], @@ -265029,6 +265125,9 @@ "feature-policy/resources/feature-policy-autoplay.html": [ [] ], + "feature-policy/resources/feature-policy-battery.html": [ + [] + ], "feature-policy/resources/feature-policy-generic-sensor.html": [ [] ], @@ -273246,9 +273345,6 @@ "interfaces/ambient-light.idl": [ [] ], - "interfaces/animation-worklet.idl": [ - [] - ], "interfaces/appmanifest.idl": [ [] ], @@ -273285,6 +273381,9 @@ "interfaces/csp-embedded-enforcement.idl": [ [] ], + "interfaces/css-animation-worklet.idl": [ + [] + ], "interfaces/css-animations.idl": [ [] ], @@ -285183,6 +285282,9 @@ "tools/wptrunner/wptrunner/browsers/webkit.py": [ [] ], + "tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py": [ + [] + ], "tools/wptrunner/wptrunner/config.py": [ [] ], @@ -289176,6 +289278,12 @@ "worklets/resources/import-remote-origin-referrer-checker-worklet-script.sub.js.headers": [ [] ], + "worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js": [ + [] + ], + "worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js.headers": [ + [] + ], "worklets/resources/import-syntax-error-worklet-script.js": [ [] ], @@ -304903,9 +305011,45 @@ } ] ], - "battery-status/battery-iframe.https.html": [ + "battery-status/battery-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ + [ + "battery-status/battery-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html", + {} + ] + ], + "battery-status/battery-allowed-by-feature-policy-attribute.https.sub.html": [ + [ + "battery-status/battery-allowed-by-feature-policy-attribute.https.sub.html", + {} + ] + ], + "battery-status/battery-allowed-by-feature-policy.https.sub.html": [ + [ + "battery-status/battery-allowed-by-feature-policy.https.sub.html", + {} + ] + ], + "battery-status/battery-allowed-in-same-origin-iframe.https.html": [ + [ + "battery-status/battery-allowed-in-same-origin-iframe.https.html", + {} + ] + ], + "battery-status/battery-default-feature-policy.https.sub.html": [ + [ + "battery-status/battery-default-feature-policy.https.sub.html", + {} + ] + ], + "battery-status/battery-disabled-by-feature-policy.https.sub.html": [ + [ + "battery-status/battery-disabled-by-feature-policy.https.sub.html", + {} + ] + ], + "battery-status/battery-disallowed-in-cross-origin-iframe.https.sub.html": [ [ - "battery-status/battery-iframe.https.html", + "battery-status/battery-disallowed-in-cross-origin-iframe.https.sub.html", {} ] ], @@ -317720,6 +317864,18 @@ {} ] ], + "css/css-grid/parsing/grid-template-columns-computed-nogrid.html": [ + [ + "css/css-grid/parsing/grid-template-columns-computed-nogrid.html", + {} + ] + ], + "css/css-grid/parsing/grid-template-columns-computed.html": [ + [ + "css/css-grid/parsing/grid-template-columns-computed.html", + {} + ] + ], "css/css-grid/parsing/grid-template-columns-invalid.html": [ [ "css/css-grid/parsing/grid-template-columns-invalid.html", @@ -317732,6 +317888,18 @@ {} ] ], + "css/css-grid/parsing/grid-template-rows-computed-nogrid.html": [ + [ + "css/css-grid/parsing/grid-template-rows-computed-nogrid.html", + {} + ] + ], + "css/css-grid/parsing/grid-template-rows-computed.html": [ + [ + "css/css-grid/parsing/grid-template-rows-computed.html", + {} + ] + ], "css/css-grid/parsing/grid-template-rows-invalid.html": [ [ "css/css-grid/parsing/grid-template-rows-invalid.html", @@ -324062,6 +324230,12 @@ {} ] ], + "css/css-text/white-space/pre-with-whitespace-crash.html": [ + [ + "css/css-text/white-space/pre-with-whitespace-crash.html", + {} + ] + ], "css/css-text/white-space/seg-break-transformation-000.html": [ [ "css/css-text/white-space/seg-break-transformation-000.html", @@ -327530,6 +327704,12 @@ {} ] ], + "css/css-values/minmax-time-serialize.html": [ + [ + "css/css-values/minmax-time-serialize.html", + {} + ] + ], "css/css-values/rgba-011.html": [ [ "css/css-values/rgba-011.html", @@ -421897,7 +422077,9 @@ "worklets/animation-worklet-referrer.https.html": [ [ "worklets/animation-worklet-referrer.https.html", - {} + { + "timeout": "long" + } ] ], "worklets/animation-worklet-service-worker-interception.https.html": [ @@ -421929,7 +422111,9 @@ "worklets/audio-worklet-referrer.https.html": [ [ "worklets/audio-worklet-referrer.https.html", - {} + { + "timeout": "long" + } ] ], "worklets/audio-worklet-service-worker-interception.https.html": [ @@ -421967,7 +422151,9 @@ "worklets/layout-worklet-referrer.https.html": [ [ "worklets/layout-worklet-referrer.https.html", - {} + { + "timeout": "long" + } ] ], "worklets/layout-worklet-service-worker-interception.https.html": [ @@ -421997,7 +422183,9 @@ "worklets/paint-worklet-referrer.https.html": [ [ "worklets/paint-worklet-referrer.https.html", - {} + { + "timeout": "long" + } ] ], "worklets/paint-worklet-service-worker-interception.https.html": [ @@ -449641,7 +449829,7 @@ "support" ], "2dcontext/tools/tests2d.yaml": [ - "7feebd0c0e0aa2f41ef63e471abd3ec8bddfa2b8", + "cc78986d452bb4c342984ec1e93c032cb2f784e1", "support" ], "2dcontext/tools/tests2dtext.yaml": [ @@ -451797,7 +451985,7 @@ "testharness" ], "IndexedDB/transaction-relaxed-durability.tentative.any.js": [ - "2ba96ec08edd3e35c85bef4712a94a9a75174624", + "865c28ce163c2dea2f55b25ec1145cb8bcc6bb45", "testharness" ], "IndexedDB/transaction-requestqueue.htm": [ @@ -453589,7 +453777,7 @@ "testharness" ], "animation-worklet/META.yml": [ - "c6918965843779e02522af1abf48acda8d0a128b", + "7a53b4d76d2c41ece6d9acc86482f92a28173e03", "support" ], "animation-worklet/animate-multiple-effects-on-different-targets-via-main-thread.https.html": [ @@ -453621,7 +453809,7 @@ "testharness" ], "animation-worklet/idlharness.any.js": [ - "e821a2fee8a3ace54e8e7092ab17c490a0ded914", + "efd2fdeb98dc5093babd24c785145ace9fdc8757", "testharness" ], "animation-worklet/inactive-timeline.https.html": [ @@ -455889,13 +456077,49 @@ "testharness" ], "battery-status/META.yml": [ - "12a2f12c32e9c58912a209e369af59d6ceee3aa4", + "a069984ddb226b6f07cd5f1408e159634dfec7f4", "support" ], + "battery-status/battery-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ + "47a9cbac0fc4da3ec56e63896d62fa51feb512c6", + "testharness" + ], + "battery-status/battery-allowed-by-feature-policy-attribute.https.sub.html": [ + "96bca54ec8e087ba98961c303e7f96c955963450", + "testharness" + ], + "battery-status/battery-allowed-by-feature-policy.https.sub.html": [ + "5849af5750148f9af220e9781827fd3b10b32de1", + "testharness" + ], + "battery-status/battery-allowed-by-feature-policy.https.sub.html.headers": [ + "03b98040cc4d2e5cd352584b69ffd09ca1cb308c", + "support" + ], + "battery-status/battery-allowed-in-same-origin-iframe.https.html": [ + "c0d684f26d7d272cdff5e9545ffbd4f2c354c4a3", + "testharness" + ], "battery-status/battery-charging-manual.https.html": [ "9ff7421638a85e077532eecbeab417d0fe5b0314", "manual" ], + "battery-status/battery-default-feature-policy.https.sub.html": [ + "5486a453e4e99c26e50b6de99a27a48c78f896de", + "testharness" + ], + "battery-status/battery-disabled-by-feature-policy.https.sub.html": [ + "515c64fe490fbf11fd516f932af429215e655ea5", + "testharness" + ], + "battery-status/battery-disabled-by-feature-policy.https.sub.html.headers": [ + "09a5ae84a123aac7591b20f78ffeea1cbd279a7c", + "support" + ], + "battery-status/battery-disallowed-in-cross-origin-iframe.https.sub.html": [ + "8b48626b5511414e2e8d8ffa93f63779cd37b3cb", + "testharness" + ], "battery-status/battery-discharging-manual.https.html": [ "f321cf75481effd2b427437bb8569d742990b6cb", "manual" @@ -455904,10 +456128,6 @@ "0680b7d93322dbbc55a335304888cf8c17d1d708", "manual" ], - "battery-status/battery-iframe.https.html": [ - "1f95b4ecb32037ef818cc2a01d5f4fecd35cb444", - "testharness" - ], "battery-status/battery-insecure-context.html": [ "9d2c9fd1d41dc299a59c4e374c954302db1ac502", "testharness" @@ -546116,6 +546336,14 @@ "61a98dcb7bb02fab3db18ed337eee5ddb07724fc", "reftest" ], + "css/css-color/opacity-overlapping-letters-ref.html": [ + "bab1f80f685f9e52ea74b8b98f5153dcd9516624", + "support" + ], + "css/css-color/opacity-overlapping-letters.html": [ + "65ab3742de39205341e04b18001deea3f7be192d", + "reftest" + ], "css/css-color/parsing/color-computed.html": [ "973b454aaddd25dadbe5a7309c9d9bb131c1abbf", "testharness" @@ -564768,6 +564996,14 @@ "9c9bd47ec894ccc0e389287120082fb4bf5c9905", "testharness" ], + "css/css-grid/parsing/grid-template-columns-computed-nogrid.html": [ + "b95914fe3e55bebd04a77f1146279089efd5f964", + "testharness" + ], + "css/css-grid/parsing/grid-template-columns-computed.html": [ + "f6d0d9721c9dd8ed1c0441a9dd2e2077b71350d3", + "testharness" + ], "css/css-grid/parsing/grid-template-columns-invalid.html": [ "9d7aac48721a763ab778e22523b16b3f99b3f16a", "testharness" @@ -564776,6 +565012,14 @@ "6bf2e7bce63c88d028f5dea1bf3e7be8cab7775c", "testharness" ], + "css/css-grid/parsing/grid-template-rows-computed-nogrid.html": [ + "03e601acb93191cecaa73b571d5f6cd8e2a6710a", + "testharness" + ], + "css/css-grid/parsing/grid-template-rows-computed.html": [ + "40722623aaa1ee805dc6e282951febb0021e2a8a", + "testharness" + ], "css/css-grid/parsing/grid-template-rows-invalid.html": [ "8a0fe9ddfa23e12985c99c1fe9196eebfc04c8cc", "testharness" @@ -583513,7 +583757,7 @@ "visual" ], "css/css-text/text-align/text-align-last-empty-inline.html": [ - "07dcb3ba896c1f393896a397775cc3ff83fb5ef3", + "fd3d706d1ee4acd3fda03cd46c12f20dfb69b9b9", "testharness" ], "css/css-text/text-align/text-align-start-001.html": [ @@ -584972,6 +585216,10 @@ "c7e1855f9794f42f965e64fc390e1b50b83059fb", "testharness" ], + "css/css-text/white-space/pre-with-whitespace-crash.html": [ + "89e5c3a71feb52183061da6b1e5906cda185ea04", + "testharness" + ], "css/css-text/white-space/pre-wrap-001.html": [ "87ffad96310532a6501e1b75c30f986433cc634e", "reftest" @@ -585009,15 +585257,15 @@ "reftest" ], "css/css-text/white-space/pre-wrap-012.html": [ - "f0eb17c4f975d49047faa0547ecee6ecbb675d4a", + "e844d97860450c1e324745e17d4fb2fd099a8a82", "reftest" ], "css/css-text/white-space/pre-wrap-013.html": [ - "29333f5946e196ed2f0d551b4aceead81f9c2ba1", + "23c4b536cde73a22c32a19637312337c47952c0a", "reftest" ], "css/css-text/white-space/pre-wrap-014.html": [ - "ac867771d58b9b3346a7338cc17e1d764794c424", + "26423c192842516fd491f2ec89e3bf0bad9c7828", "reftest" ], "css/css-text/white-space/pre-wrap-015.html": [ @@ -585028,6 +585276,22 @@ "0590f669e918a8782142784080179b1f37cbaf45", "reftest" ], + "css/css-text/white-space/pre-wrap-017.html": [ + "541e1abe575b8af2c359cdf36fcfa2fb672bfb09", + "reftest" + ], + "css/css-text/white-space/pre-wrap-018.html": [ + "f911b2dcdeac18fb6c5e1f531985a3d144077899", + "reftest" + ], + "css/css-text/white-space/pre-wrap-019.html": [ + "58dae9f50070e7820c09e901f197700e4226e2e5", + "reftest" + ], + "css/css-text/white-space/pre-wrap-020.html": [ + "ec3e8621159a28103527809c582e1ac0ea365bcc", + "reftest" + ], "css/css-text/white-space/pre-wrap-float-001.html": [ "af29b0505e0eefbab09b011798c0dd6136598cca", "reftest" @@ -585152,6 +585416,18 @@ "87d51f6067d5718b03f74df1532058f765ab2b76", "support" ], + "css/css-text/white-space/reference/pre-wrap-018-ref.html": [ + "a87649432fea65476e82dd09d212cbc35417f766", + "support" + ], + "css/css-text/white-space/reference/pre-wrap-019-ref.html": [ + "e3be478a351dc3ea98cb40010c4627d05ebce5fd", + "support" + ], + "css/css-text/white-space/reference/pre-wrap-020-ref.html": [ + "2ef5e7f408e3451f22530d24cfc9e2f188a14213", + "support" + ], "css/css-text/white-space/reference/pre-wrap-float-001-ref.html": [ "e72b3c94ea454eceee9e934ff7929d18da2fc441", "support" @@ -585180,6 +585456,10 @@ "31070ea92815e4d3a3ece48ed69da03de02f671e", "support" ], + "css/css-text/white-space/reference/textarea-pre-wrap-014-ref.html": [ + "99a38bf88b21722910494852fa5b2254c5f1d13f", + "support" + ], "css/css-text/white-space/reference/trailing-ideographic-space-001-ref.html": [ "aa97e2bc8347a12b03eae593860f6403da311cd8", "support" @@ -585289,7 +585569,7 @@ "support" ], "css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html": [ - "0c31cb4299673421f45572c3bec54ce474e048bb", + "93b8b913cc9f4325a676af9c04640979a0eda604", "support" ], "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-001-ref.html": [ @@ -585297,7 +585577,7 @@ "support" ], "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html": [ - "5f94d076e840080f8cc855e013039ef16f1d993c", + "0971868116fcd7c5fed8801de1caf71aa8ad3ec3", "support" ], "css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-003-ref.html": [ @@ -585457,15 +585737,15 @@ "reftest" ], "css/css-text/white-space/textarea-pre-wrap-012.html": [ - "04e07d6bcc815fb640e843a36420bab6b3bef9bc", + "5ca12811280592d9253668787de454408113e7df", "reftest" ], "css/css-text/white-space/textarea-pre-wrap-013.html": [ - "853d2c33d140d3e8b973ba01b40d004049a71b16", + "e3d5c3253d6268864e1e09bbedef70e782a85811", "reftest" ], "css/css-text/white-space/textarea-pre-wrap-014.html": [ - "b6d62ce2bff35103f46a81918e622a938d0c9491", + "f2812af2fbf4cee10b7fd8f292d5d5219fe859f4", "reftest" ], "css/css-text/white-space/trailing-ideographic-space-001.html": [ @@ -585597,27 +585877,27 @@ "reftest" ], "css/css-text/white-space/white-space-intrinsic-size-004.html": [ - "cc2d73992d54b9340b4eb7aad4ec7d9b29793f08", + "a5be242e23a7d00785f520aa52adf794a19aaed3", "reftest" ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html": [ - "ca6f65e613d035cb3f79abaa0e527643126cadce", + "82fbfbc976cd02629d1180e4470170a533aa27e9", "reftest" ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html": [ - "76ca5ef77dbb5ab32c9da92c7a2c4f181a1f98ff", + "f7e0f21f45761400e5f7b317de521added098b73", "reftest" ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html": [ - "15e47a7adba3d4fc5534eab8811e3c91518aa771", + "def9bcaee32b6c9327e8785df3901549f17c8759", "reftest" ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html": [ - "aa048b512e940511030631f2c379aaa995e6b868", + "d271057c43cc7b232c00fa0f3426e2ef5a7666f3", "reftest" ], "css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html": [ - "62ecb84757e61b6866213b71503c4dd6ae204410", + "e10b4e19033ea81edd8aefb8131db8a8b49828d3", "reftest" ], "css/css-text/white-space/white-space-wrap-after-nowrap-001.html": [ @@ -586109,7 +586389,7 @@ "testharness" ], "css/css-transforms/animation/scale-interpolation.html": [ - "146575c902c10b8f34a6e9a12ee66abae1904223", + "c6fec26461155ec15d9eb0ab469205c4868db161", "testharness" ], "css/css-transforms/animation/transform-interpolation-001.html": [ @@ -586141,7 +586421,7 @@ "testharness" ], "css/css-transforms/animation/translate-interpolation.html": [ - "aed6c41cf641ffc3b5eb7ef22b4b7353d98004fb", + "c73f68a130e86b39b4832111bbfb05c633e09429", "testharness" ], "css/css-transforms/backface-visibility-hidden-001.html": [ @@ -588136,10 +588416,14 @@ "6dfeba6e167649e6d4f3b84fccd1e9fedfe0c9d1", "support" ], - "css/css-transforms/transform-box/fill-box-mutation.html": [ + "css/css-transforms/transform-box/fill-box-mutation-001.html": [ "1f0dfd01bb9ab6acf183721f23f8590293e9e32f", "reftest" ], + "css/css-transforms/transform-box/fill-box-mutation-002.html": [ + "676d5cdd03b25ce2c5d25df03237819196fa1a66", + "reftest" + ], "css/css-transforms/transform-box/fill-box.html": [ "7e9b133aead426b36702e5377c3cd1347e36ff5f", "reftest" @@ -590589,7 +590873,7 @@ "testharness" ], "css/css-transitions/parsing/transition-timing-function-computed.html": [ - "fa03b2295b9c2f92ab4e520cc75153d9eaa6e672", + "e57856bab4f16f11f288197bb0244aaffa57be7e", "testharness" ], "css/css-transitions/parsing/transition-timing-function-invalid.html": [ @@ -595601,7 +595885,7 @@ "testharness" ], "css/css-values/minmax-angle-serialize.html": [ - "3f424589ba6f9806fefc444320301da5a12303ac", + "07b7d3c2b232612334555603325560259cb41203", "testharness" ], "css/css-values/minmax-integer-computed.html": [ @@ -595648,6 +595932,10 @@ "bebe674cd79565a364253f3290dd60b7073e2af1", "testharness" ], + "css/css-values/minmax-time-serialize.html": [ + "d7dd4edb5880e9162a702e3c1ce0a5540dc42679", + "testharness" + ], "css/css-values/q-unit-case-insensitivity-001.html": [ "b4a08aa117952c6f92e2aec6f57843b46a460104", "reftest" @@ -618601,7 +618889,7 @@ "support" ], "docs/running-tests/from-local-system.md": [ - "d1a5177894a826d0c8857a9b818d4a87ea022d71", + "2d44ecb7d2f771c5e2ceb06b5847db3ac82a4f1c", "support" ], "docs/running-tests/from-web.md": [ @@ -618616,6 +618904,10 @@ "fb8b7be2e5275dc7196c559573a73d3685e1f2a0", "support" ], + "docs/running-tests/webkitgtk_minibrowser.md": [ + "b12859bcca9e6e90998735c97932c42d60aecba4", + "support" + ], "docs/test-suite-design.md": [ "6a104e2f1d42fda1111124022dd7d94aaea3a598", "support" @@ -624628,6 +624920,10 @@ "79f8eefb9d619c3f54524fd53649cf03d66713b3", "support" ], + "feature-policy/resources/feature-policy-battery.html": [ + "dff4b3290d66c4c804267ecfe2fb9717a6449cff", + "support" + ], "feature-policy/resources/feature-policy-generic-sensor.html": [ "59652e2e7ae0056a6cc4be7f004b6d0151fb9d44", "support" @@ -629769,7 +630065,7 @@ "testharness" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [ - "50fe71a2c6fba3c1ec6e42c94dd05899eb24245c", + "72aec0b7542b685945982186f1e2570e80ac6087", "testharness" ], "html/browsers/origin/cross-origin-objects/frame-with-then.html": [ @@ -641149,7 +641445,7 @@ "reftest" ], "html/semantics/embedded-content/the-img-element/img.complete.html": [ - "dcacf43db2ddf8c2a179d67326a18f78b03ff0a9", + "d8d5a84eb7998044fb24847cc0ac5a1185b82bb6", "testharness" ], "html/semantics/embedded-content/the-img-element/invalid-src.html": [ @@ -648788,10 +649084,6 @@ "ce335161a2570fa9f2ab8051c75c0ab71aa2df76", "support" ], - "interfaces/animation-worklet.idl": [ - "02deca73a3a3378c9906776d547a37b7c31e0fb5", - "support" - ], "interfaces/appmanifest.idl": [ "4a6425829f23da3cd1f78f74ff52a18635f7af7c", "support" @@ -648840,6 +649132,10 @@ "167bc96eb53c5d1e67f34b1cc39622a30d30a7f8", "support" ], + "interfaces/css-animation-worklet.idl": [ + "4aca84e5a024efdc2d3e674540bf2091758551c9", + "support" + ], "interfaces/css-animations.idl": [ "f87015f6a87fccc0accab30920cd8371eee99e63", "support" @@ -648909,7 +649205,7 @@ "support" ], "interfaces/dom.idl": [ - "03a0201b16fed569429c6cfc709063ed31681422", + "d1557a676ef0f7c458c8654c59ec713a42833d0a", "support" ], "interfaces/element-timing.idl": [ @@ -648985,7 +649281,7 @@ "support" ], "interfaces/html.idl": [ - "d856cd578aa0a0d15f09d0c95bebf48b0f95c0d6", + "8347c5d4cdc9b00550efcec7f2a77993f2b7ccf6", "support" ], "interfaces/image-capture.idl": [ @@ -649169,7 +649465,7 @@ "support" ], "interfaces/scroll-animations.idl": [ - "f2560d9ffc88eaadf961b055480ed605610f72bf", + "8fd67a7af7bbdaa8129fb03cf395eb6e411dbcd4", "support" ], "interfaces/secure-contexts.idl": [ @@ -649249,7 +649545,7 @@ "support" ], "interfaces/web-nfc.idl": [ - "b08bc7d4069747ed785dd62db23bb94fc269153b", + "c3e53350901c7b1e1c608ff4ee07be475c97cd9a", "support" ], "interfaces/web-share.idl": [ @@ -649309,7 +649605,7 @@ "support" ], "interfaces/webxr.idl": [ - "b03aa556bb815127203e79c7b4bbc864d539314b", + "012b67cf246dc4c7641e819bbc8e4b39d190d078", "support" ], "interfaces/worklets.idl": [ @@ -649317,7 +649613,7 @@ "support" ], "interfaces/xhr.idl": [ - "27660bfd573b6dbd38f7c52b514fab9f4bd52996", + "de478734ca96985e9868a1e64fbf617faa9c11e5", "support" ], "interfaces/xslt.tentative.idl": [ @@ -662637,15 +662933,15 @@ "testharness" ], "payment-request/PaymentValidationErrors/retry-shows-error-member-manual.https.html": [ - "b3a539ef8f4b8aa9dd9a3ed0cb6b527f184cb04f", + "9d25e9e1524663fb6520d8c6bf41aca4e1b14e4e", "manual" ], "payment-request/PaymentValidationErrors/retry-shows-payer-member-manual.https.html": [ - "8dbc760fd07fe990b8bbded56ffca59091492fd8", + "ad5ad72fbb64aa85b56062fedd9a7f596d0bdb0f", "manual" ], "payment-request/PaymentValidationErrors/retry-shows-shippingAddress-member-manual.https.html": [ - "c3e2ba713223c94689d4549aa90008fe91faeb7c", + "837ab79cbefa9eebd358f72a227014d5c71af72f", "manual" ], "payment-request/algorithms-manual.https.html": [ @@ -662829,7 +663125,7 @@ "manual" ], "payment-request/payment-response/onpayerdetailchange-attribute-manual.https.html": [ - "f3f3f76357c1467f4032c5749849bd0063b41010", + "5731952c0ebc0e8085cb340b5b7cfc478849fc99", "manual" ], "payment-request/payment-response/onpayerdetailchange-attribute.https.html": [ @@ -662849,11 +663145,11 @@ "manual" ], "payment-request/payment-response/payerdetailschange-updateWith-immediate-manual.https.html": [ - "912ceaa6086fd616908115d4f17117e76867d830", + "5747a2ac0cbd8745abff93c8afc789128a3f7a26", "manual" ], "payment-request/payment-response/payerdetailschange-updateWith-manual.https.html": [ - "30e27088e7de1384489fcf9aa72391d353e34b36", + "2e6a31a19f5932077dac5d6996a5adb4371dd5e2", "manual" ], "payment-request/payment-response/rejects_if_not_active-manual.https.html": [ @@ -686417,7 +686713,7 @@ "support" ], "tools/ci/manifest_build.py": [ - "de17089214ed041ed98a07583ea8c4628b147e5a", + "a563c3b88314beafb2ed8b5fb18210bcfe147a20", "support" ], "tools/ci/run_tc.py": [ @@ -686697,7 +686993,7 @@ "support" ], "tools/manifest/download.py": [ - "8f3e9d5fd653cba24aeeeda5ba4d5661f81722fc", + "3736d54f15dc5e9c66c560730acd08f43e53db30", "support" ], "tools/manifest/item.py": [ @@ -686741,7 +687037,7 @@ "support" ], "tools/manifest/update.py": [ - "166a7c9caddbab5dfa40712be8840de7b3efb65f", + "bfbaaf897126d8eeca69dcef94bb31308897fde2", "support" ], "tools/manifest/utils.py": [ @@ -691213,7 +691509,7 @@ "support" ], "tools/wpt/browser.py": [ - "ca86c55d45f065b7a8ac0c047dbb22f2edc9414f", + "c04162fe2a15ecb0cbebf1e0c57672b24f2efc56", "support" ], "tools/wpt/commands.json": [ @@ -691245,7 +691541,7 @@ "support" ], "tools/wpt/run.py": [ - "bea36c7c24a80868980861466d8b962624446434", + "077d4a7eb87f850017298a0bb971ed74ff7ff694", "support" ], "tools/wpt/testfiles.py": [ @@ -691257,7 +691553,7 @@ "support" ], "tools/wpt/tests/test_browser.py": [ - "a2e518a9d07dcb69ea61d7885e0beae9e039c91d", + "f691c380b7abdb97fb616217cb710eac2480e3e9", "support" ], "tools/wpt/tests/test_run.py": [ @@ -691341,7 +691637,7 @@ "support" ], "tools/wptrunner/requirements.txt": [ - "3584c93a199716d0b9809dc4180195647887d1a0", + "9eeb836230c39def1291c210a9690cbb5b24c117", "support" ], "tools/wptrunner/requirements_android_webview.txt": [ @@ -691525,7 +691821,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/__init__.py": [ - "75ec775658ce5d3b15e919bcd166a4af08ccb868", + "957d2a689acda4801cddc351e1c2cd4c06a8d7e3", "support" ], "tools/wptrunner/wptrunner/browsers/android_webview.py": [ @@ -691608,6 +691904,10 @@ "bd444eef1dfcf61247c3322e79cc0b085ac67750", "support" ], + "tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py": [ + "65f78125ad7a89d43c08b6986bf41145cc71d04c", + "support" + ], "tools/wptrunner/wptrunner/config.py": [ "d2a61a87594bc8f7753530ab3bd02795b68e3c37", "support" @@ -691889,7 +692189,7 @@ "support" ], "tools/wptrunner/wptrunner/wptlogging.py": [ - "6751f8907f411de8ee2b8999b86a1ab1cd9ee57b", + "69cee744879eb6780cb99ec93123922e166d9e16", "support" ], "tools/wptrunner/wptrunner/wptmanifest/__init__.py": [ @@ -692625,7 +692925,7 @@ "support" ], "trusted-types/trusted-types-reporting.tentative.https.html": [ - "16e6d2a7d8d3e01c1cc469ea67b9e0361658495d", + "11ef305064d2af10ffc07ca09e51dcb1a3661e76", "testharness" ], "trusted-types/trusted-types-reporting.tentative.https.html.headers": [ @@ -692641,19 +692941,19 @@ "support" ], "uievents/click/auxclick_event.html": [ - "9f4ffed96e6cb186f8441e9681c281d087ff8faf", + "8bb2e137f5bce9333e4687b7603432195107745b", "testharness" ], "uievents/click/click_event_target_child_parent.html": [ - "1e07e4340392ef0830869876c06e5ee0c1238c91", + "a09e5532affd93cafca51391591b7ff882636310", "testharness" ], "uievents/click/click_event_target_siblings.html": [ - "0306b6f05f0d4c3c6ef58ab638c186184bb6bf5a", + "24d64dc9ac344f9c856241221d7323b162434932", "testharness" ], "uievents/click/mouse-dblclick-event.html": [ - "5bf0bbc07e00d3d01bfcc1379b8ac0c2f78fb7b7", + "31a600b3cb715e408cd4aa8920fb54fd77064e57", "testharness" ], "uievents/constructors/README.md": [ @@ -692745,7 +693045,7 @@ "manual" ], "uievents/mouse/mouse_buttons_back_forward.html": [ - "787abac44472960844b5b3eda3955134f17240a8", + "2323bc10269a7238fbe655aa1341d9dde210e3a6", "testharness" ], "uievents/mouse/mouseevent_move_button-manual.html": [ @@ -705589,7 +705889,7 @@ "testharness" ], "worklets/animation-worklet-referrer.https.html": [ - "494e06a8472795016e2ee346397d7c227477809c", + "49933dea47d554b0d9dbdeb8305c522c076c9c81", "testharness" ], "worklets/animation-worklet-service-worker-interception.https.html": [ @@ -705609,7 +705909,7 @@ "testharness" ], "worklets/audio-worklet-referrer.https.html": [ - "f258cd5a452d57002d041211cb44ee6f27f0b3aa", + "61cb63d75ca647a7385200573c3a6b5aca27ae34", "testharness" ], "worklets/audio-worklet-service-worker-interception.https.html": [ @@ -705633,7 +705933,7 @@ "testharness" ], "worklets/layout-worklet-referrer.https.html": [ - "cb383a935a2a6d154d804595e78275e289076a4c", + "dc7b84b350c5114624caf7afd87924d5c673763a", "testharness" ], "worklets/layout-worklet-service-worker-interception.https.html": [ @@ -705653,7 +705953,7 @@ "testharness" ], "worklets/paint-worklet-referrer.https.html": [ - "a4b5a6f498c2755d498fd22afc1ab7398fab56ec", + "8f3d82a1ddc62a482caf70dd6591cb7244bd7fe5", "testharness" ], "worklets/paint-worklet-service-worker-interception.https.html": [ @@ -705744,6 +706044,14 @@ "cb762eff806849df46dc758ef7b98b63f27f54c9", "support" ], + "worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js": [ + "33af2258ff3504db7dc1f7c7564fd2306779c206", + "support" + ], + "worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js.headers": [ + "cb762eff806849df46dc758ef7b98b63f27f54c9", + "support" + ], "worklets/resources/import-syntax-error-worklet-script.js": [ "1539ad004ed41f521f42b7e564fdf1cbfbdc2de3", "support" @@ -705757,11 +706065,11 @@ "support" ], "worklets/resources/referrer-tests.js": [ - "01b8e2ab57acb4c41d898f1541e2011c4946bd0a", + "b3c4a048f5a12350ce79ba93049d81858f54201f", "support" ], "worklets/resources/referrer-window.html": [ - "4817f0452a2999ae2774b2849130cb11e670778d", + "934e3dc41b1cda364a00fe4fae0e4bc114e9c4b6", "support" ], "worklets/resources/service-worker-interception-tests.js": [ diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-017.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-017.html.ini new file mode 100644 index 00000000000..750e1959546 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-017.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-017.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-018.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-018.html.ini new file mode 100644 index 00000000000..43602b2e21b --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-018.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-018.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-019.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-019.html.ini new file mode 100644 index 00000000000..793142eff28 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-019.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-019.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-020.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-020.html.ini new file mode 100644 index 00000000000..2954a812945 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-020.html.ini @@ -0,0 +1,2 @@ +[pre-wrap-020.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/white-space-intrinsic-size-004.html.ini b/tests/wpt/metadata/css/css-text/white-space/white-space-intrinsic-size-004.html.ini deleted file mode 100644 index ec010b1bfd9..00000000000 --- a/tests/wpt/metadata/css/css-text/white-space/white-space-intrinsic-size-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[white-space-intrinsic-size-004.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini index 03f2f3fe9d1..c511d92d674 100644 --- a/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini +++ b/tests/wpt/metadata/css/css-transforms/animation/perspective-interpolation.html.ini @@ -1,5 +1,4 @@ [perspective-interpolation.html] - expected: CRASH [ perspective interpolation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-box/fill-box-mutation-001.html.ini b/tests/wpt/metadata/css/css-transforms/transform-box/fill-box-mutation-001.html.ini new file mode 100644 index 00000000000..289789d004a --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-box/fill-box-mutation-001.html.ini @@ -0,0 +1,2 @@ +[fill-box-mutation-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transforms/transform-box/fill-box-mutation-002.html.ini b/tests/wpt/metadata/css/css-transforms/transform-box/fill-box-mutation-002.html.ini new file mode 100644 index 00000000000..31fd46eca02 --- /dev/null +++ b/tests/wpt/metadata/css/css-transforms/transform-box/fill-box-mutation-002.html.ini @@ -0,0 +1,2 @@ +[fill-box-mutation-002.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-values/minmax-angle-serialize.html.ini b/tests/wpt/metadata/css/css-values/minmax-angle-serialize.html.ini index d08c22371d7..087d8045750 100644 --- a/tests/wpt/metadata/css/css-values/minmax-angle-serialize.html.ini +++ b/tests/wpt/metadata/css/css-values/minmax-angle-serialize.html.ini @@ -23,3 +23,45 @@ [e.style['transform'\] = "rotate(min(1turn))" should set the property value] expected: FAIL + [e.style['transform'\] = "rotate(min(1deg, 2deg, 3deg))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(calc(1rad + min(1deg)))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(max(3deg, 2deg, 1deg))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(calc(1rad + max(1deg)))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(min(3deg, 2deg, 1deg))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(max(0.25turn, 1.57rad, 90deg))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(calc(min(1deg) + 1rad))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(max(90deg, 1.57rad, 0.25turn))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(min(90deg, 1.57rad, 0.25turn))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(min(0.25turn, 1.57rad, 90deg))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(calc(max(1deg) + max(2deg)))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(calc(max(1deg) + 1rad))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(max(1deg, 2deg, 3deg))" should set the property value] + expected: FAIL + + [e.style['transform'\] = "rotate(calc(min(1deg) + min(2deg)))" should set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-values/minmax-time-serialize.html.ini b/tests/wpt/metadata/css/css-values/minmax-time-serialize.html.ini new file mode 100644 index 00000000000..6be83f82dc2 --- /dev/null +++ b/tests/wpt/metadata/css/css-values/minmax-time-serialize.html.ini @@ -0,0 +1,61 @@ +[minmax-time-serialize.html] + [e.style['transition-delay'\] = "calc(min(1s) + min(2s))" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "calc(max(1s) + max(2s))" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "calc(max(2s) + max(1s))" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "min(1ms)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "calc(1s + max(2s))" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "max(1ms)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "min(1s, 1000ms)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "calc(min(2s) + min(1s))" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "calc(max(2s) + 1s)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "max(1ms, 2ms, 3ms)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "min(1ms, 2ms, 3ms)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "min(1000ms, 1s)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "min(1s)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "calc(1s + min(2s))" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "max(1s)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "calc(min(2s) + 1s)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "max(1s, 1000ms)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "max(1000ms, 1s)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "max(3ms, 2ms, 1ms)" should set the property value] + expected: FAIL + + [e.style['transition-delay'\] = "min(3ms, 2ms, 1ms)" should set the property value] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini deleted file mode 100644 index e6e1f29e274..00000000000 --- a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[matchMedia-display-none-iframe.html] - expected: ERROR diff --git a/tests/wpt/metadata/dom/idlharness.window.js.ini b/tests/wpt/metadata/dom/idlharness.window.js.ini index 2b018c8e4bd..b8f32512457 100644 --- a/tests/wpt/metadata/dom/idlharness.window.js.ini +++ b/tests/wpt/metadata/dom/idlharness.window.js.ini @@ -829,3 +829,6 @@ [XPathEvaluator interface: existence and properties of interface prototype object] expected: FAIL + [ShadowRoot interface: attribute onslotchange] + expected: FAIL + diff --git a/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini b/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini new file mode 100644 index 00000000000..c3916f8555d --- /dev/null +++ b/tests/wpt/metadata/dom/nodes/Document-contentType/contentType/contenttype_txt.html.ini @@ -0,0 +1,2 @@ +[contenttype_txt.html] + expected: CRASH 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 bb3703d3f92..ef1273a21ab 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -315,27 +315,15 @@ [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] expected: FAIL - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] - expected: FAIL - [<iframe>: combined response Content-Type: */* text/html] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" text/plain] - expected: FAIL - - [<iframe>: combined response Content-Type: text/html;" text/plain] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html */*;charset=gbk] - expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" \\" text/plain] + [<iframe>: combined response Content-Type: text/html */*] expected: FAIL - [<iframe>: combined response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini index 2003288747e..d2df9b78483 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -56,9 +56,3 @@ [separate text/javascript x/x] expected: FAIL - [separate text/javascript;charset=windows-1252 error text/javascript] - expected: FAIL - - [separate text/javascript ] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index a639f15230c..ef3edb78985 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,6 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [Content-Type-Options%3A%20nosniff] + [X-Content-Type-Options%3A%20%22nosniFF%22] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini index dc2e45516de..75d75b4cda2 100644 --- 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_2.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_5.html] +[traverse_the_history_2.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/idlharness.https.html.ini b/tests/wpt/metadata/html/dom/idlharness.https.html.ini index 259102e78f5..c04414ea1fb 100644 --- a/tests/wpt/metadata/html/dom/idlharness.https.html.ini +++ b/tests/wpt/metadata/html/dom/idlharness.https.html.ini @@ -1454,6 +1454,9 @@ [SVGElement interface: attribute autofocus] expected: FAIL + [SVGElement interface: attribute onslotchange] + expected: FAIL + [idlharness.https.html?include=(Document|Window)] [Document interface: documentWithHandlers must inherit property "queryCommandEnabled(DOMString)" with the proper type] @@ -1849,6 +1852,24 @@ [Document interface: calling queryCommandState(DOMString) on documentWithHandlers with too few arguments must throw TypeError] expected: FAIL + [Document interface: new Document() must inherit property "onslotchange" with the proper type] + expected: FAIL + + [Document interface: documentWithHandlers must inherit property "onslotchange" with the proper type] + expected: FAIL + + [Window interface: window must inherit property "onslotchange" with the proper type] + expected: FAIL + + [Document interface: attribute onslotchange] + expected: FAIL + + [Window interface: attribute onslotchange] + expected: FAIL + + [Document interface: iframe.contentDocument must inherit property "onslotchange" with the proper type] + expected: FAIL + [idlharness.https.html?include=HTML.*] [HTMLInputElement interface: calling setCustomValidity(DOMString) on createInput("hidden") with too few arguments must throw TypeError] @@ -5097,3 +5118,9 @@ [HTMLElement interface: attribute autofocus] expected: FAIL + [HTMLElement interface: attribute onslotchange] + expected: FAIL + + [HTMLElement interface: document.createElement("noscript") must inherit property "onslotchange" with the proper type] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini new file mode 100644 index 00000000000..9e522297c94 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/interactive-elements/the-details-element/toggleEvent.html.ini @@ -0,0 +1,7 @@ +[toggleEvent.html] + [Calling open twice on 'details' fires only one toggle event] + expected: FAIL + + [Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-all-global-events.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-all-global-events.html.ini index e70aba523da..2056f9c273e 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-all-global-events.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-all-global-events.html.ini @@ -387,3 +387,12 @@ [onformdata: the default value must be null] expected: FAIL + [onslotchange: must be on the appropriate locations for GlobalEventHandlers] + expected: FAIL + + [onslotchange: the content attribute must be compiled into a function as the corresponding property] + expected: FAIL + + [onslotchange: the default value must be null] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-body-window.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-body-window.html.ini index e28752745ba..9ccd888978d 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-body-window.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-body-window.html.ini @@ -78,3 +78,12 @@ [not shadowed formdata (document.createElement("body"))] expected: FAIL + [not shadowed slotchange (window)] + expected: FAIL + + [not shadowed slotchange (document.createElement("body"))] + expected: FAIL + + [not shadowed slotchange (document.body)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-frameset-window.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-frameset-window.html.ini index ead6519f855..66a27dd72d8 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-frameset-window.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-frameset-window.html.ini @@ -71,3 +71,12 @@ [not shadowed formdata (window)] expected: FAIL + [not shadowed slotchange (window)] + expected: FAIL + + [not shadowed slotchange (document.createElement("frameset"))] + expected: FAIL + + [not shadowed slotchange (document.body)] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-windowless-body.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-windowless-body.html.ini index 2a3847f71c0..9bcbcd5239f 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-windowless-body.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/event-handler-attributes-windowless-body.html.ini @@ -32,3 +32,9 @@ [formdata is unaffected on a windowless body] expected: FAIL + [slotchange is unaffected on a windowless frameset] + expected: FAIL + + [slotchange is unaffected on a windowless body] + expected: FAIL + diff --git a/tests/wpt/metadata/webxr/idlharness.https.window.js.ini b/tests/wpt/metadata/webxr/idlharness.https.window.js.ini index c85b29a6c1d..7504e6eff37 100644 --- a/tests/wpt/metadata/webxr/idlharness.https.window.js.ini +++ b/tests/wpt/metadata/webxr/idlharness.https.window.js.ini @@ -221,3 +221,12 @@ [XRSession interface: operation end()] expected: FAIL + [XR interface: operation isSessionSupported(XRSessionMode)] + expected: FAIL + + [XR interface: calling isSessionSupported(XRSessionMode) on navigator.xr with too few arguments must throw TypeError] + expected: FAIL + + [XR interface: navigator.xr must inherit property "isSessionSupported(XRSessionMode)" with the proper type] + expected: FAIL + diff --git a/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini new file mode 100644 index 00000000000..80f9a4f15b8 --- /dev/null +++ b/tests/wpt/metadata/workers/constructors/Worker/Worker-constructor.html.ini @@ -0,0 +1,2 @@ +[Worker-constructor.html] + expected: ERROR diff --git a/tests/wpt/web-platform-tests/2dcontext/tools/tests2d.yaml b/tests/wpt/web-platform-tests/2dcontext/tools/tests2d.yaml index 7feebd0c0e0..cc78986d452 100644 --- a/tests/wpt/web-platform-tests/2dcontext/tools/tests2d.yaml +++ b/tests/wpt/web-platform-tests/2dcontext/tools/tests2d.yaml @@ -2835,7 +2835,6 @@ - name: 2d.pattern.image.incomplete.nosrc testing: - 2d.pattern.incomplete.image - mozilla: { throws } code: | var img = new Image(); @assert ctx.createPattern(img, 'repeat') === null; diff --git a/tests/wpt/web-platform-tests/IndexedDB/transaction-relaxed-durability.tentative.any.js b/tests/wpt/web-platform-tests/IndexedDB/transaction-relaxed-durability.tentative.any.js index 2ba96ec08ed..865c28ce163 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/transaction-relaxed-durability.tentative.any.js +++ b/tests/wpt/web-platform-tests/IndexedDB/transaction-relaxed-durability.tentative.any.js @@ -3,18 +3,18 @@ /** * This file contains the webplatform smoke tests for the optional - * relaxedDurability parameter of the IndexedDB transaction API. + * durability parameter of the IndexedDB transaction API. * * @author enne@chromium.org */ // Smoke test optional parameter on IndexedDB.transaction. let cases = [ - undefined, - {}, - {durability: "default"}, - {durability: "relaxed"}, - {durability: "strict"}, + { options: undefined, expected: 'default' }, + { options: {}, expected: 'default' }, + { options: { durability: 'default'}, expected: 'default' }, + { options: { durability: 'relaxed'}, expected: 'relaxed' }, + { options: { durability: 'strict'}, expected: 'strict' }, ]; for (let i = 0; i < cases.length; ++i) { @@ -22,11 +22,13 @@ for (let i = 0; i < cases.length; ++i) { const db = await createDatabase(testCase, db => { createBooksStore(testCase, db); }); - const txn = db.transaction(['books'], 'readwrite', cases[i]); + const txn = db.transaction(['books'], 'readwrite', cases[i].options); const objectStore = txn.objectStore('books'); objectStore.put({isbn: 'one', title: 'title1'}); await promiseForTransaction(testCase, txn); + assert_equals(txn.durability, cases[i].expected); + const txn2 = db.transaction(['books'], 'readonly'); const objectStore2 = txn2.objectStore('books'); const getTitle1 = objectStore2.get('one'); @@ -38,3 +40,14 @@ for (let i = 0; i < cases.length; ++i) { db.close(); }, 'Committed data can be read back out: case ' + i); } + +promise_test(async testCase => { + const db = await createDatabase(testCase, db => { + createBooksStore(testCase, db); + }); + + assert_throws(new TypeError(), function() { + db.transaction(['books'], 'readwrite', { durability: 'invalid' }); + }); + db.close(); +}, 'Invalid durability option throws a TypeError'); diff --git a/tests/wpt/web-platform-tests/animation-worklet/META.yml b/tests/wpt/web-platform-tests/animation-worklet/META.yml index c6918965843..7a53b4d76d2 100644 --- a/tests/wpt/web-platform-tests/animation-worklet/META.yml +++ b/tests/wpt/web-platform-tests/animation-worklet/META.yml @@ -1,4 +1,4 @@ -spec: https://wicg.github.io/animation-worklet/ +spec: https://drafts.css-houdini.org/css-animationworklet/ suggested_reviewers: - flackr - majido diff --git a/tests/wpt/web-platform-tests/animation-worklet/idlharness.any.js b/tests/wpt/web-platform-tests/animation-worklet/idlharness.any.js index e821a2fee8a..efd2fdeb98d 100644 --- a/tests/wpt/web-platform-tests/animation-worklet/idlharness.any.js +++ b/tests/wpt/web-platform-tests/animation-worklet/idlharness.any.js @@ -6,7 +6,7 @@ // https://wicg.github.io/animation-worklet/ idl_test( - ['animation-worklet'], + ['css-animation-worklet'], ['worklets', 'web-animations', 'html', 'cssom', 'dom'], idl_array => { idl_array.add_objects({ diff --git a/tests/wpt/web-platform-tests/battery-status/META.yml b/tests/wpt/web-platform-tests/battery-status/META.yml index 12a2f12c32e..a069984ddb2 100644 --- a/tests/wpt/web-platform-tests/battery-status/META.yml +++ b/tests/wpt/web-platform-tests/battery-status/META.yml @@ -2,3 +2,4 @@ spec: https://w3c.github.io/battery/ suggested_reviewers: - anssiko - zqzhang + - Honry diff --git a/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html b/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html new file mode 100644 index 00000000000..47a9cbac0fc --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<body> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/feature-policy/resources/featurepolicy.js></script> +<script> +'use strict'; + +const relative_path = '/feature-policy/resources/feature-policy-battery.html'; +const base_src = '/feature-policy/resources/redirect-on-load.html#'; +const same_origin_src = base_src + relative_path; +const cross_origin_src = base_src + 'https://{{domains[www]}}:{{ports[https][0]}}' + + relative_path; +const header = 'Feature-Policy allow="battery"'; + +async_test(t => { + test_feature_availability( + 'navigator.getBattery()', t, same_origin_src, + expect_feature_available_default, 'battery'); +}, `${header} allows same-origin relocation.`); + +async_test(t => { + test_feature_availability( + 'navigator.getBattery()', t, cross_origin_src, + expect_feature_unavailable_default, 'battery'); +}, `${header} disallows cross-origin relocation.`); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy-attribute.https.sub.html b/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy-attribute.https.sub.html new file mode 100644 index 00000000000..96bca54ec8e --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy-attribute.https.sub.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<body> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/feature-policy/resources/featurepolicy.js></script> +<script> +'use strict'; + +const same_origin_src = '/feature-policy/resources/feature-policy-battery.html'; +const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; +const feature_name = 'Feature policy "battery"'; +const header = 'allow="battery" attribute'; + +async_test(t => { + test_feature_availability( + 'navigator.getBattery()', t, same_origin_src, + expect_feature_available_default, 'battery'); +}, `${feature_name} can be enabled in same-origin iframe using ${header}`); + +async_test(t => { + test_feature_availability( + 'navigator.getBattery()', t, cross_origin_src, + expect_feature_available_default, 'battery'); +}, `${feature_name} can be enabled in cross-origin iframe using ${header}`); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy.https.sub.html new file mode 100644 index 00000000000..5849af57501 --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy.https.sub.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<body> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/feature-policy/resources/featurepolicy.js></script> +<script> +'use strict'; + +const same_origin_src = '/feature-policy/resources/feature-policy-battery.html'; +const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; +const header = 'Feature-Policy header {"battery" : ["*"]}'; + +promise_test( + async () => await navigator.getBattery(), + `${header} allows the top-level document.`); + +async_test(t => { + test_feature_availability('navigator.getBattery()', t, same_origin_src, + expect_feature_available_default); +}, `${header} allows same-origin iframes.`); + +async_test(t => { + test_feature_availability('navigator.getBattery()', t, cross_origin_src, + expect_feature_available_default); +}, `${header} allows cross-origin iframes.`); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy.https.sub.html.headers new file mode 100644 index 00000000000..03b98040cc4 --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-allowed-by-feature-policy.https.sub.html.headers @@ -0,0 +1 @@ +Feature-Policy: battery * diff --git a/tests/wpt/web-platform-tests/battery-status/battery-iframe.https.html b/tests/wpt/web-platform-tests/battery-status/battery-allowed-in-same-origin-iframe.https.html index 1f95b4ecb32..c0d684f26d7 100644 --- a/tests/wpt/web-platform-tests/battery-status/battery-iframe.https.html +++ b/tests/wpt/web-platform-tests/battery-status/battery-allowed-in-same-origin-iframe.https.html @@ -1,6 +1,6 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>Battery Test: navigator.getBattery() is not allowed in non top-level browsing context</title> +<title>Battery Test: navigator.getBattery() is allowed in same origin iframe</title> <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="help" href="https://www.w3.org/TR/battery-status/"> <script src="/resources/testharness.js"></script> @@ -16,12 +16,11 @@ function load_iframe(iframe, src) { }); } -promise_test(t => { - var iframe = document.getElementById('blank'); - var src = 'support-iframe.html'; - return load_iframe(iframe, src) - .then(iframe => promise_rejects(t, 'SecurityError', - iframe.contentWindow.navigator.getBattery())); -}, "throw a 'SecurityError' when invoking navigator.getBattery() within iframe"); +promise_test(async t => { + let iframe = document.getElementById('blank'); + const src = 'support-iframe.html'; + iframe = await load_iframe(iframe, src); + await iframe.contentWindow.navigator.getBattery(); +}, "navigator.getBattery() is allowed in same origin iframe"); </script> diff --git a/tests/wpt/web-platform-tests/battery-status/battery-default-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/battery-status/battery-default-feature-policy.https.sub.html new file mode 100644 index 00000000000..5486a453e4e --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-default-feature-policy.https.sub.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<body> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/feature-policy/resources/featurepolicy.js></script> +<script> +'use strict'; + +const same_origin_src = '/feature-policy/resources/feature-policy-battery.html'; +const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; +const header = 'Default "battery" feature policy ["self"]'; + +promise_test( + async () => await navigator.getBattery(), + `${header} allows the top-level document.`); + +async_test(t => { + test_feature_availability('navigator.getBattery()', t, same_origin_src, + expect_feature_available_default); +}, `${header} allows same-origin iframes.`); + +async_test(t => { + test_feature_availability('navigator.getBattery()', t, cross_origin_src, + expect_feature_unavailable_default); +}, `${header} disallows cross-origin iframes.`); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/battery-status/battery-disabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/battery-status/battery-disabled-by-feature-policy.https.sub.html new file mode 100644 index 00000000000..515c64fe490 --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-disabled-by-feature-policy.https.sub.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<body> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/feature-policy/resources/featurepolicy.js></script> +<script> +'use strict'; + +const same_origin_src = '/feature-policy/resources/feature-policy-battery.html'; +const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + + same_origin_src; +const header = 'Feature-Policy header {"battery" : []}'; + +promise_test(async t => { + await promise_rejects(t, 'NotAllowedError', navigator.getBattery()); +}, `${header} disallows the top-level document.`); + +async_test(t => { + test_feature_availability('navigator.getBattery()', t, same_origin_src, + expect_feature_unavailable_default); +}, `${header} disallows same-origin iframes.`); + +async_test(t => { + test_feature_availability('navigator.getBattery()', t, cross_origin_src, + expect_feature_unavailable_default); +}, `${header} disallows cross-origin iframes.`); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/battery-status/battery-disabled-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/battery-status/battery-disabled-by-feature-policy.https.sub.html.headers new file mode 100644 index 00000000000..09a5ae84a12 --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-disabled-by-feature-policy.https.sub.html.headers @@ -0,0 +1 @@ +Feature-Policy: battery 'none' diff --git a/tests/wpt/web-platform-tests/battery-status/battery-disallowed-in-cross-origin-iframe.https.sub.html b/tests/wpt/web-platform-tests/battery-status/battery-disallowed-in-cross-origin-iframe.https.sub.html new file mode 100644 index 00000000000..8b48626b551 --- /dev/null +++ b/tests/wpt/web-platform-tests/battery-status/battery-disallowed-in-cross-origin-iframe.https.sub.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Battery Test: navigator.getBattery() is not allowed in cross origin iframe</title> +<link rel="author" title="Intel" href="http://www.intel.com"> +<link rel="help" href="https://www.w3.org/TR/battery-status/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="blank" src="about:blank" style="display: none"></iframe> +<script> + +function load_iframe(iframe, src) { + return new Promise((resolve, reject) => { + iframe.onload = () => resolve(iframe); + iframe.src = src; + }); +} + +promise_test(async t => { + let iframe = document.getElementById('blank'); + const path = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1); + const src = 'https://{{domains[www1]}}:{{ports[https][0]}}' + path + 'support-iframe.html'; + iframe = await load_iframe(iframe, src); + await promise_rejects(t, 'NotAllowedError', iframe.contentWindow.navigator.getBattery()); +}, "throw a 'NotAllowedError' when invoking navigator.getBattery() within cross-origin iframe"); + +</script> diff --git a/tests/wpt/web-platform-tests/css/css-color/opacity-overlapping-letters-ref.html b/tests/wpt/web-platform-tests/css/css-color/opacity-overlapping-letters-ref.html new file mode 100644 index 00000000000..bab1f80f685 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/opacity-overlapping-letters-ref.html @@ -0,0 +1,3 @@ +<link rel="stylesheet" href="/fonts/ahem.css"> +<meta name="flags" content="ahem"> +<div style="opacity: 0.5; letter-spacing: -0.6em; font: 100px/1 Ahem; white-space: pre">X X X</div> diff --git a/tests/wpt/web-platform-tests/css/css-color/opacity-overlapping-letters.html b/tests/wpt/web-platform-tests/css/css-color/opacity-overlapping-letters.html new file mode 100644 index 00000000000..65ab3742de3 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-color/opacity-overlapping-letters.html @@ -0,0 +1,6 @@ +<link rel="help" href="http://www.w3.org/TR/css3-color/#transparency"> +<link rel="match" href="opacity-overlapping-letters-ref.html"> +<link rel="stylesheet" href="/fonts/ahem.css"> +<meta name="flags" content="ahem"> +<meta name="assert" content="Opacity should be apply on the whole text content atomically."> +<div style="opacity: 0.5; letter-spacing: -0.6em; font: 100px/1 Ahem">XXXXX</div> diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-nogrid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-nogrid.html new file mode 100644 index 00000000000..b95914fe3e5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-nogrid.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: getComputedStyle().gridTemplateColumns</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#resolved-track-list" title="7.2.6. Resolved Value of a Track Listing"> +<meta name="assert" content="Checks the resolved value of grid-template-columns on an element which is not a grid container."> +<style> +#target { + display: block; + height: 1px; + font-size: 1px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<div id="target"></div> +<script> +test_computed_value("grid-template-columns", "none"); +test_computed_value("grid-template-columns", "1px"); +test_computed_value("grid-template-columns", "1px [a]"); +test_computed_value("grid-template-columns", "1px [a] 2px"); +test_computed_value("grid-template-columns", "[a] 1px"); +test_computed_value("grid-template-columns", "[a] 1px [b]"); +test_computed_value("grid-template-columns", "1px repeat(1, 2px) 3px"); +test_computed_value("grid-template-columns", "1px repeat(auto-fill, 2px) 3px"); +test_computed_value("grid-template-columns", "1px repeat(auto-fit, 2px) 3px"); +test_computed_value("grid-template-columns", "1px [a] repeat(1, [b] 2px [c]) [d] 3px"); +test_computed_value("grid-template-columns", "1px [a] repeat(auto-fill, [b] 2px [c]) [d] 3px"); +test_computed_value("grid-template-columns", "1px [a] repeat(auto-fit, [b] 2px [c]) [d] 3px"); +test_computed_value("grid-template-columns", "[a] 1px repeat(1, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-columns", "[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-columns", "[a] 1px repeat(auto-fit, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-rows", "100% [a] repeat(1, [b] 200% [c]) [d] 300%"); +test_computed_value("grid-template-rows", "100% [a] repeat(auto-fill, [b] 200% [c]) [d] 300%"); +test_computed_value("grid-template-rows", "100% [a] repeat(auto-fit, [b] 200% [c]) [d] 300%"); +test_computed_value("grid-template-columns", "[a] 1em repeat(1, 2em [b] 3em) 4em [d]", "[a] 1px repeat(1, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-columns", "[a] 1em repeat(auto-fill, 2em [b] 3em) 4em [d]", "[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-columns", "[a] 1em repeat(auto-fit, 2em [b] 3em) 4em [d]", "[a] 1px repeat(auto-fit, 2px [b] 3px) 4px [d]"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed.html new file mode 100644 index 00000000000..f6d0d9721c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: getComputedStyle().gridTemplateColumns</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#resolved-track-list" title="7.2.6. Resolved Value of a Track Listing"> +<meta name="assert" content="Checks the resolved value of grid-template-columns on a grid container."> +<style> +#target { + display: grid; + width: 1px; + font-size: 1px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<div id="target"></div> +<script> +test_computed_value("grid-template-columns", "none"); +test_computed_value("grid-template-columns", "1px"); +test_computed_value("grid-template-columns", "1px [a]"); +test_computed_value("grid-template-columns", "1px [a] 2px"); +test_computed_value("grid-template-columns", "[a] 1px"); +test_computed_value("grid-template-columns", "[a] 1px [b]"); +test_computed_value("grid-template-columns", "1px repeat(1, 2px) 3px", "1px 2px 3px"); +test_computed_value("grid-template-columns", "1px repeat(auto-fill, 2px) 3px", "1px 2px 3px"); +test_computed_value("grid-template-columns", "1px repeat(auto-fit, 2px) 3px", "1px 0px 3px"); +test_computed_value("grid-template-columns", "1px [a] repeat(1, [b] 2px [c]) [d] 3px", "1px [a b] 2px [c d] 3px"); +test_computed_value("grid-template-columns", "1px [a] repeat(auto-fill, [b] 2px [c]) [d] 3px", "1px [a b] 2px [c d] 3px"); +test_computed_value("grid-template-columns", "1px [a] repeat(auto-fit, [b] 2px [c]) [d] 3px", "1px [a b] 0px [c d] 3px"); +test_computed_value("grid-template-columns", "[a] 1px repeat(1, 2px [b] 3px) 4px [d]", "[a] 1px 2px [b] 3px 4px [d]"); +test_computed_value("grid-template-columns", "[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]", "[a] 1px 2px [b] 3px 4px [d]"); +test_computed_value("grid-template-columns", "[a] 1px repeat(auto-fit, 2px [b] 3px) 4px [d]", "[a] 1px 0px [b] 0px 4px [d]"); +test_computed_value("grid-template-columns", "100% [a] repeat(1, [b] 200% [c]) [d] 300%", "1px [a b] 2px [c d] 3px"); +test_computed_value("grid-template-columns", "100% [a] repeat(auto-fill, [b] 200% [c]) [d] 300%", "1px [a b] 2px [c d] 3px"); +test_computed_value("grid-template-columns", "100% [a] repeat(auto-fit, [b] 200% [c]) [d] 300%", "1px [a b] 0px [c d] 3px"); +test_computed_value("grid-template-columns", "[a] 1em repeat(1, 2em [b] 3em) 4em [d]", "[a] 1px 2px [b] 3px 4px [d]"); +test_computed_value("grid-template-columns", "[a] 1em repeat(auto-fill, 2em [b] 3em) 4em [d]", "[a] 1px 2px [b] 3px 4px [d]"); +test_computed_value("grid-template-columns", "[a] 1em repeat(auto-fit, 2em [b] 3em) 4em [d]", "[a] 1px 0px [b] 0px 4px [d]"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-nogrid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-nogrid.html new file mode 100644 index 00000000000..03e601acb93 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-nogrid.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: getComputedStyle().gridTemplateRows</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#resolved-track-list" title="7.2.6. Resolved Value of a Track Listing"> +<meta name="assert" content="Checks the resolved value of grid-template-rows on an element which is not a grid container."> +<style> +#target { + display: block; + height: 1px; + font-size: 1px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<div id="target"></div> +<script> +test_computed_value("grid-template-rows", "none"); +test_computed_value("grid-template-rows", "1px"); +test_computed_value("grid-template-rows", "1px [a]"); +test_computed_value("grid-template-rows", "1px [a] 2px"); +test_computed_value("grid-template-rows", "[a] 1px"); +test_computed_value("grid-template-rows", "[a] 1px [b]"); +test_computed_value("grid-template-rows", "1px repeat(1, 2px) 3px"); +test_computed_value("grid-template-rows", "1px repeat(auto-fill, 2px) 3px"); +test_computed_value("grid-template-rows", "1px repeat(auto-fit, 2px) 3px"); +test_computed_value("grid-template-rows", "1px [a] repeat(1, [b] 2px [c]) [d] 3px"); +test_computed_value("grid-template-rows", "1px [a] repeat(auto-fill, [b] 2px [c]) [d] 3px"); +test_computed_value("grid-template-rows", "1px [a] repeat(auto-fit, [b] 2px [c]) [d] 3px"); +test_computed_value("grid-template-rows", "[a] 1px repeat(1, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-rows", "[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-rows", "[a] 1px repeat(auto-fit, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-rows", "100% [a] repeat(1, [b] 200% [c]) [d] 300%"); +test_computed_value("grid-template-rows", "100% [a] repeat(auto-fill, [b] 200% [c]) [d] 300%"); +test_computed_value("grid-template-rows", "100% [a] repeat(auto-fit, [b] 200% [c]) [d] 300%"); +test_computed_value("grid-template-rows", "[a] 1em repeat(1, 2em [b] 3em) 4em [d]", "[a] 1px repeat(1, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-rows", "[a] 1em repeat(auto-fill, 2em [b] 3em) 4em [d]", "[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]"); +test_computed_value("grid-template-rows", "[a] 1em repeat(auto-fit, 2em [b] 3em) 4em [d]", "[a] 1px repeat(auto-fit, 2px [b] 3px) 4px [d]"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed.html new file mode 100644 index 00000000000..40722623aaa --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Grid Layout Test: getComputedStyle().gridTemplateRows</title> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-grid/#resolved-track-list" title="7.2.6. Resolved Value of a Track Listing"> +<meta name="assert" content="Checks the resolved value of grid-template-rows on a grid container."> +<style> +#target { + display: grid; + height: 1px; + font-size: 1px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<div id="target"></div> +<script> +test_computed_value("grid-template-rows", "none"); +test_computed_value("grid-template-rows", "1px"); +test_computed_value("grid-template-rows", "1px [a]"); +test_computed_value("grid-template-rows", "1px [a] 2px"); +test_computed_value("grid-template-rows", "[a] 1px"); +test_computed_value("grid-template-rows", "[a] 1px [b]"); +test_computed_value("grid-template-rows", "1px repeat(1, 2px) 3px", "1px 2px 3px"); +test_computed_value("grid-template-rows", "1px repeat(auto-fill, 2px) 3px", "1px 2px 3px"); +test_computed_value("grid-template-rows", "1px repeat(auto-fit, 2px) 3px", "1px 0px 3px"); +test_computed_value("grid-template-rows", "1px [a] repeat(1, [b] 2px [c]) [d] 3px", "1px [a b] 2px [c d] 3px"); +test_computed_value("grid-template-rows", "1px [a] repeat(auto-fill, [b] 2px [c]) [d] 3px", "1px [a b] 2px [c d] 3px"); +test_computed_value("grid-template-rows", "1px [a] repeat(auto-fit, [b] 2px [c]) [d] 3px", "1px [a b] 0px [c d] 3px"); +test_computed_value("grid-template-rows", "[a] 1px repeat(1, 2px [b] 3px) 4px [d]", "[a] 1px 2px [b] 3px 4px [d]"); +test_computed_value("grid-template-rows", "[a] 1px repeat(auto-fill, 2px [b] 3px) 4px [d]", "[a] 1px 2px [b] 3px 4px [d]"); +test_computed_value("grid-template-rows", "[a] 1px repeat(auto-fit, 2px [b] 3px) 4px [d]", "[a] 1px 0px [b] 0px 4px [d]"); +test_computed_value("grid-template-rows", "100% [a] repeat(1, [b] 200% [c]) [d] 300%", "1px [a b] 2px [c d] 3px"); +test_computed_value("grid-template-rows", "100% [a] repeat(auto-fill, [b] 200% [c]) [d] 300%", "1px [a b] 2px [c d] 3px"); +test_computed_value("grid-template-rows", "100% [a] repeat(auto-fit, [b] 200% [c]) [d] 300%", "1px [a b] 0px [c d] 3px"); +test_computed_value("grid-template-rows", "[a] 1em repeat(1, 2em [b] 3em) 4em [d]", "[a] 1px 2px [b] 3px 4px [d]"); +test_computed_value("grid-template-rows", "[a] 1em repeat(auto-fill, 2em [b] 3em) 4em [d]", "[a] 1px 2px [b] 3px 4px [d]"); +test_computed_value("grid-template-rows", "[a] 1em repeat(auto-fit, 2em [b] 3em) 4em [d]", "[a] 1px 0px [b] 0px 4px [d]"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-text/text-align/text-align-last-empty-inline.html b/tests/wpt/web-platform-tests/css/css-text/text-align/text-align-last-empty-inline.html index 07dcb3ba896..fd3d706d1ee 100644 --- a/tests/wpt/web-platform-tests/css/css-text/text-align/text-align-last-empty-inline.html +++ b/tests/wpt/web-platform-tests/css/css-text/text-align/text-align-last-empty-inline.html @@ -13,6 +13,9 @@ padding: 1px; background: black; } + #reference { + text-align: center; + } </style> <body> <div id="justify"><span></span></div> @@ -29,5 +32,5 @@ test(function() { const ref_rect = ref_element.firstElementChild.getBoundingClientRect(); assert_equals(justify_rect.left, ref_rect.left); assert_equals(justify_rect.right, ref_rect.right); -}, 'Left and right edges of empty inlines should align.'); +}, 'content that cannot be justified should be centered when text-align-last is justify'); </script> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-with-whitespace-crash.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-with-whitespace-crash.html new file mode 100644 index 00000000000..89e5c3a71fe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-with-whitespace-crash.html @@ -0,0 +1,18 @@ +<!doctype html> +<html> +<head> + <title>pre(white-space's one of values) crash if there is no available width</title> + <link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=999863"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script>test(()=>{})</script> +</head> +<body> + abc<b style="margin-left: 100%; white-space: pre;">def</b> + <div> + <li> + <a href="dummy">success if does not crash</a> + </li> + </div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-012.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-012.html index f0eb17c4f97..e844d978604 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-012.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-012.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: preserved white space at the end of and white-space:pre-wrap with right alignement</title> +<title>CSS Text level 3 Test: preserved white space at the end of soft-wrapped lines and white-space:pre-wrap with right alignement</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/pre-wrap-012-ref.html"> -<meta name="assert" content="When white-space is pre-wrap, spaces at the end of the line hang, so they do not have any effect when right-aligning."> +<meta name="assert" content="When white-space is pre-wrap, spaces at the end of soft-wrapped lines hang, so they do not have any effect when right-aligning."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> div { @@ -22,6 +22,5 @@ div { </style> <body> <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> - <div>XX  -XX </div> + <div>XX XX</div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-013.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-013.html index 29333f5946e..23c4b536cde 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-013.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-013.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: preserved white space at the end of and white-space:pre-wrap with center alignement</title> +<title>CSS Text level 3 Test: preserved white space at the end of soft-wrapped lines and white-space:pre-wrap with center alignement</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/pre-wrap-013-ref.html"> -<meta name="assert" content="When white-space is pre-wrap, spaces at the end of the line hang, so they do not have any effect when centering."> +<meta name="assert" content="When white-space is pre-wrap, spaces at the end of soft-wrapped lines hang, so they do not have any effect when centering."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> div { @@ -22,6 +22,5 @@ div { </style> <body> <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> - <div>XX  -XX </div> + <div>XX XX</div> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-014.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-014.html index ac867771d58..26423c19284 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-014.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-014.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: preserved white space at the end of and white-space:pre-wrap with justification</title> +<title>CSS Text level 3 Test: preserved white space at the end of soft-wrapped lines and white-space:pre-wrap with justification</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/pre-wrap-014-ref.html"> -<meta name="assert" content="When white-space is pre-wrap, spaces at the end of the line hang, so they do not have any effect when justifying."> +<meta name="assert" content="When white-space is pre-wrap, spaces at the end of soft-wrapped lines hang, so they do not have any effect when justifying."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> div { @@ -27,6 +27,6 @@ span { </style> <body> <p>Test passes if there is a <strong>filled green rectangle</strong> and <strong>no red</strong>.</p> - <div><span>X X</span>  - X</div><!-- invisible last line, because justification works on non-last lines--> + <div><span>X X</span> X</div> + <!-- invisible last line, because justification works on non-last lines--> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-017.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-017.html new file mode 100644 index 00000000000..541e1abe575 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-017.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: pre-wrap trailing spaces and max-content</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/pre-wrap-001-ref.html"> +<meta name="assert" content="When white-space is pre-wrap, trailing spaces spaces are taken into account for max-content"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +#red { + position: absolute; + z-index:-1; + width: 40px; + height: 40px; + background: red; +} +#test { + margin-left: -1em; + font: 40px/1 Ahem; + color: white; + background: green; + width: max-content; + white-space: pre-wrap +} +</style> + +<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> + +<div id=red></div> +<div id=test>X </div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-018.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-018.html new file mode 100644 index 00000000000..f911b2dcdea --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-018.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: pre-wrap spaces and centering</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/pre-wrap-018-ref.html"> +<meta name="assert" content="conditionally hanging white space at the end of lines with forced breaks provides symmetry with the start of the line"> +<style> +div { + font-size: 2rem; + margin: 1rem; +} +#test { + white-space: pre-wrap; + width: 5ch; + border: solid 1px; + font-family: monospace; + text-align: center; + text-decoration: underline; +} + +#ref { + white-space: pre; + width: 5ch; + border: solid 1px; + font-family: monospace; +} +#ref span { + text-decoration: underline; +} + +</style> + +<p>Test passes if the two boxes below are identical. + +<div id=test> 0 </div> +<div id=ref> <span> 0 </span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-019.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-019.html new file mode 100644 index 00000000000..58dae9f5007 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-019.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: trailing pre-wrap spaces and hanging</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/pre-wrap-019-ref.html"> +<meta name="assert" content="trailing pre-wrap spaces hang at soft-wrapped lines, and hang conditionally before forced breaks."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font-size: 2rem; + font-family: Ahem; + width: 3ch; +} +#test1, #test2 { + white-space: pre-wrap; + color: green; +} +#test2 { + text-align: right; +} + +.ref { + white-space: pre; + color: red; + position: absolute; + z-index: -1; +} + +</style> + +<p>Test passes if there are green squares below and no red. + +<div class=ref> 0 <br>0 0 <br>0 </div> +<div id=test1> 0 0 0 0 </div> + +<div class=ref> 0<br>0 0 <br> 0</div> +<div id=test2> 0 0 0 0 </div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-020.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-020.html new file mode 100644 index 00000000000..ec3e8621159 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-020.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Text level 3 Test: trailing pre-wrap spaces and conditional hanging</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> +<link rel="match" href="reference/pre-wrap-020-ref.html"> +<meta name="assert" content="trailing pre-wrap spaces hang conditionally before forced breaks, which is different from not hanging at all, as it doesn't cause wrapping at earlier opportunities."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font-size: 2rem; + font-family: Ahem; + width: 3ch; +} +#test { + white-space: pre-wrap; + color: green; +} + +.ref { + white-space: pre; + color: red; + position: absolute; + z-index: -1; +} + +</style> + +<p>Test passes if there are green rectangles below and no red. + +<div class=ref>0 0<br>0 0</div> +<div id=test>0 0 0 0 </div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-018-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-018-ref.html new file mode 100644 index 00000000000..a87649432fe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-018-ref.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test reference</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<style> +div { + font-size: 2rem; + margin: 1rem; + white-space: pre; + width: 5ch; + border: solid 1px; + font-family: monospace; +} +span { + text-decoration: underline; +} + +</style> + +<p>Test passes if the two boxes below are identical. + +<div> <span> 0 </span></div> +<div> <span> 0 </span></div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-019-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-019-ref.html new file mode 100644 index 00000000000..e3be478a351 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-019-ref.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test reference</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font-size: 2rem; + font-family: Ahem; + width: 3ch; + white-space: pre; + color: green; +} + +</style> + +<p>Test passes if there are green squares below and no red. + +<div class=ref> 0 <br>0 0 <br>0 </div> + +<div class=ref> 0<br>0 0 <br> 0</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-020-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-020-ref.html new file mode 100644 index 00000000000..2ef5e7f408e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-020-ref.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>test reference</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font-size: 2rem; + font-family: Ahem; + width: 3ch; + white-space: pre; + color: green; +} + +</style> + +<p>Test passes if there are green rectangles below and no red. + +<div>0 0<br>0 0</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/textarea-pre-wrap-014-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/textarea-pre-wrap-014-ref.html new file mode 100644 index 00000000000..99a38bf88b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/textarea-pre-wrap-014-ref.html @@ -0,0 +1,5 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Test reference</title> +<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> +<p>Test passes if there is <strong>no red</strong> below.</p> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html index 0c31cb42996..93b8b913cc9 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-intrinsic-size-004-ref.html @@ -2,14 +2,13 @@ <meta charset="utf-8"> <title>test reference</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> div { color: transparent; - font-family: Ahem; + font-family: monospace; font-size: 50px; width: 3ch; - height: 2ch; + height: 2em; background: green; } </style> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html index 5f94d076e84..0971868116f 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/white-space-pre-wrap-trailing-spaces-002-ref.html @@ -2,7 +2,19 @@ <meta charset=utf-8> <title>CSS test Reference</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<style> +div { + font-size: 20px; + font-family: Ahem; + line-height: 1em; + white-space: pre-wrap; +} +#test { color: orange; } +#ref { color: blue; } +</style> -<p>This test passes if the letters below are spaced equally. +<p>This test passes if the orange blocks below are vertically aligned with the blue ones. -<div>X X X X</div> +<div id=test>X X X X</div> +<div id=ref>X X X X</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-012.html b/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-012.html index 04e07d6bcc8..5ca12811280 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-012.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-012.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: preserved white space at the end of and white-space:pre-wrap with right alignement in a textarea</title> +<title>CSS Text level 3 Test: preserved white space at the end of soft-wrapped lines and white-space:pre-wrap with right alignement in a textarea</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> -<link rel="match" href="reference/textarea-pre-wrap-001-ref.html"> -<meta name="assert" content="When white-space is pre-wrap, only spaces that overflow the line get collapsed or hanged, the ones that fit have an effect when right-aligning in a textarea."> +<link rel="match" href="reference/pre-wrap-012-ref.html"> +<meta name="assert" content="When white-space is pre-wrap, only spaces at the end of soft-wrapped lines get collapsed or hanged, so they do not have any effect when right aligning."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> textarea { @@ -25,7 +25,7 @@ textarea { white-space: pre-wrap; color: green; - background: linear-gradient(red, red) 0 0/2ch 2ch no-repeat; + background: linear-gradient(red, red) 1ch 0/2ch 2ch no-repeat; width: 3ch; text-align: right; diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-013.html b/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-013.html index 853d2c33d14..e3d5c3253d6 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-013.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-013.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: preserved white space at the end of and white-space:pre-wrap with center alignement in a textarea</title> +<title>CSS Text level 3 Test: preserved white space at the end of soft-wrapped line and white-space:pre-wrap with center alignement in a textarea</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> -<link rel="match" href="reference/textarea-pre-wrap-001-ref.html"> -<meta name="assert" content="When white-space is pre-wrap, only spaces that overflow the line get collapsed or hanged, the ones that fit have an effect when centering in a textarea."> +<link rel="match" href="reference/pre-wrap-013-ref.html"> +<meta name="assert" content="When white-space is pre-wrap, spaces at the end of soft-wrapped lines get collapsed or hanged, so they do not have any effect when centering."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> textarea { @@ -25,7 +25,7 @@ textarea { white-space: pre-wrap; color: green; - background: linear-gradient(red, red) 0 0/2ch 2ch no-repeat; + background: linear-gradient(red, red) 0.5ch 0/2ch 2ch no-repeat; width: 3ch; text-align: center; @@ -33,6 +33,5 @@ textarea { </style> <body> <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> - <textarea>XX  -XX </textarea> + <textarea>XX XX</textarea> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-014.html b/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-014.html index b6d62ce2bff..f2812af2fbf 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-014.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/textarea-pre-wrap-014.html @@ -1,10 +1,10 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>CSS Text level 3 Test: preserved white space at the end of and white-space:pre-wrap with justification in a textarea</title> +<title>CSS Text level 3 Test: preserved white space at the end of soft-wrapped lines and white-space:pre-wrap with justification in a textarea</title> <link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> -<link rel="match" href="reference/textarea-pre-wrap-001-ref.html"> -<meta name="assert" content="When white-space is pre-wrap, only spaces that overflow the line get collapsed or hanged, the ones that fit have an effect when justifying in a textarea."> +<link rel="match" href="reference/textarea-pre-wrap-014-ref.html"> +<meta name="assert" content="When white-space is pre-wrap, spaces at the end of a soft-wrapped line get collapsed or hanged, and don't influence justification."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> textarea { @@ -23,17 +23,15 @@ textarea { font-family: Ahem; line-height: 1em; white-space: pre-wrap; - color: green; + color: white; - background: linear-gradient(red, red) 0 0/2ch 2ch no-repeat; + background: linear-gradient(red, red) 3ch 0/2ch 1ch no-repeat; - width: 3ch; + width: 4ch; text-align: justify; - text-justify: inter-character; } </style> <body> - <p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p> - <textarea>X​X  -X​X </textarea> + <p>Test passes if there is <strong>no red</strong> below.</p> + <textarea>X X X</textarea> </body> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html index cc2d73992d5..a5be242e23a 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-intrinsic-size-004.html @@ -6,8 +6,7 @@ <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <meta name="flags" content=""> <link rel="match" href="reference/white-space-intrinsic-size-004-ref.html"> -<meta name="assert" content="Preserved spaces at the end of the line do affect the intrinsic max-content size when white-space is pre-wrap, as hanging does not prevent contributing to the max-content size. The value of overflow-wrap makes no difference."> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> +<meta name="assert" content="Preserved spaces at the end of the line do affect the intrinsic max-content size when white-space is pre-wrap, as spaces before a forced break, at the end of un unwrapped line, only hanging conditionally, which does not prevent contributing to the max-content size. The value of overflow-wrap makes no difference."> <style> aside { float: left; @@ -18,10 +17,10 @@ aside:last-of-type { overflow-wrap: break-word; } div { background: red; color: transparent; - font-family: Ahem; + font-family: monospace; font-size: 50px; width: 3ch; - height: 2em; + line-height: 1; } </style> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html index ca6f65e613d..82fbfbc976c 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html @@ -1,19 +1,18 @@ <!doctype html> <meta charset=utf-8> -<title>CSS Text test: hanging trailing spaces with white-space:pre-wrap</title> +<title>CSS Text test: alignement and trailing spaces with white-space:pre-wrap</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-001-ref.html"> -<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap."> +<meta name="assert" content="Preserved white space with pre-wrap at the end of a line ending with a forced line break conditionally hangs, so it does affect alignment."> <style> div { white-space: pre-wrap; font-family: monospace; } -div:nth-of-type(1), div:nth-of-type(2) { - width: 5ch; + width: 7ch; text-align: right; } div:nth-of-type(3), @@ -25,7 +24,7 @@ div:nth-of-type(4) { <p>This test passes if the 4 letters below are verticaly aligned. -<div>P</div> -<div>A </div> -<div>S</div> -<div>S </div> +<div> P</div> +<div>A </div> +<div> S </div> +<div> S </div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html index 76ca5ef77db..f7e0f21f457 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-002.html @@ -1,20 +1,28 @@ <!doctype html> <meta charset=utf-8> -<title>CSS Text test: intrinsic maximum sizing of trailing spaces with white-space:pre-wrap</title> +<title>CSS Text test: intrinsic maximum sizing and alignment of trailing spaces with white-space:pre-wrap</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-002-ref.html"> -<meta name="assert" content="Hanging preserved white space at the end of the line when white-space is pre-wrap has no effect on the max-content size."> - +<meta name="assert" content="Preserved white space with white-space is pre-wrap at the end of the line before a forced-break only hangs conditionally, and therefore is included in the max-content size, and taken into account for alignemnt (since it doesn't actually hang in this situation)."> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> +div { + font-size: 20px; + font-family: Ahem; + line-height: 1em; + white-space: pre-wrap; +} span { display: inline-block; - white-space: pre-wrap; } #s1 { text-align: right; } #s2 { text-align: center; } +#test { color: orange; } +#ref { color: blue; } </style> -<p>This test passes if the letters below are spaced equally. +<p>This test passes if the orange blocks below are vertically aligned with the blue ones. -<div><span id=s1>X </span><span id=s2>X </span>X X</div> +<div id=test><span id=s1>X </span><span id=s2> X </span> X X</div> +<div id=ref>X X X X</div> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html index 15e47a7adba..def9bcaee32 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html @@ -4,7 +4,7 @@ <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-003-ref.html"> -<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap, and therefore does not count when computing the (minimum) intrinsic size."> +<meta name="assert" content="Preserved white space at the end of soft-wrapped lines is hanged when white-space is pre-wrap, and therefore does not count when computing the (minimum) intrinsic size."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html index aa048b512e9..d271057c43c 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-004.html @@ -4,7 +4,7 @@ <link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com"> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> -<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap."> +<meta name="assert" content="Preserved white space at the end of a soft-wrapped line is hanged when white-space is pre-wrap."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html index 62ecb84757e..e10b4e19033 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html @@ -4,7 +4,7 @@ <link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" /> <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2"> <link rel="match" href="reference/white-space-pre-wrap-trailing-spaces-004-ref.html"> -<meta name="assert" content="Preserved white space at the end of the line is hanged when white-space is pre-wrap."> +<meta name="assert" content="Preserved white space at the end of a soft-wrapped line is hanged when white-space is pre-wrap."> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <style> div { diff --git a/tests/wpt/web-platform-tests/css/css-transforms/animation/scale-interpolation.html b/tests/wpt/web-platform-tests/css/css-transforms/animation/scale-interpolation.html index 146575c902c..c6fec264611 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/animation/scale-interpolation.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/animation/scale-interpolation.html @@ -9,9 +9,44 @@ <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/css/support/interpolation-testcommon.js"></script> + <style> + .parent { + scale: 0.5 1 2 + } + .target { + width: 10px; + height: 10px; + background-color: black; + scale: 1.1 1; + } + .expected { + background-color: green; + } + </style> </head> <body> + <template id="target-template"> + <div class="parent"> + <div class="target"></div> + </div> + </template> + <script> + // Matching two <number> version. + test_interpolation({ + property: 'scale', + from: '-10 5', + to: '10 -5', + }, [ + {at: -1, expect: '-30 15'}, + {at: 0, expect: '-10 5'}, + {at: 0.25, expect: '-5 2.5'}, + {at: 0.75, expect: '5 -2.5'}, + {at: 1, expect: '10 -5'}, + {at: 2, expect: '30 -15'}, + ]); + + // Matching three <number> version. test_interpolation({ property: 'scale', from: '2 30 400', @@ -25,6 +60,7 @@ {at: 2, expect: '18 190 2000'} ]); + // From three <number> to two <number>; test that it expands correctly. test_interpolation({ property: 'scale', from: '26 17 9', @@ -38,6 +74,48 @@ {at: 2, expect: '-22 -15 -7'} ]); + // Test one <number> is expanded correctly. + test_interpolation({ + property: 'scale', + from: '1', + to: '10 -5 0', + }, [ + {at: -1, expect: '-8 7 2'}, + {at: 0, expect: '1'}, + {at: 0.25, expect: '3.25 -0.5 0.75'}, + {at: 0.75, expect: '7.75 -3.5 0.25'}, + {at: 1, expect: '10 -5 0'}, + {at: 2, expect: '19 -11 -1'}, + ]); + + test_interpolation({ + property: 'scale', + from: '-10 5 1', + to: '1', + }, [ + {at: -1, expect: '-21 9 1'}, + {at: 0, expect: '-10 5 1'}, + {at: 0.25, expect: '-7.25 4 1'}, + {at: 0.75, expect: '-1.75 2 1'}, + {at: 1, expect: '1'}, + {at: 2, expect: '12 -3 1'}, + ]); + + // Handling of the none value. + test_interpolation({ + property: 'scale', + from: 'none', + to: 'none', + }, [ + {at: -1, expect: 'none'}, + {at: 0, expect: 'none'}, + {at: 0.125, expect: 'none'}, + {at: 0.875, expect: 'none'}, + {at: 1, expect: 'none'}, + {at: 2, expect: 'none'} + ]); + + // Going from none to a valid value; test that it converts properly. test_interpolation({ property: 'scale', from: 'none', @@ -51,17 +129,114 @@ {at: 2, expect: '7 5 3'} ]); + // Test neutral keyframe; make sure it adds the underlying. test_interpolation({ property: 'scale', - from: 'none', - to: 'none', + from: neutralKeyframe, + to: '1.5 1', }, [ - {at: -1, expect: 'none'}, + {at: -1, expect: '0.7 1'}, + {at: 0, expect: '1.1 1'}, + {at: 0.25, expect: '1.2 1'}, + {at: 0.75, expect: '1.4 1'}, + {at: 1, expect: '1.5 1'}, + {at: 2, expect: '1.9 1'}, + ]); + + // Test initial value; for 'scale' this is 'none'. + test_interpolation({ + property: 'scale', + from: 'initial', + to: '2 0.5 1', + }, [ + {at: -1, expect: '0 1.5 1'}, {at: 0, expect: 'none'}, - {at: 0.125, expect: 'none'}, - {at: 0.875, expect: 'none'}, + {at: 0.25, expect: '1.25 0.875 1'}, + {at: 0.75, expect: '1.75 0.625 1'}, + {at: 1, expect: '2 0.5 1'}, + {at: 2, expect: '3 0 1'}, + ]); + + test_interpolation({ + property: 'scale', + from: '2 0.5 1', + to: 'initial', + }, [ + {at: -1, expect: '3 0 1'}, + {at: 0, expect: '2 0.5 1'}, + {at: 0.25, expect: '1.75 0.6251 1'}, + {at: 0.75, expect: '1.25 0.875 1'}, {at: 1, expect: 'none'}, - {at: 2, expect: 'none'} + {at: 2, expect: '0 1.5 1'}, + ]); + + + // Test unset value; for 'scale' this is 'none'. + test_interpolation({ + property: 'scale', + from: 'unset', + to: '1.5 1', + }, [ + {at: -1, expect: '0.5 1'}, + {at: 0, expect: 'none'}, + {at: 0.25, expect: '1.125 1'}, + {at: 0.75, expect: '1.375 1'}, + {at: 1, expect: '1.5 1'}, + {at: 2, expect: '2 1'}, + ]); + + // Test inherited value. + test_interpolation({ + property: 'scale', + from: 'inherit', + to: '2 0.5 1', + }, [ + {at: -1, expect: '-1 1.5 3'}, + {at: 0, expect: '0.5 1 2'}, + {at: 0.25, expect: '0.875 0.875 1.75'}, + {at: 0.75, expect: '1.625 0.625 1.25'}, + {at: 1, expect: '2 0.5 1'}, + {at: 2, expect: '3.5 0 0'}, + ]); + + test_interpolation({ + property: 'scale', + from: '2 0.5 1', + to: 'inherit', + }, [ + {at: -1, expect: '3.5 0 0'}, + {at: 0, expect: '2 0.5 1'}, + {at: 0.25, expect: '1.625 0.625 1.25'}, + {at: 0.75, expect: '0.875 0.875 1.75'}, + {at: 1, expect: '0.5 1 2'}, + {at: 2, expect: '-1 1.5 3'}, + ]); + + // Test combination of initial and inherit. + test_interpolation({ + property: 'scale', + from: 'initial', + to: 'inherit', + }, [ + {at: -1, expect: '1.5 1 0'}, + {at: 0, expect: 'none'}, + {at: 0.25, expect: '0.875 1 1.25'}, + {at: 0.75, expect: '0.625 1 1.75'}, + {at: 1, expect: '0.5 1 2'}, + {at: 2, expect: '0 1 3'}, + ]); + + test_interpolation({ + property: 'scale', + from: 'inherit', + to: 'initial', + }, [ + {at: -1, expect: '0 1 3'}, + {at: 0, expect: '0.5 1 2'}, + {at: 0.25, expect: '0.625 1 1.75'}, + {at: 0.75, expect: '0.875 1 1.25'}, + {at: 1, expect: 'none'}, + {at: 2, expect: '1.5 1 0'}, ]); </script> </body> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/animation/translate-interpolation.html b/tests/wpt/web-platform-tests/css/css-transforms/animation/translate-interpolation.html index aed6c41cf64..c73f68a130e 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/animation/translate-interpolation.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/animation/translate-interpolation.html @@ -18,10 +18,70 @@ width: 10px; height: 10px; } + .parent { + translate: 100px 200px 300px; + } + .target { + width: 100px; + height: 100px; + background-color: black; + translate: 10px; + } + .expected { + background-color: green; + } </style> </head> <body> + <template id="target-template"> + <div class="parent"> + <div class="target"></div> + </div> + </template> <script> + // Matching one-length (pixels) animation. + test_interpolation({ + property: 'translate', + from: '-100px', + to: '100px', + }, [ + {at: -1, expect: '-300px'}, + {at: 0, expect: '-100px'}, + {at: 0.25, expect: '-50px'}, + {at: 0.75, expect: '50px'}, + {at: 1, expect: '100px'}, + {at: 2, expect: '300px'}, + ]); + + // Matching one-length (percentage) animation. + test_interpolation({ + property: 'translate', + from: '-100%', + to: '100%', + }, [ + {at: -1, expect: '-300%'}, + {at: 0, expect: '-100%'}, + {at: 0.25, expect: '-50%'}, + {at: 0.75, expect: '50%'}, + {at: 1, expect: '100%'}, + {at: 2, expect: '300%'}, + ]); + + // Matching two-length (all pixels) animation. + test_interpolation({ + property: 'translate', + from: '-100px -50px', + to: '100px 50px', + }, [ + {at: -1, expect: '-300px -150px'}, + {at: 0, expect: '-100px -50px'}, + {at: 0.25, expect: '-50px -25px'}, + {at: 0.75, expect: '50px 25px'}, + {at: 1, expect: '100px 50px'}, + {at: 2, expect: '300px 150px'}, + ]); + + // Matching three-length (all pixels) animation. test_interpolation({ property: 'translate', from: '220px 240px 260px', @@ -35,6 +95,35 @@ {at: 2, expect: '380px 560px 740px'} ]); + // Going from one length to three lengths. + test_interpolation({ + property: 'translate', + from: '0px', + to: '-100px -50px 100px', + }, [ + {at: -1, expect: '100px 50px -100px'}, + {at: 0, expect: '0px'}, + {at: 0.25, expect: '-25px -12.5px 25px'}, + {at: 0.75, expect: '-75px -37.5px 75px'}, + {at: 1, expect: '-100px -50px 100px'}, + {at: 2, expect: '-200px -100px 200px'}, + ]); + + // Going from three lengths to one length. + test_interpolation({ + property: 'translate', + from: '-100px -50px 100px', + to: '0px', + }, [ + {at: -1, expect: '-200px -100px 200px'}, + {at: 0, expect: '-100px -50px 100px'}, + {at: 0.25, expect: '-75px -37.5px 75px'}, + {at: 0.75, expect: '-25px -12.5px 25px'}, + {at: 1, expect: '0px'}, + {at: 2, expect: '100px 50px -100px'}, + ]); + + // Going from three-lengths to two-percentages. test_interpolation({ property: 'translate', from: '480px 400px 320px', @@ -48,6 +137,21 @@ {at: 2, expect: 'calc(480% - 480px) calc(320% - 400px) -320px'} ]); + // Handling of the none value. + test_interpolation({ + property: 'translate', + from: 'none', + to: 'none', + }, [ + {at: -1, expect: 'none'}, + {at: 0, expect: 'none'}, + {at: 0.125, expect: 'none'}, + {at: 0.875, expect: 'none'}, + {at: 1, expect: 'none'}, + {at: 2, expect: 'none'} + ]); + + // Going from none to a valid value; test that it converts properly. test_interpolation({ property: 'translate', from: 'none', @@ -61,17 +165,114 @@ {at: 2, expect: '16px 160% 1600px'} ]); + // Test neutral keyframe; make sure it adds the underlying. test_interpolation({ property: 'translate', - from: 'none', - to: 'none', + from: neutralKeyframe, + to: '20px', }, [ - {at: -1, expect: 'none'}, + {at: -1, expect: '0px'}, + {at: 0, expect: '10px'}, + {at: 0.25, expect: '12.5px'}, + {at: 0.75, expect: '17.5px'}, + {at: 1, expect: '20px'}, + {at: 2, expect: '30px'}, + ]); + + // Test initial value; for 'scale' this is 'none'. + test_interpolation({ + property: 'translate', + from: 'initial', + to: '200px 100px 200px', + }, [ + {at: -1, expect: '-200px -100px -200px'}, {at: 0, expect: 'none'}, - {at: 0.125, expect: 'none'}, - {at: 0.875, expect: 'none'}, + {at: 0.25, expect: '50px 25px 50px'}, + {at: 0.75, expect: '150px 75px 150px'}, + {at: 1, expect: '200px 100px 200px'}, + {at: 2, expect: '400px 200px 400px'}, + ]); + + test_interpolation({ + property: 'translate', + from: '200px 100px 400px', + to: 'initial', + }, [ + {at: -1, expect: '400px 200px 800px'}, + {at: 0, expect: '200px 100px 400px'}, + {at: 0.25, expect: '150px 75px 300px'}, + {at: 0.75, expect: '50px 25px 100px'}, {at: 1, expect: 'none'}, - {at: 2, expect: 'none'} + {at: 2, expect: '-200px -100px -400px'}, + ]); + + + // Test unset value; for 'translate' this is 'none'. + test_interpolation({ + property: 'translate', + from: 'unset', + to: '20px', + }, [ + {at: -1, expect: '-20px'}, + {at: 0, expect: 'none'}, + {at: 0.25, expect: '5px'}, + {at: 0.75, expect: '15px'}, + {at: 1, expect: '20px'}, + {at: 2, expect: '40px'}, + ]); + + // Test inherited value. + test_interpolation({ + property: 'translate', + from: 'inherit', + to: '200px 100px 200px', + }, [ + {at: -1, expect: '0px 300px 400px'}, + {at: 0, expect: '100px 200px 300px'}, + {at: 0.25, expect: '125px 175px 275px'}, + {at: 0.75, expect: '175px 125px 225px'}, + {at: 1, expect: '200px 100px 200px'}, + {at: 2, expect: '300px 0px 100px'}, + ]); + + test_interpolation({ + property: 'translate', + from: '200px 100px 200px', + to: 'inherit', + }, [ + {at: -1, expect: '300px 0px 100px'}, + {at: 0, expect: '200px 100px 200px'}, + {at: 0.25, expect: '175px 125px 225px'}, + {at: 0.75, expect: '125px 175px 275px'}, + {at: 1, expect: '100px 200px 300px'}, + {at: 2, expect: '0px 300px 400px'}, + ]); + + // Test combination of initial and inherit. + test_interpolation({ + property: 'translate', + from: 'initial', + to: 'inherit', + }, [ + {at: -1, expect: '-100px -200px -300px'}, + {at: 0, expect: 'none'}, + {at: 0.25, expect: '25px 50px 75px'}, + {at: 0.75, expect: '75px 150px 225px'}, + {at: 1, expect: '100px 200px 300px'}, + {at: 2, expect: '200px 400px 600px'}, + ]); + + test_interpolation({ + property: 'translate', + from: 'inherit', + to: 'initial', + }, [ + {at: -1, expect: '200px 400px 600px'}, + {at: 0, expect: '100px 200px 300px'}, + {at: 0.25, expect: '75px 150px 225px'}, + {at: 0.75, expect: '25px 50px 75px'}, + {at: 1, expect: 'none'}, + {at: 2, expect: '-100px -200px -300px'}, ]); </script> </body> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-mutation.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-mutation-001.html index 1f0dfd01bb9..1f0dfd01bb9 100644 --- a/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-mutation.html +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-mutation-001.html diff --git a/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-mutation-002.html b/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-mutation-002.html new file mode 100644 index 00000000000..676d5cdd03b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/transform-box/fill-box-mutation-002.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html class="reftest-wait"> +<title>transform-box: fill-box, image mutated</title> +<link rel="match" href="reference/greensquare200x200.html"> +<link rel="help" href="https://drafts.csswg.org/css-transforms/#transform-box"> +<style> +#target { + transform-box: fill-box; + transform: translate(-50%, 0); +} +</style> +<p>There should be a green 200x200 rectangle below, and no red.</p> +<svg width="400" height="200"> + <rect width="200" height="200" fill="red"/> + <image id="target" x="100" width="100" height="200" + href="/css/css-transforms/support/1x1-green.png"/> +</svg> +<script> +requestAnimationFrame(function() { + requestAnimationFrame(function() { + document.querySelector('#target').setAttribute('width', 200); + document.documentElement.classList.remove('reftest-wait'); + }); +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html index fa03b2295b9..e57856bab4f 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html @@ -26,6 +26,7 @@ test_computed_value("transition-timing-function", "cubic-bezier(0, 0.7, 1, 1.3)" test_computed_value("transition-timing-function", "step-start", "steps(1, start)"); test_computed_value("transition-timing-function", "step-end", "steps(1)"); +test_computed_value("transition-timing-function", "steps(4)"); test_computed_value("transition-timing-function", "steps(4, start)"); test_computed_value("transition-timing-function", "steps(2, end)", "steps(2)"); test_computed_value("transition-timing-function", "steps(2, jump-start)"); diff --git a/tests/wpt/web-platform-tests/css/css-values/minmax-angle-serialize.html b/tests/wpt/web-platform-tests/css/css-values/minmax-angle-serialize.html index 3f424589ba6..07b7d3c2b23 100644 --- a/tests/wpt/web-platform-tests/css/css-values/minmax-angle-serialize.html +++ b/tests/wpt/web-platform-tests/css/css-values/minmax-angle-serialize.html @@ -1,7 +1,7 @@ <!DOCTYPE html> <link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func"> <link rel="help" href="https://drafts.csswg.org/css-values-4/#angles"> -<link rel="help" href="https://drafts.csswg.org/css-values-4/#calc-type-checking"> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#calc-serialize"> <link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -20,6 +20,20 @@ test_valid_angle('max(1rad)', 'max(1rad)'); test_valid_angle('max(1turn)', 'max(1turn)'); test_valid_angle('max(1grad)', 'max(1grad)'); -// TODO(crbug.com/978682): Complete this test suite +test_valid_angle('min(1deg, 2deg, 3deg)', 'min(1deg, 2deg, 3deg)'); +test_valid_angle('min(3deg, 2deg, 1deg)', 'min(3deg, 2deg, 1deg)'); +test_valid_angle('min(90deg, 1.57rad, 0.25turn)', 'min(90deg, 1.57rad, 0.25turn)'); +test_valid_angle('min(0.25turn, 1.57rad, 90deg)', 'min(0.25turn, 1.57rad, 90deg)'); +test_valid_angle('max(1deg, 2deg, 3deg)', 'max(1deg, 2deg, 3deg)'); +test_valid_angle('max(3deg, 2deg, 1deg)', 'max(3deg, 2deg, 1deg)'); +test_valid_angle('max(90deg, 1.57rad, 0.25turn)', 'max(90deg, 1.57rad, 0.25turn)'); +test_valid_angle('max(0.25turn, 1.57rad, 90deg)', 'max(0.25turn, 1.57rad, 90deg)'); + +test_valid_angle('calc(min(1deg) + min(2deg))', 'calc(min(1deg) + min(2deg))'); +test_valid_angle('calc(max(1deg) + max(2deg))', 'calc(max(1deg) + max(2deg))'); +test_valid_angle('calc(1rad + min(1deg))', 'calc(1rad + min(1deg))'); +test_valid_angle('calc(min(1deg) + 1rad)', 'calc(1rad + min(1deg))'); +test_valid_angle('calc(1rad + max(1deg))', 'calc(1rad + max(1deg))'); +test_valid_angle('calc(max(1deg) + 1rad)', 'calc(1rad + max(1deg))'); </script> diff --git a/tests/wpt/web-platform-tests/css/css-values/minmax-time-serialize.html b/tests/wpt/web-platform-tests/css/css-values/minmax-time-serialize.html new file mode 100644 index 00000000000..d7dd4edb588 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-values/minmax-time-serialize.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func"> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#time"> +<link rel="help" href="https://drafts.csswg.org/css-values-4/#calc-serialize"> +<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../support/parsing-testcommon.js"></script> +<script> +function test_valid_time(value, expected) { + test_valid_value('transition-delay', value, expected); +} + +test_valid_time('min(1ms)', 'min(1ms)'); +test_valid_time('min(1s)', 'min(1s)'); +test_valid_time('max(1ms)', 'max(1ms)'); +test_valid_time('max(1s)', 'max(1s)'); + +test_valid_time('min(1ms, 2ms, 3ms)', 'min(1ms, 2ms, 3ms)'); +test_valid_time('min(3ms, 2ms, 1ms)', 'min(3ms, 2ms, 1ms)'); +test_valid_time('max(1ms, 2ms, 3ms)', 'max(1ms, 2ms, 3ms)'); +test_valid_time('max(3ms, 2ms, 1ms)', 'max(3ms, 2ms, 1ms)'); +test_valid_time('min(1000ms, 1s)', 'min(1000ms, 1s)'); +test_valid_time('min(1s, 1000ms)', 'min(1s, 1000ms)'); +test_valid_time('max(1000ms, 1s)', 'max(1000ms, 1s)'); +test_valid_time('max(1s, 1000ms)', 'max(1s, 1000ms)'); + +test_valid_time('calc(min(1s) + min(2s))', 'calc(min(1s) + min(2s))'); +test_valid_time('calc(min(2s) + min(1s))', 'calc(min(2s) + min(1s))'); +test_valid_time('calc(max(1s) + max(2s))', 'calc(max(1s) + max(2s))'); +test_valid_time('calc(max(2s) + max(1s))', 'calc(max(2s) + max(1s))'); + +test_valid_time('calc(1s + min(2s))', 'calc(1s + min(2s))'); +test_valid_time('calc(min(2s) + 1s)', 'calc(1s + min(2s))'); +test_valid_time('calc(1s + max(2s))', 'calc(1s + max(2s))'); +test_valid_time('calc(max(2s) + 1s)', 'calc(1s + max(2s))'); + +</script> diff --git a/tests/wpt/web-platform-tests/docs/running-tests/from-local-system.md b/tests/wpt/web-platform-tests/docs/running-tests/from-local-system.md index d1a5177894a..2d44ecb7d2f 100644 --- a/tests/wpt/web-platform-tests/docs/running-tests/from-local-system.md +++ b/tests/wpt/web-platform-tests/docs/running-tests/from-local-system.md @@ -145,4 +145,5 @@ Additional browser-specific documentation: chrome_android android_webview safari + webkitgtk_minibrowser ``` diff --git a/tests/wpt/web-platform-tests/docs/running-tests/webkitgtk_minibrowser.md b/tests/wpt/web-platform-tests/docs/running-tests/webkitgtk_minibrowser.md new file mode 100644 index 00000000000..b12859bcca9 --- /dev/null +++ b/tests/wpt/web-platform-tests/docs/running-tests/webkitgtk_minibrowser.md @@ -0,0 +1,32 @@ +# WebKitGTK MiniBrowser + + +To be able to run tests with the WebKitGTK MiniBrowser you need the +following packages installed: + +* Fedora: `webkit2gtk3-devel` +* Debian or Ubuntu: `webkit2gtk-driver` + + +The WebKitGTK MiniBrowser is not installed on the default binary path. +The `wpt` script will try to automatically locate it, but if you need +to run it manually you can find it on any of this paths: + +* Fedora: `/usr/libexec/webkit2gtk-4.0/MiniBrowser` +* Debian or Ubuntu: `/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/MiniBrowser` + * Note: if the machine architecture is not `x86_64`, then it will be located + inside: + `/usr/lib/${TRIPLET}/webkit2gtk-4.0/MiniBrowser` + where `TRIPLET=$(gcc -dumpmachine)` + + +Known issues: + +* On a docker container WebKitWebDriver fails to listen on localhost, +because the docker container doesn't provide an IPv6 localhost address. +To workaround this issue, manually tell it to only listen on IPv4 localhost +by passing this parameter to wpt run: `--webdriver-arg=--host=127.0.0.1` +Example: +```bash +./wpt run --webdriver-arg=--host=127.0.0.1 webkitgtk_minibrowser TESTS +``` diff --git a/tests/wpt/web-platform-tests/feature-policy/resources/feature-policy-battery.html b/tests/wpt/web-platform-tests/feature-policy/resources/feature-policy-battery.html new file mode 100644 index 00000000000..dff4b3290d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/feature-policy/resources/feature-policy-battery.html @@ -0,0 +1,9 @@ +<script> +'use strict'; + +Promise.resolve().then(() => navigator.getBattery()).then(battery => { + window.parent.postMessage({ enabled: true }, '*'); +}, error => { + window.parent.postMessage({ enabled: false }, '*'); +}); +</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 50fe71a2c6f..72aec0b7542 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 @@ -95,8 +95,20 @@ function addTest(func, desc) { promiseTest: false}); } +function addPromiseTest(func, desc) { + testList.push( + {tests: [ + {func: func.bind(null, C), + desc: desc + " (cross-origin)"}, + {func: func.bind(null, E), + desc: desc + " (same-origin + document.domain)"}, + {func: func.bind(null, G), + desc: desc + " (cross-site)"}], + promiseTest: true}); +} + /** - * A similar helper, but for the subframes that load frame-with-then.html + * Similar helpers, but for the subframes that load frame-with-then.html */ function addThenTest(func, desc) { testList.push( @@ -110,8 +122,17 @@ function addThenTest(func, desc) { promiseTest: false}); } -function addPromiseTest(func, desc) { - testList.push({tests:[{func, desc}], promiseTest: true}); } +function addPromiseThenTest(func, desc) { + testList.push( + {tests: [ + {func: func.bind(null, D), + desc: desc + " (cross-origin)"}, + {func: func.bind(null, F), + desc: desc + " (same-origin + document.domain)"}, + {func: func.bind(null, H), + desc: desc + " (cross-site)"}], + promiseTest: true}); +} /* * Basic sanity testing. @@ -135,20 +156,64 @@ addTest(function(win) { * Also tests for [[GetOwnProperty]] and [[HasOwnProperty]] behavior. */ -var whitelistedWindowIndices = ['0', '1']; -var whitelistedWindowPropNames = ['location', 'postMessage', 'window', 'frames', 'self', 'top', 'parent', - 'opener', 'closed', 'close', 'blur', 'focus', 'length', 'then']; -whitelistedWindowPropNames = whitelistedWindowPropNames.concat(whitelistedWindowIndices); -whitelistedWindowPropNames.sort(); -var whitelistedLocationPropNames = ['href', 'replace', 'then']; -whitelistedLocationPropNames.sort(); var whitelistedSymbols = [Symbol.toStringTag, Symbol.hasInstance, Symbol.isConcatSpreadable]; -var whitelistedWindowProps = whitelistedWindowPropNames.concat(whitelistedSymbols); +var windowWhitelists = { + namedFrames: ['donotleakme'], + indices: ['0', '1'], + getters: ['location', 'window', 'frames', 'self', 'top', 'parent', + 'opener', 'closed', 'length'], + setters: ['location'], + methods: ['postMessage', 'close', 'blur', 'focus'], + // These are methods which return promises and, therefore, when called with a + // cross-origin `this` object, do not throw immediately, but instead return a + // Promise which rejects with the same SecurityError that they would + // otherwise throw. They are not, however, cross-origin accessible. + promiseMethods: ['createImageBitmap', 'fetch'], +} +windowWhitelists.propNames = Array.from(new Set([...windowWhitelists.indices, + ...windowWhitelists.getters, + ...windowWhitelists.setters, + ...windowWhitelists.methods, + 'then'])).sort(); +windowWhitelists.props = windowWhitelists.propNames.concat(whitelistedSymbols); + +var locationWhitelists = { + getters: [], + setters: ['href'], + methods: ['replace'], + promiseMethods: [], +} +locationWhitelists.propNames = Array.from(new Set([...locationWhitelists.getters, + ...locationWhitelists.setters, + ...locationWhitelists.methods, + 'then'])).sort(); + +// Define various sets of arguments to call cross-origin methods with. Arguments +// for any cross-origin-callable method must be valid, and should aim to have no +// side-effects. Any method without an entry in this list will be called with +// an empty arguments list. +var methodArgs = new Map(Object.entries({ + // As a basic smoke test, we call one cross-origin-inaccessible method with + // both valid and invalid arguments to make sure that it rejects with the + // same SecurityError regardless. + assign: [ + [], + ["javascript:undefined"], + ], + // Note: If we post a message to frame.html with a matching origin, its + // "onmessage" handler will change its `document.domain`, and potentially + // invalidate subsequent tests, so be sure to only pass non-matching origins. + postMessage: [ + ["foo", "http://does-not.exist/"], + ["foo", {}], + ], + replace: [["javascript:undefined"]], +})); addTest(function(win) { for (var prop in window) { - if (whitelistedWindowProps.indexOf(prop) != -1) { + if (windowWhitelists.props.indexOf(prop) != -1) { win[prop]; // Shouldn't throw. Object.getOwnPropertyDescriptor(win, prop); // Shouldn't throw. assert_true(Object.prototype.hasOwnProperty.call(win, prop), "hasOwnProperty for " + String(prop)); @@ -162,6 +227,11 @@ addTest(function(win) { if (prop != 'location') assert_throws("SecurityError", function() { win[prop] = undefined; }, "Should throw when writing to " + prop + " on Window"); } + for (var prop of windowWhitelists.namedFrames) { + win[prop]; // Shouldn't throw. + Object.getOwnPropertyDescriptor(win, prop); // Shouldn't throw. + assert_true(Object.prototype.hasOwnProperty.call(win, prop), "hasOwnProperty for " + String(prop)); + } for (var prop in location) { if (prop == 'replace') { win.location[prop]; // Shouldn't throw. @@ -186,6 +256,60 @@ addTest(function(win) { } }, "Only whitelisted properties are accessible cross-origin"); +addPromiseTest(async function(win, test_obj) { + async function checkProperties(objName, whitelists) { + var localObj = window[objName]; + var otherObj = win[objName]; + + for (var prop in localObj) { + let desc; + for (let obj = localObj; !desc; obj = Object.getPrototypeOf(obj)) { + desc = Object.getOwnPropertyDescriptor(obj, prop); + + } + + if ("value" in desc) { + if (typeof desc.value === "function" && String(desc.value).includes("[native code]")) { + if (whitelists.promiseMethods.includes(prop)) { + await promise_rejects(test_obj, "SecurityError", desc.value.call(otherObj), + `Should throw when calling ${objName}.${prop} with cross-origin this object`); + } else if (!whitelists.methods.includes(prop)) { + for (let args of methodArgs.get(prop) || [[]]) { + assert_throws("SecurityError", desc.value.bind(otherObj, ...args), + `Should throw when calling ${objName}.${prop} with cross-origin this object`); + } + + } else { + for (let args of methodArgs.get(prop) || [[]]) { + desc.value.apply(otherObj, args); // Shouldn't throw. + } + } + } + } else { + if (desc.get) { + if (whitelists.getters.includes(prop)) { + desc.get.call(otherObj); // Shouldn't throw. + } else { + assert_throws("SecurityError", desc.get.bind(otherObj), + `Should throw when calling ${objName}.${prop} getter with cross-origin this object`); + } + } + if (desc.set) { + if (whitelists.setters.includes(prop)) { + desc.set.call(otherObj, "javascript:undefined"); // Shouldn't throw. + } else { + assert_throws("SecurityError", desc.set.bind(otherObj, "foo"), + `Should throw when calling ${objName}.${prop} setter with cross-origin this object`); + } + } + } + } + } + + await checkProperties("location", locationWhitelists); + await checkProperties("window", windowWhitelists); +}, "Only whitelisted properties are usable as cross-origin this objects"); + /* * ES Internal Methods. */ @@ -291,7 +415,7 @@ function checkPropertyDescriptor(desc, propName, expectWritable) { } addTest(function(win) { - whitelistedWindowProps.forEach(function(prop) { + windowWhitelists.props.forEach(function(prop) { var desc = Object.getOwnPropertyDescriptor(win, prop); checkPropertyDescriptor(desc, prop, prop == 'location'); }); @@ -367,9 +491,9 @@ addTest(function(win) { let i = 0; for (var prop in win) { i++; - assert_true(whitelistedWindowIndices.includes(prop), prop + " is not safelisted for a cross-origin Window"); + assert_true(windowWhitelists.indices.includes(prop), prop + " is not safelisted for a cross-origin Window"); } - assert_equals(i, whitelistedWindowIndices.length, "Enumerate all enumerable safelisted cross-origin Window properties"); + assert_equals(i, windowWhitelists.indices.length, "Enumerate all enumerable safelisted cross-origin Window properties"); i = 0; for (var prop in win.location) { i++; @@ -383,13 +507,13 @@ addTest(function(win) { addTest(function(win) { assert_array_equals(Object.getOwnPropertyNames(win).sort(), - whitelistedWindowPropNames, + windowWhitelists.propNames, "Object.getOwnPropertyNames() gives the right answer for cross-origin Window"); assert_array_equals(Object.keys(win).sort(), - whitelistedWindowIndices, + windowWhitelists.indices, "Object.keys() gives the right answer for cross-origin Window"); assert_array_equals(Object.getOwnPropertyNames(win.location).sort(), - whitelistedLocationPropNames, + locationWhitelists.propNames, "Object.getOwnPropertyNames() gives the right answer for cross-origin Location"); assert_equals(Object.keys(win.location).length, 0, "Object.keys() gives the right answer for cross-origin Location"); @@ -405,16 +529,16 @@ addTest(function(win) { addTest(function(win) { var allWindowProps = Reflect.ownKeys(win); - indexedWindowProps = allWindowProps.slice(0, whitelistedWindowIndices.length); + indexedWindowProps = allWindowProps.slice(0, windowWhitelists.indices.length); stringWindowProps = allWindowProps.slice(0, -1 * whitelistedSymbols.length); symbolWindowProps = allWindowProps.slice(-1 * whitelistedSymbols.length); // stringWindowProps should have "then" last in this case. Do this // check before we call stringWindowProps.sort() below. assert_equals(stringWindowProps[stringWindowProps.length - 1], "then", "'then' property should be added to the end of the string list if not there"); - assert_array_equals(indexedWindowProps, whitelistedWindowIndices, + assert_array_equals(indexedWindowProps, windowWhitelists.indices, "Reflect.ownKeys should start with the indices exposed on the cross-origin window."); - assert_array_equals(stringWindowProps.sort(), whitelistedWindowPropNames, + assert_array_equals(stringWindowProps.sort(), windowWhitelists.propNames, "Reflect.ownKeys should continue with the cross-origin window properties for a cross-origin Window."); assert_array_equals(symbolWindowProps, whitelistedSymbols, "Reflect.ownKeys should end with the cross-origin symbols for a cross-origin Window."); @@ -422,7 +546,7 @@ addTest(function(win) { var allLocationProps = Reflect.ownKeys(win.location); stringLocationProps = allLocationProps.slice(0, -1 * whitelistedSymbols.length); symbolLocationProps = allLocationProps.slice(-1 * whitelistedSymbols.length); - assert_array_equals(stringLocationProps.sort(), whitelistedLocationPropNames, + assert_array_equals(stringLocationProps.sort(), locationWhitelists.propNames, "Reflect.ownKeys should start with the cross-origin window properties for a cross-origin Location.") assert_array_equals(symbolLocationProps, whitelistedSymbols, "Reflect.ownKeys should end with the cross-origin symbols for a cross-origin Location.") @@ -507,59 +631,23 @@ addTest(function(win) { assert_equals({}.toString.call(win.location), "[object Object]"); }, "{}.toString.call() does the right thing on cross-origin objects"); -addPromiseTest(function() { - return Promise.resolve(C).then((arg) => { - assert_equals(arg, C); - }); -}, "Resolving a promise with a cross-origin window without a 'then' subframe should work (cross-origin)."); - -addPromiseTest(function() { - return Promise.resolve(E).then((arg) => { - assert_equals(arg, E); - }); -}, "Resolving a promise with a cross-origin window without a 'then' subframe should work (same-origin + document.domain)."); - -addPromiseTest(function() { - return Promise.resolve(G).then((arg) => { - assert_equals(arg, G); - }); -}, "Resolving a promise with a cross-origin window without a 'then' subframe should work (cross-site)."); - -addPromiseTest(function() { - return Promise.resolve(D).then((arg) => { - assert_equals(arg, D); - }); -}, "Resolving a promise with a cross-origin window with a 'then' subframe should work (cross-origin)."); - -addPromiseTest(function() { - return Promise.resolve(F).then((arg) => { - assert_equals(arg, F); +addPromiseTest(function(win) { + return Promise.resolve(win).then((arg) => { + assert_equals(arg, win); }); -}, "Resolving a promise with a cross-origin window with a 'then' subframe should work (same-origin + document.domain)."); +}, "Resolving a promise with a cross-origin window without a 'then' subframe should work"); -addPromiseTest(function() { - return Promise.resolve(H).then((arg) => { - assert_equals(arg, H); +addPromiseThenTest(function(win) { + return Promise.resolve(win).then((arg) => { + assert_equals(arg, win); }); -}, "Resolving a promise with a cross-origin window with a 'then' subframe should work (cross-site)."); +}, "Resolving a promise with a cross-origin window with a 'then' subframe should work"); -addPromiseTest(function() { - return Promise.resolve(D.location).then((arg) => { - assert_equals(arg, D.location); +addPromiseThenTest(function(win) { + return Promise.resolve(win.location).then((arg) => { + assert_equals(arg, win.location); }); -}, "Resolving a promise with a cross-origin location should work (cross-origin)."); - -addPromiseTest(function() { - return Promise.resolve(F.location).then((arg) => { - assert_equals(arg, F.location); - }); -}, "Resolving a promise with a cross-origin location should work (same-origin + document.domain)."); - -addPromiseTest(function() { - return Promise.resolve(H.location).then((arg) => { - assert_equals(arg, H.location); - }); -}, "Resolving a promise with a cross-origin location should work (cross-site)."); +}, "Resolving a promise with a cross-origin location should work"); addTest(function(win) { var desc = Object.getOwnPropertyDescriptor(window, "onmouseenter"); @@ -598,19 +686,22 @@ function testDone() { } } -function runNextTest() { +async function runNextTest() { var entry = testList.shift(); if (entry.promiseTest) { - test(function() { - assert_equals(entry.tests.length, 1, "We can't handle this yet"); - }); - promise_test(() => entry.tests[0].func().finally(testDone), entry.tests[0].desc); + for (let t of entry.tests) { + await new Promise(resolve => { + promise_test(test_obj => { + return new Promise(res => res(t.func(test_obj))).finally(resolve); + }, t.desc); + }); + } } else { - for (t of entry.tests) { + for (let t of entry.tests) { test(t.func, t.desc); } - testDone(); } + testDone(); } reloadSubframes(runNextTest); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/img.complete.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/img.complete.html index dcacf43db2d..d8d5a84eb79 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/img.complete.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/img.complete.html @@ -1,9 +1,7 @@ <!DOCTYPE HTML> <title>DOM img complete Test</title> -<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> +<meta charset=UTF-8> <link rel="author" title="Anselm Hannemann" href="http://anselm-hannemann.com/" /> -<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-img-complete" /> -<meta name="assert" content="Tests the complete status of the img-element"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -82,42 +80,41 @@ }, "img src and srcset omitted on image after it started a load"); // test if set to true after img is completely available - var t = async_test("async src complete test"); - - t.step(function(){ + async_test(t => { var loaded = false; - document.getElementById("imgTestTag3").onload = t.step_func_done(function(){ + const img = document.getElementById("imgTestTag3"); + img.onload = t.step_func_done(function(){ assert_false(loaded); loaded = true; - assert_true(document.getElementById("imgTestTag3").complete); - var currentSrc = document.getElementById("imgTestTag3").currentSrc; + assert_true(img.complete); + var currentSrc = img.currentSrc; var expectedUrl = new URL("3.jpg", window.location); assert_equals(new URL(currentSrc).pathname, expectedUrl.pathname); }, "Only one onload, despite setting the src twice"); - document.getElementById("imgTestTag3").src = 'test' + Math.random(); + img.src = 'test' + Math.random(); //test if img.complete is set to false if src is changed - assert_false(document.getElementById("imgTestTag3").complete, "src changed, should be set to false") + assert_false(img.complete, "src changed, should be set to false") //change src again, should make only one request as per 'await stable state' - document.getElementById("imgTestTag3").src = '3.jpg?nocache=' + Math.random(); - }); + img.src = '3.jpg?nocache=' + Math.random(); + }, "async src complete test"); - var t1 = async_test("async srcset complete test"); - t1.step(function(){ + async_test(t => { var loaded = false; - document.getElementById("imgTestTag5").onload = t1.step_func_done(function(){ + const img = document.getElementById("imgTestTag5") + img.onload = t.step_func_done(function(){ assert_false(loaded); loaded = true; - assert_true(document.getElementById("imgTestTag5").complete); + assert_true(img.complete); }, "Only one onload, despite setting the srcset twice"); //Test if src, srcset is omitted - assert_true(document.getElementById("imgTestTag5").complete) - document.getElementById("imgTestTag5").srcset = "/images/green-256x256.png 1x"; + assert_true(img.complete) + img.srcset = "/images/green-256x256.png 1x"; //test if img.complete is set to false if srcset is present - assert_false(document.getElementById("imgTestTag5").complete, "srcset present, should be set to false"); + assert_false(img.complete, "srcset present, should be set to false"); //change src again, should make only one request as per 'await stable state' - document.getElementById("imgTestTag5").srcset="/images/green-256x256.png 1.6x" - }); + img.srcset="/images/green-256x256.png 1.6x" + }, "async srcset complete test"); // https://html.spec.whatwg.org/multipage/multipage/embedded-content-1.html#update-the-image-data // says to "await a stable state" before fetching so we use a separate <script> @@ -125,86 +122,79 @@ </script> <script> // test: The final task that is queued by the networking task source once the resource has been fetched has been queued, but has not yet been run, and the img element is not in the broken state - async_test(function(t) { + test(function() { assert_false(imageInstance.complete, "imageInstance.complete should be false"); var startTime = Date.now(); while (true) { - if (Date.now() - startTime > 2000) - assert_unreached('.complete didn\'t change to true'); - if (imageInstance.complete === true) break; + if (Date.now() - startTime > 2000) { + assert_false(imageInstance.complete, "imageInstance.complete should remain false"); + break; + } + if (imageInstance.complete === true) { + assert_unreached(".complete should not change within a task"); + } } - t.done(); }, - 'IDL attribute complete returns true when image resource has been fetched but not run yet & image is not in broken state'); + 'IDL attribute complete cannot "randomly" change during a task'); // test if broken img does not pass - var t2 = async_test("async src broken test"); - var img4 = document.getElementById("imgTestTag4"); + async_test(t => { + const img = document.getElementById("imgTestTag4"); - t2.step( - function(){ - img4.src = 'brokenimg.jpg'; + img.src = 'brokenimg.jpg'; //test if img.complete is set to false if src is changed - assert_false(img4.complete, "src changed to broken img, should be set to false"); - }); + assert_false(img.complete, "src changed to broken img, should be set to false"); - img4.onload = img4.onerror = t2.step_func(function(event){ - assert_equals(event.type, "error"); - assert_true(img4.complete); - t2.done(); - }); + img.onload = img.onerror = t.step_func_done(function(event){ + assert_equals(event.type, "error"); + assert_true(img.complete); + }); + }, "async src broken test"); - var t3 = async_test("async src removal test"); - t3.step(function() { + async_test(t => { var img = document.createElement("img"); assert_true(img.complete); img.src = `3.jpg?nocache=${Math.random()}`; assert_false(img.complete); - img.onload = this.step_func_done(() => { + img.onload = t.step_func_done(() => { assert_true(img.complete); img.removeAttribute("src"); assert_true(img.complete, "Should be complete, since we removed the src"); }); - }); + }, "async src removal test"); - var t4 = async_test("async srcset removal test"); - t4.step(function() { + async_test(t => { var img = document.createElement("img"); assert_true(img.complete); img.srcset = `3.jpg?nocache=${Math.random()} 1x`; assert_false(img.complete); - img.onload = this.step_func_done(() => { + img.onload = t.step_func_done(() => { assert_true(img.complete); img.removeAttribute("srcset"); assert_true(img.complete, "Should be complete, since we removed the srcset"); }); - }); + }, "async srcset removal test"); - var t5 = async_test("async src available image lookup test"); - t5.step(function() { + async_test(t => { var preload = document.createElement("img"); var url = `3.jpg?nocache=${Math.random()}`; preload.src = url; - preload.onload = this.step_func_done(function() { + preload.onload = t.step_func_done(function() { var img = document.createElement("img"); assert_true(img.complete); img.src = url; assert_true(img.complete, "Should be complete because we should hit the available image cache"); }); - }); + }, "async src available image lookup test"); - var t6 = async_test("async pending request test"); - t6.step(function() { + async_test(t => { var img = document.createElement("img"); img.src = `3.jpg?nocache=${Math.random()}`; - img.onload = this.step_func_done(function() { + img.onload = t.step_func_done(function() { assert_true(img.complete); img.src = `3.jpg?nocache=${Math.random()}`; - // This is not strictly per spec, but that's a spec bug. See - // https://github.com/whatwg/html/issues/4884 assert_false(img.complete, "Should not be complete because we have started a new load"); }); - }); - + }, "async pending request test"); </script> diff --git a/tests/wpt/web-platform-tests/interfaces/animation-worklet.idl b/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl index 02deca73a3a..4aca84e5a02 100644 --- a/tests/wpt/web-platform-tests/interfaces/animation-worklet.idl +++ b/tests/wpt/web-platform-tests/interfaces/css-animation-worklet.idl @@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT // Content was automatically extracted by Reffy into reffy-reports // (https://github.com/tidoust/reffy-reports) -// Source: CSS Animation Worklet API (https://wicg.github.io/animation-worklet/) +// Source: CSS Animation Worklet API (https://drafts.css-houdini.org/css-animationworklet-1/) [Exposed=Window] partial namespace CSS { diff --git a/tests/wpt/web-platform-tests/interfaces/dom.idl b/tests/wpt/web-platform-tests/interfaces/dom.idl index 03a0201b16f..d1557a676ef 100644 --- a/tests/wpt/web-platform-tests/interfaces/dom.idl +++ b/tests/wpt/web-platform-tests/interfaces/dom.idl @@ -3,9 +3,10 @@ // (https://github.com/tidoust/reffy-reports) // Source: DOM Standard (https://dom.spec.whatwg.org/) -[Constructor(DOMString type, optional EventInit eventInitDict = {}), - Exposed=(Window,Worker,AudioWorklet)] +[Exposed=(Window,Worker,AudioWorklet)] interface Event { + constructor(DOMString type, optional EventInit eventInitDict = {}); + readonly attribute DOMString type; readonly attribute EventTarget? target; readonly attribute EventTarget? srcElement; // historical @@ -45,9 +46,10 @@ partial interface Window { [Replaceable] readonly attribute any event; // historical }; -[Constructor(DOMString type, optional CustomEventInit eventInitDict = {}), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface CustomEvent : Event { + constructor(DOMString type, optional CustomEventInit eventInitDict = {}); + readonly attribute any detail; void initCustomEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false, optional any detail = null); @@ -57,9 +59,10 @@ dictionary CustomEventInit : EventInit { any detail = null; }; -[Constructor, - Exposed=(Window,Worker,AudioWorklet)] +[Exposed=(Window,Worker,AudioWorklet)] interface EventTarget { + constructor(); + void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options = {}); void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options = {}); boolean dispatchEvent(Event event); @@ -78,13 +81,15 @@ dictionary AddEventListenerOptions : EventListenerOptions { boolean once = false; }; -[Constructor, - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface AbortController { + constructor(); + [SameObject] readonly attribute AbortSignal signal; void abort(); }; + [Exposed=(Window,Worker)] interface AbortSignal : EventTarget { readonly attribute boolean aborted; @@ -155,9 +160,10 @@ interface HTMLCollection { getter Element? namedItem(DOMString name); }; -[Constructor(MutationCallback callback), - Exposed=Window] +[Exposed=Window] interface MutationObserver { + constructor(MutationCallback callback); + void observe(Node target, optional MutationObserverInit options = {}); void disconnect(); sequence<MutationRecord> takeRecords(); @@ -250,9 +256,10 @@ dictionary GetRootNodeOptions { boolean composed = false; }; -[Constructor, - Exposed=Window] +[Exposed=Window] interface Document : Node { + constructor(); + [SameObject] readonly attribute DOMImplementation implementation; readonly attribute USVString URL; readonly attribute USVString documentURI; @@ -315,15 +322,16 @@ interface DocumentType : Node { readonly attribute DOMString systemId; }; -[Constructor, - Exposed=Window] +[Exposed=Window] interface DocumentFragment : Node { + constructor(); }; [Exposed=Window] interface ShadowRoot : DocumentFragment { readonly attribute ShadowRootMode mode; readonly attribute Element host; + attribute EventHandler onslotchange; }; enum ShadowRootMode { "open", "closed" }; @@ -376,6 +384,7 @@ interface Element : Node { dictionary ShadowRootInit { required ShadowRootMode mode; + boolean delegatesFocus = false; }; [Exposed=Window, @@ -414,12 +423,14 @@ interface CharacterData : Node { void replaceData(unsigned long offset, unsigned long count, DOMString data); }; -[Constructor(optional DOMString data = ""), - Exposed=Window] +[Exposed=Window] interface Text : CharacterData { + constructor(optional DOMString data = ""); + [NewObject] Text splitText(unsigned long offset); readonly attribute DOMString wholeText; }; + [Exposed=Window] interface CDATASection : Text { }; @@ -427,9 +438,9 @@ interface CDATASection : Text { interface ProcessingInstruction : CharacterData { readonly attribute DOMString target; }; -[Constructor(optional DOMString data = ""), - Exposed=Window] +[Exposed=Window] interface Comment : CharacterData { + constructor(optional DOMString data = ""); }; [Exposed=Window] @@ -448,14 +459,15 @@ dictionary StaticRangeInit { required unsigned long endOffset; }; -[Constructor(StaticRangeInit init), - Exposed=Window] +[Exposed=Window] interface StaticRange : AbstractRange { + constructor(StaticRangeInit init); }; -[Constructor, - Exposed=Window] +[Exposed=Window] interface Range : AbstractRange { + constructor(); + readonly attribute Node commonAncestorContainer; void setStart(Node node, unsigned long offset); @@ -602,7 +614,9 @@ interface mixin XPathEvaluatorBase { }; Document includes XPathEvaluatorBase; -[Exposed=Window, Constructor] -interface XPathEvaluator {}; +[Exposed=Window] +interface XPathEvaluator { + constructor(); +}; XPathEvaluator includes XPathEvaluatorBase; diff --git a/tests/wpt/web-platform-tests/interfaces/html.idl b/tests/wpt/web-platform-tests/interfaces/html.idl index d856cd578aa..8347c5d4cdc 100644 --- a/tests/wpt/web-platform-tests/interfaces/html.idl +++ b/tests/wpt/web-platform-tests/interfaces/html.idl @@ -100,9 +100,10 @@ partial interface mixin DocumentOrShadowRoot { readonly attribute Element? activeElement; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLElement : Element { + [HTMLConstructor] constructor(); + // metadata attributes [CEReactions] attribute DOMString title; [CEReactions] attribute DOMString lang; @@ -128,9 +129,10 @@ HTMLElement includes DocumentAndElementEventHandlers; HTMLElement includes ElementContentEditable; HTMLElement includes HTMLOrSVGElement; -// Note: intentionally not [HTMLConstructor] [Exposed=Window] -interface HTMLUnknownElement : HTMLElement { }; +interface HTMLUnknownElement : HTMLElement { + // Note: intentionally no [HTMLConstructor] +}; interface mixin HTMLOrSVGElement { [SameObject] readonly attribute DOMStringMap dataset; @@ -150,32 +152,37 @@ interface DOMStringMap { [CEReactions] deleter void (DOMString name); }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLHtmlElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] -interface HTMLHeadElement : HTMLElement {}; +[Exposed=Window] +interface HTMLHeadElement : HTMLElement { + [HTMLConstructor] constructor(); +}; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTitleElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString text; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLBaseElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString href; [CEReactions] attribute DOMString target; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLLinkElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString href; [CEReactions] attribute DOMString? crossOrigin; [CEReactions] attribute DOMString rel; @@ -194,9 +201,10 @@ interface HTMLLinkElement : HTMLElement { }; HTMLLinkElement includes LinkStyle; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLMetaElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString name; [CEReactions] attribute DOMString httpEquiv; [CEReactions] attribute DOMString content; @@ -204,50 +212,57 @@ interface HTMLMetaElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLStyleElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString media; // also has obsolete members }; HTMLStyleElement includes LinkStyle; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLBodyElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; HTMLBodyElement includes WindowEventHandlers; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLHeadingElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLParagraphElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLHRElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLPreElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLQuoteElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString cite; }; @@ -261,9 +276,10 @@ interface HTMLOListElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLUListElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; @@ -282,21 +298,24 @@ interface HTMLLIElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLDListElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLDivElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLAnchorElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString target; [CEReactions] attribute DOMString download; [CEReactions] attribute USVString ping; @@ -313,9 +332,10 @@ interface HTMLAnchorElement : HTMLElement { }; HTMLAnchorElement includes HTMLHyperlinkElementUtils; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLDataElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString value; }; @@ -325,13 +345,15 @@ interface HTMLTimeElement : HTMLElement { [CEReactions] attribute DOMString dateTime; }; -[Exposed=Window, - HTMLConstructor] -interface HTMLSpanElement : HTMLElement {}; +[Exposed=Window] +interface HTMLSpanElement : HTMLElement { + [HTMLConstructor] constructor(); +}; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLBRElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; @@ -349,20 +371,23 @@ interface mixin HTMLHyperlinkElementUtils { [CEReactions] attribute USVString hash; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLModElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString cite; [CEReactions] attribute DOMString dateTime; }; -[Exposed=Window, - HTMLConstructor] -interface HTMLPictureElement : HTMLElement {}; +[Exposed=Window] +interface HTMLPictureElement : HTMLElement { + [HTMLConstructor] constructor(); +}; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLSourceElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString src; [CEReactions] attribute DOMString type; [CEReactions] attribute USVString srcset; @@ -395,9 +420,10 @@ interface HTMLImageElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLIFrameElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString src; [CEReactions] attribute DOMString srcdoc; [CEReactions] attribute DOMString name; @@ -415,9 +441,10 @@ interface HTMLIFrameElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLEmbedElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString src; [CEReactions] attribute DOMString type; [CEReactions] attribute DOMString width; @@ -427,9 +454,10 @@ interface HTMLEmbedElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLObjectElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString data; [CEReactions] attribute DOMString type; [CEReactions] attribute DOMString name; @@ -451,9 +479,10 @@ interface HTMLObjectElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLParamElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString name; [CEReactions] attribute DOMString value; @@ -476,9 +505,10 @@ interface HTMLVideoElement : HTMLMediaElement { NamedConstructor=Audio(optional DOMString src)] interface HTMLAudioElement : HTMLMediaElement {}; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTrackElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString kind; [CEReactions] attribute USVString src; [CEReactions] attribute DOMString srclang; @@ -679,16 +709,18 @@ dictionary TrackEventInit : EventInit { (VideoTrack or AudioTrack or TextTrack)? track = null; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLMapElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString name; [SameObject] readonly attribute HTMLCollection areas; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLAreaElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString alt; [CEReactions] attribute DOMString coords; [CEReactions] attribute DOMString shape; @@ -703,9 +735,10 @@ interface HTMLAreaElement : HTMLElement { }; HTMLAreaElement includes HTMLHyperlinkElementUtils; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTableElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute HTMLTableCaptionElement? caption; HTMLTableCaptionElement createCaption(); [CEReactions] void deleteCaption(); @@ -728,23 +761,26 @@ interface HTMLTableElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTableCaptionElement : HTMLElement { + [HTMLConstructor] constructor(); + // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTableColElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute unsigned long span; // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTableSectionElement : HTMLElement { + [HTMLConstructor] constructor(); + [SameObject] readonly attribute HTMLCollection rows; HTMLTableRowElement insertRow(optional long index = -1); [CEReactions] void deleteRow(long index); @@ -752,9 +788,10 @@ interface HTMLTableSectionElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTableRowElement : HTMLElement { + [HTMLConstructor] constructor(); + readonly attribute long rowIndex; readonly attribute long sectionRowIndex; [SameObject] readonly attribute HTMLCollection cells; @@ -764,9 +801,10 @@ interface HTMLTableRowElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTableCellElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute unsigned long colSpan; [CEReactions] attribute unsigned long rowSpan; [CEReactions] attribute DOMString headers; @@ -807,17 +845,19 @@ interface HTMLFormElement : HTMLElement { boolean reportValidity(); }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLLabelElement : HTMLElement { + [HTMLConstructor] constructor(); + readonly attribute HTMLFormElement? form; [CEReactions] attribute DOMString htmlFor; readonly attribute HTMLElement? control; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLInputElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString accept; [CEReactions] attribute DOMString alt; [CEReactions] attribute DOMString autocomplete; @@ -878,9 +918,10 @@ interface HTMLInputElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLButtonElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute boolean disabled; readonly attribute HTMLFormElement? form; [CEReactions] attribute USVString formAction; @@ -902,9 +943,10 @@ interface HTMLButtonElement : HTMLElement { readonly attribute NodeList labels; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLSelectElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString autocomplete; [CEReactions] attribute boolean disabled; readonly attribute HTMLFormElement? form; @@ -938,15 +980,17 @@ interface HTMLSelectElement : HTMLElement { readonly attribute NodeList labels; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLDataListElement : HTMLElement { + [HTMLConstructor] constructor(); + [SameObject] readonly attribute HTMLCollection options; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLOptGroupElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute boolean disabled; [CEReactions] attribute DOMString label; }; @@ -966,9 +1010,10 @@ interface HTMLOptionElement : HTMLElement { readonly attribute long index; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTextAreaElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString autocomplete; [CEReactions] attribute unsigned long cols; [CEReactions] attribute DOMString dirName; @@ -1006,9 +1051,10 @@ interface HTMLTextAreaElement : HTMLElement { void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction); }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLOutputElement : HTMLElement { + [HTMLConstructor] constructor(); + [SameObject, PutForwards=value] readonly attribute DOMTokenList htmlFor; readonly attribute HTMLFormElement? form; [CEReactions] attribute DOMString name; @@ -1027,18 +1073,20 @@ interface HTMLOutputElement : HTMLElement { readonly attribute NodeList labels; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLProgressElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute double value; [CEReactions] attribute double max; readonly attribute double position; readonly attribute NodeList labels; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLMeterElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute double value; [CEReactions] attribute double min; [CEReactions] attribute double max; @@ -1048,9 +1096,10 @@ interface HTMLMeterElement : HTMLElement { readonly attribute NodeList labels; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLFieldSetElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute boolean disabled; readonly attribute HTMLFormElement? form; [CEReactions] attribute DOMString name; @@ -1067,9 +1116,10 @@ interface HTMLFieldSetElement : HTMLElement { void setCustomValidity(DOMString error); }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLLegendElement : HTMLElement { + [HTMLConstructor] constructor(); + readonly attribute HTMLFormElement? form; // also has obsolete members @@ -1107,15 +1157,17 @@ dictionary FormDataEventInit : EventInit { required FormData formData; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLDetailsElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute boolean open; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLDialogElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute boolean open; attribute DOMString returnValue; [CEReactions] void show(); @@ -1123,9 +1175,10 @@ interface HTMLDialogElement : HTMLElement { [CEReactions] void close(optional DOMString returnValue); }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLScriptElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute USVString src; [CEReactions] attribute DOMString type; [CEReactions] attribute boolean noModule; @@ -1139,15 +1192,17 @@ interface HTMLScriptElement : HTMLElement { // also has obsolete members }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLTemplateElement : HTMLElement { + [HTMLConstructor] constructor(); + readonly attribute DocumentFragment content; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLSlotElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString name; sequence<Node> assignedNodes(optional AssignedNodesOptions options = {}); sequence<Element> assignedElements(optional AssignedNodesOptions options = {}); @@ -1395,19 +1450,21 @@ interface TextMetrics { readonly attribute double ideographicBaseline; }; -[Constructor(unsigned long sw, unsigned long sh), - Constructor(Uint8ClampedArray data, unsigned long sw, optional unsigned long sh), - Exposed=(Window,Worker), +[Exposed=(Window,Worker), Serializable] interface ImageData { + constructor(unsigned long sw, unsigned long sh); + constructor(Uint8ClampedArray data, unsigned long sw, optional unsigned long sh); + readonly attribute unsigned long width; readonly attribute unsigned long height; readonly attribute Uint8ClampedArray data; }; -[Constructor(optional (Path2D or DOMString) path), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface Path2D { + constructor(optional (Path2D or DOMString) path); + void addPath(Path2D path, optional DOMMatrix2DInit transform = {}); }; Path2D includes CanvasPath; @@ -1431,8 +1488,10 @@ dictionary ImageEncodeOptions { enum OffscreenRenderingContextId { "2d", "bitmaprenderer", "webgl", "webgl2" }; -[Constructor([EnforceRange] unsigned long long width, [EnforceRange] unsigned long long height), Exposed=(Window,Worker), Transferable] +[Exposed=(Window,Worker), Transferable] interface OffscreenCanvas : EventTarget { + constructor([EnforceRange] unsigned long long width, [EnforceRange] unsigned long long height); + attribute [EnforceRange] unsigned long long width; attribute [EnforceRange] unsigned long long height; @@ -1737,9 +1796,10 @@ interface mixin NavigatorOnLine { readonly attribute boolean onLine; }; -[Constructor(DOMString type, optional ErrorEventInit eventInitDict = {}), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface ErrorEvent : Event { + constructor(DOMString type, optional ErrorEventInit eventInitDict = {}); + readonly attribute DOMString message; readonly attribute USVString filename; readonly attribute unsigned long lineno; @@ -1755,8 +1815,10 @@ dictionary ErrorEventInit : EventInit { any error = null; }; -[Constructor(DOMString type, PromiseRejectionEventInit eventInitDict), Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface PromiseRejectionEvent : Event { + constructor(DOMString type, PromiseRejectionEventInit eventInitDict); + readonly attribute Promise<any> promise; readonly attribute any reason; }; @@ -1834,6 +1896,7 @@ interface mixin GlobalEventHandlers { attribute EventHandler onseeked; attribute EventHandler onseeking; attribute EventHandler onselect; + attribute EventHandler onslotchange; attribute EventHandler onstalled; attribute EventHandler onsubmit; attribute EventHandler onsuspend; @@ -2012,9 +2075,10 @@ interface mixin AnimationFrameProvider { Window includes AnimationFrameProvider; DedicatedWorkerGlobalScope includes AnimationFrameProvider; -[Constructor(DOMString type, optional MessageEventInit eventInitDict = {}), - Exposed=(Window,Worker,AudioWorklet)] +[Exposed=(Window,Worker,AudioWorklet)] interface MessageEvent : Event { + constructor(DOMString type, optional MessageEventInit eventInitDict = {}); + readonly attribute any data; readonly attribute USVString origin; readonly attribute DOMString lastEventId; @@ -2034,8 +2098,10 @@ dictionary MessageEventInit : EventInit { typedef (WindowProxy or MessagePort or ServiceWorker) MessageEventSource; -[Constructor(USVString url, optional EventSourceInit eventSourceInitDict = {}), Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface EventSource : EventTarget { + constructor(USVString url, optional EventSourceInit eventSourceInitDict = {}); + readonly attribute USVString url; readonly attribute boolean withCredentials; @@ -2057,8 +2123,10 @@ dictionary EventSourceInit { }; enum BinaryType { "blob", "arraybuffer" }; -[Constructor(USVString url, optional (DOMString or sequence<DOMString>) protocols = []), Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface WebSocket : EventTarget { + constructor(USVString url, optional (DOMString or sequence<DOMString>) protocols = []); + readonly attribute USVString url; // ready state @@ -2086,9 +2154,10 @@ interface WebSocket : EventTarget { void send(ArrayBufferView data); }; -[Constructor(DOMString type, optional CloseEventInit eventInitDict = {}), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface CloseEvent : Event { + constructor(DOMString type, optional CloseEventInit eventInitDict = {}); + readonly attribute boolean wasClean; readonly attribute unsigned short code; readonly attribute USVString reason; @@ -2122,8 +2191,10 @@ dictionary PostMessageOptions { sequence<object> transfer = []; }; -[Constructor(DOMString name), Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface BroadcastChannel : EventTarget { + constructor(DOMString name); + readonly attribute DOMString name; void postMessage(any message); void close(); @@ -2172,9 +2243,10 @@ interface mixin AbstractWorker { attribute EventHandler onerror; }; -[Constructor(USVString scriptURL, optional WorkerOptions options = {}), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface Worker : EventTarget { + constructor(USVString scriptURL, optional WorkerOptions options = {}); + void terminate(); void postMessage(any message, sequence<object> transfer); @@ -2193,9 +2265,10 @@ enum WorkerType { "classic", "module" }; Worker includes AbstractWorker; -[Constructor(USVString scriptURL, optional (DOMString or WorkerOptions) options = {}), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface SharedWorker : EventTarget { + constructor(USVString scriptURL, optional (DOMString or WorkerOptions) options = {}); + readonly attribute MessagePort port; }; SharedWorker includes AbstractWorker; @@ -2264,9 +2337,10 @@ dictionary StorageEventInit : EventInit { Storage? storageArea = null; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLMarqueeElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString behavior; [CEReactions] attribute DOMString bgColor; [CEReactions] attribute DOMString direction; @@ -2287,17 +2361,19 @@ interface HTMLMarqueeElement : HTMLElement { void stop(); }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLFrameSetElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString cols; [CEReactions] attribute DOMString rows; }; HTMLFrameSetElement includes WindowEventHandlers; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLFrameElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute DOMString name; [CEReactions] attribute DOMString scrolling; [CEReactions] attribute USVString src; @@ -2348,9 +2424,10 @@ partial interface HTMLTableColElement { [CEReactions] attribute DOMString width; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLDirectoryElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute boolean compact; }; @@ -2367,9 +2444,10 @@ partial interface HTMLEmbedElement { [CEReactions] attribute DOMString name; }; -[Exposed=Window, - HTMLConstructor] +[Exposed=Window] interface HTMLFontElement : HTMLElement { + [HTMLConstructor] constructor(); + [CEReactions] attribute [TreatNullAs=EmptyString] DOMString color; [CEReactions] attribute DOMString face; [CEReactions] attribute DOMString size; diff --git a/tests/wpt/web-platform-tests/interfaces/scroll-animations.idl b/tests/wpt/web-platform-tests/interfaces/scroll-animations.idl index f2560d9ffc8..8fd67a7af7b 100644 --- a/tests/wpt/web-platform-tests/interfaces/scroll-animations.idl +++ b/tests/wpt/web-platform-tests/interfaces/scroll-animations.idl @@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT // Content was automatically extracted by Reffy into reffy-reports // (https://github.com/tidoust/reffy-reports) -// Source: Scroll-linked Animations (https://wicg.github.io/scroll-animations/) +// Source: Scroll-linked Animations (https://drafts.csswg.org/scroll-animations-1/) enum ScrollDirection { "block", diff --git a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl index b08bc7d4069..c3e53350901 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl @@ -13,8 +13,6 @@ dictionary NDEFMessageInit { sequence<NDEFRecordInit> records; }; -typedef any NDEFRecordData; - [Exposed=Window] interface NDEFRecord { constructor(NDEFRecordInit recordInit); @@ -34,7 +32,7 @@ dictionary NDEFRecordInit { USVString mediaType; USVString id; - NDEFRecordData data; + any data; }; typedef DOMString NDEFRecordType; diff --git a/tests/wpt/web-platform-tests/interfaces/webxr.idl b/tests/wpt/web-platform-tests/interfaces/webxr.idl index b03aa556bb8..012b67cf246 100644 --- a/tests/wpt/web-platform-tests/interfaces/webxr.idl +++ b/tests/wpt/web-platform-tests/interfaces/webxr.idl @@ -9,7 +9,7 @@ partial interface Navigator { [SecureContext, Exposed=Window] interface XR : EventTarget { // Methods - Promise<void> supportsSession(XRSessionMode mode); + Promise<boolean> isSessionSupported(XRSessionMode mode); [NewObject] Promise<XRSession> requestSession(XRSessionMode mode, optional XRSessionInit options = {}); // Events @@ -122,9 +122,9 @@ enum XREye { readonly attribute long height; }; -[SecureContext, Exposed=Window, - Constructor(optional DOMPointInit position = {}, optional DOMPointInit orientation = {})] +[SecureContext, Exposed=Window] interface XRRigidTransform { + constructor(optional DOMPointInit position = {}, optional DOMPointInit orientation = {}); [SameObject] readonly attribute DOMPointReadOnly position; [SameObject] readonly attribute DOMPointReadOnly orientation; readonly attribute Float32Array matrix; @@ -180,10 +180,11 @@ dictionary XRWebGLLayerInit { double framebufferScaleFactor = 1.0; }; -[SecureContext, Exposed=Window, Constructor(XRSession session, - XRWebGLRenderingContext context, - optional XRWebGLLayerInit layerInit = {})] +[SecureContext, Exposed=Window] interface XRWebGLLayer { + constructor(XRSession session, + XRWebGLRenderingContext context, + optional XRWebGLLayerInit layerInit = {}); // Attributes readonly attribute boolean antialias; readonly attribute boolean ignoreDepthValues; @@ -207,8 +208,9 @@ partial interface mixin WebGLRenderingContextBase { Promise<void> makeXRCompatible(); }; -[SecureContext, Exposed=Window, Constructor(DOMString type, XRSessionEventInit eventInitDict)] +[SecureContext, Exposed=Window] interface XRSessionEvent : Event { + constructor(DOMString type, XRSessionEventInit eventInitDict); [SameObject] readonly attribute XRSession session; }; @@ -216,8 +218,9 @@ dictionary XRSessionEventInit : EventInit { required XRSession session; }; -[SecureContext, Exposed=Window, Constructor(DOMString type, XRInputSourceEventInit eventInitDict)] +[SecureContext, Exposed=Window] interface XRInputSourceEvent : Event { + constructor(DOMString type, XRInputSourceEventInit eventInitDict); [SameObject] readonly attribute XRFrame frame; [SameObject] readonly attribute XRInputSource inputSource; }; @@ -227,8 +230,9 @@ dictionary XRInputSourceEventInit : EventInit { required XRInputSource inputSource; }; -[SecureContext, Exposed=Window, Constructor(DOMString type, XRInputSourcesChangeEventInit eventInitDict)] +[SecureContext, Exposed=Window] interface XRInputSourcesChangeEvent : Event { + constructor(DOMString type, XRInputSourcesChangeEventInit eventInitDict); [SameObject] readonly attribute XRSession session; [SameObject] readonly attribute FrozenArray<XRInputSource> added; [SameObject] readonly attribute FrozenArray<XRInputSource> removed; @@ -241,8 +245,9 @@ dictionary XRInputSourcesChangeEventInit : EventInit { }; -[SecureContext, Exposed=Window, Constructor(DOMString type, XRReferenceSpaceEventInit eventInitDict)] +[SecureContext, Exposed=Window] interface XRReferenceSpaceEvent : Event { + constructor(DOMString type, XRReferenceSpaceEventInit eventInitDict); [SameObject] readonly attribute XRReferenceSpace referenceSpace; [SameObject] readonly attribute XRRigidTransform? transform; }; diff --git a/tests/wpt/web-platform-tests/interfaces/xhr.idl b/tests/wpt/web-platform-tests/interfaces/xhr.idl index 27660bfd573..de478734ca9 100644 --- a/tests/wpt/web-platform-tests/interfaces/xhr.idl +++ b/tests/wpt/web-platform-tests/interfaces/xhr.idl @@ -28,9 +28,10 @@ enum XMLHttpRequestResponseType { "text" }; -[Constructor, - Exposed=(Window,DedicatedWorker,SharedWorker)] +[Exposed=(Window,DedicatedWorker,SharedWorker)] interface XMLHttpRequest : XMLHttpRequestEventTarget { + constructor(); + // event handler attribute EventHandler onreadystatechange; @@ -64,11 +65,13 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget { readonly attribute USVString responseText; [Exposed=Window] readonly attribute Document? responseXML; }; + typedef (File or USVString) FormDataEntryValue; -[Constructor(optional HTMLFormElement form), - Exposed=(Window,Worker)] +[Exposed=(Window,Worker)] interface FormData { + constructor(optional HTMLFormElement form); + void append(USVString name, USVString value); void append(USVString name, Blob blobValue, optional USVString filename); void delete(USVString name); @@ -79,9 +82,11 @@ interface FormData { void set(USVString name, Blob blobValue, optional USVString filename); iterable<USVString, FormDataEntryValue>; }; -[Constructor(DOMString type, optional ProgressEventInit eventInitDict), - Exposed=(Window,DedicatedWorker,SharedWorker)] + +[Exposed=(Window,DedicatedWorker,SharedWorker)] interface ProgressEvent : Event { + constructor(DOMString type, optional ProgressEventInit eventInitDict = {}); + readonly attribute boolean lengthComputable; readonly attribute unsigned long long loaded; readonly attribute unsigned long long total; diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-error-member-manual.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-error-member-manual.https.html index b3a539ef8f4..9d25e9e1524 100644 --- a/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-error-member-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-error-member-manual.https.html @@ -46,5 +46,5 @@ function retryShowsErrorMember(button) { </ol> <small> If you find a buggy test, please <a href="https://github.com/w3c/web-platform-tests/issues">file a bug</a> - and tag one of the <a href="https://github.com/w3c/web-platform-tests/blob/master/payment-request/OWNERS">owners</a>. + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">owners</a>. </small> diff --git a/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-payer-member-manual.https.html b/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-payer-member-manual.https.html index 8dbc760fd07..ad5ad72fbb6 100644 --- a/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-payer-member-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/PaymentValidationErrors/retry-shows-payer-member-manual.https.html @@ -61,5 +61,5 @@ function retryShowsPayerMember(button, error) { </ol> <small> If you find a buggy test, please <a href="https://github.com/w3c/web-platform-tests/issues">file a bug</a> - and tag one of the <a href="https://github.com/w3c/web-platform-tests/blob/master/payment-request/OWNERS">owners</a>. + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">owners</a>. </small> 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 c3e2ba71322..837ab79cbef 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 @@ -94,5 +94,5 @@ function retryShowsShippingAddressMember(button, error) { </ol> <small> If you find a buggy test, please <a href="https://github.com/w3c/web-platform-tests/issues">file a bug</a> - and tag one of the <a href="https://github.com/w3c/web-platform-tests/blob/master/payment-request/OWNERS">owners</a>. + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">owners</a>. </small> diff --git a/tests/wpt/web-platform-tests/payment-request/payment-response/onpayerdetailchange-attribute-manual.https.html b/tests/wpt/web-platform-tests/payment-request/payment-response/onpayerdetailchange-attribute-manual.https.html index f3f3f76357c..5731952c0eb 100644 --- a/tests/wpt/web-platform-tests/payment-request/payment-response/onpayerdetailchange-attribute-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/payment-response/onpayerdetailchange-attribute-manual.https.html @@ -69,5 +69,5 @@ function runTest(button, options, expected){ </ol> <small> If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> - and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/OWNERS">owners</a>. + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">owners</a>. </small> diff --git a/tests/wpt/web-platform-tests/payment-request/payment-response/payerdetailschange-updateWith-immediate-manual.https.html b/tests/wpt/web-platform-tests/payment-request/payment-response/payerdetailschange-updateWith-immediate-manual.https.html index 912ceaa6086..5747a2ac0cb 100644 --- a/tests/wpt/web-platform-tests/payment-request/payment-response/payerdetailschange-updateWith-immediate-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/payment-response/payerdetailschange-updateWith-immediate-manual.https.html @@ -64,5 +64,5 @@ function testImmediateUpdate({ textContent: testName }) { </ol> <small> If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> - and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/OWNERS">owners</a>. + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">owners</a>. </small> diff --git a/tests/wpt/web-platform-tests/payment-request/payment-response/payerdetailschange-updateWith-manual.https.html b/tests/wpt/web-platform-tests/payment-request/payment-response/payerdetailschange-updateWith-manual.https.html index 30e27088e7d..2e6a31a19f5 100644 --- a/tests/wpt/web-platform-tests/payment-request/payment-response/payerdetailschange-updateWith-manual.https.html +++ b/tests/wpt/web-platform-tests/payment-request/payment-response/payerdetailschange-updateWith-manual.https.html @@ -52,5 +52,5 @@ function runTest(button) { </ol> <small> If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> - and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/OWNERS">owners</a>. + and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">owners</a>. </small> diff --git a/tests/wpt/web-platform-tests/tools/ci/manifest_build.py b/tests/wpt/web-platform-tests/tools/ci/manifest_build.py index de17089214e..a563c3b8831 100644 --- a/tests/wpt/web-platform-tests/tools/ci/manifest_build.py +++ b/tests/wpt/web-platform-tests/tools/ci/manifest_build.py @@ -184,10 +184,8 @@ def main(): pr = get_pr(owner, repo, head_rev) if pr is None: - # This should only really happen during testing - tag_name = "merge_commit_%s" % head_rev - else: - tag_name = "merge_pr_%s" % pr + return Status.FAIL + tag_name = "merge_pr_%s" % pr manifest_path = os.path.expanduser(os.path.join("~", "meta", "MANIFEST.json")) diff --git a/tests/wpt/web-platform-tests/tools/manifest/download.py b/tests/wpt/web-platform-tests/tools/manifest/download.py index 8f3e9d5fd65..3736d54f15d 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/download.py +++ b/tests/wpt/web-platform-tests/tools/manifest/download.py @@ -66,7 +66,7 @@ def score_name(name): # type: (str) -> Optional[int] """Score how much we like each filename, lower wins, None rejects""" - # Accept both ways of naming the manfest asset, even though + # Accept both ways of naming the manifest asset, even though # there's no longer a reason to include the commit sha. if name.startswith("MANIFEST-") or name.startswith("MANIFEST."): if zstandard and name.endswith("json.zst"): diff --git a/tests/wpt/web-platform-tests/tools/manifest/update.py b/tests/wpt/web-platform-tests/tools/manifest/update.py index 166a7c9cadd..bfbaaf89712 100755 --- a/tests/wpt/web-platform-tests/tools/manifest/update.py +++ b/tests/wpt/web-platform-tests/tools/manifest/update.py @@ -77,7 +77,7 @@ def create_parser(): help="Never attempt to download the manifest.") parser.add_argument( "--cache-root", action="store", default=os.path.join(wpt_root, ".wptcache"), - help="Path in which to store any caches (default <tests_root>/.wptcache/") + help="Path in which to store any caches (default <tests_root>/.wptcache/)") return parser diff --git a/tests/wpt/web-platform-tests/tools/wpt/browser.py b/tests/wpt/web-platform-tests/tools/wpt/browser.py index ca86c55d45f..c04162fe2a1 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/browser.py +++ b/tests/wpt/web-platform-tests/tools/wpt/browser.py @@ -1104,6 +1104,42 @@ class WebKit(Browser): return None +class WebKitGTKMiniBrowser(WebKit): + + def find_binary(self, venv_path=None, channel=None): + libexecpaths = ["/usr/libexec/webkit2gtk-4.0"] # Fedora path + triplet = "x86_64-linux-gnu" + # Try to use GCC to detect this machine triplet + gcc = find_executable("gcc") + if gcc: + try: + triplet = call(gcc, "-dumpmachine").strip() + except subprocess.CalledProcessError: + pass + # Add Debian/Ubuntu path + libexecpaths.append("/usr/lib/%s/webkit2gtk-4.0" % triplet) + return find_executable("MiniBrowser", os.pathsep.join(libexecpaths)) + + def find_webdriver(self, channel=None): + return find_executable("WebKitWebDriver") + + def version(self, binary=None, webdriver_binary=None): + if binary is None: + return None + try: # WebKitGTK MiniBrowser before 2.26.0 doesn't support --version + output = call(binary, "--version").strip() + except subprocess.CalledProcessError: + return None + # Example output: "WebKitGTK 2.26.1" + if output: + m = re.match(r"WebKitGTK (.+)", output) + if not m: + self.logger.warning("Failed to extract version from: %s" % output) + return None + return m.group(1) + return None + + class Epiphany(Browser): """Epiphany-specific interface.""" diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py index bea36c7c24a..077d4a7eb87 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/run.py +++ b/tests/wpt/web-platform-tests/tools/wpt/run.py @@ -583,6 +583,29 @@ class WebKit(BrowserSetup): pass +class WebKitGTKMiniBrowser(BrowserSetup): + name = "webkitgtk_minibrowser" + browser_cls = browser.WebKitGTKMiniBrowser + + def install(self, channel=None): + raise NotImplementedError + + def setup_kwargs(self, kwargs): + if kwargs["binary"] is None: + binary = self.browser.find_binary() + + if binary is None: + raise WptrunError("Unable to find MiniBrowser binary") + kwargs["binary"] = binary + + if kwargs["webdriver_binary"] is None: + webdriver_binary = self.browser.find_webdriver() + + if webdriver_binary is None: + raise WptrunError("Unable to find WebKitWebDriver in PATH") + kwargs["webdriver_binary"] = webdriver_binary + + class Epiphany(BrowserSetup): name = "epiphany" browser_cls = browser.Epiphany @@ -623,11 +646,12 @@ product_setup = { "sauce": Sauce, "opera": Opera, "webkit": WebKit, + "webkitgtk_minibrowser": WebKitGTKMiniBrowser, "epiphany": Epiphany, } -def setup_logging(kwargs, default_config=None): +def setup_logging(kwargs, default_config=None, formatter_defaults=None): import mozlog from wptrunner import wptrunner @@ -640,7 +664,7 @@ def setup_logging(kwargs, default_config=None): else: default_formatter = "mach" default_config = {default_formatter: sys.stdout} - wptrunner.setup_logging(kwargs, default_config) + wptrunner.setup_logging(kwargs, default_config, formatter_defaults=formatter_defaults) logger = wptrunner.logger return logger diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_browser.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_browser.py index a2e518a9d07..f691c380b7a 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_browser.py +++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_browser.py @@ -1,6 +1,8 @@ import mock import subprocess import logging +import sys +import pytest from tools.wpt import browser @@ -35,3 +37,63 @@ def test_safari_version_errors(mocked_check_output): mocked_check_output.return_value = 'dummy' mocked_check_output.side_effect = subprocess.CalledProcessError(1, 'cmd') assert safari.version(webdriver_binary="safaridriver") is None + + +@mock.patch('subprocess.check_output') +def test_webkitgtk_minibrowser_version(mocked_check_output): + webkitgtk_minibrowser = browser.WebKitGTKMiniBrowser(logger) + + mocked_check_output.return_value = 'WebKitGTK 2.26.1\n' + assert webkitgtk_minibrowser.version(binary='MiniBrowser') == '2.26.1' + + +@mock.patch('subprocess.check_output') +def test_webkitgtk_minibrowser_version_errors(mocked_check_output): + webkitgtk_minibrowser = browser.WebKitGTKMiniBrowser(logger) + + # No binary + assert webkitgtk_minibrowser.version() is None + + # `MiniBrowser --version` return gibberish + mocked_check_output.return_value = 'gibberish' + assert webkitgtk_minibrowser.version(binary='MiniBrowser') is None + + # `MiniBrowser --version` fails (as it does for MiniBrowser <= 2.26.0) + mocked_check_output.return_value = 'dummy' + mocked_check_output.side_effect = subprocess.CalledProcessError(1, 'cmd') + assert webkitgtk_minibrowser.version(binary='MiniBrowser') is None + + +# The test below doesn't work on Windows because distutils find_binary() +# on Windows only works if the binary name ends with a ".exe" suffix. +# But, WebKitGTK itself doesn't support Windows, so lets skip the test. +@pytest.mark.skipif(sys.platform.startswith('win'), reason='test not needed on Windows') +@mock.patch('os.path.isfile') +def test_webkitgtk_minibrowser_find_binary(mocked_os_path_isfile): + webkitgtk_minibrowser = browser.WebKitGTKMiniBrowser(logger) + + # No MiniBrowser found + mocked_os_path_isfile.side_effect = lambda path: path == '/etc/passwd' + assert webkitgtk_minibrowser.find_binary() is None + + # Found on the default Fedora path + fedora_minibrowser_path = '/usr/libexec/webkit2gtk-4.0/MiniBrowser' + mocked_os_path_isfile.side_effect = lambda path: path == fedora_minibrowser_path + assert webkitgtk_minibrowser.find_binary() == fedora_minibrowser_path + + # Found on the default Debian path for AMD64 (gcc not available) + debian_minibrowser_path_amd64 = '/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/MiniBrowser' + mocked_os_path_isfile.side_effect = lambda path: path == debian_minibrowser_path_amd64 + assert webkitgtk_minibrowser.find_binary() == debian_minibrowser_path_amd64 + + # Found on the default Debian path for AMD64 (gcc available but gives an error) + debian_minibrowser_path_amd64 = '/usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/MiniBrowser' + mocked_os_path_isfile.side_effect = lambda path: path in [debian_minibrowser_path_amd64, '/usr/bin/gcc'] + with mock.patch('subprocess.check_output', return_value = 'error', side_effect = subprocess.CalledProcessError(1, 'cmd')): + assert webkitgtk_minibrowser.find_binary() == debian_minibrowser_path_amd64 + + # Found on the default Debian path for ARM64 (gcc available) + debian_minibrowser_path_arm64 = '/usr/lib/aarch64-linux-gnu/webkit2gtk-4.0/MiniBrowser' + mocked_os_path_isfile.side_effect = lambda path: path in [debian_minibrowser_path_arm64, '/usr/bin/gcc'] + with mock.patch('subprocess.check_output', return_value = 'aarch64-linux-gnu'): + assert webkitgtk_minibrowser.find_binary() == debian_minibrowser_path_arm64 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt index 3584c93a199..9eeb836230c 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt +++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements.txt @@ -3,6 +3,6 @@ mozinfo==1.1.0 mozlog==4.2.0 mozdebug==0.1.1 pillow==6.1.0 -urllib3[secure]==1.25.5 +urllib3[secure]==1.25.6 requests==2.22.0 six==1.12.0 diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py index 75ec775658c..957d2a689ac 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/__init__.py @@ -38,4 +38,5 @@ product_list = ["android_webview", "servodriver", "opera", "webkit", + "webkitgtk_minibrowser", "epiphany"] diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py new file mode 100644 index 00000000000..65f78125ad7 --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/webkitgtk_minibrowser.py @@ -0,0 +1,72 @@ +from .base import get_timeout_multiplier # noqa: F401 +from .webkit import WebKitBrowser +from ..executors import executor_kwargs as base_executor_kwargs +from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401 + WebDriverRefTestExecutor) # noqa: F401 +from ..executors.executorwebkit import WebKitDriverWdspecExecutor # noqa: F401 + +__wptrunner__ = {"product": "webkitgtk_minibrowser", + "check_args": "check_args", + "browser": "WebKitGTKMiniBrowser", + "browser_kwargs": "browser_kwargs", + "executor": {"testharness": "WebDriverTestharnessExecutor", + "reftest": "WebDriverRefTestExecutor", + "wdspec": "WebKitDriverWdspecExecutor"}, + "executor_kwargs": "executor_kwargs", + "env_extras": "env_extras", + "env_options": "env_options", + "run_info_extras": "run_info_extras", + "timeout_multiplier": "get_timeout_multiplier"} + + +def check_args(**kwargs): + pass + + +def browser_kwargs(test_type, run_info_data, config, **kwargs): + return {"binary": kwargs["binary"], + "webdriver_binary": kwargs["webdriver_binary"], + "webdriver_args": kwargs.get("webdriver_args")} + + +def capabilities(server_config, **kwargs): + args = kwargs.get("binary_args", []) + if "--automation" not in args: + args.append("--automation") + + return { + "browserName": "MiniBrowser", + "webkitgtk:browserOptions": { + "binary": kwargs["binary"], + "args": args, + "certificates": [ + {"host": server_config["browser_host"], + "certificateFile": kwargs["host_cert_path"]}]}} + + +def executor_kwargs(test_type, server_config, cache_manager, run_info_data, + **kwargs): + executor_kwargs = base_executor_kwargs(test_type, server_config, + cache_manager, run_info_data, **kwargs) + executor_kwargs["close_after_done"] = True + executor_kwargs["capabilities"] = capabilities(server_config, **kwargs) + return executor_kwargs + + +def env_extras(**kwargs): + return [] + + +def env_options(): + return {} + + +def run_info_extras(**kwargs): + return {"webkit_port": "gtk"} + + +class WebKitGTKMiniBrowser(WebKitBrowser): + def __init__(self, logger, binary=None, webdriver_binary=None, + webdriver_args=None): + WebKitBrowser.__init__(self, logger, binary, webdriver_binary, + webdriver_args) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py index 6751f8907f4..69cee744879 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptlogging.py @@ -4,13 +4,14 @@ from mozlog import commandline, stdadapter, set_default_logger from mozlog.structuredlog import StructuredLogger, log_levels -def setup(args, defaults): +def setup(args, defaults, formatter_defaults=None): logger = args.pop('log', None) if logger: set_default_logger(logger) StructuredLogger._logger_states["web-platform-tests"] = logger._state else: - logger = commandline.setup_logging("web-platform-tests", args, defaults) + logger = commandline.setup_logging("web-platform-tests", args, defaults, + formatter_defaults=formatter_defaults) setup_stdlib_logger() for name in args.keys(): diff --git a/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html b/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html index 16e6d2a7d8d..11ef305064d 100644 --- a/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html +++ b/tests/wpt/web-platform-tests/trusted-types/trusted-types-reporting.tentative.https.html @@ -54,6 +54,24 @@ try { fn(); assert_unreached(); } catch (err) { /* ignore */ } } + // Test the "sample" field of the event. + // TODO(vogelheim): The current set of tests allows for more variance in the + // sample reports than the current spec draft does. Once the spec has + // been finalized, we should clamp this down to check byte-for-byte + // against the values mandated by the spec. + + function expect_sample(s) { return e => { + assert_true(e.sample.includes(s), + `expected "${e.sample}" to include "${s}".`); + return e; + } } + + function expect_blocked_uri(s) { return e => { + assert_true(e.blockedURI === s, + `expected "${e.blockedUri}" to be "${s}".`); + return e; + } } + // A sample policy we use to test TrustedTypes.createPolicy behaviour. const id = x => x; const a_policy = { @@ -80,6 +98,8 @@ let p = Promise.resolve() .then(promise_violation("trusted-types one")) .then(promise_violation("trusted-types two")) + .then(expect_sample("three")) + .then(expect_blocked_uri("trusted-types-policy")) .then(promise_flush()); expect_throws(_ => TrustedTypes.createPolicy("three", a_policy)); flush(); @@ -131,18 +151,6 @@ return p; }, "Trusted Type violation report: assign trusted HTML to html; no report"); - // Test the "sample" field of the event. - // TODO(vogelheim): The current set of tests allows for more variance in the - // sample reports than the current spec draft does. Once the spec has - // been finalized, we should clamp this down to check byte-for-byte - // against the values mandated by the spec. - - function expect_sample(s) { return e => { - assert_true(e.sample.includes(s), - `expected "${e.sample}" to include "${s}".`); - return e; - } } - promise_test(t => { let p = Promise.resolve() .then(promise_violation("trusted-types two")) diff --git a/tests/wpt/web-platform-tests/uievents/click/auxclick_event.html b/tests/wpt/web-platform-tests/uievents/click/auxclick_event.html index 9f4ffed96e6..8bb2e137f5b 100644 --- a/tests/wpt/web-platform-tests/uievents/click/auxclick_event.html +++ b/tests/wpt/web-platform-tests/uievents/click/auxclick_event.html @@ -23,6 +23,7 @@ <div id="target"></div> <script> var test_auxclick = async_test("auxclick event sequence received."); + var actions_promise; var target = document.querySelector('#target'); document.addEventListener('contextmenu', event => { event.preventDefault(); }); ['click', 'dblclick'].forEach(eventName => { @@ -60,13 +61,16 @@ 'There should be two auxclick events for a non-primary button double click each preceded by one mousemove and one mouseup'); assert_equals(event.detail, click_count, 'detail attribute of auxclick should be the click count.'); }); - test_auxclick.done(); + // Make sure the test finishes after all the input actions are completed. + actions_promise.then( () => { + test_auxclick.done(); + }); } }); // Inject mouse double click events. var actions = new test_driver.Actions(); - actions.pointerMove(0, 0, {origin: target}) + actions_promise = actions.pointerMove(0, 0, {origin: target}) .pointerDown({button: actions.ButtonType.MIDDLE}) .pointerUp({button: actions.ButtonType.MIDDLE}) .pointerDown({button: actions.ButtonType.MIDDLE}) diff --git a/tests/wpt/web-platform-tests/uievents/click/click_event_target_child_parent.html b/tests/wpt/web-platform-tests/uievents/click/click_event_target_child_parent.html index 1e07e434039..a09e5532aff 100644 --- a/tests/wpt/web-platform-tests/uievents/click/click_event_target_child_parent.html +++ b/tests/wpt/web-platform-tests/uievents/click/click_event_target_child_parent.html @@ -38,6 +38,7 @@ <button id="done">Done</button> <script> var test_click_target = async_test("Click targets the nearest common ancestor"); + var actions_promise; // Prevent drag to avoid interfering with the click. document.addEventListener('dragstart', (e) => e.preventDefault()); @@ -59,12 +60,15 @@ "mousedown@link1,mouseup@link_container1,click@link_container1,mousedown@link_container2,mouseup@link2,click@link_container2", "Click should be sent to the nearest common ancestor"); }); - test_click_target.done(); + // Make sure the test finishes after all the input actions are completed. + actions_promise.then( () => { + test_click_target.done(); + }); }); // Inject mouse events. var actions = new test_driver.Actions(); - actions.pointerMove(0, 0, {origin: document.getElementById('link1')}) + actions_promise = actions.pointerMove(0, 0, {origin: document.getElementById('link1')}) .pointerDown() .pointerMove(0, 0, {origin: document.getElementById('link_container1')}) .pointerUp() diff --git a/tests/wpt/web-platform-tests/uievents/click/click_event_target_siblings.html b/tests/wpt/web-platform-tests/uievents/click/click_event_target_siblings.html index 0306b6f05f0..24d64dc9ac3 100644 --- a/tests/wpt/web-platform-tests/uievents/click/click_event_target_siblings.html +++ b/tests/wpt/web-platform-tests/uievents/click/click_event_target_siblings.html @@ -51,6 +51,7 @@ <button id="done">Done</button> <script> var test_click_target = async_test("Click targets the nearest common ancestor"); + var actions_promise; // Prevent drag to avoid interfering with the click. document.addEventListener('dragstart', (e) => e.preventDefault()); @@ -72,12 +73,15 @@ "mousedown@red_div,mouseup@blue_div,click@div_container,mousedown@button1,mouseup@button2,click@button_container,mousedown@link1,mouseup@link2,click@link_container", "Click should be sent to the nearest common ancestor"); }); - test_click_target.done(); + // Make sure the test finishes after all the input actions are completed. + actions_promise.then( () => { + test_click_target.done(); + }); }); // Inject mouse events. var actions = new test_driver.Actions(); - actions.pointerMove(0, 0, {origin: document.getElementById('red_div')}) + actions_promise = actions.pointerMove(0, 0, {origin: document.getElementById('red_div')}) .pointerDown() .pointerMove(0, 0, {origin: document.getElementById('blue_div')}) .pointerUp() diff --git a/tests/wpt/web-platform-tests/uievents/click/mouse-dblclick-event.html b/tests/wpt/web-platform-tests/uievents/click/mouse-dblclick-event.html index 5bf0bbc07e0..31a600b3cb7 100644 --- a/tests/wpt/web-platform-tests/uievents/click/mouse-dblclick-event.html +++ b/tests/wpt/web-platform-tests/uievents/click/mouse-dblclick-event.html @@ -25,15 +25,19 @@ function run() { var testDoubleClick = async_test('Tests that the double click event is correctly generated by sending pointerDown, pointerUp, pointerDown and pointerUp for the mouse type.'); var elem = document.getElementById("click_area"); + var actions_promise; elem.addEventListener('dblclick', function(e) { testDoubleClick.step(function () { assert_equals(e.target.id, "click_area"); assert_equals(e.detail, 2); }); - testDoubleClick.done(); + // Make sure the test finishes after all the input actions are completed. + actions_promise.then( () => { + testDoubleClick.done(); + }); }); - new test_driver.Actions() + actions_promise = new test_driver.Actions() .pointerMove(0, 0, {origin: elem}) .pointerDown() .pointerUp() diff --git a/tests/wpt/web-platform-tests/uievents/mouse/mouse_buttons_back_forward.html b/tests/wpt/web-platform-tests/uievents/mouse/mouse_buttons_back_forward.html index 787abac4447..2323bc10269 100644 --- a/tests/wpt/web-platform-tests/uievents/mouse/mouse_buttons_back_forward.html +++ b/tests/wpt/web-platform-tests/uievents/mouse/mouse_buttons_back_forward.html @@ -15,6 +15,7 @@ var received_forward = false; const backButton = 3; const forwardButton = 4; + var actions_promise; window.addEventListener('mouseup', function(e) { if (e.button == backButton) { received_back = true; @@ -24,14 +25,17 @@ e.preventDefault(); } if (received_back && received_forward) { - testMouseUp.done(); + // Make sure the test finishes after all the input actions are completed. + actions_promise.then( () => { + testMouseUp.done(); + }); } }); function inject_input() { // First click on back button and then forward button. var actions = new test_driver.Actions(); - actions.pointerMove(0, 0, {origin: target}) + actions_promise = actions.pointerMove(0, 0, {origin: target}) .pointerDown({button: actions.ButtonType.BACK}) .pointerUp({button: actions.ButtonType.BACK}) .pointerDown({button: actions.ButtonType.FORWARD}) diff --git a/tests/wpt/web-platform-tests/worklets/animation-worklet-referrer.https.html b/tests/wpt/web-platform-tests/worklets/animation-worklet-referrer.https.html index 494e06a8472..49933dea47d 100644 --- a/tests/wpt/web-platform-tests/worklets/animation-worklet-referrer.https.html +++ b/tests/wpt/web-platform-tests/worklets/animation-worklet-referrer.https.html @@ -1,6 +1,7 @@ <!DOCTYPE html> <html> <head> + <meta name="timeout" content="long"> <script src="/common/get-host-info.sub.js"></script> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html index f258cd5a452..61cb63d75ca 100644 --- a/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html +++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html @@ -1,6 +1,7 @@ <!DOCTYPE html> <html> <head> + <meta name="timeout" content="long"> <script src="/common/get-host-info.sub.js"></script> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/worklets/layout-worklet-referrer.https.html b/tests/wpt/web-platform-tests/worklets/layout-worklet-referrer.https.html index cb383a935a2..dc7b84b350c 100644 --- a/tests/wpt/web-platform-tests/worklets/layout-worklet-referrer.https.html +++ b/tests/wpt/web-platform-tests/worklets/layout-worklet-referrer.https.html @@ -1,6 +1,7 @@ <!DOCTYPE html> <html> <head> + <meta name="timeout" content="long"> <script src="/common/get-host-info.sub.js"></script> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/worklets/paint-worklet-referrer.https.html b/tests/wpt/web-platform-tests/worklets/paint-worklet-referrer.https.html index a4b5a6f498c..8f3d82a1ddc 100644 --- a/tests/wpt/web-platform-tests/worklets/paint-worklet-referrer.https.html +++ b/tests/wpt/web-platform-tests/worklets/paint-worklet-referrer.https.html @@ -1,6 +1,7 @@ <!DOCTYPE html> <html> <head> + <meta name="timeout" content="long"> <script src="/common/get-host-info.sub.js"></script> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> diff --git a/tests/wpt/web-platform-tests/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js b/tests/wpt/web-platform-tests/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js new file mode 100644 index 00000000000..33af2258ff3 --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js @@ -0,0 +1,2 @@ +// Forward GET parameters to the server. +import '{{GET[requestor_origin]}}/worklets/resources/referrer-checker.py?referrer_policy={{GET[referrer_policy]}}&expected_referrer={{GET[expected_referrer]}}'; diff --git a/tests/wpt/web-platform-tests/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js.headers b/tests/wpt/web-platform-tests/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js.headers new file mode 100644 index 00000000000..cb762eff806 --- /dev/null +++ b/tests/wpt/web-platform-tests/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js.headers @@ -0,0 +1 @@ +Access-Control-Allow-Origin: * diff --git a/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js b/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js index 01b8e2ab57a..b3c4a048f5a 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js +++ b/tests/wpt/web-platform-tests/worklets/resources/referrer-tests.js @@ -88,6 +88,7 @@ function runReferrerTests(workletType) { // Tests for descendant script fetch ----------------------------------------- + // Referrer policy: no-referrer. promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -111,10 +112,20 @@ function runReferrerTests(workletType) { fetchType: 'descendant', referrerPolicy: 'no-referrer', scriptOrigins: { topLevel: 'remote', + descendant: 'same' } }); + }, 'Importing a same-origin script from a remote-origin worklet script ' + + 'that has "no-referrer" referrer policy should not send referrer.'); + + promise_test(() => { + return runReferrerTest({ workletType: workletType, + fetchType: 'descendant', + referrerPolicy: 'no-referrer', + scriptOrigins: { topLevel: 'remote', descendant: 'remote' } }); }, 'Importing a remote-origin script from a remote-origin worklet script ' + 'that has "no-referrer" referrer policy should not send referrer.'); + // Referrer policy: origin. promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -138,10 +149,20 @@ function runReferrerTests(workletType) { fetchType: 'descendant', referrerPolicy: 'origin', scriptOrigins: { topLevel: 'remote', + descendant: 'same' } }); + }, 'Importing a same-origin script from a remote-origin worklet script ' + + 'that has "origin" referrer policy should send referrer.'); + + promise_test(() => { + return runReferrerTest({ workletType: workletType, + fetchType: 'descendant', + referrerPolicy: 'origin', + scriptOrigins: { topLevel: 'remote', descendant: 'remote' } }); }, 'Importing a remote-origin script from a remote-origin worklet script ' + 'that has "origin" referrer policy should send referrer.'); + // Referrer policy: same-origin. promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -165,7 +186,18 @@ function runReferrerTests(workletType) { fetchType: 'descendant', referrerPolicy: 'same-origin', scriptOrigins: { topLevel: 'remote', + descendant: 'same' } }); + }, 'Importing a same-origin script from a remote-origin worklet script ' + + 'that has "same-origin" referrer policy should send referrer.'); + + promise_test(() => { + return runReferrerTest({ workletType: workletType, + fetchType: 'descendant', + referrerPolicy: 'same-origin', + scriptOrigins: { topLevel: 'remote', descendant: 'remote' } }); }, 'Importing a remote-origin script from a remote-origin worklet script ' + 'that has "same-origin" referrer policy should not send referrer.'); + + // TODO(domfarolino): Add tests for more referrer policies. } diff --git a/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html b/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html index 4817f0452a2..934e3dc41b1 100644 --- a/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html +++ b/tests/wpt/web-platform-tests/worklets/resources/referrer-window.html @@ -32,6 +32,14 @@ function createScriptURLForDecendant(scriptOrigins) { location.href); } if (scriptOrigins.topLevel === 'remote' && + scriptOrigins.descendant === 'same') { + url = new URL( + get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/' + + 'import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js'); + return url; + } + if (scriptOrigins.topLevel === 'remote' && scriptOrigins.descendant === 'remote') { return new URL( get_host_info().HTTPS_REMOTE_ORIGIN + @@ -88,6 +96,7 @@ window.onmessage = e => { } const params = new URLSearchParams; + params.append('requestor_origin', document.location.origin); params.append('referrer_policy', referrerPolicy); params.append('expected_referrer', expectedReferrer); diff --git a/tests/wpt/webgl/meta/conformance/glsl/bugs/complex-glsl-does-not-crash.html.ini b/tests/wpt/webgl/meta/conformance/glsl/bugs/complex-glsl-does-not-crash.html.ini deleted file mode 100644 index 67737132496..00000000000 --- a/tests/wpt/webgl/meta/conformance/glsl/bugs/complex-glsl-does-not-crash.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[complex-glsl-does-not-crash.html] - expected: TIMEOUT - [Overall test] - expected: NOTRUN - diff --git a/tests/wpt/webgl/meta/conformance2/rendering/canvas-resizing-with-pbo-bound.html.ini b/tests/wpt/webgl/meta/conformance2/rendering/canvas-resizing-with-pbo-bound.html.ini index 0e7c48f1481..436b6e96fe7 100644 --- a/tests/wpt/webgl/meta/conformance2/rendering/canvas-resizing-with-pbo-bound.html.ini +++ b/tests/wpt/webgl/meta/conformance2/rendering/canvas-resizing-with-pbo-bound.html.ini @@ -1,4 +1,5 @@ [canvas-resizing-with-pbo-bound.html] + expected: TIMEOUT [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL |