chore: use base BrowserType to reference browser types (#32125)
This commit is contained in:
parent
308381eeae
commit
a28f51a0f3
|
|
@ -133,7 +133,7 @@ export abstract class BrowserType extends SdkObject {
|
|||
if (persistent)
|
||||
validateBrowserContextOptions(persistent, browserOptions);
|
||||
copyTestHooks(options, browserOptions);
|
||||
const browser = await this._connectToTransport(transport, browserOptions);
|
||||
const browser = await this.connectToTransport(transport, browserOptions);
|
||||
(browser as any)._userDataDirForTest = userDataDir;
|
||||
// We assume no control when using custom arguments, and do not prepare the default context in that case.
|
||||
if (persistent && !options.ignoreAllDefaultArgs)
|
||||
|
|
@ -173,9 +173,9 @@ export abstract class BrowserType extends SdkObject {
|
|||
if (ignoreAllDefaultArgs)
|
||||
browserArguments.push(...args);
|
||||
else if (ignoreDefaultArgs)
|
||||
browserArguments.push(...this._defaultArgs(options, isPersistent, userDataDir).filter(arg => ignoreDefaultArgs.indexOf(arg) === -1));
|
||||
browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir).filter(arg => ignoreDefaultArgs.indexOf(arg) === -1));
|
||||
else
|
||||
browserArguments.push(...this._defaultArgs(options, isPersistent, userDataDir));
|
||||
browserArguments.push(...this.defaultArgs(options, isPersistent, userDataDir));
|
||||
|
||||
let executable: string;
|
||||
if (executablePath) {
|
||||
|
|
@ -199,7 +199,7 @@ export abstract class BrowserType extends SdkObject {
|
|||
const { launchedProcess, gracefullyClose, kill } = await launchProcess({
|
||||
command: executable,
|
||||
args: browserArguments,
|
||||
env: this._amendEnvironment(env, userDataDir, executable, browserArguments),
|
||||
env: this.amendEnvironment(env, userDataDir, executable, browserArguments),
|
||||
handleSIGINT,
|
||||
handleSIGTERM,
|
||||
handleSIGHUP,
|
||||
|
|
@ -222,7 +222,7 @@ export abstract class BrowserType extends SdkObject {
|
|||
// We try to gracefully close to prevent crash reporting and core dumps.
|
||||
// Note that it's fine to reuse the pipe transport, since
|
||||
// our connection ignores kBrowserCloseMessageId.
|
||||
this._attemptToGracefullyCloseBrowser(transport!);
|
||||
this.attemptToGracefullyCloseBrowser(transport!);
|
||||
},
|
||||
onExit: (exitCode, signal) => {
|
||||
// Unblock launch when browser prematurely exits.
|
||||
|
|
@ -305,14 +305,14 @@ export abstract class BrowserType extends SdkObject {
|
|||
_rewriteStartupLog(error: Error): Error {
|
||||
if (!isProtocolError(error))
|
||||
return error;
|
||||
return this._doRewriteStartupLog(error);
|
||||
return this.doRewriteStartupLog(error);
|
||||
}
|
||||
|
||||
abstract _defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[];
|
||||
abstract _connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<Browser>;
|
||||
abstract _amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env;
|
||||
abstract _doRewriteStartupLog(error: ProtocolError): ProtocolError;
|
||||
abstract _attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void;
|
||||
abstract defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[];
|
||||
abstract connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<Browser>;
|
||||
abstract amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env;
|
||||
abstract doRewriteStartupLog(error: ProtocolError): ProtocolError;
|
||||
abstract attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void;
|
||||
}
|
||||
|
||||
function copyTestHooks(from: object, to: object) {
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ export class Chromium extends BrowserType {
|
|||
return directory ? new CRDevTools(path.join(directory, 'devtools-preferences.json')) : undefined;
|
||||
}
|
||||
|
||||
async _connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<CRBrowser> {
|
||||
override async connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<CRBrowser> {
|
||||
let devtools = this._devtools;
|
||||
if ((options as any).__testHookForDevTools) {
|
||||
devtools = this._createDevTools();
|
||||
|
|
@ -140,7 +140,7 @@ export class Chromium extends BrowserType {
|
|||
return CRBrowser.connect(this.attribution.playwright, transport, options, devtools);
|
||||
}
|
||||
|
||||
_doRewriteStartupLog(error: ProtocolError): ProtocolError {
|
||||
override doRewriteStartupLog(error: ProtocolError): ProtocolError {
|
||||
if (!error.logs)
|
||||
return error;
|
||||
if (error.logs.includes('Missing X server'))
|
||||
|
|
@ -161,11 +161,11 @@ export class Chromium extends BrowserType {
|
|||
return error;
|
||||
}
|
||||
|
||||
_amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {
|
||||
override amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {
|
||||
return env;
|
||||
}
|
||||
|
||||
_attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {
|
||||
override attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {
|
||||
const message: ProtocolRequest = { method: 'Browser.close', id: kBrowserCloseMessageId, params: {} };
|
||||
transport.send(message);
|
||||
}
|
||||
|
|
@ -277,7 +277,7 @@ export class Chromium extends BrowserType {
|
|||
}
|
||||
}
|
||||
|
||||
_defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {
|
||||
override defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {
|
||||
const chromeArguments = this._innerDefaultArgs(options);
|
||||
chromeArguments.push(`--user-data-dir=${userDataDir}`);
|
||||
if (options.useWebSocket)
|
||||
|
|
|
|||
|
|
@ -33,11 +33,11 @@ export class Firefox extends BrowserType {
|
|||
super(parent, 'firefox');
|
||||
}
|
||||
|
||||
_connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<FFBrowser> {
|
||||
override connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<FFBrowser> {
|
||||
return FFBrowser.connect(this.attribution.playwright, transport, options);
|
||||
}
|
||||
|
||||
_doRewriteStartupLog(error: ProtocolError): ProtocolError {
|
||||
override doRewriteStartupLog(error: ProtocolError): ProtocolError {
|
||||
if (!error.logs)
|
||||
return error;
|
||||
// https://github.com/microsoft/playwright/issues/6500
|
||||
|
|
@ -48,7 +48,7 @@ export class Firefox extends BrowserType {
|
|||
return error;
|
||||
}
|
||||
|
||||
_amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {
|
||||
override amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {
|
||||
if (!path.isAbsolute(os.homedir()))
|
||||
throw new Error(`Cannot launch Firefox with relative home directory. Did you set ${os.platform() === 'win32' ? 'USERPROFILE' : 'HOME'} to a relative path?`);
|
||||
if (os.platform() === 'linux') {
|
||||
|
|
@ -60,12 +60,12 @@ export class Firefox extends BrowserType {
|
|||
return env;
|
||||
}
|
||||
|
||||
_attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {
|
||||
override attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {
|
||||
const message = { method: 'Browser.close', params: {}, id: kBrowserCloseMessageId };
|
||||
transport.send(message);
|
||||
}
|
||||
|
||||
_defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {
|
||||
override defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {
|
||||
const { args = [], headless } = options;
|
||||
const userDataDirArg = args.find(arg => arg.startsWith('-profile') || arg.startsWith('--profile'));
|
||||
if (userDataDirArg)
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import { debugLogger } from '../utils/debugLogger';
|
|||
import type { Page } from './page';
|
||||
import { DebugController } from './debugController';
|
||||
import type { Language } from '../utils/isomorphic/locatorGenerators';
|
||||
import type { BrowserType } from './browserType';
|
||||
|
||||
type PlaywrightOptions = {
|
||||
socksProxyPort?: number;
|
||||
|
|
@ -38,11 +39,11 @@ type PlaywrightOptions = {
|
|||
|
||||
export class Playwright extends SdkObject {
|
||||
readonly selectors: Selectors;
|
||||
readonly chromium: Chromium;
|
||||
readonly chromium: BrowserType;
|
||||
readonly android: Android;
|
||||
readonly electron: Electron;
|
||||
readonly firefox: Firefox;
|
||||
readonly webkit: WebKit;
|
||||
readonly firefox: BrowserType;
|
||||
readonly webkit: BrowserType;
|
||||
readonly options: PlaywrightOptions;
|
||||
readonly debugController: DebugController;
|
||||
private _allPages = new Set<Page>();
|
||||
|
|
|
|||
|
|
@ -32,15 +32,15 @@ export class WebKit extends BrowserType {
|
|||
super(parent, 'webkit');
|
||||
}
|
||||
|
||||
_connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<WKBrowser> {
|
||||
override connectToTransport(transport: ConnectionTransport, options: BrowserOptions): Promise<WKBrowser> {
|
||||
return WKBrowser.connect(this.attribution.playwright, transport, options);
|
||||
}
|
||||
|
||||
_amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {
|
||||
override amendEnvironment(env: Env, userDataDir: string, executable: string, browserArguments: string[]): Env {
|
||||
return { ...env, CURL_COOKIE_JAR_PATH: path.join(userDataDir, 'cookiejar.db') };
|
||||
}
|
||||
|
||||
_doRewriteStartupLog(error: ProtocolError): ProtocolError {
|
||||
override doRewriteStartupLog(error: ProtocolError): ProtocolError {
|
||||
if (!error.logs)
|
||||
return error;
|
||||
if (error.logs.includes('cannot open display'))
|
||||
|
|
@ -48,11 +48,11 @@ export class WebKit extends BrowserType {
|
|||
return error;
|
||||
}
|
||||
|
||||
_attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {
|
||||
override attemptToGracefullyCloseBrowser(transport: ConnectionTransport): void {
|
||||
transport.send({ method: 'Playwright.close', params: {}, id: kBrowserCloseMessageId });
|
||||
}
|
||||
|
||||
_defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {
|
||||
override defaultArgs(options: types.LaunchOptions, isPersistent: boolean, userDataDir: string): string[] {
|
||||
const { args = [], proxy, headless } = options;
|
||||
const userDataDirArg = args.find(arg => arg.startsWith('--user-data-dir'));
|
||||
if (userDataDirArg)
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ it('should have passed URL when launching with ignoreDefaultArgs: true', async (
|
|||
it.skip(mode !== 'default');
|
||||
|
||||
const userDataDir = await createUserDataDir();
|
||||
const args = toImpl(browserType)._defaultArgs((browserType as any)._defaultLaunchOptions, 'persistent', userDataDir, 0).filter(a => a !== 'about:blank');
|
||||
const args = toImpl(browserType).defaultArgs((browserType as any)._defaultLaunchOptions, 'persistent', userDataDir, 0).filter(a => a !== 'about:blank');
|
||||
const options = {
|
||||
args: browserName === 'firefox' ? [...args, '-new-tab', server.EMPTY_PAGE] : [...args, server.EMPTY_PAGE],
|
||||
ignoreDefaultArgs: true,
|
||||
|
|
|
|||
Loading…
Reference in a new issue