/** * Copyright 2022 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 { Browser as BrowserBase, BrowserCloseCallback, BrowserContextOptions, BrowserContext as BrowserContextBase, } from '../../api/Browser.js'; import {Connection} from './Connection.js'; import {ChildProcess} from 'child_process'; import {BrowserContext} from './BrowserContext.js'; /** * @internal */ export class Browser extends BrowserBase { /** * @internal */ static async create(opts: Options): Promise { // TODO: await until the connection is established. (await opts.connection.send('session.new', {})) as {sessionId: string}; return new Browser(opts); } #process?: ChildProcess; #closeCallback?: BrowserCloseCallback; #connection: Connection; /** * @internal */ constructor(opts: Options) { super(); this.#process = opts.process; this.#closeCallback = opts.closeCallback; this.#connection = opts.connection; } override async close(): Promise { await this.#closeCallback?.call(null); this.#connection.dispose(); } override isConnected(): boolean { return !this.#connection.closed; } override process(): ChildProcess | null { return this.#process ?? null; } override async createIncognitoBrowserContext( _options?: BrowserContextOptions ): Promise { return new BrowserContext(this.#connection); } } interface Options { process?: ChildProcess; closeCallback?: BrowserCloseCallback; connection: Connection; }