summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/packages/puppeteer-core/src/api/BrowserContext.ts
diff options
context:
space:
mode:
Diffstat (limited to 'remote/test/puppeteer/packages/puppeteer-core/src/api/BrowserContext.ts')
-rw-r--r--remote/test/puppeteer/packages/puppeteer-core/src/api/BrowserContext.ts62
1 files changed, 44 insertions, 18 deletions
diff --git a/remote/test/puppeteer/packages/puppeteer-core/src/api/BrowserContext.ts b/remote/test/puppeteer/packages/puppeteer-core/src/api/BrowserContext.ts
index 79335eb9ed..5e6a5d5d5c 100644
--- a/remote/test/puppeteer/packages/puppeteer-core/src/api/BrowserContext.ts
+++ b/remote/test/puppeteer/packages/puppeteer-core/src/api/BrowserContext.ts
@@ -4,8 +4,19 @@
* SPDX-License-Identifier: Apache-2.0
*/
+import {
+ firstValueFrom,
+ from,
+ merge,
+ raceWith,
+} from '../../third_party/rxjs/rxjs.js';
import {EventEmitter, type EventType} from '../common/EventEmitter.js';
-import {debugError} from '../common/util.js';
+import {
+ debugError,
+ fromEmitterEvent,
+ filterAsync,
+ timeout,
+} from '../common/util.js';
import {asyncDisposeSymbol, disposeSymbol} from '../util/disposable.js';
import type {Browser, Permission, WaitForTargetOptions} from './Browser.js';
@@ -38,13 +49,6 @@ export const enum BrowserContextEvent {
TargetDestroyed = 'targetdestroyed',
}
-export {
- /**
- * @deprecated Use {@link BrowserContextEvent}
- */
- BrowserContextEvent as BrowserContextEmittedEvents,
-};
-
/**
* @public
*/
@@ -55,12 +59,13 @@ export interface BrowserContextEvents extends Record<EventType, unknown> {
}
/**
- * {@link BrowserContext} represents individual sessions within a
+ * {@link BrowserContext} represents individual user contexts within a
* {@link Browser | browser}.
*
* When a {@link Browser | browser} is launched, it has a single
* {@link BrowserContext | browser context} by default. Others can be created
- * using {@link Browser.createIncognitoBrowserContext}.
+ * using {@link Browser.createBrowserContext}. Each context has isolated storage
+ * (cookies/localStorage/etc.)
*
* {@link BrowserContext} {@link EventEmitter | emits} various events which are
* documented in the {@link BrowserContextEvent} enum.
@@ -69,11 +74,11 @@ export interface BrowserContextEvents extends Record<EventType, unknown> {
* `window.open`, the popup will belong to the parent {@link Page.browserContext
* | page's browser context}.
*
- * @example Creating an incognito {@link BrowserContext | browser context}:
+ * @example Creating a new {@link BrowserContext | browser context}:
*
* ```ts
- * // Create a new incognito browser context
- * const context = await browser.createIncognitoBrowserContext();
+ * // Create a new browser context
+ * const context = await browser.createBrowserContext();
* // Create a new page inside context.
* const page = await context.newPage();
* // ... do stuff with page ...
@@ -114,10 +119,19 @@ export abstract class BrowserContext extends EventEmitter<BrowserContextEvents>
* );
* ```
*/
- abstract waitForTarget(
+ async waitForTarget(
predicate: (x: Target) => boolean | Promise<boolean>,
- options?: WaitForTargetOptions
- ): Promise<Target>;
+ options: WaitForTargetOptions = {}
+ ): Promise<Target> {
+ const {timeout: ms = 30000} = options;
+ return await firstValueFrom(
+ merge(
+ fromEmitterEvent(this, BrowserContextEvent.TargetCreated),
+ fromEmitterEvent(this, BrowserContextEvent.TargetChanged),
+ from(this.targets())
+ ).pipe(filterAsync(predicate), raceWith(timeout(ms)))
+ );
+ }
/**
* Gets a list of all open {@link Page | pages} inside this
@@ -131,8 +145,20 @@ export abstract class BrowserContext extends EventEmitter<BrowserContextEvents>
/**
* Whether this {@link BrowserContext | browser context} is incognito.
*
- * The {@link Browser.defaultBrowserContext | default browser context} is the
- * only non-incognito browser context.
+ * In Chrome, the
+ * {@link Browser.defaultBrowserContext | default browser context} is the only
+ * non-incognito browser context.
+ *
+ * @deprecated In Chrome, the
+ * {@link Browser.defaultBrowserContext | default browser context} can also be
+ * "icognito" if configured via the arguments and in such cases this getter
+ * returns wrong results (see
+ * https://github.com/puppeteer/puppeteer/issues/8836). Also, the term
+ * "incognito" is not applicable to other browsers. To migrate, check the
+ * {@link Browser.defaultBrowserContext | default browser context} instead: in
+ * Chrome all non-default contexts are incognito, and the default context
+ * might be incognito if you provide the `--incognito` argument when launching
+ * the browser.
*/
abstract isIncognito(): boolean;