• 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>
7async_test(t => {
8  const blob_contents = 'test blob contents';
9  const blob = new Blob([blob_contents]);
10  const url = URL.createObjectURL(blob);
11  const frame = document.createElement('iframe');
12  frame.setAttribute('style', 'display:none;');
13  frame.src = 'resources/revoke-helper.html';
14  document.body.appendChild(frame);
15
16  frame.onload = t.step_func(e => {
17    frame.contentWindow.postMessage({url: url}, '*');
18  });
19
20  self.addEventListener('message', t.step_func(e => {
21    if (e.source !== frame.contentWindow) return;
22    assert_equals(e.data, 'revoked');
23    promise_rejects_js(t, TypeError, fetch(url)).then(t.step_func_done());
24  }));
25}, 'It is possible to revoke same-origin blob URLs from different frames.');
26
27async_test(t => {
28  const blob_contents = 'test blob contents';
29  const blob = new Blob([blob_contents]);
30  const url = URL.createObjectURL(blob);
31  const worker = new Worker('resources/revoke-helper.js');
32  worker.onmessage = t.step_func(e => {
33    assert_equals(e.data, 'revoked');
34    promise_rejects_js(t, TypeError, fetch(url)).then(t.step_func_done());
35  });
36  worker.postMessage({url: url});
37}, 'It is possible to revoke same-origin blob URLs from a different worker global.');
38
39async_test(t => {
40  const blob_contents = 'test blob contents';
41  const blob = new Blob([blob_contents]);
42  const url = URL.createObjectURL(blob);
43  const frame = document.createElement('iframe');
44  frame.setAttribute('style', 'display:none;');
45  frame.src = '//{{domains[www1]}}:{{location[port]}}/FileAPI/url/resources/revoke-helper.html';
46  document.body.appendChild(frame);
47
48  frame.onload = t.step_func(e => {
49    frame.contentWindow.postMessage({url: url}, '*');
50  });
51
52  self.addEventListener('message', t.step_func(e => {
53    if (e.source !== frame.contentWindow) return;
54    assert_equals(e.data, 'revoked');
55    fetch(url).then(response => response.text()).then(t.step_func_done(text => {
56      assert_equals(text, blob_contents);
57    }), t.unreached_func('Unexpected promise rejection'));
58  }));
59}, 'It is not possible to revoke cross-origin blob URLs.');
60
61</script>