summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/mozilla/tests/webtransport/bfcache/worker.js
blob: b0eb890f423c36316a3fabf8df9e7a52c0e04f40 (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
export async function worker_function() {

let wt = null;

async function processMessage(e) {
  const target = this;

  function respond(data) {
    target.postMessage(Object.assign(data, {rqid: e.data.rqid}));
  }

  // ORB will block errors (webtransport_url('custom-response.py?:status=404');)
  // so we need to try/catch
  try {
    switch (e.data.op) {
    case 'open': {
      wt = new WebTransport(e.data.url);
      await wt.ready;
      respond({ack: 'open'});
      break;
    }

    case 'openandclose': {
      wt = new WebTransport(e.data.url);
      await wt.ready;
      wt.close();
      await wt.closed;
      respond({ack: 'openandclose'});
      break;
    }

    case 'close': {
      wt.close();
      await wt.closed;
      respond({ack: 'close'});
      break;
    }
    }
  } catch(e) {
    respond({failed: true});
  }
}

self.addEventListener('message', processMessage);

self.addEventListener('connect', ev => {
  // Shared worker case
  ev.ports[0].onmessage = processMessage;
});
}