diff options
Diffstat (limited to 'testing/web-platform/mozilla/tests/webgpu/webgpu/web_platform/worker/worker_launcher.js')
-rw-r--r-- | testing/web-platform/mozilla/tests/webgpu/webgpu/web_platform/worker/worker_launcher.js | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/testing/web-platform/mozilla/tests/webgpu/webgpu/web_platform/worker/worker_launcher.js b/testing/web-platform/mozilla/tests/webgpu/webgpu/web_platform/worker/worker_launcher.js index 11c4a4e7e3..2024a96f8e 100644 --- a/testing/web-platform/mozilla/tests/webgpu/webgpu/web_platform/worker/worker_launcher.js +++ b/testing/web-platform/mozilla/tests/webgpu/webgpu/web_platform/worker/worker_launcher.js @@ -1,10 +1,15 @@ /** * AUTO-GENERATED - DO NOT EDIT. Source: https://github.com/gpuweb/cts -**/import { getDefaultRequestAdapterOptions } from '../../../common/util/navigator_gpu.js'; +**/import { SkipTestCase } from '../../../common/framework/fixture.js';import { getDefaultRequestAdapterOptions } from '../../../common/util/navigator_gpu.js'; -export async function launchWorker() { + +export async function launchDedicatedWorker() { + if (typeof Worker === 'undefined') { + throw new SkipTestCase(`Worker undefined in context ${globalThis.constructor.name}`); + } + const selfPath = import.meta.url; const selfPathDir = selfPath.substring(0, selfPath.lastIndexOf('/')); const workerPath = selfPathDir + '/worker.js'; @@ -15,4 +20,56 @@ export async function launchWorker() { }); worker.postMessage({ defaultRequestAdapterOptions: getDefaultRequestAdapterOptions() }); return await promise; +} + +export async function launchSharedWorker() { + if (typeof SharedWorker === 'undefined') { + throw new SkipTestCase(`SharedWorker undefined in context ${globalThis.constructor.name}`); + } + + const selfPath = import.meta.url; + const selfPathDir = selfPath.substring(0, selfPath.lastIndexOf('/')); + const workerPath = selfPathDir + '/worker.js'; + const worker = new SharedWorker(workerPath, { type: 'module' }); + + const port = worker.port; + const promise = new Promise((resolve) => { + port.addEventListener('message', (ev) => resolve(ev.data), { once: true }); + }); + port.start(); + port.postMessage({ + defaultRequestAdapterOptions: getDefaultRequestAdapterOptions() + }); + return await promise; +} + +export async function launchServiceWorker() { + if (typeof navigator === 'undefined' || typeof navigator.serviceWorker === 'undefined') { + throw new SkipTestCase( + `navigator.serviceWorker undefined in context ${globalThis.constructor.name}` + ); + } + + const selfPath = import.meta.url; + const selfPathDir = selfPath.substring(0, selfPath.lastIndexOf('/')); + const serviceWorkerPath = selfPathDir + '/worker.js'; + const registration = await navigator.serviceWorker.register(serviceWorkerPath, { + type: 'module' + }); + await registration.update(); + + const promise = new Promise((resolve) => { + navigator.serviceWorker.addEventListener( + 'message', + (ev) => { + resolve(ev.data); + void registration.unregister(); + }, + { once: true } + ); + }); + registration.active?.postMessage({ + defaultRequestAdapterOptions: getDefaultRequestAdapterOptions() + }); + return await promise; }
\ No newline at end of file |