PR-URL: https://github.com/nodejs/node/pull/61750 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
117 lines
No EOL
4.4 KiB
HTML
117 lines
No EOL
4.4 KiB
HTML
<!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> |