mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
chore: create new Playwright instance when launching server (#6820)
This commit is contained in:
parent
2951f4b065
commit
d21a72e7d5
@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { LaunchServerOptions, Logger } from './client/types';
|
import { LaunchServerOptions, Logger } from './client/types';
|
||||||
import { BrowserType } from './server/browserType';
|
|
||||||
import { Browser } from './server/browser';
|
import { Browser } from './server/browser';
|
||||||
import { EventEmitter } from 'ws';
|
import { EventEmitter } from 'ws';
|
||||||
import { Dispatcher, DispatcherScope } from './dispatchers/dispatcher';
|
import { Dispatcher, DispatcherScope } from './dispatchers/dispatcher';
|
||||||
@ -28,7 +27,7 @@ import { SelectorsDispatcher } from './dispatchers/selectorsDispatcher';
|
|||||||
import { Selectors } from './server/selectors';
|
import { Selectors } from './server/selectors';
|
||||||
import { ProtocolLogger } from './server/types';
|
import { ProtocolLogger } from './server/types';
|
||||||
import { CallMetadata, internalCallMetadata } from './server/instrumentation';
|
import { CallMetadata, internalCallMetadata } from './server/instrumentation';
|
||||||
import { Playwright } from './server/playwright';
|
import { createPlaywright, Playwright } from './server/playwright';
|
||||||
import { PlaywrightDispatcher } from './dispatchers/playwrightDispatcher';
|
import { PlaywrightDispatcher } from './dispatchers/playwrightDispatcher';
|
||||||
import { PlaywrightServer, PlaywrightServerDelegate } from './remote/playwrightServer';
|
import { PlaywrightServer, PlaywrightServerDelegate } from './remote/playwrightServer';
|
||||||
import { BrowserContext } from './server/browserContext';
|
import { BrowserContext } from './server/browserContext';
|
||||||
@ -40,18 +39,17 @@ import { SocksSocketDispatcher } from './dispatchers/socksSocketDispatcher';
|
|||||||
import { SocksInterceptedSocketHandler } from './server/socksServer';
|
import { SocksInterceptedSocketHandler } from './server/socksServer';
|
||||||
|
|
||||||
export class BrowserServerLauncherImpl implements BrowserServerLauncher {
|
export class BrowserServerLauncherImpl implements BrowserServerLauncher {
|
||||||
private _playwright: Playwright;
|
private _browserName: 'chromium' | 'firefox' | 'webkit';
|
||||||
private _browserType: BrowserType;
|
|
||||||
|
|
||||||
constructor(playwright: Playwright, browserType: BrowserType) {
|
constructor(browserName: 'chromium' | 'firefox' | 'webkit') {
|
||||||
this._playwright = playwright;
|
this._browserName = browserName;
|
||||||
this._browserType = browserType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async launchServer(options: LaunchServerOptions = {}): Promise<BrowserServer> {
|
async launchServer(options: LaunchServerOptions = {}): Promise<BrowserServer> {
|
||||||
const portForwardingServer = new BrowserServerPortForwardingServer(this._playwright, !!options._acceptForwardedPorts);
|
const playwright = createPlaywright();
|
||||||
|
const portForwardingServer = new BrowserServerPortForwardingServer(playwright, !!options._acceptForwardedPorts);
|
||||||
// 1. Pre-launch the browser
|
// 1. Pre-launch the browser
|
||||||
const browser = await this._browserType.launch(internalCallMetadata(), {
|
const browser = await playwright[this._browserName].launch(internalCallMetadata(), {
|
||||||
...options,
|
...options,
|
||||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,
|
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,
|
||||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
||||||
@ -66,7 +64,7 @@ export class BrowserServerLauncherImpl implements BrowserServerLauncher {
|
|||||||
onClose: () => {
|
onClose: () => {
|
||||||
portForwardingServer.stop();
|
portForwardingServer.stop();
|
||||||
},
|
},
|
||||||
onConnect: this._onConnect.bind(this, browser, portForwardingServer),
|
onConnect: this._onConnect.bind(this, playwright, browser, portForwardingServer),
|
||||||
};
|
};
|
||||||
const server = new PlaywrightServer(delegate);
|
const server = new PlaywrightServer(delegate);
|
||||||
const wsEndpoint = await server.listen(options.port);
|
const wsEndpoint = await server.listen(options.port);
|
||||||
@ -85,7 +83,7 @@ export class BrowserServerLauncherImpl implements BrowserServerLauncher {
|
|||||||
return browserServer;
|
return browserServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _onConnect(browser: Browser, portForwardingServer: BrowserServerPortForwardingServer, scope: DispatcherScope, forceDisconnect: () => void) {
|
private _onConnect(playwright: Playwright, browser: Browser, portForwardingServer: BrowserServerPortForwardingServer, scope: DispatcherScope, forceDisconnect: () => void) {
|
||||||
const selectors = new Selectors();
|
const selectors = new Selectors();
|
||||||
const selectorsDispatcher = new SelectorsDispatcher(scope, selectors);
|
const selectorsDispatcher = new SelectorsDispatcher(scope, selectors);
|
||||||
const browserDispatcher = new ConnectedBrowserDispatcher(scope, browser, selectors);
|
const browserDispatcher = new ConnectedBrowserDispatcher(scope, browser, selectors);
|
||||||
@ -93,7 +91,7 @@ export class BrowserServerLauncherImpl implements BrowserServerLauncher {
|
|||||||
// Underlying browser did close for some reason - force disconnect the client.
|
// Underlying browser did close for some reason - force disconnect the client.
|
||||||
forceDisconnect();
|
forceDisconnect();
|
||||||
});
|
});
|
||||||
const playwrightDispatcher = new PlaywrightDispatcher(scope, this._playwright, selectorsDispatcher, browserDispatcher, (ports: number[]) => {
|
const playwrightDispatcher = new PlaywrightDispatcher(scope, playwright, selectorsDispatcher, browserDispatcher, (ports: number[]) => {
|
||||||
portForwardingServer.enablePortForwarding(ports);
|
portForwardingServer.enablePortForwarding(ports);
|
||||||
});
|
});
|
||||||
const incomingSocksSocketHandler = (socket: SocksInterceptedSocketHandler) => {
|
const incomingSocksSocketHandler = (socket: SocksInterceptedSocketHandler) => {
|
||||||
|
@ -34,9 +34,9 @@ function setupInProcess(): PlaywrightAPI {
|
|||||||
// Initialize Playwright channel.
|
// Initialize Playwright channel.
|
||||||
new PlaywrightDispatcher(dispatcherConnection.rootDispatcher(), playwright);
|
new PlaywrightDispatcher(dispatcherConnection.rootDispatcher(), playwright);
|
||||||
const playwrightAPI = clientConnection.getObjectWithKnownName('Playwright') as PlaywrightAPI;
|
const playwrightAPI = clientConnection.getObjectWithKnownName('Playwright') as PlaywrightAPI;
|
||||||
playwrightAPI.chromium._serverLauncher = new BrowserServerLauncherImpl(playwright, playwright.chromium);
|
playwrightAPI.chromium._serverLauncher = new BrowserServerLauncherImpl('chromium');
|
||||||
playwrightAPI.firefox._serverLauncher = new BrowserServerLauncherImpl(playwright, playwright.firefox);
|
playwrightAPI.firefox._serverLauncher = new BrowserServerLauncherImpl('firefox');
|
||||||
playwrightAPI.webkit._serverLauncher = new BrowserServerLauncherImpl(playwright, playwright.webkit);
|
playwrightAPI.webkit._serverLauncher = new BrowserServerLauncherImpl('webkit');
|
||||||
|
|
||||||
// Switch to async dispatch after we got Playwright object.
|
// Switch to async dispatch after we got Playwright object.
|
||||||
dispatcherConnection.onmessage = message => setImmediate(() => clientConnection.dispatch(message));
|
dispatcherConnection.onmessage = message => setImmediate(() => clientConnection.dispatch(message));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user