summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/mozilla/tests/webgpu/webgpu/web_platform/worker/worker_launcher.js
diff options
context:
space:
mode:
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.js61
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