@@ -18,7 +18,6 @@ import { Browser } from './browser';
1818import { BrowserContext , prepareBrowserContextParams } from './browserContext' ;
1919import { ChannelOwner } from './channelOwner' ;
2020import { envObjectToArray } from './clientHelper' ;
21- import { Connection } from './connection' ;
2221import { Events } from './events' ;
2322import { assert } from '../utils/debug' ;
2423import { headersObjectToArray } from '../utils/headers' ;
@@ -133,40 +132,16 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel> imple
133132 } ;
134133 if ( ( params as any ) . __testHookRedirectPortForwarding )
135134 connectParams . socksProxyRedirectPortForTest = ( params as any ) . __testHookRedirectPortForwarding ;
136- const { pipe, headers : connectHeaders } = await localUtils . connect ( connectParams ) ;
137- const closePipe = ( ) => pipe . close ( ) . catch ( ( ) => { } ) ;
138- const connection = new Connection ( localUtils , this . _platform , this . _instrumentation ) ;
139- connection . markAsRemote ( ) ;
140- connection . on ( 'close' , closePipe ) ;
141-
135+ const connection = await localUtils . connect ( connectParams ) ;
142136 let browser : Browser ;
143- let closeError : string | undefined ;
144- const onPipeClosed = ( reason ?: string ) => {
137+ connection . on ( 'close' , ( ) => {
145138 // Emulate all pages, contexts and the browser closing upon disconnect.
146139 for ( const context of browser ?. contexts ( ) || [ ] ) {
147140 for ( const page of context . pages ( ) )
148141 page . _onClose ( ) ;
149142 context . _onClose ( ) ;
150143 }
151- connection . close ( reason || closeError ) ;
152- // Give a chance to any API call promises to reject upon page/context closure.
153- // This happens naturally when we receive page.onClose and browser.onClose from the server
154- // in separate tasks. However, upon pipe closure we used to dispatch them all synchronously
155- // here and promises did not have a chance to reject.
156- // The order of rejects vs closure is a part of the API contract and our test runner
157- // relies on it to attribute rejections to the right test.
158144 setTimeout ( ( ) => browser ?. _didClose ( ) , 0 ) ;
159- } ;
160- pipe . on ( 'closed' , params => onPipeClosed ( params . reason ) ) ;
161- connection . onmessage = message => this . _wrapApiCall ( ( ) => pipe . send ( { message } ) . catch ( ( ) => onPipeClosed ( ) ) , /* isInternal */ true ) ;
162-
163- pipe . on ( 'message' , ( { message } ) => {
164- try {
165- connection ! . dispatch ( message ) ;
166- } catch ( e ) {
167- closeError = String ( e ) ;
168- closePipe ( ) ;
169- }
170145 } ) ;
171146
172147 const result = await raceAgainstDeadline ( async ( ) => {
@@ -176,21 +151,20 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel> imple
176151
177152 const playwright = await connection ! . initializePlaywright ( ) ;
178153 if ( ! playwright . _initializer . preLaunchedBrowser ) {
179- closePipe ( ) ;
154+ connection . close ( ) ;
180155 throw new Error ( 'Malformed endpoint. Did you use BrowserType.launchServer method?' ) ;
181156 }
182157 playwright . _setSelectors ( this . _playwright . selectors ) ;
183158 browser = Browser . from ( playwright . _initializer . preLaunchedBrowser ! ) ;
184159 this . _didLaunchBrowser ( browser , { } , logger ) ;
185160 browser . _shouldCloseConnectionOnClose = true ;
186- browser . _connectHeaders = connectHeaders ;
187- browser . on ( Events . Browser . Disconnected , ( ) => this . _wrapApiCall ( ( ) => closePipe ( ) , /* isInternal */ true ) ) ;
161+ browser . on ( Events . Browser . Disconnected , ( ) => connection . close ( ) ) ;
188162 return browser ;
189163 } , deadline ) ;
190164 if ( ! result . timedOut ) {
191165 return result . result ;
192166 } else {
193- closePipe ( ) ;
167+ connection . close ( ) ;
194168 throw new Error ( `Timeout ${ params . timeout } ms exceeded` ) ;
195169 }
196170 } ) ;
0 commit comments