@@ -31,27 +31,30 @@ for (const arg of chromiumSwitches) {
31
31
app . commandLine . appendSwitch ( match [ 1 ] , match [ 2 ] ) ;
32
32
}
33
33
34
+ // Defer ready event.
35
+ const originalWhenReady = app . whenReady ( ) ;
36
+ const originalEmit = app . emit . bind ( app ) ;
37
+ let readyEventArgs : any [ ] ;
38
+ app . emit = ( event : string | symbol , ...args : any [ ] ) : boolean => {
39
+ if ( event === 'ready' ) {
40
+ readyEventArgs = args ;
41
+ return app . listenerCount ( 'ready' ) > 0 ;
42
+ }
43
+ return originalEmit ( event , ...args ) ;
44
+ } ;
34
45
app . getAppPath = ( ) => path . dirname ( appPath ) ;
46
+ let isReady = false ;
47
+ let whenReadyCallback : ( event : any ) => any ;
48
+ const whenReadyPromise = new Promise < void > ( f => whenReadyCallback = f ) ;
49
+ app . isReady = ( ) => isReady ;
50
+ app . whenReady = ( ) => whenReadyPromise ;
35
51
36
- let launchInfoEventPayload : any ;
37
- app . on ( 'ready' , launchInfo => launchInfoEventPayload = launchInfo ) ;
52
+ require ( appPath ) ;
38
53
39
54
( globalThis as any ) . __playwright_run = async ( ) => {
40
55
// Wait for app to be ready to avoid browser initialization races.
41
- await app . whenReady ( ) ;
42
-
43
- // Override isReady pipeline.
44
- let isReady = false ;
45
- let whenReadyCallback : ( ) => void ;
46
- const whenReadyPromise = new Promise < void > ( f => whenReadyCallback = f ) ;
47
- app . isReady = ( ) => isReady ;
48
- app . whenReady = ( ) => whenReadyPromise ;
49
-
50
- require ( appPath ) ;
51
-
52
- // Trigger isReady.
56
+ const event = await originalWhenReady ;
53
57
isReady = true ;
54
- whenReadyCallback ! ( ) ;
55
- app . emit ( 'will-finish-launching' ) ;
56
- app . emit ( 'ready' , launchInfoEventPayload ) ;
58
+ whenReadyCallback ( event ) ;
59
+ originalEmit ( 'ready' , ...readyEventArgs ) ;
57
60
} ;
0 commit comments