| <!doctype html> |
| <title>XMLHttpRequest: open() during abort event - abort() called from upload.onloadstart</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <script> |
| async_test(t => { |
| let client = new XMLHttpRequest(), |
| log = [], |
| lastTest = false, |
| expected = [ |
| 'readyState before abort() 1', |
| "upload.onabort - before open() 4", |
| "readyState after open() 1", |
| "client.onabort 1", |
| "client.onloadend 1", |
| "readyState after abort() 1", |
| "client.onload 4", |
| "client.onloadend 4" |
| ] |
| |
| client.upload.onloadstart = t.step_func(() => { |
| log.push('readyState before abort() '+client.readyState) |
| client.abort() |
| log.push('readyState after abort() '+client.readyState) |
| }) |
| |
| client.upload.onabort = t.step_func(() => { |
| log.push('upload.onabort - before open() ' + client.readyState) |
| client.open("GET", "resources/content.py") |
| log.push('readyState after open() ' + client.readyState) |
| client.send(null) |
| }) |
| |
| client.onabort = t.step_func(() => { |
| // happens immediately after all of upload.onabort, so readyState is 1 |
| log.push('client.onabort ' + client.readyState) |
| }) |
| |
| client.onloadend = t.step_func(() => { |
| log.push('client.onloadend ' + client.readyState) |
| if(lastTest) { |
| assert_array_equals(log, expected) |
| t.done() |
| } |
| lastTest = true |
| }) |
| |
| client.onload = t.step_func(() => { |
| log.push('client.onload ' + client.readyState) |
| }) |
| |
| client.open("POST", "resources/content.py") |
| client.send("non-empty") |
| }) |
| </script> |