diff --git a/docs/api.md b/docs/api.md index 44f34273d1219..10e9062ff8150 100644 --- a/docs/api.md +++ b/docs/api.md @@ -75,7 +75,7 @@ * [event: 'targetdestroyed'](#event-targetdestroyed) * [browser.browserContexts()](#browserbrowsercontexts) * [browser.close()](#browserclose) - * [browser.createIncognitoBrowserContext()](#browsercreateincognitobrowsercontext) + * [browser.createIncognitoBrowserContext([options])](#browsercreateincognitobrowsercontextoptions) * [browser.defaultBrowserContext()](#browserdefaultbrowsercontext) * [browser.disconnect()](#browserdisconnect) * [browser.isConnected()](#browserisconnected) @@ -886,8 +886,10 @@ Closes Chromium and all of its pages (if any were opened). The [Browser] object During the process of closing the browser, Puppeteer attempts to delete the temp folder created exclusively for this browser instance. If this fails (either because a file in the temp folder is locked by another process or because of insufficient permissions) an error is logged. This implies that: a) the folder and/or its content is not fully deleted; and b) the connection with the browser is not properly disposed (see [browser.disconnect()](#browserdisconnect)). -#### browser.createIncognitoBrowserContext() - +#### browser.createIncognitoBrowserContext([options]) +- `options` <[Object]> Set of configurable options to set on the browserContext. Can have the following fields: + - `proxyServer` <[string]> Optional proxy server with optional port to use for all requests. Username and password can be set in [page.authenticate(credentials)](#pageauthenticatecredentials). + - `proxyBypassList` <[string]> Optional: Bypass the proxy for the given semi-colon-separated list of hosts. - returns: <[Promise]<[BrowserContext]>> Creates a new incognito browser context. This won't share cookies/cache with other browser contexts. diff --git a/src/common/Browser.ts b/src/common/Browser.ts index 914b5b191e511..49669f1e7138b 100644 --- a/src/common/Browser.ts +++ b/src/common/Browser.ts @@ -24,6 +24,23 @@ import { Page } from './Page.js'; import { ChildProcess } from 'child_process'; import { Viewport } from './PuppeteerViewport.js'; +/** + * BrowserContext options. + * + * @public + */ +export interface BrowserContextOptions { + /** + * Proxy server with optional port to use for all requests. + * Username and password can be set in `Page.authenticate`. + */ + proxyServer?: string; + /** + * Bypass the proxy for the given semi-colon-separated list of hosts. + */ + proxyBypassList?: string[]; +} + /** * @internal */ @@ -295,9 +312,17 @@ export class Browser extends EventEmitter { * })(); * ``` */ - async createIncognitoBrowserContext(): Promise { + async createIncognitoBrowserContext( + options: BrowserContextOptions = {} + ): Promise { + const { proxyServer = '', proxyBypassList = [] } = options; + const { browserContextId } = await this._connection.send( - 'Target.createBrowserContext' + 'Target.createBrowserContext', + { + proxyServer, + proxyBypassList: proxyBypassList && proxyBypassList.join(','), + } ); const context = new BrowserContext( this._connection, diff --git a/utils/doclint/check_public_api/index.js b/utils/doclint/check_public_api/index.js index 0fffb31f1628f..89697b374a19e 100644 --- a/utils/doclint/check_public_api/index.js +++ b/utils/doclint/check_public_api/index.js @@ -655,6 +655,13 @@ function compareDocumentations(actual, expected) { '"load"|"domcontentloaded"|"networkidle0"|"networkidle2"|Array', }, ], + [ + 'Method Browser.createIncognitoBrowserContext() options', + { + actualName: 'Object', + expectedName: 'BrowserContextOptions', + }, + ], [ 'Method BrowserContext.overridePermissions() permissions', {