Update web-platform-tests to revision 6fbd872e9ac5fe60e32946bc9b318be6eeada123

This commit is contained in:
WPT Sync Bot 2019-12-14 08:23:07 +00:00
parent 3f663d7ab2
commit 0dae9ef764
80 changed files with 3433 additions and 6503 deletions

View file

@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
expected: FAIL
expected: TIMEOUT
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL

View file

@ -271164,6 +271164,9 @@
"html/cross-origin-embedder-policy/require-corp-about-srcdoc.html.headers": [
[]
],
"html/cross-origin-embedder-policy/require-corp-load-from-cache-storage.https.html.headers": [
[]
],
"html/cross-origin-embedder-policy/require-corp-sw-from-require-corp.https.html.headers": [
[]
],
@ -271200,6 +271203,9 @@
"html/cross-origin-embedder-policy/resources/script-factory.js": [
[]
],
"html/cross-origin-embedder-policy/resources/sw-store-to-cache-storage.js": [
[]
],
"html/cross-origin-embedder-policy/resources/sw.js": [
[]
],
@ -275292,6 +275298,9 @@
"html/semantics/embedded-content/the-iframe-element/support/blank.htm": [
[]
],
"html/semantics/embedded-content/the-iframe-element/support/document-with-embedded-svg.html": [
[]
],
"html/semantics/embedded-content/the-iframe-element/support/download_stash.py": [
[]
],
@ -275424,6 +275433,9 @@
"html/semantics/embedded-content/the-iframe-element/support/standalone-pass.htm": [
[]
],
"html/semantics/embedded-content/the-iframe-element/support/svg.svg": [
[]
],
"html/semantics/embedded-content/the-img-element/3.jpg": [
[]
],
@ -275712,6 +275724,33 @@
"html/semantics/scripting-1/the-script-element/cacheable-script-throw.py": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/bad-import.css": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/basic.css": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/css-module-at-import-iframe.html": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/css-module-basic-iframe.html": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/malformed-iframe.html": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/malformed.css": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/utf8.css": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/worker-dynamic-import.js": [
[]
],
"html/semantics/scripting-1/the-script-element/css-module/resources/worker.js": [
[]
],
"html/semantics/scripting-1/the-script-element/defer.js": [
[]
],
@ -313141,6 +313180,12 @@
{}
]
],
"clipboard-apis/async-raw-write-read.tentative.https.html": [
[
"clipboard-apis/async-raw-write-read.tentative.https.html",
{}
]
],
"clipboard-apis/clipboard-events-synthetic.html": [
[
"clipboard-apis/clipboard-events-synthetic.html",
@ -358373,6 +358418,12 @@
{}
]
],
"html/cross-origin-embedder-policy/none-load-from-cache-storage.https.html": [
[
"html/cross-origin-embedder-policy/none-load-from-cache-storage.https.html",
{}
]
],
"html/cross-origin-embedder-policy/none-sw-from-none.https.html": [
[
"html/cross-origin-embedder-policy/none-sw-from-none.https.html",
@ -358405,6 +358456,12 @@
{}
]
],
"html/cross-origin-embedder-policy/require-corp-load-from-cache-storage.https.html": [
[
"html/cross-origin-embedder-policy/require-corp-load-from-cache-storage.https.html",
{}
]
],
"html/cross-origin-embedder-policy/require-corp-sw-from-none.https.html": [
[
"html/cross-origin-embedder-policy/require-corp-sw-from-none.https.html",
@ -363332,6 +363389,18 @@
{}
]
],
"html/semantics/embedded-content/the-iframe-element/cross-origin-to-whom-part-2.window.js": [
[
"html/semantics/embedded-content/the-iframe-element/cross-origin-to-whom-part-2.window.html",
{}
]
],
"html/semantics/embedded-content/the-iframe-element/cross-origin-to-whom.window.js": [
[
"html/semantics/embedded-content/the-iframe-element/cross-origin-to-whom.window.html",
{}
]
],
"html/semantics/embedded-content/the-iframe-element/cross_origin_parentage.sub.html": [
[
"html/semantics/embedded-content/the-iframe-element/cross_origin_parentage.sub.html",
@ -365684,6 +365753,24 @@
{}
]
],
"html/semantics/scripting-1/the-script-element/css-module/css-module-worker-test.html": [
[
"html/semantics/scripting-1/the-script-element/css-module/css-module-worker-test.html",
{}
]
],
"html/semantics/scripting-1/the-script-element/css-module/import-css-module-basic.html": [
[
"html/semantics/scripting-1/the-script-element/css-module/import-css-module-basic.html",
{}
]
],
"html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html": [
[
"html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html",
{}
]
],
"html/semantics/scripting-1/the-script-element/data-url.html": [
[
"html/semantics/scripting-1/the-script-element/data-url.html",
@ -461350,19 +461437,19 @@
"support"
],
".github/workflows/detect_pull_request_preview.yml": [
"d35105d9e3e8841e135bd56e9c387fcba0d86a9a",
"02870d8c7d223a371c09a97b5906610af191a5e4",
"support"
],
".github/workflows/documentation.yml": [
"9352fb81e2c5fbdc64f20c202b386c66795a6083",
"b8bf7972b0f7666f8a01a81b05e8dec432732225",
"support"
],
".github/workflows/epochs.yml": [
"a93a1e8defb4fdeeb9f7740db1cc5c520aa07e5e",
"a605a818c5f390212b5962c270ae0e9e33663b96",
"support"
],
".github/workflows/manifest.yml": [
"e4708873c0d5e415a171ed2598a0b94f22c272b6",
"84983a57e077b7e9e7f34515e4bca01a9cc214a7",
"support"
],
".gitignore": [
@ -472509,6 +472596,10 @@
"706093af61314dc0de57ff8fa5415011c13089ee",
"testharness"
],
"clipboard-apis/async-raw-write-read.tentative.https.html": [
"6cfa2dbcca79f57db3fa57aeaff33c688423ff87",
"testharness"
],
"clipboard-apis/async-write-blobs-read-blobs-manual.https.html": [
"b5f0f3d9dc13d2b67264b3a61b9f0f8be0cd6ecd",
"manual"
@ -472522,7 +472613,7 @@
"testharness"
],
"clipboard-apis/clipboard-item.https.html": [
"9218ee299e2b66a3bd7e70b6ac58c6cb26fdfaac",
"fe5e76ccbb4379ed3a29bdea43d56d882b5d041b",
"testharness"
],
"clipboard-apis/events/copy-event-manual.html": [
@ -561498,15 +561589,15 @@
"testharness"
],
"css/css-color-adjust/parsing/color-scheme-computed.html": [
"80b9803981f7123d22c637ee9056c04ba3108818",
"a5ad4d534056973883f47c615d50f8dff854ece8",
"testharness"
],
"css/css-color-adjust/parsing/color-scheme-invalid.html": [
"48fa4d1d1f3a1f6d172f650e2452bf29921314c7",
"6c7075c3b465d54f4b8fec2fa9160ce8b6c7e323",
"testharness"
],
"css/css-color-adjust/parsing/color-scheme-valid.html": [
"2ba01da394ebc63c9b6b87ea53714d1567032f9b",
"5fb481783f0134b3b233ceb17ea4a0897eeee403",
"testharness"
],
"css/css-color/LICENSE": [
@ -648461,6 +648552,10 @@
"6604450991a122e3e241e40b1b9e0516c525389d",
"support"
],
"html/cross-origin-embedder-policy/none-load-from-cache-storage.https.html": [
"e0b84568bd3e4e854bf2890c8de27bed0675b406",
"testharness"
],
"html/cross-origin-embedder-policy/none-sw-from-none.https.html": [
"5298347fd9d3f36220c03149d49d9f7ea63615cb",
"testharness"
@ -648497,6 +648592,14 @@
"8df98474b589d070992677cb0134bd47bd0509c4",
"support"
],
"html/cross-origin-embedder-policy/require-corp-load-from-cache-storage.https.html": [
"b10b2f0b73cca9ef3f6bea4df03bf60aa2fe4409",
"testharness"
],
"html/cross-origin-embedder-policy/require-corp-load-from-cache-storage.https.html.headers": [
"8df98474b589d070992677cb0134bd47bd0509c4",
"support"
],
"html/cross-origin-embedder-policy/require-corp-sw-from-none.https.html": [
"896ea46ff08000dae262187268b7d8f57ccd1573",
"testharness"
@ -648510,7 +648613,7 @@
"support"
],
"html/cross-origin-embedder-policy/require-corp.https.html": [
"5f01022338c248b7a053f3b4918a0c3a564008a0",
"446003723a19a1db88569bb3b0bf07540dfb98c8",
"testharness"
],
"html/cross-origin-embedder-policy/require-corp.https.html.headers": [
@ -648557,6 +648660,10 @@
"9db755226020479fd87e87f42ea622c999b38f7d",
"support"
],
"html/cross-origin-embedder-policy/resources/sw-store-to-cache-storage.js": [
"00b9e9395a7ec2171b3fee9d75f6ccb1d46ee60f",
"support"
],
"html/cross-origin-embedder-policy/resources/sw.js": [
"57f0b41ba5b5ff6318e1e4913dfd13bdb1f237a4",
"support"
@ -658477,6 +658584,14 @@
"b657f26158a9c6526e3c734afb9ce2731e1b3dd4",
"testharness"
],
"html/semantics/embedded-content/the-iframe-element/cross-origin-to-whom-part-2.window.js": [
"c88158d267f373d35a683b6777241c7c1da66816",
"testharness"
],
"html/semantics/embedded-content/the-iframe-element/cross-origin-to-whom.window.js": [
"a1e592d8f8951c9d6e820238d55c9e76a1a283ff",
"testharness"
],
"html/semantics/embedded-content/the-iframe-element/cross_origin_child.html": [
"8b44fe805fb6d2408dab8f53c14ea70531104607",
"support"
@ -658849,6 +658964,10 @@
"18ecdcb795c33d6ab7bbb43f647947defca5634d",
"support"
],
"html/semantics/embedded-content/the-iframe-element/support/document-with-embedded-svg.html": [
"a81d13d9a8b6386d4584f12648f3a1d42ce74b81",
"support"
],
"html/semantics/embedded-content/the-iframe-element/support/download_stash.py": [
"24e1dfd58f760e1fa99846e0fac063a32a258e58",
"support"
@ -659025,6 +659144,10 @@
"9d1b2530fe68308a050b8b92b804176fb72057d6",
"support"
],
"html/semantics/embedded-content/the-iframe-element/support/svg.svg": [
"1570afcadc238042614d35b7f2f4a49e580f5a68",
"support"
],
"html/semantics/embedded-content/the-img-element/3.jpg": [
"d30ac2ac36c66bf735036baa755f836b00fa47a6",
"support"
@ -661117,6 +661240,54 @@
"5df883c07be307fb2f6ff6b14354a5bc816ce662",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/css-module-worker-test.html": [
"1618f40eb6119c6b9c20047d0463daa2ef27d0f0",
"testharness"
],
"html/semantics/scripting-1/the-script-element/css-module/import-css-module-basic.html": [
"902430d0779e3b9e34f95db1da4d4b96c2b24bbb",
"testharness"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/bad-import.css": [
"796446b525ca03bf287e2abbdbbdae593b658bac",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/basic.css": [
"3ea2ef45339c41dc5a39b1f8494fe2d2d4eae0d1",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/css-module-at-import-iframe.html": [
"86e7af7d51db98fd7e22c01954ced16683c4f0e7",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/css-module-basic-iframe.html": [
"3a555c392716c0ee915f1aa65cd5a1dae42f0c52",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/malformed-iframe.html": [
"471edd680cf656661bcc713656aaa23e49386ba7",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/malformed.css": [
"fb20336584e7745c495676c05e605e8d216037a0",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/utf8.css": [
"35d16cd1c5b0d6972ddfa888a2f81cc9a042eb9d",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/worker-dynamic-import.js": [
"9a3b0bb105b3ddc9d4e416ecfc3606c2442ba6ab",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/resources/worker.js": [
"397a12c3b53c60634417a67bef839af9aef07e6e",
"support"
],
"html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html": [
"f71339b4d591853e5abb19b694b880395bfc9f81",
"testharness"
],
"html/semantics/scripting-1/the-script-element/data-url.html": [
"6fad50527177e756db35842e054bf19d6e4dfbe4",
"testharness"
@ -666638,11 +666809,11 @@
"support"
],
"infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPointsReleaseFirstPoint.html.ini": [
"b41ec996e2f3097bf6fe89bf351d50764d406447",
"68ccafcec2a1dd55184d234071c809ce1fcc73d8",
"support"
],
"infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPointsReleaseSecondPoint.html.ini": [
"ad46c7be498ab7db2e3c65b147ce708d15157843",
"5d714dd77733edd0199535f0f1cb20a46237d6dd",
"support"
],
"infrastructure/metadata/infrastructure/testdriver/actions/multiTouchPointsTwoTouchStarts.html.ini": [
@ -667022,7 +667193,7 @@
"support"
],
"interfaces/IndexedDB.idl": [
"2af9eb2a3245d2229dc5b7505713795405ff0ba9",
"33925d614238d6850c196381df0f60ac14bd4e4f",
"support"
],
"interfaces/InputDeviceCapabilities.idl": [
@ -668346,7 +668517,7 @@
"testharness"
],
"lint.whitelist": [
"a1b3f63650cb91393439224b3def6daf4c3775aa",
"d06f4c59bca28d01632cf693062a7d30ecbd5cc8",
"support"
],
"loading/lazyload/common.js": [
@ -670094,7 +670265,7 @@
"testharness"
],
"media-source/mediasource-getvideoplaybackquality.html": [
"bce01733391fedb2644be203b83fd2dfd79480ad",
"54b2a5579956f43288a2aba0485037751fdccadf",
"testharness"
],
"media-source/mediasource-invalid-codec.html": [
@ -707358,7 +707529,7 @@
"support"
],
"tools/ci/run_tc.py": [
"482de1ad336a1824d2335c9e6d7996063f71a78e",
"f9086a31bd93baf72819fc450f90a290d65674fd",
"support"
],
"tools/ci/taskcluster-run.py": [
@ -707386,7 +707557,7 @@
"support"
],
"tools/ci/tc/tasks/test.yml": [
"101d0aa1c16b6ef99ca2ea25790723a1ae9d9cd6",
"e80e794203edca3c8d5f19ea9833a4f79e979f08",
"support"
],
"tools/ci/tc/testdata/epochs_daily_push_event.json": [
@ -707414,7 +707585,7 @@
"support"
],
"tools/ci/tc/tests/test_valid.py": [
"05477ed0bd42d7c2ce8aa5fdd6629da0e3e03aa1",
"b170928b290a27f75eada66162ea404a1dbae9f9",
"support"
],
"tools/ci/tests/test_jobs.py": [
@ -707502,11 +707673,11 @@
"support"
],
"tools/lint/lint.py": [
"17fb988834a01a1b1cd22394df19b8d335704813",
"a050cfa8a8e4e2699db44ce9e52f8f230a34a869",
"support"
],
"tools/lint/rules.py": [
"b3d125f8dd63c04df149cea07681a45e1cc2044a",
"faa285fd7cdbcc406f8c02ab03ed6beb36eb0bef",
"support"
],
"tools/lint/tests/__init__.py": [
@ -707690,7 +707861,7 @@
"support"
],
"tools/manifest/manifest.py": [
"a8f571967ab5afbc65fed7a53baee2724d8b375e",
"2ad7fccf48675bdcc7b544747e1d1824a598542f",
"support"
],
"tools/manifest/sourcefile.py": [
@ -707714,7 +707885,7 @@
"support"
],
"tools/manifest/tests/test_manifest.py": [
"8e008be091181dda3a08673a38e4faaebfb119c1",
"733cafdcbe9dc9ce07cb3e843bd956d02c6fd2fe",
"support"
],
"tools/manifest/tests/test_sourcefile.py": [
@ -712562,7 +712733,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/servo.py": [
"bb1f172cd5e69ff17e649f0f12a796919191fb9b",
"5b657993f1900cd34a1460c5bc3a9093fcc7f13c",
"support"
],
"tools/wptrunner/wptrunner/browsers/servodriver.py": [
@ -712626,7 +712797,7 @@
"support"
],
"tools/wptrunner/wptrunner/executors/executorservo.py": [
"365a1a08653b0175fc4df4050eb9d9aaf8b1d34c",
"9cef1fb2d7f78e8729e51ff400b3df2402a2e94e",
"support"
],
"tools/wptrunner/wptrunner/executors/executorservodriver.py": [
@ -712814,7 +712985,7 @@
"support"
],
"tools/wptrunner/wptrunner/tests/test_wpttest.py": [
"69f22ebcb68b62b6c54f7874f55146b46f94d838",
"9bb3e1fd34e37c4430f752b87e4bb4e3bfa7f959",
"support"
],
"tools/wptrunner/wptrunner/update/__init__.py": [
@ -719458,7 +719629,7 @@
"support"
],
"webaudio/js/worklet-recorder.js": [
"3bf3bc23b20764ba54d5ff125699df91fffe741a",
"913ab742aa1bfd77ca3d4ba6c3421ad198be2b17",
"support"
],
"webaudio/resources/4ch-440.wav": [
@ -719486,7 +719657,7 @@
"support"
],
"webaudio/resources/audit.js": [
"2aac1fffb492ea46e737257df08a09e65f6d3415",
"fe6fc45b1400ac7526e37a53a54ec3ac52fde528",
"support"
],
"webaudio/resources/biquad-filters.js": [
@ -719966,7 +720137,7 @@
"testharness"
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html": [
"a8a7f5ed1de78b90432641d617e60a1b58dd893f",
"8dafa2f8111a8b522be5540a2fbf4f9a3ee5cd6e",
"testharness"
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-options.https.html": [
@ -727906,7 +728077,7 @@
"testharness"
],
"webxr/xrSession_requestReferenceSpace.https.html": [
"51aa8885f5e853ca4bf225134dee120b71d28011",
"be97396041e17b6d3aa1ae746ea35c3f7b50eb5b",
"testharness"
],
"webxr/xrSession_requestReferenceSpace_features.https.html": [
@ -731751,5 +731922,5 @@
]
},
"url_base": "/",
"version": 6
"version": 7
}

View file

@ -0,0 +1,2 @@
[border-left-color-115.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[keyframes-remove-documentElement-crash.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[svg-skewx-015.html]
expected: FAIL

View file

@ -2,3 +2,6 @@
[listeners are called when <iframe> is resized]
expected: FAIL
[listeners are called correct number of times]
expected: FAIL

View file

@ -1,4 +0,0 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -312,18 +312,21 @@
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL

View file

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

View file

@ -11,6 +11,9 @@
[X-Content-Type-Options%3A%20nosniff%0C]
expected: FAIL
[X-Content-Type-Options%3A%20%2Cnosniff]
[X-Content-Type-Options%3A%20no%0D%0AX-Content-Type-Options%3A%20nosniff]
expected: FAIL
[Content-Type-Options%3A%20nosniff]
expected: FAIL

View file

@ -8,14 +8,8 @@
expected: FAIL
[Embedded credentials are treated as network errors in new windows.]
expected: TIMEOUT
expected: FAIL
[Embedded credentials matching the top-level are treated as network errors for cross-origin URLs.]
expected: TIMEOUT
[Embedded credentials matching the top-level are not treated as network errors for same-origin URLs.]
expected: TIMEOUT
[Embedded credentials matching the top-level are not treated as network errors for relative URLs.]
expected: TIMEOUT

View file

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

View file

@ -1,4 +0,0 @@
[creating_browsing_context_test_01.html]
[first argument: absolute url]
expected: FAIL

View file

@ -0,0 +1,5 @@
[skip-another-top-level-browsing-context.html]
expected: TIMEOUT
[Autofocus elements queued in another top-level browsing context's documents should be skipped.]
expected: TIMEOUT

View file

@ -1,16 +1,20 @@
[supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus]
expected: FAIL
[Element with tabindex should support autofocus]
expected: FAIL
expected: TIMEOUT
[Host element with delegatesFocus including no focusable descendants should be skipped]
expected: FAIL
expected: NOTRUN
[Area element should support autofocus]
expected: FAIL
expected: NOTRUN
[Host element with delegatesFocus should support autofocus]
expected: FAIL
expected: NOTRUN
[Non-HTMLElement should not support autofocus]
expected: NOTRUN

View file

@ -0,0 +1,4 @@
[cross-origin-to-whom-part-2.window.html]
[Test embed/frame/iframe/object nested document APIs for same origin-domain and cross origin-domain embedder document]
expected: FAIL

View file

@ -0,0 +1,4 @@
[cross-origin-to-whom.window.html]
[Test embed/frame/iframe/object nested document APIs for same origin-domain and cross origin-domain current settings object]
expected: FAIL

View file

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

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
expected: FAIL

View file

@ -0,0 +1,5 @@
[css-module-worker-test.html]
expected: TIMEOUT
[A dynamic import CSS Module within a web worker should not load.]
expected: TIMEOUT

View file

@ -0,0 +1,7 @@
[import-css-module-basic.html]
[An @import CSS Module should not load]
expected: FAIL
[A CSS Module should load]
expected: FAIL

View file

@ -0,0 +1,14 @@
[utf8.tentative.html]
expected: TIMEOUT
[windows-1252]
expected: NOTRUN
[utf-7]
expected: NOTRUN
[shift-jis]
expected: NOTRUN
[utf-8]
expected: NOTRUN

View file

@ -1,5 +1,4 @@
[crossorigin-sandwich-TAO.sub.html]
expected: ERROR
[There should be one entry.]
expected: FAIL

View file

@ -98,3 +98,9 @@
[X SNR (19.538850442082673 dB) is not greater than or equal to 65.737. Got 19.538850442082673.]
expected: FAIL
[X SNR (19.49992782894456 dB) is not greater than or equal to 65.737. Got 19.49992782894456.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t1.9724091887474060e-1\t9.5236867666244507e-1\t7.5512775778770447e-1\t7.9289436569253091e-1\t3.8985999999999999e-3\n\t[60\]\t-2.2450675070285797e-1\t-5.8084785938262939e-1\t3.5634110867977142e-1\t6.1348441407448528e-1\t3.8985999999999999e-3\n\t[90\]\t-3.7808802723884583e-1\t-5.9811043739318848e-1\t2.2002241015434265e-1\t3.6786251568070089e-1\t3.8985999999999999e-3\n\t[120\]\t7.6881676912307739e-1\t9.4563448429107666e-1\t1.7681771516799927e-1\t1.8698315057805445e-1\t3.8985999999999999e-3\n\t[151\]\t5.4644601186737418e-4\t-4.1306272149085999e-2\t4.1852718160953373e-2\t1.0132291292202573e+0\t3.8985999999999999e-3\n\t...and 1421 more errors.\n\tMax AbsError of 9.8619294445961714e-1 at index of 1178.\n\t[1178\]\t-1.3593670912086964e-2\t-9.9978661537170410e-1\t9.8619294445961714e-1\t9.8640342778840562e-1\t3.8985999999999999e-3\n\tMax RelError of 1.0132291292202573e+0 at index of 151.\n]
expected: FAIL

View file

@ -3,6 +3,5 @@
expected: FAIL
[test_element_in_collection]
expected:
if os == "mac": FAIL
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -1,4 +1,5 @@
[005.html]
expected: ERROR
[dedicated worker in shared worker in dedicated worker]
expected: FAIL

View file

@ -1,11 +1,5 @@
{
"items": {
"conformancechecker": {
"css/blockify_inline_element.html": []
},
"manual": {
"css/blockify_inline_element.html": []
},
"reftest": {
"css/abs-overflow-stackingcontext.html": [
[
@ -7911,7 +7905,6 @@
"css/block_replaced_content_ref.html": [
[]
],
"css/blockify_inline_element.html": [],
"css/blockify_inline_element_ref.html": [
[]
],
@ -11148,7 +11141,6 @@
{}
]
],
"css/blockify_inline_element.html": [],
"css/bug_1345483.html": [
[
"css/bug_1345483.html",
@ -12600,12 +12592,6 @@
{}
]
]
},
"visual": {
"css/blockify_inline_element.html": []
},
"wdspec": {
"css/blockify_inline_element.html": []
}
},
"paths": {
@ -19847,5 +19833,5 @@
]
},
"url_base": "/_mozilla/",
"version": 6
"version": 7
}

View file

@ -1,4 +1,5 @@
name: pr-preview-detect
# This workflow triggers on deployment, which can never happen on a fork.
on: deployment
jobs:
detect-deployment:

View file

@ -21,6 +21,8 @@ jobs:
with:
fetch-depth: 50
- name: Run website_build.sh
# Use a conditional step instead of a conditional job to work around #20700.
if: github.repository == 'web-platform-tests/wpt'
uses: ./tools/docker/documentation
env:
DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}

View file

@ -6,13 +6,13 @@ on:
- cron: 10 */3 * * *
jobs:
update:
# Do not run this job on forks.
if: github.repository == 'web-platform-tests/wpt'
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Run epochs_update.sh
# Use a conditional step instead of a conditional job to work around #20700.
if: github.repository == 'web-platform-tests/wpt'
run: ./tools/ci/epochs_update.sh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -8,8 +8,6 @@ on:
- 'tools/**'
jobs:
build-and-tag:
# Do not run this job on forks.
if: github.repository == 'web-platform-tests/wpt'
runs-on: ubuntu-18.04
steps:
- name: Checkout
@ -21,6 +19,8 @@ jobs:
sudo apt-get -qqy install zstd
pip install -r tools/wpt/requirements.txt
- name: Run manifest_build.py
# Use a conditional step instead of a conditional job to work around #20700.
if: github.repository == 'web-platform-tests/wpt'
run: tools/docker/retry.py --delay 60 python tools/ci/manifest_build.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title> Async Clipboard raw write -> Async Clipboard raw read tests </title>
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async function readWriteTest(rawInput) {
promise_test(async t => {
const blobInput = new Blob([rawInput], {type: 'chromium/x-test-format'});
const clipboardItem = new ClipboardItem(
{'chromium/x-test-format': blobInput}, {raw: true});
await navigator.clipboard.write([clipboardItem]);
// TODO(https://crbug.com/897289): Implement raw clipboard read.
}, 'Verify write and read clipboard given arbitrary raw input: ' + rawInput);
}
readWriteTest('Async Clipboard raw write -> Async Clipboard raw read tests');
</script>
<p>
Note: This is a manual test because it writes/reads to the shared system
clipboard and thus cannot be run async with other tests that might interact
with the clipboard.
</p>

View file

@ -47,6 +47,20 @@ test(() => {
assert_equals(types2[1], 'not a/real type');
}, "types() returns correct values");
test(() => {
const item = new ClipboardItem({'text/plain': blob});
assert_equals(item.raw, false);
const item2 = new ClipboardItem({'text/plain': blob}, {});
assert_equals(item2.raw, false);
const item3 = new ClipboardItem({'text/plain': blob}, {raw: false});
assert_equals(item3.raw, false);
const item4 = new ClipboardItem({'text/plain': blob}, {raw: true});
assert_equals(item4.raw, true);
}, "raw() returns correct values, defaulting to false");
promise_test(async () => {
const item =
new ClipboardItem({'text/plain': blob, 'not a/real type': blob2});

View file

@ -6,7 +6,6 @@
<script src="/css/support/computed-testcommon.js"></script>
<div id="target"></div>
<script>
test_computed_value("color-scheme", "", "normal");
test_computed_value("color-scheme", "normal");
test_computed_value("color-scheme", "light dark");
test_computed_value("color-scheme", "dark light");
@ -14,11 +13,10 @@
test_computed_value("color-scheme", "only light");
test_computed_value("color-scheme", "light light");
test_computed_value("color-scheme", "light only");
test_computed_value("color-scheme", "none");
// reserved and css-wide keywords.
test_computed_value("color-scheme", "initial", "normal");
test_computed_value("color-scheme", "inherit", "normal");
test_computed_value("color-scheme", "unset", "normal");
test_computed_value("color-scheme", "revert", "normal");
test_computed_value("color-scheme", "default", "normal");
test_computed_value("color-scheme", "none", "normal");
</script>

View file

@ -5,21 +5,21 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
<script>
test_invalid_value("color-scheme", "none");
test_invalid_value("color-scheme", "only");
test_invalid_value("color-scheme", "only only");
test_invalid_value("color-scheme", "only normal");
test_invalid_value("color-scheme", "only light dark");
test_invalid_value("color-scheme", "only light light");
test_invalid_value("color-scheme", "only light purple");
test_invalid_value("color-scheme", "only none");
test_invalid_value("color-scheme", "normal dark");
test_invalid_value("color-scheme", "normal purple");
test_invalid_value("color-scheme", "light normal");
test_invalid_value("color-scheme", "light none");
test_invalid_value("color-scheme", "light, dark");
test_invalid_value("color-scheme", "light inherit");
test_invalid_value("color-scheme", "light initial");
test_invalid_value("color-scheme", "light unset");
test_invalid_value("color-scheme", "light revert");
test_invalid_value("color-scheme", "default");
test_invalid_value("color-scheme", "light default");
</script>

View file

@ -16,6 +16,8 @@
test_valid_value("color-scheme", "dark dark");
test_valid_value("color-scheme", "light purple");
test_valid_value("color-scheme", "purple dark interesting");
test_valid_value("color-scheme", "none");
test_valid_value("color-scheme", "light none");
test_valid_value("color-scheme", "inherit");
test_valid_value("color-scheme", "initial");
test_valid_value("color-scheme", "unset");

View file

@ -0,0 +1,172 @@
<!doctype html>
<html>
<title> Retrieve resources from CacheStorage with Cross-Origin-Embedder-Policy: require-corp</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<script>
/*
This document does NOT define the Cross-Origin-Embedder-Policy header.
Cross-Origin Embedder Policy Editor's draft: https://mikewest.github.io/corpp/
This test is retrieving same-origin and cross-origin resources from the
CacheStorage. The resources are generated from the ServiceWorker or from the
network with the header Cross-Origin-Resource-Policy being one of:
- 'same-origin'
- 'cross-origin'
- <undefined>
*/
promise_test(async (t) => {
const SCOPE = new URL(location.href).pathname;
const SCRIPT =
'resources/sw-store-to-cache-storage.js?' +
`pipe=header(service-worker-allowed,${SCOPE})`;
const reg = await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
add_completion_callback(() => reg.unregister());
await new Promise(resolve => {
navigator.serviceWorker.addEventListener('controllerchange', resolve);
});
}, 'setting up');
function remote(path) {
const REMOTE_ORIGIN = get_host_info().HTTPS_REMOTE_ORIGIN;
return new URL(path, REMOTE_ORIGIN);
}
function local(path) {
return new URL(path, location.origin);
}
// Send a message to the currently active ServiceWorker and wait for its
// response.
function executeCommandInServiceWorker(command) {
return new Promise(resolve => {
navigator.serviceWorker.addEventListener('message', e => resolve(e.data));
navigator.serviceWorker.controller.postMessage(command);
});
}
// Try loading an image from a |response|. Return a Promise resolving or
// rejecting depending on the image loading result.
function readImageFromResponse(response) {
return new Promise((resolve, reject) => {
const img = document.createElement("img");
img.onload = resolve.bind(this, "");
img.onerror = reject.bind(this, {name: "Image.onerror"});
response.blob().then(blob => {
img.src = URL.createObjectURL(blob);
document.body.appendChild(img);
})
})
}
const image_path = "/images/blue.png?pipe=";
const corp_header = {
"":"",
"corp-undefined": "",
"corp-same-origin": "|header(Cross-Origin-Resource-Policy,same-origin)",
"corp-cross-origin": "|header(Cross-Origin-Resource-Policy,cross-origin)",
}
const cors_header = {
"":"",
"cors-disabled": "",
"cors-enabled": "|header(Access-Control-Allow-Origin,*)",
}
function test(
// Test parameters:
request_source, request_origin, request_mode, response_cors, response_corp,
// Test expectations:
response_stored, response_type) {
promise_test(async (t) => {
// 0. Start from an empty CacheStorage.
await caches.delete("v1");
// 1. Make the ServiceWorker to request the ressource and store it into the
// CacheStorage.
const path = image_path +
corp_header[response_corp] +
cors_header[response_cors];
const url = (request_origin === "same-origin" ? local : remote)(path);
const command = {
url: url.href,
mode: request_mode,
source: request_source,
};
assert_equals(await executeCommandInServiceWorker(command), response_stored);
if (response_stored === "not-stored") {
return;
}
// 2. Make this document to retrieve it from the CacheStorage.
const cache = await caches.open('v1');
const response = await cache.match(url);
assert_equals(response.type, response_type);
if (request_source === "service-worker") {
assert_equals("foo", await response.text());
return;
}
// Opaque response are not readable.
if (response_type === "opaque") {
await promise_rejects(t, {name: "Image.onerror"}, readImageFromResponse(response));
return;
}
await readImageFromResponse(response);
}, `Fetch ${request_origin} ${request_mode} ${response_cors} ${response_corp} from ${request_source} and CacheStorage.`)
}
// Responses generated from the ServiceWorker.
{
test("service-worker", "cross-origin", "cors", "", "", "stored", "default");
test("service-worker", "cross-origin", "no-cors", "", "", "stored", "default");
test("service-worker", "same-origin", "cors", "", "", "stored", "default");
test("service-worker", "same-origin", "no-cors", "", "", "stored", "default");
}
// Responses generated from a same-origin server.
{
const t = test.bind(this, "network", "same-origin");
t("cors", "cors-disabled", "corp-cross-origin", "stored", "basic");
t("cors", "cors-disabled", "corp-same-origin", "stored", "basic");
t("cors", "cors-disabled", "corp-undefined", "stored", "basic");
t("cors", "cors-enabled", "corp-cross-origin", "stored", "basic");
t("cors", "cors-enabled", "corp-same-origin", "stored", "basic");
t("cors", "cors-enabled", "corp-undefined", "stored", "basic");
t("no-cors", "cors-disabled", "corp-cross-origin", "stored", "basic");
t("no-cors", "cors-disabled", "corp-same-origin", "stored", "basic");
t("no-cors", "cors-disabled", "corp-undefined", "stored", "basic");
t("no-cors", "cors-enabled", "corp-cross-origin", "stored", "basic");
t("no-cors", "cors-enabled", "corp-same-origin", "stored", "basic");
t("no-cors", "cors-enabled", "corp-undefined", "stored", "basic");
}
// Responses generated from a cross-origin server.
{
const t = test.bind(this, "network", "cross-origin");
t("cors", "cors-disabled", "corp-cross-origin", "not-stored");
t("cors", "cors-disabled", "corp-same-origin", "not-stored");
t("cors", "cors-disabled", "corp-undefined", "not-stored");
t("cors", "cors-enabled", "corp-cross-origin", "stored", "cors");
t("cors", "cors-enabled", "corp-same-origin", "stored", "cors");
t("cors", "cors-enabled", "corp-undefined", "stored", "cors");
t("no-cors", "cors-disabled", "corp-cross-origin", "stored", "opaque");
t("no-cors", "cors-disabled", "corp-same-origin", "not-stored");
t("no-cors", "cors-disabled", "corp-undefined", "stored", "opaque");
t("no-cors", "cors-enabled", "corp-cross-origin", "stored", "opaque");
t("no-cors", "cors-enabled", "corp-same-origin", "not-stored");
t("no-cors", "cors-enabled", "corp-undefined", "stored", "opaque");
}
</script>
</html>

View file

@ -0,0 +1,178 @@
<!doctype html>
<html>
<title> Retrieve resources from CacheStorage with Cross-Origin-Embedder-Policy: require-corp</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<script>
/*
This document has the header Cross-Origin-Embedder-Policy: require-corp.
Cross-Origin Embedder Policy Editor's draft: https://mikewest.github.io/corpp/
This test is retrieving same-origin and cross-origin resources from the
CacheStorage. The resources are generated from the ServiceWorker or from the
network with the header Cross-Origin-Resource-Policy being one of:
- 'same-origin'
- 'cross-origin'
- <undefined>
*/
promise_test(async (t) => {
const SCOPE = new URL(location.href).pathname;
const SCRIPT =
'resources/sw-store-to-cache-storage.js?' +
`pipe=header(service-worker-allowed,${SCOPE})`;
const reg = await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
add_completion_callback(() => reg.unregister());
await new Promise(resolve => {
navigator.serviceWorker.addEventListener('controllerchange', resolve);
});
}, 'setting up');
function remote(path) {
const REMOTE_ORIGIN = get_host_info().HTTPS_REMOTE_ORIGIN;
return new URL(path, REMOTE_ORIGIN);
}
function local(path) {
return new URL(path, location.origin);
}
// Send a message to the currently active ServiceWorker and wait for its
// response.
function executeCommandInServiceWorker(command) {
return new Promise(resolve => {
navigator.serviceWorker.addEventListener('message', e => resolve(e.data));
navigator.serviceWorker.controller.postMessage(command);
});
}
// Try loading an image from a |response|. Return a Promise resolving or
// rejecting depending on the image loading result.
function readImageFromResponse(response) {
return new Promise((resolve, reject) => {
const img = document.createElement("img");
img.onload = resolve.bind(this, "");
img.onerror = reject.bind(this, {name: "Image.onerror"});
response.blob().then(blob => {
img.src = URL.createObjectURL(blob);
document.body.appendChild(img);
})
})
}
const image_path = "/images/blue.png?pipe=";
const corp_header = {
"":"",
"corp-undefined": "",
"corp-same-origin": "|header(Cross-Origin-Resource-Policy,same-origin)",
"corp-cross-origin": "|header(Cross-Origin-Resource-Policy,cross-origin)",
}
const cors_header = {
"":"",
"cors-disabled": "",
"cors-enabled": "|header(Access-Control-Allow-Origin,*)",
}
function test(
// Test parameters:
request_source, request_origin, request_mode, response_cors, response_corp,
// Test expectations:
response_stored, response_type) {
promise_test(async (t) => {
// 0. Start from an empty CacheStorage.
await caches.delete("v1");
// 1. Store a cross-origin no-cors response generated from the SW into the
// CacheStorage.
const path = image_path +
corp_header[response_corp] +
cors_header[response_cors];
const url = (request_origin === "same-origin" ? local : remote)(path);
const command = {
url: url.href,
mode: request_mode,
source: request_source,
};
assert_equals(await executeCommandInServiceWorker(command), response_stored);
if (response_stored === "not-stored") {
return;
}
// 2. Retrieve it from the CacheStorage.
const cache = await caches.open('v1');
if (response_type === 'error') {
await promise_rejects(t, new TypeError(), cache.match(url));
return;
}
const response = await cache.match(url);
assert_equals(response.type, response_type);
if (request_source === "service-worker") {
assert_equals("foo", await response.text());
return;
}
// Opaque response can't be read from the document.
if (response_type === "opaque") {
await promise_rejects(t, {name: "Image.onerror"}, readImageFromResponse(response));
return;
}
await readImageFromResponse(response);
}, `Fetch ${request_origin} ${request_mode} ${response_cors} ${response_corp} from ${request_source} and CacheStorage.`)
}
// Responses generated from the ServiceWorker.
{
test("service-worker", "cross-origin", "cors", "", "", "stored", "default");
test("service-worker", "cross-origin", "no-cors", "", "", "stored", "default");
test("service-worker", "same-origin", "cors", "", "", "stored", "default");
test("service-worker", "same-origin", "no-cors", "", "", "stored", "default");
}
// Responses generated from a same-origin server.
{
const t = test.bind(this, "network", "same-origin");
t("cors", "cors-disabled", "corp-cross-origin", "stored", "basic");
t("cors", "cors-disabled", "corp-same-origin", "stored", "basic");
t("cors", "cors-disabled", "corp-undefined", "stored", "basic");
t("cors", "cors-enabled", "corp-cross-origin", "stored", "basic");
t("cors", "cors-enabled", "corp-same-origin", "stored", "basic");
t("cors", "cors-enabled", "corp-undefined", "stored", "basic");
t("no-cors", "cors-disabled", "corp-cross-origin", "stored", "basic");
t("no-cors", "cors-disabled", "corp-same-origin", "stored", "basic");
t("no-cors", "cors-disabled", "corp-undefined", "stored", "basic");
t("no-cors", "cors-enabled", "corp-cross-origin", "stored", "basic");
t("no-cors", "cors-enabled", "corp-same-origin", "stored", "basic");
t("no-cors", "cors-enabled", "corp-undefined", "stored", "basic");
}
// Responses generated from a cross-origin server.
{
const t = test.bind(this, "network", "cross-origin");
t("cors", "cors-disabled", "corp-cross-origin", "not-stored");
t("cors", "cors-disabled", "corp-same-origin", "not-stored");
t("cors", "cors-disabled", "corp-undefined", "not-stored");
t("cors", "cors-enabled", "corp-cross-origin", "stored", "cors");
t("cors", "cors-enabled", "corp-same-origin", "stored", "cors");
t("cors", "cors-enabled", "corp-undefined", "stored", "cors");
t("no-cors", "cors-disabled", "corp-cross-origin", "stored", "opaque");
t("no-cors", "cors-disabled", "corp-same-origin", "not-stored");
t("no-cors", "cors-disabled", "corp-undefined", "stored", "error");
t("no-cors", "cors-enabled", "corp-cross-origin", "stored", "opaque");
t("no-cors", "cors-enabled", "corp-same-origin", "not-stored");
t("no-cors", "cors-enabled", "corp-undefined", "stored", "error");
}
</script>
</html>

View file

@ -0,0 +1 @@
cross-origin-embedder-policy: require-corp

View file

@ -75,7 +75,7 @@ async_test(t => {
t.step_timeout(() => {
assert_equals(pageLoaded, true);
t.done();
}, 500);
}, 2000);
}, `"require-corp" top-level: creating a "none" popup should succeed.`);
[

View file

@ -0,0 +1,31 @@
self.addEventListener('activate', (e) => {
e.waitUntil(clients.claim());
});
self.addEventListener('message', (e) => {
e.waitUntil((async () => {
const url = new URL(e.data.url);
const request = new Request(url, {mode: e.data.mode});
const cache = await caches.open('v1');
let response;
switch(e.data.source) {
case "service-worker":
response = new Response('foo');
break;
case "network":
try {
response = await fetch(request);
} catch(error) {
e.source.postMessage('not-stored');
return;
}
break;
}
await cache.put(request, response);
e.source.postMessage('stored');
})());
})

View file

@ -0,0 +1,59 @@
async_test(t => {
const frame = document.body.appendChild(document.createElement("iframe"));
frame.src = "support/document-with-embedded-svg.html";
const elements = {
"embed": ["getSVGDocument"],
"frame": ["contentDocument"],
"iframe": ["getSVGDocument", "contentDocument"],
"object": ["getSVGDocument", "contentDocument"]
};
function element_to_document(element, api) {
return api === "getSVGDocument" ? element[api]() : element[api];
}
function assert_apis(instance, assertNull = false) {
const name = instance.localName;
let priorPossibleDocument = null;
elements[name].forEach(api => {
const assertReason = `${name}.${api}`;
const possibleDocument = element_to_document(instance, api);
if (assertNull) {
assert_equals(possibleDocument, null, assertReason);
return;
} else {
assert_not_equals(possibleDocument, null, assertReason);
// This needs standardizing still
// assert_class_string(possibleDocument, "XMLDocument");
}
// Ensure getSVGDocument() and contentDocument if both available return the same
if (priorPossibleDocument === null) {
priorPossibleDocument = possibleDocument;
} else {
assert_equals(priorPossibleDocument, possibleDocument);
}
});
}
frame.onload = t.step_func_done(() => {
const instances = Object.keys(elements).map(element => frame.contentDocument.querySelector(element));
// Everything is same origin and same origin-domain, no sweat
instances.forEach(instance => assert_apis(instance));
// Make the SVG cross origin-domain (its container and the current settings object are not
// affected)
instances.forEach(instance => {
const svgDocument = element_to_document(instance, elements[instance.localName][0]);
svgDocument.domain = svgDocument.domain;
});
instances.forEach(instance => assert_apis(instance, true));
const svgContainer = frame.contentDocument;
// Make the current settings object same origin-domain with the SVG and cross origin-domain with
// SVG's container (SVG's container is not affected)
document.domain = document.domain;
assert_equals(frame.contentDocument, null);
instances.forEach(instance => assert_apis(instance, true));
// Make everything same origin-domain once more
svgContainer.domain = svgContainer.domain;
instances.forEach(instance => assert_apis(instance));
});
document.body.appendChild(frame);
}, "Test embed/frame/iframe/object nested document APIs for same origin-domain and cross origin-domain embedder document");

View file

@ -0,0 +1,37 @@
async_test(t => {
const frame = document.body.appendChild(document.createElement("iframe"));
frame.src = "support/document-with-embedded-svg.html";
const elements = {
"embed": ["getSVGDocument"],
"frame": ["contentDocument"],
"iframe": ["getSVGDocument", "contentDocument"],
"object": ["getSVGDocument", "contentDocument"]
};
function assert_apis(instance) {
const name = instance.localName;
let priorPossibleDocument = null;
elements[name].forEach(api => {
const possibleDocument = api == "getSVGDocument" ? instance[api]() : instance[api];
assert_not_equals(possibleDocument, null, `${name}.${api}`);
// This needs standardizing still
// assert_class_string(possibleDocument, "XMLDocument");
// Ensure getSVGDocument() and contentDocument if both available return the same
if (priorPossibleDocument === null) {
priorPossibleDocument = possibleDocument;
} else {
assert_equals(priorPossibleDocument, possibleDocument);
}
});
}
frame.onload = t.step_func_done(() => {
const instances = Object.keys(elements).map(element => frame.contentDocument.querySelector(element));
// Everything is same origin and same origin-domain, no sweat
instances.forEach(instance => assert_apis(instance));
// Make the current settings object cross origin-domain (SVG and its container are not affected)
document.domain = document.domain;
assert_equals(frame.contentDocument, null);
instances.forEach(instance => assert_apis(instance));
});
document.body.appendChild(frame);
}, "Test embed/frame/iframe/object nested document APIs for same origin-domain and cross origin-domain current settings object");

View file

@ -0,0 +1,9 @@
<!doctype html>
<body>
<script>
["embed", "frame", "iframe", "object"].forEach(name => {
const frame = document.body.appendChild(document.createElement(name));
const attr = name !== "object" ? "src" : "data";
frame[attr] = "svg.svg";
});
</script>

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg"><rect height="100" width="100"/></svg>

After

Width:  |  Height:  |  Size: 79 B

View file

@ -0,0 +1,37 @@
<!doctype html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
setup({allow_uncaught_exception: true});
async_test(function (test) {
const worker = new Worker("./resources/worker.js", {
type: "module"
});
worker.onmessage = test.unreached_func("A CSS Module within a web worker should not load.");
worker.onerror = test.step_func_done();
}, "A static import CSS Module within a web worker should not load.");
async_test(function (test) {
const worker = new Worker("./resources/worker-dynamic-import.js", {
type: "module"
});
worker.onmessage = test.step_func_done(e => {
assert_equals(e.data, "NOT LOADED");
});
}, "A dynamic import CSS Module within a web worker should not load.");
async_test(function (test) {
const worker = new Worker("./resources/basic.css", {
type: "module"
});
worker.onerror = test.step_func_done();
}, "A CSS Module within a web worker should not load.");
</script>
</body>

View file

@ -0,0 +1,44 @@
<!doctype html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
async_test(function (test) {
const iframe = document.createElement("iframe");
iframe.src = "resources/css-module-basic-iframe.html";
iframe.onload = test.step_func_done(function () {
assert_equals(getComputedStyle(iframe.contentDocument.querySelector('#test'))
.backgroundColor, "rgb(255, 0, 0)",
"CSS module import should succeed");
});
document.body.appendChild(iframe);
}, "A CSS Module should load");
async_test(function (test) {
const iframe = document.createElement("iframe");
iframe.src = "resources/css-module-at-import-iframe.html";
iframe.onload = test.step_func_done(function () {
assert_equals(iframe.contentDocument.load_error, "NotAllowedError");
assert_not_equals(getComputedStyle(iframe.contentDocument.querySelector('#test'))
.backgroundColor, "rgb(255, 0, 0)",
"CSS module @import should not succeed");
});
document.body.appendChild(iframe);
}, "An @import CSS Module should not load");
async_test(function (test) {
const iframe = document.createElement("iframe");
iframe.src = "resources/malformed-iframe.html";
iframe.onload = test.step_func_done(function () {
assert_not_equals(getComputedStyle(iframe.contentDocument.querySelector('#test'))
.backgroundColor, "rgb(255, 0, 0)",
"Malformed CSS should not load");
});
document.body.appendChild(iframe);
}, "Malformed CSS should not load");
</script>
</body>

View file

@ -0,0 +1,3 @@
#test {
background-color:red;
}

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<body>
<script>
window.onerror = function (errorMsg, url, lineNumber, column, errorObj)
{
document.load_error = errorObj.name;
return true;
};
</script>
<script type="module">
import v from "./bad-import.css";
document.adoptedStyleSheets = [v];
</script>
<div id="test">
I am a test div.
</div>
</body>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<body>
<script>
window.onerror = function (errorMsg, url, lineNumber, column, errorObj)
{
document.load_error = errorObj.name;
return true;
};
</script>
<script type="module">
import v from "./basic.css";
document.adoptedStyleSheets = [v];
</script>
<div id="test">
I am a test div.
</div>
</body>

View file

@ -0,0 +1,11 @@
<!DOCTYPE html>
<body>
<script type="module">
import v from "./malformed.css";
document.adoptedStyleSheets = [v];
</script>
<div id="test">
I am a test div.
</div>
</body>

View file

@ -0,0 +1,3 @@
#test {{
background-color:red;
}

View file

@ -0,0 +1,3 @@
import("./basic.css")
.then(() => postMessage("LOADED"))
.catch(e => postMessage("NOT LOADED"));

View file

@ -0,0 +1,2 @@
import "./basic.css";
postMessage("Unexpectedly loaded");

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS modules: UTF-8 decoding</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function check(t, v) {
t.step(() => {
assert_equals(typeof v, "object");
assert_equals(v.rules[0].style.content, "\"…\"");
t.done();
});
}
const t1 = async_test("utf-8");
const t2 = async_test("shift-jis");
const t3 = async_test("windows-1252");
const t4 = async_test("utf-7");
</script>
<script type="module" onerror="t1.step(() => assert_unreached(event))">
import v from "../serve-with-content-type.py?fn=css-module/resources/utf8.css&ct=text/css%3Bcharset=utf-8";
check(t1, v);
</script>
<script type="module" onerror="t2.step(() => assert_unreached(event))">
import v from "../serve-with-content-type.py?fn=css-module/resources/utf8.css&ct=text/css%3Bcharset=shift-jis";
check(t2, v);
</script>
<script type="module" onerror="t3.step(() => assert_unreached(event))">
import v from "../serve-with-content-type.py?fn=css-module/resources/utf8.css&ct=text/css%3Bcharset=windows-1252";
check(t3, v);
</script>
<script type="module" onerror="t4.step(() => assert_unreached(event))">
import v from "../serve-with-content-type.py?fn=css-module/resources/utf8.css&ct=text/css%3Bcharset=utf-7";
check(t4, v);
</script>

View file

@ -1,6 +1,3 @@
[multiTouchPointsReleaseFirstPoint.html]
expected:
if product == "firefox" or product == "safari": ERROR
[TestDriver actions: two touch points with one moving one pause]
expected:
if product == "chrome": FAIL

View file

@ -1,6 +1,3 @@
[multiTouchPointsReleaseSecondPoint.html]
expected:
if product == "firefox" or product == "safari": ERROR
[TestDriver actions: two touch points with one moving one pause]
expected:
if product == "chrome": FAIL

View file

@ -199,7 +199,7 @@ interface IDBTransaction : EventTarget {
readonly attribute DOMStringList objectStoreNames;
readonly attribute IDBTransactionMode mode;
[SameObject] readonly attribute IDBDatabase db;
readonly attribute DOMException error;
readonly attribute DOMException? error;
IDBObjectStore objectStore(DOMString name);
void commit();

View file

@ -711,3 +711,42 @@ AHEM SYSTEM FONT: resource-timing/resources/iframe-reload-TAO.sub.html
AHEM SYSTEM FONT: infrastructure/assumptions/ahem-ref.html
AHEM SYSTEM FONT: infrastructure/assumptions/ahem.html
# Existing crashtests using testharness
TESTHARNESS-IN-OTHER-TYPE: 2dcontext/wide-gamut-canvas/imagedata-no-color-settings-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/CSS2/floats-clear/adjoining-float-new-fc-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/CSS2/floats/floats-saturated-position-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/CSS2/linebox/video-needs-layout-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-animations/keyframes-remove-documentElement-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-break/break-before-with-no-fragmentation-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-multicol/abspos-in-multicol-with-spanner-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-multicol/with-custom-layout-on-same-element-crash.https.html
TESTHARNESS-IN-OTHER-TYPE: css/css-overflow/outline-with-opacity-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-overflow/shrink-to-fit-auto-overflow-relayout-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-position/position-absolute-in-inline-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-pseudo/first-letter-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-pseudo/first-line-first-letter-insert-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-shapes/shape-outside/supported-shapes/polygon/shape-outside-polygon-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-tables/visibility-collapse-colspan-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-tables/visibility-collapse-rowspan-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-text/overflow-wrap/overflow-wrap-break-word-long-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-text/overflow-wrap/overflow-wrap-break-word-white-space-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-text/text-indent/text-indent-long-line-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-text/white-space/nowrap-wbr-and-space-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-text/white-space/pre-line-br-with-whitespace-child-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-text/white-space/pre-with-whitespace-crash.html
TESTHARNESS-IN-OTHER-TYPE: css/css-writing-modes/bidi-inline-fragment-crash.html
TESTHARNESS-IN-OTHER-TYPE: dom/svg-insert-crash.html
TESTHARNESS-IN-OTHER-TYPE: editing/run/first-letter-crossing-engine-boundary-crash.html
TESTHARNESS-IN-OTHER-TYPE: html/semantics/embedded-content/the-object-element/block-object-with-ruby-crash.html
TESTHARNESS-IN-OTHER-TYPE: html/semantics/forms/the-input-element/time-datalist-crash.html
TESTHARNESS-IN-OTHER-TYPE: html/semantics/forms/the-input-element/type-change-file-to-text-crash.html
TESTHARNESS-IN-OTHER-TYPE: html/semantics/interactive-elements/the-details-element/display-table-with-rt-crash.html
TESTHARNESS-IN-OTHER-TYPE: html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html
TESTHARNESS-IN-OTHER-TYPE: html/semantics/text-level-semantics/the-ruby-element/rt-without-ruby-crash.html
TESTHARNESS-IN-OTHER-TYPE: portals/portals-no-frame-crash.html
TESTHARNESS-IN-OTHER-TYPE: quirks/table-replaced-descendant-percentage-height-crash.html
TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-circular-filter-reference-crash.html
TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-under-clip-path-crash.html
TESTHARNESS-IN-OTHER-TYPE: svg/extensibility/foreignObject/foreign-object-under-defs-crash.html
TESTHARNESS-IN-OTHER-TYPE: svg/svg-in-svg/svg-in-svg-circular-filter-reference-crash.html

View file

@ -40,12 +40,6 @@
assert_less_than_equal(newQuality.droppedVideoFrames, newQuality.totalVideoFrames,
"droppedVideoFrames is only a portion of totalVideoFrames");
assert_greater_than_equal(newQuality.corruptedVideoFrames, 0, "corruptedVideoFrames >= 0");
assert_greater_than_equal(newQuality.corruptedVideoFrames, previousQuality.corruptedVideoFrames,
"corruptedVideoFrames increases monotonically");
assert_less_than_equal(newQuality.corruptedVideoFrames, newQuality.totalVideoFrames,
"corruptedVideoFrames is only a portion of totalVideoFrames");
previousQuality = newQuality;
timeUpdateCount++;
}));

View file

@ -300,11 +300,12 @@ def setup_repository(args):
if task_head != expected_head:
if not is_pr:
try:
run(["git", "fetch", "origin", "%s:task_head" % expected_head])
run(["git", "fetch", "origin", expected_head])
run(["git", "reset", "--hard", expected_head])
except subprocess.CalledProcessError:
print("CRITICAL: task_head points at %s, expected %s and "
"unable to fetch expected commit.\n"
"This may be because the branch was updated" % (task_head, args.rev))
"This may be because the branch was updated" % (task_head, expected_head))
sys.exit(1)
else:
# Convert the refs/pulls/<id>/merge to refs/pulls/<id>/head
@ -317,7 +318,7 @@ def setup_repository(args):
sys.exit(1)
if remote_head != args.head_rev:
print("CRITICAL: task_head points at %s, expected %s. "
"This may be because the branch was updated" % (task_head, args.rev))
"This may be because the branch was updated" % (task_head, expected_head))
sys.exit(1)
print("INFO: Merge commit changed from %s to %s due to base branch changes. "
"Running task anyway." % (expected_head, task_head))

View file

@ -177,8 +177,8 @@ tasks:
browser: servo
channel: nightly
use:
- trigger-daily
- trigger-push
do:
- ${vars.browser}-${vars.channel}-${vars.suite}:
use:

View file

@ -214,7 +214,30 @@ def test_verify_payload():
'wpt-webkitgtk_minibrowser-nightly-testharness-8',
'wpt-webkitgtk_minibrowser-nightly-testharness-9',
'wpt-webkitgtk_minibrowser-nightly-wdspec-1',
'wpt-webkitgtk_minibrowser-nightly-crashtest-1'})
'wpt-webkitgtk_minibrowser-nightly-crashtest-1',
'wpt-servo-nightly-reftest-1',
'wpt-servo-nightly-reftest-2',
'wpt-servo-nightly-reftest-3',
'wpt-servo-nightly-reftest-4',
'wpt-servo-nightly-reftest-5',
'wpt-servo-nightly-testharness-1',
'wpt-servo-nightly-testharness-10',
'wpt-servo-nightly-testharness-11',
'wpt-servo-nightly-testharness-12',
'wpt-servo-nightly-testharness-13',
'wpt-servo-nightly-testharness-14',
'wpt-servo-nightly-testharness-15',
'wpt-servo-nightly-testharness-16',
'wpt-servo-nightly-testharness-2',
'wpt-servo-nightly-testharness-3',
'wpt-servo-nightly-testharness-4',
'wpt-servo-nightly-testharness-5',
'wpt-servo-nightly-testharness-6',
'wpt-servo-nightly-testharness-7',
'wpt-servo-nightly-testharness-8',
'wpt-servo-nightly-testharness-9',
'wpt-servo-nightly-wdspec-1',
'wpt-servo-nightly-crashtest-1',})
])
def test_schedule_tasks(event_path, is_pr, files_changed, expected):
with mock.patch("tools.ci.tc.decision.get_fetch_rev", return_value=(None, None, None)):

View file

@ -392,6 +392,7 @@ regexps = [item() for item in # type: ignore
rules.MissingDepsRegexp,
rules.SpecialPowersRegexp]]
def check_regexp_line(repo_root, path, f):
# type: (str, str, IO[bytes]) -> List[rules.Error]
errors = [] # type: List[rules.Error]
@ -405,6 +406,7 @@ def check_regexp_line(repo_root, path, f):
return errors
def check_parsed(repo_root, path, f):
# type: (str, str, IO[bytes]) -> List[rules.Error]
source_file = SourceFile(repo_root, path, "/", contents=f.read())
@ -474,6 +476,9 @@ def check_parsed(repo_root, path, f):
errors.append(rules.InvalidTimeout.error(path, (timeout_value,)))
if source_file.testharness_nodes:
test_type = source_file.manifest_items()[0]
if test_type not in ("testharness", "manual"):
errors.append(rules.TestharnessInOtherType.error(path, (test_type,)))
if len(source_file.testharness_nodes) > 1:
errors.append(rules.MultipleTestharness.error(path))

View file

@ -317,6 +317,11 @@ class BrokenMetadata(Rule):
description = "Metadata comment is not formatted correctly"
class TestharnessInOtherType(Rule):
name = "TESTHARNESS-IN-OTHER-TYPE"
description = "testharness.js included in a %s test"
class Regexp(six.with_metaclass(abc.ABCMeta)):
@abc.abstractproperty
def pattern(self):
@ -355,6 +360,7 @@ class TabsRegexp(Regexp):
description = "Test-file line starts with one or more tab characters"
to_fix = "use spaces to replace any tab characters at beginning of lines"
class CRRegexp(Regexp):
pattern = b"\r$"
name = "CR AT EOL"
@ -364,6 +370,7 @@ class CRRegexp(Regexp):
cross-platform "Unix" line endings instead of, e.g., DOS line endings).
"""
class SetTimeoutRegexp(Regexp):
pattern = br"setTimeout\s*\("
name = "SET TIMEOUT"
@ -373,6 +380,7 @@ class SetTimeoutRegexp(Regexp):
replace all `setTimeout(...)` calls with `step_timeout(...)` calls
"""
class W3CTestOrgRegexp(Regexp):
pattern = br"w3c\-test\.org"
name = "W3C-TEST.ORG"
@ -382,16 +390,19 @@ class W3CTestOrgRegexp(Regexp):
`{{host}}:{{ports[http][0]}}` or a generic hostname like `example.org`
"""
class WebPlatformTestRegexp(Regexp):
pattern = br"web\-platform\.test"
name = "WEB-PLATFORM.TEST"
description = "Internal web-platform.test domain used"
class Webidl2Regexp(Regexp):
pattern = br"webidl2\.js"
name = "WEBIDL2.JS"
description = "Legacy webidl2.js script used"
class ConsoleRegexp(Regexp):
pattern = br"console\.[a-zA-Z]+\s*\("
name = "CONSOLE"
@ -402,6 +413,7 @@ class ConsoleRegexp(Regexp):
`assert_*` of some kind in place of it)
"""
class GenerateTestsRegexp(Regexp):
pattern = br"generate_tests\s*\("
name = "GENERATE_TESTS"
@ -409,6 +421,7 @@ class GenerateTestsRegexp(Regexp):
description = "Test file line has a generate_tests call"
to_fix = "remove the call and call `test()` a number of times instead"
class PrintRegexp(Regexp):
pattern = br"print(?:\s|\s*\()"
name = "PRINT STATEMENT"
@ -421,12 +434,14 @@ class PrintRegexp(Regexp):
achieves the intended effect (e.g., a logging call)
"""
class LayoutTestsRegexp(Regexp):
pattern = br"(eventSender|testRunner|internals)\."
name = "LAYOUTTESTS APIS"
file_extensions = [".html", ".htm", ".js", ".xht", ".xhtml", ".svg"]
description = "eventSender/testRunner/internals used; these are LayoutTests-specific APIs (WebKit/Blink)"
class MissingDepsRegexp(Regexp):
pattern = br"[^\w]/gen/"
name = "MISSING DEPENDENCY"
@ -434,12 +449,14 @@ class MissingDepsRegexp(Regexp):
description = "Chromium-specific content referenced"
to_fix = "Reimplement the test to use well-documented testing interfaces"
class SpecialPowersRegexp(Regexp):
pattern = b"SpecialPowers"
name = "SPECIALPOWERS API"
file_extensions = [".html", ".htm", ".js", ".xht", ".xhtml", ".svg"]
description = "SpecialPowers used; this is gecko-specific and not supported in wpt"
class TrailingWhitespaceRegexp(Regexp):
name = "TRAILING WHITESPACE"
description = "Whitespace at EOL"

View file

@ -36,7 +36,7 @@ try:
except ImportError:
fast_json = json # type: ignore
CURRENT_VERSION = 6
CURRENT_VERSION = 7
class ManifestError(Exception):
@ -471,14 +471,6 @@ class Manifest(object):
self._path_hash = {to_os_path(k): v for k, v in iteritems(obj["paths"])}
for test_type, type_paths in iteritems(obj["items"]):
# Drop "stub" items, which are no longer supported but may be
# present when doing an incremental manifest update.
# See https://github.com/web-platform-tests/rfcs/pull/27 for background.
#
# TODO(MANIFESTv7): remove this condition
if test_type == "stub":
continue
if test_type not in item_classes:
raise ManifestError

View file

@ -115,7 +115,7 @@ def test_manifest_to_json_forwardslash():
'paths': {
'a/b': ('0000000000000000000000000000000000000000', 'testharness')
},
'version': 6,
'version': 7,
'url_base': '/',
'items': {
'testharness': {
@ -137,7 +137,7 @@ def test_manifest_to_json_backslash():
'paths': {
'a/b': ('0000000000000000000000000000000000000000', 'testharness')
},
'version': 6,
'version': 7,
'url_base': '/',
'items': {
'testharness': {
@ -152,7 +152,7 @@ def test_manifest_from_json_backslash():
'paths': {
'a\\b': ('0000000000000000000000000000000000000000', 'testharness')
},
'version': 6,
'version': 7,
'url_base': '/',
'items': {
'testharness': {
@ -398,5 +398,5 @@ def test_update_from_json_modified():
'paths': {'test1': ('1111111111111111111111111111111111111111',
'testharness')},
'url_base': '/',
'version': 6
'version': 7
}

View file

@ -3,7 +3,10 @@ import os
from .base import NullBrowser, ExecutorBrowser, require_arg
from .base import get_timeout_multiplier # noqa: F401
from ..executors import executor_kwargs as base_executor_kwargs
from ..executors.executorservo import ServoTestharnessExecutor, ServoRefTestExecutor, ServoWdspecExecutor # noqa: F401
from ..executors.executorservo import (ServoCrashtestExecutor, # noqa: F401
ServoTestharnessExecutor, # noqa: F401
ServoRefTestExecutor, # noqa: F401
ServoWdspecExecutor) # noqa: F401
here = os.path.join(os.path.split(__file__)[0])
@ -12,6 +15,7 @@ __wptrunner__ = {
"check_args": "check_args",
"browser": "ServoBrowser",
"executor": {
"crashtest": "ServoCrashtestExecutor",
"testharness": "ServoTestharnessExecutor",
"reftest": "ServoRefTestExecutor",
"wdspec": "ServoWdspecExecutor",

View file

@ -5,6 +5,7 @@ import os
import subprocess
import tempfile
import threading
import traceback
import uuid
from mozprocess import ProcessHandler
@ -13,8 +14,10 @@ from tools.serve.serve import make_hosts_file
from .base import (ConnectionlessProtocol,
RefTestImplementation,
crashtest_result_converter,
testharness_result_converter,
reftest_result_converter,
TimedRunner,
WdspecExecutor,
WebDriverProtocol)
from .process import ProcessTestExecutor
@ -32,6 +35,30 @@ def write_hosts_file(config):
return hosts_path
def build_servo_command(test, test_url_func, browser, binary, pause_after_test, debug_info,
extra_args=None, debug_opts="replace-surrogates"):
args = [
"--hard-fail", "-u", "Servo/wptrunner",
"-z", test_url_func(test),
]
if debug_opts:
args += ["-Z", debug_opts]
for stylesheet in browser.user_stylesheets:
args += ["--user-stylesheet", stylesheet]
for pref, value in test.environment.get('prefs', {}).iteritems():
args += ["--pref", "%s=%s" % (pref, value)]
if browser.ca_certificate_path:
args += ["--certificate-path", browser.ca_certificate_path]
if extra_args:
args += extra_args
args += browser.binary_args
debug_args, command = browser_command(binary, args, debug_info)
if pause_after_test:
command.remove("-z")
return debug_args + command
class ServoTestharnessExecutor(ProcessTestExecutor):
convert_result = testharness_result_converter
@ -57,25 +84,12 @@ class ServoTestharnessExecutor(ProcessTestExecutor):
self.result_data = None
self.result_flag = threading.Event()
args = [
"--hard-fail", "-u", "Servo/wptrunner",
"-Z", "replace-surrogates", "-z", self.test_url(test),
]
for stylesheet in self.browser.user_stylesheets:
args += ["--user-stylesheet", stylesheet]
for pref, value in test.environment.get('prefs', {}).iteritems():
args += ["--pref", "%s=%s" % (pref, value)]
if self.browser.ca_certificate_path:
args += ["--certificate-path", self.browser.ca_certificate_path]
args += self.browser.binary_args
debug_args, command = browser_command(self.binary, args, self.debug_info)
self.command = command
if self.pause_after_test:
self.command.remove("-z")
self.command = debug_args + self.command
self.command = build_servo_command(test,
self.test_url,
self.browser,
self.binary,
self.pause_after_test,
self.debug_info)
env = os.environ.copy()
env["HOST_FILE"] = self.hosts_path
@ -192,37 +206,23 @@ class ServoRefTestExecutor(ProcessTestExecutor):
ProcessTestExecutor.teardown(self)
def screenshot(self, test, viewport_size, dpi):
full_url = self.test_url(test)
with TempFilename(self.tempdir) as output_path:
debug_args, command = browser_command(
self.binary,
[
"--hard-fail", "--exit",
"-u", "Servo/wptrunner",
"-Z", "disable-text-aa,load-webfonts-synchronously,replace-surrogates",
"--output=%s" % output_path, full_url
] + self.browser.binary_args,
self.debug_info)
for stylesheet in self.browser.user_stylesheets:
command += ["--user-stylesheet", stylesheet]
for pref, value in test.environment.get('prefs', {}).iteritems():
command += ["--pref", "%s=%s" % (pref, value)]
command += ["--resolution", viewport_size or "800x600"]
if self.browser.ca_certificate_path:
command += ["--certificate-path", self.browser.ca_certificate_path]
extra_args = ["--exit",
"--output=%s" % output_path,
"--resolution", viewport_size or "800x600"]
debug_opts = "disable-text-aa,load-webfonts-synchronously,replace-surrogates"
if dpi:
command += ["--device-pixel-ratio", dpi]
extra_args += ["--device-pixel-ratio", dpi]
# Run ref tests in headless mode
command += ["-z"]
self.command = debug_args + command
self.command = build_servo_command(test,
self.test_url,
self.browser,
self.binary,
False,
self.debug_info,
extra_args,
debug_opts)
env = os.environ.copy()
env["HOST_FILE"] = self.hosts_path
@ -283,3 +283,82 @@ class ServoDriverProtocol(WebDriverProtocol):
class ServoWdspecExecutor(WdspecExecutor):
protocol_cls = ServoDriverProtocol
class ServoTimedRunner(TimedRunner):
def run_func(self):
try:
self.result = True, self.func(self.protocol, self.url, self.timeout)
except Exception as e:
message = getattr(e, "message", "")
if message:
message += "\n"
message += traceback.format_exc(e)
self.result = False, ("INTERNAL-ERROR", message)
finally:
self.result_flag.set()
def set_timeout(self):
pass
class ServoCrashtestExecutor(ProcessTestExecutor):
convert_result = crashtest_result_converter
def __init__(self, browser, server_config, binary=None, timeout_multiplier=1,
screenshot_cache=None, debug_info=None, pause_after_test=False,
**kwargs):
ProcessTestExecutor.__init__(self,
browser,
server_config,
timeout_multiplier=timeout_multiplier,
debug_info=debug_info)
self.pause_after_test = pause_after_test
self.protocol = ConnectionlessProtocol(self, browser)
self.tempdir = tempfile.mkdtemp()
self.hosts_path = write_hosts_file(server_config)
def do_test(self, test):
timeout = (test.timeout * self.timeout_multiplier if self.debug_info is None
else None)
test_url = self.test_url(test)
# We want to pass the full test object into build_servo_command,
# so stash it in the class
self.test = test
success, data = ServoTimedRunner(self.logger, self.do_crashtest, self.protocol,
test_url, timeout, self.extra_timeout).run()
if success:
return self.convert_result(test, data)
return (test.result_cls(*data), [])
def do_crashtest(self, protocol, url, timeout):
env = os.environ.copy()
env["HOST_FILE"] = self.hosts_path
env["RUST_BACKTRACE"] = "1"
command = build_servo_command(self.test,
self.test_url,
self.browser,
self.binary,
False,
self.debug_info,
extra_args=["-x"])
if not self.interactive:
self.proc = ProcessHandler(command,
env=env,
storeOutput=False)
self.proc.run()
else:
self.proc = subprocess.Popen(command, env=env)
self.proc.wait()
if self.proc.poll() >= 0:
return {"status": "PASS", "message": None}
return {"status": "CRASH", "message": None}

View file

@ -225,7 +225,7 @@ def test_metadata_fuzzy():
{"fuzzy": [[["/a/fuzzy.html", '/a/fuzzy-ref.html', '=='],
[[2, 3], [10, 15]]]]}]]}},
"paths": {"a/fuzzy.html": ["0"*40, "reftest"]},
"version": 6,
"version": 7,
"url_base": "/"}
manifest = wptmanifest.Manifest.from_json(".", manifest_data)
test_metadata = manifestexpected.static.compile(BytesIO(test_fuzzy),

View file

@ -30,6 +30,7 @@ class RecorderProcessor extends AudioWorkletProcessor {
type: 'recordfinished',
recordBuffer: this._recordBuffer
});
this.port.close();
return false;
}

View file

@ -51,6 +51,12 @@ window.Audit = (function() {
}, message);
}
function _logException(message, exception) {
test(function() {
throw exception;
}, message);
}
function _throwException(message) {
throw new Error(message);
}
@ -1191,11 +1197,12 @@ window.Audit = (function() {
// that wheel, but since it's been reinvented... At least make sure that
// an exception while running a task doesn't preclude us running all the
// _other_ tasks for the test.
let testName = `Executing "${this.label}"`;
try {
this._taskFunction(this, this.should.bind(this));
_logPassed(testName);
} catch (e) {
// Log the failure.
test(() => { throw e; }, `Executing "${this.label}"`);
_logException(testName, e);
if (this.state != TaskState.FINISHED) {
// We threw before calling done(), so do that manually to run our
// other tasks.

View file

@ -13,9 +13,9 @@
const audit = Audit.createTaskRunner();
const context = new AudioContext();
setup(async function () {
await context.audioWorklet.addModule(
'processors/channel-count-processor.js');
setup(function () {
context.audioWorklet.addModule(
'processors/channel-count-processor.js').then(() => audit.run());
// Test if the output channe count dynamically changes if the input
// and output is 1.
@ -74,8 +74,6 @@
// if the specified channel count is kept correctly.
node.connect(context.destination);
});
audit.run();
});
</script>
</body>

View file

@ -43,13 +43,13 @@
})
]))
.then(() => {
if (!session.immersive) {
if (session.mode == 'inline') {
// Bounded reference spaces are not allowed in inline sessions.
return promise_rejects(t, "NotSupportedError", session.requestReferenceSpace('bounded-floor'))
}
})
.then(() => {
if (!session.immersive) {
if (session.mode == 'inline') {
// Unbounded reference spaces are not allowed in inline sessions.
return promise_rejects(t, "NotSupportedError", session.requestReferenceSpace('unbounded'))
}

File diff suppressed because it is too large Load diff