blob: e836a523f86e56e37fc83e5c357392581fb31d20 [file] [log] [blame]
// window.stop() below prevents the load event from firing, so wait until it is
// fired to start the test.
setup({explicit_done: true });
onload = () => {
async_test(function(t) {
const client = new XMLHttpRequest();
const result = [];
const expected = [
'readystatechange', 0, 1, // open()
];
let state = 0;
client.onreadystatechange = t.step_func(() => {
result.push('readystatechange', state, client.readyState);
});
client.onabort = t.unreached_func("abort should not be fired after window.stop() and open()");
client.onloadend = t.unreached_func("loadend should not be fired after window.stop() and open()");
client.open("GET", "resources/well-formed.xml");
assert_equals(client.readyState, 1);
state = 1;
client.send(null);
state = 2;
window.stop();
// Unlike client.abort(), window.stop() does not change readyState
// immediately, rather through a task...
assert_equals(client.readyState, 1);
state = 3;
// ... which is then canceled when we open a new request anyway.
client.open("GET", "resources/well-formed.xml");
assert_equals(client.readyState, 1);
assert_array_equals(result, expected);
// Give the abort and loadend events a chance to fire (erroneously) before
// calling this a success.
t.step_timeout(t.step_func_done(), 1000);
}, "open() after window.stop()");
done();
};