• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!doctype html>
2<meta charset="utf-8">
3<script src="/resources/testharness.js"></script>
4<script src="/resources/testharnessreport.js"></script>
5<body>
6<script>
7promise_test(t => {
8  const blob_contents = 'test blob contents';
9  const blob = new Blob([blob_contents]);
10  const worker = new Worker('resources/create-helper.js');
11  let url;
12  return new Promise(resolve => {
13    worker.onmessage = e => resolve(e.data);
14    worker.postMessage({blob: blob});
15  }).then(data => {
16    url = data.url;
17    let result = fetch(url);
18    worker.terminate();
19    return result;
20  }).then(response => response.text()).then(text => {
21    assert_equals(text, blob_contents);
22    return new Promise(resolve => t.step_timeout(resolve, 100));
23  }).then(() => promise_rejects_js(t, TypeError, fetch(url)));
24}, 'Terminating worker revokes its URLs');
25
26promise_test(t => {
27  const blob_contents = 'test blob contents';
28  const blob = new Blob([blob_contents]);
29  const frame = document.createElement('iframe');
30  frame.setAttribute('style', 'display:none;');
31  frame.src = 'resources/create-helper.html';
32  document.body.appendChild(frame);
33
34  let url;
35  return new Promise(resolve => {
36    frame.onload = t.step_func(e => {
37      resolve(e);
38    });
39  }).then(e => {
40    frame.contentWindow.postMessage({blob: blob}, '*');
41    return new Promise(resolve => {
42      self.addEventListener('message', t.step_func(e => {
43        if (e.source === frame.contentWindow) resolve(e);
44      }));
45    });
46  }).then(e => {
47    url = e.data.url;
48    let fetch_result = fetch(url);
49    document.body.removeChild(frame);
50    return fetch_result;
51  }).then(response => response.text()).then(text => {
52    assert_equals(text, blob_contents);
53    return new Promise(resolve => t.step_timeout(resolve, 100));
54  }).then(() => promise_rejects_js(t, TypeError, fetch(url)));
55}, 'Removing an iframe revokes its URLs');
56</script>