| <!doctype html> | |
| <title>XMLHttpRequest: open() during abort processing - abort() called from 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(), | |
| test_state = 1, | |
| log = [], | |
| expected = [ | |
| "onloadstart readyState before abort() 1", | |
| "onreadystatechange readyState before open() 4", | |
| "onreadystatechange readyState after open() 1", | |
| "onloadstart readyState 1", | |
| "upload.onabort 1", | |
| "upload.onloadend 1", | |
| "client.onabort 1", | |
| "readyState after abort() 1", | |
| "client.onload 4" | |
| ] | |
| client.onreadystatechange = t.step_func(() => { | |
| if(test_state === 2){ | |
| test_state = 3 | |
| log.push('onreadystatechange readyState before open() ' + client.readyState) | |
| client.open("GET", "resources/content.py") | |
| log.push('onreadystatechange readyState after open() ' + client.readyState) | |
| client.send(null) | |
| } | |
| }) | |
| client.onloadstart = t.step_func(() => { | |
| if(test_state === 1){ | |
| test_state = 2 | |
| log.push('onloadstart readyState before abort() ' + client.readyState) | |
| client.abort() | |
| log.push('readyState after abort() ' + client.readyState) | |
| }else{ | |
| log.push('onloadstart readyState ' + client.readyState) | |
| } | |
| }) | |
| client.upload.onabort = t.step_func(() => { | |
| log.push('upload.onabort ' + client.readyState) | |
| }) | |
| client.onabort = t.step_func(() => { | |
| log.push('client.onabort ' + client.readyState) | |
| }) | |
| client.upload.onloadend = t.step_func(() => { | |
| log.push('upload.onloadend ' + client.readyState) | |
| }) | |
| client.onload = t.step_func_done(() => { | |
| log.push('client.onload ' + client.readyState) | |
| assert_array_equals(log, expected) | |
| }) | |
| client.open("POST", "resources/content.py") | |
| client.send('abcd') | |
| }) | |
| </script> |