62 lines
2.3 KiB
HTML
62 lines
2.3 KiB
HTML
<!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>
|