| <!doctype html> | |
| <meta charset="utf-8"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <body> | |
| <script> | |
| promise_test(t => { | |
| const blob_contents = 'test blob contents'; | |
| const blob = new Blob([blob_contents]); | |
| const worker = new Worker('resources/create-helper.js'); | |
| let url; | |
| return new Promise(resolve => { | |
| worker.onmessage = e => resolve(e.data); | |
| worker.postMessage({blob: blob}); | |
| }).then(data => { | |
| url = data.url; | |
| let result = fetch(url); | |
| worker.terminate(); | |
| return result; | |
| }).then(response => response.text()).then(text => { | |
| assert_equals(text, blob_contents); | |
| return new Promise(resolve => t.step_timeout(resolve, 100)); | |
| }).then(() => promise_rejects_js(t, TypeError, fetch(url))); | |
| }, 'Terminating worker revokes its URLs'); | |
| promise_test(t => { | |
| const blob_contents = 'test blob contents'; | |
| const blob = new Blob([blob_contents]); | |
| const frame = document.createElement('iframe'); | |
| frame.setAttribute('style', 'display:none;'); | |
| frame.src = 'resources/create-helper.html'; | |
| document.body.appendChild(frame); | |
| let url; | |
| return new Promise(resolve => { | |
| frame.onload = t.step_func(e => { | |
| resolve(e); | |
| }); | |
| }).then(e => { | |
| frame.contentWindow.postMessage({blob: blob}, '*'); | |
| return new Promise(resolve => { | |
| self.addEventListener('message', t.step_func(e => { | |
| if (e.source === frame.contentWindow) resolve(e); | |
| })); | |
| }); | |
| }).then(e => { | |
| url = e.data.url; | |
| let fetch_result = fetch(url); | |
| document.body.removeChild(frame); | |
| return fetch_result; | |
| }).then(response => response.text()).then(text => { | |
| assert_equals(text, blob_contents); | |
| return new Promise(resolve => t.step_timeout(resolve, 100)); | |
| }).then(() => promise_rejects_js(t, TypeError, fetch(url))); | |
| }, 'Removing an iframe revokes its URLs'); | |
| </script> |