summaryrefslogtreecommitdiffstats
path: root/dom/abort/tests/test_abort_controller_fetch.html
blob: 2342ecda89b1af106e41c3b7a9b73d3f2fb853bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!--
  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>