| <!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(t, new 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(t, new TypeError, fetch(url))); |
| }, 'Removing an iframe revokes its URLs'); |
| </script> |