diff options
93 files changed, 1641 insertions, 291 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini index a9e46713244..76b398963ae 100644 --- a/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini +++ b/tests/wpt/metadata/FileAPI/url/url-in-tags-revoke.window.js.ini @@ -7,7 +7,7 @@ expected: FAIL [Opening a blob URL in a new window immediately before revoking it works.] - expected: TIMEOUT + expected: FAIL [Opening a blob URL in a noopener about:blank window immediately before revoking it works.] expected: FAIL diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index b0152f38d61..99a4907821f 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -130339,6 +130339,30 @@ {} ] ], + "css/css-lists/list-style-type-string-001a.html": [ + [ + "css/css-lists/list-style-type-string-001a.html", + [ + [ + "/css/css-lists/list-style-type-string-001-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-lists/list-style-type-string-001b.html": [ + [ + "css/css-lists/list-style-type-string-001b.html", + [ + [ + "/css/css-lists/list-style-type-string-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-lists/list-style-type-string-002.html": [ [ "css/css-lists/list-style-type-string-002.html", @@ -190757,30 +190781,6 @@ {} ] ], - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001a.html": [ - [ - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001a.html", - [ - [ - "/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001-ref.html", - "==" - ] - ], - {} - ] - ], - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001b.html": [ - [ - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001b.html", - [ - [ - "/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001-ref.html", - "==" - ] - ], - {} - ] - ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/clip-path-borderBox-1a.html": [ [ "css/vendor-imports/mozilla/mozilla-central-reftests/masking/clip-path-borderBox-1a.html", @@ -251688,6 +251688,9 @@ "css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001-ref.html": [ [] ], + "css/css-lists/list-style-type-string-001-ref.html": [ + [] + ], "css/css-lists/list-style-type-string-002-ref.html": [ [] ], @@ -263268,12 +263271,6 @@ "css/vendor-imports/mozilla/mozilla-central-reftests/images3/support/template-object-position-test.html": [ [] ], - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001-ref.html": [ - [] - ], - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/reftest.list": [ - [] - ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/blank.html": [ [] ], @@ -287766,6 +287763,9 @@ "visual-viewport/helper-resize-event-on-load-overflowing-page.html": [ [] ], + "visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini": [ + [] + ], "visual-viewport/viewport_support.js": [ [] ], @@ -320878,6 +320878,12 @@ {} ] ], + "css/css-images/animations/object-position-interpolation.html": [ + [ + "css/css-images/animations/object-position-interpolation.html", + {} + ] + ], "css/css-images/gradient/color-stops-parsing.html": [ [ "css/css-images/gradient/color-stops-parsing.html", @@ -322984,6 +322990,12 @@ {} ] ], + "css/css-pseudo/parsing/marker-supported-properties.html": [ + [ + "css/css-pseudo/parsing/marker-supported-properties.html", + {} + ] + ], "css/css-pseudo/parsing/tree-abiding-pseudo-elements.html": [ [ "css/css-pseudo/parsing/tree-abiding-pseudo-elements.html", @@ -324550,6 +324562,12 @@ {} ] ], + "css/css-size-adjust/animations/text-size-adjust-interpolation.html": [ + [ + "css/css-size-adjust/animations/text-size-adjust-interpolation.html", + {} + ] + ], "css/css-size-adjust/inheritance.html": [ [ "css/css-size-adjust/inheritance.html", @@ -327886,6 +327904,12 @@ {} ] ], + "css/css-transitions/animations/text-shadow-interpolation.html": [ + [ + "css/css-transitions/animations/text-shadow-interpolation.html", + {} + ] + ], "css/css-transitions/before-load-001.html": [ [ "css/css-transitions/before-load-001.html", @@ -354792,7 +354816,9 @@ "html/cross-origin-opener-policy/popup-redirect-cache.https.html": [ [ "html/cross-origin-opener-policy/popup-redirect-cache.https.html", - {} + { + "timeout": "long" + } ] ], "html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html": [ @@ -360530,6 +360556,12 @@ {} ] ], + "html/semantics/forms/form-submission-0/SubmitEvent.window.js": [ + [ + "html/semantics/forms/form-submission-0/SubmitEvent.window.html", + {} + ] + ], "html/semantics/forms/form-submission-0/constructing-form-data-set.html": [ [ "html/semantics/forms/form-submission-0/constructing-form-data-set.html", @@ -360578,6 +360610,14 @@ {} ] ], + "html/semantics/forms/form-submission-0/implicit-submission.optional.html": [ + [ + "html/semantics/forms/form-submission-0/implicit-submission.optional.html", + { + "testdriver": true + } + ] + ], "html/semantics/forms/form-submission-0/submission-checks.window.js": [ [ "html/semantics/forms/form-submission-0/submission-checks.window.html", @@ -360796,6 +360836,12 @@ {} ] ], + "html/semantics/forms/the-button-element/button-submit-children.html": [ + [ + "html/semantics/forms/the-button-element/button-submit-children.html", + {} + ] + ], "html/semantics/forms/the-button-element/button-type.html": [ [ "html/semantics/forms/the-button-element/button-type.html", @@ -369042,6 +369088,12 @@ {} ] ], + "loading/lazyload/image-loading-lazy-multicol-tentative.html": [ + [ + "loading/lazyload/image-loading-lazy-multicol-tentative.html", + {} + ] + ], "loading/lazyload/image-loading-lazy.tentative.html": [ [ "loading/lazyload/image-loading-lazy.tentative.html", @@ -411912,6 +411964,12 @@ {} ] ], + "svg/animations/pruning-first-interval.html": [ + [ + "svg/animations/pruning-first-interval.html", + {} + ] + ], "svg/animations/remove-animation-element-while-animation-is-running.html": [ [ "svg/animations/remove-animation-element-while-animation-is-running.html", @@ -425537,6 +425595,12 @@ {} ] ], + "webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html": [ + [ + "webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html", + {} + ] + ], "webrtc/RTCPeerConnection-setLocalDescription-pranswer.html": [ [ "webrtc/RTCPeerConnection-setLocalDescription-pranswer.html", @@ -457048,7 +457112,7 @@ "support" ], ".taskcluster.yml": [ - "27479fb57e072114e7898494468740b239c7ae92", + "6de1e280cecdece123b42950a4c0a35cf85f4a5c", "support" ], ".well-known/README.md": [ @@ -463356,27 +463420,27 @@ "support" ], "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js": [ - "c69249047bf2bfceef5001ffb5ee8fbcf9859a6c", + "37e3eb4324200c85cb65ee9f077ea7433bff7783", "testharness" ], "WebCryptoAPI/derive_bits_keys/ecdh_bits.js": [ - "fe82ffe5712e39aef2638ccf57a9695fb0197e2b", + "5cc7193aebd7942d2636d369328917b7acc3e16a", "support" ], "WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js": [ - "b212b92c74b0c318e8c32cb22735a1e29aa610eb", + "d8235fce5a74122591ee8b9462a1a66ac5da097c", "testharness" ], "WebCryptoAPI/derive_bits_keys/ecdh_keys.js": [ - "b1a0bcd485d92ef46be7908396c083b75aaf9204", + "99008e0cbbe09eab687c62b8935e85a3369e5ba0", "support" ], "WebCryptoAPI/derive_bits_keys/hkdf.https.any.js": [ - "d0d545a7d27222fede323a459fdee81e051f7106", + "02492c3741c7d1bb6f300bba51e08b911a1295bd", "testharness" ], "WebCryptoAPI/derive_bits_keys/hkdf.js": [ - "95889676c15960796a5e6d2b242d308b9c1f5afc", + "c18a433d7f9036d94fcc649b0294a68e7750e853", "support" ], "WebCryptoAPI/derive_bits_keys/hkdf_vectors.js": [ @@ -463384,11 +463448,11 @@ "support" ], "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js": [ - "539f390c8afc8bd9894f3dea35dcb94a4217489f", + "2efbe523f8cd7d5daeb4dce42b893369467f9bfe", "testharness" ], "WebCryptoAPI/derive_bits_keys/pbkdf2.js": [ - "7edc7ea5a2654ec39800cbe33b9a678bc8ee31fa", + "0403f382e1479c7c5018e91aba2ceb31b89998dc", "support" ], "WebCryptoAPI/derive_bits_keys/pbkdf2_vectors.js": [ @@ -577067,6 +577131,10 @@ "8d3b9472b2c9a2ee88dc97f907f9d16eb4fa3755", "support" ], + "css/css-images/animations/object-position-interpolation.html": [ + "055cbc8421b6af58e636729268f7323e1710458c", + "testharness" + ], "css/css-images/css-image-fallbacks-and-annotations-ref.html": [ "f3193036766e428bf946e81b7df72bfc7f4901db", "support" @@ -578459,6 +578527,18 @@ "422be2304c891fbd0c4f256bc3b87514d935fc81", "visual" ], + "css/css-lists/list-style-type-string-001-ref.html": [ + "0d1b1362873483fa1b900e2da3efe603648f791e", + "support" + ], + "css/css-lists/list-style-type-string-001a.html": [ + "f7ed6e3b342d6cd259b3df61a5445f83ab39b0f9", + "reftest" + ], + "css/css-lists/list-style-type-string-001b.html": [ + "f02bf13a73cd0ee025bf3e3d6ae9215feadb12b4", + "reftest" + ], "css/css-lists/list-style-type-string-002-ref.html": [ "8694b5f54424c9a6e96209950a5585352a836403", "support" @@ -584436,7 +584516,7 @@ "support" ], "css/css-pseudo/marker-font-properties.html": [ - "a108792fa207b22110a2a70a5d3ebf635033dd5d", + "4dd780679845a34699f31febd927dc3b774a5ffd", "reftest" ], "css/css-pseudo/marker-inherit-line-height-ref.html": [ @@ -584471,6 +584551,10 @@ "94d0c42eca8cffbd5637a1039028925c19e1f851", "reftest" ], + "css/css-pseudo/parsing/marker-supported-properties.html": [ + "451aac149dbda8eb605dadc377bfa4186a871a50", + "testharness" + ], "css/css-pseudo/parsing/tree-abiding-pseudo-elements.html": [ "05c23a3bc143ce2a005b3686af2eae2cb60cb7ba", "testharness" @@ -587396,11 +587480,11 @@ "reftest" ], "css/css-scroll-snap/scroll-target-align-002.html": [ - "7e82f030e4c3a47e84475ad440a80b907ffbe99f", + "01db026dff29c62dbbe27a4e262bb2ed715ba5ef", "reftest" ], "css/css-scroll-snap/scroll-target-align-003.html": [ - "1d6fbebbcd7f652746ece943a240ba2540a10710", + "d13efa0abb5d1a13dbb43d78301730b322322ccb", "reftest" ], "css/css-scroll-snap/scroll-target-margin-001.html": [ @@ -587408,11 +587492,11 @@ "reftest" ], "css/css-scroll-snap/scroll-target-margin-002.html": [ - "a02cf7db17517cb9bcfd56173c4b6f94cb5f1283", + "51cf553b3603f237226fa6b7d0ca33089f801a0e", "reftest" ], "css/css-scroll-snap/scroll-target-margin-003.html": [ - "d0434db515a68bb7b280edaebe8428dd705d4fc3", + "2ea8eff67c3d17b38031ca5534c8091cfa854409", "reftest" ], "css/css-scroll-snap/scroll-target-padding-001.html": [ @@ -587420,11 +587504,11 @@ "reftest" ], "css/css-scroll-snap/scroll-target-padding-002.html": [ - "3a0ca3b8519e8dc73ed9a3b19c7af0312c5d69a6", + "fbed1e132ecf3805784436c4b13889f61ff8c7ba", "reftest" ], "css/css-scroll-snap/scroll-target-padding-003.html": [ - "1e92e9be72fa17d718a6e121c5e18edf8bbcae3d", + "ccbe7b0ec97c9ba14d2ac11df1a24b032e185fe0", "reftest" ], "css/css-scroll-snap/scroll-target-snap-001.html": [ @@ -587432,11 +587516,11 @@ "reftest" ], "css/css-scroll-snap/scroll-target-snap-002.html": [ - "89df44cba28443c015032301df4c0088ed9fe228", + "28f3c124525c68fa3b108019aa6f30b0d878a0bf", "reftest" ], "css/css-scroll-snap/scroll-target-snap-003.html": [ - "3e90347a4dc9ee07e04350a6436309c673a13569", + "6fe3901e51c10b9d3d687d7b421b67e1ae6e5896", "reftest" ], "css/css-scroll-snap/scrollTo-scrollBy-snaps.html": [ @@ -587480,19 +587564,19 @@ "testharness" ], "css/css-scroll-snap/support/scroll-target-align-001-iframe.html": [ - "20922ea18ea104bd613a27fcce58a1f0e9ba70ad", + "d86a5e86d01b5806c55123f07254f71d8891dfc0", "support" ], "css/css-scroll-snap/support/scroll-target-margin-001-iframe.html": [ - "8eb5b9c863853a29eeaefa33caa89ae237278071", + "2b2c1d2d8c11228fadf4a85ac2c627f4bc3b17c5", "support" ], "css/css-scroll-snap/support/scroll-target-padding-001-iframe.html": [ - "b9467e4347fe3dd005123f7c76e6cda1596e79d8", + "9260c81b1c3c5787d7b284601ab2ca350c282e5b", "support" ], "css/css-scroll-snap/support/scroll-target-snap-001-iframe.html": [ - "1a598fa72384b40ee0331c6a3aaeaaa0fac3ae02", + "3146a3bf8824d625b1e49032343d1956f496fdf7", "support" ], "css/css-scroll-snap/unreachable-snap-positions.html": [ @@ -588963,6 +589047,10 @@ "ed3590ceef222740139a4b9d3017478c8728bb30", "support" ], + "css/css-size-adjust/animations/text-size-adjust-interpolation.html": [ + "1d7e54b734158eb234a4d653b239f9de04187aac", + "testharness" + ], "css/css-size-adjust/inheritance.html": [ "730bcfe2b59534534c2ddec225ceb70fbb7700a3", "testharness" @@ -602775,6 +602863,10 @@ "f11374e47b1876d06231854907c3082b5d4774ab", "support" ], + "css/css-transitions/animations/text-shadow-interpolation.html": [ + "c007816ecb04236421ff0aea8861da19c244338a", + "testharness" + ], "css/css-transitions/before-load-001.html": [ "009260eea430721971053f6d98330f9a9ed56d6d", "testharness" @@ -620940,7 +621032,7 @@ "support" ], "css/support/computed-testcommon.js": [ - "1e87f2a518cb1c7845a99d6a13330e7a13436eca", + "c7c7e073203a67844ebcdf029f5c323964a41c99", "support" ], "css/support/green.ico": [ @@ -626219,22 +626311,6 @@ "fb4b3ad3c7aeab61f44c394926735a97a8767d3c", "support" ], - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001-ref.html": [ - "0d1b1362873483fa1b900e2da3efe603648f791e", - "support" - ], - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001a.html": [ - "f7ed6e3b342d6cd259b3df61a5445f83ab39b0f9", - "reftest" - ], - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001b.html": [ - "f02bf13a73cd0ee025bf3e3d6ae9215feadb12b4", - "reftest" - ], - "css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/reftest.list": [ - "f914145ab8f075cbbf03968e84d5487047dc0008", - "support" - ], "css/vendor-imports/mozilla/mozilla-central-reftests/masking/blank.html": [ "abb1b5472843b7bcf63c946897cd66da456033e7", "support" @@ -626872,7 +626948,7 @@ "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list": [ - "2d9b459fa8e62ee70bb79567c5727650008f0c41", + "97621fe19fe42c95103d8bbd100fece50d0f51be", "support" ], "css/vendor-imports/mozilla/mozilla-central-reftests/ruby/nested-ruby-pairing-001-ref.html": [ @@ -631100,7 +631176,7 @@ "support" ], "docs/running-tests/from-local-system.md": [ - "5a9a776a285ad488509f6c494f43ebbdc8ec108f", + "0f337176c47d7c38bcaebd85fd86628e1870dfae", "support" ], "docs/running-tests/from-web.md": [ @@ -643516,7 +643592,7 @@ "testharness" ], "html/cross-origin-opener-policy/popup-redirect-cache.https.html": [ - "519f710596005b5c460e03cfd398fafbb585ce40", + "0524878a03a8d3764c63b77b5c8c4f1453c5a288", "testharness" ], "html/cross-origin-opener-policy/popup-redirect-cache.https.html.headers": [ @@ -654415,6 +654491,10 @@ "145b5dd3727f995fba56407f07e158d1fb80ba5a", "testharness" ], + "html/semantics/forms/form-submission-0/SubmitEvent.window.js": [ + "93dbabb866beeba9e04d0d4f99dde78f448e8dff", + "testharness" + ], "html/semantics/forms/form-submission-0/constructing-form-data-set.html": [ "8dad6cdd01a43fa17694c67939e8e5a05ab529e2", "testharness" @@ -654448,13 +654528,17 @@ "support" ], "html/semantics/forms/form-submission-0/form-submission-algorithm.html": [ - "8f61cbc18c95133561e4dd8cbffd3cdb682420e4", + "df39b57353c67ebb02014865f28d739bbf24c690", "testharness" ], "html/semantics/forms/form-submission-0/getactionurl.html": [ "83de220267e7c37374bcd4d4490f27e4488e1126", "testharness" ], + "html/semantics/forms/form-submission-0/implicit-submission.optional.html": [ + "109d3b901a53537e9ae2fb17f84d25d4a764b2e2", + "testharness" + ], "html/semantics/forms/form-submission-0/resources/file-submission.py": [ "5fc67faa880ffa9300a093aa0ef1f67c3a76eb0c", "support" @@ -654464,7 +654548,7 @@ "support" ], "html/semantics/forms/form-submission-0/resources/targetted-form.js": [ - "6b6685291d2bd3d7dc64f97e2d9e460394d2eb3c", + "291251b7e8037ce5c9053d7c4b63142a5783b877", "support" ], "html/semantics/forms/form-submission-0/submission-checks.window.js": [ @@ -654631,6 +654715,10 @@ "1747bd727aa2fb4deb8f2a81601523776a51a355", "testharness" ], + "html/semantics/forms/the-button-element/button-submit-children.html": [ + "06218f4fc9e99efe2d87a9eb85582d3dc84434a1", + "testharness" + ], "html/semantics/forms/the-button-element/button-type.html": [ "6cfd6687c707479600534de03156afa698daa314", "testharness" @@ -661944,7 +662032,7 @@ "support" ], "interfaces/media-capabilities.idl": [ - "71bc46d24109f49d616e05e804bcda01dcd45afb", + "6fe43d87a80bb7229d5cebc5fbd4cac08f44fa39", "support" ], "interfaces/media-playback-quality.idl": [ @@ -662168,7 +662256,7 @@ "support" ], "interfaces/web-nfc.idl": [ - "d2ec623e864141152f9ca2ac79b5252b246257bf", + "117812a1f276d0bb84de94c2357485d7670ad314", "support" ], "interfaces/web-share.idl": [ @@ -662212,7 +662300,7 @@ "support" ], "interfaces/webrtc.idl": [ - "2989db5453f5333c8e04e6d237f4142aa9fa85f8", + "5a5eb7b10631f14245b158cc6b06a2a178ce1d20", "support" ], "interfaces/webusb.idl": [ @@ -662943,6 +663031,10 @@ "76eef3a8f45c131bdbf90028f8bcad75be0e5f32", "testharness" ], + "loading/lazyload/image-loading-lazy-multicol-tentative.html": [ + "eb69d6810d60a198ae5861211423acb7f76245f9", + "testharness" + ], "loading/lazyload/image-loading-lazy.tentative.html": [ "5920eb1882df0a69e0d23c26433bf1b28b9275e9", "testharness" @@ -668292,7 +668384,7 @@ "support" ], "native-file-system/script-tests/FileSystemFileHandle-getFile.js": [ - "88e5593ebad613dc30cbdb838fe481e5353bce69", + "6b7d9f9a3171c96aaa2e1312451b3a9cac6c2e9b", "support" ], "native-file-system/script-tests/FileSystemWriter.js": [ @@ -677124,11 +677216,11 @@ "testharness" ], "preload/preload-csp.sub.html": [ - "62d0c71039b7c06a4299ac71e055ff3786de5c41", + "a11214e9ec8e41a518f9fdb6b3db1b96b6e55df9", "testharness" ], "preload/preload-default-csp.sub.html": [ - "9fc11945866834c70c9ad270fb11d37a443ac3d0", + "c649a53f874d854c1ed6052b06a7adad01b816e5", "testharness" ], "preload/preload-strict-dynamic.html": [ @@ -690736,7 +690828,7 @@ "support" ], "resources/chromium/nfc-mock.js": [ - "811c0aeafceed8e16148ae4c678b55733fc6c8b8", + "aff72bbad028ecd6b8c6a8023841e08f072adfac", "support" ], "resources/chromium/sensor.mojom.js": [ @@ -690796,7 +690888,7 @@ "support" ], "resources/chromium/webxr-test.js": [ - "94031657b4b6d2698739eddf0bd4028e0aa8fdea", + "d87b3420a85177ad5ef1c5c36cc5c4d785133eba", "support" ], "resources/chromium/webxr-test.js.headers": [ @@ -697043,6 +697135,10 @@ "e974e38177526e2e4bd8344712c37b00dc2e2bda", "testharness" ], + "svg/animations/pruning-first-interval.html": [ + "5a1d1463beaec5b8c3e86406de6138960de8e5ab", + "testharness" + ], "svg/animations/remove-animation-element-while-animation-is-running.html": [ "764d25b69f158e028d8ec9fe14e1c43840d00925", "testharness" @@ -701588,7 +701684,7 @@ "support" ], "tools/ci/azure/cleanup_win10.yml": [ - "76852b58cd39f057ae4441b26fd423714b07f445", + "f495a0c554537f1161981e19c12c597ba41ef2b2", "support" ], "tools/ci/azure/com.apple.Safari.plist": [ @@ -701688,7 +701784,7 @@ "support" ], "tools/ci/run_tc.py": [ - "e6d8cd878aacc58f535be562a85ba511e18676f2", + "be7dbe082a1709493b62316d15668ea10ae93607", "support" ], "tools/ci/taskcluster-run.py": [ @@ -701696,7 +701792,7 @@ "support" ], "tools/ci/tcdownload.py": [ - "6e4d960da900c670701807455bd67b247e37f34b", + "256726da7b568f32115dfeaa6bc1407490c0d076", "support" ], "tools/ci/tests/test_jobs.py": [ @@ -706472,7 +706568,7 @@ "support" ], "tools/wpt/browser.py": [ - "bed8c59bf0729ed2327d499f7ec19817055379a6", + "fb10d75631305bd66044f033d3ac8f5e8ffb4a0b", "support" ], "tools/wpt/commands.json": [ @@ -711503,6 +711599,10 @@ "dcb9432da83cb21b6f0403080d3c7b3b5df1659e", "testharness" ], + "visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini": [ + "75e29ae4c427efbaeb9e08ec4824b90c30c2aead", + "support" + ], "visual-viewport/viewport-offset-manual.html": [ "c216e405a3e78765b95c815c45809f152dd97e41", "manual" @@ -713456,7 +713556,7 @@ "manual" ], "web-nfc/NDEFReader_options.https.html": [ - "ab55e2c160bd39710a62238fce795ff63f03c995", + "389fff9e041e284358a87e5cc133046d4a579b84", "testharness" ], "web-nfc/NDEFReader_scan.https.html": [ @@ -713472,7 +713572,7 @@ "testharness" ], "web-nfc/NDEFRecord_constructor.https.html": [ - "cea517d37aa17bf94c3d96c9abd19db5f1fa184c", + "1206afb4713dc7e4b48dcc837b3dd708382a9ce2", "testharness" ], "web-nfc/NDEFWriter-document-hidden-manual.https.html": [ @@ -713480,7 +713580,7 @@ "manual" ], "web-nfc/NDEFWriter_push.https.html": [ - "fbebac946dfbf77a49c11c0472da900ca26759be", + "2be655fbbf93cfb0c0c8813f86dc3e98450af720", "testharness" ], "web-nfc/README.md": [ @@ -713496,7 +713596,7 @@ "testharness" ], "web-nfc/resources/nfc-helpers.js": [ - "80f0882f9f8deff30b0c8c60ecb1bfc7c6df168c", + "cf9b510f30424e79412cc35098f63f5afd05707b", "support" ], "web-nfc/resources/support-iframe.html": [ @@ -716859,6 +716959,10 @@ "80faf85f15e1acff67205efef90bbf5fd491bbc8", "testharness" ], + "webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html": [ + "0cce78bfbca161016721c4e2b122382c4be868f7", + "testharness" + ], "webrtc/RTCPeerConnection-setLocalDescription-pranswer.html": [ "1fbb30923f3d1e9abef6940a931a6d426ed01915", "testharness" diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js.ini index 763dd68b4cd..fd2cc8a6f34 100644 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js.ini @@ -2,8 +2,14 @@ [WebCryptoAPI: deriveBits() Using ECDH] expected: FAIL + [setup - define tests] + expected: FAIL + [ecdh_bits.https.any.html] [WebCryptoAPI: deriveBits() Using ECDH] expected: FAIL + [setup - define tests] + expected: FAIL + diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js.ini index 07be8dd8e0d..12e5082d0b8 100644 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js.ini @@ -2,8 +2,14 @@ [WebCryptoAPI: deriveKey() Using ECDH] expected: FAIL + [setup - define tests] + expected: FAIL + [ecdh_keys.https.any.worker.html] [WebCryptoAPI: deriveKey() Using ECDH] expected: FAIL + [setup - define tests] + expected: FAIL + diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js.ini index d8ae431d4c0..f73bc5284ab 100644 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js.ini @@ -2,38 +2,62 @@ [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] expected: FAIL + [setup - define tests] + expected: FAIL + [hkdf.https.any.worker.html?1001-2000] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] expected: FAIL + [setup - define tests] + expected: FAIL + [hkdf.https.any.html?2001-3000] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] expected: FAIL + [setup - define tests] + expected: FAIL + [hkdf.https.any.worker.html?2001-3000] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] expected: FAIL + [setup - define tests] + expected: FAIL + [hkdf.https.any.html?1001-2000] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] expected: FAIL + [setup - define tests] + expected: FAIL + [hkdf.https.any.html?1-1000] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] expected: FAIL + [setup - define tests] + expected: FAIL + [hkdf.https.any.worker.html?3001-last] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] expected: FAIL + [setup - define tests] + expected: FAIL + [hkdf.https.any.html?3001-last] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] expected: FAIL + [setup - define tests] + expected: FAIL + diff --git a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js.ini index e370d770d05..326510730d3 100644 --- a/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js.ini +++ b/tests/wpt/metadata/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js.ini @@ -2,88 +2,142 @@ [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.worker.html?1-1000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.worker.html?1001-2000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.worker.html?3001-4000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?1001-2000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?3001-4000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.worker.html?8001-last] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?1-1000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?5001-6000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?7001-8000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.worker.html?4001-5000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.worker.html?7001-8000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?2001-3000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.worker.html?6001-7000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?8001-last] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?4001-5000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.worker.html?5001-6000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + [pbkdf2.https.any.html?6001-7000] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] expected: FAIL + [setup - define tests] + expected: FAIL + diff --git a/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini b/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini index 9f60026f6d9..94a3570d26b 100644 --- a/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini +++ b/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini @@ -5,9 +5,9 @@ [[data-expected-height\] 7] expected: FAIL - [[data-expected-height\] 1] + [[data-expected-height\] 3] expected: FAIL - [[data-expected-height\] 2] + [[data-expected-height\] 4] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/positioning/abspos-float-with-inline-container.html.ini b/tests/wpt/metadata/css/CSS2/positioning/abspos-float-with-inline-container.html.ini index 3f98bb1fa20..7203ab0404c 100644 --- a/tests/wpt/metadata/css/CSS2/positioning/abspos-float-with-inline-container.html.ini +++ b/tests/wpt/metadata/css/CSS2/positioning/abspos-float-with-inline-container.html.ini @@ -1,2 +1,2 @@ [abspos-float-with-inline-container.html] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini b/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini new file mode 100644 index 00000000000..748cf761f86 --- /dev/null +++ b/tests/wpt/metadata/css/css-images/animations/object-position-interpolation.html.ini @@ -0,0 +1,4 @@ +[object-position-interpolation.html] + [object-position-interpolation] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini b/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini new file mode 100644 index 00000000000..6619bd4efa4 --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/animations/text-shadow-interpolation.html.ini @@ -0,0 +1,4 @@ +[text-shadow-interpolation.html] + [text-shadow interpolation] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini index 9997350495a..7b7f0e1bdf6 100644 --- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini +++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-handleEvent.html.ini @@ -9,3 +9,6 @@ [throws if handleEvent is thruthy and not callable] expected: NOTRUN + [doesn't look up handleEvent method on callable event listeners] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini index c884dc82eab..7fe95a6c291 100644 --- a/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini +++ b/tests/wpt/metadata/css/cssom-view/MediaQueryList-addListener-removeListener.html.ini @@ -2,6 +2,6 @@ [listeners are called when <iframe> is resized] expected: FAIL - [listeners are called correct number of times] + [listener that was added twice is called only once] 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 ac0004a36c8..ab300c199fb 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -312,9 +312,6 @@ [<iframe>: separate response Content-Type: */* text/html] expected: FAIL - [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] - expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL @@ -324,9 +321,9 @@ [<iframe>: combined response Content-Type: text/html;x=" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*] + [<iframe>: combined response Content-Type: */* text/html] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" \\" text/plain] + [<iframe>: separate response Content-Type: text/html */*] 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 b603f668f1a..258fe374697 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -53,15 +53,9 @@ [combined text/javascript ] expected: FAIL - [separate text/javascript;charset=windows-1252 error text/javascript] - expected: FAIL - [separate text/javascript x/x] expected: FAIL - [separate text/javascript error] - 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 a63e414f43a..87c807a49ff 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,3 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff] - expected: FAIL - diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini new file mode 100644 index 00000000000..87b07c3e670 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_1.html] + [Multiple history traversals from the same task] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini index 385376c7321..75d75b4cda2 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.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_4.html] +[traverse_the_history_2.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini new file mode 100644 index 00000000000..51f8272a6de --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_3.html] + [Multiple history traversals, last would be aborted] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 5f60c78e73c..f6a7aca3306 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,6 +1,5 @@ [iframe_sandbox_popups_escaping-3.html] type: testharness - expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: TIMEOUT + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/SubmitEvent.window.js.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/SubmitEvent.window.js.ini new file mode 100644 index 00000000000..13cc8c489a3 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/SubmitEvent.window.js.ini @@ -0,0 +1,16 @@ +[SubmitEvent.window.html] + [Successful SubmitEvent constructor] + expected: FAIL + + [Failing SubmitEvent constructor] + expected: FAIL + + [Successful SubmitEvent constructor; empty dictionary] + expected: FAIL + + [Successful SubmitEvent constructor; null submitter] + expected: FAIL + + [Successful SubmitEvent constructor; missing dictionary] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini index 61799e4c935..f6eecd82b49 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini @@ -1,5 +1,5 @@ [form-double-submit-2.html] expected: ERROR [preventDefault should allow onclick submit() to succeed] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini index df89cd21511..941d0dee0c8 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini @@ -1,5 +1,5 @@ [form-double-submit-3.html] expected: ERROR [<button> should have the same double-submit protection as <input type=submit>] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini index dce74c6dd71..47a7bbb7975 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit.html.ini @@ -1,5 +1,5 @@ [form-double-submit.html] expected: ERROR [default submit action should supersede onclick submit()] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini index 127392316de..e6022ce120f 100644 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini +++ b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-submission-algorithm.html.ini @@ -1,7 +1,23 @@ [form-submission-algorithm.html] + expected: TIMEOUT [If form's firing submission events is true, then return; 'submit' event] expected: FAIL [If form's firing submission events is true, then return; 'invalid' event] expected: FAIL + [firing an event named submit; form.requestSubmit(submitter)] + expected: FAIL + + [firing an event named submit; clicking a submit button] + expected: FAIL + + [Cannot navigate (after constructing the entry list)] + expected: TIMEOUT + + [firing an event named submit; form.requestSubmit(null)] + expected: FAIL + + [firing an event named submit; form.requestSubmit()] + 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/syntax/parsing/DOMContentLoaded-defer.html.ini b/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini deleted file mode 100644 index a9677391662..00000000000 --- a/tests/wpt/metadata/html/syntax/parsing/DOMContentLoaded-defer.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[DOMContentLoaded-defer.html] - [The end: DOMContentLoaded and defer scripts] - expected: FAIL - diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini index a56bad443a2..66bd350083b 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini @@ -1,5 +1,4 @@ [realtimeanalyser-fft-scaling.html] - expected: TIMEOUT [X 2048-point FFT peak position is not equal to 64. Got 0.] expected: FAIL diff --git a/tests/wpt/metadata/webmessaging/with-ports/017.html.ini b/tests/wpt/metadata/webmessaging/with-ports/017.html.ini deleted file mode 100644 index 064cf47545b..00000000000 --- a/tests/wpt/metadata/webmessaging/with-ports/017.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[017.html] - expected: TIMEOUT - [origin of the script that invoked the method, about:blank] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/webmessaging/with-ports/018.html.ini b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini new file mode 100644 index 00000000000..663a1f8fa30 --- /dev/null +++ b/tests/wpt/metadata/webmessaging/with-ports/018.html.ini @@ -0,0 +1,5 @@ +[018.html] + expected: TIMEOUT + [origin of the script that invoked the method, javascript:] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini index 333edb3a26e..650c91da4a6 100644 --- a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini +++ b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini @@ -1,4 +1,5 @@ [sharedworker-in-worker.html] + expected: ERROR [Base URL in workers: new SharedWorker()] 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/.taskcluster.yml b/tests/wpt/web-platform-tests/.taskcluster.yml index 27479fb57e0..6de1e280cec 100644 --- a/tests/wpt/web-platform-tests/.taskcluster.yml +++ b/tests/wpt/web-platform-tests/.taskcluster.yml @@ -4,6 +4,19 @@ policy: tasks: $let: event_str: {$json: {$eval: event}} + provisionerId: + $if: 'taskcluster_root_url == "https://taskcluster.net"' + then: aws-provisioner-v1 + else: proj-wpt + workerType: + $if: 'taskcluster_root_url == "https://taskcluster.net"' + then: + $if: event.repository.full_name == 'web-platform-tests/wpt' + then: + wpt-docker-worker + else: + github-worker + else: ci in: $flattenDeep: - $if: tasks_for == "github-push" @@ -52,13 +65,8 @@ tasks: taskGroupId: {$eval: 'as_slugid("task group")'} created: {$fromNow: ''} deadline: {$fromNow: '24 hours'} - provisionerId: aws-provisioner-v1 - workerType: - $if: event.repository.full_name == 'web-platform-tests/wpt' - then: - wpt-docker-worker - else: - github-worker + provisionerId: ${provisionerId} + workerType: ${workerType} metadata: name: wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]} description: >- @@ -155,13 +163,8 @@ tasks: taskGroupId: {$eval: 'as_slugid("task group")'} created: {$fromNow: ''} deadline: {$fromNow: '24 hours'} - provisionerId: aws-provisioner-v1 - workerType: - $if: event.repository.full_name == 'web-platform-tests/wpt' - then: - wpt-docker-worker - else: - github-worker + provisionerId: ${provisionerId} + workerType: ${workerType} metadata: name: ${operation.name} description: ${operation.description} @@ -321,13 +324,8 @@ tasks: taskGroupId: {$eval: 'as_slugid("task group")'} created: {$fromNow: ''} deadline: {$fromNow: '24 hours'} - provisionerId: aws-provisioner-v1 - workerType: - $if: event.repository.full_name == 'web-platform-tests/wpt' - then: - wpt-docker-worker - else: - github-worker + provisionerId: ${provisionerId} + workerType: ${workerType} metadata: name: ${operation.name} description: ${operation.description} diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js index c69249047bf..37e3eb43242 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js @@ -1,3 +1,9 @@ // META: title=WebCryptoAPI: deriveBits() Using ECDH // META: script=ecdh_bits.js -run_test(); + +// Define subtests from a `promise_test` to ensure the harness does not +// complete before the subtests are available. `explicit_done` cannot be used +// for this purpose because the global `done` function is automatically invoked +// by the WPT infrastructure in dedicated worker tests defined using the +// "multi-global" pattern. +promise_test(define_tests, 'setup - define tests'); diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.js b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.js index fe82ffe5712..5cc7193aebd 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.js @@ -1,5 +1,5 @@ -function run_test() { +function define_tests() { // May want to test prefixed implementations. var subtle = self.crypto.subtle; @@ -27,7 +27,7 @@ function run_test() { "P-384": new Uint8Array([224, 189, 107, 206, 10, 239, 140, 164, 136, 56, 166, 226, 252, 197, 126, 103, 185, 197, 232, 134, 12, 95, 11, 233, 218, 190, 197, 62, 69, 78, 24, 160, 161, 116, 196, 136, 136, 162, 100, 136, 17, 91, 45, 201, 241, 223, 165, 45]) }; - importKeys(pkcs8, spki, sizes) + return importKeys(pkcs8, spki, sizes) .then(function(results) { publicKeys = results.publicKeys; privateKeys = results.privateKeys; @@ -184,7 +184,6 @@ function run_test() { }); }, namedCurve + " asking for too many bits"); }); - done() }); function importKeys(pkcs8, spki, sizes) { diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js index b212b92c74b..d8235fce5a7 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js @@ -1,3 +1,9 @@ // META: title=WebCryptoAPI: deriveKey() Using ECDH // META: script=ecdh_keys.js -run_test(); + +// Define subtests from a `promise_test` to ensure the harness does not +// complete before the subtests are available. `explicit_done` cannot be used +// for this purpose because the global `done` function is automatically invoked +// by the WPT infrastructure in dedicated worker tests defined using the +// "multi-global" pattern. +promise_test(define_tests, 'setup - define tests'); diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.js b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.js index b1a0bcd485d..99008e0cbbe 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.js @@ -1,5 +1,5 @@ -function run_test() { +function define_tests() { // May want to test prefixed implementations. var subtle = self.crypto.subtle; @@ -27,7 +27,7 @@ function run_test() { "P-384": new Uint8Array([224, 189, 107, 206, 10, 239, 140, 164, 136, 56, 166, 226, 252, 197, 126, 103, 185, 197, 232, 134, 12, 95, 11, 233, 218, 190, 197, 62, 69, 78, 24, 160, 161, 116, 196, 136, 136, 162, 100, 136, 17, 91, 45, 201, 241, 223, 165, 45]) }; - importKeys(pkcs8, spki, sizes) + return importKeys(pkcs8, spki, sizes) .then(function(results) { publicKeys = results.publicKeys; privateKeys = results.privateKeys; @@ -153,7 +153,6 @@ function run_test() { }); }, namedCurve + " public property value is a secret key"); }); - done(); }); function importKeys(pkcs8, spki, sizes) { diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js index d0d545a7d27..02492c3741c 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.https.any.js @@ -6,4 +6,10 @@ // META: script=/common/subset-tests.js // META: script=hkdf_vectors.js // META: script=hkdf.js -run_test(); + +// Define subtests from a `promise_test` to ensure the harness does not +// complete before the subtests are available. `explicit_done` cannot be used +// for this purpose because the global `done` function is automatically invoked +// by the WPT infrastructure in dedicated worker tests defined using the +// "multi-global" pattern. +promise_test(define_tests, 'setup - define tests'); diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.js b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.js index 95889676c15..c18a433d7f9 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.js @@ -1,5 +1,5 @@ -function run_test() { +function define_tests() { // May want to test prefixed implementations. var subtle = self.crypto.subtle; @@ -14,7 +14,7 @@ function run_test() { // What kinds of keys can be created with deriveKey? The following: var derivedKeyTypes = testData.derivedKeyTypes; - setUpBaseKeys(derivedKeys) + return setUpBaseKeys(derivedKeys) .then(function(allKeys) { // We get several kinds of base keys. Normal ones that can be used for // derivation operations, ones that lack the deriveBits usage, ones @@ -232,13 +232,6 @@ function run_test() { }); }); - - done(); - }, function(err) { - subsetTest(test, function(test) { - assert_unreached("setUpBaseKeys failed with error '" + err.message + "'"); - }, "setUpBaseKeys"); - done(); }); // Deriving bits and keys requires starting with a base key, which is created diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js index 539f390c8af..2efbe523f8c 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js @@ -12,4 +12,10 @@ // META: script=/common/subset-tests.js // META: script=pbkdf2_vectors.js // META: script=pbkdf2.js -run_test(); + +// Define subtests from a `promise_test` to ensure the harness does not +// complete before the subtests are available. `explicit_done` cannot be used +// for this purpose because the global `done` function is automatically invoked +// by the WPT infrastructure in dedicated worker tests defined using the +// "multi-global" pattern. +promise_test(define_tests, 'setup - define tests'); diff --git a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.js b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.js index 7edc7ea5a26..0403f382e14 100644 --- a/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.js +++ b/tests/wpt/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.js @@ -1,4 +1,4 @@ -function run_test() { +function define_tests() { // May want to test prefixed implementations. var subtle = self.crypto.subtle; @@ -12,7 +12,7 @@ function run_test() { // What kinds of keys can be created with deriveKey? The following: var derivedKeyTypes = testData.derivedKeyTypes; - setUpBaseKeys(passwords) + return setUpBaseKeys(passwords) .then(function(allKeys) { // We get several kinds of base keys. Normal ones that can be used for // derivation operations, ones that lack the deriveBits usage, ones @@ -229,13 +229,6 @@ function run_test() { }); }); - - done(); - }, function(err) { - subsetTest(test, function(test) { - assert_unreached("setUpBaseKeys failed with error '" + err.message + "'"); - }, "setUpBaseKeys"); - done(); }); // Deriving bits and keys requires starting with a base key, which is created diff --git a/tests/wpt/web-platform-tests/css/css-images/animations/object-position-interpolation.html b/tests/wpt/web-platform-tests/css/css-images/animations/object-position-interpolation.html new file mode 100644 index 00000000000..055cbc8421b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-images/animations/object-position-interpolation.html @@ -0,0 +1,158 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>object-position-interpolation</title> +<link rel="help" href="https://drafts.csswg.org/css-images-3/#the-object-position"> +<meta name="assert" content="object-position supports animation by computation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.parent { + object-position: 30px 10px; +} + +.target { + position: relative; + width: 100px; + height: 100px; + background-color: black; + display: inline-block; + margin: 20px 0px 20px 0px; + object-fit: fill; + object-position: 10px 30px; +} + +.expected { + background-color: green; +} +</style> +<body> +</body> +<script> +test_interpolation({ + property: 'object-position', + from: neutralKeyframe, + to: '20px 20px', +}, [ + {at: -0.3, expect: '7px 33px'}, + {at: 0, expect: '10px 30px'}, + {at: 0.5, expect: '15px 25px'}, + {at: 1, expect: '20px 20px'}, + {at: 1.5, expect: '25px 15px'}, +]); + +test_interpolation({ + property: 'object-position', + from: 'initial', + to: '20px 20px', +}, [ + {at: -0.3, expect: 'calc(-6px + 65%) calc(-6px + 65%)'}, + {at: 0, expect: '50% 50%'}, + {at: 0.5, expect: 'calc(10px + 25%) calc(10px + 25%)'}, + {at: 1, expect: 'calc(20px + 0%) calc(20px + 0%)'}, + {at: 1.5, expect: 'calc(30px + -25%) calc(30px + -25%)'}, +]); + +test_interpolation({ + property: 'object-position', + from: 'inherit', + to: '20px 20px', +}, [ + {at: -0.3, expect: '33px 7px'}, + {at: 0, expect: '30px 10px'}, + {at: 0.5, expect: '25px 15px'}, + {at: 1, expect: '20px 20px'}, + {at: 1.5, expect: '15px 25px'}, +]); + +test_interpolation({ + property: 'object-position', + from: 'unset', + to: '20px 20px', +}, [ + {at: -0.3, expect: 'calc(-6px + 65%) calc(-6px + 65%)'}, + {at: 0, expect: '50% 50%'}, + {at: 0.5, expect: 'calc(10px + 25%) calc(10px + 25%)'}, + {at: 1, expect: 'calc(20px + 0%) calc(20px + 0%)'}, + {at: 1.5, expect: 'calc(30px + -25%) calc(30px + -25%)'}, +]); + +test_interpolation({ + property: 'object-position', + from: '50% 50%', + to: '100% 100%' +}, [ + {at: -0.3, expect: '35% 35%'}, + {at: 0, expect: '50% 50%'}, + {at: 0.5, expect: '75% 75%'}, + {at: 1, expect: '100% 100%'}, + {at: 1.5, expect: '125% 125%'} +]); + +test_interpolation({ + property: 'object-position', + from: '100px 200px', + to: '0px 0px' +}, [ + {at: -0.3, expect: '130px 260px'}, + {at: 0, expect: '100px 200px'}, + {at: 0.5, expect: '50px 100px'}, + {at: 1, expect: '0px 0px'}, + {at: 1.5, expect: '-50px -100px'} +]); + +// Zero seem to be a special case in the old implementation +test_interpolation({ + property: 'object-position', + from: '50% 100%', + to: '0px 0px' +}, [ + {at: -0.3, expect: '65% 130%'}, + {at: 0, expect: '50% 100%'}, + {at: 0.5, expect: '25% 50%'}, + {at: 1, expect: '0px 0px'}, + {at: 1.5, expect: '-25% -50%'} +]); + +test_interpolation({ + property: 'object-position', + from: '50% 100%', + to: '50px 100px' +}, [ + {at: -0.3, expect: 'calc(65% + -15px) calc(130% + -30px)'}, + {at: 0, expect: '50% 100%'}, + {at: 0.5, expect: 'calc(25% + 25px) calc(50% + 50px)'}, + {at: 1, expect: 'calc(0% + 50px) calc(0% + 100px)'}, + {at: 1.5, expect: 'calc(-25% + 75px) calc(-50% + 150px)'} +]); + +test_interpolation({ + property: 'object-position', + from: 'center', + to: 'top right' +}, [ + {at: -0.3, expect: '35% 65%'}, + {at: 0, expect: '50% 50%'}, + {at: 0.5, expect: '75% 25%'}, + {at: 1, expect: '100% 0%'}, + {at: 1.5, expect: '125% -25%'} +]); + +test_interpolation({ + property: 'object-position', + from: 'center', + to: 'right 0% bottom 50%', +}, [ + {at: -0.5, expect: '25% 50%'}, + {at: 0, expect: 'center'}, + {at: 0.3, expect: '65% 50%'}, + {at: 0.5, expect: '75% 50%'}, + {at: 0.9, expect: '95% 50%'}, + {at: 1, expect: '100% 50%'}, + {at: 1.5, expect: '125% 50%'}, + {at: 2, expect: '150% 50%'}, +]); +</script> + diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001-ref.html b/tests/wpt/web-platform-tests/css/css-lists/list-style-type-string-001-ref.html index 0d1b1362873..0d1b1362873 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001-ref.html +++ b/tests/wpt/web-platform-tests/css/css-lists/list-style-type-string-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001a.html b/tests/wpt/web-platform-tests/css/css-lists/list-style-type-string-001a.html index f7ed6e3b342..f7ed6e3b342 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001a.html +++ b/tests/wpt/web-platform-tests/css/css-lists/list-style-type-string-001a.html diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001b.html b/tests/wpt/web-platform-tests/css/css-lists/list-style-type-string-001b.html index f02bf13a73c..f02bf13a73c 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/list-style-type-string-001b.html +++ b/tests/wpt/web-platform-tests/css/css-lists/list-style-type-string-001b.html diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-font-properties.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-font-properties.html index a108792fa20..4dd78067984 100644 --- a/tests/wpt/web-platform-tests/css/css-pseudo/marker-font-properties.html +++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-font-properties.html @@ -16,7 +16,7 @@ li { list-style-type: lower-alpha; } -li::marker { +li::marker, span { font-family: sans-serif; font-size: 24px; font-style: italic; @@ -27,7 +27,7 @@ li::marker { </head> <body> <ol> - <li><span style="font-size: 24px"><!-- FIXME: Needed to ensure consistent baseline position with expected result in WebKit (why?). --></span></li> + <li><span><!-- FIXME: Needed to ensure consistent baseline position with expected result in Chromium and WebKit (why?). --></span></li> </ol> </body> </html> diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/parsing/marker-supported-properties.html b/tests/wpt/web-platform-tests/css/css-pseudo/parsing/marker-supported-properties.html new file mode 100644 index 00000000000..451aac149db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/parsing/marker-supported-properties.html @@ -0,0 +1,60 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Pseudo-Elements Test: Supported properties in ::marker</title> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#marker-pseudo"> +<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com"> +<meta name="assert" content="This test checks that only certain properties apply to ::marker pseudo-elements." /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/computed-testcommon.js"></script> +<div id="log"></div> +<ul> + <li id="target">target</li> +</ul> +<script> +// ::marker supports all font properties. +test_pseudo_computed_value("::marker", "font", "italic small-caps 900 expanded 25px / 50px Ahem", + ["italic small-caps 900 expanded 25px Ahem", "italic small-caps 900 expanded 25px/normal Ahem"]); +test_pseudo_computed_value("::marker", "font-family", "Ahem"); +test_pseudo_computed_value("::marker", "font-feature-settings", "\"smcp\""); +test_pseudo_computed_value("::marker", "font-kerning", "none"); +test_pseudo_computed_value("::marker", "font-size", "25px"); +test_pseudo_computed_value("::marker", "font-size-adjust", "1"); +test_pseudo_computed_value("::marker", "font-stretch", "expanded", ["expanded", "125%"]); +test_pseudo_computed_value("::marker", "font-style", "italic"); +test_pseudo_computed_value("::marker", "font-synthesis", "none"); +test_pseudo_computed_value("::marker", "font-variant", "small-caps"); +test_pseudo_computed_value("::marker", "font-variant-caps", "small-caps"); +test_pseudo_computed_value("::marker", "font-variant-east-asian", "full-width"); +test_pseudo_computed_value("::marker", "font-variant-ligatures", "historical-ligatures"); +test_pseudo_computed_value("::marker", "font-variant-numeric", "slashed-zero"); +test_pseudo_computed_value("::marker", "font-variant-position", "sub"); +test_pseudo_computed_value("::marker", "font-weight", "900"); + +// ::marker supports `color` +test_pseudo_computed_value("::marker", "color", "rgb(0, 100, 200)"); + +// ::marker supports `text-combine-upright`, `unicode-bidi` and `direction` +test_pseudo_computed_value("::marker", "text-combine-upright", "none"); +test_pseudo_computed_value("::marker", "unicode-bidi", "plaintext"); +test_pseudo_computed_value("::marker", "direction", "rtl"); + +// ::marker supports `content` +test_pseudo_computed_value("::marker", "content", "\"foo\""); + +// ::marker does NOT support layout properties +test_pseudo_computed_value("::marker", "display", "none", ["block", "inline"]); +test_pseudo_computed_value("::marker", "position", "absolute", "static"); +test_pseudo_computed_value("::marker", "float", "right", "none"); + +// ::marker does NOT support list properties despite being affected by them, +// they apply to the list item instead. +test_pseudo_computed_value("::marker", "list-style", "inside url('foo') decimal", "outside none disc"); +test_pseudo_computed_value("::marker", "list-style-image", "url('foo')", "none"); +test_pseudo_computed_value("::marker", "list-style-position", "inside", "outside"); +test_pseudo_computed_value("::marker", "list-style-type", "decimal", "disc"); + +// ::marker does NOT support `line-height` because, despite being a +// longhand of `font`, it's not a font property. +test_pseudo_computed_value("::marker", "line-height", "50px", "normal"); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-align-002.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-align-002.html index 7e82f030e4c..01db026dff2 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-align-002.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-align-002.html @@ -31,6 +31,9 @@ scroll-snap-align: center; } #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-align-003.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-align-003.html index 1d6fbebbcd7..d13efa0abb5 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-align-003.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-align-003.html @@ -32,6 +32,9 @@ scroll-snap-align: center; } #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-002.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-002.html index a02cf7db175..51cf553b360 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-002.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-002.html @@ -28,6 +28,9 @@ #target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */ #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-003.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-003.html index d0434db515a..2ea8eff67c3 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-003.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-margin-003.html @@ -30,6 +30,9 @@ #target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */ #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-padding-002.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-padding-002.html index 3a0ca3b8519..fbed1e132ec 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-padding-002.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-padding-002.html @@ -27,6 +27,9 @@ .container { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */ #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-padding-003.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-padding-003.html index 1e92e9be72f..ccbe7b0ec97 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-padding-003.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-padding-003.html @@ -29,6 +29,9 @@ .container { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */ #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-snap-002.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-snap-002.html index 89df44cba28..28f3c124525 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-snap-002.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-snap-002.html @@ -33,6 +33,8 @@ /* Try to foil the UA */ .foilup { margin-bottom: -1em; scroll-snap-align: start; } .foildn { margin-top: -1em; scroll-snap-align: end; } + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-snap-003.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-snap-003.html index 3e90347a4dc..6fe3901e51c 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-snap-003.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-target-snap-003.html @@ -35,6 +35,9 @@ /* Try to foil the UA */ .foilup { margin-bottom: -1em; scroll-snap-align: start; } .foildn { margin-top: -1em; scroll-snap-align: end; } + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-align-001-iframe.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-align-001-iframe.html index 20922ea18ea..d86a5e86d01 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-align-001-iframe.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-align-001-iframe.html @@ -19,7 +19,9 @@ scroll-snap-align: center; } #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ - } + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div></div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-margin-001-iframe.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-margin-001-iframe.html index 8eb5b9c8638..2b2c1d2d8c1 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-margin-001-iframe.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-margin-001-iframe.html @@ -17,7 +17,9 @@ #target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */ #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ - } + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div></div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-padding-001-iframe.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-padding-001-iframe.html index b9467e4347f..9260c81b1c3 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-padding-001-iframe.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-padding-001-iframe.html @@ -17,7 +17,9 @@ html { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */ #stripe { background: green; } /* color part of the snap area */ .fail { color: red; } /* make failing more obvious */ - } + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div></div> diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-snap-001-iframe.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-snap-001-iframe.html index 1a598fa7238..3146a3bf882 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-snap-001-iframe.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/support/scroll-target-snap-001-iframe.html @@ -25,6 +25,9 @@ /* Try to foil the UA */ .foilup { margin-bottom: -1em; scroll-snap-align: start; } .foildn { margin-top: -1em; scroll-snap-align: end; } + + /* emulate `scrollbar-width: none` for browsers that don't support it yet */ + ::-webkit-scrollbar { display: none; } </style> <div></div> diff --git a/tests/wpt/web-platform-tests/css/css-size-adjust/animations/text-size-adjust-interpolation.html b/tests/wpt/web-platform-tests/css/css-size-adjust/animations/text-size-adjust-interpolation.html new file mode 100644 index 00000000000..1d7e54b7341 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-size-adjust/animations/text-size-adjust-interpolation.html @@ -0,0 +1,104 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>text-size-adjust-interpolation</title> +<link rel="help" href="https://drafts.csswg.org/css-size-adjust/#adjustment-control"> +<meta name="assert" content="text-size-adjust supports animation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style type="text/css"> +.container { + display: inline-block; +} + +.parent { + text-size-adjust: 70%; +} + +.target { + text-size-adjust: 60%; +} + +.expected { + color: green; + margin-right: 30px; +} +</style> +<body></body> +<template id="target-template"> + <span class="container"> + <div class="target">x</span> + </div> +</template> +<script> +test_interpolation({ + property: 'text-size-adjust', + from: neutralKeyframe, + to: '50%', +}, [ + {at: -2, expect: '80%'}, + {at: -0.3, expect: '63%'}, + {at: 0, expect: '60%'}, + {at: 0.3, expect: '57%'}, + {at: 0.6, expect: '54%'}, + {at: 1, expect: '50%'}, + {at: 1.5, expect: '45%'}, +]); + +test_no_interpolation({ + property: 'text-size-adjust', + from: 'initial', + to: '70%', +}); + +test_interpolation({ + property: 'text-size-adjust', + from: 'inherit', // 70% + to: '50%', +}, [ + {at: -2, expect: '110%'}, + {at: -0.3, expect: '76%'}, + {at: 0, expect: '70%'}, + {at: 0.3, expect: '64%'}, + {at: 0.6, expect: '58%'}, + {at: 1, expect: '50%'}, + {at: 1.5, expect: '40%'}, +]); + +test_interpolation({ + property: 'text-size-adjust', + from: 'unset', + to: '50%', +}, [ + {at: -2, expect: '110%'}, + {at: -0.3, expect: '76%'}, + {at: 0, expect: '70%'}, + {at: 0.3, expect: '64%'}, + {at: 0.6, expect: '58%'}, + {at: 1, expect: '50%'}, + {at: 1.5, expect: '40%'}, +]); + + +test_interpolation({ + property: 'text-size-adjust', + from: '10%', + to: '0%' +}, [ + {at: -2, expect: '30%'}, + {at: -0.3, expect: '13%'}, + {at: 0, expect: '10%'}, + {at: 0.3, expect: '7%'}, + {at: 0.6, expect: '4%'}, + {at: 1, expect: '0%'}, + {at: 1.5, expect: '0%'}, // text-size-adjust can't be negative +]); + +test_no_interpolation({ + property: 'text-size-adjust', + from: 'none', + to: '100%' +}); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-transitions/animations/text-shadow-interpolation.html b/tests/wpt/web-platform-tests/css/css-transitions/animations/text-shadow-interpolation.html new file mode 100644 index 00000000000..c007816ecb0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/animations/text-shadow-interpolation.html @@ -0,0 +1,110 @@ +<!DOCTYPE html> +<meta charset="UTF-8"> +<title>text-shadow interpolation</title> +<link rel="help" href="https://drafts.csswg.org/css-text-decor-3/#text-shadow-property"> +<meta name="assert" content="text-shadow supports animation"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/interpolation-testcommon.js"></script> + +<style> +.parent { + text-shadow: 30px 10px 30px orange; +} + +.target { + display: inline-block; + font-size: 60pt; + margin-right: 20px; + margin-bottom: 30px; + color: green; + text-shadow: 10px 30px 10px orange; +} + +.expected { + margin-right: 40px; +} +</style> +<body> +<template id="target-template">T</template> +<script> +test_interpolation({ + property: 'text-shadow', + from: neutralKeyframe, + to: 'green 20px 20px 20px', +}, [ + {at: -0.3, expect: 'rgb(255, 176, 0) 7px 33px 7px'}, + {at: 0, expect: 'rgb(255, 165, 0) 10px 30px 10px'}, + {at: 0.3, expect: 'rgb(179, 154, 0) 13px 27px 13px'}, + {at: 0.6, expect: 'rgb(102, 143, 0) 16px 24px 16px'}, + {at: 1, expect: 'rgb(0, 128, 0) 20px 20px 20px'}, + {at: 1.5, expect: 'rgb(0, 110, 0) 25px 15px 25px'}, +]); + +test_interpolation({ + property: 'text-shadow', + from: 'initial', + to: 'green 20px 20px 20px', +}, [ + {at: -0.3, expect: 'rgba(0, 0, 0, 0) -6px -6px 0px'}, + {at: 0, expect: 'rgba(0, 0, 0, 0) 0px 0px 0px'}, + {at: 0.3, expect: 'rgba(0, 128, 0, 0.3) 6px 6px 6px'}, + {at: 0.6, expect: 'rgba(0, 128, 0, 0.6) 12px 12px 12px'}, + {at: 1, expect: 'rgb(0, 128, 0) 20px 20px 20px'}, + {at: 1.5, expect: 'rgb(0, 192, 0) 30px 30px 30px'}, +]); + +test_interpolation({ + property: 'text-shadow', + from: 'inherit', + to: 'green 20px 20px 20px', +}, [ + {at: -0.3, expect: 'rgb(255, 176, 0) 33px 7px 33px'}, + {at: 0, expect: 'rgb(255, 165, 0) 30px 10px 30px'}, + {at: 0.3, expect: 'rgb(179, 154, 0) 27px 13px 27px'}, + {at: 0.6, expect: 'rgb(102, 143, 0) 24px 16px 24px'}, + {at: 1, expect: 'rgb(0, 128, 0) 20px 20px 20px'}, + {at: 1.5, expect: 'rgb(0, 110, 0) 15px 25px 15px'}, +]); + +test_interpolation({ + property: 'text-shadow', + from: 'unset', + to: 'green 20px 20px 20px', +}, [ + {at: -0.3, expect: 'rgb(255, 176, 0) 33px 7px 33px'}, + {at: 0, expect: 'rgb(255, 165, 0) 30px 10px 30px'}, + {at: 0.3, expect: 'rgb(179, 154, 0) 27px 13px 27px'}, + {at: 0.6, expect: 'rgb(102, 143, 0) 24px 16px 24px'}, + {at: 1, expect: 'rgb(0, 128, 0) 20px 20px 20px'}, + {at: 1.5, expect: 'rgb(0, 110, 0) 15px 25px 15px'}, +]); + +test_interpolation({ + property: 'text-shadow', + from: 'black 15px 10px 5px', + to: 'orange -15px -10px 25px', +}, [ + {at: -0.3, expect: 'rgb(0, 0, 0) 24px 16px 0px'}, + {at: 0, expect: 'rgb(0, 0, 0) 15px 10px 5px'}, + {at: 0.3, expect: 'rgb(77, 50, 0) 6px 4px 11px'}, + {at: 0.6, expect: 'rgb(153, 99, 0) -3px -2px 17px'}, + {at: 1, expect: 'rgb(255, 165, 0) -15px -10px 25px'}, + {at: 1.5, expect: 'rgb(255, 248, 0) -30px -20px 35px'}, +]); + +test_interpolation({ + property: 'text-shadow', + from: 'black 10px 10px 10px', + to: 'currentColor 10px 10px 10px', +}, [ + {at: -0.3, expect: 'rgb(0, 0, 0) 10px 10px 10px'}, + {at: 0, expect: 'rgb(0, 0, 0) 10px 10px 10px'}, + {at: 0.3, expect: 'rgb(0, 38, 0) 10px 10px 10px'}, + {at: 0.6, expect: 'rgb(0, 77, 0) 10px 10px 10px'}, + {at: 1, expect: 'rgb(0, 128, 0) 10px 10px 10px'}, + {at: 1.5, expect: 'rgb(0, 192, 0) 10px 10px 10px'}, +]); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/css/support/computed-testcommon.js b/tests/wpt/web-platform-tests/css/support/computed-testcommon.js index 1e87f2a518c..c7c7e073203 100644 --- a/tests/wpt/web-platform-tests/css/support/computed-testcommon.js +++ b/tests/wpt/web-platform-tests/css/support/computed-testcommon.js @@ -40,3 +40,44 @@ function test_computed_value(property, specified, computed) { }, "Property " + property + " value '" + specified + "' computes to " + computedDesc); } + +function test_pseudo_computed_value(pseudo, property, specified, computed) { + if (!computed) + computed = specified; + + let computedDesc = "'" + computed + "'"; + if (Array.isArray(computed)) + computedDesc = '[' + computed.map(e => "'" + e + "'").join(' or ') + ']'; + + test(() => { + assert_true(/^::\w+$/.test(pseudo), pseudo + " doesn't seem to be a pseudo-element"); + const styleElement = document.createElement("style"); + document.documentElement.appendChild(styleElement); + try { + const {sheet} = styleElement; + sheet.insertRule("#target" + pseudo + "{}"); + const {style} = sheet.cssRules[0]; + const target = document.getElementById('target'); + + assert_true(property in getComputedStyle(target, pseudo), property + " doesn't seem to be supported in the computed style"); + assert_true(CSS.supports(property, specified), "'" + specified + "' is a supported value for " + property + "."); + style[property] = specified; + + let readValue = getComputedStyle(target, pseudo)[property]; + if (Array.isArray(computed)) { + assert_in_array(readValue, computed); + } else { + assert_equals(readValue, computed); + } + if (readValue !== specified) { + style[property] = ''; + style[property] = readValue; + assert_equals(getComputedStyle(target, pseudo)[property], readValue, + 'computed value should round-trip'); + } + } finally { + document.documentElement.removeChild(styleElement); + } + }, "Property " + property + " value '" + specified + "' computes to " + + computedDesc + " in " + pseudo); +} diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/reftest.list deleted file mode 100644 index f914145ab8f..00000000000 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/lists-3/reftest.list +++ /dev/null @@ -1,3 +0,0 @@ -# Tests for list-style-type -== list-style-type-string-001a.html list-style-type-string-001-ref.html -== list-style-type-string-001b.html list-style-type-string-001-ref.html diff --git a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list index 2d9b459fa8e..97621fe19fe 100644 --- a/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list +++ b/tests/wpt/web-platform-tests/css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list @@ -46,9 +46,6 @@ include ib-split/reftest.list # Image Values and Replaced Content Level 3 include images3/reftest.list -# Lists and Counters Level 3 -include lists-3/reftest.list - # Masking Level 1 include masking/reftest.list 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 5a9a776a285..0f337176c47 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 @@ -4,36 +4,71 @@ The tests are designed to be run from your local computer. ## System Setup -The test environment requires [Python 2.7+](http://www.python.org/downloads) -(but not Python 3.x). +Running the tests requires `python`, `pip` and `virtualenv`, as well as updating +the system `hosts` file. -On Windows, be sure to add the Python directory (`c:\python2x`, by default) to -your `%Path%` [Environment Variable](http://www.computerhope.com/issues/ch000549.htm), -and read the [Windows Notes](#windows-notes) section below. +Note that Python 2.7 is required. Using Python 3 is not supported. -<!-- - There does not appear to be a cross-platform means of installing `pip`. - https://github.com/web-platform-tests/wpt/pull/16670 ---> +The required setup is different depending on your operating system. -Install `pip`. On many systems, this can be achieved with the command `python --m ensurepip`. If this is not possible, use your system's package manager to -install the `python-pip` package. +### Linux Setup -Next, install `virtualenv` using the following command: +If not already present, use the system package manager to install `python`, +`pip` and `virtualenv`. + +On Debian or Ubuntu: + +```bash +sudo apt-get install python python-pip virtualenv +``` + +### macOS Setup + +The system-provided Python can be used, while `pip` and `virtualenv` can be +installed for the user only: + +```bash +python -m ensurepip --user +export PATH="$PATH:$HOME/Library/Python/2.7/bin" +pip install --user virtualenv +``` + +To make the `PATH` change persistent, add it to your `~/.bash_profile` file or +wherever you currently set your PATH. + +See also [additional setup required to run Safari](safari). + +### Windows Setup +**Note:** In general, Windows Subsystem for Linux will provide the smoothest +user experience for running web-platform-tests on Windows, where installation +and usage are similar to Linux. + +Download and install [Python 2.7](https://www.python.org/downloads). The +installer includes `pip` by default. + +Add `C:\Python27` and `C:\Python27\Scripts` to your `%Path%` +[environment variable](http://www.computerhope.com/issues/ch000549.htm). + +Finally, install `virtualenv`: ```bash pip install virtualenv ``` +The standard Windows shell requires that all `wpt` commands are prefixed +by the Python binary i.e. assuming `python` is on your path the server is +started using: + +```bash +python wpt serve +``` + +### `hosts` File Setup + To get the tests running, you need to set up the test domains in your [`hosts` file](http://en.wikipedia.org/wiki/Hosts_%28file%29%23Location_in_the_file_system). -The necessary content can be generated with `./wpt make-hosts-file`; on -Windows, you will need to preceed the prior command with `python` or -the path to the Python binary (`python wpt make-hosts-file`). - -For example, on most UNIX-like systems, you can setup the hosts file with: +On Linux, macOS or other UNIX-like system: ```bash ./wpt make-hosts-file | sudo tee -a /etc/hosts @@ -48,26 +83,6 @@ python wpt make-hosts-file | Out-File %SystemRoot%\System32\drivers\etc\hosts -E If you are behind a proxy, you also need to make sure the domains above are excluded from your proxy lookups. -[The Ahem font](../writing-tests/ahem) is used to test precise rendering -behavior. This font should be loaded as a web font in tests, using the -`/fonts/ahem.css` stylesheet, as follows: - -``` -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> -``` - - -### Windows Notes - -Generally Windows Subsystem for Linux will provide the smoothest user -experience for running web-platform-tests on Windows. - -The standard Windows shell requires that all `wpt` commands are prefixed -by the Python binary i.e. assuming `python` is on your path the server is -started using: - -`python wpt serve` - ## Via the browser The test environment can then be started using diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/popup-redirect-cache.https.html b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/popup-redirect-cache.https.html index 519f7105960..0524878a03a 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/popup-redirect-cache.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener-policy/popup-redirect-cache.https.html @@ -1,10 +1,10 @@ <!doctype html> <meta charset=utf-8> +<meta name="timeout" content="long"> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src="/common/get-host-info.sub.js"></script> <script src="resources/common.js"></script> -<script src="/common/utils.js"></script> <!-- Use token() to allow running tests in parallel --> <div id=log></div> <script> @@ -44,27 +44,29 @@ function coop_redirect_cache_test(t, hostA, hostB, coop, coep, redirectCache, de function run_redirect_cache_tests(documentCOOPValueTitle, testArray) { for (const test of tests) { async_test(t => { - coop_redirect_cache_test(t, test[0], test[1], "same-origin", "require-corp", test[2], test[3], test[4], test[5]); + // Use a consistent channel name for deterministic failure output + let channelName = `${test[0].name}_${test[1].name}${test[2] ? "" : "_not"}_cache_redirect${test[3] ? "" : "_not"}_cache_destination`; + coop_redirect_cache_test(t, test[0], test[1], "same-origin", "require-corp", test[2], test[3], channelName, test[4]); }, `${documentCOOPValueTitle} document opening popup redirect from ${test[0].origin} to ${test[1].origin} with redirectCache ${test[2]} and destCache ${test[3]}`); } } let tests = [ - // popup Origin, final Origin, isCacheRedirect, isCacheDestination, channelName, hasOpener + // popup Origin, final Origin, isCacheRedirect, isCacheDestination, hasOpener // Origin A->A->B - [SAME_ORIGIN, CROSS_ORIGIN, true, false, token(), false], - [SAME_ORIGIN, CROSS_ORIGIN, false, true, token(), false], - [SAME_ORIGIN, CROSS_ORIGIN, true, true, token(), false], + [SAME_ORIGIN, CROSS_ORIGIN, true, false, false], + [SAME_ORIGIN, CROSS_ORIGIN, false, true, false], + [SAME_ORIGIN, CROSS_ORIGIN, true, true, false], // Origin A->B->B - [CROSS_ORIGIN, SAME_ORIGIN, true, false, token(), false], - [CROSS_ORIGIN, SAME_ORIGIN, false, true, token(), false], - [CROSS_ORIGIN, SAME_ORIGIN, true, true, token(), false], + [CROSS_ORIGIN, SAME_ORIGIN, true, false, false], + [CROSS_ORIGIN, SAME_ORIGIN, false, true, false], + [CROSS_ORIGIN, SAME_ORIGIN, true, true, false], // Origin A->B->C - [SAME_SITE, CROSS_ORIGIN, true, false, token(), false], - [SAME_SITE, CROSS_ORIGIN, false, true, token(), false], - [SAME_SITE, CROSS_ORIGIN, true, true, token(), false], + [SAME_SITE, CROSS_ORIGIN, true, false, false], + [SAME_SITE, CROSS_ORIGIN, false, true, false], + [SAME_SITE, CROSS_ORIGIN, true, true, false], ]; run_redirect_cache_tests("same-origin", tests); diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/SubmitEvent.window.js b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/SubmitEvent.window.js new file mode 100644 index 00000000000..93dbabb866b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/SubmitEvent.window.js @@ -0,0 +1,36 @@ +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-submitevent-interface + +test(() => { + let button = document.createElement('button'); + let typeError = new TypeError(); + assert_throws(typeError, () => { new SubmitEvent() }, '0 arguments'); + assert_throws(typeError, () => { new SubmitEvent('bar', button) }, '1 invalid arguments'); + assert_throws(typeError, () => { new SubmitEvent(button, button) }, '2 invalid arguments'); + assert_throws(typeError, () => { new SubmitEvent('foo', null) }, 'Null dictionary'); + assert_throws(typeError, () => { new SubmitEvent('foo', undefined) }, 'Undefined dictionary'); + assert_throws(typeError, () => { new SubmitEvent('foo', { submitter: null }) }, 'Null submitter'); + assert_throws(typeError, () => { new SubmitEvent('foo', { submitter: undefined }) }, 'Undefined submitter'); + assert_throws(typeError, () => { new SubmitEvent('foo', { submitter: 'bar' }) }, 'Wrong type of submitter'); +}, 'Failing SubmitEvent constructor'); + +test(() => { + let button = document.createElement('button'); + let event = new SubmitEvent('bar', { submitter: button, bubbles: true }); + assert_equals(event.submitter, button); + assert_true(event.bubbles); +}, 'Successful SubmitEvent constructor'); + +test(() => { + let event = new SubmitEvent('bar', { submitter: null}); + assert_equals(event.submitter, null); +}, 'Successful SubmitEvent constructor; null submitter'); + +test(() => { + let event = new SubmitEvent('baz', {}); + assert_equals(event.submitter, null); +}, 'Successful SubmitEvent constructor; empty dictionary'); + +test(() => { + let event = new SubmitEvent('baz'); + assert_equals(event.submitter, null); +}, 'Successful SubmitEvent constructor; missing dictionary'); diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html index 8f61cbc18c9..df39b57353c 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html @@ -50,6 +50,60 @@ async_test(t => { }); }, "If form's firing submission events is true, then return; 'submit' event"); +promise_test(async () => { + let form = populateForm('<button type=submit></button><input name=n1 value=submit type=submit>'); + let iframe = form.previousSibling; + let submitter = form.querySelector('input[type=submit]'); + let event; + form.addEventListener('submit', e => { event = e; }); + submitter.click(); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, submitter); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; clicking a submit button'); + +promise_test(async () => { + let form = populateForm(''); + let iframe = form.previousSibling; + let event; + form.addEventListener('submit', e => { event = e; }); + form.requestSubmit(); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, null); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; form.requestSubmit()'); + +promise_test(async () => { + let form = populateForm(''); + let iframe = form.previousSibling; + let event; + form.addEventListener('submit', e => { event = e; }); + form.requestSubmit(null); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, null); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; form.requestSubmit(null)'); + +promise_test(async () => { + let form = populateForm('<input type=submit><button type=submit></button>'); + let iframe = form.previousSibling; + let submitter = form.querySelector('button'); + let event; + form.addEventListener('submit', e => { event = e; }); + form.requestSubmit(submitter); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, submitter); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; form.requestSubmit(submitter)'); + async_test(t => { let form = populateForm('<input name=n1 value=v1>'); form.onformdata = (e) => { e.target.remove(); }; diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/implicit-submission.optional.html b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/implicit-submission.optional.html new file mode 100644 index 00000000000..109d3b901a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/implicit-submission.optional.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<link rel="help" href="https://html.spec.whatwg.org/C/#implicit-submission"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="./resources/targetted-form.js"></script> +<body> +<script> +// This test file is "optional" because triggering implicit submission by +// "Enter" key is not standardized. + +const ENTER = '\uE007'; + +promise_test(async () => { + let form = populateForm('<input name=text value=abc><input name=submiButton type=submit>'); + let event; + form.text.focus(); + form.addEventListener('submit', e => { event = e; }); + await test_driver.send_keys(form.text, ENTER); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, form.submitButton); + assert_true(event instanceof SubmitEvent); +}, 'Submit event with a submit button'); + +promise_test(async () => { + let form = populateForm('<input name=text value=abc>'); + let event; + form.text.focus(); + form.addEventListener('submit', e => { event = e; }); + await test_driver.send_keys(form.text, ENTER); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, null); + assert_true(event instanceof SubmitEvent); +}, 'Submit event with no submit button'); +</script> +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/targetted-form.js b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/targetted-form.js index 6b6685291d2..291251b7e80 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/targetted-form.js +++ b/tests/wpt/web-platform-tests/html/semantics/forms/form-submission-0/resources/targetted-form.js @@ -19,3 +19,10 @@ function submitPromise(form, iframe) { form.submit(); }); } + +function loadPromise(iframe) { + return new Promise((resolve, reject) => { + iframe.onload = resolve; + iframe.onerror = () => reject(new Error('iframe onerror fired')); + }); +} diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-submit-children.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-submit-children.html new file mode 100644 index 00000000000..06218f4fc9e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-button-element/button-submit-children.html @@ -0,0 +1,34 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<iframe name=frame1 id=frame1></iframe> +<form id=form1 target=frame1 action="does_not_exist.html"> + <button id=submitbutton type=submit> + <div id=buttonchilddiv> + button child div text + </div> + </button> +</form> + +<script> +async_test(t => { + window.addEventListener('load', () => { + const frame1 = document.getElementById('frame1'); + frame1.addEventListener('load', t.step_func_done(() => {})); + + const submitButton = document.getElementById('submitbutton'); + submitButton.addEventListener('click', event => { + event.preventDefault(); + const form = document.getElementById('form1'); + form.submit(); + }); + + const buttonChildDiv = document.getElementById('buttonchilddiv'); + buttonChildDiv.click(); + }); +}, 'This test will pass if a form navigation successfully occurs when clicking a child element of a <button type=submit> element with a onclick event handler which prevents the default form submission and manually calls form.submit() instead.'); +</script> diff --git a/tests/wpt/web-platform-tests/interfaces/media-capabilities.idl b/tests/wpt/web-platform-tests/interfaces/media-capabilities.idl index 71bc46d2410..6fe43d87a80 100644 --- a/tests/wpt/web-platform-tests/interfaces/media-capabilities.idl +++ b/tests/wpt/web-platform-tests/interfaces/media-capabilities.idl @@ -68,18 +68,21 @@ dictionary AudioConfiguration { dictionary MediaCapabilitiesKeySystemConfiguration { required DOMString keySystem; DOMString initDataType = ""; - DOMString audioRobustness = ""; - DOMString videoRobustness = ""; MediaKeysRequirement distinctiveIdentifier = "optional"; MediaKeysRequirement persistentState = "optional"; sequence<DOMString> sessionTypes; + KeySystemTrackConfiguration audio; + KeySystemTrackConfiguration video; + }; + +dictionary KeySystemTrackConfiguration { + DOMString robustness = ""; }; dictionary MediaCapabilitiesInfo { required boolean supported; required boolean smooth; required boolean powerEfficient; - }; dictionary MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo { diff --git a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl index d2ec623e864..117812a1f27 100644 --- a/tests/wpt/web-platform-tests/interfaces/web-nfc.idl +++ b/tests/wpt/web-platform-tests/interfaces/web-nfc.idl @@ -72,7 +72,6 @@ dictionary NDEFReadingEventInit : EventInit { dictionary NDEFPushOptions { NDEFPushTarget target = "any"; - unrestricted double timeout = Infinity; boolean ignoreRead = true; boolean overwrite = true; AbortSignal? signal; diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc.idl b/tests/wpt/web-platform-tests/interfaces/webrtc.idl index 2989db5453f..5a5eb7b1063 100644 --- a/tests/wpt/web-platform-tests/interfaces/webrtc.idl +++ b/tests/wpt/web-platform-tests/interfaces/webrtc.idl @@ -612,7 +612,6 @@ dictionary RTCDTMFToneChangeEventInit : EventInit { partial interface RTCPeerConnection { Promise<RTCStatsReport> getStats(optional MediaStreamTrack? selector = null); - attribute EventHandler onstatsended; }; [Exposed=Window] @@ -627,16 +626,6 @@ dictionary RTCStats { }; [Exposed=Window] -interface RTCStatsEvent : Event { - constructor(DOMString type, RTCStatsEventInit eventInitDict); - readonly attribute RTCStatsReport report; -}; - -dictionary RTCStatsEventInit : EventInit { - required RTCStatsReport report; -}; - -[Exposed=Window] interface RTCError : DOMException { constructor(RTCErrorInit init, optional DOMString message = ""); readonly attribute RTCErrorDetailType errorDetail; diff --git a/tests/wpt/web-platform-tests/loading/lazyload/image-loading-lazy-multicol-tentative.html b/tests/wpt/web-platform-tests/loading/lazyload/image-loading-lazy-multicol-tentative.html new file mode 100644 index 00000000000..eb69d6810d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/loading/lazyload/image-loading-lazy-multicol-tentative.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<head> + <title>Images with loading='lazy' load when in the viewport</title> + <link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org"> + <link rel="help" href="https://github.com/scott-little/lazyload"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> + +<!-- +Marked as tentative until https://github.com/whatwg/html/pull/3752 is landed. +--> + +<script> + const t = async_test("Test that images with loading='lazy' under multicol load once they enter the viewport."); + + let has_in_viewport_loaded = false; + let has_window_loaded = false; + + const in_viewport_img_onload = t.step_func(function() { + assert_false(has_in_viewport_loaded, "The in_viewport element should load only once."); + has_in_viewport_loaded = true; + }); + + window.addEventListener("load", t.step_func_done(function() { + assert_true(has_in_viewport_loaded, "The in_viewport element should have loaded before window.load()."); + assert_false(has_window_loaded, "The window.load() event should only fire once."); + has_window_loaded = true; + })); + +</script> + +<div class=texty style="column-count: 2; height: 300px"> + <div style="border: 1px solid black"> + <h2 style="column-span: all"></h2> + <img loading="lazy" src="resources/image.png?first" width="160" height="120" + onload="in_viewport_img_onload()"> + </div> +</div> + + <!-- + This async script loads very slowly in order to ensure that, if the + below_viewport element has started loading, it has a chance to finish + loading before window.load() happens, so that the test will dependably fail + in that case instead of potentially passing depending on how long different + resource fetches take. + --> + <script async src="/common/slow.py"></script> diff --git a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemFileHandle-getFile.js b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemFileHandle-getFile.js index 88e5593ebad..6b7d9f9a317 100644 --- a/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemFileHandle-getFile.js +++ b/tests/wpt/web-platform-tests/native-file-system/script-tests/FileSystemFileHandle-getFile.js @@ -6,3 +6,35 @@ directory_test(async (t, root) => { let actualContents = await slice.text(); assert_equals(actualContents, fileContents.slice(1, fileContents.length)); }, 'getFile() provides a file that can be sliced'); + +directory_test(async (t, root) => { + const handle = await createEmptyFile(t, 'mtime.txt', root); + let file = await handle.getFile(); + const first_mtime = file.lastModified; + + // We wait for 2s here to ensure that the files do not have the + // same modification time. Some filesystems have low resolutions + // for modification timestamps. + let timeout = new Promise(resolve => { + t.step_timeout(resolve, 2000); + }); + await timeout; + + const writer = await handle.createWriter({keepExistingData: false}); + await writer.write(0, new Blob(['foo'])); + await writer.close(); + + file = await handle.getFile(); + const second_mtime = file.lastModified; + + // We wait for 5 ms here to ensure that `lastModified` + // from the File objects is stable between getFile invocations. + timeout = new Promise(resolve => { + t.step_timeout(resolve, 5); + }); + await timeout; + let fileReplica = await handle.getFile(); + assert_equals(second_mtime, fileReplica.lastModified); + + assert_less_than(first_mtime, second_mtime); +}, 'getFile() returns last modified time'); diff --git a/tests/wpt/web-platform-tests/preload/preload-csp.sub.html b/tests/wpt/web-platform-tests/preload/preload-csp.sub.html index 62d0c71039b..a11214e9ec8 100644 --- a/tests/wpt/web-platform-tests/preload/preload-csp.sub.html +++ b/tests/wpt/web-platform-tests/preload/preload-csp.sub.html @@ -15,7 +15,7 @@ <link rel=preload href="resources/dummy.xml"> <body> <script> - setup({explicit_done: true}); + setup({single_test: true}); var iterations = 0; diff --git a/tests/wpt/web-platform-tests/preload/preload-default-csp.sub.html b/tests/wpt/web-platform-tests/preload/preload-default-csp.sub.html index 9fc11945866..c649a53f874 100644 --- a/tests/wpt/web-platform-tests/preload/preload-default-csp.sub.html +++ b/tests/wpt/web-platform-tests/preload/preload-default-csp.sub.html @@ -15,7 +15,7 @@ <link rel=preload href="resources/dummy.xml"> <body> <script> - setup({explicit_done: true}); + setup({single_test: true}); var iterations = 0; diff --git a/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js b/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js index 811c0aeafce..aff72bbad02 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js +++ b/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js @@ -31,14 +31,16 @@ function toMojoNDEFRecord(record) { return nfcRecord; } +// Converts JS objects to byte array. function toByteArray(data) { - // Converts JS objects to byte array. + if (data instanceof ArrayBuffer) + return new Uint8Array(data); + else if (ArrayBuffer.isView(data)) + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + let byteArray = new Uint8Array(0); let tmpData = data; - - if (tmpData instanceof ArrayBuffer) - byteArray = new Uint8Array(tmpData); - else if (typeof tmpData === 'object' || typeof tmpData === 'number') + if (typeof tmpData === 'object' || typeof tmpData === 'number') tmpData = JSON.stringify(tmpData); if (typeof tmpData === 'string') diff --git a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js index 94031657b4b..d87b3420a85 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js +++ b/tests/wpt/web-platform-tests/resources/chromium/webxr-test.js @@ -643,7 +643,7 @@ class MockXRInputSource { this.primary_input_clicked_ = fakeInputSourceInit.selectionClicked; } - this.grip_ = null; + this.mojo_from_input_ = null; if (fakeInputSourceInit.gripOrigin != null) { this.setGripOrigin(fakeInputSourceInit.gripOrigin); } @@ -676,22 +676,22 @@ class MockXRInputSource { } setGripOrigin(transform, emulatedPosition = false) { - this.grip_ = new gfx.mojom.Transform(); - this.grip_.matrix = getMatrixFromTransform(transform); + this.mojo_from_input_ = new gfx.mojom.Transform(); + this.mojo_from_input_.matrix = getMatrixFromTransform(transform); this.emulated_position_ = emulatedPosition; } clearGripOrigin() { - if (this.grip_ != null) { - this.grip_ = null; + if (this.mojo_from_input_ != null) { + this.mojo_from_input_ = null; this.emulated_position_ = false; } } setPointerOrigin(transform, emulatedPosition = false) { this.desc_dirty_ = true; - this.pointer_offset_ = new gfx.mojom.Transform(); - this.pointer_offset_.matrix = getMatrixFromTransform(transform); + this.input_from_pointer_ = new gfx.mojom.Transform(); + this.input_from_pointer_.matrix = getMatrixFromTransform(transform); this.emulated_position_ = emulatedPosition; } @@ -810,7 +810,7 @@ class MockXRInputSource { input_state.primaryInputPressed = this.primary_input_pressed_; input_state.primaryInputClicked = this.primary_input_clicked_; - input_state.grip = this.grip_; + input_state.mojoFromInput = this.mojo_from_input_; input_state.gamepad = this.gamepad_; @@ -840,7 +840,7 @@ class MockXRInputSource { break; } - input_desc.pointerOffset = this.pointer_offset_; + input_desc.inputFromPointer = this.input_from_pointer_; input_desc.profiles = this.profiles_; diff --git a/tests/wpt/web-platform-tests/svg/animations/pruning-first-interval.html b/tests/wpt/web-platform-tests/svg/animations/pruning-first-interval.html new file mode 100644 index 00000000000..5a1d1463bea --- /dev/null +++ b/tests/wpt/web-platform-tests/svg/animations/pruning-first-interval.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<title>Timed element not active after first interval active duration changes to unresolved</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<svg> + <rect width="100" height="100" fill="green"> + <set attributeName="fill" to="red" fill="freeze" + begin="click" end="click" dur="100ms" repeatCount="indefinite"/> + </rect> +</svg> +<script> + async_test(function(t) { + let set = document.querySelector('set'); + window.onload = t.step_func(function() { + t.step_timeout(function() { + set.setAttribute('begin', '-100ms'); + set.setAttribute('begin', 'click'); + set.parentNode.appendChild(set); + set.setAttribute('end', '-100ms'); + set.setAttribute('end', 'click'); + window.requestAnimationFrame(t.step_func_done(function() { + let target = set.targetElement; + assert_equals(getComputedStyle(target).fill, 'rgb(0, 128, 0)'); + })); + }, 0); + }); + }); +</script> diff --git a/tests/wpt/web-platform-tests/tools/ci/azure/cleanup_win10.yml b/tests/wpt/web-platform-tests/tools/ci/azure/cleanup_win10.yml index 76852b58cd3..f495a0c5545 100644 --- a/tests/wpt/web-platform-tests/tools/ci/azure/cleanup_win10.yml +++ b/tests/wpt/web-platform-tests/tools/ci/azure/cleanup_win10.yml @@ -95,3 +95,25 @@ steps: condition: always() errorActionPreference: silentlyContinue ignoreLASTEXITCODE: true + +- powershell: | + ($webdriverFiles = Get-ChildItem -PATH "$env:systemdrive\*msedgedriver.exe" -Recurse) >$null 2>$null + Write-Host "Found $($webdriverFiles.Count) msedgedriver binaries" + foreach ($file in $webdriverFiles) { + Write-Host "Deleting $file" + Remove-Item -Path $file.FullName -Force -ErrorAction SilentlyContinue + } + ($driverNotesFolder = Get-ChildItem -PATH "$env:systemdrive\*Driver_Notes" -Recurse) >$null 2>$null + foreach ($file in $driverNotesFolder) { + Write-Host "Deleting $file folder" + Remove-Item -Path $file.FullName -Recurse -Force -ErrorAction SilentlyContinue + } + ($zipFile = Get-ChildItem -PATH "$env:systemdrive\*edgedriver_*.zip" -Recurse) >$null 2>$null + foreach ($file in $zipFile) { + Write-Host "Deleting $file file" + Remove-Item -Path $file.FullName -Force -ErrorAction SilentlyContinue + } + displayName: 'Cleanup Edge driver binaries' + condition: always() + errorActionPreference: silentlyContinue + ignoreLASTEXITCODE: true
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/tools/ci/run_tc.py b/tests/wpt/web-platform-tests/tools/ci/run_tc.py index e6d8cd878aa..be7dbe082a1 100755 --- a/tests/wpt/web-platform-tests/tools/ci/run_tc.py +++ b/tests/wpt/web-platform-tests/tools/ci/run_tc.py @@ -51,9 +51,6 @@ except ImportError: from urllib.request import urlopen -QUEUE_BASE = "https://queue.taskcluster.net/v1/task" - - root = os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir, @@ -127,12 +124,8 @@ def checkout_revision(rev): def install_chrome(channel): - deb_prefix = "https://dl.google.com/linux/direct/" if channel in ("experimental", "dev", "nightly"): - # Pinned to 78 as 79 consistently fails reftests. TODO(foolip). - # See https://github.com/web-platform-tests/wpt/issues/19297. - deb_archive = "google-chrome-unstable_78.0.3904.17-1_amd64.deb" - deb_prefix = "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-unstable/" + deb_archive = "google-chrome-unstable_current_amd64.deb" elif channel == "beta": deb_archive = "google-chrome-beta_current_amd64.deb" elif channel == "stable": @@ -141,7 +134,7 @@ def install_chrome(channel): raise ValueError("Unrecognized release channel: %s" % channel) dest = os.path.join("/tmp", deb_archive) - resp = urlopen(deb_prefix + deb_archive) + resp = urlopen("https://dl.google.com/linux/direct/%s" % deb_archive) with open(dest, "w") as f: f.write(resp.read()) @@ -329,7 +322,14 @@ def fetch_event_data(): # For example under local testing return None - resp = urlopen("%s/%s" % (QUEUE_BASE, task_id)) + root_url = os.environ['TASKCLUSTER_ROOT_URL'] + if root_url == 'https://taskcluster.net': + queue_base = "https://queue.taskcluster.net/v1/task" + else: + queue_base = root_url + "/api/queue/v1/task" + + + resp = urlopen("%s/%s" % (queue_base, task_id)) task_data = json.load(resp) event_data = task_data.get("extra", {}).get("github_event") diff --git a/tests/wpt/web-platform-tests/tools/ci/tcdownload.py b/tests/wpt/web-platform-tests/tools/ci/tcdownload.py index 6e4d960da90..256726da7b5 100644 --- a/tests/wpt/web-platform-tests/tools/ci/tcdownload.py +++ b/tests/wpt/web-platform-tests/tools/ci/tcdownload.py @@ -10,6 +10,10 @@ import github logging.basicConfig() logger = logging.getLogger("tc-download") +# The root URL of the Taskcluster deployment from which to download wpt reports +# (after https://bugzilla.mozilla.org/show_bug.cgi?id=1574668 lands, this will +# be https://community-tc.services.mozilla.com) +TASKCLUSTER_ROOT_URL = 'https://taskcluster.net' def get_parser(): parser = argparse.ArgumentParser() @@ -74,8 +78,13 @@ def run(*args, **kwargs): return 1 for taskgroup in taskgroups: - taskgroup_url = "https://queue.taskcluster.net/v1/task-group/%s/list" - artifacts_list_url = "https://queue.taskcluster.net/v1/task/%s/artifacts" + if TASKCLUSTER_ROOT_URL == 'https://taskcluster.net': + # NOTE: this condition can be removed after November 9, 2019 + taskgroup_url = "https://queue.taskcluster.net/v1/task-group/%s/list" + artifacts_list_url = "https://queue.taskcluster.net/v1/task/%s/artifacts" + else: + taskgroup_url = TASKCLUSTER_ROOT_URL + "/api/queue/v1/task-group/%s/list" + artifacts_list_url = TASKCLUSTER_ROOT_URL + "/api/queue/v1/task/%s/artifacts" tasks = get_json(taskgroup_url % taskgroup, "tasks") for task in tasks: task_id = task["status"]["taskId"] diff --git a/tests/wpt/web-platform-tests/tools/wpt/browser.py b/tests/wpt/web-platform-tests/tools/wpt/browser.py index bed8c59bf07..fb10d756313 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/browser.py +++ b/tests/wpt/web-platform-tests/tools/wpt/browser.py @@ -17,6 +17,10 @@ from utils import call, get, untar, unzip uname = platform.uname() +# the rootUrl for the firefox-ci deployment of Taskcluster +# (after November 9, https://firefox-ci-tc.services.mozilla.com/) +FIREFOX_CI_ROOT_URL = 'https://taskcluster.net' + def _get_fileversion(binary, logger=None): command = "(Get-Item '%s').VersionInfo.FileVersion" % binary.replace("'", "''") @@ -423,8 +427,13 @@ class FirefoxAndroid(Browser): if dest is None: dest = os.pwd - TC_QUEUE_BASE = "https://queue.taskcluster.net/v1/" - TC_INDEX_BASE = "https://index.taskcluster.net/v1/" + if FIREFOX_CI_ROOT_URL == 'https://taskcluster.net': + # NOTE: this condition can be removed after November 9, 2019 + TC_QUEUE_BASE = "https://queue.taskcluster.net/v1/" + TC_INDEX_BASE = "https://index.taskcluster.net/v1/" + else: + TC_QUEUE_BASE = FIREFOX_CI_ROOT_URL + "/api/queue/v1/" + TC_INDEX_BASE = FIREFOX_CI_ROOT_URL + "/api/index/v1/" resp = requests.get(TC_INDEX_BASE + @@ -874,10 +883,12 @@ class EdgeChromium(Browser): if os.path.isfile(edgedriver_path): # remove read-only attribute os.chmod(edgedriver_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) # 0777 + print("Delete %s file" % edgedriver_path) os.remove(edgedriver_path) - driver_notes_path = os.path.join(dest, "Driver_notes") - if os.path.isdir(driver_notes_path): - shutil.rmtree(driver_notes_path, ignore_errors=False, onerror=handle_remove_readonly) + driver_notes_path = os.path.join(dest, "Driver_notes") + if os.path.isdir(driver_notes_path): + print("Delete %s folder" % driver_notes_path) + shutil.rmtree(driver_notes_path, ignore_errors=False, onerror=handle_remove_readonly) self.logger.info("Downloading MSEdgeDriver from %s" % url) unzip(get(url).raw, dest) diff --git a/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini b/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini new file mode 100644 index 00000000000..75e29ae4c42 --- /dev/null +++ b/tests/wpt/web-platform-tests/visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini @@ -0,0 +1,4 @@ +[viewport-no-resize-event-on-overflow-recalc.html] + expected: TIMEOUT + [Resize event not fired at window.visualViewport when content is added] + expected: NOTRUN diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html index ab55e2c160b..389fff9e041 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_options.https.html @@ -35,6 +35,13 @@ const NDEFReaderOptionTests = }, { desc: "Test that reading data succeed when NDEFScanOptions'" + + " recordType is set to 'unknown'.", + scanOptions: {recordType: "unknown"}, + unmatchedScanOptions: {recordType: "json"}, + message: createMessage([createUnknownRecord(test_buffer_data)]) + }, + { + desc: "Test that reading data succeed when NDEFScanOptions'" + " recordType is set to 'text'.", scanOptions: {recordType: "text"}, unmatchedScanOptions: {recordType: "json"}, @@ -103,6 +110,13 @@ const ReadMultiMessagesTests = unmatchedMessage: createMessage([createJsonRecord(test_json_data)]) }, { + desc: "Test that filtering 'unknown' record from different messages" + + " correctly with NDEFScanOptions' recordType is set to 'unknown'.", + scanOptions: {recordType: "unknown"}, + message: createMessage([createUnknownRecord(test_buffer_data)]), + unmatchedMessage: createMessage([createUrlRecord(test_url_data)]) + }, + { desc: "Test that filtering 'text' record from different messages" + " correctly with NDEFScanOptions' recordType is set to 'text'.", scanOptions: {recordType: "text"}, diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html index cea517d37aa..1206afb4713 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFRecord_constructor.https.html @@ -162,6 +162,30 @@ }, 'NDEFRecord constructor with JSON record type'); test(() => { + assert_throws(new TypeError, () => new NDEFRecord( + createUnknownRecord("A string is not a BufferSource")), + 'Only BufferSource is allowed to be the record data.'); + + let buffer = new ArrayBuffer(4); + new Uint8Array(buffer).set([1, 2, 3, 4]); + // Feed ArrayBuffer. + { + const record = new NDEFRecord(createUnknownRecord(buffer)); + assert_equals(record.recordType, 'unknown', 'recordType'); + assert_array_equals(new Uint8Array(record.data.buffer), [1, 2, 3, 4], + 'data has the same content with the original buffer'); + } + // Feed ArrayBufferView. + { + let buffer_view = new Uint8Array(buffer, 1); + const record = new NDEFRecord(createUnknownRecord(buffer_view)); + assert_equals(record.recordType, 'unknown', 'recordType'); + assert_array_equals(new Uint8Array(record.data.buffer), [2, 3, 4], + 'data has the same content with the original buffer view'); + } + }, 'NDEFRecord constructor with unknown record type'); + + test(() => { let buffer = new ArrayBuffer(4); let buffer_view = new Uint8Array(buffer); let original_data = new Uint8Array([1, 2, 3, 4]); diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html index fbebac946df..2be655fbbf9 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html @@ -70,6 +70,14 @@ const invalid_type_messages = createMessage([createOpaqueRecord(test_number_data)]), createMessage([createOpaqueRecord(test_json_data)]), + // NDEFRecord must have data. + createMessage([createUnknownRecord()]), + + // NDEFRecord.data for 'unknown' record must be BufferSource. + createMessage([createUnknownRecord(test_text_data)]), + createMessage([createUnknownRecord(test_number_data)]), + createMessage([createUnknownRecord(test_json_data)]), + // https://w3c.github.io/web-nfc/#dfn-map-external-data-to-ndef // NDEFRecord must have data. createMessage([createRecord('w3.org:xyz', '', undefined)]), @@ -301,13 +309,14 @@ nfc_test(async (t, mockNFC) => { createJsonRecord(test_json_data), createJsonRecord(test_number_data), createOpaqueRecord(test_buffer_data), + createUnknownRecord(test_buffer_data), createUrlRecord(test_url_data), createUrlRecord(test_url_data, true), createRecord('w3.org:xyz', '', test_buffer_data)], test_message_origin); await writer.push(message); assertNDEFMessagesEqual(message, mockNFC.pushedMessage()); -}, "NDEFWriter.push NDEFMessage containing text, json, opaque, url, absolute-url \ +}, "NDEFWriter.push NDEFMessage containing text, json, opaque, unknown, url, absolute-url \ and external records with default NDEFPushOptions."); nfc_test(async (t, mockNFC) => { @@ -322,6 +331,13 @@ nfc_test(async (t, mockNFC) => { assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage()); }, "Test that NDEFWriter.push succeeds when message is ArrayBuffer."); +nfc_test(async (t, mockNFC) => { + let buffer_view = new Uint8Array(test_buffer_data, 2, 5); + const writer = new NDEFWriter(); + await writer.push(buffer_view); + assertNDEFMessagesEqual(buffer_view, mockNFC.pushedMessage()); +}, "Test that NDEFWriter.push succeeds when message is ArrayBufferView."); + nfc_test(async () => { const writer = new NDEFWriter(); await writer.push(createMessage([createRecord('empty')])); diff --git a/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js b/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js index 80f0882f9f8..cf9b510f304 100644 --- a/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js +++ b/tests/wpt/web-platform-tests/web-nfc/resources/nfc-helpers.js @@ -64,8 +64,8 @@ const test_json_data = {level: 1, score: 100, label: 'Game'}; const test_url_data = 'https://w3c.github.io/web-nfc/'; const test_message_origin = 'https://127.0.0.1:8443'; const test_buffer_data = new ArrayBuffer(test_text_byte_array.length); -const test_buffer_view = - new Uint8Array(test_buffer_data).set(test_text_byte_array); +const test_buffer_view = new Uint8Array(test_buffer_data); +test_buffer_view.set(test_text_byte_array); const fake_tag_serial_number = 'c0:45:00:02'; const NFCHWStatus = {}; @@ -111,6 +111,10 @@ function createOpaqueRecord(buffer) { return createRecord('opaque', 'application/octet-stream', buffer); } +function createUnknownRecord(buffer) { + return createRecord('unknown', '', buffer); +} + function createUrlRecord(url, isAbsUrl) { if (isAbsUrl) { return createRecord('absolute-url', 'text/plain', url); @@ -126,11 +130,12 @@ function createNDEFPushOptions(target, timeout, ignoreRead) { // (e.g. NDEFWriter.push), and NDEFMessage that was received by the // mock NFC service. function assertNDEFMessagesEqual(providedMessage, receivedMessage) { - // If simple data type is passed, e.g. String or ArrayBuffer, convert it - // to NDEFMessage before comparing. + // If simple data type is passed, e.g. String or ArrayBuffer or + // ArrayBufferView, convert it to NDEFMessage before comparing. // https://w3c.github.io/web-nfc/#dom-ndefmessagesource let provided = providedMessage; - if (providedMessage instanceof ArrayBuffer) + if (providedMessage instanceof ArrayBuffer || + ArrayBuffer.isView(providedMessage)) provided = createMessage([createOpaqueRecord(providedMessage)]); else if (typeof providedMessage === 'string') provided = createMessage([createTextRecord(providedMessage)]); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html new file mode 100644 index 00000000000..0cce78bfbca --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html @@ -0,0 +1,142 @@ +<!doctype html> +<meta charset=utf-8> +<title></title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="RTCPeerConnection-helper.js"></script> +<script> +"use strict"; + +const kSmallTimeoutMs = 10; + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + + const signalingStateChangeEvent + = new EventWatcher(t, offerer, 'signalingstatechange') + .wait_for('signalingstatechange'); + await offerer.setLocalDescription(); + await signalingStateChangeEvent; + assert_equals(offerer.signalingState, 'have-local-offer'); +}, "Parameterless SLD() in 'stable' goes to 'have-local-offer'"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + + await offerer.setLocalDescription(); + assert_not_equals(offerer.pendingLocalDescription, null); +}, "Parameterless SLD() in 'stable' sets pendingLocalDescription"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + + const transceiver = offerer.addTransceiver('audio'); + await offerer.setLocalDescription(); + assert_not_equals(transceiver.mid, null); +}, "Parameterless SLD() in 'stable' assigns transceiver.mid"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + const answerer = new RTCPeerConnection(); + t.add_cleanup(() => answerer.close()); + + await answerer.setRemoteDescription(await offerer.createOffer()); + const signalingStateChangeEvent + = new EventWatcher(t, answerer, 'signalingstatechange') + .wait_for('signalingstatechange'); + await answerer.setLocalDescription(); + await signalingStateChangeEvent; + assert_equals(answerer.signalingState, 'stable'); +}, "Parameterless SLD() in 'have-remote-offer' goes to 'stable'"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + const answerer = new RTCPeerConnection(); + t.add_cleanup(() => answerer.close()); + + await answerer.setRemoteDescription(await offerer.createOffer()); + await answerer.setLocalDescription(); + assert_not_equals(answerer.currentLocalDescription, null); +}, "Parameterless SLD() in 'have-remote-offer' sets currentLocalDescription"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + const answerer = new RTCPeerConnection(); + t.add_cleanup(() => answerer.close()); + + offerer.addTransceiver('audio'); + const onTransceiverPromise = new Promise(resolve => + answerer.ontrack = e => resolve(e.transceiver)); + await answerer.setRemoteDescription(await offerer.createOffer()); + const transceiver = await onTransceiverPromise; + await answerer.setLocalDescription(); + assert_equals(transceiver.currentDirection, 'recvonly'); +}, "Parameterless SLD() in 'have-remote-offer' sets " + + "transceiver.currentDirection"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + + const offer = await offerer.createOffer(); + await offerer.setLocalDescription(); + // assert_true() is used rather than assert_equals() so that if the assertion + // fails, the -expected.txt file is not different on each run. + assert_true(offerer.pendingLocalDescription.sdp == offer.sdp, + "offerer.pendingLocalDescription.sdp == offer.sdp"); +}, "Parameterless SLD() uses [[LastCreatedOffer]] if it is still valid"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + const answerer = new RTCPeerConnection(); + t.add_cleanup(() => answerer.close()); + + await answerer.setRemoteDescription(await offerer.createOffer()); + const answer = await answerer.createAnswer(); + await answerer.setLocalDescription(); + // assert_true() is used rather than assert_equals() so that if the assertion + // fails, the -expected.txt file is not different on each run. + assert_true(answerer.currentLocalDescription.sdp == answer.sdp, + "answerer.currentLocalDescription.sdp == answer.sdp"); +}, "Parameterless SLD() uses [[LastCreatedAnswer]] if it is still valid"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + offerer.close(); + + offerer.setLocalDescription().then(t.step_func(() => assert_not_reached())); + await new Promise(resolve => t.step_timeout(resolve, kSmallTimeoutMs)); +}, "Parameterless SLD() never resolves if already closed"); + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + + offerer.setLocalDescription().then(t.step_func(() => assert_not_reached())); + offerer.close(); + await new Promise(resolve => t.step_timeout(resolve, kSmallTimeoutMs)); +}, "Parameterless SLD() never resolves if closed while pending"); + + +promise_test(async t => { + const offerer = new RTCPeerConnection(); + t.add_cleanup(() => offerer.close()); + const answerer = new RTCPeerConnection(); + t.add_cleanup(() => answerer.close()); + + // Implicitly create an offer. + await offerer.setLocalDescription(); + await answerer.setRemoteDescription(offerer.pendingLocalDescription); + // Implicitly create an answer. + await answerer.setLocalDescription(); + await offerer.setRemoteDescription(answerer.currentLocalDescription); +}, "Parameterless SLD() in a full O/A exchange succeeds"); + +</script>
\ No newline at end of file diff --git a/tests/wpt/webgl/meta/conformance/rendering/multisample-corruption.html.ini b/tests/wpt/webgl/meta/conformance/rendering/multisample-corruption.html.ini index 2d68d489d35..a318722d23b 100644 --- a/tests/wpt/webgl/meta/conformance/rendering/multisample-corruption.html.ini +++ b/tests/wpt/webgl/meta/conformance/rendering/multisample-corruption.html.ini @@ -7,3 +7,75 @@ [WebGL test #1: context does not exist] expected: FAIL + [WebGL test #9: Canvas should be red] + expected: FAIL + + [WebGL test #17: Canvas should be red] + expected: FAIL + + [WebGL test #23: Canvas should be red] + expected: FAIL + + [WebGL test #8: Canvas should be red] + expected: FAIL + + [WebGL test #13: Canvas should be red] + expected: FAIL + + [WebGL test #18: Canvas should be red] + expected: FAIL + + [WebGL test #5: Canvas should be red] + expected: FAIL + + [WebGL test #14: Canvas should be red] + expected: FAIL + + [WebGL test #22: Canvas should be red] + expected: FAIL + + [WebGL test #20: Canvas should be red] + expected: FAIL + + [WebGL test #3: Canvas should be red] + expected: FAIL + + [WebGL test #24: Canvas should be red] + expected: FAIL + + [WebGL test #7: Canvas should be red] + expected: FAIL + + [WebGL test #11: Canvas should be red] + expected: FAIL + + [WebGL test #2: Canvas should be red] + expected: FAIL + + [WebGL test #4: Canvas should be red] + expected: FAIL + + [WebGL test #1: Canvas should be red] + expected: FAIL + + [WebGL test #21: Canvas should be red] + expected: FAIL + + [WebGL test #6: Canvas should be red] + expected: FAIL + + [WebGL test #19: Canvas should be red] + expected: FAIL + + [WebGL test #12: Canvas should be red] + expected: FAIL + + [WebGL test #16: Canvas should be red] + expected: FAIL + + [WebGL test #10: Canvas should be red] + expected: FAIL + + [WebGL test #15: Canvas should be red] + expected: FAIL + 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 436b6e96fe7..0e7c48f1481 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,5 +1,4 @@ [canvas-resizing-with-pbo-bound.html] - expected: TIMEOUT [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL |