diff options
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.ts | 62 |
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; |