182 lines
5.3 KiB
TypeScript
182 lines
5.3 KiB
TypeScript
|
/**
|
||
|
* Copyright 2017 Google Inc. All rights reserved.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
import {EventEmitter} from '../common/EventEmitter.js';
|
||
|
import {Page} from './Page.js';
|
||
|
import {Target} from '../common/Target.js';
|
||
|
import type {Permission, Browser} from './Browser.js';
|
||
|
|
||
|
/**
|
||
|
* BrowserContexts provide a way to operate multiple independent browser
|
||
|
* sessions. When a browser is launched, it has a single BrowserContext used by
|
||
|
* default. The method {@link Browser.newPage | Browser.newPage} creates a page
|
||
|
* in the default browser context.
|
||
|
*
|
||
|
* @remarks
|
||
|
*
|
||
|
* The Browser class extends from Puppeteer's {@link EventEmitter} class and
|
||
|
* will emit various events which are documented in the
|
||
|
* {@link BrowserContextEmittedEvents} enum.
|
||
|
*
|
||
|
* If a page opens another page, e.g. with a `window.open` call, the popup will
|
||
|
* belong to the parent page's browser context.
|
||
|
*
|
||
|
* Puppeteer allows creation of "incognito" browser contexts with
|
||
|
* {@link Browser.createIncognitoBrowserContext | Browser.createIncognitoBrowserContext}
|
||
|
* method. "Incognito" browser contexts don't write any browsing data to disk.
|
||
|
*
|
||
|
* @example
|
||
|
*
|
||
|
* ```ts
|
||
|
* // Create a new incognito browser context
|
||
|
* const context = await browser.createIncognitoBrowserContext();
|
||
|
* // Create a new page inside context.
|
||
|
* const page = await context.newPage();
|
||
|
* // ... do stuff with page ...
|
||
|
* await page.goto('https://example.com');
|
||
|
* // Dispose context once it's no longer needed.
|
||
|
* await context.close();
|
||
|
* ```
|
||
|
*
|
||
|
* @public
|
||
|
*/
|
||
|
|
||
|
export class BrowserContext extends EventEmitter {
|
||
|
/**
|
||
|
* @internal
|
||
|
*/
|
||
|
constructor() {
|
||
|
super();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* An array of all active targets inside the browser context.
|
||
|
*/
|
||
|
targets(): Target[] {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This searches for a target in this specific browser context.
|
||
|
*
|
||
|
* @example
|
||
|
* An example of finding a target for a page opened via `window.open`:
|
||
|
*
|
||
|
* ```ts
|
||
|
* await page.evaluate(() => window.open('https://www.example.com/'));
|
||
|
* const newWindowTarget = await browserContext.waitForTarget(
|
||
|
* target => target.url() === 'https://www.example.com/'
|
||
|
* );
|
||
|
* ```
|
||
|
*
|
||
|
* @param predicate - A function to be run for every target
|
||
|
* @param options - An object of options. Accepts a timout,
|
||
|
* which is the maximum wait time in milliseconds.
|
||
|
* Pass `0` to disable the timeout. Defaults to 30 seconds.
|
||
|
* @returns Promise which resolves to the first target found
|
||
|
* that matches the `predicate` function.
|
||
|
*/
|
||
|
waitForTarget(
|
||
|
predicate: (x: Target) => boolean | Promise<boolean>,
|
||
|
options?: {timeout?: number}
|
||
|
): Promise<Target>;
|
||
|
waitForTarget(): Promise<Target> {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* An array of all pages inside the browser context.
|
||
|
*
|
||
|
* @returns Promise which resolves to an array of all open pages.
|
||
|
* Non visible pages, such as `"background_page"`, will not be listed here.
|
||
|
* You can find them using {@link Target.page | the target page}.
|
||
|
*/
|
||
|
pages(): Promise<Page[]> {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns whether BrowserContext is incognito.
|
||
|
* The default browser context is the only non-incognito browser context.
|
||
|
*
|
||
|
* @remarks
|
||
|
* The default browser context cannot be closed.
|
||
|
*/
|
||
|
isIncognito(): boolean {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @example
|
||
|
*
|
||
|
* ```ts
|
||
|
* const context = browser.defaultBrowserContext();
|
||
|
* await context.overridePermissions('https://html5demos.com', [
|
||
|
* 'geolocation',
|
||
|
* ]);
|
||
|
* ```
|
||
|
*
|
||
|
* @param origin - The origin to grant permissions to, e.g. "https://example.com".
|
||
|
* @param permissions - An array of permissions to grant.
|
||
|
* All permissions that are not listed here will be automatically denied.
|
||
|
*/
|
||
|
overridePermissions(origin: string, permissions: Permission[]): Promise<void>;
|
||
|
overridePermissions(): Promise<void> {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Clears all permission overrides for the browser context.
|
||
|
*
|
||
|
* @example
|
||
|
*
|
||
|
* ```ts
|
||
|
* const context = browser.defaultBrowserContext();
|
||
|
* context.overridePermissions('https://example.com', ['clipboard-read']);
|
||
|
* // do stuff ..
|
||
|
* context.clearPermissionOverrides();
|
||
|
* ```
|
||
|
*/
|
||
|
clearPermissionOverrides(): Promise<void> {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a new page in the browser context.
|
||
|
*/
|
||
|
newPage(): Promise<Page> {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* The browser this browser context belongs to.
|
||
|
*/
|
||
|
browser(): Browser {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Closes the browser context. All the targets that belong to the browser context
|
||
|
* will be closed.
|
||
|
*
|
||
|
* @remarks
|
||
|
* Only incognito browser contexts can be closed.
|
||
|
*/
|
||
|
close(): Promise<void> {
|
||
|
throw new Error('Not implemented');
|
||
|
}
|
||
|
}
|