diff options
Diffstat (limited to 'testing/web-platform/tests/FileAPI/url/cross-global-revoke.sub.html')
-rw-r--r-- | testing/web-platform/tests/FileAPI/url/cross-global-revoke.sub.html | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/testing/web-platform/tests/FileAPI/url/cross-global-revoke.sub.html b/testing/web-platform/tests/FileAPI/url/cross-global-revoke.sub.html new file mode 100644 index 0000000000..ce9d680709 --- /dev/null +++ b/testing/web-platform/tests/FileAPI/url/cross-global-revoke.sub.html @@ -0,0 +1,62 @@ +<!doctype html> +<meta charset="utf-8"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/get-host-info.sub.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_js(t, 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_js(t, 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 = get_host_info().HTTP_REMOTE_ORIGIN + '/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> |