mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Auto merge of #26753 - servo-wpt-sync:wpt_update_02-06-2020, r=jdm
Sync WPT with upstream (02-06-2020) Automated downstream sync of changes from upstream as of 02-06-2020. [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
af85d2fd20
73 changed files with 726 additions and 152 deletions
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-003.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[min-height-applies-to-013.xht]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[min-height-applies-to-014.xht]
|
||||
expected: FAIL
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -17,6 +17,3 @@
|
|||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[elementsFromPoint-invalid-cases.html]
|
||||
[The root element is the last element returned for otherwise empty queries within the viewport]
|
||||
expected: FAIL
|
||||
|
|
@ -321,15 +321,18 @@
|
|||
[<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 */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,6 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,3 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_2.html]
|
||||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[opener of discarded nested browsing context]
|
||||
expected: FAIL
|
||||
|
||||
[opener of discarded auxiliary browsing context]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[event_loadstart.html]
|
||||
expected: TIMEOUT
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -3,3 +3,6 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -678,6 +678,15 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"scroll-animations": {
|
||||
"null-scroll-source-crash.html": [
|
||||
"5ffc522d68e751995e6183a49f85d2ca7378f66d",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"selection": {
|
||||
"selection-select-all-move-input-crash.html": [
|
||||
"6f692dc5e7d69a30a407f107268c9e012efcd9e3",
|
||||
|
@ -50633,7 +50642,7 @@
|
|||
]
|
||||
],
|
||||
"c414-flt-fit-000.xht": [
|
||||
"099c67163544bff7daaddfe7b08db543620a2a4e",
|
||||
"15a53e4aa02b1ec7ec69a42f1df4eeca02f98999",
|
||||
[
|
||||
null,
|
||||
[
|
||||
|
@ -81744,6 +81753,32 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"min-height-applies-to-013.xht": [
|
||||
"ec0137bba43dc40496ad6cd3a0f09748d410e1da",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/pass_if_square_96px_black.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"min-height-applies-to-014.xht": [
|
||||
"48ccd1914fd7835bc066332149b967969853a2be",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/pass_if_square_96px_black.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"min-height-applies-to-015.xht": [
|
||||
"158c9a29c7c924517f8e3e21bbeaac23fe70bed6",
|
||||
[
|
||||
|
@ -237521,6 +237556,19 @@
|
|||
]
|
||||
},
|
||||
"scroll-animations": {
|
||||
"animation-with-animatable-interface.html": [
|
||||
"4c3fa027fd073e5e86eafd8d10dc898ab0fb88a5",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/scroll-animations/animation-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"animation-with-display-none.html": [
|
||||
"310cb5fc8b0ca7c0ab042a1aecf664528dc3b5eb",
|
||||
[
|
||||
|
@ -272566,7 +272614,7 @@
|
|||
[]
|
||||
],
|
||||
"c414-flt-fit-000-ref.xht": [
|
||||
"ae8e72079a6d60287e093aa330c08dd7062d7bcd",
|
||||
"49f2b02d99895d35897daaad5e719ae5cd1421d1",
|
||||
[]
|
||||
],
|
||||
"c414-flt-fit-001-ref.xht": [
|
||||
|
@ -330696,7 +330744,7 @@
|
|||
[]
|
||||
],
|
||||
"load-into-the-iframe.html": [
|
||||
"05a80be73745465ddcd65bc5745a674824974590",
|
||||
"9e08eb587ab38283b53034128ca36c82b545d03f",
|
||||
[]
|
||||
],
|
||||
"navigation-changed-iframe.html": [
|
||||
|
@ -333975,10 +334023,6 @@
|
|||
}
|
||||
},
|
||||
"interfaces": {
|
||||
"BackgroundSync.idl": [
|
||||
"c52dcdb89843e80e9bd89591df76ba26f7172dab",
|
||||
[]
|
||||
],
|
||||
"CSP.idl": [
|
||||
"e427ae8801a7863a59d9507d384e075e34bd4731",
|
||||
[]
|
||||
|
@ -334047,6 +334091,10 @@
|
|||
"cf3d75125402197f7b1a52b4a38fe9acc168643f",
|
||||
[]
|
||||
],
|
||||
"background-sync.idl": [
|
||||
"c52dcdb89843e80e9bd89591df76ba26f7172dab",
|
||||
[]
|
||||
],
|
||||
"badging.idl": [
|
||||
"01481820935a08675e4bef734aada27b3151e814",
|
||||
[]
|
||||
|
@ -334821,7 +334869,7 @@
|
|||
]
|
||||
},
|
||||
"lint.ignore": [
|
||||
"078a706f079c3cfc2a88dbd8ce9b3b290d1ffcfb",
|
||||
"9d057e76edc3bb6a94adcff9c897ef48e2235e3c",
|
||||
[]
|
||||
],
|
||||
"loading": {
|
||||
|
@ -334882,6 +334930,12 @@
|
|||
[]
|
||||
]
|
||||
},
|
||||
"manifest": {
|
||||
"META.yml": [
|
||||
"013fc58a29fa7f83e5e6a034d3a343bc87ab629d",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"mathml": {
|
||||
"META.yml": [
|
||||
"5aea9088d744bfa835ca91217c9a6d9f60253e3e",
|
||||
|
@ -341603,6 +341657,10 @@
|
|||
"39149915cc573b3f8a5e0e01a10729494aec59f1",
|
||||
[]
|
||||
],
|
||||
"embed-navigation-is-not-intercepted-iframe.html": [
|
||||
"5e86f67735f778c590eeb5fd29567dbb23033055",
|
||||
[]
|
||||
],
|
||||
"embedded-content-from-server.html": [
|
||||
"ff50a9c752690d6726d0cd6d9820947f1bc5d4b0",
|
||||
[]
|
||||
|
@ -342175,6 +342233,10 @@
|
|||
"0aeb81951ede48c62780fe723013b2ad77ffe336",
|
||||
[]
|
||||
],
|
||||
"object-navigation-is-not-intercepted-iframe.html": [
|
||||
"5c8ab79a500a93ce04e6704e5762eacd717c4f71",
|
||||
[]
|
||||
],
|
||||
"onactivate-throw-error-from-nested-event-worker.js": [
|
||||
"7c97014fd042affbd38d77fa538d8a584d7c72f7",
|
||||
[]
|
||||
|
@ -344501,7 +344563,7 @@
|
|||
[]
|
||||
],
|
||||
"README.md": [
|
||||
"9342aded298bdd0e5daac12289c78163d1d5bec5",
|
||||
"2203727ef96f313cd7c5e6afb766a07b70969cec",
|
||||
[]
|
||||
],
|
||||
"__init__.py": [
|
||||
|
@ -344509,7 +344571,7 @@
|
|||
[]
|
||||
],
|
||||
"commands.json": [
|
||||
"15182cc9e6531d5a5ba3d42c9f00821946c5e8a3",
|
||||
"421b0a636c2593bb3aa133b133373b54be6796ea",
|
||||
[]
|
||||
],
|
||||
"documentation": {
|
||||
|
@ -344519,7 +344581,7 @@
|
|||
]
|
||||
},
|
||||
"frontend.py": [
|
||||
"59a1cff2ebd0efda06fadd144a84b5d35b2d81c8",
|
||||
"6d35d4c3826311da2b36b9f2efe6dd7bfd0cc7a8",
|
||||
[]
|
||||
],
|
||||
"retry.py": [
|
||||
|
@ -344891,7 +344953,7 @@
|
|||
],
|
||||
"quic": {
|
||||
"README.md": [
|
||||
"5a64b701cfb85900c219463624e6afa299a3813d",
|
||||
"ef1d66e3220285f8b1eb0e0a7d188a09350c3fd8",
|
||||
[]
|
||||
],
|
||||
"__init__.py": [
|
||||
|
@ -350113,7 +350175,7 @@
|
|||
[]
|
||||
],
|
||||
"run.py": [
|
||||
"a9fdeada1ec780a50093f221673cf406864e36c2",
|
||||
"95d9369f2a888657c23315d8d97b9eb636e3db96",
|
||||
[]
|
||||
],
|
||||
"testfiles.py": [
|
||||
|
@ -350138,7 +350200,7 @@
|
|||
[]
|
||||
],
|
||||
"test_run.py": [
|
||||
"ef58ec41b2b4cfc14955b701627d047af78f29bc",
|
||||
"d533977e0c7436010ec9d81c826dd6f8453a9785",
|
||||
[]
|
||||
],
|
||||
"test_testfiles.py": [
|
||||
|
@ -352045,7 +352107,7 @@
|
|||
[]
|
||||
],
|
||||
"keyframe-tests.js": [
|
||||
"3cf3cf22bf8666a3800dfd3cc3cd4e37c7f7598e",
|
||||
"43e0d7575f2cc47294e2435f311e26c66bb52a36",
|
||||
[]
|
||||
],
|
||||
"keyframe-utils.js": [
|
||||
|
@ -357794,7 +357856,7 @@
|
|||
"testharness": {
|
||||
"BackgroundSync": {
|
||||
"idlharness.https.any.js": [
|
||||
"120477a51e61ad32f629e991a12e8bc99c4dbb7e",
|
||||
"29fb87b8263e87a0d570c874a9531e64d5d76b83",
|
||||
[
|
||||
"BackgroundSync/idlharness.https.any.html",
|
||||
{
|
||||
|
@ -401818,6 +401880,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"text-overflow-ellipsis-self-painting.html": [
|
||||
"2810f8dae1810f3385fe978f0066210cfc24fdf6",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"text-overflow-ellipsis-width-001.html": [
|
||||
"2042111588254242c202527589507b40ef0c3538",
|
||||
[
|
||||
|
@ -455975,7 +456044,7 @@
|
|||
]
|
||||
],
|
||||
"iframe_sandbox_allow_top_navigation-1.html": [
|
||||
"feb876608aca54d9bbe9113a9e5a28fa1d2e0ee2",
|
||||
"b033ec44d24e106a265bf480296f09cbe3e27c32",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -455989,7 +456058,7 @@
|
|||
]
|
||||
],
|
||||
"iframe_sandbox_allow_top_navigation-3.html": [
|
||||
"c7c56d670e5a32884b39e4034f83f5443cd76290",
|
||||
"c3e5dc1fd6a0c5786dfeed57699bbf37901fa08e",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -468677,6 +468746,15 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"manifest": {
|
||||
"link-rel-manifest.html": [
|
||||
"8eb39703a082daedc921b156287b014eaf836665",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"mathml": {
|
||||
"presentation-markup": {
|
||||
"direction": {
|
||||
|
@ -474818,6 +474896,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"parent-no-child-bad-subdomain.sub.https.html": [
|
||||
"2653dabd980b8caf65cf84b4765a2cfc0c4cb5c9",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"parent-no-child-yes-same.sub.https.html": [
|
||||
"4239e1644638b04d330ff70f8a27e97f5af88ab0",
|
||||
[
|
||||
|
@ -474832,6 +474917,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"parent-no-child-yes-with-params-subdomain.sub.https.html": [
|
||||
"164a19ff381f9f351af805cf8ff73ddac92bafb1",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"parent-no-child1-no-child2-yes-children-different.sub.https.html": [
|
||||
"3c879391a4571398a4254a15906411d5e844c596",
|
||||
[
|
||||
|
@ -491849,7 +491941,7 @@
|
|||
]
|
||||
],
|
||||
"embed-and-object-are-not-intercepted.https.html": [
|
||||
"34556a785aea6810243ca473fc40066d16265116",
|
||||
"581dbeca9772268ab85a2b50d8f7f45cf61e781f",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -509905,7 +509997,7 @@
|
|||
]
|
||||
],
|
||||
"animate.html": [
|
||||
"00e68b429621f65e68285bda2fa04ccb39f3f8e9",
|
||||
"dad633ba9a2ca0ed10574c973b036f76b738d0db",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -535897,20 +535989,6 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"min-height-applies-to-013.xht": [
|
||||
"13ddef79ec10b58218885d267dc47f4e5ae90ec9",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"min-height-applies-to-014.xht": [
|
||||
"2abb772d9b53644c2d46d2bbbf100273cf38258a",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"min-width-014.xht": [
|
||||
"611e40506bcc1e0ecfcce3ad84ea005efa221b9d",
|
||||
[
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-003.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[min-height-applies-to-013.xht]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[min-height-applies-to-014.xht]
|
||||
expected: FAIL
|
|
@ -2,3 +2,6 @@
|
|||
[Hit test intersecting scaled box]
|
||||
expected: FAIL
|
||||
|
||||
[Hit test within unscaled box]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[text-overflow-ellipsis-self-painting.html]
|
||||
[CSS Basic User Interface Test: ellipsis when there are self-painting objects]
|
||||
expected: FAIL
|
||||
|
|
@ -21,6 +21,3 @@
|
|||
[test the top of layer]
|
||||
expected: FAIL
|
||||
|
||||
[test some point of the element: top left corner]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[elementsFromPoint-invalid-cases.html]
|
||||
[The root element is the last element returned for otherwise empty queries within the viewport]
|
||||
expected: FAIL
|
||||
|
|
@ -321,15 +321,18 @@
|
|||
[<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 */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,6 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,3 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_2.html]
|
||||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[opener and "removed" embedded documents]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -7,5 +7,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[opener of discarded auxiliary browsing context]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -4,3 +4,6 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
5
tests/wpt/metadata/webmessaging/with-ports/017.html.ini
Normal file
5
tests/wpt/metadata/webmessaging/with-ports/017.html.ini
Normal file
|
@ -0,0 +1,5 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -4,10 +4,10 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
// https://wicg.github.io/BackgroundSync/spec/
|
||||
// https://wicg.github.io/background-sync/spec/
|
||||
|
||||
idl_test(
|
||||
['BackgroundSync'],
|
||||
['background-sync'],
|
||||
['service-workers', 'html', 'dom'],
|
||||
idlArray => {
|
||||
const isServiceWorker = location.pathname.includes('.serviceworker.');
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
<style type="text/css"><![CDATA[
|
||||
table
|
||||
{
|
||||
font: 16px monospace;
|
||||
border-collapse: separate;
|
||||
border: blue solid medium;
|
||||
border-spacing: 0px;
|
||||
|
@ -33,7 +34,6 @@
|
|||
|
||||
td
|
||||
{
|
||||
color: navy;
|
||||
padding: 0;
|
||||
}
|
||||
]]></style>
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
<link rel="match" href="c414-flt-fit-000-ref.xht" />
|
||||
|
||||
<style type="text/css"><![CDATA[
|
||||
div { border: solid blue; padding: 1em; width: 14em; margin: 10px; }
|
||||
div p { margin: 0; width: 5em; float: left; color: navy; }
|
||||
div { font: 16px monospace; border: solid blue; padding: 1em; width: 14em; margin: 10px; }
|
||||
div p { margin: 0; width: 5em; float: left; }
|
||||
]]></style>
|
||||
|
||||
</head>
|
||||
|
@ -22,7 +22,7 @@
|
|||
<p> 2 </p>
|
||||
<p> 4 </p>
|
||||
3
|
||||
5                    
|
||||
5 <!-- the font is set to monospace so we know how wide a nbsp is -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
|
||||
<link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-min-height" />
|
||||
<link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#min-max-heights" />
|
||||
<link rel="match" href="../../reference/pass_if_square_96px_black.html" />
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="The 'min-height' property applies to elements with 'display' set to 'table'." />
|
||||
<style type="text/css">
|
||||
|
@ -36,4 +37,4 @@
|
|||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
|
||||
<link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-min-height" />
|
||||
<link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#min-max-heights" />
|
||||
<link rel="match" href="../../reference/pass_if_square_96px_black.html" />
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="The 'min-height' property applies to elements with 'display' set to 'inline-table'." />
|
||||
<style type="text/css">
|
||||
|
@ -36,4 +37,4 @@
|
|||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
<!DOCTYPE html>
|
||||
<title>CSS Basic User Interface Test: ellipsis when there are self-painting objects</title>
|
||||
<link rel="help" href="http://www.w3.org/TR/css3-ui/#text-overflow">
|
||||
<link rel="help" href="https://crbug.com/1005645">
|
||||
<link rel="author" href="mailto:kojii@chromium.org">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<style>
|
||||
.test {
|
||||
width: 5ch;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.ellipsis {
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
span {
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: red;
|
||||
opacity: 0.3;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="test" class="test ellipsis">1234567890 <span></span></div>
|
||||
<div id="ref" class="test">1234567890 <span></span></div>
|
||||
<script>
|
||||
test(() => {
|
||||
const ref_element = document.getElementById('ref');
|
||||
const test_element = document.getElementById('test');
|
||||
assert_equals(test_element.scrollWidth, ref_element.scrollWidth);
|
||||
});
|
||||
</script>
|
||||
</body>
|
|
@ -8,7 +8,6 @@
|
|||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<iframe sandbox="allow-top-navigation allow-scripts"></iframe>
|
||||
<script>
|
||||
// We are the main test page. Open a popup, so that we can
|
||||
// can experiment navigation of the top frame.
|
||||
|
@ -17,7 +16,8 @@
|
|||
assert_equals(e.data, "can navigate");
|
||||
e.source.close();
|
||||
}));
|
||||
window.open("support/load-into-the-iframe.html");
|
||||
let sandbox = "allow-top-navigation allow-scripts";
|
||||
window.open("support/load-into-the-iframe.html?sandbox=" + sandbox);
|
||||
}, "Frames with `allow-top-navigation` should be able to navigate the top frame.");
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -9,10 +9,6 @@
|
|||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Specifying both allow-top-navigation and
|
||||
allow-top-navigation-by-user-activation is a document conformance
|
||||
error: allow-top-navigation-by-user-activation will have no effect. -->
|
||||
<iframe sandbox="allow-top-navigation allow-top-navigation-by-user-activation allow-scripts"></iframe>
|
||||
<script>
|
||||
// We are the main test page. Open a popup, so that we can
|
||||
// can experiment navigation of the top frame.
|
||||
|
@ -21,7 +17,11 @@
|
|||
assert_equals(e.data, "can navigate");
|
||||
e.source.close();
|
||||
}));
|
||||
window.open("support/load-into-the-iframe.html");
|
||||
// Specifying both allow-top-navigation and
|
||||
// allow-top-navigation-by-user-activation is a document conformance
|
||||
// error: allow-top-navigation-by-user-activation will have no effect.
|
||||
let sandbox = "allow-top-navigation allow-top-navigation-by-user-activation allow-scripts";
|
||||
window.open("support/load-into-the-iframe.html?sandbox=" + sandbox);
|
||||
}, "Frames with `allow-top-navigation` should be able to navigate the top frame even when `allow-top-navigation-by-user-activation` is set.");
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -7,13 +7,18 @@
|
|||
<body>
|
||||
<iframe sandbox="allow-scripts"></iframe>
|
||||
<script>
|
||||
let frame = document.querySelector("iframe");
|
||||
let sandbox = new URL(location.href).searchParams.get("sandbox");
|
||||
if (sandbox) {
|
||||
frame.sandbox = sandbox;
|
||||
}
|
||||
// We're the popup (i.e. a top frame). Load into the iframe the page
|
||||
// trying to modifying the top frame and transmit the result to our
|
||||
// opener.
|
||||
onmessage = function(e) {
|
||||
opener.postMessage(e.data, "*")
|
||||
}
|
||||
document.querySelector("iframe").src = "iframe-that-performs-top-navigation-on-popup.html";
|
||||
frame.src = "iframe-that-performs-top-navigation-on-popup.html";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -757,6 +757,7 @@ TESTHARNESS-IN-OTHER-TYPE: html/semantics/interactive-elements/the-summary-eleme
|
|||
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: scroll-animations/null-scroll-source-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
|
||||
|
|
5
tests/wpt/web-platform-tests/manifest/META.yml
Normal file
5
tests/wpt/web-platform-tests/manifest/META.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
spec: https://w3c.github.io/manifest/
|
||||
suggested_reviewers:
|
||||
- marcoscaceres
|
||||
- mgiuca
|
||||
- kenchris
|
11
tests/wpt/web-platform-tests/manifest/link-rel-manifest.html
Normal file
11
tests/wpt/web-platform-tests/manifest/link-rel-manifest.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Test that "manifest" is a supported value for the `rel` of a `link`</title>
|
||||
<link rel="help" href="https://w3c.github.io/manifest">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
test(() => {
|
||||
const result = document.createElement("link").relList.supports("manifest")
|
||||
assert_true(result, "Expected true if manifest is supported as a link relationship");
|
||||
}, 'link element supports a rel value of "manifest".');
|
||||
</script>
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Parent is not isolated, child attempts to isolate but uses a bad header value, child is a subdomain of the parent</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<div id="log"></div>
|
||||
|
||||
<script type="module">
|
||||
import { insertIframe, sendWasmModule, setBothDocumentDomains } from "./resources/helpers.mjs";
|
||||
|
||||
for (const badValue of ["", "?0", "true", "\"?1\"", "1", "?2", "(?1)"]) {
|
||||
let frameWindow;
|
||||
promise_test(async () => {
|
||||
frameWindow = await insertIframe("{{hosts[][www]}}", badValue);
|
||||
}, `"${badValue}": frame insertion`);
|
||||
|
||||
// Since the header values are bad there should be no isolation
|
||||
|
||||
promise_test(async () => {
|
||||
const whatHappened = await sendWasmModule(frameWindow);
|
||||
|
||||
assert_equals(whatHappened, "WebAssembly.Module message received");
|
||||
}, `"${badValue}": message event must occur for`);
|
||||
|
||||
promise_test(async () => {
|
||||
await setBothDocumentDomains(frameWindow);
|
||||
|
||||
// Must not throw
|
||||
frameWindow.document;
|
||||
}, `"${badValue}": setting document.domain must give sync access`);
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Parent is not isolated, child is isolated using parameters on its structured header, child is a subdomain of the parent</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<div id="log"></div>
|
||||
|
||||
<script type="module">
|
||||
import { insertIframe, sendWasmModule, setBothDocumentDomains } from "./resources/helpers.mjs";
|
||||
|
||||
let frameWindow;
|
||||
promise_setup(async () => {
|
||||
frameWindow = await insertIframe("{{hosts[][www]}}", "?1;param1;param2=value2");
|
||||
});
|
||||
|
||||
// Since they're different-origin, the child's isolation request is respected,
|
||||
// so the parent ends up in the site-keyed agent cluster and the child in the
|
||||
// origin-keyed one.
|
||||
|
||||
promise_test(async () => {
|
||||
const whatHappened = await sendWasmModule(frameWindow);
|
||||
|
||||
assert_equals(whatHappened, "messageerror");
|
||||
}, "messageerror event must occur");
|
||||
|
||||
promise_test(async () => {
|
||||
await setBothDocumentDomains(frameWindow);
|
||||
|
||||
assert_throws_dom("SecurityError", DOMException, () => {
|
||||
frameWindow.document;
|
||||
});
|
||||
}, "setting document.domain should no-op instead of giving sync access");
|
||||
</script>
|
|
@ -0,0 +1,70 @@
|
|||
<html class="reftest-wait">
|
||||
<title>Scroll-linked animation with Animatable interface</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/scroll-animations/">
|
||||
<meta name="assert" content="ScrollTimeline should work with animatable
|
||||
interface">
|
||||
<link rel="match" href="animation-ref.html">
|
||||
|
||||
<script src="/web-animations/testcommon.js"></script>
|
||||
<script src="/common/reftest-wait.js"></script>
|
||||
|
||||
<style>
|
||||
#box {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
#covered {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
#scroller {
|
||||
overflow: auto;
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
will-change: transform;
|
||||
/* force compositing */
|
||||
}
|
||||
|
||||
#contents {
|
||||
height: 1000px;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="box"></div>
|
||||
<div id="covered"></div>
|
||||
<div id="scroller">
|
||||
<div id="contents"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const scroller = document.getElementById('scroller');
|
||||
const scroll_timeline = new ScrollTimeline({
|
||||
scrollSource: scroller,
|
||||
timeRange: 1000
|
||||
});
|
||||
const box = document.getElementById('box');
|
||||
const animation = box.animate(
|
||||
[
|
||||
{ transform: 'translateY(0)', opacity: 1 },
|
||||
{ transform: 'translateY(200px)', opacity: 0 }
|
||||
], {
|
||||
duration: 1000,
|
||||
timeline: scroll_timeline
|
||||
}
|
||||
);
|
||||
|
||||
animation.ready.then(() => {
|
||||
// Move the scroller to the halfway point.
|
||||
const maxScroll = scroller.scrollHeight - scroller.clientHeight;
|
||||
scroller.scrollTop = 0.5 * maxScroll;
|
||||
|
||||
waitForAnimationFrames(2).then(_ => {
|
||||
takeScreenshot();
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -0,0 +1,26 @@
|
|||
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1088319">
|
||||
<meta name="assert" content="Playing animation with null scroll source should not crash.">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<style>
|
||||
html {
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
body {
|
||||
overflow: scroll;
|
||||
}
|
||||
</style>
|
||||
<div id="box"></div>
|
||||
<script>
|
||||
test(() => {
|
||||
const effect = new KeyframeEffect(box, []);
|
||||
const timeline = new ScrollTimeline({
|
||||
timeRange: 1000
|
||||
});
|
||||
const animation = new Animation(effect, timeline);
|
||||
assert_equals(document.scrollingElement, null,
|
||||
"This test relies on scrolling element being nil");
|
||||
animation.play();
|
||||
}, "Playing animation with null scroll source should not crash");
|
||||
</script>
|
|
@ -75,4 +75,30 @@ promise_test(t => {
|
|||
});
|
||||
}, 'requests for OBJECT elements of an image should not be intercepted by service workers');
|
||||
|
||||
promise_test(t => {
|
||||
let frame;
|
||||
return with_iframe('resources/object-navigation-is-not-intercepted-iframe.html')
|
||||
.then(f => {
|
||||
frame = f;
|
||||
t.add_cleanup(() => { frame.remove(); });
|
||||
return frame.contentWindow.test_promise;
|
||||
})
|
||||
.then(result => {
|
||||
assert_equals(result, 'request for embedded content was not intercepted');
|
||||
});
|
||||
}, 'post-load navigation of OBJECT elements should not be intercepted by service workers');
|
||||
|
||||
|
||||
promise_test(t => {
|
||||
let frame;
|
||||
return with_iframe('resources/embed-navigation-is-not-intercepted-iframe.html')
|
||||
.then(f => {
|
||||
frame = f;
|
||||
t.add_cleanup(() => { frame.remove(); });
|
||||
return frame.contentWindow.test_promise;
|
||||
})
|
||||
.then(result => {
|
||||
assert_equals(result, 'request for embedded content was not intercepted');
|
||||
});
|
||||
}, 'post-load navigation of EMBED elements should not be intercepted by service workers');
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>iframe for embed-and-object-are-not-intercepted test</title>
|
||||
<body>
|
||||
<script>
|
||||
// The EMBED element will call this with the result about whether the EMBED
|
||||
// request was intercepted by the service worker.
|
||||
var report_result;
|
||||
|
||||
// Our parent (the root frame of the test) will examine this to get the result.
|
||||
var test_promise = new Promise(resolve => {
|
||||
report_result = resolve;
|
||||
});
|
||||
|
||||
let el = document.createElement('embed');
|
||||
el.src = "/common/blank.html";
|
||||
el.addEventListener('load', _ => {
|
||||
window[0].location = "/service-workers/service-worker/resources/embedded-content-from-server.html";
|
||||
}, { once: true });
|
||||
document.body.appendChild(el);
|
||||
</script>
|
||||
|
||||
</body>
|
|
@ -0,0 +1,24 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>iframe for embed-and-object-are-not-intercepted test</title>
|
||||
<body>
|
||||
<script>
|
||||
// The OBJECT element will call this with the result about whether the OBJECT
|
||||
// request was intercepted by the service worker.
|
||||
var report_result;
|
||||
|
||||
// Our parent (the root frame of the test) will examine this to get the result.
|
||||
var test_promise = new Promise(resolve => {
|
||||
report_result = resolve;
|
||||
});
|
||||
|
||||
let el = document.createElement('object');
|
||||
el.data = "/common/blank.html";
|
||||
el.addEventListener('load', _ => {
|
||||
window[0].location = "/service-workers/service-worker/resources/embedded-content-from-server.html";
|
||||
}, { once: true });
|
||||
document.body.appendChild(el);
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
|
@ -4,15 +4,13 @@ images must be updated as well. Doing this requires you be part of the
|
|||
'webplatformtests' organization on Docker Hub; ping @Hexcles or @stephenmcgruer
|
||||
if you are not a member.
|
||||
|
||||
In this directory, run the following, where `<tag>` is of the form
|
||||
`webplatformtests/wpt:{current-version + 0.01}`:
|
||||
The tag for a new docker image is of the form
|
||||
`webplatformtests/wpt:{current-version + 0.01}`
|
||||
|
||||
```sh
|
||||
# --pull forces Docker to get the newest base image.
|
||||
docker build --pull -t <tag> .
|
||||
docker push <tag>
|
||||
```
|
||||
To update the docker image:
|
||||
|
||||
Then update the following Taskcluster configurations to use the new image:
|
||||
* `.taskcluster.yml` (the decision task)
|
||||
* `tools/ci/tc/tasks/test.yml` (all the other tasks)
|
||||
* Update the following Taskcluster configurations to use the new image:
|
||||
- `.taskcluster.yml` (the decision task)
|
||||
- `tools/ci/tc/tasks/test.yml` (all the other tasks)
|
||||
|
||||
* Run `wpt docker-push`
|
||||
|
|
|
@ -1,6 +1,26 @@
|
|||
{
|
||||
"docker-run": {"path": "frontend.py", "script": "run", "parser": "parser_run", "help": "Run wpt docker image",
|
||||
"virtualenv": false},
|
||||
"docker-build": {"path": "frontend.py", "script": "build", "help": "Build wpt docker image",
|
||||
"virtualenv": false}
|
||||
"docker-run": {
|
||||
"path": "frontend.py",
|
||||
"script": "run",
|
||||
"parser": "parser_run",
|
||||
"help": "Run wpt docker image",
|
||||
"virtualenv": false
|
||||
},
|
||||
"docker-build": {
|
||||
"path": "frontend.py",
|
||||
"script": "build",
|
||||
"help": "Build wpt docker image",
|
||||
"virtualenv": false
|
||||
},
|
||||
"docker-push": {
|
||||
"path": "frontend.py",
|
||||
"script": "push",
|
||||
"parser": "parser_push",
|
||||
"help": "Build and push wpt docker image",
|
||||
"virtualenv": true,
|
||||
"install": [
|
||||
"requests",
|
||||
"pyyaml"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +1,111 @@
|
|||
import argparse
|
||||
import subprocess
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from six import iteritems
|
||||
|
||||
here = os.path.abspath(os.path.dirname(__file__))
|
||||
wpt_root = os.path.abspath(os.path.join(here, os.pardir, os.pardir))
|
||||
|
||||
def build(*args, **kwargs):
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
def build(tag="wpt:local", *args, **kwargs):
|
||||
subprocess.check_call(["docker",
|
||||
"build",
|
||||
"--pull",
|
||||
"--tag", "wpt:local",
|
||||
"--tag", tag,
|
||||
here])
|
||||
|
||||
|
||||
def parser_push():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--tag", action="store",
|
||||
help="Tag to use (default is taken from .taskcluster.yml)")
|
||||
parser.add_argument("--force", action="store_true",
|
||||
help="Ignore warnings and push anyway")
|
||||
return parser
|
||||
|
||||
|
||||
def walk_yaml(root, target):
|
||||
rv = []
|
||||
if isinstance(root, list):
|
||||
for value in root:
|
||||
if isinstance(value, (dict, list)):
|
||||
rv.extend(walk_yaml(value, target))
|
||||
elif isinstance(root, dict):
|
||||
for key, value in iteritems(root):
|
||||
if isinstance(value, (dict, list)):
|
||||
rv.extend(walk_yaml(value, target))
|
||||
elif key == target:
|
||||
rv.append(value)
|
||||
return rv
|
||||
|
||||
|
||||
def read_image_name():
|
||||
import yaml
|
||||
with open(os.path.join(wpt_root, ".taskcluster.yml")) as f:
|
||||
taskcluster_data = yaml.safe_load(f)
|
||||
taskcluster_values = set(walk_yaml(taskcluster_data, "image"))
|
||||
with open(os.path.join(wpt_root, "tools", "ci", "tc", "tasks", "test.yml")) as f:
|
||||
test_data = yaml.safe_load(f)
|
||||
tests_value = test_data["components"]["wpt-base"]["image"]
|
||||
return taskcluster_values, tests_value
|
||||
|
||||
|
||||
def lookup_tag(tag):
|
||||
import requests
|
||||
org, repo_version = tag.split("/", 1)
|
||||
repo, version = repo_version.rsplit(":", 1)
|
||||
resp = requests.get("https://hub.docker.com/v2/repositories/%s/%s/tags/%s" %
|
||||
(org, repo, version))
|
||||
if resp.status_code == 200:
|
||||
return True
|
||||
if resp.status_code == 404:
|
||||
return False
|
||||
resp.raise_for_status()
|
||||
|
||||
|
||||
def push(venv, tag=None, force=False, *args, **kwargs):
|
||||
taskcluster_tags, tests_tag = read_image_name()
|
||||
|
||||
taskcluster_tag = taskcluster_tags.pop()
|
||||
|
||||
error_log = logger.warning if force else logger.error
|
||||
if len(taskcluster_tags) != 0 or tests_tag != taskcluster_tag:
|
||||
error_log("Image names in .taskcluster.yml and tools/ci/tc/tasks/test.yml "
|
||||
"don't match.")
|
||||
if not force:
|
||||
sys.exit(1)
|
||||
if tag is not None and tag != taskcluster_tag:
|
||||
error_log("Supplied tag doesn't match .taskcluster.yml or "
|
||||
"tools/ci/tc/tasks/test.yml; remember to update before pushing")
|
||||
if not force:
|
||||
sys.exit(1)
|
||||
if tag is None:
|
||||
logger.info("Using tag %s from .taskcluster.yml" % taskcluster_tag)
|
||||
tag = taskcluster_tag
|
||||
|
||||
tag_re = re.compile(r"webplatformtests/wpt:\d\.\d+")
|
||||
if not tag_re.match(tag):
|
||||
error_log("Tag doesn't match expected format webplatformtests/wpt:0.x")
|
||||
if not force:
|
||||
sys.exit(1)
|
||||
|
||||
if lookup_tag(tag):
|
||||
# No override for this case
|
||||
logger.critical("Tag %s already exists" % tag)
|
||||
sys.exit(1)
|
||||
|
||||
build(tag)
|
||||
subprocess.check_call(["docker",
|
||||
"push",
|
||||
tag])
|
||||
|
||||
|
||||
def parser_run():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--rebuild", action="store_true", help="Force rebuild of image")
|
||||
|
|
|
@ -11,20 +11,23 @@ authors can implement custom handlers by putting python scripts in
|
|||
## Custom Handlers
|
||||
The QuicTransportServer calls functions defined in each handler script.
|
||||
|
||||
- handle_client_indication is called during the client indication process.
|
||||
- `handle_client_indication` is called during the client indication process.
|
||||
This function is called with three arguments:
|
||||
|
||||
- connection: aioquic.asyncio.QuicConnectionProtocol
|
||||
- origin: str The origin of the initiator.
|
||||
- query: Dict[str, str] The dictionary of query parameters of the URL of the
|
||||
connection.
|
||||
- `connection`: [`aioquic.asyncio.QuicConnectionProtocol`](protocol)
|
||||
- `origin`: `str` The origin of the initiator.
|
||||
- `query`: `Dict[str, str]` The dictionary of query parameters of the URL of the
|
||||
connection.
|
||||
|
||||
A handler can abort the client indication process either by raising an
|
||||
exception or closing the connection.
|
||||
|
||||
- handle_event is called when a QuicEvent arrives.
|
||||
- connection: aioquic.asyncio.QuicConnectionProtocol
|
||||
- event: aioquic.quic.events.QuicEvent
|
||||
- `handle_event` is called when a [`QuicEvent`](event) arrives.
|
||||
- `connection`: [`aioquic.asyncio.QuicConnectionProtocol`](protocol)
|
||||
- `event`: [`aioquic.quic.events.QuicEvent`](event)
|
||||
|
||||
This function is not called until the client indication process finishes
|
||||
successfully.
|
||||
|
||||
[protocol]: https://aioquic.readthedocs.io/en/latest/asyncio.html#aioquic.asyncio.QuicConnectionProtocol
|
||||
[event]: https://aioquic.readthedocs.io/en/latest/quic.html#module-aioquic.quic.events
|
||||
|
|
|
@ -156,11 +156,10 @@ class BrowserSetup(object):
|
|||
name = None
|
||||
browser_cls = None
|
||||
|
||||
def __init__(self, venv, prompt=True, sub_product=None):
|
||||
def __init__(self, venv, prompt=True):
|
||||
self.browser = self.browser_cls(logger)
|
||||
self.venv = venv
|
||||
self.prompt = prompt
|
||||
self.sub_product = sub_product
|
||||
|
||||
def prompt_install(self, component):
|
||||
if not self.prompt:
|
||||
|
@ -588,8 +587,10 @@ class Sauce(BrowserSetup):
|
|||
raise NotImplementedError
|
||||
|
||||
def setup_kwargs(self, kwargs):
|
||||
kwargs.set_if_none("sauce_browser", self.sub_product[0])
|
||||
kwargs.set_if_none("sauce_version", self.sub_product[1])
|
||||
if kwargs["sauce_browser"] is None:
|
||||
raise WptrunError("Missing required argument --sauce-browser")
|
||||
if kwargs["sauce_version"] is None:
|
||||
raise WptrunError("Missing required argument --sauce-version")
|
||||
kwargs["test_types"] = ["testharness", "reftest"]
|
||||
|
||||
|
||||
|
@ -719,9 +720,7 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs):
|
|||
|
||||
kwargs = utils.Kwargs(iteritems(kwargs))
|
||||
|
||||
product_parts = kwargs["product"].split(":")
|
||||
kwargs["product"] = product_parts[0].replace("-", "_")
|
||||
sub_product = product_parts[1:]
|
||||
kwargs["product"] = kwargs["product"].replace("-", "_")
|
||||
|
||||
check_environ(kwargs["product"])
|
||||
args_general(kwargs)
|
||||
|
@ -729,7 +728,7 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs):
|
|||
if kwargs["product"] not in product_setup:
|
||||
raise WptrunError("Unsupported product %s" % kwargs["product"])
|
||||
|
||||
setup_cls = product_setup[kwargs["product"]](venv, prompt, sub_product)
|
||||
setup_cls = product_setup[kwargs["product"]](venv, prompt)
|
||||
setup_cls.install_requirements()
|
||||
|
||||
affected_revish = kwargs.pop("affected", None)
|
||||
|
|
|
@ -69,5 +69,6 @@ def test_setup_wptrunner(venv, logger, product):
|
|||
kwargs["binary"] = sys.argv[0]
|
||||
kwargs["webdriver_binary"] = sys.argv[0]
|
||||
if kwargs["product"] == "sauce":
|
||||
kwargs["product"] = "sauce:firefox:63"
|
||||
kwargs["sauce_browser"] = "firefox"
|
||||
kwargs["sauce_version"] = "63"
|
||||
run.setup_wptrunner(venv, **kwargs)
|
||||
|
|
|
@ -202,6 +202,18 @@ async_test(t => {
|
|||
}, 'Element.animate() correctly sets the Animation\'s timeline when ' +
|
||||
'triggered on an element in a different document');
|
||||
|
||||
for (const subtest of gAnimationTimelineTests) {
|
||||
test(t => {
|
||||
const anim = createDiv(t).animate(null, { timeline: subtest.timeline });
|
||||
assert_not_equals(anim, null,
|
||||
'An animation sohuld be created');
|
||||
assert_equals(anim.timeline, subtest.expectedTimeline,
|
||||
'Animation timeline should be '+
|
||||
subtest.expectedTimelineDescription);
|
||||
}, 'Element.animate() correctly sets the Animation\'s timeline '
|
||||
+ subtest.description + ' in KeyframeAnimationOptions.');
|
||||
}
|
||||
|
||||
test(t => {
|
||||
const anim = createDiv(t).animate(null, 2000);
|
||||
assert_equals(anim.playState, 'running');
|
||||
|
|
|
@ -796,3 +796,32 @@ const gInvalidKeyframeEffectOptionTests = [
|
|||
{ desc: 'a variable easing', input: { easing: 'var(--x)' } },
|
||||
{ desc: 'a multi-value easing', input: { easing: 'ease-in-out, ease-out' } },
|
||||
];
|
||||
|
||||
// There is currently only ScrollTimeline that can be constructed and used here
|
||||
// beyond document timeline. Given that ScrollTimeline is not stable as of yet
|
||||
// it's tested in scroll-animations/animation-with-animatable-interface.html.
|
||||
const gAnimationTimelineTests = [
|
||||
{
|
||||
expectedTimeline: document.timeline,
|
||||
expectedTimelineDescription: 'document.timeline',
|
||||
description: 'with no timeline parameter'
|
||||
},
|
||||
{
|
||||
timeline: undefined,
|
||||
expectedTimeline: document.timeline,
|
||||
expectedTimelineDescription: 'document.timeline',
|
||||
description: 'with undefined timeline'
|
||||
},
|
||||
{
|
||||
timeline: null,
|
||||
expectedTimeline: null,
|
||||
expectedTimelineDescription: 'null',
|
||||
description: 'with null timeline'
|
||||
},
|
||||
{
|
||||
timeline: document.timeline,
|
||||
expectedTimeline: document.timeline,
|
||||
expectedTimelineDescription: 'document.timeline',
|
||||
description: 'with DocumentTimeline'
|
||||
},
|
||||
];
|
Loading…
Add table
Add a link
Reference in a new issue