Update web-platform-tests to revision b'79fa4cf76e0d39e3fc1b7ead85e067b0a064b892'

This commit is contained in:
WPT Sync Bot 2021-03-06 08:21:21 +00:00
parent 4a46a476d7
commit 31f9c69336
83 changed files with 2200 additions and 954 deletions

View file

@ -4,7 +4,7 @@
expected: TIMEOUT
[Opening a blob URL in a new window immediately before revoking it works.]
expected: TIMEOUT
expected: FAIL
[Fetching a blob URL immediately before revoking it works in an iframe.]
expected: FAIL

View file

@ -326,3 +326,153 @@
[margin-right length(mm) / values]
expected: FAIL
[color color(rgba) / values]
expected: FAIL
[font-size length(pt) / values]
expected: FAIL
[font-size length(pc) / values]
expected: FAIL
[font-size length(px) / values]
expected: FAIL
[font-size length(em) / values]
expected: FAIL
[font-size length(ex) / values]
expected: FAIL
[font-size length(mm) / values]
expected: FAIL
[font-size length(cm) / values]
expected: FAIL
[font-size length(in) / values]
expected: FAIL
[font-size percentage(%) / values]
expected: FAIL
[font-weight font-weight(keyword) / values]
expected: FAIL
[font-weight font-weight(numeric) / values]
expected: FAIL
[line-height number(integer) / values]
expected: FAIL
[line-height number(decimal) / values]
expected: FAIL
[line-height length(pt) / values]
expected: FAIL
[line-height length(pc) / values]
expected: FAIL
[line-height length(px) / values]
expected: FAIL
[line-height length(em) / values]
expected: FAIL
[line-height length(ex) / values]
expected: FAIL
[line-height length(mm) / values]
expected: FAIL
[line-height length(cm) / values]
expected: FAIL
[line-height length(in) / values]
expected: FAIL
[line-height percentage(%) / values]
expected: FAIL
[letter-spacing length(pt) / values]
expected: FAIL
[letter-spacing length(pc) / values]
expected: FAIL
[letter-spacing length(px) / values]
expected: FAIL
[letter-spacing length(em) / values]
expected: FAIL
[letter-spacing length(ex) / values]
expected: FAIL
[letter-spacing length(mm) / values]
expected: FAIL
[letter-spacing length(cm) / values]
expected: FAIL
[letter-spacing length(in) / values]
expected: FAIL
[word-spacing length(pt) / values]
expected: FAIL
[word-spacing length(pc) / values]
expected: FAIL
[word-spacing length(px) / values]
expected: FAIL
[word-spacing length(em) / values]
expected: FAIL
[word-spacing length(ex) / values]
expected: FAIL
[word-spacing length(mm) / values]
expected: FAIL
[word-spacing length(cm) / values]
expected: FAIL
[word-spacing length(in) / values]
expected: FAIL
[word-spacing percentage(%) / values]
expected: FAIL
[text-indent length(pt) / values]
expected: FAIL
[text-indent length(pc) / values]
expected: FAIL
[text-indent length(px) / values]
expected: FAIL
[text-indent length(em) / values]
expected: FAIL
[text-indent length(ex) / values]
expected: FAIL
[text-indent length(mm) / values]
expected: FAIL
[text-indent length(cm) / values]
expected: FAIL
[text-indent length(in) / values]
expected: FAIL
[text-indent percentage(%) / values]
expected: FAIL
[text-shadow shadow(shadow) / values]
expected: FAIL

View file

@ -236,156 +236,6 @@
[margin-right length(mm) / events]
expected: FAIL
[max-height length(ex) / events]
expected: FAIL
[max-height length(mm) / events]
expected: FAIL
[max-height length(cm) / events]
expected: FAIL
[max-height length(in) / events]
expected: FAIL
[max-height percentage(%) / events]
expected: FAIL
[max-width length(pt) / events]
expected: FAIL
[max-width length(pc) / events]
expected: FAIL
[max-width length(px) / events]
expected: FAIL
[max-width length(em) / events]
expected: FAIL
[max-width length(ex) / events]
expected: FAIL
[max-width length(mm) / events]
expected: FAIL
[max-width length(cm) / events]
expected: FAIL
[max-width length(in) / events]
expected: FAIL
[max-width percentage(%) / events]
expected: FAIL
[top length(pt) / events]
expected: FAIL
[top length(pc) / events]
expected: FAIL
[top length(px) / events]
expected: FAIL
[top length(em) / events]
expected: FAIL
[top length(ex) / events]
expected: FAIL
[top length(mm) / events]
expected: FAIL
[top length(cm) / events]
expected: FAIL
[top length(in) / events]
expected: FAIL
[top percentage(%) / events]
expected: FAIL
[right length(pt) / events]
expected: FAIL
[right length(pc) / events]
expected: FAIL
[right length(px) / events]
expected: FAIL
[right length(em) / events]
expected: FAIL
[right length(ex) / events]
expected: FAIL
[right length(mm) / events]
expected: FAIL
[right length(cm) / events]
expected: FAIL
[right length(in) / events]
expected: FAIL
[right percentage(%) / events]
expected: FAIL
[bottom length(pt) / events]
expected: FAIL
[bottom length(pc) / events]
expected: FAIL
[bottom length(px) / events]
expected: FAIL
[bottom length(em) / events]
expected: FAIL
[bottom length(ex) / events]
expected: FAIL
[bottom length(mm) / events]
expected: FAIL
[bottom length(cm) / events]
expected: FAIL
[bottom length(in) / events]
expected: FAIL
[bottom percentage(%) / events]
expected: FAIL
[left length(pt) / events]
expected: FAIL
[left length(pc) / events]
expected: FAIL
[left length(px) / events]
expected: FAIL
[left length(em) / events]
expected: FAIL
[left length(ex) / events]
expected: FAIL
[left length(mm) / events]
expected: FAIL
[left length(cm) / events]
expected: FAIL
[left length(in) / events]
expected: FAIL
[left percentage(%) / events]
expected: FAIL
[color color(rgba) / events]
expected: FAIL
@ -506,3 +356,126 @@
[word-spacing percentage(%) / events]
expected: FAIL
[background-color color(rgba) / events]
expected: FAIL
[border-top-width length(pt) / events]
expected: FAIL
[border-top-width length(pc) / events]
expected: FAIL
[border-top-width length(px) / events]
expected: FAIL
[border-top-width length(em) / events]
expected: FAIL
[border-top-width length(ex) / events]
expected: FAIL
[border-top-width length(mm) / events]
expected: FAIL
[border-top-width length(cm) / events]
expected: FAIL
[border-top-width length(in) / events]
expected: FAIL
[border-right-width length(pt) / events]
expected: FAIL
[border-right-width length(pc) / events]
expected: FAIL
[border-right-width length(px) / events]
expected: FAIL
[border-right-width length(em) / events]
expected: FAIL
[border-right-width length(ex) / events]
expected: FAIL
[border-right-width length(mm) / events]
expected: FAIL
[border-right-width length(cm) / events]
expected: FAIL
[border-right-width length(in) / events]
expected: FAIL
[border-bottom-width length(pt) / events]
expected: FAIL
[border-bottom-width length(pc) / events]
expected: FAIL
[border-bottom-width length(px) / events]
expected: FAIL
[border-bottom-width length(em) / events]
expected: FAIL
[border-bottom-width length(ex) / events]
expected: FAIL
[border-bottom-width length(mm) / events]
expected: FAIL
[border-bottom-width length(cm) / events]
expected: FAIL
[border-bottom-width length(in) / events]
expected: FAIL
[border-left-width length(pt) / events]
expected: FAIL
[border-left-width length(pc) / events]
expected: FAIL
[border-left-width length(px) / events]
expected: FAIL
[border-left-width length(em) / events]
expected: FAIL
[border-left-width length(ex) / events]
expected: FAIL
[border-left-width length(mm) / events]
expected: FAIL
[border-left-width length(cm) / events]
expected: FAIL
[border-left-width length(in) / events]
expected: FAIL
[border-top-color color(rgba) / events]
expected: FAIL
[border-right-color color(rgba) / events]
expected: FAIL
[border-bottom-color color(rgba) / events]
expected: FAIL
[border-left-color color(rgba) / events]
expected: FAIL
[padding-bottom length(pt) / events]
expected: FAIL
[padding-bottom length(pc) / events]
expected: FAIL
[padding-bottom length(px) / events]
expected: FAIL
[padding-bottom length(em) / events]
expected: FAIL

View file

@ -326,3 +326,153 @@
[margin-right length(mm) / values]
expected: FAIL
[max-height length(ex) / values]
expected: FAIL
[max-height length(mm) / values]
expected: FAIL
[max-height length(cm) / values]
expected: FAIL
[max-height length(in) / values]
expected: FAIL
[max-height percentage(%) / values]
expected: FAIL
[max-width length(pt) / values]
expected: FAIL
[max-width length(pc) / values]
expected: FAIL
[max-width length(px) / values]
expected: FAIL
[max-width length(em) / values]
expected: FAIL
[max-width length(ex) / values]
expected: FAIL
[max-width length(mm) / values]
expected: FAIL
[max-width length(cm) / values]
expected: FAIL
[max-width length(in) / values]
expected: FAIL
[max-width percentage(%) / values]
expected: FAIL
[top length(pt) / values]
expected: FAIL
[top length(pc) / values]
expected: FAIL
[top length(px) / values]
expected: FAIL
[top length(em) / values]
expected: FAIL
[top length(ex) / values]
expected: FAIL
[top length(mm) / values]
expected: FAIL
[top length(cm) / values]
expected: FAIL
[top length(in) / values]
expected: FAIL
[top percentage(%) / values]
expected: FAIL
[right length(pt) / values]
expected: FAIL
[right length(pc) / values]
expected: FAIL
[right length(px) / values]
expected: FAIL
[right length(em) / values]
expected: FAIL
[right length(ex) / values]
expected: FAIL
[right length(mm) / values]
expected: FAIL
[right length(cm) / values]
expected: FAIL
[right length(in) / values]
expected: FAIL
[right percentage(%) / values]
expected: FAIL
[bottom length(pt) / values]
expected: FAIL
[bottom length(pc) / values]
expected: FAIL
[bottom length(px) / values]
expected: FAIL
[bottom length(em) / values]
expected: FAIL
[bottom length(ex) / values]
expected: FAIL
[bottom length(mm) / values]
expected: FAIL
[bottom length(cm) / values]
expected: FAIL
[bottom length(in) / values]
expected: FAIL
[bottom percentage(%) / values]
expected: FAIL
[left length(pt) / values]
expected: FAIL
[left length(pc) / values]
expected: FAIL
[left length(px) / values]
expected: FAIL
[left length(em) / values]
expected: FAIL
[left length(ex) / values]
expected: FAIL
[left length(mm) / values]
expected: FAIL
[left length(cm) / values]
expected: FAIL
[left length(in) / values]
expected: FAIL
[left percentage(%) / values]
expected: FAIL

View file

@ -8,3 +8,12 @@
[A custom property referencing a non-existent variable is treated as unset]
expected: FAIL
[Custom properties in a cycle become guaranteed-invalid]
expected: FAIL
[A custom property referencing a cycle becomes guaranteed-invalid]
expected: FAIL
[A custom property referencing a non-existent variable becomes guaranteed-invalid]
expected: FAIL

View file

@ -1,7 +1,14 @@
[request-upload.any.html]
expected: TIMEOUT
[Fetch with POST with ReadableStream]
expected: FAIL
[Fetch with POST with text body on 421 response should be retried once on new connection.]
expected: FAIL
[Fetch with POST with ReadableStream on 421 response should return the response and not retry.]
expected: TIMEOUT
[request-upload.any.serviceworker.html]
expected: ERROR
@ -10,6 +17,13 @@
expected: ERROR
[request-upload.any.worker.html]
expected: TIMEOUT
[Fetch with POST with ReadableStream]
expected: FAIL
[Fetch with POST with text body on 421 response should be retried once on new connection.]
expected: FAIL
[Fetch with POST with ReadableStream on 421 response should return the response and not retry.]
expected: TIMEOUT

View file

@ -41,3 +41,45 @@
[Content-Length%3A%20]
expected: FAIL
[Input: "Content-Length: 42,42". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 42\\r\\nContent-Length: 42,42". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 30,30". Expected: 30.]
expected: FAIL
[Input: "Content-Length: 30\\r\\nContent-Length: 30,30". Expected: 30.]
expected: FAIL
[Input: "Content-Length: aaaah\\r\\nContent-Length: aaaah". Expected: 42.]
expected: FAIL
[Input: "Content-Length: aaaah, aaaah". Expected: 42.]
expected: FAIL
[Input: "Content-Length: aaaah". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 42s". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 30s". Expected: 42.]
expected: FAIL
[Input: "Content-Length: -1". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 0x20". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 030\\r\\nContent-Length: 30". Expected: network error.]
expected: FAIL
[Input: "Content-Length: \\"30\\"". Expected: 42.]
expected: FAIL
[Input: "Content-Length: ". Expected: 42.]
expected: FAIL

View file

@ -309,12 +309,9 @@
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
expected: NOTRUN
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL

View file

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

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

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

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener of discarded nested browsing context]
expected: FAIL

View file

@ -14,3 +14,6 @@
[Host element with delegatesFocus should support autofocus]
expected: FAIL
[Non-HTMLElement should not support autofocus]
expected: FAIL

View file

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

View file

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

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-2.html]
expected: TIMEOUT
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN

View file

@ -1,4 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL

View file

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

View file

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

View file

@ -2,9 +2,6 @@
[input type search: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type password: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
expected: FAIL
@ -23,42 +20,15 @@
[input type text: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart a second time (must not fire select)]
expected: FAIL
[input type password: select() a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[textarea: setRangeText() 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 text: selectionEnd 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: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type search: selectionDirection 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 tel: setRangeText() a second time (must not fire select)]
expected: FAIL
@ -68,9 +38,48 @@
[input type url: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type url: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart 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: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type search: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type tel: select() a second time (must not fire select)]
expected: FAIL
[input type tel: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type tel: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type url: selectionDirection 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 password: selectionStart 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

View file

@ -0,0 +1,4 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -3,6 +3,3 @@
[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

View file

@ -1,9 +1,10 @@
[promise-job-entry-different-function-realm.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
expected: FAIL
expected: TIMEOUT
[Thenable resolution]
expected: FAIL
@ -12,5 +13,5 @@
expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise]
expected: FAIL
expected: TIMEOUT

View file

@ -620,3 +620,9 @@
[X SNR (-300.5653344749286 dB) is not greater than or equal to 65.737. Got -300.5653344749286.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[15240\]\t-6.9001540120165462e-27\t3.3531737327575684e-1\t3.3531737327575684e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\t[15241\]\t4.5592646835272248e-41\t3.9367997646331787e-1\t3.9367997646331787e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 3.9367997646331787e-1 at index of 15241.\n\tMax RelError of 1.0000000000000000e+0 at index of 15240.\n]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[7189\]\t-7.1126672850560558e-27\t-9.8956179618835449e-1\t9.8956179618835449e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[7190\]\t-8.8409073650836945e-2\t-9.9664616584777832e-1\t9.0823709219694138e-1\t9.1129341918891205e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.8956179618835449e-1 at index of 7189.\n\tMax RelError of 1.0000000000000000e+0 at index of 7189.\n]
expected: FAIL

View file

@ -2,6 +2,3 @@
[test_element_in_object]
expected: FAIL
[test_element_in_collection]
expected: FAIL

View file

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

View file

@ -53703,6 +53703,19 @@
{}
]
],
"floats-placement-004.html": [
"bbfc9196c867206bef20bc9e16a79325c7b77ab0",
[
null,
[
[
"/css/CSS2/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"floats-placement-vertical-001a.xht": [
"07de02887e7f28693ef23b518c4729602ff77c3b",
[
@ -285754,6 +285767,14 @@
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
[]
],
"javascript-url-srcdoc-cross-origin-iframe-inheritance-helper.sub.html": [
"afe4753cf93f8d68884eb731ce69e004a4b5e9ff",
[]
],
"navigate-parent-to-blob.html": [
"df4a4438935a5798d3672111081984d6ef9d0ef1",
[]
],
"navigate-self-to-blob.html": [
"9ea069969cafff022e94fef3de535feafaca1de7",
[]
@ -285762,6 +285783,10 @@
"2642b0fa06730692aa4617260b6903b7f698b4b4",
[]
],
"postmessage-top.html": [
"4f83a58dd4a80b5a6171266d2944e628d204e434",
[]
],
"srcdoc-child-frame.html": [
"9148be203d30ea043a56b38305877142735a4c49",
[]
@ -286472,7 +286497,7 @@
[]
],
"checkReport.sub.js": [
"f188d18207e71569f004070ec4bc7d367ae9d6b0",
"ecbc69239098c6c99699e6678ec618b928cc31f1",
[]
],
"dedicated-worker-helper.js": [
@ -324343,7 +324368,7 @@
[]
],
"common.js": [
"65feec3b6b61c1342217ba550652f9dbfa684d6c",
"038ef07a6d92af585101c864cdd048cffb68f3bc",
[]
],
"scroll-target-align-001-iframe.html": [
@ -341895,7 +341920,7 @@
[]
],
"network-partition-key.py": [
"61e0496fca35d359008a11f2b581555cb6d94027",
"d59c74137b80a7135bb9b2c0b39014b764a61428",
[]
],
"network-partition-worker-checker.html": [
@ -347228,7 +347253,7 @@
},
"resources": {
"dispatcher.js": [
"45225a7f263de4ac7700febf2f99b91c473f8a8d",
"dd96310e410b177d37c3224ece2b4cf87be34754",
[]
],
"dispatcher.py": [
@ -357597,11 +357622,11 @@
[]
],
"webgl1.idl": [
"95a0fa342652d5ed76ad567f2a5437b7c888f7e0",
"46d629193c9139de5a570734c6ecaf249e3e9600",
[]
],
"webgl2.idl": [
"b2e660e6b6545f33e4acb6e378bce3517ab4d4cb",
"518637fcc72d3e02924f00d269bf1c56794806dd",
[]
],
"webhid.idl": [
@ -365485,7 +365510,7 @@
[]
],
"fetch-event-test-worker.js": [
"ba8204b9bb8ae94906bb4b0964c999a6c38fc207",
"bb59bc928651acd5274431e6d31711c4288523ba",
[]
],
"fetch-event-within-sw-worker.js": [
@ -378508,7 +378533,7 @@
"urlpattern": {
"resources": {
"urlpatterntestdata.json": [
"9e7fe20005bed1aa02a9db4dba749c3ba134449a",
"ae9405ea4b1292a210c10add867f6cb0bff12013",
[]
]
}
@ -380567,6 +380592,10 @@
"META.yml": [
"be8cb028f08842589d6c2f06391bc5c8469048d2",
[]
],
"RTCRtpSynchronizationSource-helper.js": [
"10cfd651554a259817cd34521ab44556063f4f44",
[]
]
},
"webrtc-ice": {
@ -406831,6 +406860,13 @@
{}
]
],
"blob-url-inherits-from-initiator.sub.html": [
"72d59325d196a816544a3a82c466e2e688484c3c",
[
null,
{}
]
],
"document-write-iframe.html": [
"a84e3a37031280ec33ccb98307f422e3ca468744",
[
@ -406873,6 +406909,13 @@
{}
]
],
"javascript-url-srcdoc-cross-origin-iframe-inheritance.html": [
"81210fe30f41faf10a2ca9704c9295bbd228ecfd",
[
null,
{}
]
],
"sandboxed-blob-scheme.html": [
"590fa7ec1a9caafc6f18e6821f100629688bd300",
[
@ -415008,7 +415051,7 @@
]
],
"env-in-custom-properties.tentative.html": [
"6dadcc586b039b7fe4d69dc6ce4678a601343b77",
"24afe2963b938a01d73fc6ff02eb944ee3822b85",
[
null,
{}
@ -423437,6 +423480,13 @@
{}
]
],
"position-sticky-scrollIntoView.html": [
"6fb4723529e49a550577d6f38d884028acc277f5",
[
null,
{}
]
],
"position-sticky-scrolled-remove-sibling.html": [
"f2cf8a98b30a2c19a986d31bc4da99f0bdd8df9d",
[
@ -423444,6 +423494,13 @@
{}
]
],
"position-sticky-top-and-bottom.html": [
"c790eaaf3ee2b62916e5f151dea10af882c5568a",
[
null,
{}
]
],
"position-sticky-top.html": [
"9929fc734bab4c9816200bdb04e859eedd11b110",
[
@ -423616,7 +423673,7 @@
]
],
"unit-cycles.html": [
"5301b6fcc77b1b7885ef7602410e4f4586391b4f",
"f8eba17f2183bbc6fc02e9e5ee2cf5fc55d30d56",
[
null,
{}
@ -423630,7 +423687,7 @@
]
],
"var-reference-registered-properties-cycles.html": [
"e94da5ddaef0c6906acc37ac78cab571504535d4",
"91792ef51db097ed626839537b40814c12b98cef",
[
null,
{}
@ -434233,7 +434290,7 @@
]
],
"variable-substitution-variable-declaration.html": [
"678d05a1acc234362c1f8ac54f6a2190fc3a9fb1",
"0b0ab1f0f0f868fa86673f51d6ada27245926add",
[
null,
{}
@ -434282,7 +434339,7 @@
]
],
"variables-substitute-guaranteed-invalid.html": [
"c30e8746db516f2ef35e904c948801b184ceecae",
"4abfe28d1f21b2891599543b3972b26fbd15b77e",
[
null,
{}
@ -443066,7 +443123,7 @@
]
],
"caretnavigation.html": [
"defe7fecfc2850355fe21da8a6d14ed6c5265885",
"c0a8eca4ac23e179ab7e8d7df741417564c4fda1",
[
null,
{
@ -458162,7 +458219,7 @@
]
],
"request-upload.any.js": [
"1412816a3c220d60ca1b3c525ac5953d10157c3c",
"82b1ac93c996dc76a641fc7f85e342c513ffe3d8",
[
"fetch/api/basic/request-upload.any.html",
{
@ -458174,6 +458231,14 @@
[
"script",
"../resources/utils.js"
],
[
"script",
"/common/utils.js"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
@ -458189,6 +458254,14 @@
[
"script",
"../resources/utils.js"
],
[
"script",
"/common/utils.js"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
@ -458204,6 +458277,14 @@
[
"script",
"../resources/utils.js"
],
[
"script",
"/common/utils.js"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
@ -458219,6 +458300,14 @@
[
"script",
"../resources/utils.js"
],
[
"script",
"/common/utils.js"
],
[
"script",
"/common/get-host-info.sub.js"
]
]
}
@ -464082,7 +464171,7 @@
]
],
"parsing.window.js": [
"73fbb482e042c1f05cfedfac8927ea789991265b",
"5028ad943dee6ab7bdd915dd61dd87461b059ff3",
[
"fetch/content-length/parsing.window.html",
{}
@ -509554,7 +509643,7 @@
]
],
"elementTiming.html": [
"cdfdff55f33ba591d5068ed0aea644527b12bc4e",
"ec71e0477ba1ff98836bca7db9a19484cc01d4d2",
[
null,
{
@ -522997,7 +523086,7 @@
]
],
"pointerevent_touch-action-keyboard.html": [
"aeff71331dd61ec5e7da5c0e67e241e9e4bdd941",
"ba087ab64151343e6e49b0ae13b2fd1ccb2f7d10",
[
null,
{
@ -540277,7 +540366,7 @@
]
],
"fetch-event.https.html": [
"5e56fe248c9ef63cc9d028c15d0de123a8304612",
"31a2cb05e2ccb44b6de35beb8000599a516368ee",
[
null,
{
@ -565186,7 +565275,7 @@
]
],
"RTCRtpSynchronizationSource-captureTimestamp.html": [
"323c207f5e63e0ca77458e4254e12072c9ac9e2d",
"11f2540c94602a9b4e685b9a5a309466c47fcccf",
[
null,
{

View file

@ -326,3 +326,153 @@
[margin-right length(mm) / values]
expected: FAIL
[color color(rgba) / values]
expected: FAIL
[font-size length(pt) / values]
expected: FAIL
[font-size length(pc) / values]
expected: FAIL
[font-size length(px) / values]
expected: FAIL
[font-size length(em) / values]
expected: FAIL
[font-size length(ex) / values]
expected: FAIL
[font-size length(mm) / values]
expected: FAIL
[font-size length(cm) / values]
expected: FAIL
[font-size length(in) / values]
expected: FAIL
[font-size percentage(%) / values]
expected: FAIL
[font-weight font-weight(keyword) / values]
expected: FAIL
[font-weight font-weight(numeric) / values]
expected: FAIL
[line-height number(integer) / values]
expected: FAIL
[line-height number(decimal) / values]
expected: FAIL
[line-height length(pt) / values]
expected: FAIL
[line-height length(pc) / values]
expected: FAIL
[line-height length(px) / values]
expected: FAIL
[line-height length(em) / values]
expected: FAIL
[line-height length(ex) / values]
expected: FAIL
[line-height length(mm) / values]
expected: FAIL
[line-height length(cm) / values]
expected: FAIL
[line-height length(in) / values]
expected: FAIL
[line-height percentage(%) / values]
expected: FAIL
[letter-spacing length(pt) / values]
expected: FAIL
[letter-spacing length(pc) / values]
expected: FAIL
[letter-spacing length(px) / values]
expected: FAIL
[letter-spacing length(em) / values]
expected: FAIL
[letter-spacing length(ex) / values]
expected: FAIL
[letter-spacing length(mm) / values]
expected: FAIL
[letter-spacing length(cm) / values]
expected: FAIL
[letter-spacing length(in) / values]
expected: FAIL
[word-spacing length(pt) / values]
expected: FAIL
[word-spacing length(pc) / values]
expected: FAIL
[word-spacing length(px) / values]
expected: FAIL
[word-spacing length(em) / values]
expected: FAIL
[word-spacing length(ex) / values]
expected: FAIL
[word-spacing length(mm) / values]
expected: FAIL
[word-spacing length(cm) / values]
expected: FAIL
[word-spacing length(in) / values]
expected: FAIL
[word-spacing percentage(%) / values]
expected: FAIL
[text-indent length(pt) / values]
expected: FAIL
[text-indent length(pc) / values]
expected: FAIL
[text-indent length(px) / values]
expected: FAIL
[text-indent length(em) / values]
expected: FAIL
[text-indent length(ex) / values]
expected: FAIL
[text-indent length(mm) / values]
expected: FAIL
[text-indent length(cm) / values]
expected: FAIL
[text-indent length(in) / values]
expected: FAIL
[text-indent percentage(%) / values]
expected: FAIL
[text-shadow shadow(shadow) / values]
expected: FAIL

View file

@ -206,156 +206,6 @@
[margin-right length(mm) / events]
expected: FAIL
[max-height length(ex) / events]
expected: FAIL
[max-height length(mm) / events]
expected: FAIL
[max-height length(cm) / events]
expected: FAIL
[max-height length(in) / events]
expected: FAIL
[max-height percentage(%) / events]
expected: FAIL
[max-width length(pt) / events]
expected: FAIL
[max-width length(pc) / events]
expected: FAIL
[max-width length(px) / events]
expected: FAIL
[max-width length(em) / events]
expected: FAIL
[max-width length(ex) / events]
expected: FAIL
[max-width length(mm) / events]
expected: FAIL
[max-width length(cm) / events]
expected: FAIL
[max-width length(in) / events]
expected: FAIL
[max-width percentage(%) / events]
expected: FAIL
[top length(pt) / events]
expected: FAIL
[top length(pc) / events]
expected: FAIL
[top length(px) / events]
expected: FAIL
[top length(em) / events]
expected: FAIL
[top length(ex) / events]
expected: FAIL
[top length(mm) / events]
expected: FAIL
[top length(cm) / events]
expected: FAIL
[top length(in) / events]
expected: FAIL
[top percentage(%) / events]
expected: FAIL
[right length(pt) / events]
expected: FAIL
[right length(pc) / events]
expected: FAIL
[right length(px) / events]
expected: FAIL
[right length(em) / events]
expected: FAIL
[right length(ex) / events]
expected: FAIL
[right length(mm) / events]
expected: FAIL
[right length(cm) / events]
expected: FAIL
[right length(in) / events]
expected: FAIL
[right percentage(%) / events]
expected: FAIL
[bottom length(pt) / events]
expected: FAIL
[bottom length(pc) / events]
expected: FAIL
[bottom length(px) / events]
expected: FAIL
[bottom length(em) / events]
expected: FAIL
[bottom length(ex) / events]
expected: FAIL
[bottom length(mm) / events]
expected: FAIL
[bottom length(cm) / events]
expected: FAIL
[bottom length(in) / events]
expected: FAIL
[bottom percentage(%) / events]
expected: FAIL
[left length(pt) / events]
expected: FAIL
[left length(pc) / events]
expected: FAIL
[left length(px) / events]
expected: FAIL
[left length(em) / events]
expected: FAIL
[left length(ex) / events]
expected: FAIL
[left length(mm) / events]
expected: FAIL
[left length(cm) / events]
expected: FAIL
[left length(in) / events]
expected: FAIL
[left percentage(%) / events]
expected: FAIL
[color color(rgba) / events]
expected: FAIL
@ -506,3 +356,126 @@
[text-shadow shadow(shadow) / events]
expected: FAIL
[background-color color(rgba) / events]
expected: FAIL
[border-top-width length(pt) / events]
expected: FAIL
[border-top-width length(pc) / events]
expected: FAIL
[border-top-width length(px) / events]
expected: FAIL
[border-top-width length(em) / events]
expected: FAIL
[border-top-width length(ex) / events]
expected: FAIL
[border-top-width length(mm) / events]
expected: FAIL
[border-top-width length(cm) / events]
expected: FAIL
[border-top-width length(in) / events]
expected: FAIL
[border-right-width length(pt) / events]
expected: FAIL
[border-right-width length(pc) / events]
expected: FAIL
[border-right-width length(px) / events]
expected: FAIL
[border-right-width length(em) / events]
expected: FAIL
[border-right-width length(ex) / events]
expected: FAIL
[border-right-width length(mm) / events]
expected: FAIL
[border-right-width length(cm) / events]
expected: FAIL
[border-right-width length(in) / events]
expected: FAIL
[border-bottom-width length(pt) / events]
expected: FAIL
[border-bottom-width length(pc) / events]
expected: FAIL
[border-bottom-width length(px) / events]
expected: FAIL
[border-bottom-width length(em) / events]
expected: FAIL
[border-bottom-width length(ex) / events]
expected: FAIL
[border-bottom-width length(mm) / events]
expected: FAIL
[border-bottom-width length(cm) / events]
expected: FAIL
[border-bottom-width length(in) / events]
expected: FAIL
[border-left-width length(pt) / events]
expected: FAIL
[border-left-width length(pc) / events]
expected: FAIL
[border-left-width length(px) / events]
expected: FAIL
[border-left-width length(em) / events]
expected: FAIL
[border-left-width length(ex) / events]
expected: FAIL
[border-left-width length(mm) / events]
expected: FAIL
[border-left-width length(cm) / events]
expected: FAIL
[border-left-width length(in) / events]
expected: FAIL
[border-top-color color(rgba) / events]
expected: FAIL
[border-right-color color(rgba) / events]
expected: FAIL
[border-bottom-color color(rgba) / events]
expected: FAIL
[border-left-color color(rgba) / events]
expected: FAIL
[padding-bottom length(pt) / events]
expected: FAIL
[padding-bottom length(pc) / events]
expected: FAIL
[padding-bottom length(px) / events]
expected: FAIL
[padding-bottom length(em) / events]
expected: FAIL

View file

@ -326,3 +326,153 @@
[margin-right length(mm) / values]
expected: FAIL
[max-height length(ex) / values]
expected: FAIL
[max-height length(mm) / values]
expected: FAIL
[max-height length(cm) / values]
expected: FAIL
[max-height length(in) / values]
expected: FAIL
[max-height percentage(%) / values]
expected: FAIL
[max-width length(pt) / values]
expected: FAIL
[max-width length(pc) / values]
expected: FAIL
[max-width length(px) / values]
expected: FAIL
[max-width length(em) / values]
expected: FAIL
[max-width length(ex) / values]
expected: FAIL
[max-width length(mm) / values]
expected: FAIL
[max-width length(cm) / values]
expected: FAIL
[max-width length(in) / values]
expected: FAIL
[max-width percentage(%) / values]
expected: FAIL
[top length(pt) / values]
expected: FAIL
[top length(pc) / values]
expected: FAIL
[top length(px) / values]
expected: FAIL
[top length(em) / values]
expected: FAIL
[top length(ex) / values]
expected: FAIL
[top length(mm) / values]
expected: FAIL
[top length(cm) / values]
expected: FAIL
[top length(in) / values]
expected: FAIL
[top percentage(%) / values]
expected: FAIL
[right length(pt) / values]
expected: FAIL
[right length(pc) / values]
expected: FAIL
[right length(px) / values]
expected: FAIL
[right length(em) / values]
expected: FAIL
[right length(ex) / values]
expected: FAIL
[right length(mm) / values]
expected: FAIL
[right length(cm) / values]
expected: FAIL
[right length(in) / values]
expected: FAIL
[right percentage(%) / values]
expected: FAIL
[bottom length(pt) / values]
expected: FAIL
[bottom length(pc) / values]
expected: FAIL
[bottom length(px) / values]
expected: FAIL
[bottom length(em) / values]
expected: FAIL
[bottom length(ex) / values]
expected: FAIL
[bottom length(mm) / values]
expected: FAIL
[bottom length(cm) / values]
expected: FAIL
[bottom length(in) / values]
expected: FAIL
[bottom percentage(%) / values]
expected: FAIL
[left length(pt) / values]
expected: FAIL
[left length(pc) / values]
expected: FAIL
[left length(px) / values]
expected: FAIL
[left length(em) / values]
expected: FAIL
[left length(ex) / values]
expected: FAIL
[left length(mm) / values]
expected: FAIL
[left length(cm) / values]
expected: FAIL
[left length(in) / values]
expected: FAIL
[left percentage(%) / values]
expected: FAIL

View file

@ -0,0 +1,4 @@
[variable-substitution-variable-declaration.html]
[target10 --varC]
expected: FAIL

View file

@ -8,3 +8,12 @@
[A custom property referencing a non-existent variable is treated as unset]
expected: FAIL
[Custom properties in a cycle become guaranteed-invalid]
expected: FAIL
[A custom property referencing a cycle becomes guaranteed-invalid]
expected: FAIL
[A custom property referencing a non-existent variable becomes guaranteed-invalid]
expected: FAIL

View file

@ -1,12 +1,26 @@
[request-upload.any.html]
expected: TIMEOUT
[Fetch with POST with ReadableStream]
expected: FAIL
[Fetch with POST with text body on 421 response should be retried once on new connection.]
expected: FAIL
[Fetch with POST with ReadableStream on 421 response should return the response and not retry.]
expected: TIMEOUT
[request-upload.any.worker.html]
expected: TIMEOUT
[Fetch with POST with ReadableStream]
expected: FAIL
[Fetch with POST with text body on 421 response should be retried once on new connection.]
expected: FAIL
[Fetch with POST with ReadableStream on 421 response should return the response and not retry.]
expected: TIMEOUT
[request-upload.any.serviceworker.html]
expected: ERROR

View file

@ -41,3 +41,45 @@
[Content-Length%3A%20]
expected: FAIL
[Input: "Content-Length: 42,42". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 42\\r\\nContent-Length: 42,42". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 30,30". Expected: 30.]
expected: FAIL
[Input: "Content-Length: 30\\r\\nContent-Length: 30,30". Expected: 30.]
expected: FAIL
[Input: "Content-Length: aaaah\\r\\nContent-Length: aaaah". Expected: 42.]
expected: FAIL
[Input: "Content-Length: aaaah, aaaah". Expected: 42.]
expected: FAIL
[Input: "Content-Length: aaaah". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 42s". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 30s". Expected: 42.]
expected: FAIL
[Input: "Content-Length: -1". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 0x20". Expected: 42.]
expected: FAIL
[Input: "Content-Length: 030\\r\\nContent-Length: 30". Expected: network error.]
expected: FAIL
[Input: "Content-Length: \\"30\\"". Expected: 42.]
expected: FAIL
[Input: "Content-Length: ". Expected: 42.]
expected: FAIL

View file

@ -309,12 +309,9 @@
[fetch(): separate response Content-Type: text/plain ]
expected: NOTRUN
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL

View file

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

View file

@ -0,0 +1,2 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

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

View file

@ -1,4 +1,5 @@
[embedded-opener-remove-frame.html]
expected: CRASH
[opener and "removed" embedded documents]
expected: FAIL

View file

@ -14,3 +14,6 @@
[Host element with delegatesFocus should support autofocus]
expected: FAIL
[Non-HTMLElement should not support autofocus]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -1,4 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html]
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL

View file

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

View file

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

View file

@ -2,9 +2,6 @@
[input type search: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[input type password: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type search: selectionStart a second time (must not fire select)]
expected: FAIL
@ -23,42 +20,15 @@
[input type text: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type url: selectionStart a second time (must not fire select)]
expected: FAIL
[input type password: select() a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[textarea: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[textarea: setRangeText() 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 text: selectionEnd 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: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type search: selectionDirection 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 tel: setRangeText() a second time (must not fire select)]
expected: FAIL
@ -68,9 +38,48 @@
[input type url: setSelectionRange() a second time (must not fire select)]
expected: FAIL
[input type url: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type password: setSelectionRange out of range a second time (must not fire select)]
expected: FAIL
[textarea: selectionStart a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd a second time (must not fire select)]
expected: FAIL
[textarea: selectionEnd out of range a second time (must not fire select)]
expected: FAIL
[input type text: selectionStart 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: selectionEnd a second time (must not fire select)]
expected: FAIL
[input type search: setRangeText() a second time (must not fire select)]
expected: FAIL
[input type tel: select() a second time (must not fire select)]
expected: FAIL
[input type tel: selectionDirection a second time (must not fire select)]
expected: FAIL
[input type tel: selectionStart out of range a second time (must not fire select)]
expected: FAIL
[input type url: selectionDirection 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 password: selectionStart 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

View file

@ -0,0 +1,4 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -4,6 +4,3 @@
[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

View file

@ -1,9 +1,10 @@
[promise-job-entry-different-function-realm.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise]
expected: FAIL
[Rejection handler on pending-then-rejected promise]
expected: FAIL
expected: TIMEOUT
[Thenable resolution]
expected: FAIL
@ -12,5 +13,5 @@
expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise]
expected: FAIL
expected: TIMEOUT

View file

@ -848,3 +848,9 @@
[X SNR (-300.5653344749286 dB) is not greater than or equal to 65.737. Got -300.5653344749286.]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 44100 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.000090957,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[15240\]\t-6.9001540120165462e-27\t3.3531737327575684e-1\t3.3531737327575684e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\t[15241\]\t4.5592646835272248e-41\t3.9367997646331787e-1\t3.9367997646331787e-1\t1.0000000000000000e+0\t9.0957000000000003e-5\n\tMax AbsError of 3.9367997646331787e-1 at index of 15241.\n\tMax RelError of 1.0000000000000000e+0 at index of 15240.\n]
expected: FAIL
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[7189\]\t-7.1126672850560558e-27\t-9.8956179618835449e-1\t9.8956179618835449e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\t[7190\]\t-8.8409073650836945e-2\t-9.9664616584777832e-1\t9.0823709219694138e-1\t9.1129341918891205e-1\t3.8985999999999999e-3\n\tMax AbsError of 9.8956179618835449e-1 at index of 7189.\n\tMax RelError of 1.0000000000000000e+0 at index of 7189.\n]
expected: FAIL

View file

@ -2,6 +2,3 @@
[test_element_in_object]
expected: FAIL
[test_element_in_collection]
expected: FAIL

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Blob URL inherits CSP from initiator.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
let testCases = [
{
initiator_origin: window.origin,
name: "Initiator is same-origin with target frame.",
},
{
initiator_origin: "http://{{hosts[alt][]}}:{{ports[http][0]}}",
name: "Initiator is cross-origin with target frame.",
},
];
testCases.forEach(test => {
async_test(t => {
// Create a popup. At the beginning, the popup has no CSPs.
let target = window.open();
t.add_cleanup(() => target.close());
// Create a child frame in the popup. The child frame has
// Content-Security-Policy: script-src 'unsafe-inline'. The child frame
// will navigate the popup to a blob URL, which will try if eval is
// allowed and message back.
let initiator = target.document.createElement('iframe');
initiator.sandbox = "allow-scripts allow-same-origin allow-top-navigation";
initiator.src = test.initiator_origin +
"/content-security-policy/inheritance/support/navigate-parent-to-blob.html";
window.addEventListener("message", t.step_func(e => {
if (e.source !== target) return;
assert_equals(e.data, "eval blocked",
"Eval should be blocked by CSP in blob URL.");
t.done();
}));
target.document.body.appendChild(initiator);
}, test.name);
});
</script>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Content Security Policy: nested inheritance</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
// This test creates a page with CSP: frame-src 'self'. The page is
// navigated to a javascript URL creating a cross-origin iframe inside a
// srcdoc iframe. If everything works correctly, the cross-origin iframe
// should be blocked.
//
// Note that most of the logic is performed by the iframe. This file is only
// for managing testharness assertions.
async_test(t => {
window.addEventListener("message", t.step_func(function(e) {
if (e.data === "frame allowed") {
assert_unreached("Frame should have been blocked.");
} else if (e.data === "frame blocked") {
t.done();
}
}));
}, "Nested cross-origin iframe should be blocked by frame-src 'self'.");
</script>
<iframe src="./support/javascript-url-srcdoc-cross-origin-iframe-inheritance-helper.sub.html"></iframe>
</body>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Security-Policy" content="frame-src 'self'">
<script>
// The following is the content of a srcdoc iframe. It contains:
// - a script that catches the frame-src securitypolicyviolation event and
// forwards the information to the parent,
// - a cross-origin iframe.
let doc = `
<script>
window.addEventListener("securitypolicyviolation", e => {
if (e.violatedDirective === "frame-src") {
window.top.postMessage("frame blocked", "*");
}
});
</scr` + `ipt>
<iframe src="http://{{hosts[alt][]}}:{{ports[http][0]}}/content-security-policy/inheritance/support/postmessage-top.html"></iframe>`;
doc = doc.replaceAll('"', "\\\'");
const js_url = "javascript:'<iframe srcdoc=\""+ doc +"\">'";
window.open(js_url, "_self");
</script>
</head>

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-inline'">
</head>
<body>
<script>
const blob_payload = `
<!doctype html>
<script>
var i = false;
try {
eval('i = true');
} catch {}
opener.postMessage(i ? "eval allowed" : "eval blocked", '*');
</scr` + `ipt>
`;
var blob_url = URL.createObjectURL(
new Blob([blob_payload], { type: 'text/html' }));
parent.location = blob_url;
</script>
</body>
</html>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<script>
top.postMessage("ready", "*");
</script>

View file

@ -70,7 +70,7 @@
assert_equals("false", reportExists, data.error);
} else {
if(reportExists != "" && reportExists == "false" && data["csp-report"]) {
assert_unreached("CSP report sent, but not expecting one: " + JSON.stringify(data["csp-report"]));
assert_unreached("CSP report sent, but not expecting one");
}
// Firefox expands 'self' or origins in a policy to the actual origin value
// so "www.example.com" becomes "http://www.example.com:80".

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1183944">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="width:100px; display: flow-root; background: red; line-height: 0;">
<div style="width: 100px; height: 50px; float: left; background: green;"></div>
<div style="width: 100px; height: 10px; float: right; background: green;"></div>
<div style="display: inline-block; width: 100px; height: 40px; background: green;"></div>
</div>

View file

@ -28,8 +28,8 @@
test(() => {
const style = window.getComputedStyle(child);
assert_equals(style.getPropertyValue("--var1"), " inherited");
}, 'Substitution of unrecognized env() causes unset');
assert_equals(style.getPropertyValue("--var1"), "");
}, 'Substitution of unrecognized env() causes guaranteed-invalid');
</script>
</body>
</html>

View file

@ -0,0 +1,41 @@
<!DOCTYPE html>
<title>Scrolling to sticky position elements uses their unshifted position</title>
<link rel="help" href="https://www.w3.org/TR/css-position-3/#stickypos-scroll" />
<meta name="assert" content="This test checks that scrolling to sticky position elements uses their initial position" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
h1 {
position: sticky;
background: #ddd;
border: 1px solid black;
top: 0px;
bottom: 0px;
}
section {
height: 100vh;
}
</style>
<body>
<h1>Title 1</h1>
<section></section>
<h1>Title 2</h1>
<section></section>
<h1>Title 3</h1>
<section></section>
<script>
test(() => {
window.scrollTo(0, 0);
const element = document.querySelectorAll('h1')[2];
element.scrollIntoView();
assert_approx_equals(document.scrollingElement.scrollTop, element.offsetTop, 1);
}, 'scrolling a sticky element into view should use its unshifted position');
</script>
</body>

View file

@ -0,0 +1,57 @@
<!DOCTYPE html>
<title>position:sticky elements can be constrained by top and bottom exceeding container size</title>
<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" />
<meta name="assert" content="This test checks that position:sticky elements obey both top and bottom constraints" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.scroller {
height: 200px;
overflow: auto;
position: relative;
}
.container {
height: 120px;
}
.padding, .sticky {
height: 50px;
}
.overflow-padding {
height: 200px;
}
.sticky {
position: sticky;
background: green;
top: -25px;
bottom: 150px;
}
</style>
<body>
<div class="scroller">
<div class="container">
<div class="padding"></div>
<div class="sticky"></div>
</div>
<div class="overflow-padding"></div>
</div>
</body>
<script>
test(() => {
const scroller = document.querySelector('.scroller');
const element = document.querySelector('.sticky');
scroller.scrollTop = 0;
assert_equals(element.offsetTop, 0);
}, 'initially the sticky box should be pushed to the top of the container');
test(() => {
const scroller = document.querySelector('.scroller');
const element = document.querySelector('.sticky');
scroller.scrollTop = 95;
assert_equals(element.offsetTop, 70);
}, 'when we scroll past the flow position the top constraint pushes it down');
</script>

View file

@ -4,7 +4,7 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function register_length(name, inherits=true) {
function register_length(name, inherits=false) {
CSS.registerProperty({
name: name,
syntax: '<length>',
@ -96,19 +96,19 @@
test(function() {
target.style = 'font-size: var(--font-size-em);';
assert_property_equals('font-size', unsetFontSize);
assert_property_equals('--font-size-em', '');
assert_property_equals('--font-size-em', '0px');
}, 'Lengths with em units may not be referenced from font-size');
test(function() {
target.style = 'font-size: var(--font-size-ex);';
assert_property_equals('font-size', unsetFontSize);
assert_property_equals('--font-size-ex', '');
assert_property_equals('--font-size-ex', '0px');
}, 'Lengths with ex units may not be referenced from font-size');
test(function() {
target.style = 'font-size: var(--font-size-ch);';
assert_property_equals('font-size', unsetFontSize);
assert_property_equals('--font-size-ch', '');
assert_property_equals('--font-size-ch', '0px');
}, 'Lengths with ch units may not be referenced from font-size');
test(function() {
@ -122,7 +122,7 @@
let root = document.documentElement;
root.style = 'font-size: var(--font-size-rem);';
assert_property_equals('font-size', unsetFontSize, root);
assert_property_equals('--font-size-rem', '', root);
assert_property_equals('--font-size-rem', '0px', root);
}, 'Lengths with rem units may not be referenced from font-size on root element');
test(function() {
@ -155,26 +155,26 @@
test(function() {
target.style = 'font-size: var(--font-size-em-via-var);';
assert_property_equals('font-size', unsetFontSize);
assert_property_equals('--font-size-em-via-var', '');
assert_property_equals('--font-size-em-via-var', '0px');
}, 'Lengths with em units are detected via var references');
test(function() {
target.style = 'font-size: var(--font-size-ex-via-var);';
assert_property_equals('font-size', unsetFontSize);
assert_property_equals('--font-size-ex-via-var', '');
assert_property_equals('--font-size-ex-via-var', '0px');
}, 'Lengths with ex units are detected via var references');
test(function() {
target.style = 'font-size: var(--font-size-ch-via-var);';
assert_property_equals('font-size', unsetFontSize);
assert_property_equals('--font-size-ch-via-var', '');
assert_property_equals('--font-size-ch-via-var', '0px');
}, 'Lengths with ch units are detected via var references');
test(function() {
let root = document.documentElement;
root.style = 'font-size: var(--font-size-rem-via-var);';
assert_property_equals('font-size', unsetFontSize, root);
assert_property_equals('--font-size-rem-via-var', '', root);
assert_property_equals('--font-size-rem-via-var', '0px', root);
root.style = 'font-size: unset';
}, 'Lengths with rem units are detected via var references');

View file

@ -25,13 +25,13 @@ test(function() {
CSS.registerProperty({name: '--registered-1-d', syntax: '<length>', initialValue: '4px', inherits: false});
computedStyle = getComputedStyle(test1);
assert_equals(computedStyle.getPropertyValue('--registered-1-a'), '');
assert_equals(computedStyle.getPropertyValue('--registered-1-b'), '');
assert_equals(computedStyle.getPropertyValue('--registered-1-c'), '30px');
assert_equals(computedStyle.getPropertyValue('--registered-1-d'), '4px');
assert_equals(computedStyle.getPropertyValue('--unregistered-1-a'), '');
assert_equals(computedStyle.left, '50px');
assert_equals(computedStyle.top, '60px');
assert_equals(computedStyle.getPropertyValue('--registered-1-a'), '1px');
assert_equals(computedStyle.getPropertyValue('--registered-1-b'), '2px');
assert_equals(computedStyle.getPropertyValue('--registered-1-c'), '2px');
assert_equals(computedStyle.getPropertyValue('--registered-1-d'), '2px');
assert_equals(computedStyle.getPropertyValue('--unregistered-1-a'), '1px');
assert_equals(computedStyle.left, '1px');
assert_equals(computedStyle.top, '2px');
}, "A var() cycle between two registered properties is handled correctly.");
</script>
@ -62,18 +62,18 @@ test(function() {
CSS.registerProperty({name: '--registered-2-e', syntax: '<length>', initialValue: '5px', inherits: false});
computedStyle = getComputedStyle(test2);
assert_equals(computedStyle.getPropertyValue('--registered-2-a'), '');
assert_equals(computedStyle.getPropertyValue('--registered-2-a'), '1px');
assert_equals(computedStyle.getPropertyValue('--unregistered-2-a'), '');
assert_equals(computedStyle.getPropertyValue('--registered-2-b'), '30px');
assert_equals(computedStyle.getPropertyValue('--registered-2-c'), '3px');
assert_equals(computedStyle.getPropertyValue('--registered-2-b'), '1px');
assert_equals(computedStyle.getPropertyValue('--registered-2-c'), '1px');
assert_equals(computedStyle.getPropertyValue('--registered-2-d'), '40px');
assert_equals(computedStyle.getPropertyValue('--registered-2-e'), '5px');
assert_equals(computedStyle.getPropertyValue('--unregistered-2-b'), '50px');
assert_equals(computedStyle.getPropertyValue('--unregistered-2-c'), '');
assert_equals(computedStyle.getPropertyValue('--unregistered-2-b'), '1px');
assert_equals(computedStyle.getPropertyValue('--unregistered-2-c'), '1px');
assert_equals(computedStyle.getPropertyValue('--unregistered-2-d'), '60px');
assert_equals(computedStyle.getPropertyValue('--unregistered-2-e'), '');
assert_equals(computedStyle.left, '70px');
assert_equals(computedStyle.left, '1px');
assert_equals(computedStyle.top, '80px');
}, "A var() cycle between a registered properties and an unregistered property is handled correctly.");
</script>
@ -136,7 +136,7 @@ test(function() {
assert_equals(computedStyle.getPropertyValue('--unregistered-4-a'), '');
assert_equals(computedStyle.getPropertyValue('--registered-4-b'), 'meow');
assert_equals(computedStyle.getPropertyValue('--registered-4-c'), 'circle');
assert_equals(computedStyle.getPropertyValue('--registered-4-c'), '');
assert_equals(computedStyle.getPropertyValue('--unregistered-4-b'), 'woof');
assert_equals(computedStyle.getPropertyValue('--unregistered-4-c'), '');
assert_equals(computedStyle.transitionProperty, 'water');
@ -174,9 +174,10 @@ test(function() {
let computedStyle = getComputedStyle(test5);
assert_equals(computedStyle.getPropertyValue('--registered-5-a'), '');
assert_equals(computedStyle.getPropertyValue('--registered-5-b'), '');
assert_equals(computedStyle.getPropertyValue('--registered-5-c'), 'foo');
assert_equals(computedStyle.getPropertyValue('--registered-5-d'), 'bar');
assert_equals(computedStyle.getPropertyValue('--registered-5-e'), 'baz');
assert_equals(computedStyle.getPropertyValue('--registered-5-c'), '');
assert_equals(computedStyle.getPropertyValue('--registered-5-d'), '');
assert_equals(computedStyle.getPropertyValue('--registered-5-e'), '');
assert_equals(computedStyle.getPropertyValue('color'), 'rgb(0, 128, 0)');
}, "Invalid at computed-value time triggers 'unset' behavior");
}, "Custom properties with universal syntax become guaranteed-invalid when " +
"invalid at computed-value time");
</script>

View file

@ -19,14 +19,7 @@ async function keyPress(target, key) {
code = KEY_CODE_MAP[key];
// First move pointer on target and click to ensure it receives the key.
let actions = new test_driver.Actions()
.pointerMove(0, 0, {origin: target})
.pointerDown()
.pointerUp()
.keyDown(code)
.keyUp(code);
return actions.send();
return test_driver.send_keys(target, code);
}
// Use rAF to wait for the value of the getter function passed to not change for

View file

@ -140,7 +140,7 @@
{ element: "target10", propertyName: "--varA", expectedPropertyValue: "" },
{ element: "target10", propertyName: "--varB", expectedPropertyValue: "" },
{ element: "target10", propertyName: "--varC", expectedPropertyValue: " another good one" },
{ element: "target10", propertyName: "--varC", expectedPropertyValue: "" },
];
testcases.forEach(function (testcase) {

View file

@ -30,15 +30,15 @@
let cs = getComputedStyle(target1);
assert_equals(cs.getPropertyValue('--var1'), '');
assert_equals(cs.getPropertyValue('--var2'), '');
}, 'Custom properties in a cycle are guaranteed-invalid');
}, 'Custom properties in a cycle become guaranteed-invalid');
test( function () {
let cs = getComputedStyle(target1);
assert_equals(cs.getPropertyValue('--var3'), ' inherited');
}, 'A custom property referencing a cycle is treated as unset');
assert_equals(cs.getPropertyValue('--var3'), '');
}, 'A custom property referencing a cycle becomes guaranteed-invalid');
test( function () {
let cs = getComputedStyle(target1);
assert_equals(cs.getPropertyValue('--var4'), ' inherited');
}, 'A custom property referencing a non-existent variable is treated as unset');
assert_equals(cs.getPropertyValue('--var4'), '');
}, 'A custom property referencing a non-existent variable becomes guaranteed-invalid');
</script>

View file

@ -28,12 +28,7 @@ const KEY_CODE_MAP = {
*/
function keyPress(target, key) {
const code = KEY_CODE_MAP[key];
let actions = new test_driver.Actions()
.keyDown(code)
.keyUp(code);
return actions.send();
return test_driver.send_keys(target, code);
}
</script>

View file

@ -1,5 +1,7 @@
// META: global=window,worker
// META: script=../resources/utils.js
// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js
function testUpload(desc, url, method, createBody, expectedBody) {
const requestInit = {"method": method}
@ -123,3 +125,30 @@ testUploadFailure("Fetch with POST with ReadableStream containing Blob", url,
controller.close();
}})
});
promise_test(async (test) => {
const resp = await fetch(
"/fetch/connection-pool/resources/network-partition-key.py?"
+ `status=421&uuid=${token()}&partition_id=${get_host_info().ORIGIN}`
+ `&dispatch=check_partition&addcounter=true`,
{method: "POST", body: "foobar"});
assert_equals(resp.status, 421);
const text = await resp.text();
assert_equals(text, "ok. Request was sent 2 times. 2 connections were created.");
}, "Fetch with POST with text body on 421 response should be retried once on new connection.");
promise_test(async (test) => {
const body = new ReadableStream({start: controller => {
const encoder = new TextEncoder();
controller.enqueue(encoder.encode("Test"));
controller.close();
}});
const resp = await fetch(
"/fetch/connection-pool/resources/network-partition-key.py?"
+ `status=421&uuid=${token()}&partition_id=${get_host_info().ORIGIN}`
+ `&dispatch=check_partition&addcounter=true`,
{method: "POST", body: body});
assert_equals(resp.status, 421);
const text = await resp.text();
assert_equals(text, "ok. Request was sent 1 times. 1 connections were created.");
}, "Fetch with POST with ReadableStream on 421 response should return the response and not retry.");

View file

@ -25,15 +25,26 @@ def main(request, response):
# Unless nocheck_partition is true, check partition_id against server_state, and update server_state.
stash = request.server.stash
test_failed = False
request_count = 0;
connection_count = 0;
if request.GET.first(b"nocheck_partition", None) != b"True":
# Need to grab the lock to access the Stash, since requests are made in parallel.
with stash.lock:
# Don't use server hostname here, since H2 allows multiple hosts to reuse a connection.
# Server IP is not currently available, unfortunately.
address_key = isomorphic_encode(str(request.client_address) + u"|" + str(request.url_parts.port))
server_state = stash.take(uuid) or {b"test_failed": False}
if address_key in server_state and server_state[address_key] != partition_id:
server_state = stash.take(uuid) or {b"test_failed": False,
b"request_count": 0, b"connection_count": 0}
request_count = server_state[b"request_count"]
request_count += 1
server_state[b"request_count"] = request_count
if address_key in server_state:
if server_state[address_key] != partition_id:
server_state[b"test_failed"] = True
else:
connection_count = server_state[b"connection_count"]
connection_count += 1
server_state[b"connection_count"] = connection_count
server_state[address_key] = partition_id
test_failed = server_state[b"test_failed"]
stash.put(uuid, server_state)
@ -50,9 +61,14 @@ def main(request, response):
return handle_fetch_file(request, response, partition_id, uuid)
if dispatch == b"check_partition":
status = request.GET.first(b"status", 200)
if test_failed:
return simple_response(request, response, 200, b"OK", b"Multiple partition IDs used on a socket")
return simple_response(request, response, 200, b"OK", b"ok")
return simple_response(request, response, status, b"OK", b"Multiple partition IDs used on a socket")
body = b"ok"
if request.GET.first(b"addcounter", False):
body += (". Request was sent " + str(request_count) + " times. " +
str(connection_count) + " connections were created.").encode('utf-8')
return simple_response(request, response, status, b"OK", body)
if dispatch == b"clean_up":
stash.take(uuid)

View file

@ -3,17 +3,16 @@ promise_test(() => {
}, "Loading JSON…");
function runTests(testUnits) {
testUnits.forEach(testUnit => {
const input = encodeURIComponent(testUnit.input);
testUnits.forEach(({ input, output }) => {
promise_test(t => {
const result = fetch("resources/content-length.py?length=" + input);
if (testUnit.output === null) {
const result = fetch(`resources/content-length.py?length=${encodeURIComponent(input)}`);
if (output === null) {
return promise_rejects_js(t, TypeError, result);
} else {
return result.then(res => res.text()).then(text => {
assert_equals(text.length, testUnit.output);
assert_equals(text.length, output);
});
}
}, input);
}, `Input: ${format_value(input)}. Expected: ${output === null ? "network error" : output}.`);
});
}

View file

@ -10,10 +10,28 @@ const dispatcher_path =
'/html/cross-origin-opener-policy/reporting/resources/dispatcher.py';
const dispatcher_url = new URL(dispatcher_path, location.href).href;
// Return a promise, limiting the number of concurrent accesses to a shared
// resources to |max_concurrent_access|.
const concurrencyLimiter = (max_concurrency) => {
let pending = 0;
let waiting = [];
return async (task) => {
pending++;
if (pending > max_concurrency)
await new Promise(resolve => waiting.push(resolve));
await task();
pending--;
waiting.shift()?.();
};
}
// The official web-platform-test runner sometimes drop POST requests when
// too many are requested in parallel. Limiting this document to send only one
// at a time fixes the issue.
const sendLimiter = concurrencyLimiter(1);
const send = async function(uuid, message) {
// The official web-platform-test runner sometimes drop POST requests when
// many are requested in parallel. Using a lock fixes the issue.
await navigator.locks.request("dispatcher_send", async lock => {
await sendLimiter(async () => {
await fetch(dispatcher_url + `?uuid=${uuid}`, {
method: 'POST',
body: message

View file

@ -36,20 +36,31 @@ let events = [];
async_test(t => {
let test1 = document.getElementById("test1");
let test2 = document.getElementById("test2");
document.getElementById("test1").addEventListener("click",
() => {test2.style.display = "block"; test2.style.top = "100px"; test2.style.left = "0"});
document.getElementById("test2").addEventListener("click",
e => {events.push(e.clientX); events.push(e.clientY)});
test1.addEventListener("click",
() => {
test2.style.display = "block";
test2.style.top = "100px";
test2.style.left = "0"});
test2.addEventListener("click",
e => {
events.push(e.clientX);
events.push(e.clientY);});
let div = document.getElementById("backing");
const waitCondition = new Promise((resolve, reject)=>{setTimeout(resolve, 5000);});
const test1ClickWatcher = new EventWatcher(t, test1, ["click"], ()=>waitCondition);
const test2ClickWatcher = new EventWatcher(t, test2, ["click"], ()=>waitCondition);
let waitForClicks = Promise.all([test1ClickWatcher.wait_for(["click"]), test2ClickWatcher.wait_for(["click"])]);
let actions = new test_driver.Actions()
.pointerMove(0, 0, {origin: test1})
.pointerDown()
.pointerUp()
.send()
.then(()=>new test_driver.Actions()
.pointerMove(0, 0, {origin: test2})
.pointerDown()
.pointerUp()
.send()
.send())
.then(()=>waitForClicks)
.then(t.step_func_done(() => assert_array_equals(events, [50, 150])))
.catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
});

View file

@ -523,32 +523,32 @@ interface mixin WebGLRenderingContextBase
sequence<DOMString>? getSupportedExtensions();
object? getExtension(DOMString name);
void activeTexture(GLenum texture);
void attachShader(WebGLProgram program, WebGLShader shader);
void bindAttribLocation(WebGLProgram program, GLuint index, DOMString name);
void bindBuffer(GLenum target, WebGLBuffer? buffer);
void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
void bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
void bindTexture(GLenum target, WebGLTexture? texture);
void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
void blendEquation(GLenum mode);
void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
void blendFunc(GLenum sfactor, GLenum dfactor);
void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB,
undefined activeTexture(GLenum texture);
undefined attachShader(WebGLProgram program, WebGLShader shader);
undefined bindAttribLocation(WebGLProgram program, GLuint index, DOMString name);
undefined bindBuffer(GLenum target, WebGLBuffer? buffer);
undefined bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
undefined bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
undefined bindTexture(GLenum target, WebGLTexture? texture);
undefined blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
undefined blendEquation(GLenum mode);
undefined blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
undefined blendFunc(GLenum sfactor, GLenum dfactor);
undefined blendFuncSeparate(GLenum srcRGB, GLenum dstRGB,
GLenum srcAlpha, GLenum dstAlpha);
[WebGLHandlesContextLoss] GLenum checkFramebufferStatus(GLenum target);
void clear(GLbitfield mask);
void clearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
void clearDepth(GLclampf depth);
void clearStencil(GLint s);
void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
void compileShader(WebGLShader shader);
undefined clear(GLbitfield mask);
undefined clearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
undefined clearDepth(GLclampf depth);
undefined clearStencil(GLint s);
undefined colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
undefined compileShader(WebGLShader shader);
void copyTexImage2D(GLenum target, GLint level, GLenum internalformat,
undefined copyTexImage2D(GLenum target, GLint level, GLenum internalformat,
GLint x, GLint y, GLsizei width, GLsizei height,
GLint border);
void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLint x, GLint y, GLsizei width, GLsizei height);
WebGLBuffer? createBuffer();
@ -558,36 +558,36 @@ interface mixin WebGLRenderingContextBase
WebGLShader? createShader(GLenum type);
WebGLTexture? createTexture();
void cullFace(GLenum mode);
undefined cullFace(GLenum mode);
void deleteBuffer(WebGLBuffer? buffer);
void deleteFramebuffer(WebGLFramebuffer? framebuffer);
void deleteProgram(WebGLProgram? program);
void deleteRenderbuffer(WebGLRenderbuffer? renderbuffer);
void deleteShader(WebGLShader? shader);
void deleteTexture(WebGLTexture? texture);
undefined deleteBuffer(WebGLBuffer? buffer);
undefined deleteFramebuffer(WebGLFramebuffer? framebuffer);
undefined deleteProgram(WebGLProgram? program);
undefined deleteRenderbuffer(WebGLRenderbuffer? renderbuffer);
undefined deleteShader(WebGLShader? shader);
undefined deleteTexture(WebGLTexture? texture);
void depthFunc(GLenum func);
void depthMask(GLboolean flag);
void depthRange(GLclampf zNear, GLclampf zFar);
void detachShader(WebGLProgram program, WebGLShader shader);
void disable(GLenum cap);
void disableVertexAttribArray(GLuint index);
void drawArrays(GLenum mode, GLint first, GLsizei count);
void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);
undefined depthFunc(GLenum func);
undefined depthMask(GLboolean flag);
undefined depthRange(GLclampf zNear, GLclampf zFar);
undefined detachShader(WebGLProgram program, WebGLShader shader);
undefined disable(GLenum cap);
undefined disableVertexAttribArray(GLuint index);
undefined drawArrays(GLenum mode, GLint first, GLsizei count);
undefined drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);
void enable(GLenum cap);
void enableVertexAttribArray(GLuint index);
void finish();
void flush();
void framebufferRenderbuffer(GLenum target, GLenum attachment,
undefined enable(GLenum cap);
undefined enableVertexAttribArray(GLuint index);
undefined finish();
undefined flush();
undefined framebufferRenderbuffer(GLenum target, GLenum attachment,
GLenum renderbuffertarget,
WebGLRenderbuffer? renderbuffer);
void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget,
undefined framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget,
WebGLTexture? texture, GLint level);
void frontFace(GLenum mode);
undefined frontFace(GLenum mode);
void generateMipmap(GLenum target);
undefined generateMipmap(GLenum target);
WebGLActiveInfo? getActiveAttrib(WebGLProgram program, GLuint index);
WebGLActiveInfo? getActiveUniform(WebGLProgram program, GLuint index);
@ -621,7 +621,7 @@ interface mixin WebGLRenderingContextBase
[WebGLHandlesContextLoss] GLintptr getVertexAttribOffset(GLuint index, GLenum pname);
void hint(GLenum target, GLenum mode);
undefined hint(GLenum target, GLenum mode);
[WebGLHandlesContextLoss] GLboolean isBuffer(WebGLBuffer? buffer);
[WebGLHandlesContextLoss] GLboolean isEnabled(GLenum cap);
[WebGLHandlesContextLoss] GLboolean isFramebuffer(WebGLFramebuffer? framebuffer);
@ -629,99 +629,99 @@ interface mixin WebGLRenderingContextBase
[WebGLHandlesContextLoss] GLboolean isRenderbuffer(WebGLRenderbuffer? renderbuffer);
[WebGLHandlesContextLoss] GLboolean isShader(WebGLShader? shader);
[WebGLHandlesContextLoss] GLboolean isTexture(WebGLTexture? texture);
void lineWidth(GLfloat width);
void linkProgram(WebGLProgram program);
void pixelStorei(GLenum pname, GLint param);
void polygonOffset(GLfloat factor, GLfloat units);
undefined lineWidth(GLfloat width);
undefined linkProgram(WebGLProgram program);
undefined pixelStorei(GLenum pname, GLint param);
undefined polygonOffset(GLfloat factor, GLfloat units);
void renderbufferStorage(GLenum target, GLenum internalformat,
undefined renderbufferStorage(GLenum target, GLenum internalformat,
GLsizei width, GLsizei height);
void sampleCoverage(GLclampf value, GLboolean invert);
void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
undefined sampleCoverage(GLclampf value, GLboolean invert);
undefined scissor(GLint x, GLint y, GLsizei width, GLsizei height);
void shaderSource(WebGLShader shader, DOMString source);
undefined shaderSource(WebGLShader shader, DOMString source);
void stencilFunc(GLenum func, GLint ref, GLuint mask);
void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
void stencilMask(GLuint mask);
void stencilMaskSeparate(GLenum face, GLuint mask);
void stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
undefined stencilFunc(GLenum func, GLint ref, GLuint mask);
undefined stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
undefined stencilMask(GLuint mask);
undefined stencilMaskSeparate(GLenum face, GLuint mask);
undefined stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
undefined stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
void texParameterf(GLenum target, GLenum pname, GLfloat param);
void texParameteri(GLenum target, GLenum pname, GLint param);
undefined texParameterf(GLenum target, GLenum pname, GLfloat param);
undefined texParameteri(GLenum target, GLenum pname, GLint param);
void uniform1f(WebGLUniformLocation? location, GLfloat x);
void uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y);
void uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z);
void uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
undefined uniform1f(WebGLUniformLocation? location, GLfloat x);
undefined uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y);
undefined uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z);
undefined uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void uniform1i(WebGLUniformLocation? location, GLint x);
void uniform2i(WebGLUniformLocation? location, GLint x, GLint y);
void uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z);
void uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w);
undefined uniform1i(WebGLUniformLocation? location, GLint x);
undefined uniform2i(WebGLUniformLocation? location, GLint x, GLint y);
undefined uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z);
undefined uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w);
void useProgram(WebGLProgram? program);
void validateProgram(WebGLProgram program);
undefined useProgram(WebGLProgram? program);
undefined validateProgram(WebGLProgram program);
void vertexAttrib1f(GLuint index, GLfloat x);
void vertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
void vertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
void vertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
undefined vertexAttrib1f(GLuint index, GLfloat x);
undefined vertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
undefined vertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
undefined vertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void vertexAttrib1fv(GLuint index, Float32List values);
void vertexAttrib2fv(GLuint index, Float32List values);
void vertexAttrib3fv(GLuint index, Float32List values);
void vertexAttrib4fv(GLuint index, Float32List values);
undefined vertexAttrib1fv(GLuint index, Float32List values);
undefined vertexAttrib2fv(GLuint index, Float32List values);
undefined vertexAttrib3fv(GLuint index, Float32List values);
undefined vertexAttrib4fv(GLuint index, Float32List values);
void vertexAttribPointer(GLuint index, GLint size, GLenum type,
undefined vertexAttribPointer(GLuint index, GLint size, GLenum type,
GLboolean normalized, GLsizei stride, GLintptr offset);
void viewport(GLint x, GLint y, GLsizei width, GLsizei height);
undefined viewport(GLint x, GLint y, GLsizei width, GLsizei height);
};
interface mixin WebGLRenderingContextOverloads
{
void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
void bufferData(GLenum target, [AllowShared] BufferSource? data, GLenum usage);
void bufferSubData(GLenum target, GLintptr offset, [AllowShared] BufferSource data);
undefined bufferData(GLenum target, GLsizeiptr size, GLenum usage);
undefined bufferData(GLenum target, [AllowShared] BufferSource? data, GLenum usage);
undefined bufferSubData(GLenum target, GLintptr offset, [AllowShared] BufferSource data);
void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border,
[AllowShared] ArrayBufferView data);
void compressedTexSubImage2D(GLenum target, GLint level,
undefined compressedTexSubImage2D(GLenum target, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format,
[AllowShared] ArrayBufferView data);
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height,
undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
void texImage2D(GLenum target, GLint level, GLint internalformat,
undefined texImage2D(GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format,
GLenum type, [AllowShared] ArrayBufferView? pixels);
void texImage2D(GLenum target, GLint level, GLint internalformat,
undefined texImage2D(GLenum target, GLint level, GLint internalformat,
GLenum format, GLenum type, TexImageSource source); // May throw DOMException
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLenum format, GLenum type, TexImageSource source); // May throw DOMException
void uniform1fv(WebGLUniformLocation? location, Float32List v);
void uniform2fv(WebGLUniformLocation? location, Float32List v);
void uniform3fv(WebGLUniformLocation? location, Float32List v);
void uniform4fv(WebGLUniformLocation? location, Float32List v);
undefined uniform1fv(WebGLUniformLocation? location, Float32List v);
undefined uniform2fv(WebGLUniformLocation? location, Float32List v);
undefined uniform3fv(WebGLUniformLocation? location, Float32List v);
undefined uniform4fv(WebGLUniformLocation? location, Float32List v);
void uniform1iv(WebGLUniformLocation? location, Int32List v);
void uniform2iv(WebGLUniformLocation? location, Int32List v);
void uniform3iv(WebGLUniformLocation? location, Int32List v);
void uniform4iv(WebGLUniformLocation? location, Int32List v);
undefined uniform1iv(WebGLUniformLocation? location, Int32List v);
undefined uniform2iv(WebGLUniformLocation? location, Int32List v);
undefined uniform3iv(WebGLUniformLocation? location, Int32List v);
undefined uniform4iv(WebGLUniformLocation? location, Int32List v);
void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
undefined uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
undefined uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
undefined uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List value);
};
[Exposed=(Window,Worker)]

View file

@ -298,69 +298,69 @@ interface mixin WebGL2RenderingContextBase
const GLenum MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247;
/* Buffer objects */
void copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset,
undefined copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset,
GLintptr writeOffset, GLsizeiptr size);
// MapBufferRange, in particular its read-only and write-only modes,
// can not be exposed safely to JavaScript. GetBufferSubData
// replaces it for the purpose of fetching data back from the GPU.
void getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer,
undefined getBufferSubData(GLenum target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer,
optional GLuint dstOffset = 0, optional GLuint length = 0);
/* Framebuffer objects */
void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
undefined blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
void framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level,
undefined framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level,
GLint layer);
void invalidateFramebuffer(GLenum target, sequence<GLenum> attachments);
void invalidateSubFramebuffer(GLenum target, sequence<GLenum> attachments,
undefined invalidateFramebuffer(GLenum target, sequence<GLenum> attachments);
undefined invalidateSubFramebuffer(GLenum target, sequence<GLenum> attachments,
GLint x, GLint y, GLsizei width, GLsizei height);
void readBuffer(GLenum src);
undefined readBuffer(GLenum src);
/* Renderbuffer objects */
any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname);
void renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat,
undefined renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat,
GLsizei width, GLsizei height);
/* Texture objects */
void texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
undefined texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
GLsizei height);
void texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
undefined texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width,
GLsizei height, GLsizei depth);
void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
GLsizei depth, GLint border, GLenum format, GLenum type, GLintptr pboOffset);
void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
GLsizei depth, GLint border, GLenum format, GLenum type,
TexImageSource source); // May throw DOMException
void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? srcData);
void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
undefined texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
GLuint srcOffset);
void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
GLintptr pboOffset);
void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
TexImageSource source); // May throw DOMException
void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
undefined texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
[AllowShared] ArrayBufferView? srcData, optional GLuint srcOffset = 0);
void copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
undefined copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
GLint x, GLint y, GLsizei width, GLsizei height);
void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLintptr offset);
void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
undefined compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
GLsizei height, GLsizei depth, GLint border, [AllowShared] ArrayBufferView srcData,
optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0);
void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLsizei imageSize, GLintptr offset);
void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
GLenum format, [AllowShared] ArrayBufferView srcData,
optional GLuint srcOffset = 0,
@ -370,206 +370,206 @@ interface mixin WebGL2RenderingContextBase
[WebGLHandlesContextLoss] GLint getFragDataLocation(WebGLProgram program, DOMString name);
/* Uniforms */
void uniform1ui(WebGLUniformLocation? location, GLuint v0);
void uniform2ui(WebGLUniformLocation? location, GLuint v0, GLuint v1);
void uniform3ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2);
void uniform4ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
undefined uniform1ui(WebGLUniformLocation? location, GLuint v0);
undefined uniform2ui(WebGLUniformLocation? location, GLuint v0, GLuint v1);
undefined uniform3ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2);
undefined uniform4ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
void uniform1uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
undefined uniform1uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform2uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
undefined uniform2uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform3uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
undefined uniform3uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform4uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
undefined uniform4uiv(WebGLUniformLocation? location, Uint32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
void uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
void uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
void uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
void uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
void uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
/* Vertex attribs */
void vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
void vertexAttribI4iv(GLuint index, Int32List values);
void vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
void vertexAttribI4uiv(GLuint index, Uint32List values);
void vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
undefined vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
undefined vertexAttribI4iv(GLuint index, Int32List values);
undefined vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
undefined vertexAttribI4uiv(GLuint index, Uint32List values);
undefined vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
/* Writing to the drawing buffer */
void vertexAttribDivisor(GLuint index, GLuint divisor);
void drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
void drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount);
void drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset);
undefined vertexAttribDivisor(GLuint index, GLuint divisor);
undefined drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
undefined drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount);
undefined drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset);
/* Multiple Render Targets */
void drawBuffers(sequence<GLenum> buffers);
undefined drawBuffers(sequence<GLenum> buffers);
void clearBufferfv(GLenum buffer, GLint drawbuffer, Float32List values,
undefined clearBufferfv(GLenum buffer, GLint drawbuffer, Float32List values,
optional GLuint srcOffset = 0);
void clearBufferiv(GLenum buffer, GLint drawbuffer, Int32List values,
undefined clearBufferiv(GLenum buffer, GLint drawbuffer, Int32List values,
optional GLuint srcOffset = 0);
void clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32List values,
undefined clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32List values,
optional GLuint srcOffset = 0);
void clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
undefined clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
/* Query Objects */
WebGLQuery? createQuery();
void deleteQuery(WebGLQuery? query);
undefined deleteQuery(WebGLQuery? query);
[WebGLHandlesContextLoss] GLboolean isQuery(WebGLQuery? query);
void beginQuery(GLenum target, WebGLQuery query);
void endQuery(GLenum target);
undefined beginQuery(GLenum target, WebGLQuery query);
undefined endQuery(GLenum target);
WebGLQuery? getQuery(GLenum target, GLenum pname);
any getQueryParameter(WebGLQuery query, GLenum pname);
/* Sampler Objects */
WebGLSampler? createSampler();
void deleteSampler(WebGLSampler? sampler);
undefined deleteSampler(WebGLSampler? sampler);
[WebGLHandlesContextLoss] GLboolean isSampler(WebGLSampler? sampler);
void bindSampler(GLuint unit, WebGLSampler? sampler);
void samplerParameteri(WebGLSampler sampler, GLenum pname, GLint param);
void samplerParameterf(WebGLSampler sampler, GLenum pname, GLfloat param);
undefined bindSampler(GLuint unit, WebGLSampler? sampler);
undefined samplerParameteri(WebGLSampler sampler, GLenum pname, GLint param);
undefined samplerParameterf(WebGLSampler sampler, GLenum pname, GLfloat param);
any getSamplerParameter(WebGLSampler sampler, GLenum pname);
/* Sync objects */
WebGLSync? fenceSync(GLenum condition, GLbitfield flags);
[WebGLHandlesContextLoss] GLboolean isSync(WebGLSync? sync);
void deleteSync(WebGLSync? sync);
undefined deleteSync(WebGLSync? sync);
GLenum clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 timeout);
void waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout);
undefined waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout);
any getSyncParameter(WebGLSync sync, GLenum pname);
/* Transform Feedback */
WebGLTransformFeedback? createTransformFeedback();
void deleteTransformFeedback(WebGLTransformFeedback? tf);
undefined deleteTransformFeedback(WebGLTransformFeedback? tf);
[WebGLHandlesContextLoss] GLboolean isTransformFeedback(WebGLTransformFeedback? tf);
void bindTransformFeedback (GLenum target, WebGLTransformFeedback? tf);
void beginTransformFeedback(GLenum primitiveMode);
void endTransformFeedback();
void transformFeedbackVaryings(WebGLProgram program, sequence<DOMString> varyings, GLenum bufferMode);
undefined bindTransformFeedback (GLenum target, WebGLTransformFeedback? tf);
undefined beginTransformFeedback(GLenum primitiveMode);
undefined endTransformFeedback();
undefined transformFeedbackVaryings(WebGLProgram program, sequence<DOMString> varyings, GLenum bufferMode);
WebGLActiveInfo? getTransformFeedbackVarying(WebGLProgram program, GLuint index);
void pauseTransformFeedback();
void resumeTransformFeedback();
undefined pauseTransformFeedback();
undefined resumeTransformFeedback();
/* Uniform Buffer Objects and Transform Feedback Buffers */
void bindBufferBase(GLenum target, GLuint index, WebGLBuffer? buffer);
void bindBufferRange(GLenum target, GLuint index, WebGLBuffer? buffer, GLintptr offset, GLsizeiptr size);
undefined bindBufferBase(GLenum target, GLuint index, WebGLBuffer? buffer);
undefined bindBufferRange(GLenum target, GLuint index, WebGLBuffer? buffer, GLintptr offset, GLsizeiptr size);
any getIndexedParameter(GLenum target, GLuint index);
sequence<GLuint>? getUniformIndices(WebGLProgram program, sequence<DOMString> uniformNames);
any getActiveUniforms(WebGLProgram program, sequence<GLuint> uniformIndices, GLenum pname);
GLuint getUniformBlockIndex(WebGLProgram program, DOMString uniformBlockName);
any getActiveUniformBlockParameter(WebGLProgram program, GLuint uniformBlockIndex, GLenum pname);
DOMString? getActiveUniformBlockName(WebGLProgram program, GLuint uniformBlockIndex);
void uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
undefined uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
/* Vertex Array Objects */
WebGLVertexArrayObject? createVertexArray();
void deleteVertexArray(WebGLVertexArrayObject? vertexArray);
undefined deleteVertexArray(WebGLVertexArrayObject? vertexArray);
[WebGLHandlesContextLoss] GLboolean isVertexArray(WebGLVertexArrayObject? vertexArray);
void bindVertexArray(WebGLVertexArrayObject? array);
undefined bindVertexArray(WebGLVertexArrayObject? array);
};
interface mixin WebGL2RenderingContextOverloads
{
// WebGL1:
void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
void bufferData(GLenum target, [AllowShared] BufferSource? srcData, GLenum usage);
void bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] BufferSource srcData);
undefined bufferData(GLenum target, GLsizeiptr size, GLenum usage);
undefined bufferData(GLenum target, [AllowShared] BufferSource? srcData, GLenum usage);
undefined bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] BufferSource srcData);
// WebGL2:
void bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, GLuint srcOffset,
undefined bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, GLuint srcOffset,
optional GLuint length = 0);
void bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData,
undefined bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData,
GLuint srcOffset, optional GLuint length = 0);
// WebGL1 legacy entrypoints:
void texImage2D(GLenum target, GLint level, GLint internalformat,
undefined texImage2D(GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format,
GLenum type, [AllowShared] ArrayBufferView? pixels);
void texImage2D(GLenum target, GLint level, GLint internalformat,
undefined texImage2D(GLenum target, GLint level, GLint internalformat,
GLenum format, GLenum type, TexImageSource source); // May throw DOMException
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLenum format, GLenum type, TexImageSource source); // May throw DOMException
// WebGL2 entrypoints:
void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
GLint border, GLenum format, GLenum type, GLintptr pboOffset);
void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
GLint border, GLenum format, GLenum type,
TexImageSource source); // May throw DOMException
void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
GLuint srcOffset);
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
GLsizei height, GLenum format, GLenum type, GLintptr pboOffset);
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
GLsizei height, GLenum format, GLenum type,
TexImageSource source); // May throw DOMException
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
undefined texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData,
GLuint srcOffset);
void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
GLsizei height, GLint border, GLsizei imageSize, GLintptr offset);
void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
undefined compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,
GLsizei height, GLint border, [AllowShared] ArrayBufferView srcData,
optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0);
void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLintptr offset);
void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
undefined compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format,
[AllowShared] ArrayBufferView srcData,
optional GLuint srcOffset = 0,
optional GLuint srcLengthOverride = 0);
void uniform1fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
undefined uniform1fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform2fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
undefined uniform2fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform3fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
undefined uniform3fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform4fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
undefined uniform4fv(WebGLUniformLocation? location, Float32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform1iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
undefined uniform1iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform2iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
undefined uniform2iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform3iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
undefined uniform3iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniform4iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
undefined uniform4iv(WebGLUniformLocation? location, Int32List data, optional GLuint srcOffset = 0,
optional GLuint srcLength = 0);
void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
undefined uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List data,
optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
/* Reading back pixels */
// WebGL1:
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
[AllowShared] ArrayBufferView? dstData);
// WebGL2:
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
GLintptr offset);
void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
undefined readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
[AllowShared] ArrayBufferView dstData, GLuint dstOffset);
};

View file

@ -120,17 +120,21 @@
});
// Inject keyboard scroll inputs.
const arrow_down = "\uE015";
const arrow_right = "\uE014";
actions_promise = new test_driver.Actions()
.addPointer("mousePointer1", "mouse")
.pointerMove(0, 0, {origin: target0})
.pointerDown()
.pointerUp()
.addTick()
.keyDown("\uE015")
.keyUp("\uE015")
.keyDown("\uE014")
.keyUp("\uE014")
.send();
actions_promise = actions_promise
.then(()=>test_driver.send_keys(target0, arrow_down))
.then(()=>test_driver.send_keys(target0, arrow_down))
.then(()=>test_driver.send_keys(target0, arrow_right))
.then(()=>test_driver.send_keys(target0, arrow_right));
}
function updateDescriptionNextStepKeyboard() {

View file

@ -1030,5 +1030,27 @@ promise_test(async t => {
assert_true(loadend, 'loadend');
}, 'XHR upload progress events for network fallback');
promise_test(async t => {
// Set page_url to "?ignore" so the service worker falls back to network
// for the main resource request, and add a suffix to avoid colliding
// with other tests.
const page_url = 'resources/?ignore-for-request-body-fallback-string';
const frame = await with_iframe(page_url);
t.add_cleanup(() => { frame.remove(); });
// Add "?clone-and-ignore" so the service worker falls back to
// echo-content.py.
const echo_url = '/fetch/api/resources/echo-content.py?status=421';
const response = await frame.contentWindow.fetch(echo_url, {
method: 'POST',
body: 'text body'
});
assert_equals(response.status, 421);
const text = await response.text();
assert_equals(
text,
'text body. Request was sent 1 times.',
'the network fallback request should include the request body');
}, 'Fetch with POST with text on sw 421 response should not be retried.');
</script>
</body>

View file

@ -167,6 +167,17 @@ function handleCloneAndIgnore(event) {
return;
}
var handle_status_count = 0;
function handleStatus(event) {
handle_status_count++;
event.respondWith(async function() {
const res = await fetch(event.request);
const text = await res.text();
return new Response(`${text}. Request was sent ${handle_status_count} times.`,
{"status": new URL(event.request.url).searchParams.get("status")});
}());
}
self.addEventListener('fetch', function(event) {
var url = event.request.url;
var handlers = [
@ -194,6 +205,7 @@ self.addEventListener('fetch', function(event) {
{ pattern: '?isHistoryNavigation', fn: handleIsHistoryNavigation },
{ pattern: '?use-and-ignore', fn: handleUseAndIgnore },
{ pattern: '?clone-and-ignore', fn: handleCloneAndIgnore },
{ pattern: '?status', fn: handleStatus },
];
var handler = null;

View file

@ -985,6 +985,14 @@
"username": { "input": "caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "username": "café" },
"input": { "username" : "café" },
"expected": {
"input": { "username" : "café" },
"username": { "input": "caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "username": "caf%c3%a9" },
"input": { "username" : "café" },
@ -998,6 +1006,14 @@
"password": { "input": "caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "password": "café" },
"input": { "password" : "café" },
"expected": {
"input": { "password" : "café" },
"password": { "input": "caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "password": "caf%c3%a9" },
"input": { "password" : "café" },
@ -1011,6 +1027,14 @@
"hostname": { "input": "xn--caf-dma.com", "groups": {}}
}
},
{
"pattern": { "hostname": "café.com" },
"input": { "hostname" : "café.com" },
"expected": {
"input": { "hostname" : "café.com" },
"hostname": { "input": "xn--caf-dma.com", "groups": {}}
}
},
{
"pattern": { "port": "" },
"input": { "protocol": "http", "port": "80" },
@ -1020,6 +1044,35 @@
"port": { "input": "", "groups": {}}
}
},
{
"pattern": { "protocol": "http", "port": "80" },
"input": { "protocol": "http", "port": "80" },
"expected": {
"input": { "protocol": "http", "port": "80" },
"protocol": { "input": "http", "groups": {}},
"port": { "input": "", "groups": {}}
}
},
{
"pattern": { "protocol": "http", "port": "80{20}?" },
"input": { "protocol": "http", "port": "80" },
"expected": null
},
{
"pattern": { "protocol": "http", "port": "80 " },
"input": { "protocol": "http", "port": "80" },
"error": true
},
{
"pattern": { "port": "80" },
"input": { "protocol": "http", "port": "80" },
"expected": null
},
{
"pattern": { "protocol": "http{s}?", "port": "80" },
"input": { "protocol": "http", "port": "80" },
"expected": null
},
{
"pattern": { "port": "80" },
"input": { "port": "80" },
@ -1057,6 +1110,14 @@
"pathname": { "input": "/caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "pathname": "/café" },
"input": { "pathname": "/café" },
"expected": {
"input": { "pathname": "/café" },
"pathname": { "input": "/caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "pathname": "/caf%c3%a9" },
"input": { "pathname": "/café" },
@ -1077,6 +1138,25 @@
"pathname": { "input": "/foo/bar", "groups": {}}
}
},
{
"pattern": { "pathname": "/foo/../bar" },
"input": { "pathname": "/bar" },
"expected": {
"input": { "pathname": "/bar" },
"pathname": { "input": "/bar", "groups": {}}
}
},
{
"pattern": { "pathname": "./foo/bar", "baseURL": "https://example.com" },
"input": { "pathname": "foo/bar", "baseURL": "https://example.com" },
"expected": {
"input": { "pathname": "foo/bar", "baseURL": "https://example.com" },
"exactly_empty_components": [ "username", "password", "port" ],
"protocol": { "input": "https", "groups": {}},
"hostname": { "input": "example.com", "groups": {}},
"pathname": { "input": "/foo/bar", "groups": {}}
}
},
{
"pattern": { "pathname": "foo/bar" },
"input": "https://example.com/foo/bar",
@ -1112,6 +1192,14 @@
"search": { "input": "q=caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "search": "q=café" },
"input": { "search": "q=café" },
"expected": {
"input": { "search": "q=café" },
"search": { "input": "q=caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "search": "q=caf%c3%a9" },
"input": { "search": "q=café" },
@ -1125,6 +1213,14 @@
"hash": { "input": "caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "hash": "café" },
"input": { "hash": "café" },
"expected": {
"input": { "hash": "café" },
"hash": { "input": "caf%C3%A9", "groups": {}}
}
},
{
"pattern": { "hash": "caf%c3%a9" },
"input": { "hash": "café" },

View file

@ -8,145 +8,10 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/webrtc/RTCPeerConnection-helper.js"></script>
<script src="/webrtc/RTCStats-helper.js"></script>
<script src="/webrtc-extensions/RTCRtpSynchronizationSource-helper.js"></script>
<script>
'use strict';
var kAbsCaptureTime =
'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time';
function addHeaderExtensionToSdp(sdp, uri) {
const extmap = new RegExp('a=extmap:(\\d+)');
let sdpLines = sdp.split('\r\n');
// This assumes at most one audio m= section and one video m= section.
// If more are present, only the first section of each kind is munged.
for (const section of ['audio', 'video']) {
let found_section = false;
let maxId = undefined;
let maxIdLine = undefined;
let extmapAllowMixed = false;
// find the largest header extension id for section.
for (let i = 0; i < sdpLines.length; ++i) {
if (!found_section) {
if (sdpLines[i].startsWith('m=' + section)) {
found_section = true;
}
continue;
} else {
if (sdpLines[i].startsWith('m=')) {
// end of section
break;
}
}
if (sdpLines[i] === 'a=extmap-allow-mixed') {
extmapAllowMixed = true;
}
let result = sdpLines[i].match(extmap);
if (result && result.length === 2) {
if (maxId == undefined || result[1] > maxId) {
maxId = parseInt(result[1]);
maxIdLine = i;
}
}
}
if (maxId == 14 && !extmapAllowMixed) {
// Reaching the limit of one byte header extension. Adding two byte header
// extension support.
sdpLines.splice(maxIdLine + 1, 0, 'a=extmap-allow-mixed');
}
if (maxIdLine !== undefined) {
sdpLines.splice(maxIdLine + 1, 0,
'a=extmap:' + (maxId + 1).toString() + ' ' + uri);
}
}
return sdpLines.join('\r\n');
}
// TODO(crbug.com/1051821): Use RTP header extension API instead of munging
// when the RTP header extension API is implemented.
async function addAbsCaptureTimeAndExchangeOffer(caller, callee) {
let offer = await caller.createOffer();
// Absolute capture time header extension may not be offered by default,
// in such case, munge the SDP.
offer.sdp = addHeaderExtensionToSdp(offer.sdp, kAbsCaptureTime);
await caller.setLocalDescription(offer);
return callee.setRemoteDescription(offer);
}
// TODO(crbug.com/1051821): Use RTP header extension API instead of munging
// when the RTP header extension API is implemented.
async function checkAbsCaptureTimeAndExchangeAnswer(caller, callee,
absCaptureTimeAnswered) {
let answer = await callee.createAnswer();
const extmap = new RegExp('a=extmap:\\d+ ' + kAbsCaptureTime + '\r\n', 'g');
if (answer.sdp.match(extmap) == null) {
// We expect that absolute capture time RTP header extension is answered.
// But if not, there is no need to proceed with the test.
assert_false(absCaptureTimeAnswered, 'Absolute capture time RTP ' +
'header extension is not answered');
} else {
if (!absCaptureTimeAnswered) {
// We expect that absolute capture time RTP header extension is not
// answered, but it is, then we munge the answer to remove it.
answer.sdp = answer.sdp.replace(extmap, '');
}
}
await callee.setLocalDescription(answer);
return caller.setRemoteDescription(answer);
}
async function exchangeOfferAndListenToOntrack(t, caller, callee,
absCaptureTimeOffered) {
const ontrackPromise = addEventListenerPromise(t, callee, 'track');
// Absolute capture time header extension is expected not offered by default,
// and thus munging is needed to enable it.
await absCaptureTimeOffered
? addAbsCaptureTimeAndExchangeOffer(caller, callee)
: exchangeOffer(caller, callee);
return ontrackPromise;
}
async function initiateSingleTrackCall(t, cap, absCaptureTimeOffered,
absCaptureTimeAnswered) {
const caller = new RTCPeerConnection();
t.add_cleanup(() => caller.close());
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
const stream = await getNoiseStream(cap);
stream.getTracks().forEach(track => {
caller.addTrack(track, stream);
t.add_cleanup(() => track.stop());
});
// TODO(crbug.com/988432): `getSynchronizationSources() on the audio side
// needs a hardware sink for the returned dictionary entries to get updated.
const remoteVideo = document.getElementById('remote');
callee.ontrack = e => {
remoteVideo.srcObject = e.streams[0];
}
exchangeIceCandidates(caller, callee);
await exchangeOfferAndListenToOntrack(t, caller, callee,
absCaptureTimeOffered);
// Exchange answer and check whether the absolute capture time RTP header
// extension is answered.
await checkAbsCaptureTimeAndExchangeAnswer(caller, callee,
absCaptureTimeAnswered);
return [caller, callee];
}
function listenForCaptureTimestamp(t, receiver) {
return new Promise((resolve) => {
function listen() {
@ -165,8 +30,8 @@ function listenForCaptureTimestamp(t, receiver) {
});
}
// This test only passes if the implementation is sending the absolute capture
// timestamp header extension.
// Passes if `getSynchronizationSources()` contains `captureTimestamp` if and
// only if expected.
for (const kind of ['audio', 'video']) {
promise_test(async t => {
const [caller, callee] = await initiateSingleTrackCall(
@ -202,6 +67,9 @@ for (const kind of ['audio', 'video']) {
'negotiated');
}
// Passes if `captureTimestamp` for audio and video are comparable, which is
// expected since the test creates a local peer connection between `caller` and
// `callee`.
promise_test(async t => {
const [caller, callee] = await initiateSingleTrackCall(
t, {audio: true, video: true}, true, true);

View file

@ -0,0 +1,140 @@
'use strict';
// This file depends on `webrtc/RTCPeerConnection-helper.js`
// which should be loaded from the main HTML file.
var kAbsCaptureTime =
'http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time';
function addHeaderExtensionToSdp(sdp, uri) {
const extmap = new RegExp('a=extmap:(\\d+)');
let sdpLines = sdp.split('\r\n');
// This assumes at most one audio m= section and one video m= section.
// If more are present, only the first section of each kind is munged.
for (const section of ['audio', 'video']) {
let found_section = false;
let maxId = undefined;
let maxIdLine = undefined;
let extmapAllowMixed = false;
// find the largest header extension id for section.
for (let i = 0; i < sdpLines.length; ++i) {
if (!found_section) {
if (sdpLines[i].startsWith('m=' + section)) {
found_section = true;
}
continue;
} else {
if (sdpLines[i].startsWith('m=')) {
// end of section
break;
}
}
if (sdpLines[i] === 'a=extmap-allow-mixed') {
extmapAllowMixed = true;
}
let result = sdpLines[i].match(extmap);
if (result && result.length === 2) {
if (maxId == undefined || result[1] > maxId) {
maxId = parseInt(result[1]);
maxIdLine = i;
}
}
}
if (maxId == 14 && !extmapAllowMixed) {
// Reaching the limit of one byte header extension. Adding two byte header
// extension support.
sdpLines.splice(maxIdLine + 1, 0, 'a=extmap-allow-mixed');
}
if (maxIdLine !== undefined) {
sdpLines.splice(maxIdLine + 1, 0,
'a=extmap:' + (maxId + 1).toString() + ' ' + uri);
}
}
return sdpLines.join('\r\n');
}
// TODO(crbug.com/1051821): Use RTP header extension API instead of munging
// when the RTP header extension API is implemented.
async function addAbsCaptureTimeAndExchangeOffer(caller, callee) {
let offer = await caller.createOffer();
// Absolute capture time header extension may not be offered by default,
// in such case, munge the SDP.
offer.sdp = addHeaderExtensionToSdp(offer.sdp, kAbsCaptureTime);
await caller.setLocalDescription(offer);
return callee.setRemoteDescription(offer);
}
// TODO(crbug.com/1051821): Use RTP header extension API instead of munging
// when the RTP header extension API is implemented.
async function checkAbsCaptureTimeAndExchangeAnswer(caller, callee,
absCaptureTimeAnswered) {
let answer = await callee.createAnswer();
const extmap = new RegExp('a=extmap:\\d+ ' + kAbsCaptureTime + '\r\n', 'g');
if (answer.sdp.match(extmap) == null) {
// We expect that absolute capture time RTP header extension is answered.
// But if not, there is no need to proceed with the test.
assert_false(absCaptureTimeAnswered, 'Absolute capture time RTP ' +
'header extension is not answered');
} else {
if (!absCaptureTimeAnswered) {
// We expect that absolute capture time RTP header extension is not
// answered, but it is, then we munge the answer to remove it.
answer.sdp = answer.sdp.replace(extmap, '');
}
}
await callee.setLocalDescription(answer);
return caller.setRemoteDescription(answer);
}
async function exchangeOfferAndListenToOntrack(t, caller, callee,
absCaptureTimeOffered) {
const ontrackPromise = addEventListenerPromise(t, callee, 'track');
// Absolute capture time header extension is expected not offered by default,
// and thus munging is needed to enable it.
await absCaptureTimeOffered
? addAbsCaptureTimeAndExchangeOffer(caller, callee)
: exchangeOffer(caller, callee);
return ontrackPromise;
}
async function initiateSingleTrackCall(t, cap, absCaptureTimeOffered,
absCaptureTimeAnswered) {
const caller = new RTCPeerConnection();
t.add_cleanup(() => caller.close());
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
const stream = await getNoiseStream(cap);
stream.getTracks().forEach(track => {
caller.addTrack(track, stream);
t.add_cleanup(() => track.stop());
});
// TODO(crbug.com/988432): `getSynchronizationSources() on the audio side
// needs a hardware sink for the returned dictionary entries to get updated.
const remoteVideo = document.getElementById('remote');
callee.ontrack = e => {
remoteVideo.srcObject = e.streams[0];
}
exchangeIceCandidates(caller, callee);
await exchangeOfferAndListenToOntrack(t, caller, callee,
absCaptureTimeOffered);
// Exchange answer and check whether the absolute capture time RTP header
// extension is answered.
await checkAbsCaptureTimeAndExchangeAnswer(caller, callee,
absCaptureTimeAnswered);
return [caller, callee];
}