<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<!
DOCTYPE HTML>
<
html>
<
head>
<
title>Test AbortController in Fetch API</
title>
<
script src=
"/tests/SimpleTest/SimpleTest.js"></
script>
<
link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css" />
</
head>
<
body>
<
script class=
"testbody" type=
"text/javascript">
function testAbortedFetch() {
var ac = new AbortController();
ac.abort();
fetch(
"slow.sjs", { signal: ac.signal }).then(() => {
ok(false,
"Fetch should not return a resolved promise");
}, e => {
is(e.name,
"AbortError",
"We have an abort error");
}).then(next);
}
function testFetchAndAbort() {
var ac = new AbortController();
var p = fetch(
"slow.sjs", { signal: ac.signal });
ac.abort();
p.then(() => {
ok(false,
"Fetch should not return a resolved promise");
}, e => {
is(e.name,
"AbortError",
"We have an abort error");
}).then(next);
}
function testWorkerAbortedFetch() {
var w = new Worker(
"worker_abort_controller_fetch.js");
w.onmessage = function(e) {
ok(e.data,
"Abort + Fetch works in workers");
next();
};
w.postMessage(
"testWorkerAbortedFetch");
}
function testWorkerFetchAndAbort() {
var w = new Worker(
"worker_abort_controller_fetch.js");
w.onmessage = function(e) {
ok(e.data,
"Abort + Fetch works in workers");
next();
};
w.postMessage(
"testWorkerFetchAndAbort");
}
var steps = [
// fetch + signaling
testAbortedFetch,
testFetchAndAbort,
testWorkerAbortedFetch,
testWorkerFetchAndAbort,
];
function next() {
if (!steps.length) {
SimpleTest.finish();
return;
}
var step = steps.shift();
step();
}
SimpleTest.waitForExplicitFinish();
next();
</
script>
</
body>
</
html>