Update web-platform-tests to revision 424249088dd679888e07bd315dd8ebc98ccf323a

This commit is contained in:
WPT Sync Bot 2019-11-03 10:24:12 +00:00
parent 4ad08fff04
commit bca3835607
93 changed files with 1641 additions and 291 deletions

View file

@ -7,7 +7,7 @@
expected: FAIL expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.] [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.] [Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL expected: FAIL

View file

@ -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": [
[ [
"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": [
[ [
"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-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": [ "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/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": [ "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/helper-resize-event-on-load-overflowing-page.html": [
[] []
], ],
"visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini": [
[]
],
"visual-viewport/viewport_support.js": [ "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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [ "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": [
[ [
"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.js": [
[ [
"html/semantics/forms/form-submission-0/submission-checks.window.html", "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": [
[ [
"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": [
[ [
"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": [
[ [
"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": [
[ [
"webrtc/RTCPeerConnection-setLocalDescription-pranswer.html", "webrtc/RTCPeerConnection-setLocalDescription-pranswer.html",
@ -457048,7 +457112,7 @@
"support" "support"
], ],
".taskcluster.yml": [ ".taskcluster.yml": [
"27479fb57e072114e7898494468740b239c7ae92", "6de1e280cecdece123b42950a4c0a35cf85f4a5c",
"support" "support"
], ],
".well-known/README.md": [ ".well-known/README.md": [
@ -463356,27 +463420,27 @@
"support" "support"
], ],
"WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js": [ "WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js": [
"c69249047bf2bfceef5001ffb5ee8fbcf9859a6c", "37e3eb4324200c85cb65ee9f077ea7433bff7783",
"testharness" "testharness"
], ],
"WebCryptoAPI/derive_bits_keys/ecdh_bits.js": [ "WebCryptoAPI/derive_bits_keys/ecdh_bits.js": [
"fe82ffe5712e39aef2638ccf57a9695fb0197e2b", "5cc7193aebd7942d2636d369328917b7acc3e16a",
"support" "support"
], ],
"WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js": [ "WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js": [
"b212b92c74b0c318e8c32cb22735a1e29aa610eb", "d8235fce5a74122591ee8b9462a1a66ac5da097c",
"testharness" "testharness"
], ],
"WebCryptoAPI/derive_bits_keys/ecdh_keys.js": [ "WebCryptoAPI/derive_bits_keys/ecdh_keys.js": [
"b1a0bcd485d92ef46be7908396c083b75aaf9204", "99008e0cbbe09eab687c62b8935e85a3369e5ba0",
"support" "support"
], ],
"WebCryptoAPI/derive_bits_keys/hkdf.https.any.js": [ "WebCryptoAPI/derive_bits_keys/hkdf.https.any.js": [
"d0d545a7d27222fede323a459fdee81e051f7106", "02492c3741c7d1bb6f300bba51e08b911a1295bd",
"testharness" "testharness"
], ],
"WebCryptoAPI/derive_bits_keys/hkdf.js": [ "WebCryptoAPI/derive_bits_keys/hkdf.js": [
"95889676c15960796a5e6d2b242d308b9c1f5afc", "c18a433d7f9036d94fcc649b0294a68e7750e853",
"support" "support"
], ],
"WebCryptoAPI/derive_bits_keys/hkdf_vectors.js": [ "WebCryptoAPI/derive_bits_keys/hkdf_vectors.js": [
@ -463384,11 +463448,11 @@
"support" "support"
], ],
"WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js": [ "WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js": [
"539f390c8afc8bd9894f3dea35dcb94a4217489f", "2efbe523f8cd7d5daeb4dce42b893369467f9bfe",
"testharness" "testharness"
], ],
"WebCryptoAPI/derive_bits_keys/pbkdf2.js": [ "WebCryptoAPI/derive_bits_keys/pbkdf2.js": [
"7edc7ea5a2654ec39800cbe33b9a678bc8ee31fa", "0403f382e1479c7c5018e91aba2ceb31b89998dc",
"support" "support"
], ],
"WebCryptoAPI/derive_bits_keys/pbkdf2_vectors.js": [ "WebCryptoAPI/derive_bits_keys/pbkdf2_vectors.js": [
@ -577067,6 +577131,10 @@
"8d3b9472b2c9a2ee88dc97f907f9d16eb4fa3755", "8d3b9472b2c9a2ee88dc97f907f9d16eb4fa3755",
"support" "support"
], ],
"css/css-images/animations/object-position-interpolation.html": [
"055cbc8421b6af58e636729268f7323e1710458c",
"testharness"
],
"css/css-images/css-image-fallbacks-and-annotations-ref.html": [ "css/css-images/css-image-fallbacks-and-annotations-ref.html": [
"f3193036766e428bf946e81b7df72bfc7f4901db", "f3193036766e428bf946e81b7df72bfc7f4901db",
"support" "support"
@ -578459,6 +578527,18 @@
"422be2304c891fbd0c4f256bc3b87514d935fc81", "422be2304c891fbd0c4f256bc3b87514d935fc81",
"visual" "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": [ "css/css-lists/list-style-type-string-002-ref.html": [
"8694b5f54424c9a6e96209950a5585352a836403", "8694b5f54424c9a6e96209950a5585352a836403",
"support" "support"
@ -584436,7 +584516,7 @@
"support" "support"
], ],
"css/css-pseudo/marker-font-properties.html": [ "css/css-pseudo/marker-font-properties.html": [
"a108792fa207b22110a2a70a5d3ebf635033dd5d", "4dd780679845a34699f31febd927dc3b774a5ffd",
"reftest" "reftest"
], ],
"css/css-pseudo/marker-inherit-line-height-ref.html": [ "css/css-pseudo/marker-inherit-line-height-ref.html": [
@ -584471,6 +584551,10 @@
"94d0c42eca8cffbd5637a1039028925c19e1f851", "94d0c42eca8cffbd5637a1039028925c19e1f851",
"reftest" "reftest"
], ],
"css/css-pseudo/parsing/marker-supported-properties.html": [
"451aac149dbda8eb605dadc377bfa4186a871a50",
"testharness"
],
"css/css-pseudo/parsing/tree-abiding-pseudo-elements.html": [ "css/css-pseudo/parsing/tree-abiding-pseudo-elements.html": [
"05c23a3bc143ce2a005b3686af2eae2cb60cb7ba", "05c23a3bc143ce2a005b3686af2eae2cb60cb7ba",
"testharness" "testharness"
@ -587396,11 +587480,11 @@
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-align-002.html": [ "css/css-scroll-snap/scroll-target-align-002.html": [
"7e82f030e4c3a47e84475ad440a80b907ffbe99f", "01db026dff29c62dbbe27a4e262bb2ed715ba5ef",
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-align-003.html": [ "css/css-scroll-snap/scroll-target-align-003.html": [
"1d6fbebbcd7f652746ece943a240ba2540a10710", "d13efa0abb5d1a13dbb43d78301730b322322ccb",
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-margin-001.html": [ "css/css-scroll-snap/scroll-target-margin-001.html": [
@ -587408,11 +587492,11 @@
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-margin-002.html": [ "css/css-scroll-snap/scroll-target-margin-002.html": [
"a02cf7db17517cb9bcfd56173c4b6f94cb5f1283", "51cf553b3603f237226fa6b7d0ca33089f801a0e",
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-margin-003.html": [ "css/css-scroll-snap/scroll-target-margin-003.html": [
"d0434db515a68bb7b280edaebe8428dd705d4fc3", "2ea8eff67c3d17b38031ca5534c8091cfa854409",
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-padding-001.html": [ "css/css-scroll-snap/scroll-target-padding-001.html": [
@ -587420,11 +587504,11 @@
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-padding-002.html": [ "css/css-scroll-snap/scroll-target-padding-002.html": [
"3a0ca3b8519e8dc73ed9a3b19c7af0312c5d69a6", "fbed1e132ecf3805784436c4b13889f61ff8c7ba",
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-padding-003.html": [ "css/css-scroll-snap/scroll-target-padding-003.html": [
"1e92e9be72fa17d718a6e121c5e18edf8bbcae3d", "ccbe7b0ec97c9ba14d2ac11df1a24b032e185fe0",
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-snap-001.html": [ "css/css-scroll-snap/scroll-target-snap-001.html": [
@ -587432,11 +587516,11 @@
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-snap-002.html": [ "css/css-scroll-snap/scroll-target-snap-002.html": [
"89df44cba28443c015032301df4c0088ed9fe228", "28f3c124525c68fa3b108019aa6f30b0d878a0bf",
"reftest" "reftest"
], ],
"css/css-scroll-snap/scroll-target-snap-003.html": [ "css/css-scroll-snap/scroll-target-snap-003.html": [
"3e90347a4dc9ee07e04350a6436309c673a13569", "6fe3901e51c10b9d3d687d7b421b67e1ae6e5896",
"reftest" "reftest"
], ],
"css/css-scroll-snap/scrollTo-scrollBy-snaps.html": [ "css/css-scroll-snap/scrollTo-scrollBy-snaps.html": [
@ -587480,19 +587564,19 @@
"testharness" "testharness"
], ],
"css/css-scroll-snap/support/scroll-target-align-001-iframe.html": [ "css/css-scroll-snap/support/scroll-target-align-001-iframe.html": [
"20922ea18ea104bd613a27fcce58a1f0e9ba70ad", "d86a5e86d01b5806c55123f07254f71d8891dfc0",
"support" "support"
], ],
"css/css-scroll-snap/support/scroll-target-margin-001-iframe.html": [ "css/css-scroll-snap/support/scroll-target-margin-001-iframe.html": [
"8eb5b9c863853a29eeaefa33caa89ae237278071", "2b2c1d2d8c11228fadf4a85ac2c627f4bc3b17c5",
"support" "support"
], ],
"css/css-scroll-snap/support/scroll-target-padding-001-iframe.html": [ "css/css-scroll-snap/support/scroll-target-padding-001-iframe.html": [
"b9467e4347fe3dd005123f7c76e6cda1596e79d8", "9260c81b1c3c5787d7b284601ab2ca350c282e5b",
"support" "support"
], ],
"css/css-scroll-snap/support/scroll-target-snap-001-iframe.html": [ "css/css-scroll-snap/support/scroll-target-snap-001-iframe.html": [
"1a598fa72384b40ee0331c6a3aaeaaa0fac3ae02", "3146a3bf8824d625b1e49032343d1956f496fdf7",
"support" "support"
], ],
"css/css-scroll-snap/unreachable-snap-positions.html": [ "css/css-scroll-snap/unreachable-snap-positions.html": [
@ -588963,6 +589047,10 @@
"ed3590ceef222740139a4b9d3017478c8728bb30", "ed3590ceef222740139a4b9d3017478c8728bb30",
"support" "support"
], ],
"css/css-size-adjust/animations/text-size-adjust-interpolation.html": [
"1d7e54b734158eb234a4d653b239f9de04187aac",
"testharness"
],
"css/css-size-adjust/inheritance.html": [ "css/css-size-adjust/inheritance.html": [
"730bcfe2b59534534c2ddec225ceb70fbb7700a3", "730bcfe2b59534534c2ddec225ceb70fbb7700a3",
"testharness" "testharness"
@ -602775,6 +602863,10 @@
"f11374e47b1876d06231854907c3082b5d4774ab", "f11374e47b1876d06231854907c3082b5d4774ab",
"support" "support"
], ],
"css/css-transitions/animations/text-shadow-interpolation.html": [
"c007816ecb04236421ff0aea8861da19c244338a",
"testharness"
],
"css/css-transitions/before-load-001.html": [ "css/css-transitions/before-load-001.html": [
"009260eea430721971053f6d98330f9a9ed56d6d", "009260eea430721971053f6d98330f9a9ed56d6d",
"testharness" "testharness"
@ -620940,7 +621032,7 @@
"support" "support"
], ],
"css/support/computed-testcommon.js": [ "css/support/computed-testcommon.js": [
"1e87f2a518cb1c7845a99d6a13330e7a13436eca", "c7c7e073203a67844ebcdf029f5c323964a41c99",
"support" "support"
], ],
"css/support/green.ico": [ "css/support/green.ico": [
@ -626219,22 +626311,6 @@
"fb4b3ad3c7aeab61f44c394926735a97a8767d3c", "fb4b3ad3c7aeab61f44c394926735a97a8767d3c",
"support" "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": [ "css/vendor-imports/mozilla/mozilla-central-reftests/masking/blank.html": [
"abb1b5472843b7bcf63c946897cd66da456033e7", "abb1b5472843b7bcf63c946897cd66da456033e7",
"support" "support"
@ -626872,7 +626948,7 @@
"support" "support"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list": [ "css/vendor-imports/mozilla/mozilla-central-reftests/reftest.list": [
"2d9b459fa8e62ee70bb79567c5727650008f0c41", "97621fe19fe42c95103d8bbd100fece50d0f51be",
"support" "support"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/ruby/nested-ruby-pairing-001-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/ruby/nested-ruby-pairing-001-ref.html": [
@ -631100,7 +631176,7 @@
"support" "support"
], ],
"docs/running-tests/from-local-system.md": [ "docs/running-tests/from-local-system.md": [
"5a9a776a285ad488509f6c494f43ebbdc8ec108f", "0f337176c47d7c38bcaebd85fd86628e1870dfae",
"support" "support"
], ],
"docs/running-tests/from-web.md": [ "docs/running-tests/from-web.md": [
@ -643516,7 +643592,7 @@
"testharness" "testharness"
], ],
"html/cross-origin-opener-policy/popup-redirect-cache.https.html": [ "html/cross-origin-opener-policy/popup-redirect-cache.https.html": [
"519f710596005b5c460e03cfd398fafbb585ce40", "0524878a03a8d3764c63b77b5c8c4f1453c5a288",
"testharness" "testharness"
], ],
"html/cross-origin-opener-policy/popup-redirect-cache.https.html.headers": [ "html/cross-origin-opener-policy/popup-redirect-cache.https.html.headers": [
@ -654415,6 +654491,10 @@
"145b5dd3727f995fba56407f07e158d1fb80ba5a", "145b5dd3727f995fba56407f07e158d1fb80ba5a",
"testharness" "testharness"
], ],
"html/semantics/forms/form-submission-0/SubmitEvent.window.js": [
"93dbabb866beeba9e04d0d4f99dde78f448e8dff",
"testharness"
],
"html/semantics/forms/form-submission-0/constructing-form-data-set.html": [ "html/semantics/forms/form-submission-0/constructing-form-data-set.html": [
"8dad6cdd01a43fa17694c67939e8e5a05ab529e2", "8dad6cdd01a43fa17694c67939e8e5a05ab529e2",
"testharness" "testharness"
@ -654448,13 +654528,17 @@
"support" "support"
], ],
"html/semantics/forms/form-submission-0/form-submission-algorithm.html": [ "html/semantics/forms/form-submission-0/form-submission-algorithm.html": [
"8f61cbc18c95133561e4dd8cbffd3cdb682420e4", "df39b57353c67ebb02014865f28d739bbf24c690",
"testharness" "testharness"
], ],
"html/semantics/forms/form-submission-0/getactionurl.html": [ "html/semantics/forms/form-submission-0/getactionurl.html": [
"83de220267e7c37374bcd4d4490f27e4488e1126", "83de220267e7c37374bcd4d4490f27e4488e1126",
"testharness" "testharness"
], ],
"html/semantics/forms/form-submission-0/implicit-submission.optional.html": [
"109d3b901a53537e9ae2fb17f84d25d4a764b2e2",
"testharness"
],
"html/semantics/forms/form-submission-0/resources/file-submission.py": [ "html/semantics/forms/form-submission-0/resources/file-submission.py": [
"5fc67faa880ffa9300a093aa0ef1f67c3a76eb0c", "5fc67faa880ffa9300a093aa0ef1f67c3a76eb0c",
"support" "support"
@ -654464,7 +654548,7 @@
"support" "support"
], ],
"html/semantics/forms/form-submission-0/resources/targetted-form.js": [ "html/semantics/forms/form-submission-0/resources/targetted-form.js": [
"6b6685291d2bd3d7dc64f97e2d9e460394d2eb3c", "291251b7e8037ce5c9053d7c4b63142a5783b877",
"support" "support"
], ],
"html/semantics/forms/form-submission-0/submission-checks.window.js": [ "html/semantics/forms/form-submission-0/submission-checks.window.js": [
@ -654631,6 +654715,10 @@
"1747bd727aa2fb4deb8f2a81601523776a51a355", "1747bd727aa2fb4deb8f2a81601523776a51a355",
"testharness" "testharness"
], ],
"html/semantics/forms/the-button-element/button-submit-children.html": [
"06218f4fc9e99efe2d87a9eb85582d3dc84434a1",
"testharness"
],
"html/semantics/forms/the-button-element/button-type.html": [ "html/semantics/forms/the-button-element/button-type.html": [
"6cfd6687c707479600534de03156afa698daa314", "6cfd6687c707479600534de03156afa698daa314",
"testharness" "testharness"
@ -661944,7 +662032,7 @@
"support" "support"
], ],
"interfaces/media-capabilities.idl": [ "interfaces/media-capabilities.idl": [
"71bc46d24109f49d616e05e804bcda01dcd45afb", "6fe43d87a80bb7229d5cebc5fbd4cac08f44fa39",
"support" "support"
], ],
"interfaces/media-playback-quality.idl": [ "interfaces/media-playback-quality.idl": [
@ -662168,7 +662256,7 @@
"support" "support"
], ],
"interfaces/web-nfc.idl": [ "interfaces/web-nfc.idl": [
"d2ec623e864141152f9ca2ac79b5252b246257bf", "117812a1f276d0bb84de94c2357485d7670ad314",
"support" "support"
], ],
"interfaces/web-share.idl": [ "interfaces/web-share.idl": [
@ -662212,7 +662300,7 @@
"support" "support"
], ],
"interfaces/webrtc.idl": [ "interfaces/webrtc.idl": [
"2989db5453f5333c8e04e6d237f4142aa9fa85f8", "5a5eb7b10631f14245b158cc6b06a2a178ce1d20",
"support" "support"
], ],
"interfaces/webusb.idl": [ "interfaces/webusb.idl": [
@ -662943,6 +663031,10 @@
"76eef3a8f45c131bdbf90028f8bcad75be0e5f32", "76eef3a8f45c131bdbf90028f8bcad75be0e5f32",
"testharness" "testharness"
], ],
"loading/lazyload/image-loading-lazy-multicol-tentative.html": [
"eb69d6810d60a198ae5861211423acb7f76245f9",
"testharness"
],
"loading/lazyload/image-loading-lazy.tentative.html": [ "loading/lazyload/image-loading-lazy.tentative.html": [
"5920eb1882df0a69e0d23c26433bf1b28b9275e9", "5920eb1882df0a69e0d23c26433bf1b28b9275e9",
"testharness" "testharness"
@ -668292,7 +668384,7 @@
"support" "support"
], ],
"native-file-system/script-tests/FileSystemFileHandle-getFile.js": [ "native-file-system/script-tests/FileSystemFileHandle-getFile.js": [
"88e5593ebad613dc30cbdb838fe481e5353bce69", "6b7d9f9a3171c96aaa2e1312451b3a9cac6c2e9b",
"support" "support"
], ],
"native-file-system/script-tests/FileSystemWriter.js": [ "native-file-system/script-tests/FileSystemWriter.js": [
@ -677124,11 +677216,11 @@
"testharness" "testharness"
], ],
"preload/preload-csp.sub.html": [ "preload/preload-csp.sub.html": [
"62d0c71039b7c06a4299ac71e055ff3786de5c41", "a11214e9ec8e41a518f9fdb6b3db1b96b6e55df9",
"testharness" "testharness"
], ],
"preload/preload-default-csp.sub.html": [ "preload/preload-default-csp.sub.html": [
"9fc11945866834c70c9ad270fb11d37a443ac3d0", "c649a53f874d854c1ed6052b06a7adad01b816e5",
"testharness" "testharness"
], ],
"preload/preload-strict-dynamic.html": [ "preload/preload-strict-dynamic.html": [
@ -690736,7 +690828,7 @@
"support" "support"
], ],
"resources/chromium/nfc-mock.js": [ "resources/chromium/nfc-mock.js": [
"811c0aeafceed8e16148ae4c678b55733fc6c8b8", "aff72bbad028ecd6b8c6a8023841e08f072adfac",
"support" "support"
], ],
"resources/chromium/sensor.mojom.js": [ "resources/chromium/sensor.mojom.js": [
@ -690796,7 +690888,7 @@
"support" "support"
], ],
"resources/chromium/webxr-test.js": [ "resources/chromium/webxr-test.js": [
"94031657b4b6d2698739eddf0bd4028e0aa8fdea", "d87b3420a85177ad5ef1c5c36cc5c4d785133eba",
"support" "support"
], ],
"resources/chromium/webxr-test.js.headers": [ "resources/chromium/webxr-test.js.headers": [
@ -697043,6 +697135,10 @@
"e974e38177526e2e4bd8344712c37b00dc2e2bda", "e974e38177526e2e4bd8344712c37b00dc2e2bda",
"testharness" "testharness"
], ],
"svg/animations/pruning-first-interval.html": [
"5a1d1463beaec5b8c3e86406de6138960de8e5ab",
"testharness"
],
"svg/animations/remove-animation-element-while-animation-is-running.html": [ "svg/animations/remove-animation-element-while-animation-is-running.html": [
"764d25b69f158e028d8ec9fe14e1c43840d00925", "764d25b69f158e028d8ec9fe14e1c43840d00925",
"testharness" "testharness"
@ -701588,7 +701684,7 @@
"support" "support"
], ],
"tools/ci/azure/cleanup_win10.yml": [ "tools/ci/azure/cleanup_win10.yml": [
"76852b58cd39f057ae4441b26fd423714b07f445", "f495a0c554537f1161981e19c12c597ba41ef2b2",
"support" "support"
], ],
"tools/ci/azure/com.apple.Safari.plist": [ "tools/ci/azure/com.apple.Safari.plist": [
@ -701688,7 +701784,7 @@
"support" "support"
], ],
"tools/ci/run_tc.py": [ "tools/ci/run_tc.py": [
"e6d8cd878aacc58f535be562a85ba511e18676f2", "be7dbe082a1709493b62316d15668ea10ae93607",
"support" "support"
], ],
"tools/ci/taskcluster-run.py": [ "tools/ci/taskcluster-run.py": [
@ -701696,7 +701792,7 @@
"support" "support"
], ],
"tools/ci/tcdownload.py": [ "tools/ci/tcdownload.py": [
"6e4d960da900c670701807455bd67b247e37f34b", "256726da7b568f32115dfeaa6bc1407490c0d076",
"support" "support"
], ],
"tools/ci/tests/test_jobs.py": [ "tools/ci/tests/test_jobs.py": [
@ -706472,7 +706568,7 @@
"support" "support"
], ],
"tools/wpt/browser.py": [ "tools/wpt/browser.py": [
"bed8c59bf0729ed2327d499f7ec19817055379a6", "fb10d75631305bd66044f033d3ac8f5e8ffb4a0b",
"support" "support"
], ],
"tools/wpt/commands.json": [ "tools/wpt/commands.json": [
@ -711503,6 +711599,10 @@
"dcb9432da83cb21b6f0403080d3c7b3b5df1659e", "dcb9432da83cb21b6f0403080d3c7b3b5df1659e",
"testharness" "testharness"
], ],
"visual-viewport/viewport-no-resize-event-on-overflow-recalc.html.ini": [
"75e29ae4c427efbaeb9e08ec4824b90c30c2aead",
"support"
],
"visual-viewport/viewport-offset-manual.html": [ "visual-viewport/viewport-offset-manual.html": [
"c216e405a3e78765b95c815c45809f152dd97e41", "c216e405a3e78765b95c815c45809f152dd97e41",
"manual" "manual"
@ -713456,7 +713556,7 @@
"manual" "manual"
], ],
"web-nfc/NDEFReader_options.https.html": [ "web-nfc/NDEFReader_options.https.html": [
"ab55e2c160bd39710a62238fce795ff63f03c995", "389fff9e041e284358a87e5cc133046d4a579b84",
"testharness" "testharness"
], ],
"web-nfc/NDEFReader_scan.https.html": [ "web-nfc/NDEFReader_scan.https.html": [
@ -713472,7 +713572,7 @@
"testharness" "testharness"
], ],
"web-nfc/NDEFRecord_constructor.https.html": [ "web-nfc/NDEFRecord_constructor.https.html": [
"cea517d37aa17bf94c3d96c9abd19db5f1fa184c", "1206afb4713dc7e4b48dcc837b3dd708382a9ce2",
"testharness" "testharness"
], ],
"web-nfc/NDEFWriter-document-hidden-manual.https.html": [ "web-nfc/NDEFWriter-document-hidden-manual.https.html": [
@ -713480,7 +713580,7 @@
"manual" "manual"
], ],
"web-nfc/NDEFWriter_push.https.html": [ "web-nfc/NDEFWriter_push.https.html": [
"fbebac946dfbf77a49c11c0472da900ca26759be", "2be655fbbf93cfb0c0c8813f86dc3e98450af720",
"testharness" "testharness"
], ],
"web-nfc/README.md": [ "web-nfc/README.md": [
@ -713496,7 +713596,7 @@
"testharness" "testharness"
], ],
"web-nfc/resources/nfc-helpers.js": [ "web-nfc/resources/nfc-helpers.js": [
"80f0882f9f8deff30b0c8c60ecb1bfc7c6df168c", "cf9b510f30424e79412cc35098f63f5afd05707b",
"support" "support"
], ],
"web-nfc/resources/support-iframe.html": [ "web-nfc/resources/support-iframe.html": [
@ -716859,6 +716959,10 @@
"80faf85f15e1acff67205efef90bbf5fd491bbc8", "80faf85f15e1acff67205efef90bbf5fd491bbc8",
"testharness" "testharness"
], ],
"webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html": [
"0cce78bfbca161016721c4e2b122382c4be868f7",
"testharness"
],
"webrtc/RTCPeerConnection-setLocalDescription-pranswer.html": [ "webrtc/RTCPeerConnection-setLocalDescription-pranswer.html": [
"1fbb30923f3d1e9abef6940a931a6d426ed01915", "1fbb30923f3d1e9abef6940a931a6d426ed01915",
"testharness" "testharness"

View file

@ -2,8 +2,14 @@
[WebCryptoAPI: deriveBits() Using ECDH] [WebCryptoAPI: deriveBits() Using ECDH]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[ecdh_bits.https.any.html] [ecdh_bits.https.any.html]
[WebCryptoAPI: deriveBits() Using ECDH] [WebCryptoAPI: deriveBits() Using ECDH]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL

View file

@ -2,8 +2,14 @@
[WebCryptoAPI: deriveKey() Using ECDH] [WebCryptoAPI: deriveKey() Using ECDH]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[ecdh_keys.https.any.worker.html] [ecdh_keys.https.any.worker.html]
[WebCryptoAPI: deriveKey() Using ECDH] [WebCryptoAPI: deriveKey() Using ECDH]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL

View file

@ -2,38 +2,62 @@
[WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[hkdf.https.any.worker.html?1001-2000] [hkdf.https.any.worker.html?1001-2000]
[WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[hkdf.https.any.html?2001-3000] [hkdf.https.any.html?2001-3000]
[WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[hkdf.https.any.worker.html?2001-3000] [hkdf.https.any.worker.html?2001-3000]
[WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[hkdf.https.any.html?1001-2000] [hkdf.https.any.html?1001-2000]
[WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[hkdf.https.any.html?1-1000] [hkdf.https.any.html?1-1000]
[WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[hkdf.https.any.worker.html?3001-last] [hkdf.https.any.worker.html?3001-last]
[WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[hkdf.https.any.html?3001-last] [hkdf.https.any.html?3001-last]
[WebCryptoAPI: deriveBits() and deriveKey() Using HKDF] [WebCryptoAPI: deriveBits() and deriveKey() Using HKDF]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL

View file

@ -2,88 +2,142 @@
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.worker.html?1-1000] [pbkdf2.https.any.worker.html?1-1000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.worker.html?1001-2000] [pbkdf2.https.any.worker.html?1001-2000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.worker.html?3001-4000] [pbkdf2.https.any.worker.html?3001-4000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?1001-2000] [pbkdf2.https.any.html?1001-2000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?3001-4000] [pbkdf2.https.any.html?3001-4000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.worker.html?8001-last] [pbkdf2.https.any.worker.html?8001-last]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?1-1000] [pbkdf2.https.any.html?1-1000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?5001-6000] [pbkdf2.https.any.html?5001-6000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?7001-8000] [pbkdf2.https.any.html?7001-8000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.worker.html?4001-5000] [pbkdf2.https.any.worker.html?4001-5000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.worker.html?7001-8000] [pbkdf2.https.any.worker.html?7001-8000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?2001-3000] [pbkdf2.https.any.html?2001-3000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.worker.html?6001-7000] [pbkdf2.https.any.worker.html?6001-7000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?8001-last] [pbkdf2.https.any.html?8001-last]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?4001-5000] [pbkdf2.https.any.html?4001-5000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.worker.html?5001-6000] [pbkdf2.https.any.worker.html?5001-6000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL
[pbkdf2.https.any.html?6001-7000] [pbkdf2.https.any.html?6001-7000]
[WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2] [WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2]
expected: FAIL expected: FAIL
[setup - define tests]
expected: FAIL

View file

@ -5,9 +5,9 @@
[[data-expected-height\] 7] [[data-expected-height\] 7]
expected: FAIL expected: FAIL
[[data-expected-height\] 1] [[data-expected-height\] 3]
expected: FAIL expected: FAIL
[[data-expected-height\] 2] [[data-expected-height\] 4]
expected: FAIL expected: FAIL

View file

@ -1,2 +1,2 @@
[abspos-float-with-inline-container.html] [abspos-float-with-inline-container.html]
expected: FAIL expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[object-position-interpolation.html]
[object-position-interpolation]
expected: FAIL

View file

@ -0,0 +1,4 @@
[text-shadow-interpolation.html]
[text-shadow interpolation]
expected: FAIL

View file

@ -9,3 +9,6 @@
[throws if handleEvent is thruthy and not callable] [throws if handleEvent is thruthy and not callable]
expected: NOTRUN expected: NOTRUN
[doesn't look up handleEvent method on callable event listeners]
expected: FAIL

View file

@ -2,6 +2,6 @@
[listeners are called when <iframe> is resized] [listeners are called when <iframe> is resized]
expected: FAIL expected: FAIL
[listeners are called correct number of times] [listener that was added twice is called only once]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,2 @@
[contenttype_txt.html]
expected: CRASH

View file

@ -312,9 +312,6 @@
[<iframe>: separate response Content-Type: */* text/html] [<iframe>: separate response Content-Type: */* text/html]
expected: FAIL 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] [<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL
@ -324,9 +321,9 @@
[<iframe>: combined response Content-Type: text/html;x=" text/plain] [<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*] [<iframe>: combined response Content-Type: */* text/html]
expected: FAIL expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain] [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL expected: FAIL

View file

@ -53,15 +53,9 @@
[combined text/javascript ] [combined text/javascript ]
expected: FAIL expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL
[separate text/javascript x/x] [separate text/javascript x/x]
expected: FAIL expected: FAIL
[separate text/javascript error]
expected: FAIL
[separate text/javascript ] [separate text/javascript ]
expected: FAIL expected: FAIL

View file

@ -11,6 +11,3 @@
[X-Content-Type-Options%3A%20nosniff%0C] [X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL expected: FAIL
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

@ -1,4 +1,4 @@
[traverse_the_history_4.html] [traverse_the_history_2.html]
[Multiple history traversals, last would be aborted] [Multiple history traversals, last would be aborted]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_3.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: FAIL

View file

@ -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

View file

@ -1,5 +1,5 @@
[form-double-submit-2.html] [form-double-submit-2.html]
expected: ERROR expected: ERROR
[preventDefault should allow onclick submit() to succeed] [preventDefault should allow onclick submit() to succeed]
expected: FAIL expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[form-double-submit-3.html] [form-double-submit-3.html]
expected: ERROR expected: ERROR
[<button> should have the same double-submit protection as <input type=submit>] [<button> should have the same double-submit protection as <input type=submit>]
expected: FAIL expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[form-double-submit.html] [form-double-submit.html]
expected: ERROR expected: ERROR
[default submit action should supersede onclick submit()] [default submit action should supersede onclick submit()]
expected: FAIL expected: TIMEOUT

View file

@ -1,7 +1,23 @@
[form-submission-algorithm.html] [form-submission-algorithm.html]
expected: TIMEOUT
[If form's firing submission events is true, then return; 'submit' event] [If form's firing submission events is true, then return; 'submit' event]
expected: FAIL expected: FAIL
[If form's firing submission events is true, then return; 'invalid' event] [If form's firing submission events is true, then return; 'invalid' event]
expected: FAIL 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

View file

@ -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

View file

@ -1,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL expected: FAIL

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -0,0 +1,5 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -1,4 +1,5 @@
[sharedworker-in-worker.html] [sharedworker-in-worker.html]
expected: ERROR
[Base URL in workers: new SharedWorker()] [Base URL in workers: new SharedWorker()]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -4,6 +4,19 @@ policy:
tasks: tasks:
$let: $let:
event_str: {$json: {$eval: event}} 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: in:
$flattenDeep: $flattenDeep:
- $if: tasks_for == "github-push" - $if: tasks_for == "github-push"
@ -52,13 +65,8 @@ tasks:
taskGroupId: {$eval: 'as_slugid("task group")'} taskGroupId: {$eval: 'as_slugid("task group")'}
created: {$fromNow: ''} created: {$fromNow: ''}
deadline: {$fromNow: '24 hours'} deadline: {$fromNow: '24 hours'}
provisionerId: aws-provisioner-v1 provisionerId: ${provisionerId}
workerType: workerType: ${workerType}
$if: event.repository.full_name == 'web-platform-tests/wpt'
then:
wpt-docker-worker
else:
github-worker
metadata: metadata:
name: wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]} name: wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]}
description: >- description: >-
@ -155,13 +163,8 @@ tasks:
taskGroupId: {$eval: 'as_slugid("task group")'} taskGroupId: {$eval: 'as_slugid("task group")'}
created: {$fromNow: ''} created: {$fromNow: ''}
deadline: {$fromNow: '24 hours'} deadline: {$fromNow: '24 hours'}
provisionerId: aws-provisioner-v1 provisionerId: ${provisionerId}
workerType: workerType: ${workerType}
$if: event.repository.full_name == 'web-platform-tests/wpt'
then:
wpt-docker-worker
else:
github-worker
metadata: metadata:
name: ${operation.name} name: ${operation.name}
description: ${operation.description} description: ${operation.description}
@ -321,13 +324,8 @@ tasks:
taskGroupId: {$eval: 'as_slugid("task group")'} taskGroupId: {$eval: 'as_slugid("task group")'}
created: {$fromNow: ''} created: {$fromNow: ''}
deadline: {$fromNow: '24 hours'} deadline: {$fromNow: '24 hours'}
provisionerId: aws-provisioner-v1 provisionerId: ${provisionerId}
workerType: workerType: ${workerType}
$if: event.repository.full_name == 'web-platform-tests/wpt'
then:
wpt-docker-worker
else:
github-worker
metadata: metadata:
name: ${operation.name} name: ${operation.name}
description: ${operation.description} description: ${operation.description}

View file

@ -1,3 +1,9 @@
// META: title=WebCryptoAPI: deriveBits() Using ECDH // META: title=WebCryptoAPI: deriveBits() Using ECDH
// META: script=ecdh_bits.js // 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');

View file

@ -1,5 +1,5 @@
function run_test() { function define_tests() {
// May want to test prefixed implementations. // May want to test prefixed implementations.
var subtle = self.crypto.subtle; 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]) "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) { .then(function(results) {
publicKeys = results.publicKeys; publicKeys = results.publicKeys;
privateKeys = results.privateKeys; privateKeys = results.privateKeys;
@ -184,7 +184,6 @@ function run_test() {
}); });
}, namedCurve + " asking for too many bits"); }, namedCurve + " asking for too many bits");
}); });
done()
}); });
function importKeys(pkcs8, spki, sizes) { function importKeys(pkcs8, spki, sizes) {

View file

@ -1,3 +1,9 @@
// META: title=WebCryptoAPI: deriveKey() Using ECDH // META: title=WebCryptoAPI: deriveKey() Using ECDH
// META: script=ecdh_keys.js // 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');

View file

@ -1,5 +1,5 @@
function run_test() { function define_tests() {
// May want to test prefixed implementations. // May want to test prefixed implementations.
var subtle = self.crypto.subtle; 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]) "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) { .then(function(results) {
publicKeys = results.publicKeys; publicKeys = results.publicKeys;
privateKeys = results.privateKeys; privateKeys = results.privateKeys;
@ -153,7 +153,6 @@ function run_test() {
}); });
}, namedCurve + " public property value is a secret key"); }, namedCurve + " public property value is a secret key");
}); });
done();
}); });
function importKeys(pkcs8, spki, sizes) { function importKeys(pkcs8, spki, sizes) {

View file

@ -6,4 +6,10 @@
// META: script=/common/subset-tests.js // META: script=/common/subset-tests.js
// META: script=hkdf_vectors.js // META: script=hkdf_vectors.js
// META: script=hkdf.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');

View file

@ -1,5 +1,5 @@
function run_test() { function define_tests() {
// May want to test prefixed implementations. // May want to test prefixed implementations.
var subtle = self.crypto.subtle; var subtle = self.crypto.subtle;
@ -14,7 +14,7 @@ function run_test() {
// What kinds of keys can be created with deriveKey? The following: // What kinds of keys can be created with deriveKey? The following:
var derivedKeyTypes = testData.derivedKeyTypes; var derivedKeyTypes = testData.derivedKeyTypes;
setUpBaseKeys(derivedKeys) return setUpBaseKeys(derivedKeys)
.then(function(allKeys) { .then(function(allKeys) {
// We get several kinds of base keys. Normal ones that can be used for // We get several kinds of base keys. Normal ones that can be used for
// derivation operations, ones that lack the deriveBits usage, ones // 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 // Deriving bits and keys requires starting with a base key, which is created

View file

@ -12,4 +12,10 @@
// META: script=/common/subset-tests.js // META: script=/common/subset-tests.js
// META: script=pbkdf2_vectors.js // META: script=pbkdf2_vectors.js
// META: script=pbkdf2.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');

View file

@ -1,4 +1,4 @@
function run_test() { function define_tests() {
// May want to test prefixed implementations. // May want to test prefixed implementations.
var subtle = self.crypto.subtle; var subtle = self.crypto.subtle;
@ -12,7 +12,7 @@ function run_test() {
// What kinds of keys can be created with deriveKey? The following: // What kinds of keys can be created with deriveKey? The following:
var derivedKeyTypes = testData.derivedKeyTypes; var derivedKeyTypes = testData.derivedKeyTypes;
setUpBaseKeys(passwords) return setUpBaseKeys(passwords)
.then(function(allKeys) { .then(function(allKeys) {
// We get several kinds of base keys. Normal ones that can be used for // We get several kinds of base keys. Normal ones that can be used for
// derivation operations, ones that lack the deriveBits usage, ones // 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 // Deriving bits and keys requires starting with a base key, which is created

View file

@ -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>

View file

@ -16,7 +16,7 @@ li {
list-style-type: lower-alpha; list-style-type: lower-alpha;
} }
li::marker { li::marker, span {
font-family: sans-serif; font-family: sans-serif;
font-size: 24px; font-size: 24px;
font-style: italic; font-style: italic;
@ -27,7 +27,7 @@ li::marker {
</head> </head>
<body> <body>
<ol> <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> </ol>
</body> </body>
</html> </html>

View file

@ -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>

View file

@ -31,6 +31,9 @@
scroll-snap-align: center; } scroll-snap-align: center; }
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div>

View file

@ -32,6 +32,9 @@
scroll-snap-align: center; } scroll-snap-align: center; }
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div>

View file

@ -28,6 +28,9 @@
#target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */ #target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div>

View file

@ -30,6 +30,9 @@
#target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */ #target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div>

View file

@ -27,6 +27,9 @@
.container { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */ .container { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div>

View file

@ -29,6 +29,9 @@
.container { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */ .container { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div>

View file

@ -33,6 +33,8 @@
/* Try to foil the UA */ /* Try to foil the UA */
.foilup { margin-bottom: -1em; scroll-snap-align: start; } .foilup { margin-bottom: -1em; scroll-snap-align: start; }
.foildn { margin-top: -1em; scroll-snap-align: end; } .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> </style>
<div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div>

View file

@ -35,6 +35,9 @@
/* Try to foil the UA */ /* Try to foil the UA */
.foilup { margin-bottom: -1em; scroll-snap-align: start; } .foilup { margin-bottom: -1em; scroll-snap-align: start; }
.foildn { margin-top: -1em; scroll-snap-align: end; } .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> </style>
<div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div> <div id='instructions'>Test passes if there is a green stripe across the second quarter of the box below and no red.</div>

View file

@ -19,7 +19,9 @@
scroll-snap-align: center; } scroll-snap-align: center; }
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
}
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div></div> <div></div>

View file

@ -17,7 +17,9 @@
#target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */ #target { scroll-margin: 2em 0 1em; } /* snap area is exact fit for snapport */
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
}
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div></div> <div></div>

View file

@ -17,7 +17,9 @@
html { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */ html { scroll-padding: 2em 0 1em; } /* snap area is exact fit for snapport */
#stripe { background: green; } /* color part of the snap area */ #stripe { background: green; } /* color part of the snap area */
.fail { color: red; } /* make failing more obvious */ .fail { color: red; } /* make failing more obvious */
}
/* emulate `scrollbar-width: none` for browsers that don't support it yet */
::-webkit-scrollbar { display: none; }
</style> </style>
<div></div> <div></div>

View file

@ -25,6 +25,9 @@
/* Try to foil the UA */ /* Try to foil the UA */
.foilup { margin-bottom: -1em; scroll-snap-align: start; } .foilup { margin-bottom: -1em; scroll-snap-align: start; }
.foildn { margin-top: -1em; scroll-snap-align: end; } .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> </style>
<div></div> <div></div>

View file

@ -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>

View file

@ -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>

View file

@ -40,3 +40,44 @@ function test_computed_value(property, specified, computed) {
}, "Property " + property + " value '" + specified + "' computes to " + }, "Property " + property + " value '" + specified + "' computes to " +
computedDesc); 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);
}

View file

@ -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

View file

@ -46,9 +46,6 @@ include ib-split/reftest.list
# Image Values and Replaced Content Level 3 # Image Values and Replaced Content Level 3
include images3/reftest.list include images3/reftest.list
# Lists and Counters Level 3
include lists-3/reftest.list
# Masking Level 1 # Masking Level 1
include masking/reftest.list include masking/reftest.list

View file

@ -4,36 +4,71 @@ The tests are designed to be run from your local computer.
## System Setup ## System Setup
The test environment requires [Python 2.7+](http://www.python.org/downloads) Running the tests requires `python`, `pip` and `virtualenv`, as well as updating
(but not Python 3.x). the system `hosts` file.
On Windows, be sure to add the Python directory (`c:\python2x`, by default) to Note that Python 2.7 is required. Using Python 3 is not supported.
your `%Path%` [Environment Variable](http://www.computerhope.com/issues/ch000549.htm),
and read the [Windows Notes](#windows-notes) section below.
<!-- The required setup is different depending on your operating system.
There does not appear to be a cross-platform means of installing `pip`.
https://github.com/web-platform-tests/wpt/pull/16670
-->
Install `pip`. On many systems, this can be achieved with the command `python ### Linux Setup
-m ensurepip`. If this is not possible, use your system's package manager to
install the `python-pip` package.
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 ```bash
pip install virtualenv 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 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). [`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 On Linux, macOS or other UNIX-like system:
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:
```bash ```bash
./wpt make-hosts-file | sudo tee -a /etc/hosts ./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 If you are behind a proxy, you also need to make sure the domains above are
excluded from your proxy lookups. 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 ## Via the browser
The test environment can then be started using The test environment can then be started using

View file

@ -1,10 +1,10 @@
<!doctype html> <!doctype html>
<meta charset=utf-8> <meta charset=utf-8>
<meta name="timeout" content="long">
<script src=/resources/testharness.js></script> <script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script> <script src=/resources/testharnessreport.js></script>
<script src="/common/get-host-info.sub.js"></script> <script src="/common/get-host-info.sub.js"></script>
<script src="resources/common.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> <div id=log></div>
<script> <script>
@ -44,27 +44,29 @@ function coop_redirect_cache_test(t, hostA, hostB, coop, coep, redirectCache, de
function run_redirect_cache_tests(documentCOOPValueTitle, testArray) { function run_redirect_cache_tests(documentCOOPValueTitle, testArray) {
for (const test of tests) { for (const test of tests) {
async_test(t => { 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]}`); }, `${documentCOOPValueTitle} document opening popup redirect from ${test[0].origin} to ${test[1].origin} with redirectCache ${test[2]} and destCache ${test[3]}`);
} }
} }
let tests = [ let tests = [
// popup Origin, final Origin, isCacheRedirect, isCacheDestination, channelName, hasOpener // popup Origin, final Origin, isCacheRedirect, isCacheDestination, hasOpener
// Origin A->A->B // Origin A->A->B
[SAME_ORIGIN, CROSS_ORIGIN, true, false, token(), false], [SAME_ORIGIN, CROSS_ORIGIN, true, false, false],
[SAME_ORIGIN, CROSS_ORIGIN, false, true, token(), false], [SAME_ORIGIN, CROSS_ORIGIN, false, true, false],
[SAME_ORIGIN, CROSS_ORIGIN, true, true, token(), false], [SAME_ORIGIN, CROSS_ORIGIN, true, true, false],
// Origin A->B->B // Origin A->B->B
[CROSS_ORIGIN, SAME_ORIGIN, true, false, token(), false], [CROSS_ORIGIN, SAME_ORIGIN, true, false, false],
[CROSS_ORIGIN, SAME_ORIGIN, false, true, token(), false], [CROSS_ORIGIN, SAME_ORIGIN, false, true, false],
[CROSS_ORIGIN, SAME_ORIGIN, true, true, token(), false], [CROSS_ORIGIN, SAME_ORIGIN, true, true, false],
// Origin A->B->C // Origin A->B->C
[SAME_SITE, CROSS_ORIGIN, true, false, token(), false], [SAME_SITE, CROSS_ORIGIN, true, false, false],
[SAME_SITE, CROSS_ORIGIN, false, true, token(), false], [SAME_SITE, CROSS_ORIGIN, false, true, false],
[SAME_SITE, CROSS_ORIGIN, true, true, token(), false], [SAME_SITE, CROSS_ORIGIN, true, true, false],
]; ];
run_redirect_cache_tests("same-origin", tests); run_redirect_cache_tests("same-origin", tests);

View file

@ -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');

View file

@ -50,6 +50,60 @@ async_test(t => {
}); });
}, "If form's firing submission events is true, then return; 'submit' event"); }, "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 => { async_test(t => {
let form = populateForm('<input name=n1 value=v1>'); let form = populateForm('<input name=n1 value=v1>');
form.onformdata = (e) => { e.target.remove(); }; form.onformdata = (e) => { e.target.remove(); };

View file

@ -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>

View file

@ -19,3 +19,10 @@ function submitPromise(form, iframe) {
form.submit(); form.submit();
}); });
} }
function loadPromise(iframe) {
return new Promise((resolve, reject) => {
iframe.onload = resolve;
iframe.onerror = () => reject(new Error('iframe onerror fired'));
});
}

View file

@ -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>

View file

@ -68,18 +68,21 @@ dictionary AudioConfiguration {
dictionary MediaCapabilitiesKeySystemConfiguration { dictionary MediaCapabilitiesKeySystemConfiguration {
required DOMString keySystem; required DOMString keySystem;
DOMString initDataType = ""; DOMString initDataType = "";
DOMString audioRobustness = "";
DOMString videoRobustness = "";
MediaKeysRequirement distinctiveIdentifier = "optional"; MediaKeysRequirement distinctiveIdentifier = "optional";
MediaKeysRequirement persistentState = "optional"; MediaKeysRequirement persistentState = "optional";
sequence<DOMString> sessionTypes; sequence<DOMString> sessionTypes;
KeySystemTrackConfiguration audio;
KeySystemTrackConfiguration video;
};
dictionary KeySystemTrackConfiguration {
DOMString robustness = "";
}; };
dictionary MediaCapabilitiesInfo { dictionary MediaCapabilitiesInfo {
required boolean supported; required boolean supported;
required boolean smooth; required boolean smooth;
required boolean powerEfficient; required boolean powerEfficient;
}; };
dictionary MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo { dictionary MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo {

View file

@ -72,7 +72,6 @@ dictionary NDEFReadingEventInit : EventInit {
dictionary NDEFPushOptions { dictionary NDEFPushOptions {
NDEFPushTarget target = "any"; NDEFPushTarget target = "any";
unrestricted double timeout = Infinity;
boolean ignoreRead = true; boolean ignoreRead = true;
boolean overwrite = true; boolean overwrite = true;
AbortSignal? signal; AbortSignal? signal;

View file

@ -612,7 +612,6 @@ dictionary RTCDTMFToneChangeEventInit : EventInit {
partial interface RTCPeerConnection { partial interface RTCPeerConnection {
Promise<RTCStatsReport> getStats(optional MediaStreamTrack? selector = null); Promise<RTCStatsReport> getStats(optional MediaStreamTrack? selector = null);
attribute EventHandler onstatsended;
}; };
[Exposed=Window] [Exposed=Window]
@ -626,16 +625,6 @@ dictionary RTCStats {
required DOMString id; required DOMString id;
}; };
[Exposed=Window]
interface RTCStatsEvent : Event {
constructor(DOMString type, RTCStatsEventInit eventInitDict);
readonly attribute RTCStatsReport report;
};
dictionary RTCStatsEventInit : EventInit {
required RTCStatsReport report;
};
[Exposed=Window] [Exposed=Window]
interface RTCError : DOMException { interface RTCError : DOMException {
constructor(RTCErrorInit init, optional DOMString message = ""); constructor(RTCErrorInit init, optional DOMString message = "");

View file

@ -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>

View file

@ -6,3 +6,35 @@ directory_test(async (t, root) => {
let actualContents = await slice.text(); let actualContents = await slice.text();
assert_equals(actualContents, fileContents.slice(1, fileContents.length)); assert_equals(actualContents, fileContents.slice(1, fileContents.length));
}, 'getFile() provides a file that can be sliced'); }, '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');

View file

@ -15,7 +15,7 @@
<link rel=preload href="resources/dummy.xml"> <link rel=preload href="resources/dummy.xml">
<body> <body>
<script> <script>
setup({explicit_done: true}); setup({single_test: true});
var iterations = 0; var iterations = 0;

View file

@ -15,7 +15,7 @@
<link rel=preload href="resources/dummy.xml"> <link rel=preload href="resources/dummy.xml">
<body> <body>
<script> <script>
setup({explicit_done: true}); setup({single_test: true});
var iterations = 0; var iterations = 0;

View file

@ -31,14 +31,16 @@ function toMojoNDEFRecord(record) {
return nfcRecord; return nfcRecord;
} }
// Converts JS objects to byte array.
function toByteArray(data) { 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 byteArray = new Uint8Array(0);
let tmpData = data; let tmpData = data;
if (typeof tmpData === 'object' || typeof tmpData === 'number')
if (tmpData instanceof ArrayBuffer)
byteArray = new Uint8Array(tmpData);
else if (typeof tmpData === 'object' || typeof tmpData === 'number')
tmpData = JSON.stringify(tmpData); tmpData = JSON.stringify(tmpData);
if (typeof tmpData === 'string') if (typeof tmpData === 'string')

View file

@ -643,7 +643,7 @@ class MockXRInputSource {
this.primary_input_clicked_ = fakeInputSourceInit.selectionClicked; this.primary_input_clicked_ = fakeInputSourceInit.selectionClicked;
} }
this.grip_ = null; this.mojo_from_input_ = null;
if (fakeInputSourceInit.gripOrigin != null) { if (fakeInputSourceInit.gripOrigin != null) {
this.setGripOrigin(fakeInputSourceInit.gripOrigin); this.setGripOrigin(fakeInputSourceInit.gripOrigin);
} }
@ -676,22 +676,22 @@ class MockXRInputSource {
} }
setGripOrigin(transform, emulatedPosition = false) { setGripOrigin(transform, emulatedPosition = false) {
this.grip_ = new gfx.mojom.Transform(); this.mojo_from_input_ = new gfx.mojom.Transform();
this.grip_.matrix = getMatrixFromTransform(transform); this.mojo_from_input_.matrix = getMatrixFromTransform(transform);
this.emulated_position_ = emulatedPosition; this.emulated_position_ = emulatedPosition;
} }
clearGripOrigin() { clearGripOrigin() {
if (this.grip_ != null) { if (this.mojo_from_input_ != null) {
this.grip_ = null; this.mojo_from_input_ = null;
this.emulated_position_ = false; this.emulated_position_ = false;
} }
} }
setPointerOrigin(transform, emulatedPosition = false) { setPointerOrigin(transform, emulatedPosition = false) {
this.desc_dirty_ = true; this.desc_dirty_ = true;
this.pointer_offset_ = new gfx.mojom.Transform(); this.input_from_pointer_ = new gfx.mojom.Transform();
this.pointer_offset_.matrix = getMatrixFromTransform(transform); this.input_from_pointer_.matrix = getMatrixFromTransform(transform);
this.emulated_position_ = emulatedPosition; this.emulated_position_ = emulatedPosition;
} }
@ -810,7 +810,7 @@ class MockXRInputSource {
input_state.primaryInputPressed = this.primary_input_pressed_; input_state.primaryInputPressed = this.primary_input_pressed_;
input_state.primaryInputClicked = this.primary_input_clicked_; input_state.primaryInputClicked = this.primary_input_clicked_;
input_state.grip = this.grip_; input_state.mojoFromInput = this.mojo_from_input_;
input_state.gamepad = this.gamepad_; input_state.gamepad = this.gamepad_;
@ -840,7 +840,7 @@ class MockXRInputSource {
break; break;
} }
input_desc.pointerOffset = this.pointer_offset_; input_desc.inputFromPointer = this.input_from_pointer_;
input_desc.profiles = this.profiles_; input_desc.profiles = this.profiles_;

View file

@ -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>

View file

@ -95,3 +95,25 @@ steps:
condition: always() condition: always()
errorActionPreference: silentlyContinue errorActionPreference: silentlyContinue
ignoreLASTEXITCODE: true 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

View file

@ -51,9 +51,6 @@ except ImportError:
from urllib.request import urlopen from urllib.request import urlopen
QUEUE_BASE = "https://queue.taskcluster.net/v1/task"
root = os.path.abspath( root = os.path.abspath(
os.path.join(os.path.dirname(__file__), os.path.join(os.path.dirname(__file__),
os.pardir, os.pardir,
@ -127,12 +124,8 @@ def checkout_revision(rev):
def install_chrome(channel): def install_chrome(channel):
deb_prefix = "https://dl.google.com/linux/direct/"
if channel in ("experimental", "dev", "nightly"): if channel in ("experimental", "dev", "nightly"):
# Pinned to 78 as 79 consistently fails reftests. TODO(foolip). deb_archive = "google-chrome-unstable_current_amd64.deb"
# 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/"
elif channel == "beta": elif channel == "beta":
deb_archive = "google-chrome-beta_current_amd64.deb" deb_archive = "google-chrome-beta_current_amd64.deb"
elif channel == "stable": elif channel == "stable":
@ -141,7 +134,7 @@ def install_chrome(channel):
raise ValueError("Unrecognized release channel: %s" % channel) raise ValueError("Unrecognized release channel: %s" % channel)
dest = os.path.join("/tmp", deb_archive) 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: with open(dest, "w") as f:
f.write(resp.read()) f.write(resp.read())
@ -329,7 +322,14 @@ def fetch_event_data():
# For example under local testing # For example under local testing
return None 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) task_data = json.load(resp)
event_data = task_data.get("extra", {}).get("github_event") event_data = task_data.get("extra", {}).get("github_event")

View file

@ -10,6 +10,10 @@ import github
logging.basicConfig() logging.basicConfig()
logger = logging.getLogger("tc-download") 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(): def get_parser():
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
@ -74,8 +78,13 @@ def run(*args, **kwargs):
return 1 return 1
for taskgroup in taskgroups: for taskgroup in taskgroups:
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" taskgroup_url = "https://queue.taskcluster.net/v1/task-group/%s/list"
artifacts_list_url = "https://queue.taskcluster.net/v1/task/%s/artifacts" 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") tasks = get_json(taskgroup_url % taskgroup, "tasks")
for task in tasks: for task in tasks:
task_id = task["status"]["taskId"] task_id = task["status"]["taskId"]

View file

@ -17,6 +17,10 @@ from utils import call, get, untar, unzip
uname = platform.uname() 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): def _get_fileversion(binary, logger=None):
command = "(Get-Item '%s').VersionInfo.FileVersion" % binary.replace("'", "''") command = "(Get-Item '%s').VersionInfo.FileVersion" % binary.replace("'", "''")
@ -423,8 +427,13 @@ class FirefoxAndroid(Browser):
if dest is None: if dest is None:
dest = os.pwd dest = os.pwd
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_QUEUE_BASE = "https://queue.taskcluster.net/v1/"
TC_INDEX_BASE = "https://index.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 + resp = requests.get(TC_INDEX_BASE +
@ -874,9 +883,11 @@ class EdgeChromium(Browser):
if os.path.isfile(edgedriver_path): if os.path.isfile(edgedriver_path):
# remove read-only attribute # remove read-only attribute
os.chmod(edgedriver_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) # 0777 os.chmod(edgedriver_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) # 0777
print("Delete %s file" % edgedriver_path)
os.remove(edgedriver_path) os.remove(edgedriver_path)
driver_notes_path = os.path.join(dest, "Driver_notes") driver_notes_path = os.path.join(dest, "Driver_notes")
if os.path.isdir(driver_notes_path): 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) shutil.rmtree(driver_notes_path, ignore_errors=False, onerror=handle_remove_readonly)
self.logger.info("Downloading MSEdgeDriver from %s" % url) self.logger.info("Downloading MSEdgeDriver from %s" % url)

View file

@ -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

View file

@ -33,6 +33,13 @@ const NDEFReaderOptionTests =
unmatchedScanOptions: {recordType: "json"}, unmatchedScanOptions: {recordType: "json"},
message: createMessage([createOpaqueRecord(test_buffer_data)]) message: createMessage([createOpaqueRecord(test_buffer_data)])
}, },
{
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'" + desc: "Test that reading data succeed when NDEFScanOptions'" +
" recordType is set to 'text'.", " recordType is set to 'text'.",
@ -102,6 +109,13 @@ const ReadMultiMessagesTests =
message: createMessage([createOpaqueRecord(test_buffer_data)]), message: createMessage([createOpaqueRecord(test_buffer_data)]),
unmatchedMessage: createMessage([createJsonRecord(test_json_data)]) 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" + desc: "Test that filtering 'text' record from different messages" +
" correctly with NDEFScanOptions' recordType is set to 'text'.", " correctly with NDEFScanOptions' recordType is set to 'text'.",

View file

@ -161,6 +161,30 @@
'json() has the same content with the original dictionary'); 'json() has the same content with the original dictionary');
}, 'NDEFRecord constructor with JSON record type'); }, '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(() => { test(() => {
let buffer = new ArrayBuffer(4); let buffer = new ArrayBuffer(4);
let buffer_view = new Uint8Array(buffer); let buffer_view = new Uint8Array(buffer);

View file

@ -70,6 +70,14 @@ const invalid_type_messages =
createMessage([createOpaqueRecord(test_number_data)]), createMessage([createOpaqueRecord(test_number_data)]),
createMessage([createOpaqueRecord(test_json_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 // https://w3c.github.io/web-nfc/#dfn-map-external-data-to-ndef
// NDEFRecord must have data. // NDEFRecord must have data.
createMessage([createRecord('w3.org:xyz', '', undefined)]), createMessage([createRecord('w3.org:xyz', '', undefined)]),
@ -301,13 +309,14 @@ nfc_test(async (t, mockNFC) => {
createJsonRecord(test_json_data), createJsonRecord(test_json_data),
createJsonRecord(test_number_data), createJsonRecord(test_number_data),
createOpaqueRecord(test_buffer_data), createOpaqueRecord(test_buffer_data),
createUnknownRecord(test_buffer_data),
createUrlRecord(test_url_data), createUrlRecord(test_url_data),
createUrlRecord(test_url_data, true), createUrlRecord(test_url_data, true),
createRecord('w3.org:xyz', '', test_buffer_data)], createRecord('w3.org:xyz', '', test_buffer_data)],
test_message_origin); test_message_origin);
await writer.push(message); await writer.push(message);
assertNDEFMessagesEqual(message, mockNFC.pushedMessage()); 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."); and external records with default NDEFPushOptions.");
nfc_test(async (t, mockNFC) => { nfc_test(async (t, mockNFC) => {
@ -322,6 +331,13 @@ nfc_test(async (t, mockNFC) => {
assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage()); assertNDEFMessagesEqual(test_buffer_data, mockNFC.pushedMessage());
}, "Test that NDEFWriter.push succeeds when message is ArrayBuffer."); }, "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 () => { nfc_test(async () => {
const writer = new NDEFWriter(); const writer = new NDEFWriter();
await writer.push(createMessage([createRecord('empty')])); await writer.push(createMessage([createRecord('empty')]));

View file

@ -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_url_data = 'https://w3c.github.io/web-nfc/';
const test_message_origin = 'https://127.0.0.1:8443'; const test_message_origin = 'https://127.0.0.1:8443';
const test_buffer_data = new ArrayBuffer(test_text_byte_array.length); const test_buffer_data = new ArrayBuffer(test_text_byte_array.length);
const test_buffer_view = const test_buffer_view = new Uint8Array(test_buffer_data);
new Uint8Array(test_buffer_data).set(test_text_byte_array); test_buffer_view.set(test_text_byte_array);
const fake_tag_serial_number = 'c0:45:00:02'; const fake_tag_serial_number = 'c0:45:00:02';
const NFCHWStatus = {}; const NFCHWStatus = {};
@ -111,6 +111,10 @@ function createOpaqueRecord(buffer) {
return createRecord('opaque', 'application/octet-stream', buffer); return createRecord('opaque', 'application/octet-stream', buffer);
} }
function createUnknownRecord(buffer) {
return createRecord('unknown', '', buffer);
}
function createUrlRecord(url, isAbsUrl) { function createUrlRecord(url, isAbsUrl) {
if (isAbsUrl) { if (isAbsUrl) {
return createRecord('absolute-url', 'text/plain', url); 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 // (e.g. NDEFWriter.push), and NDEFMessage that was received by the
// mock NFC service. // mock NFC service.
function assertNDEFMessagesEqual(providedMessage, receivedMessage) { function assertNDEFMessagesEqual(providedMessage, receivedMessage) {
// If simple data type is passed, e.g. String or ArrayBuffer, convert it // If simple data type is passed, e.g. String or ArrayBuffer or
// to NDEFMessage before comparing. // ArrayBufferView, convert it to NDEFMessage before comparing.
// https://w3c.github.io/web-nfc/#dom-ndefmessagesource // https://w3c.github.io/web-nfc/#dom-ndefmessagesource
let provided = providedMessage; let provided = providedMessage;
if (providedMessage instanceof ArrayBuffer) if (providedMessage instanceof ArrayBuffer ||
ArrayBuffer.isView(providedMessage))
provided = createMessage([createOpaqueRecord(providedMessage)]); provided = createMessage([createOpaqueRecord(providedMessage)]);
else if (typeof providedMessage === 'string') else if (typeof providedMessage === 'string')
provided = createMessage([createTextRecord(providedMessage)]); provided = createMessage([createTextRecord(providedMessage)]);

View file

@ -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>

View file

@ -7,3 +7,75 @@
[WebGL test #1: context does not exist] [WebGL test #1: context does not exist]
expected: FAIL 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

View file

@ -1,5 +1,4 @@
[canvas-resizing-with-pbo-bound.html] [canvas-resizing-with-pbo-bound.html]
expected: TIMEOUT
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas] [WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL expected: FAIL