@cloudflare/puppeteer
Version:
A high-level API to control headless Chrome over the DevTools Protocol
81 lines • 2.54 kB
JavaScript
;
/**
* @license
* Copyright 2024 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.CdpBrowserContext = void 0;
const Browser_js_1 = require("../api/Browser.js");
const BrowserContext_js_1 = require("../api/BrowserContext.js");
const assert_js_1 = require("../util/assert.js");
/**
* @internal
*/
class CdpBrowserContext extends BrowserContext_js_1.BrowserContext {
#connection;
#browser;
#id;
constructor(connection, browser, contextId) {
super();
this.#connection = connection;
this.#browser = browser;
this.#id = contextId;
}
get id() {
return this.#id;
}
targets() {
return this.#browser.targets().filter(target => {
return target.browserContext() === this;
});
}
async pages() {
const pages = await Promise.all(this.targets()
.filter(target => {
return (target.type() === 'page' ||
(target.type() === 'other' &&
this.#browser._getIsPageTargetCallback()?.(target)));
})
.map(target => {
return target.page();
}));
return pages.filter((page) => {
return !!page;
});
}
isIncognito() {
return !!this.#id;
}
async overridePermissions(origin, permissions) {
const protocolPermissions = permissions.map(permission => {
const protocolPermission = Browser_js_1.WEB_PERMISSION_TO_PROTOCOL_PERMISSION.get(permission);
if (!protocolPermission) {
throw new Error('Unknown permission: ' + permission);
}
return protocolPermission;
});
await this.#connection.send('Browser.grantPermissions', {
origin,
browserContextId: this.#id || undefined,
permissions: protocolPermissions,
});
}
async clearPermissionOverrides() {
await this.#connection.send('Browser.resetPermissions', {
browserContextId: this.#id || undefined,
});
}
newPage() {
return this.#browser._createPageInContext(this.#id);
}
browser() {
return this.#browser;
}
async close() {
(0, assert_js_1.assert)(this.#id, 'Non-incognito profiles cannot be closed!');
await this.#browser._disposeContext(this.#id);
}
}
exports.CdpBrowserContext = CdpBrowserContext;
//# sourceMappingURL=BrowserContext.js.map