<!doctype html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
async_test(t => {
  const blob_contents = 'test blob contents';
  const blob = new Blob([blob_contents]);
  const url = URL.createObjectURL(blob);
  const frame = document.createElement('iframe');
  frame.setAttribute('style', 'display:none;');
  frame.src = 'resources/revoke-helper.html';
  document.body.appendChild(frame);

  frame.onload = t.step_func(e => {
    frame.contentWindow.postMessage({url: url}, '*');
  });

  self.addEventListener('message', t.step_func(e => {
    if (e.source !== frame.contentWindow) return;
    assert_equals(e.data, 'revoked');
    promise_rejects(t, new TypeError, fetch(url)).then(t.step_func_done());
  }));
}, 'It is possible to revoke same-origin blob URLs from different frames.');

async_test(t => {
  const blob_contents = 'test blob contents';
  const blob = new Blob([blob_contents]);
  const url = URL.createObjectURL(blob);
  const worker = new Worker('resources/revoke-helper.js');
  worker.onmessage = t.step_func(e => {
    assert_equals(e.data, 'revoked');
    promise_rejects(t, new TypeError, fetch(url)).then(t.step_func_done());
  });
  worker.postMessage({url: url});
}, 'It is possible to revoke same-origin blob URLs from a different worker global.');

async_test(t => {
  const blob_contents = 'test blob contents';
  const blob = new Blob([blob_contents]);
  const url = URL.createObjectURL(blob);
  const frame = document.createElement('iframe');
  frame.setAttribute('style', 'display:none;');
  frame.src = '//{{domains[www1]}}:{{location[port]}}/FileAPI/url/resources/revoke-helper.html';
  document.body.appendChild(frame);

  frame.onload = t.step_func(e => {
    frame.contentWindow.postMessage({url: url}, '*');
  });

  self.addEventListener('message', t.step_func(e => {
    if (e.source !== frame.contentWindow) return;
    assert_equals(e.data, 'revoked');
    fetch(url).then(response => response.text()).then(t.step_func_done(text => {
      assert_equals(text, blob_contents);
    }), t.unreached_func('Unexpected promise rejection'));
  }));
}, 'It is not possible to revoke cross-origin blob URLs.');

</script>