@@ -4,7 +4,6 @@ import type { ParsedStack, TestError } from 'vitest'
44import type {
55 BrowserCommand ,
66 BrowserScript ,
7- CDPSession ,
87 ResolvedConfig ,
98 TestProject ,
109 Vite ,
@@ -172,14 +171,26 @@ export class ParentBrowserProject {
172171 } )
173172 }
174173
175- public readonly cdps : Map < string , BrowserServerCDPHandler > = new Map ( )
176- private cdpSessionsPromises = new Map < string , Promise < CDPSession > > ( )
174+ private cdpHandlers = new Map < string , Promise < BrowserServerCDPHandler > > ( )
177175
178- async ensureCDPHandler ( sessionId : string , rpcId : string ) : Promise < BrowserServerCDPHandler > {
179- const cachedHandler = this . cdps . get ( rpcId )
180- if ( cachedHandler ) {
181- return cachedHandler
176+ ensureCDPHandler ( sessionId : string , rpcId : string ) : Promise < BrowserServerCDPHandler > {
177+ let handler = this . cdpHandlers . get ( rpcId )
178+ if ( ! handler ) {
179+ handler = this . createCDPHandler ( sessionId , rpcId )
180+ this . cdpHandlers . set ( rpcId , handler )
181+ handler . catch ( ( ) => {
182+ if ( this . cdpHandlers . get ( rpcId ) === handler ) {
183+ this . cdpHandlers . delete ( rpcId )
184+ }
185+ } )
182186 }
187+ return handler
188+ }
189+
190+ private async createCDPHandler (
191+ sessionId : string ,
192+ rpcId : string ,
193+ ) : Promise < BrowserServerCDPHandler > {
183194 const browserSession = this . vitest . _browserSessions . getSession ( sessionId )
184195 if ( ! browserSession ) {
185196 throw new Error ( `Session "${ sessionId } " not found.` )
@@ -196,28 +207,18 @@ export class ParentBrowserProject {
196207 throw new Error ( `CDP is not supported by the provider "${ provider . name } ".` )
197208 }
198209
199- const session =
200- ( await this . cdpSessionsPromises . get ( rpcId ) ) ??
201- ( await ( async ( ) => {
202- const promise = provider . getCDPSession ! ( sessionId ) . finally ( ( ) => {
203- this . cdpSessionsPromises . delete ( rpcId )
204- } )
205- this . cdpSessionsPromises . set ( rpcId , promise )
206- return promise
207- } ) ( ) )
210+ const session = await provider . getCDPSession ( sessionId )
208211
209212 const rpc = ( browser . state as BrowserServerState ) . testers . get ( rpcId )
210213 if ( ! rpc ) {
211214 throw new Error ( `Tester RPC "${ rpcId } " was not established.` )
212215 }
213216
214- const handler = new BrowserServerCDPHandler ( session , rpc )
215- this . cdps . set ( rpcId , handler )
216- return handler
217+ return new BrowserServerCDPHandler ( session , rpc )
217218 }
218219
219- removeCDPHandler ( sessionId : string ) : void {
220- this . cdps . delete ( sessionId )
220+ removeCDPHandler ( rpcId : string ) : void {
221+ this . cdpHandlers . delete ( rpcId )
221222 }
222223
223224 async formatScripts ( scripts : BrowserScript [ ] | undefined ) : Promise < HtmlTagDescriptor [ ] > {
0 commit comments