summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/packages/puppeteer-core/src/api/WebWorker.ts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /remote/test/puppeteer/packages/puppeteer-core/src/api/WebWorker.ts
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'remote/test/puppeteer/packages/puppeteer-core/src/api/WebWorker.ts')
-rw-r--r--remote/test/puppeteer/packages/puppeteer-core/src/api/WebWorker.ts134
1 files changed, 134 insertions, 0 deletions
diff --git a/remote/test/puppeteer/packages/puppeteer-core/src/api/WebWorker.ts b/remote/test/puppeteer/packages/puppeteer-core/src/api/WebWorker.ts
new file mode 100644
index 0000000000..4de287f146
--- /dev/null
+++ b/remote/test/puppeteer/packages/puppeteer-core/src/api/WebWorker.ts
@@ -0,0 +1,134 @@
+/**
+ * @license
+ * Copyright 2018 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {EventEmitter, type EventType} from '../common/EventEmitter.js';
+import {TimeoutSettings} from '../common/TimeoutSettings.js';
+import type {EvaluateFunc, HandleFor} from '../common/types.js';
+import {withSourcePuppeteerURLIfNone} from '../common/util.js';
+
+import type {CDPSession} from './CDPSession.js';
+import type {Realm} from './Realm.js';
+
+/**
+ * This class represents a
+ * {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API | WebWorker}.
+ *
+ * @remarks
+ * The events `workercreated` and `workerdestroyed` are emitted on the page
+ * object to signal the worker lifecycle.
+ *
+ * @example
+ *
+ * ```ts
+ * page.on('workercreated', worker =>
+ * console.log('Worker created: ' + worker.url())
+ * );
+ * page.on('workerdestroyed', worker =>
+ * console.log('Worker destroyed: ' + worker.url())
+ * );
+ *
+ * console.log('Current workers:');
+ * for (const worker of page.workers()) {
+ * console.log(' ' + worker.url());
+ * }
+ * ```
+ *
+ * @public
+ */
+export abstract class WebWorker extends EventEmitter<
+ Record<EventType, unknown>
+> {
+ /**
+ * @internal
+ */
+ readonly timeoutSettings = new TimeoutSettings();
+
+ readonly #url: string;
+
+ /**
+ * @internal
+ */
+ constructor(url: string) {
+ super();
+
+ this.#url = url;
+ }
+
+ /**
+ * @internal
+ */
+ abstract mainRealm(): Realm;
+
+ /**
+ * The URL of this web worker.
+ */
+ url(): string {
+ return this.#url;
+ }
+
+ /**
+ * The CDP session client the WebWorker belongs to.
+ */
+ abstract get client(): CDPSession;
+
+ /**
+ * Evaluates a given function in the {@link WebWorker | worker}.
+ *
+ * @remarks If the given function returns a promise,
+ * {@link WebWorker.evaluate | evaluate} will wait for the promise to resolve.
+ *
+ * As a rule of thumb, if the return value of the given function is more
+ * complicated than a JSON object (e.g. most classes), then
+ * {@link WebWorker.evaluate | evaluate} will _likely_ return some truncated
+ * value (or `{}`). This is because we are not returning the actual return
+ * value, but a deserialized version as a result of transferring the return
+ * value through a protocol to Puppeteer.
+ *
+ * In general, you should use
+ * {@link WebWorker.evaluateHandle | evaluateHandle} if
+ * {@link WebWorker.evaluate | evaluate} cannot serialize the return value
+ * properly or you need a mutable {@link JSHandle | handle} to the return
+ * object.
+ *
+ * @param func - Function to be evaluated.
+ * @param args - Arguments to pass into `func`.
+ * @returns The result of `func`.
+ */
+ async evaluate<
+ Params extends unknown[],
+ Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,
+ >(func: Func | string, ...args: Params): Promise<Awaited<ReturnType<Func>>> {
+ func = withSourcePuppeteerURLIfNone(this.evaluate.name, func);
+ return await this.mainRealm().evaluate(func, ...args);
+ }
+
+ /**
+ * Evaluates a given function in the {@link WebWorker | worker}.
+ *
+ * @remarks If the given function returns a promise,
+ * {@link WebWorker.evaluate | evaluate} will wait for the promise to resolve.
+ *
+ * In general, you should use
+ * {@link WebWorker.evaluateHandle | evaluateHandle} if
+ * {@link WebWorker.evaluate | evaluate} cannot serialize the return value
+ * properly or you need a mutable {@link JSHandle | handle} to the return
+ * object.
+ *
+ * @param func - Function to be evaluated.
+ * @param args - Arguments to pass into `func`.
+ * @returns A {@link JSHandle | handle} to the return value of `func`.
+ */
+ async evaluateHandle<
+ Params extends unknown[],
+ Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,
+ >(
+ func: Func | string,
+ ...args: Params
+ ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {
+ func = withSourcePuppeteerURLIfNone(this.evaluateHandle.name, func);
+ return await this.mainRealm().evaluateHandle(func, ...args);
+ }
+}