summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/packages/puppeteer-core/src/api/Realm.ts
diff options
context:
space:
mode:
Diffstat (limited to 'remote/test/puppeteer/packages/puppeteer-core/src/api/Realm.ts')
-rw-r--r--remote/test/puppeteer/packages/puppeteer-core/src/api/Realm.ts104
1 files changed, 104 insertions, 0 deletions
diff --git a/remote/test/puppeteer/packages/puppeteer-core/src/api/Realm.ts b/remote/test/puppeteer/packages/puppeteer-core/src/api/Realm.ts
new file mode 100644
index 0000000000..eee1f2c1dd
--- /dev/null
+++ b/remote/test/puppeteer/packages/puppeteer-core/src/api/Realm.ts
@@ -0,0 +1,104 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import type {TimeoutSettings} from '../common/TimeoutSettings.js';
+import type {
+ EvaluateFunc,
+ HandleFor,
+ InnerLazyParams,
+} from '../common/types.js';
+import {TaskManager, WaitTask} from '../common/WaitTask.js';
+import {disposeSymbol} from '../util/disposable.js';
+
+import type {ElementHandle} from './ElementHandle.js';
+import type {Environment} from './Environment.js';
+import type {JSHandle} from './JSHandle.js';
+
+/**
+ * @internal
+ */
+export abstract class Realm implements Disposable {
+ protected readonly timeoutSettings: TimeoutSettings;
+ readonly taskManager = new TaskManager();
+
+ constructor(timeoutSettings: TimeoutSettings) {
+ this.timeoutSettings = timeoutSettings;
+ }
+
+ abstract get environment(): Environment;
+
+ abstract adoptHandle<T extends JSHandle<Node>>(handle: T): Promise<T>;
+ abstract transferHandle<T extends JSHandle<Node>>(handle: T): Promise<T>;
+ abstract evaluateHandle<
+ Params extends unknown[],
+ Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,
+ >(
+ pageFunction: Func | string,
+ ...args: Params
+ ): Promise<HandleFor<Awaited<ReturnType<Func>>>>;
+ abstract evaluate<
+ Params extends unknown[],
+ Func extends EvaluateFunc<Params> = EvaluateFunc<Params>,
+ >(
+ pageFunction: Func | string,
+ ...args: Params
+ ): Promise<Awaited<ReturnType<Func>>>;
+
+ async waitForFunction<
+ Params extends unknown[],
+ Func extends EvaluateFunc<InnerLazyParams<Params>> = EvaluateFunc<
+ InnerLazyParams<Params>
+ >,
+ >(
+ pageFunction: Func | string,
+ options: {
+ polling?: 'raf' | 'mutation' | number;
+ timeout?: number;
+ root?: ElementHandle<Node>;
+ signal?: AbortSignal;
+ } = {},
+ ...args: Params
+ ): Promise<HandleFor<Awaited<ReturnType<Func>>>> {
+ const {
+ polling = 'raf',
+ timeout = this.timeoutSettings.timeout(),
+ root,
+ signal,
+ } = options;
+ if (typeof polling === 'number' && polling < 0) {
+ throw new Error('Cannot poll with non-positive interval');
+ }
+ const waitTask = new WaitTask(
+ this,
+ {
+ polling,
+ root,
+ timeout,
+ signal,
+ },
+ pageFunction as unknown as
+ | ((...args: unknown[]) => Promise<Awaited<ReturnType<Func>>>)
+ | string,
+ ...args
+ );
+ return await waitTask.result;
+ }
+
+ abstract adoptBackendNode(backendNodeId?: number): Promise<JSHandle<Node>>;
+
+ get disposed(): boolean {
+ return this.#disposed;
+ }
+
+ #disposed = false;
+ /** @internal */
+ [disposeSymbol](): void {
+ this.#disposed = true;
+ this.taskManager.terminateAll(
+ new Error('waitForFunction failed: frame got detached.')
+ );
+ }
+}