@@ -89,6 +89,13 @@ export class Chromium extends BrowserType {
8989 else if ( headersMap && ! Object . keys ( headersMap ) . some ( key => key . toLowerCase ( ) === 'user-agent' ) )
9090 headersMap [ 'User-Agent' ] = getUserAgent ( ) ;
9191
92+ const wsEndpoint = await urlToWSEndpoint ( progress , endpointURL , headersMap ) ;
93+ const chromeTransport = await WebSocketTransport . connect ( progress , wsEndpoint , { headers : headersMap } ) ;
94+ const closeAndWait = async ( ) => await chromeTransport . closeAndWait ( ) ;
95+ return this . _connectOverCDPImpl ( progress , chromeTransport , closeAndWait , options , onClose ) ;
96+ }
97+
98+ private async _connectOverCDPImpl ( progress : Progress , transport : ConnectionTransport , closeAndWait : ( ) => Promise < void > , options : types . LaunchOptions & { isLocal ?: boolean } , onClose ?: ( ) => Promise < void > ) {
9299 const artifactsDir = await progress . race ( fs . promises . mkdtemp ( ARTIFACTS_FOLDER ) ) ;
93100 const doCleanup = async ( ) => {
94101 await removeFolders ( [ artifactsDir ] ) ;
@@ -97,16 +104,12 @@ export class Chromium extends BrowserType {
97104 await cb ?.( ) ;
98105 } ;
99106
100- let chromeTransport : WebSocketTransport | undefined ;
101107 const doClose = async ( ) => {
102- await chromeTransport ?. closeAndWait ( ) ;
108+ await closeAndWait ( ) ;
103109 await doCleanup ( ) ;
104110 } ;
105111
106112 try {
107- const wsEndpoint = await urlToWSEndpoint ( progress , endpointURL , headersMap ) ;
108- chromeTransport = await WebSocketTransport . connect ( progress , wsEndpoint , { headers : headersMap } ) ;
109-
110113 const browserProcess : BrowserProcess = { close : doClose , kill : doClose } ;
111114 const persistent : types . BrowserContextOptions = { noDefaultViewport : true } ;
112115 const browserOptions : BrowserOptions = {
@@ -123,7 +126,7 @@ export class Chromium extends BrowserType {
123126 originalLaunchOptions : { } ,
124127 } ;
125128 validateBrowserContextOptions ( persistent , browserOptions ) ;
126- const browser = await progress . race ( CRBrowser . connect ( this . attribution . playwright , chromeTransport , browserOptions ) ) ;
129+ const browser = await progress . race ( CRBrowser . connect ( this . attribution . playwright , transport , browserOptions ) ) ;
127130 if ( ! options . isLocal )
128131 browser . _isCollocatedWithServer = false ;
129132 browser . on ( Browser . Events . Disconnected , doCleanup ) ;
@@ -134,6 +137,11 @@ export class Chromium extends BrowserType {
134137 }
135138 }
136139
140+ override async connectOverCDPTransport ( progress : Progress , transport : ConnectionTransport ) {
141+ const closeAndWait = async ( ) => transport . close ( ) ;
142+ return this . _connectOverCDPImpl ( progress , transport , closeAndWait , { isLocal : true } ) ;
143+ }
144+
137145 private _createDevTools ( ) {
138146 // TODO: this is totally wrong when using channels.
139147 const directory = registry . findExecutable ( 'chromium' ) . directory ;
0 commit comments