diff --git a/src/chromium/crBrowser.ts b/src/chromium/crBrowser.ts index 14ed5b313c..b461a5d35f 100644 --- a/src/chromium/crBrowser.ts +++ b/src/chromium/crBrowser.ts @@ -46,9 +46,9 @@ export class CRBrowser extends BrowserBase { private _tracingClient: CRSession | undefined; readonly _isHeadful: boolean; - static async connect(transport: ConnectionTransport, isPersistent: boolean, logger: InnerLogger, options: { slowMo?: number, headless?: boolean } = {}): Promise { + static async connect(transport: ConnectionTransport, isPersistent: boolean, logger: InnerLogger, options: { slowMo?: number, headless?: boolean, viewport?: types.Size | null } = {}): Promise { const connection = new CRConnection(SlowMoTransport.wrap(transport, options.slowMo), logger); - const browser = new CRBrowser(connection, logger, isPersistent, !options.headless); + const browser = new CRBrowser(connection, logger, { persistent: isPersistent, headful: !options.headless, viewport: options.viewport }); const session = connection.rootSession; if (!isPersistent) { await session.send('Target.setAutoAttach', { autoAttach: true, waitForDebuggerOnStart: true, flatten: true }); @@ -83,14 +83,14 @@ export class CRBrowser extends BrowserBase { return browser; } - constructor(connection: CRConnection, logger: InnerLogger, isPersistent: boolean, isHeadful: boolean) { + constructor(connection: CRConnection, logger: InnerLogger, options: { headful?: boolean, persistent?: boolean, viewport?: types.Size | null } = {}) { super(logger); this._connection = connection; this._session = this._connection.rootSession; - if (isPersistent) - this._defaultContext = new CRBrowserContext(this, null, validateBrowserContextOptions({})); - this._isHeadful = isHeadful; + if (options.persistent) + this._defaultContext = new CRBrowserContext(this, null, validateBrowserContextOptions({ viewport: options.viewport })); + this._isHeadful = !!options.headful; this._connection.on(ConnectionEvents.Disconnected, () => { for (const context of this._contexts.values()) context._browserClosed(); diff --git a/src/chromium/crPage.ts b/src/chromium/crPage.ts index 84bc024a47..820644a388 100644 --- a/src/chromium/crPage.ts +++ b/src/chromium/crPage.ts @@ -375,7 +375,7 @@ class FrameSession { } async _initialize(hasUIWindow: boolean) { - if (hasUIWindow) { + if (hasUIWindow && this._crPage._browserContext._options.viewport !== null) { const { windowId } = await this._client.send('Browser.getWindowForTarget'); this._windowId = windowId; } diff --git a/src/install/installer.ts b/src/install/installer.ts index 67ee570289..0ecede3ceb 100644 --- a/src/install/installer.ts +++ b/src/install/installer.ts @@ -70,7 +70,7 @@ async function validateCache(packagePath: string, browsersPath: string, linksDir } // 3. Install missing browsers for this package. - const myBrowsers = JSON.parse((await fsReadFileAsync(path.join(packagePath, 'browsers.json'))).toString())['browsers']; + const myBrowsers = JSON.parse((await fsReadFileAsync(path.join(packagePath, 'browsers.json'))).toString())['browsers'] as browserPaths.BrowserDescriptor[]; for (const browser of myBrowsers) { const browserPath = browserPaths.browserDirectory(browsersPath, browser); await browserFetcher.downloadBrowserWithProgressBar(browserPath, browser); diff --git a/src/server/processLauncher.ts b/src/server/processLauncher.ts index 3c5101744a..6bb64fec84 100644 --- a/src/server/processLauncher.ts +++ b/src/server/processLauncher.ts @@ -56,6 +56,9 @@ export type LaunchProcessOptions = { pipe?: boolean, tempDir?: string, + cwd?: string, + omitDownloads?: boolean, + // Note: attemptToGracefullyClose should reject if it does not close the browser. attemptToGracefullyClose: () => Promise, onkill: (exitCode: number | null, signal: string | null) => void, @@ -81,7 +84,8 @@ export async function launchProcess(options: LaunchProcessOptions): Promise { @@ -115,7 +119,7 @@ export async function launchProcess(options: LaunchProcessOptions): Promise console.error(err)).then(fulfill); });