| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <meta name="timeout" content="long"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/get-host-info.sub.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/dispatcher/dispatcher.js"></script> |
| <!-- Pull in executor_path needed by newPopup / newIframe --> |
| <script src="/html/cross-origin-embedder-policy/credentialless/resources/common.js"></script> |
| <!-- Pull in importScript / newPopup / newIframe --> |
| <script src="/html/anonymous-iframe/resources/common.js"></script> |
| <script src="resources/common.js"></script> |
| <body> |
| <script> |
| |
| const create_worker_unsuccessful = "Worker creation failed."; |
| const create_worker_successful = "Worker creation succeeded."; |
| |
| const can_create_blob_url_shared_worker_js = (blob_url, response_queue_name) => ` |
| const worker = new SharedWorker("${blob_url}"); |
| worker.onerror = (e) => { |
| send("${response_queue_name}", "${create_worker_unsuccessful}"); |
| }; |
| worker.port.onmessage = (e) => { |
| send("${response_queue_name}", "${create_worker_successful}"); |
| }; |
| `; |
| |
| // Tests cross-partition Shared Worker creation from blob URL. |
| promise_test(t => { |
| return new Promise(async (resolve, reject) => { |
| try { |
| const response_queue_uuid = token(); |
| |
| const [cross_site_iframe_uuid, same_site_iframe_uuid] = |
| await create_test_iframes(t, response_queue_uuid); |
| |
| const worker_js = ` |
| onconnect = function(e) { |
| e.ports[0].postMessage('ping'); |
| self.close(); |
| }; |
| `; |
| |
| const blob = new Blob([worker_js], {type : "text/javascript"}); |
| const blob_url = window.URL.createObjectURL(blob); |
| t.add_cleanup(() => window.URL.revokeObjectURL(blob_url)); |
| |
| // Create a shared worker in the cross-top-level-site iframe. |
| await send(cross_site_iframe_uuid, can_create_blob_url_shared_worker_js(blob_url, response_queue_uuid)); |
| const response_1 = await receive(response_queue_uuid); |
| if (response_1 !== create_worker_unsuccessful) { |
| reject(`Shared worker was created in not-same-top-level-site iframe`); |
| } |
| |
| // Create a shared worker in the same-top-level-site iframe. |
| await send(same_site_iframe_uuid, can_create_blob_url_shared_worker_js(blob_url, response_queue_uuid)); |
| const response_2 = await receive(response_queue_uuid); |
| if (response_2 !== create_worker_successful) { |
| reject(`Shared worker wasn't created in same-top-level-site iframe`); |
| } |
| |
| resolve(); |
| } catch (e) { |
| reject(e); |
| } |
| }); |
| }, "Cross-partition Shared worker shouldn't be created from blob URL."); |
| |
| const can_create_blob_url_dedicated_worker_js = (blob_url, response_queue_name) => ` |
| const worker = new Worker("${blob_url}"); |
| worker.onerror = (e) => { |
| send("${response_queue_name}", "${create_worker_unsuccessful}"); |
| }; |
| worker.onmessage = (e) => { |
| send("${response_queue_name}", "${create_worker_successful}"); |
| worker.terminate(); |
| }; |
| `; |
| |
| // Tests cross-partition Dedicated Worker creation from blob URL. |
| promise_test(t => { |
| return new Promise(async (resolve, reject) => { |
| try { |
| const response_queue_uuid = token(); |
| |
| const [cross_site_iframe_uuid, same_site_iframe_uuid] = |
| await create_test_iframes(t, response_queue_uuid); |
| |
| const blob = new Blob(["postMessage('ping');"], {type : "text/javascript"}); |
| const blob_url = window.URL.createObjectURL(blob); |
| t.add_cleanup(() => window.URL.revokeObjectURL(blob_url)); |
| |
| // Create a dedicated worker in the cross-top-level-site iframe. |
| await send(cross_site_iframe_uuid, can_create_blob_url_dedicated_worker_js(blob_url, response_queue_uuid)); |
| const response_1 = await receive(response_queue_uuid); |
| if (response_1 !== create_worker_unsuccessful) { |
| reject(`Dedicated worker was created in not-same-top-level-site iframe`); |
| } |
| |
| // Create a dedicated worker in the same-top-level-site iframe. |
| await send(same_site_iframe_uuid, can_create_blob_url_dedicated_worker_js(blob_url, response_queue_uuid)); |
| const response_2 = await receive(response_queue_uuid); |
| if (response_2 !== create_worker_successful) { |
| reject(`Dedicated worker wasn't created in same-top-level-site iframe`); |
| } |
| |
| resolve(); |
| } catch (e) { |
| reject(e); |
| } |
| }); |
| }, "Cross-partition Dedicated worker shouldn't be created from blob URL."); |
| |
| </script> |
| </body> |