mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Auto merge of #28138 - servo-wpt-sync:wpt_update_02-02-2021, r=jdm
Sync WPT with upstream (02-02-2021) Automated downstream sync of changes from upstream as of 02-02-2021. [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
6f93950bf2
85 changed files with 977 additions and 662 deletions
|
@ -1,8 +0,0 @@
|
|||
[url-charset.window.html]
|
||||
expected: TIMEOUT
|
||||
[Blob charset should override any auto-detected charset.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Blob charset should override <meta charset>.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -312,18 +312,27 @@
|
|||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" 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 */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
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 text/javascript]
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
[status-code.window.html]
|
||||
[HTTP/1.1 999 DOES IT MATTER ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 077 77 ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 200 ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 1 OK ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 099 HELLO ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 99 NOT OK ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 0 OK ]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_3.html]
|
||||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.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,19 +1,10 @@
|
|||
[select-event.html]
|
||||
[input type search: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: select() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -26,36 +17,57 @@
|
|||
[input type password: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[module-delayed.html]
|
||||
[async document.write in a module]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[xhr.http.html]
|
||||
expected: CRASH
|
|
@ -1,4 +1,4 @@
|
|||
[idlharness.html]
|
||||
[idlharness.window.html]
|
||||
[Navigator interface: navigator must inherit property "webdriver" with the proper type]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
[url-charset.window.html]
|
||||
expected: TIMEOUT
|
||||
[Blob charset should override any auto-detected charset.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Blob charset should override <meta charset>.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -149190,6 +149190,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"table-as-item-percent-width-cell-001.html": [
|
||||
"b578b233405fdc164be5c26456f8bc1d558cf85c",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-flexbox/table-as-item-percent-width-cell-001-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"table-as-item-specified-width.html": [
|
||||
"a4b370eb254dd84eaa90fcc4a658d101b681655c",
|
||||
[
|
||||
|
@ -166249,6 +166262,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"multicol-breaking-006.html": [
|
||||
"7efeee80251f6d912ff8d6ef1111e2fd6cf5b8a6",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-multicol/multicol-breaking-006-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"multicol-breaking-nobackground-000.html": [
|
||||
"768ec63298f03eb28a80a4e33f140314168b010d",
|
||||
[
|
||||
|
@ -177144,6 +177170,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"transparent-on-root.html": [
|
||||
"fcab71127d3cd8b38c0843cedff1f10aa59bb7bf",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/css-scrollbars/transparent-on-root-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"viewport-scrollbar-body.html": [
|
||||
"a1b3aee871a918dc4e3f92e669d6631c0944cd18",
|
||||
[
|
||||
|
@ -259842,7 +259881,7 @@
|
|||
},
|
||||
"support": {
|
||||
".azure-pipelines.yml": [
|
||||
"1c9883ccdec0532499b8df805527ea8e8c37c32f",
|
||||
"337d7e326ac920d67117924f5772e40b735c0248",
|
||||
[]
|
||||
],
|
||||
".codecov.yml": [
|
||||
|
@ -307371,6 +307410,10 @@
|
|||
[]
|
||||
]
|
||||
},
|
||||
"table-as-item-percent-width-cell-001-ref.html": [
|
||||
"2f40b6c49fdcee593a160c82c381d4c14f377a38",
|
||||
[]
|
||||
],
|
||||
"table-item-flex-percentage-width-ref.html": [
|
||||
"e598475fddf54274f93609de94b0f950618bc8e2",
|
||||
[]
|
||||
|
@ -317095,6 +317138,10 @@
|
|||
"a22fda57c0b2759cce0e1e6ce72de7c07c22ed23",
|
||||
[]
|
||||
],
|
||||
"multicol-breaking-006-ref.html": [
|
||||
"06e92eb8395b77ef33b5754a6743ec05c0159682",
|
||||
[]
|
||||
],
|
||||
"multicol-breaking-nobackground-000-ref.html": [
|
||||
"7a99354061cfeb982fffb921c850484dd02eac15",
|
||||
[]
|
||||
|
@ -319629,6 +319676,10 @@
|
|||
"9f505dd7f1d121c0bd0af0131b51f536225326b1",
|
||||
[]
|
||||
],
|
||||
"transparent-on-root-ref.html": [
|
||||
"a5b2de4f00f3abd19c74b08b80a027d09a7abcca",
|
||||
[]
|
||||
],
|
||||
"viewport-scrollbar-body-ref.html": [
|
||||
"4e07903e2ca1e5d0378845c8cc4754dc82b1ebf8",
|
||||
[]
|
||||
|
@ -334662,7 +334713,7 @@
|
|||
[]
|
||||
],
|
||||
"from-local-system.md": [
|
||||
"f5cfa36915d7892d827d8f5aa74649e0e2c0c062",
|
||||
"53f6a1fb98d58f900e34895a9461332512e8c06c",
|
||||
[]
|
||||
],
|
||||
"from-web.md": [
|
||||
|
@ -334724,7 +334775,7 @@
|
|||
[]
|
||||
],
|
||||
"h2tests.md": [
|
||||
"c13295e1fe668af1ed9561463b2ec18719f8deb6",
|
||||
"9a429373f567253b174ed6f7be85290d41b20dc3",
|
||||
[]
|
||||
],
|
||||
"idlharness.md": [
|
||||
|
@ -334736,7 +334787,7 @@
|
|||
[]
|
||||
],
|
||||
"lint-tool.md": [
|
||||
"ba11169e020c8c74a2a4dab04c316d3e391321a1",
|
||||
"95f8b574158e77f195b11060b19e67328f0029d2",
|
||||
[]
|
||||
],
|
||||
"making-a-testing-plan.md": [
|
||||
|
@ -334753,7 +334804,7 @@
|
|||
],
|
||||
"python-handlers": {
|
||||
"index.md": [
|
||||
"e4d396f90a796492323d8c1c878905267a62c617",
|
||||
"96f7edb61601b1af1795d62cefd3bd5bc09c817b",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -334770,7 +334821,7 @@
|
|||
[]
|
||||
],
|
||||
"server-features.md": [
|
||||
"a1ba09132c5a40591321b0532dab1c3008987c2b",
|
||||
"fe3e84836c21e31583ed1c5d244f8dc85a3cf7eb",
|
||||
[]
|
||||
],
|
||||
"server-pipes.md": [
|
||||
|
@ -338191,6 +338242,10 @@
|
|||
"script-with-0x00-in-header.py": [
|
||||
"39f58d8270e7671bf74e40ac84e05a7558df4f68",
|
||||
[]
|
||||
],
|
||||
"status-code.py": [
|
||||
"5421893b26732e3c479731c322e4022980235d03",
|
||||
[]
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -356987,7 +357042,7 @@
|
|||
[]
|
||||
],
|
||||
"link-header-preload.html.headers": [
|
||||
"293598ee66982baa00b92c9e64df6347190ab057",
|
||||
"83758fb9cdc128d291b96c2a9a7e8abb3958dc64",
|
||||
[]
|
||||
],
|
||||
"preload-in-data-doc-ref.html": [
|
||||
|
@ -359118,7 +359173,7 @@
|
|||
[]
|
||||
],
|
||||
"generic_sensor_mocks.js": [
|
||||
"85891c6ef129d31794404476d25878c7eb8c5bd7",
|
||||
"56438824518225a9b1e5c89f1f6b73aa7f4e57c0",
|
||||
[]
|
||||
],
|
||||
"generic_sensor_mocks.js.headers": [
|
||||
|
@ -359211,7 +359266,7 @@
|
|||
]
|
||||
},
|
||||
"idlharness.js": [
|
||||
"5a97b273f2bed196d6ddd85c5596decff1bf87ae",
|
||||
"76131e7c9602b94f9543d1f49658b304535691d3",
|
||||
[]
|
||||
],
|
||||
"idlharness.js.headers": [
|
||||
|
@ -364071,11 +364126,11 @@
|
|||
[]
|
||||
],
|
||||
"update_hosts.yml": [
|
||||
"64aff7cf46a83e0ad0045065b5ec2e78deb6506d",
|
||||
"63c7e45811297a2dd5342b3b3ab9093acab6f5cd",
|
||||
[]
|
||||
],
|
||||
"update_manifest.yml": [
|
||||
"e8f28217f1eaa9af3ec67e2b1a64365c8aa87a81",
|
||||
"453ac2ac3c05cf873bcf66d1be990324bd20036e",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -364166,7 +364221,7 @@
|
|||
],
|
||||
"tasks": {
|
||||
"test.yml": [
|
||||
"b3a396068933661849e628ceeebb10f6a90be538",
|
||||
"95212e97bf7961804ce01281c3023badcc7cd330",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -364198,7 +364253,7 @@
|
|||
[]
|
||||
],
|
||||
"test_valid.py": [
|
||||
"30fdfdc13d88ee05aa015fb7529f4a3e67aaedaf",
|
||||
"9891e1cfc5d98d9e36c807f9b06df581bfbc7072",
|
||||
[]
|
||||
]
|
||||
}
|
||||
|
@ -364617,7 +364672,7 @@
|
|||
[]
|
||||
],
|
||||
"py3-flake8.ini": [
|
||||
"14cc1dc6f6a7afb41f12c41fa8293337d19a023b",
|
||||
"f8d4776ef66b01fac0bfa2d27320b1ea3f8a497f",
|
||||
[]
|
||||
],
|
||||
"pytest.ini": [
|
||||
|
@ -371804,7 +371859,7 @@
|
|||
[]
|
||||
],
|
||||
"install.py": [
|
||||
"638065a53014f3d463269793aa08f3acf30654ea",
|
||||
"8ba5c7a85916fcce1a1452b9ef002dca47a34bef",
|
||||
[]
|
||||
],
|
||||
"mach-emulator.manifest": [
|
||||
|
@ -371828,7 +371883,7 @@
|
|||
[]
|
||||
],
|
||||
"run.py": [
|
||||
"3d380eab5cbdb00ffc612dedc595310f7d0e60a1",
|
||||
"68f8e32ca1812974cd9eb42f48e6c34a9ad5b2b5",
|
||||
[]
|
||||
],
|
||||
"testfiles.py": [
|
||||
|
@ -372138,11 +372193,11 @@
|
|||
[]
|
||||
],
|
||||
"android_weblayer.py": [
|
||||
"f68312f231bba4f08aba7defbc272a86e98af244",
|
||||
"972e5517b1cff6d1635b35bef512f3589e22933e",
|
||||
[]
|
||||
],
|
||||
"android_webview.py": [
|
||||
"3cde248b4465cd10a86a813de8551808c42dbf18",
|
||||
"918a881b908ddcdaec1954110cdb99e71845f362",
|
||||
[]
|
||||
],
|
||||
"base.py": [
|
||||
|
@ -372150,15 +372205,15 @@
|
|||
[]
|
||||
],
|
||||
"chrome.py": [
|
||||
"d3e27a9c5f65f7aa754263cb57846285d2857540",
|
||||
"04ac3726fba16d3ea315cbf24310cb69c5db8a61",
|
||||
[]
|
||||
],
|
||||
"chrome_android.py": [
|
||||
"d7e3e21012169fdf12e47d3bc87552f46c779cf9",
|
||||
"178183b4028393703c0e691f875531423cf86c60",
|
||||
[]
|
||||
],
|
||||
"chrome_ios.py": [
|
||||
"ecdbc3a17623907dc9bd99505d1e5ee0bc747c7b",
|
||||
"f349b19419cd67a3551ba1796e1ae02d2776e46d",
|
||||
[]
|
||||
],
|
||||
"chrome_spki_certs.py": [
|
||||
|
@ -372166,7 +372221,7 @@
|
|||
[]
|
||||
],
|
||||
"edge.py": [
|
||||
"b908684bbb3e7eae9982173ed26a9a9e39b6b437",
|
||||
"db4795ce5d4a773546b03782885d24a82337b031",
|
||||
[]
|
||||
],
|
||||
"edge_webdriver.py": [
|
||||
|
@ -372174,11 +372229,11 @@
|
|||
[]
|
||||
],
|
||||
"edgechromium.py": [
|
||||
"1d45983a11ef0d3fdcfabd6e81fe2974ab2d68eb",
|
||||
"c2275bd168797cc2486c138a8450a598c29891c9",
|
||||
[]
|
||||
],
|
||||
"epiphany.py": [
|
||||
"a3384436a1d643c6576ebb731db5c458f8ad2687",
|
||||
"f378170f33d33cc0839bf599fc1ac33dff7f0fe2",
|
||||
[]
|
||||
],
|
||||
"firefox.py": [
|
||||
|
@ -372190,19 +372245,19 @@
|
|||
[]
|
||||
],
|
||||
"ie.py": [
|
||||
"3a86c1b6ccb5aabfe210158f6be613f690543375",
|
||||
"5fce29a477070479a82126d318a93763d12b1c9b",
|
||||
[]
|
||||
],
|
||||
"opera.py": [
|
||||
"a34f41955383c08e98c4d38d7804231c17e9297a",
|
||||
"80e5a314c83b9866b350ff75375a48d153061624",
|
||||
[]
|
||||
],
|
||||
"safari.py": [
|
||||
"312d4db9c6382f7aff5cd75772f0edf73e538565",
|
||||
"0f62639c6350527fbfe69b65fb948c1d1e398844",
|
||||
[]
|
||||
],
|
||||
"sauce.py": [
|
||||
"3497c5c277288e51f6677000e57057ebcd99a210",
|
||||
"483bf206172a6c146a6b299742fb1ab85316b4d0",
|
||||
[]
|
||||
],
|
||||
"sauce_setup": {
|
||||
|
@ -372216,19 +372271,19 @@
|
|||
]
|
||||
},
|
||||
"servo.py": [
|
||||
"a65ed5ead4e55c45cfd7aa7921f0717216ce6a45",
|
||||
"4f934aedfcd64153e77bb33efd9c6387832cfcec",
|
||||
[]
|
||||
],
|
||||
"servodriver.py": [
|
||||
"ed85cbf3b9bd04ea192641b480ace44dc6d433bf",
|
||||
"83b9423ba71a2d434b33156d624f64ffc6cc8515",
|
||||
[]
|
||||
],
|
||||
"webkit.py": [
|
||||
"590e472aca961b865bf0dbc836c942f62b506ae8",
|
||||
"f83de2996a98d75efcbaa66480b7cd210869a886",
|
||||
[]
|
||||
],
|
||||
"webkitgtk_minibrowser.py": [
|
||||
"5b7a360fb608352e26971570af06c5bb8466255b",
|
||||
"6c1001e2d70dcf55088b341978c8b30658f52c41",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -372362,7 +372417,7 @@
|
|||
[]
|
||||
],
|
||||
"chromium.py": [
|
||||
"2ff2bd1e083a3439d1289c9f540a8bb2b1e20dbc",
|
||||
"b6cbb203a31ade463a809542c158b6ce859bcf5c",
|
||||
[]
|
||||
],
|
||||
"tests": {
|
||||
|
@ -372449,7 +372504,7 @@
|
|||
[]
|
||||
],
|
||||
"testrunner.py": [
|
||||
"8dd93418dd8f37fc220306f7a4e6d85e7fb9b55a",
|
||||
"0c658a158a3e4f170fe33a68702c2288801b2586",
|
||||
[]
|
||||
],
|
||||
"tests": {
|
||||
|
@ -396874,15 +396929,6 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"async-idlharness.https.html": [
|
||||
"a1a51c98690f1c83679c3ae71f3bafe99824f025",
|
||||
[
|
||||
null,
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"async-navigator-clipboard-basics.https.html": [
|
||||
"61808a52ceb9b6272a6ce495d328a8feaaf9411a",
|
||||
[
|
||||
|
@ -397137,6 +397183,29 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
"idlharness.https.window.js": [
|
||||
"c22ee245442570af52087f22335b83d986ecb358",
|
||||
[
|
||||
"clipboard-apis/idlharness.https.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"timeout",
|
||||
"long"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
],
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"permissions": {
|
||||
"readText-denied.https.html": [
|
||||
"935f520e7de2dd15e0019c798dd0966c454235cd",
|
||||
|
@ -402899,7 +402968,7 @@
|
|||
]
|
||||
},
|
||||
"cookie-enabled-noncookie-frame.html": [
|
||||
"539d715ebd5344de4cf02b6485462b31bc167525",
|
||||
"2dbbc0bbdc5fbd4db19405a686c0b736aba08793",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -457097,6 +457166,13 @@
|
|||
"fetch/h1-parsing/resources-with-0x00-in-header.window.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"status-code.window.js": [
|
||||
"5776cf4050f01e838c42f7e845a2e033e2604f41",
|
||||
[
|
||||
"fetch/h1-parsing/status-code.window.html",
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"http-cache": {
|
||||
|
@ -502972,6 +503048,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"transform-above-filter-dynamic.html": [
|
||||
"1d7ed51a91652790d6f980af362a15fa546cc1de",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"transform-above-perspective-dynamic.html": [
|
||||
"fea65ca56ad6bbca11c5eece6fa7a059668ecb31",
|
||||
[
|
||||
|
@ -503088,6 +503171,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"preloader-link-media.tentative.html": [
|
||||
"0e58d8b6c890edfc494eca3775501f425a153c14",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"preloader-template.tentative.html": [
|
||||
"e816309184844a6d46a20e1152c9efca80fe6f0b",
|
||||
[
|
||||
|
@ -513992,7 +514082,7 @@
|
|||
]
|
||||
],
|
||||
"pointerevent_capture_suppressing_mouse.html": [
|
||||
"080ca1520d91ecd88264f0c501998cefc410edaf",
|
||||
"b621dcb49a9e60b27c5ab599790136c06a4ef922",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -515294,7 +515384,7 @@
|
|||
]
|
||||
],
|
||||
"link-header-preload.html": [
|
||||
"b5932a1b0aa174f1fe8e28402595e681f39732be",
|
||||
"8ad528d0e7c46cc7613461665f0eafed472f54c9",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
|
@ -554199,11 +554289,22 @@
|
|||
},
|
||||
"webdriver": {
|
||||
"tests": {
|
||||
"idlharness.html": [
|
||||
"d049d835f2fc60df7296da08a013793ae7e398ca",
|
||||
"idlharness.window.js": [
|
||||
"e92e151d89836e06966339daabc6b1be50ded744",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
"webdriver/tests/idlharness.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
|
@ -565838,11 +565939,37 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"idlharness.worker.js": [
|
||||
"827dd02c4c53292b534677454c11264f415678a5",
|
||||
"idlharness.https.any.js": [
|
||||
"2900b3812496ca430b15b327165ad4884e1f90e4",
|
||||
[
|
||||
"worklets/idlharness.worker.html",
|
||||
{}
|
||||
"worklets/idlharness.https.any.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
"worklets/idlharness.https.any.worker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/WebIDLParser.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/idlharness.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"layout-worklet-credentials.https.html": [
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -312,18 +312,27 @@
|
|||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" 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 */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
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 text/javascript]
|
||||
[separate text/javascript error]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
[status-code.window.html]
|
||||
[HTTP/1.1 999 DOES IT MATTER ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 077 77 ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 200 ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 1 OK ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 099 HELLO ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 99 NOT OK ]
|
||||
expected: FAIL
|
||||
|
||||
[HTTP/1.1 0 OK ]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[traverse_the_history_3.html]
|
||||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[cross-origin-objects-on-new-window.html]
|
||||
expected: TIMEOUT
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.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,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,19 +1,10 @@
|
|||
[select-event.html]
|
||||
[input type search: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: select() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -26,36 +17,57 @@
|
|||
[input type password: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionEnd a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type url: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: setSelectionRange out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: setSelectionRange() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type text: selectionEnd out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type password: setRangeText() a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type search: selectionDirection a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[textarea: selectionStart out of range a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
[input type tel: selectionStart a second time (must not fire select)]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[module-delayed.html]
|
||||
[async document.write in a module]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[module-static-import-delayed.html]
|
||||
[document.write in an imported module]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[idlharness.window.html]
|
||||
[Navigator interface: navigator must inherit property "webdriver" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[Navigator interface: attribute webdriver]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -117,24 +117,6 @@ jobs:
|
|||
displayName: 'Run tests (Safari Technology Preview)'
|
||||
- template: tools/ci/azure/publish_logs.yml
|
||||
|
||||
- job: tools_unittest_mac
|
||||
displayName: 'tools/ unittests: macOS'
|
||||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.tools_unittest']
|
||||
pool:
|
||||
vmImage: 'macOS-10.15'
|
||||
variables:
|
||||
HYPOTHESIS_PROFILE: ci
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '2.7.x'
|
||||
- template: tools/ci/azure/checkout.yml
|
||||
- template: tools/ci/azure/tox_pytest.yml
|
||||
parameters:
|
||||
directory: tools/
|
||||
toxenv: py27
|
||||
|
||||
- job: tools_unittest_mac_py36
|
||||
displayName: 'tools/ unittests: macOS + Python 3.6'
|
||||
dependsOn: decision
|
||||
|
@ -167,24 +149,6 @@ jobs:
|
|||
directory: tools/
|
||||
toxenv: py38
|
||||
|
||||
- job: wptrunner_unittest_mac
|
||||
displayName: 'tools/wptrunner/ unittests: macOS'
|
||||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
|
||||
pool:
|
||||
vmImage: 'macOS-10.15'
|
||||
variables:
|
||||
HYPOTHESIS_PROFILE: ci
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '2.7.x'
|
||||
- template: tools/ci/azure/checkout.yml
|
||||
- template: tools/ci/azure/tox_pytest.yml
|
||||
parameters:
|
||||
directory: tools/wptrunner/
|
||||
toxenv: py27
|
||||
|
||||
- job: wptrunner_unittest_mac_py36
|
||||
displayName: 'tools/wptrunner/ unittests: macOS + Python 3.6'
|
||||
dependsOn: decision
|
||||
|
@ -217,32 +181,6 @@ jobs:
|
|||
directory: tools/wptrunner/
|
||||
toxenv: py38
|
||||
|
||||
- job: wpt_integration_mac
|
||||
displayName: 'tools/wpt/ tests: macOS'
|
||||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.wpt_integration']
|
||||
pool:
|
||||
vmImage: 'macOS-10.15'
|
||||
variables:
|
||||
HYPOTHESIS_PROFILE: ci
|
||||
steps:
|
||||
# full checkout required
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '2.7.x'
|
||||
- template: tools/ci/azure/install_chrome.yml
|
||||
- template: tools/ci/azure/install_firefox.yml
|
||||
- template: tools/ci/azure/update_hosts.yml
|
||||
parameters:
|
||||
pyflag: --py2
|
||||
- template: tools/ci/azure/update_manifest.yml
|
||||
parameters:
|
||||
pyflag: --py2
|
||||
- template: tools/ci/azure/tox_pytest.yml
|
||||
parameters:
|
||||
directory: tools/wpt/
|
||||
toxenv: py27
|
||||
|
||||
- job: wpt_integration_mac_py36
|
||||
displayName: 'tools/wpt/ tests: macOS + Python 3.6'
|
||||
dependsOn: decision
|
||||
|
@ -283,24 +221,6 @@ jobs:
|
|||
directory: tools/wpt/
|
||||
toxenv: py38
|
||||
|
||||
- job: tools_unittest_win
|
||||
displayName: 'tools/ unittests: Windows'
|
||||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.tools_unittest']
|
||||
pool:
|
||||
vmImage: 'windows-2019'
|
||||
variables:
|
||||
HYPOTHESIS_PROFILE: ci
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '2.7.x'
|
||||
- template: tools/ci/azure/checkout.yml
|
||||
- template: tools/ci/azure/tox_pytest.yml
|
||||
parameters:
|
||||
directory: tools/
|
||||
toxenv: py27
|
||||
|
||||
- job: tools_unittest_win_py36
|
||||
displayName: 'tools/ unittests: Windows + Python 3.6'
|
||||
dependsOn: decision
|
||||
|
@ -337,24 +257,6 @@ jobs:
|
|||
directory: tools/
|
||||
toxenv: py38
|
||||
|
||||
- job: wptrunner_unittest_win
|
||||
displayName: 'tools/wptrunner/ unittests: Windows'
|
||||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
|
||||
pool:
|
||||
vmImage: 'windows-2019'
|
||||
variables:
|
||||
HYPOTHESIS_PROFILE: ci
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '2.7.x'
|
||||
- template: tools/ci/azure/checkout.yml
|
||||
- template: tools/ci/azure/tox_pytest.yml
|
||||
parameters:
|
||||
directory: tools/wptrunner/
|
||||
toxenv: py27
|
||||
|
||||
- job: wptrunner_unittest_win_py36
|
||||
displayName: 'tools/wptrunner/ unittests: Windows + Python 3.6'
|
||||
dependsOn: decision
|
||||
|
@ -389,34 +291,6 @@ jobs:
|
|||
directory: tools/wptrunner/
|
||||
toxenv: py38
|
||||
|
||||
- job: wpt_integration_win
|
||||
displayName: 'tools/wpt/ tests: Windows'
|
||||
dependsOn: decision
|
||||
condition: dependencies.decision.outputs['test_jobs.wpt_integration']
|
||||
pool:
|
||||
vmImage: 'windows-2019'
|
||||
variables:
|
||||
HYPOTHESIS_PROFILE: ci
|
||||
steps:
|
||||
# full checkout required
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '2.7.x'
|
||||
# currently just using the outdated Chrome/Firefox on the VM rather than
|
||||
# figuring out how to install Chrome Dev channel on Windows
|
||||
# - template: tools/ci/azure/install_chrome.yml
|
||||
# - template: tools/ci/azure/install_firefox.yml
|
||||
- template: tools/ci/azure/update_hosts.yml
|
||||
parameters:
|
||||
pyflag: --py2
|
||||
- template: tools/ci/azure/update_manifest.yml
|
||||
parameters:
|
||||
pyflag: --py2
|
||||
- template: tools/ci/azure/tox_pytest.yml
|
||||
parameters:
|
||||
directory: tools/wpt/
|
||||
toxenv: py27
|
||||
|
||||
- job: wpt_integration_win_py36
|
||||
displayName: 'tools/wpt/ tests: Windows + Python 3.6'
|
||||
dependsOn: decision
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>Clipboard IDL test</title>
|
||||
<meta name="timeout" content="long">
|
||||
<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 src="/resources/WebIDLParser.js"></script>
|
||||
<script src="/resources/idlharness.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
function doTest(idl, dom, html) {
|
||||
const idl_array = new IdlArray();
|
||||
idl_array.add_untested_idls('interface Navigator {};');
|
||||
idl_array.add_untested_idls('interface EventTarget {};');
|
||||
idl_array.add_untested_idls('dictionary PermissionDescriptor {};');
|
||||
idl_array.add_untested_idls(dom, { only: ['Event', 'EventInit'] });
|
||||
idl_array.add_untested_idls(html, { only: ['DataTransfer', 'DataTransferItemList'] });
|
||||
idl_array.add_idls(idl);
|
||||
idl_array.add_objects({
|
||||
Navigator: ['navigator'],
|
||||
Clipboard: ['navigator.clipboard'],
|
||||
ClipboardEvent: ['new ClipboardEvent("x")'],
|
||||
});
|
||||
idl_array.test();
|
||||
};
|
||||
|
||||
function fetchText(url) {
|
||||
return fetch(url).then(response => response.text());
|
||||
}
|
||||
|
||||
promise_test(() => {
|
||||
return Promise.all(
|
||||
[
|
||||
'/interfaces/clipboard-apis.idl',
|
||||
'/interfaces/dom.idl',
|
||||
'/interfaces/html.idl',
|
||||
].map(fetchText))
|
||||
.then(([idl, dom, html]) => doTest(idl, dom, html));
|
||||
}, 'Test driver');
|
||||
</script>
|
|
@ -0,0 +1,17 @@
|
|||
// META: timeout=long
|
||||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
|
||||
'use strict';
|
||||
|
||||
idl_test(
|
||||
['clipboard-apis'],
|
||||
['dom', 'html', 'permissions'],
|
||||
idl_array => {
|
||||
idl_array.add_objects({
|
||||
Navigator: ['navigator'],
|
||||
Clipboard: ['navigator.clipboard'],
|
||||
ClipboardEvent: ['new ClipboardEvent("x")'],
|
||||
});
|
||||
}
|
||||
);
|
|
@ -6,16 +6,15 @@
|
|||
<body>
|
||||
<script>
|
||||
var t = async_test("navigator.cookieEnabled behavior on frames without cookie access");
|
||||
window.onmessage = function(ev) {
|
||||
window.onmessage = t.step_func_done(ev => {
|
||||
// Surprisingly, the legacy behavior here is to return true; this actually
|
||||
// does match the spec definition since false is supposed to be returned
|
||||
// when a document.cookie write is ignored --- and here it would throw
|
||||
// a security exception, not be ignored.
|
||||
assert_equals(ev.data, true);
|
||||
t.done();
|
||||
}
|
||||
assert_true(ev.data);
|
||||
});
|
||||
|
||||
t.step(function() {
|
||||
t.step(() => {
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.sandbox = "allow-scripts";
|
||||
iframe.srcdoc = "<scr" + "ipt>" +
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Flexbox Reference: display:table flex items with percent-width cells and content keywords for used flex-basis</title>
|
||||
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
|
||||
<style>
|
||||
.container {
|
||||
display: block;
|
||||
width: 200px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
table { width: max-content; }
|
||||
td {
|
||||
background-color: cyan;
|
||||
width: 100%;
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
</style>
|
||||
<body>
|
||||
<div class="container">
|
||||
<table><tr><td>1</td><td>2</td></tr></table>
|
||||
</div>
|
||||
<div class="container">
|
||||
<table><tr><td>1</td><td>2</td></tr></table>
|
||||
</div>
|
||||
<div class="container">
|
||||
<table><tr><td>1</td><td>2</td></tr></table>
|
||||
</div>
|
||||
<div class="container">
|
||||
<table><tr><td>1</td><td>2</td></tr></table>
|
||||
</div>
|
||||
</body>
|
|
@ -0,0 +1,36 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Flexbox Test: display:table flex items with percent-width cells and content keywords for used flex-basis</title>
|
||||
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#valdef-flex-basis-content">
|
||||
<link rel="match" href="table-as-item-percent-width-cell-001-ref.html">
|
||||
<meta name="assert" content="If a table as a flex item has used 'flex-basis:content' (or another content-based keyword), and default flex factors, and plenty of space, then it should be sized similarly to a table with 'width:max-content' in a block formatting context.">
|
||||
<style>
|
||||
.container {
|
||||
display: flex;
|
||||
width: 200px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
td {
|
||||
background-color: cyan;
|
||||
width: 100%;
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
</style>
|
||||
<body>
|
||||
<div class="container">
|
||||
<!-- The used value of flex-basis is 'content' here, due to the flex-basis
|
||||
and the main-size property both having the value 'auto'. -->
|
||||
<table><tr><td>1</td><td>2</td></tr></table>
|
||||
</div>
|
||||
<div class="container">
|
||||
<table style="flex-basis: content"><tr><td>1</td><td>2</td></tr></table>
|
||||
</div>
|
||||
<div class="container">
|
||||
<table style="flex-basis: min-content"><tr><td>1</td><td>2</td></tr></table>
|
||||
</div>
|
||||
<div class="container">
|
||||
<table style="flex-basis: max-content"><tr><td>1</td><td>2</td></tr></table>
|
||||
</div>
|
||||
</body>
|
|
@ -0,0 +1,90 @@
|
|||
<!DOCTYPE HTML>
|
||||
<title>CSS Test Reference: breaking of a multicolumn</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="https://mozilla.org/">
|
||||
<style>
|
||||
|
||||
.outer {
|
||||
height: 100px;
|
||||
width: 800px;
|
||||
background: rgba(0, 0, 255, 0.3);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.blueborders {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 194px; /* 188px first column + (16px gap - 4px rule) / 2 */
|
||||
width: 200px; /* 188px second column + (16px gap - 4px rule) */
|
||||
height: 100px;
|
||||
border-left: blue solid 4px;
|
||||
}
|
||||
|
||||
.innerbg {
|
||||
height: 100px;
|
||||
width: 188px;
|
||||
background: rgba(255, 0, 255, 0.3);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.inner {
|
||||
height: 100px;
|
||||
width: 86px;
|
||||
font: 16px/1.25 sans-serif;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.lefthalf {
|
||||
border-right: 2px solid fuchsia;
|
||||
padding-right: 7px;
|
||||
}
|
||||
|
||||
.righthalf {
|
||||
padding-left: 7px;
|
||||
}
|
||||
|
||||
.border-bottom {
|
||||
height: 20px;
|
||||
width: 188px;
|
||||
background: green;
|
||||
position: absolute;
|
||||
top: 80px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="outer">
|
||||
<div class="blueborders"></div>
|
||||
<div class="innerbg" style="left: 0"></div>
|
||||
<div class="inner lefthalf" style="left: 0">
|
||||
AAAAA<br>
|
||||
BBBBB<br>
|
||||
CCCCC<br>
|
||||
DDDDD<br>
|
||||
EEEEE
|
||||
</div>
|
||||
<div class="inner righthalf" style="left: 95px">
|
||||
FFFFF<br>
|
||||
GGGGG<br>
|
||||
HHHHH<br>
|
||||
IIIII<br>
|
||||
JJJJJ
|
||||
</div>
|
||||
<div class="innerbg" style="left: 204px"></div>
|
||||
<div class="inner lefthalf" style="left: 204px">
|
||||
KKKKK<br>
|
||||
LLLLL<br>
|
||||
MMMMM<br>
|
||||
NNNNN
|
||||
</div>
|
||||
<div class="inner righthalf" style="left: 299px">
|
||||
OOOOO<br>
|
||||
PPPPP<br>
|
||||
QQQQQ<br>
|
||||
</div>
|
||||
<div class="border-bottom" style="left: 204px"></div>
|
||||
</div>
|
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE HTML>
|
||||
<title>CSS Test: breaking of a multicolumn</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="https://mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf">
|
||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2309">
|
||||
<link rel="match" href="multicol-breaking-006-ref.html">
|
||||
<style>
|
||||
|
||||
.outer {
|
||||
height: 100px;
|
||||
column-fill: auto;
|
||||
width: 800px;
|
||||
column-count: 4;
|
||||
column-rule: 4px solid blue;
|
||||
column-gap: 16px;
|
||||
background: rgba(0, 0, 255, 0.3);
|
||||
}
|
||||
|
||||
.inner {
|
||||
column-count: 2;
|
||||
column-rule: 2px solid fuchsia;
|
||||
column-gap: 16px;
|
||||
background: rgba(255, 0, 255, 0.3);
|
||||
font: 16px/1.25 sans-serif;
|
||||
border-bottom: 20px solid green;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<!-- This test is adapted from multicol-breaking-001.html.
|
||||
The inner column is changed to have "height:auto" and border-bottom. -->
|
||||
<div class="outer">
|
||||
<div class="inner" style="height: auto">
|
||||
AAAAA<br>
|
||||
BBBBB<br>
|
||||
CCCCC<br>
|
||||
DDDDD<br>
|
||||
EEEEE<br>
|
||||
FFFFF<br>
|
||||
GGGGG<br>
|
||||
HHHHH<br>
|
||||
IIIII<br>
|
||||
JJJJJ<br>
|
||||
KKKKK<br>
|
||||
LLLLL<br>
|
||||
MMMMM<br>
|
||||
NNNNN<br>
|
||||
OOOOO<br>
|
||||
PPPPP<br>
|
||||
QQQQQ
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,8 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Test: non-opaque scrollbar-color should work on the root</title>
|
||||
<style>
|
||||
:root {
|
||||
background-color: black;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,14 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Test: non-opaque scrollbar-color should work on the root</title>
|
||||
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-scrollbars-1/#scrollbar-color-properties">
|
||||
<link rel="match" href="transparent-on-root-ref.html">
|
||||
<style>
|
||||
:root {
|
||||
overflow: scroll;
|
||||
scrollbar-color: transparent transparent;
|
||||
background-color: black;
|
||||
}
|
||||
</style>
|
|
@ -7,8 +7,7 @@ The tests are designed to be run from your local computer.
|
|||
Running the tests requires `python`, `pip` and `virtualenv`, as well as updating
|
||||
the system `hosts` file.
|
||||
|
||||
Python 3 is supported and preferred, but for now it is still possible to use
|
||||
Python 2.7 if necessary.
|
||||
WPT requires Python 3.6 or higher.
|
||||
|
||||
The required setup is different depending on your operating system.
|
||||
|
||||
|
@ -45,10 +44,10 @@ See also [additional setup required to run Safari](safari.md).
|
|||
|
||||
### Windows Setup
|
||||
|
||||
Download and install [Python 2.7](https://www.python.org/downloads). The
|
||||
Download and install [Python 3](https://www.python.org/downloads). The
|
||||
installer includes `pip` by default.
|
||||
|
||||
Add `C:\Python27` and `C:\Python27\Scripts` to your `%Path%`
|
||||
Add `C:\Python39` and `C:\Python39\Scripts` to your `%Path%`
|
||||
[environment variable](http://www.computerhope.com/issues/ch000549.htm).
|
||||
|
||||
Finally, install `virtualenv`:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Writing H2 Tests
|
||||
|
||||
> <b>Important:</b> The HTTP/2.0 server requires you to have Python 2.7.10+
|
||||
and OpenSSL 1.0.2+. This is because HTTP/2.0 is negotiated using the
|
||||
> <b>Important:</b> The HTTP/2.0 server requires you to have
|
||||
OpenSSL 1.0.2+. This is because HTTP/2.0 is negotiated using the
|
||||
[TLS ALPN](https://tools.ietf.org/html/rfc7301) extension, which is only supported in [OpenSSL 1.0.2](https://www.openssl.org/news/openssl-1.0.2-notes.html) and up.
|
||||
|
||||
These instructions assume you are already familiar with the testing
|
||||
|
@ -153,4 +153,4 @@ the HEADER and CONTINUATION frames are constructed in the same way.
|
|||
Ends the stream with the given ID, or the one that request was made on if no ID given.
|
||||
|
||||
- <b>Parameters</b>
|
||||
- <b>stream_id</b>: Id of stream to send frame on. Will use the request stream ID if None
|
||||
- <b>stream_id</b>: Id of stream to send frame on. Will use the request stream ID if None
|
||||
|
|
|
@ -61,7 +61,7 @@ TRAILING WHITESPACE:example/*
|
|||
|
||||
Similarly, you can also
|
||||
use
|
||||
[shell-style wildcards](https://docs.python.org/2/library/fnmatch.html) to
|
||||
[shell-style wildcards](https://docs.python.org/library/fnmatch.html) to
|
||||
express other filename patterns or directory-name patterns.
|
||||
|
||||
Finally, to ignore just one line in a file, use the following format:
|
||||
|
|
|
@ -81,21 +81,6 @@ css/css-align/resources/__init__.py
|
|||
This requirement will be removed once we move to Python 3, due to
|
||||
[PEP 420](https://www.python.org/dev/peps/pep-0420/).
|
||||
|
||||
### Python3 compatibility
|
||||
|
||||
Even though Python3 is not fully supported at this point, some work is being
|
||||
done to add compatibility for it. This is why you can see in multiple places
|
||||
the use of the `six` python module which is meant to provide a set of simple
|
||||
utilities that work for both generation of python (see
|
||||
[docs](https://six.readthedocs.io/)). The module is vendored in
|
||||
tools/third_party/six/six.py.
|
||||
|
||||
When an handler is added, it should be at least syntax-compatible with Python3.
|
||||
You can check that by running:
|
||||
```
|
||||
python3 -m py_compile <path/to/handler.py>
|
||||
```
|
||||
|
||||
## Example: Dynamic HTTP headers
|
||||
|
||||
The following code defines a Python handler that allows the requester to
|
||||
|
|
|
@ -127,8 +127,8 @@ by default and needs to be run using `./wpt serve --h2` in order to enable it.
|
|||
The HTTP/2.0 server supports handlers that work per-frame; these, along with the
|
||||
API are documented in [Writing H2 Tests](h2tests).
|
||||
|
||||
> <b>Important:</b> The HTTP/2.0 server requires you to have Python 2.7.10+
|
||||
and OpenSSL 1.0.2+. This is because HTTP/2.0 is negotiated using the
|
||||
> <b>Important:</b> The HTTP/2.0 server requires you to have
|
||||
OpenSSL 1.0.2+. This is because HTTP/2.0 is negotiated using the
|
||||
[TLS ALPN](https://tools.ietf.org/html/rfc7301) extension, which is only
|
||||
supported in
|
||||
[OpenSSL 1.0.2](https://www.openssl.org/news/openssl-1.0.2-notes.html) and up.
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
def main(request, response):
|
||||
output = b"HTTP/1.1 "
|
||||
output += request.GET.first(b"input")
|
||||
output += b"\nheader-parsing: is sad\n"
|
||||
response.writer.write(output)
|
||||
response.close_connection = True
|
|
@ -0,0 +1,98 @@
|
|||
[
|
||||
{
|
||||
input: "",
|
||||
expected: null
|
||||
},
|
||||
{
|
||||
input: "BLAH",
|
||||
expected: null
|
||||
},
|
||||
{
|
||||
input: "0 OK",
|
||||
expected: {
|
||||
status: 0,
|
||||
statusText: "OK"
|
||||
}
|
||||
},
|
||||
{
|
||||
input: "1 OK",
|
||||
expected: {
|
||||
status: 1,
|
||||
statusText: "OK"
|
||||
}
|
||||
},
|
||||
{
|
||||
input: "99 NOT OK",
|
||||
expected: {
|
||||
status: 99,
|
||||
statusText: "NOT OK"
|
||||
}
|
||||
},
|
||||
{
|
||||
input: "077 77",
|
||||
expected: {
|
||||
status: 77,
|
||||
statusText: "77"
|
||||
}
|
||||
},
|
||||
{
|
||||
input: "099 HELLO",
|
||||
expected: {
|
||||
status: 99,
|
||||
statusText: "HELLO"
|
||||
}
|
||||
},
|
||||
{
|
||||
input: "200",
|
||||
expected: {
|
||||
status: 200,
|
||||
statusText: ""
|
||||
}
|
||||
},
|
||||
{
|
||||
input: "999 DOES IT MATTER",
|
||||
expected: {
|
||||
status: 999,
|
||||
statusText: "DOES IT MATTER"
|
||||
}
|
||||
},
|
||||
{
|
||||
input: "1000 BOO",
|
||||
expected: null
|
||||
},
|
||||
{
|
||||
input: "0200 BOO",
|
||||
expected: null
|
||||
},
|
||||
{
|
||||
input: "65736 NOT 200 OR SOME SUCH",
|
||||
expected: null
|
||||
},
|
||||
{
|
||||
input: "131072 HI",
|
||||
expected: null
|
||||
},
|
||||
{
|
||||
input: "-200 TEST",
|
||||
expected: null
|
||||
},
|
||||
{
|
||||
input: "0xA",
|
||||
expected: null
|
||||
},
|
||||
{
|
||||
input: "C8",
|
||||
expected: null
|
||||
}
|
||||
].forEach(({ description, input, expected }) => {
|
||||
promise_test(async t => {
|
||||
if (expected !== null) {
|
||||
const response = await fetch("resources/status-code.py?input=" + input);
|
||||
assert_equals(response.status, expected.status);
|
||||
assert_equals(response.statusText, expected.statusText);
|
||||
assert_equals(response.headers.get("header-parsing"), "is sad");
|
||||
} else {
|
||||
await promise_rejects_js(t, TypeError, fetch("resources/status-code.py?input=" + input));
|
||||
}
|
||||
}, `HTTP/1.1 ${input} ${expected === null ? "(network error)" : ""}`);
|
||||
});
|
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: addition of scale transform above filter</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<div id=target style="width: 581px">
|
||||
<div id=moved style="filter: saturate(1.1); width: 300px; height:300px; background: lightblue">
|
||||
</div>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/util.js"></script>
|
||||
<script>
|
||||
promise_test(async () => {
|
||||
const watcher = new ScoreWatcher;
|
||||
// Wait for the initial render to complete.
|
||||
await waitForAnimationFrames(2);
|
||||
|
||||
target.style.transform = "scale(1.1)";
|
||||
await waitForAnimationFrames(1);
|
||||
|
||||
assert_equals(watcher.score, 0);
|
||||
}, 'addition of scale transform above filter');
|
||||
|
||||
</script>
|
|
@ -0,0 +1,32 @@
|
|||
<!doctype html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/dummy.js?pipe=trickle(d1)"></script>
|
||||
<link rel="stylesheet" media="print" href="resources/dummy.css?print">
|
||||
<link rel="stylesheet" href="resources/dummy.css?non-print">
|
||||
<script>
|
||||
let t = async_test("Non-matching link media is not preloaded");
|
||||
window.addEventListener("load", t.step_func_done(function() {
|
||||
let entries = performance.getEntriesByType('resource');
|
||||
let found_print = null;
|
||||
let found_non_print = null;
|
||||
for (let entry of entries) {
|
||||
if (entry.name.includes("?print")) {
|
||||
assert_equals(found_print, null);
|
||||
found_print = entry.startTime;
|
||||
}
|
||||
if (entry.name.includes("?non-print")) {
|
||||
assert_equals(found_non_print, null);
|
||||
found_non_print = entry.startTime;
|
||||
}
|
||||
}
|
||||
assert_not_equals(found_print, null, "Should've loaded print sheet");
|
||||
assert_not_equals(found_non_print, null, "Should've loaded non-print sheet");
|
||||
// We can assert_greater_than (rather than greater_than_equal) because if
|
||||
// the non-print sheet has been preloaded but the print one hasn't, we have
|
||||
// the trickle mechanism to try to guarantee that enough time has passed
|
||||
// between one load and the next.
|
||||
assert_greater_than(found_print, found_non_print, "Non-print sheet should've started loading before print sheet")
|
||||
}));
|
||||
</script>
|
||||
|
|
@ -205,13 +205,13 @@
|
|||
.pointerMove(0, 0, {origin: target1})
|
||||
.pointerMove(0, 0, {origin: btnCapture})
|
||||
.pointerDown()
|
||||
.pointerMove(0, 0, {origin: btnCapture})
|
||||
.pointerMove(1, 1, {origin: btnCapture})
|
||||
.pointerMove(10, 0, {origin: btnCapture})
|
||||
.pointerMove(0, 0, {origin: target1})
|
||||
.pointerMove(0, 0, {origin: target0})
|
||||
.pointerMove(0, 0, {origin: target1})
|
||||
.pointerUp()
|
||||
.pointerMove(0, 0, {origin: target1})
|
||||
.pointerMove(1, 1, {origin: target1})
|
||||
.send();
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Makes sure that Link headers preload resources</title>
|
||||
<!--
|
||||
This and the line below ensure that the trailing crossorigin in the link
|
||||
header is honored, otherwise we'd load this resource twice and the test would
|
||||
fail.
|
||||
-->
|
||||
<link rel="preload" as="style" crossorigin href="resources/dummy.css?link-header-crossorigin-preload2">
|
||||
<link rel="stylesheet" crossorigin href="resources/dummy.css?link-header-crossorigin-preload2">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/preload/resources/preload_helper.js"></script>
|
||||
|
@ -12,7 +19,9 @@
|
|||
function check_finished() {
|
||||
if (numberOfResourceTimingEntries("resources/square.png?link-header-preload") == 1 &&
|
||||
numberOfResourceTimingEntries("resources/dummy.js?link-header-preload") == 1 &&
|
||||
numberOfResourceTimingEntries("resources/dummy.css?link-header-preload") == 1) {
|
||||
numberOfResourceTimingEntries("resources/dummy.css?link-header-preload") == 1 &&
|
||||
numberOfResourceTimingEntries("resources/dummy.css?link-header-crossorigin-preload1") == 1 &&
|
||||
numberOfResourceTimingEntries("resources/dummy.css?link-header-crossorigin-preload2") == 1) {
|
||||
done();
|
||||
}
|
||||
iterations++;
|
||||
|
@ -21,6 +30,8 @@
|
|||
verifyNumberOfResourceTimingEntries("resources/square.png?link-header-preload", 1);
|
||||
verifyNumberOfResourceTimingEntries("resources/dummy.js?link-header-preload", 1);
|
||||
verifyNumberOfResourceTimingEntries("resources/dummy.css?link-header-preload", 1);
|
||||
verifyNumberOfResourceTimingEntries("resources/dummy.css?link-header-crossorigin-preload1", 1);
|
||||
verifyNumberOfResourceTimingEntries("resources/dummy.css?link-header-crossorigin-preload2", 1);
|
||||
done();
|
||||
} else {
|
||||
step_timeout(check_finished, 500);
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
Link: </preload/resources/dummy.js?link-header-preload>;rel=preload;as=script
|
||||
Link: </preload/resources/dummy.css?link-header-preload>;rel=preload;as=style
|
||||
Link: </preload/resources/square.png?link-header-preload>;rel=preload;as=image
|
||||
Link: </preload/resources/dummy.css?link-header-crossorigin-preload1>;rel=preload;as=style;crossorigin
|
||||
Link: </preload/resources/dummy.css?link-header-crossorigin-preload2>;rel=preload;as=style;crossorigin
|
||||
|
||||
|
|
|
@ -215,6 +215,8 @@ var GenericSensorTest = (() => {
|
|||
['Accelerometer', device.mojom.SensorType.ACCELEROMETER],
|
||||
['LinearAccelerationSensor',
|
||||
device.mojom.SensorType.LINEAR_ACCELERATION],
|
||||
['GravitySensor',
|
||||
device.mojom.SensorType.GRAVITY],
|
||||
['AmbientLightSensor', device.mojom.SensorType.AMBIENT_LIGHT],
|
||||
['Gyroscope', device.mojom.SensorType.GYROSCOPE],
|
||||
['Magnetometer', device.mojom.SensorType.MAGNETOMETER],
|
||||
|
|
|
@ -3543,8 +3543,6 @@ IdlNamespace.prototype.test = function ()
|
|||
function idl_test(srcs, deps, idl_setup_func) {
|
||||
return promise_test(function (t) {
|
||||
var idl_array = new IdlArray();
|
||||
srcs = (srcs instanceof Array) ? srcs : [srcs] || [];
|
||||
deps = (deps instanceof Array) ? deps : [deps] || [];
|
||||
var setup_error = null;
|
||||
const validationIgnored = [
|
||||
"constructor-member",
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
parameters:
|
||||
pyflag: --py3
|
||||
|
||||
steps:
|
||||
- script: ./wpt make-hosts-file | sudo tee -a /etc/hosts
|
||||
displayName: 'Update hosts (macOS)'
|
||||
|
@ -8,6 +5,6 @@ steps:
|
|||
- powershell: |
|
||||
$hostFile = "$env:systemroot\System32\drivers\etc\hosts"
|
||||
Copy-Item -Path $hostFile -Destination "$hostFile.back" -Force
|
||||
python wpt ${{ parameters.pyflag }} make-hosts-file | Out-File $env:systemroot\System32\drivers\etc\hosts -Encoding ascii -Append
|
||||
python wpt make-hosts-file | Out-File $env:systemroot\System32\drivers\etc\hosts -Encoding ascii -Append
|
||||
displayName: 'Update hosts (Windows)'
|
||||
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
parameters:
|
||||
pyflag: --py3
|
||||
|
||||
steps:
|
||||
# `python wpt` instead of `./wpt` is to make this work on Windows:
|
||||
- script: python wpt ${{ parameters.pyflag }} manifest
|
||||
- script: python wpt manifest
|
||||
displayName: 'Update manifest'
|
||||
|
|
|
@ -105,11 +105,6 @@ components:
|
|||
|
||||
browser-servo: {}
|
||||
|
||||
tox-python2:
|
||||
env:
|
||||
TOXENV: py27
|
||||
PY_COLORS: 0
|
||||
|
||||
tox-python3:
|
||||
env:
|
||||
TOXENV: py36
|
||||
|
@ -402,20 +397,6 @@ tasks:
|
|||
- update_built
|
||||
command: "./tools/ci/ci_built_diff.sh"
|
||||
|
||||
- tools/ unittests (Python 2):
|
||||
use:
|
||||
- wpt-base
|
||||
- trigger-pr
|
||||
- tox-python2
|
||||
description: >-
|
||||
Unit tests for tools running under Python 2.7, excluding wptrunner
|
||||
command: ./tools/ci/ci_tools_unittest.sh
|
||||
env:
|
||||
HYPOTHESIS_PROFILE: ci
|
||||
schedule-if:
|
||||
run-job:
|
||||
- tools_unittest
|
||||
|
||||
- tools/ unittests (Python 3.6):
|
||||
description: >-
|
||||
Unit tests for tools running under Python 3.6, excluding wptrunner
|
||||
|
@ -447,28 +428,6 @@ tasks:
|
|||
run-job:
|
||||
- tools_unittest
|
||||
|
||||
- tools/ integration tests (Python 2):
|
||||
description: >-
|
||||
Integration tests for tools running under Python 2.7
|
||||
use:
|
||||
- wpt-base
|
||||
- trigger-pr
|
||||
- tox-python2
|
||||
command: ./tools/ci/ci_tools_integration_test.sh
|
||||
install:
|
||||
- libnss3-tools
|
||||
options:
|
||||
oom-killer: true
|
||||
browser:
|
||||
- firefox
|
||||
- chrome
|
||||
channel: experimental
|
||||
xvfb: true
|
||||
hosts: true
|
||||
schedule-if:
|
||||
run-job:
|
||||
- wpt_integration
|
||||
|
||||
- tools/ integration tests (Python 3.6):
|
||||
description: >-
|
||||
Integration tests for tools running under Python 3.6
|
||||
|
@ -515,23 +474,6 @@ tasks:
|
|||
run-job:
|
||||
- wpt_integration
|
||||
|
||||
- resources/ tests (Python 2):
|
||||
description: >-
|
||||
Tests for testharness.js and other files in resources/ under Python 2.7
|
||||
use:
|
||||
- wpt-base
|
||||
- trigger-pr
|
||||
- tox-python2
|
||||
command: ./tools/ci/ci_resources_unittest.sh
|
||||
options:
|
||||
browser:
|
||||
- firefox
|
||||
xvfb: true
|
||||
hosts: true
|
||||
schedule-if:
|
||||
run-job:
|
||||
- resources_unittest
|
||||
|
||||
- resources/ tests (Python 3.6):
|
||||
description: >-
|
||||
Tests for testharness.js and other files in resources/ under Python 3.6
|
||||
|
@ -572,32 +514,6 @@ tasks:
|
|||
run-job:
|
||||
- resources_unittest
|
||||
|
||||
- infrastructure/ tests:
|
||||
description: >-
|
||||
Smoketests for wptrunner
|
||||
vars:
|
||||
channel: nightly
|
||||
use:
|
||||
- wpt-base
|
||||
- trigger-pr
|
||||
- browser-firefox
|
||||
command: ./tools/ci/ci_wptrunner_infrastructure.sh --py2
|
||||
install:
|
||||
- libnss3-tools
|
||||
- libappindicator1
|
||||
- fonts-liberation
|
||||
options:
|
||||
oom-killer: true
|
||||
browser:
|
||||
- firefox
|
||||
- chrome
|
||||
channel: experimental
|
||||
xvfb: true
|
||||
hosts: false
|
||||
schedule-if:
|
||||
run-job:
|
||||
- wptrunner_infrastructure
|
||||
|
||||
- infrastructure/ tests (Python 3):
|
||||
description: >-
|
||||
Smoketests for wptrunner
|
||||
|
|
|
@ -132,17 +132,13 @@ def test_verify_payload():
|
|||
'lint']),
|
||||
("pr_event.json", True, {".taskcluster.yml", ".travis.yml", "tools/ci/start.sh"},
|
||||
['lint',
|
||||
'tools/ unittests (Python 2)',
|
||||
'tools/ unittests (Python 3.6)',
|
||||
'tools/ unittests (Python 3.8)',
|
||||
'tools/ integration tests (Python 2)',
|
||||
'tools/ integration tests (Python 3.6)',
|
||||
'tools/ integration tests (Python 3.8)',
|
||||
'resources/ tests (Python 2)',
|
||||
'resources/ tests (Python 3.6)',
|
||||
'resources/ tests (Python 3.8)',
|
||||
'download-firefox-nightly',
|
||||
'infrastructure/ tests',
|
||||
'infrastructure/ tests (Python 3)',
|
||||
'sink-task']),
|
||||
# More tests are affected in the actual PR but it shouldn't affect the scheduled tasks
|
||||
|
|
|
@ -12,16 +12,16 @@ select = E,W,F,N
|
|||
# E402: module level import not at top of file
|
||||
# E731: do not assign a lambda expression, use a def
|
||||
# W504: line break after binary operator
|
||||
# W601: .has_key() is deprecated, use ‘in’
|
||||
# W605: invalid escape sequence
|
||||
# N801: class names should use CapWords convention
|
||||
# N802: function name should be lowercase
|
||||
# N806: variable in function should be lowercase
|
||||
ignore = E128,E129,E226,E231,E251,E265,E302,E303,E305,E402,E731,W504,W605,N801,N802,N806
|
||||
ignore = E128,E129,E226,E231,E251,E265,E302,E303,E305,E402,E731,W504,W601,W605,N801,N802,N806
|
||||
exclude =
|
||||
.tox,
|
||||
pywebsocket,
|
||||
third_party,
|
||||
wptrunner,
|
||||
wptserve/docs/conf.py,
|
||||
wptserve/tests/functional/docroot/invalid.py
|
||||
max-line-length = 141
|
||||
|
|
|
@ -2,6 +2,8 @@ import argparse
|
|||
from . import browser
|
||||
|
||||
latest_channels = {
|
||||
'android_weblayer': 'dev',
|
||||
'android_webview': 'dev',
|
||||
'firefox': 'nightly',
|
||||
'chrome': 'nightly',
|
||||
'chrome_android': 'dev',
|
||||
|
|
|
@ -427,10 +427,12 @@ class ChromeiOS(BrowserSetup):
|
|||
class AndroidWeblayer(BrowserSetup):
|
||||
name = "android_weblayer"
|
||||
browser_cls = browser.AndroidWeblayer
|
||||
experimental_channels = ("dev", "canary")
|
||||
|
||||
def setup_kwargs(self, kwargs):
|
||||
if kwargs.get("device_serial"):
|
||||
self.browser.device_serial = kwargs["device_serial"]
|
||||
browser_channel = kwargs["browser_channel"]
|
||||
if kwargs["webdriver_binary"] is None:
|
||||
webdriver_binary = None
|
||||
if not kwargs["install_webdriver"]:
|
||||
|
@ -443,7 +445,7 @@ class AndroidWeblayer(BrowserSetup):
|
|||
logger.info("Downloading chromedriver")
|
||||
webdriver_binary = self.browser.install_webdriver(
|
||||
dest=self.venv.bin_path,
|
||||
channel=kwargs["browser_channel"])
|
||||
channel=browser_channel)
|
||||
else:
|
||||
logger.info("Using webdriver binary %s" % webdriver_binary)
|
||||
|
||||
|
@ -451,6 +453,9 @@ class AndroidWeblayer(BrowserSetup):
|
|||
kwargs["webdriver_binary"] = webdriver_binary
|
||||
else:
|
||||
raise WptrunError("Unable to locate or install chromedriver binary")
|
||||
if browser_channel in self.experimental_channels:
|
||||
logger.info("Automatically turning on experimental features for WebLayer Dev/Canary")
|
||||
kwargs["binary_args"].append("--enable-experimental-web-platform-features")
|
||||
|
||||
|
||||
class AndroidWebview(BrowserSetup):
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
import subprocess
|
||||
|
||||
from .base import Browser, ExecutorBrowser, require_arg
|
||||
from .base import require_arg
|
||||
from .base import get_timeout_multiplier # noqa: F401
|
||||
from .chrome import executor_kwargs as chrome_executor_kwargs
|
||||
from ..webdriver_server import ChromeDriverServer
|
||||
from .chrome_android import ChromeAndroidBrowserBase
|
||||
from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401
|
||||
WebDriverRefTestExecutor) # noqa: F401
|
||||
from ..executors.executorchrome import ChromeDriverWdspecExecutor # noqa: F401
|
||||
|
@ -74,61 +72,19 @@ def env_options():
|
|||
return {"server_host": "127.0.0.1"}
|
||||
|
||||
|
||||
#TODO: refactor common elements of WeblayerShell and ChromeAndroidBrowser
|
||||
class WeblayerShell(Browser):
|
||||
class WeblayerShell(ChromeAndroidBrowserBase):
|
||||
"""Chrome is backed by chromedriver, which is supplied through
|
||||
``wptrunner.webdriver.ChromeDriverServer``.
|
||||
"""
|
||||
|
||||
def __init__(self, logger, binary, webdriver_binary="chromedriver",
|
||||
def __init__(self, logger, binary,
|
||||
webdriver_binary="chromedriver",
|
||||
remote_queue=None,
|
||||
device_serial=None,
|
||||
webdriver_args=None):
|
||||
"""Creates a new representation of Chrome. The `binary` argument gives
|
||||
the browser binary to use for testing."""
|
||||
Browser.__init__(self, logger)
|
||||
super(WeblayerShell, self).__init__(logger,
|
||||
webdriver_binary, remote_queue, device_serial, webdriver_args)
|
||||
self.binary = binary
|
||||
self.device_serial = device_serial
|
||||
self.server = ChromeDriverServer(self.logger,
|
||||
binary=webdriver_binary,
|
||||
args=webdriver_args)
|
||||
self.setup_adb_reverse()
|
||||
|
||||
def _adb_run(self, args):
|
||||
cmd = ['adb']
|
||||
if self.device_serial:
|
||||
cmd.extend(['-s', self.device_serial])
|
||||
cmd.extend(args)
|
||||
self.logger.info(' '.join(cmd))
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
def setup_adb_reverse(self):
|
||||
self._adb_run(['wait-for-device'])
|
||||
self._adb_run(['forward', '--remove-all'])
|
||||
self._adb_run(['reverse', '--remove-all'])
|
||||
# "adb reverse" basically forwards network connection from device to
|
||||
# host.
|
||||
for port in _wptserve_ports:
|
||||
self._adb_run(['reverse', 'tcp:%d' % port, 'tcp:%d' % port])
|
||||
|
||||
def start(self, **kwargs):
|
||||
self.server.start(block=False)
|
||||
|
||||
def stop(self, force=False):
|
||||
self.server.stop(force=force)
|
||||
|
||||
def pid(self):
|
||||
return self.server.pid
|
||||
|
||||
def is_alive(self):
|
||||
# TODO(ato): This only indicates the driver is alive,
|
||||
# and doesn't say anything about whether a browser session
|
||||
# is active.
|
||||
return self.server.is_alive()
|
||||
|
||||
def cleanup(self):
|
||||
self.stop()
|
||||
self._adb_run(['forward', '--remove-all'])
|
||||
self._adb_run(['reverse', '--remove-all'])
|
||||
|
||||
def executor_browser(self):
|
||||
return ExecutorBrowser, {"webdriver_url": self.server.url}
|
||||
self.wptserver_ports = _wptserve_ports
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
import subprocess
|
||||
|
||||
from .base import Browser, ExecutorBrowser, require_arg
|
||||
from .base import require_arg
|
||||
from .base import get_timeout_multiplier # noqa: F401
|
||||
from .chrome import executor_kwargs as chrome_executor_kwargs
|
||||
from ..webdriver_server import ChromeDriverServer
|
||||
from .chrome_android import ChromeAndroidBrowserBase
|
||||
from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401
|
||||
WebDriverRefTestExecutor) # noqa: F401
|
||||
from ..executors.executorchrome import ChromeDriverWdspecExecutor # noqa: F401
|
||||
|
@ -73,61 +71,18 @@ def env_options():
|
|||
return {"server_host": "127.0.0.1"}
|
||||
|
||||
|
||||
#TODO: refactor common elements of SystemWebViewShell and ChromeAndroidBrowser
|
||||
class SystemWebViewShell(Browser):
|
||||
class SystemWebViewShell(ChromeAndroidBrowserBase):
|
||||
"""Chrome is backed by chromedriver, which is supplied through
|
||||
``wptrunner.webdriver.ChromeDriverServer``.
|
||||
"""
|
||||
|
||||
def __init__(self, logger, binary, webdriver_binary="chromedriver",
|
||||
remote_queue=None,
|
||||
device_serial=None,
|
||||
webdriver_args=None):
|
||||
"""Creates a new representation of Chrome. The `binary` argument gives
|
||||
the browser binary to use for testing."""
|
||||
Browser.__init__(self, logger)
|
||||
super(SystemWebViewShell, self).__init__(logger,
|
||||
webdriver_binary, remote_queue, device_serial, webdriver_args)
|
||||
self.binary = binary
|
||||
self.device_serial = device_serial
|
||||
self.server = ChromeDriverServer(self.logger,
|
||||
binary=webdriver_binary,
|
||||
args=webdriver_args)
|
||||
self.setup_adb_reverse()
|
||||
|
||||
def _adb_run(self, args):
|
||||
cmd = ['adb']
|
||||
if self.device_serial:
|
||||
cmd.extend(['-s', self.device_serial])
|
||||
cmd.extend(args)
|
||||
self.logger.info(' '.join(cmd))
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
def setup_adb_reverse(self):
|
||||
self._adb_run(['wait-for-device'])
|
||||
self._adb_run(['forward', '--remove-all'])
|
||||
self._adb_run(['reverse', '--remove-all'])
|
||||
# "adb reverse" basically forwards network connection from device to
|
||||
# host.
|
||||
for port in _wptserve_ports:
|
||||
self._adb_run(['reverse', 'tcp:%d' % port, 'tcp:%d' % port])
|
||||
|
||||
def start(self, **kwargs):
|
||||
self.server.start(block=False)
|
||||
|
||||
def stop(self, force=False):
|
||||
self.server.stop(force=force)
|
||||
|
||||
def pid(self):
|
||||
return self.server.pid
|
||||
|
||||
def is_alive(self):
|
||||
# TODO(ato): This only indicates the driver is alive,
|
||||
# and doesn't say anything about whether a browser session
|
||||
# is active.
|
||||
return self.server.is_alive()
|
||||
|
||||
def cleanup(self):
|
||||
self.stop()
|
||||
self._adb_run(['forward', '--remove-all'])
|
||||
self._adb_run(['reverse', '--remove-all'])
|
||||
|
||||
def executor_browser(self):
|
||||
return ExecutorBrowser, {"webdriver_url": self.server.url}
|
||||
self.wptserver_ports = _wptserve_ports
|
||||
|
|
|
@ -113,7 +113,7 @@ class ChromeBrowser(Browser):
|
|||
"""
|
||||
|
||||
def __init__(self, logger, binary, webdriver_binary="chromedriver",
|
||||
webdriver_args=None):
|
||||
webdriver_args=None, **kwargs):
|
||||
"""Creates a new representation of Chrome. The `binary` argument gives
|
||||
the browser binary to use for testing."""
|
||||
Browser.__init__(self, logger)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import mozprocess
|
||||
import subprocess
|
||||
|
||||
from .base import Browser, ExecutorBrowser, require_arg
|
||||
|
@ -68,21 +69,75 @@ def env_options():
|
|||
# allow the use of host-resolver-rules in lieu of modifying /etc/hosts file
|
||||
return {"server_host": "127.0.0.1"}
|
||||
|
||||
class LogcatRunner(object):
|
||||
def __init__(self, logger, browser, remote_queue):
|
||||
self.logger = logger
|
||||
self.browser = browser
|
||||
self.remote_queue = remote_queue
|
||||
|
||||
class ChromeAndroidBrowser(Browser):
|
||||
"""Chrome is backed by chromedriver, which is supplied through
|
||||
``wptrunner.webdriver.ChromeDriverServer``.
|
||||
"""
|
||||
def start(self):
|
||||
try:
|
||||
self._run()
|
||||
except KeyboardInterrupt:
|
||||
self.stop()
|
||||
|
||||
def __init__(self, logger, package_name, webdriver_binary="chromedriver",
|
||||
def _run(self):
|
||||
try:
|
||||
# TODO: adb logcat -c fail randomly with message
|
||||
# "failed to clear the 'main' log"
|
||||
self.browser.clear_log()
|
||||
except subprocess.CalledProcessError:
|
||||
self.logger.error("Failed to clear logcat buffer")
|
||||
|
||||
self._cmd = self.browser.logcat_cmd()
|
||||
self._proc = mozprocess.ProcessHandler(
|
||||
self._cmd,
|
||||
processOutputLine=self.on_output,
|
||||
storeOutput=False)
|
||||
self._proc.run()
|
||||
|
||||
def _send_message(self, command, *args):
|
||||
try:
|
||||
self.remote_queue.put((command, args))
|
||||
except AssertionError:
|
||||
self.logger.warning("Error when send to remote queue")
|
||||
|
||||
def stop(self, force=False):
|
||||
if self.is_alive():
|
||||
kill_result = self._proc.kill()
|
||||
if force and kill_result != 0:
|
||||
self._proc.kill(9)
|
||||
|
||||
def is_alive(self):
|
||||
return hasattr(self._proc, "proc") and self._proc.poll() is None
|
||||
|
||||
def on_output(self, line):
|
||||
data = {
|
||||
"process": "LOGCAT",
|
||||
"command": "logcat",
|
||||
"data": line
|
||||
}
|
||||
self._send_message("log", "process_output", data)
|
||||
|
||||
class ChromeAndroidBrowserBase(Browser):
|
||||
def __init__(self, logger,
|
||||
webdriver_binary="chromedriver",
|
||||
remote_queue = None,
|
||||
device_serial=None, webdriver_args=None):
|
||||
Browser.__init__(self, logger)
|
||||
self.package_name = package_name
|
||||
super(ChromeAndroidBrowserBase, self).__init__(logger)
|
||||
self.device_serial = device_serial
|
||||
self.remote_queue = remote_queue
|
||||
self.server = ChromeDriverServer(self.logger,
|
||||
binary=webdriver_binary,
|
||||
args=webdriver_args)
|
||||
if self.remote_queue is not None:
|
||||
self.logcat_runner = LogcatRunner(self.logger,
|
||||
self, self.remote_queue)
|
||||
|
||||
def setup(self):
|
||||
self.setup_adb_reverse()
|
||||
if self.remote_queue is not None:
|
||||
self.logcat_runner.start()
|
||||
|
||||
def _adb_run(self, args):
|
||||
cmd = ['adb']
|
||||
|
@ -92,14 +147,6 @@ class ChromeAndroidBrowser(Browser):
|
|||
self.logger.info(' '.join(cmd))
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
def setup_adb_reverse(self):
|
||||
self._adb_run(['wait-for-device'])
|
||||
self._adb_run(['forward', '--remove-all'])
|
||||
self._adb_run(['reverse', '--remove-all'])
|
||||
# "adb reverse" forwards network connection from device to host.
|
||||
for port in _wptserve_ports:
|
||||
self._adb_run(['reverse', 'tcp:%d' % port, 'tcp:%d' % port])
|
||||
|
||||
def start(self, **kwargs):
|
||||
self.server.start(block=False)
|
||||
|
||||
|
@ -119,6 +166,40 @@ class ChromeAndroidBrowser(Browser):
|
|||
self.stop()
|
||||
self._adb_run(['forward', '--remove-all'])
|
||||
self._adb_run(['reverse', '--remove-all'])
|
||||
if self.remote_queue is not None:
|
||||
self.logcat_runner.stop(force=True)
|
||||
|
||||
def executor_browser(self):
|
||||
return ExecutorBrowser, {"webdriver_url": self.server.url}
|
||||
|
||||
def clear_log(self):
|
||||
self._adb_run(['logcat', '-c'])
|
||||
|
||||
def logcat_cmd(self):
|
||||
cmd = ['adb']
|
||||
if self.device_serial:
|
||||
cmd.extend(['-s', self.device_serial])
|
||||
cmd.extend(['logcat', '*:D'])
|
||||
return cmd
|
||||
|
||||
def setup_adb_reverse(self):
|
||||
self._adb_run(['wait-for-device'])
|
||||
self._adb_run(['forward', '--remove-all'])
|
||||
self._adb_run(['reverse', '--remove-all'])
|
||||
# "adb reverse" forwards network connection from device to host.
|
||||
for port in self.wptserver_ports:
|
||||
self._adb_run(['reverse', 'tcp:%d' % port, 'tcp:%d' % port])
|
||||
|
||||
class ChromeAndroidBrowser(ChromeAndroidBrowserBase):
|
||||
"""Chrome is backed by chromedriver, which is supplied through
|
||||
``wptrunner.webdriver.ChromeDriverServer``.
|
||||
"""
|
||||
|
||||
def __init__(self, logger, package_name,
|
||||
webdriver_binary="chromedriver",
|
||||
remote_queue = None,
|
||||
device_serial=None, webdriver_args=None):
|
||||
super(ChromeAndroidBrowser, self).__init__(logger,
|
||||
webdriver_binary, remote_queue, device_serial, webdriver_args)
|
||||
self.package_name = package_name
|
||||
self.wptserver_ports = _wptserve_ports
|
||||
|
|
|
@ -51,7 +51,7 @@ class ChromeiOSBrowser(Browser):
|
|||
|
||||
init_timeout = 120
|
||||
|
||||
def __init__(self, logger, webdriver_binary, webdriver_args=None):
|
||||
def __init__(self, logger, webdriver_binary, webdriver_args=None, **kwargs):
|
||||
"""Creates a new representation of Chrome."""
|
||||
Browser.__init__(self, logger)
|
||||
self.server = CWTChromeDriverServer(self.logger,
|
||||
|
|
|
@ -68,7 +68,8 @@ class EdgeBrowser(Browser):
|
|||
used_ports = set()
|
||||
init_timeout = 60
|
||||
|
||||
def __init__(self, logger, webdriver_binary, timeout_multiplier=None, webdriver_args=None):
|
||||
def __init__(self, logger, webdriver_binary,
|
||||
timeout_multiplier=None, webdriver_args=None, **kwargs):
|
||||
Browser.__init__(self, logger)
|
||||
self.server = EdgeDriverServer(self.logger,
|
||||
binary=webdriver_binary,
|
||||
|
|
|
@ -85,7 +85,7 @@ class EdgeChromiumBrowser(Browser):
|
|||
"""
|
||||
|
||||
def __init__(self, logger, binary, webdriver_binary="msedgedriver",
|
||||
webdriver_args=None):
|
||||
webdriver_args=None, **kwargs):
|
||||
"""Creates a new representation of MicrosoftEdge. The `binary` argument gives
|
||||
the browser binary to use for testing."""
|
||||
Browser.__init__(self, logger)
|
||||
|
|
|
@ -72,6 +72,6 @@ def run_info_extras(**kwargs):
|
|||
|
||||
class EpiphanyBrowser(WebKitBrowser):
|
||||
def __init__(self, logger, binary=None, webdriver_binary=None,
|
||||
webdriver_args=None):
|
||||
webdriver_args=None, **kwargs):
|
||||
WebKitBrowser.__init__(self, logger, binary, webdriver_binary,
|
||||
webdriver_args)
|
||||
|
|
|
@ -43,7 +43,7 @@ def env_options():
|
|||
class InternetExplorerBrowser(Browser):
|
||||
used_ports = set()
|
||||
|
||||
def __init__(self, logger, webdriver_binary, webdriver_args=None):
|
||||
def __init__(self, logger, webdriver_binary, webdriver_args=None, **kwargs):
|
||||
Browser.__init__(self, logger)
|
||||
self.server = InternetExplorerDriverServer(self.logger,
|
||||
binary=webdriver_binary,
|
||||
|
|
|
@ -71,7 +71,7 @@ class OperaBrowser(Browser):
|
|||
"""
|
||||
|
||||
def __init__(self, logger, binary, webdriver_binary="operadriver",
|
||||
webdriver_args=None):
|
||||
webdriver_args=None, **kwargs):
|
||||
"""Creates a new representation of Opera. The `binary` argument gives
|
||||
the browser binary to use for testing."""
|
||||
Browser.__init__(self, logger)
|
||||
|
|
|
@ -58,7 +58,7 @@ class SafariBrowser(Browser):
|
|||
``wptrunner.webdriver.SafariDriverServer``.
|
||||
"""
|
||||
|
||||
def __init__(self, logger, webdriver_binary, webdriver_args=None):
|
||||
def __init__(self, logger, webdriver_binary, webdriver_args=None, **kwargs):
|
||||
"""Creates a new representation of Safari. The `webdriver_binary`
|
||||
argument gives the WebDriver binary to use for testing. (The browser
|
||||
binary location cannot be specified, as Safari and SafariDriver are
|
||||
|
|
|
@ -228,7 +228,7 @@ class SauceException(Exception):
|
|||
class SauceBrowser(Browser):
|
||||
init_timeout = 300
|
||||
|
||||
def __init__(self, logger, sauce_config):
|
||||
def __init__(self, logger, sauce_config, **kwargs):
|
||||
Browser.__init__(self, logger)
|
||||
self.sauce_config = sauce_config
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ def update_properties():
|
|||
|
||||
class ServoBrowser(NullBrowser):
|
||||
def __init__(self, logger, binary, debug_info=None, binary_args=None,
|
||||
user_stylesheets=None, ca_certificate_path=None):
|
||||
user_stylesheets=None, ca_certificate_path=None, **kwargs):
|
||||
NullBrowser.__init__(self, logger)
|
||||
self.binary = binary
|
||||
self.debug_info = debug_info
|
||||
|
|
|
@ -77,7 +77,8 @@ class ServoWebDriverBrowser(Browser):
|
|||
init_timeout = 300 # Large timeout for cases where we're booting an Android emulator
|
||||
|
||||
def __init__(self, logger, binary, debug_info=None, webdriver_host="127.0.0.1",
|
||||
server_config=None, binary_args=None, user_stylesheets=None, headless=None):
|
||||
server_config=None, binary_args=None,
|
||||
user_stylesheets=None, headless=None, **kwargs):
|
||||
Browser.__init__(self, logger)
|
||||
self.binary = binary
|
||||
self.binary_args = binary_args or []
|
||||
|
|
|
@ -82,7 +82,7 @@ class WebKitBrowser(Browser):
|
|||
"""
|
||||
|
||||
def __init__(self, logger, binary, webdriver_binary=None,
|
||||
webdriver_args=None):
|
||||
webdriver_args=None, **kwargs):
|
||||
Browser.__init__(self, logger)
|
||||
self.binary = binary
|
||||
self.server = WebKitDriverServer(self.logger, binary=webdriver_binary,
|
||||
|
|
|
@ -76,6 +76,6 @@ def run_info_extras(**kwargs):
|
|||
|
||||
class WebKitGTKMiniBrowser(WebKitBrowser):
|
||||
def __init__(self, logger, binary=None, webdriver_binary=None,
|
||||
webdriver_args=None):
|
||||
webdriver_args=None, **kwargs):
|
||||
WebKitBrowser.__init__(self, logger, binary, webdriver_binary,
|
||||
webdriver_args)
|
||||
|
|
|
@ -272,5 +272,6 @@ class ChromiumFormatter(base.BaseFormatter):
|
|||
return json.dumps(final_result)
|
||||
|
||||
def process_output(self, data):
|
||||
if 'command' in data and 'chromedriver' in data['command']:
|
||||
cmd = data.get("command", "")
|
||||
if any(c in cmd for c in ["chromedriver", "logcat"]):
|
||||
self.browser_log.append(data['data'])
|
||||
|
|
|
@ -361,7 +361,8 @@ class TestRunnerManager(threading.Thread):
|
|||
spins."""
|
||||
self.recording.set(["testrunner", "startup"])
|
||||
self.logger = structuredlog.StructuredLogger(self.suite_name)
|
||||
with self.browser_cls(self.logger, **self.browser_kwargs) as browser:
|
||||
with self.browser_cls(self.logger, remote_queue=self.command_queue,
|
||||
**self.browser_kwargs) as browser:
|
||||
self.browser = BrowserManager(self.logger,
|
||||
browser,
|
||||
self.command_queue,
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<link rel="help" href="https://w3c.github.io/webdriver/">
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script src=/resources/WebIDLParser.js></script>
|
||||
<script src=/resources/idlharness.js></script>
|
||||
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
promise_test(async () => {
|
||||
const idl_array = new IdlArray();
|
||||
const idl = await fetch("/interfaces/webdriver.idl").then(r => r.text());
|
||||
const html = await fetch("/interfaces/html.idl").then(r => r.text());
|
||||
idl_array.add_idls(idl);
|
||||
idl_array.add_dependency_idls(html);
|
||||
idl_array.add_objects({
|
||||
Navigator: ["navigator"]
|
||||
});
|
||||
idl_array.test();
|
||||
}, "Test IDL implementation of webdriver API");
|
||||
</script>
|
|
@ -0,0 +1,16 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
|
||||
// https://w3c.github.io/webdriver/
|
||||
|
||||
"use strict";
|
||||
|
||||
idl_test(
|
||||
["webdriver"],
|
||||
["html"],
|
||||
idl_array => {
|
||||
idl_array.add_objects({
|
||||
Navigator: ["navigator"]
|
||||
});
|
||||
}
|
||||
);
|
|
@ -0,0 +1,11 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
|
||||
// https://drafts.css-houdini.org/worklets/
|
||||
|
||||
'use strict';
|
||||
|
||||
idl_test(
|
||||
['worklets'],
|
||||
[]
|
||||
);
|
|
@ -1,13 +0,0 @@
|
|||
importScripts("/resources/testharness.js");
|
||||
importScripts("/resources/WebIDLParser.js", "/resources/idlharness.js");
|
||||
|
||||
// https://drafts.css-houdini.org/worklets/
|
||||
|
||||
promise_test(async () => {
|
||||
const idl = await fetch('/interfaces/worklets.idl').then(r => r.text());
|
||||
|
||||
const idl_array = new IdlArray();
|
||||
idl_array.add_idls(idl);
|
||||
idl_array.test();
|
||||
}, 'worklets interfaces');
|
||||
done();
|
Loading…
Add table
Add a link
Reference in a new issue