%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
<!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_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 = '//{{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>