@@ -42,7 +42,7 @@ export default class SessionState {
4242 private readonly scriptInstanceMeta : IScriptInstanceMeta ;
4343 private readonly createDate = new Date ( ) ;
4444 private readonly frames : { [ frameId : number ] : IFrameRecord } = { } ;
45- private readonly resources : IResourceMeta [ ] = [ ] ;
45+ private readonly resourcesById = new Map < number , IResourceMeta > ( ) ;
4646 private readonly websocketMessages : IWebsocketResourceMessage [ ] = [ ] ;
4747 private websocketListeners : {
4848 [ resourceId : string ] : ( ( msg : IWebsocketResourceMessage ) => any ) [ ] ;
@@ -209,7 +209,7 @@ export default class SessionState {
209209 let resourceMeta = this . getResourceMeta ( resourceId ) ;
210210 if ( ! resourceMeta ) {
211211 resourceMeta = convertedMeta ;
212- this . resources . push ( resourceMeta ) ;
212+ this . resourcesById . set ( resourceMeta . id , resourceMeta ) ;
213213 }
214214 if ( convertedMeta . response ) {
215215 resourceMeta . response ??= convertedMeta . response ;
@@ -229,8 +229,28 @@ export default class SessionState {
229229 const resource = this . resourceEventToMeta ( tabId , resourceEvent ) ;
230230 this . db . resources . insert ( tabId , resource , null , resourceEvent , error ) ;
231231
232- if ( ! this . getResourceMeta ( resource . id ) ) {
233- this . resources . push ( resource ) ;
232+ if ( ! this . resourcesById . has ( resource . id ) ) {
233+ this . resourcesById . set ( resource . id , resource ) ;
234+ }
235+ return resource ;
236+ }
237+
238+ public captureResourceRequestId (
239+ resourceId : number ,
240+ browserRequestId : string ,
241+ tabId : number ,
242+ ) : IResourceMeta {
243+ const resource = this . resourcesById . get ( resourceId ) ;
244+ if ( resource ) {
245+ resource . tabId = tabId ;
246+
247+ // NOTE: browserRequestId can be shared amongst redirects
248+ this . browserRequestIdToResources [ browserRequestId ] ??= [ ] ;
249+ this . browserRequestIdToResources [ browserRequestId ] . push ( {
250+ resourceId,
251+ url : resource . url ,
252+ } ) ;
253+ this . db . resources . updateResource ( resourceId , { browserRequestId, tabId } ) ;
234254 }
235255 return resource ;
236256 }
@@ -246,7 +266,7 @@ export default class SessionState {
246266 this . db . resources . insert ( tabId , resource , resourceResponseEvent . body , resourceEvent ) ;
247267
248268 if ( isResponse ) {
249- this . resources . push ( resource ) ;
269+ this . resourcesById . set ( resource . id , resource ) ;
250270 }
251271 return resource ;
252272 }
@@ -271,9 +291,7 @@ export default class SessionState {
271291
272292 if ( browserRequestId ) {
273293 // NOTE: browserRequestId can be shared amongst redirects
274- if ( ! this . browserRequestIdToResources [ browserRequestId ] ) {
275- this . browserRequestIdToResources [ browserRequestId ] = [ ] ;
276- }
294+ this . browserRequestIdToResources [ browserRequestId ] ??= [ ] ;
277295 this . browserRequestIdToResources [ browserRequestId ] . push ( {
278296 resourceId : resourceEvent . id ,
279297 url : request . url ,
@@ -304,7 +322,7 @@ export default class SessionState {
304322
305323 public getResourceLookupMap ( tabId : number ) : { [ method_url : string ] : IResourceMeta [ ] } {
306324 const result : { [ method_url : string ] : IResourceMeta [ ] } = { } ;
307- for ( const resource of this . resources ) {
325+ for ( const resource of this . resourcesById . values ( ) ) {
308326 if ( resource . tabId === tabId ) {
309327 const key = `${ resource . request . method } _${ resource . request . url } ` ;
310328 result [ key ] ??= [ ] ;
@@ -315,15 +333,19 @@ export default class SessionState {
315333 }
316334
317335 public getResources ( tabId : number ) : IResourceMeta [ ] {
318- return this . resources . filter ( x => x . tabId === tabId ) ;
336+ const resources : IResourceMeta [ ] = [ ] ;
337+ for ( const resource of this . resourcesById . values ( ) ) {
338+ if ( resource . tabId === tabId ) resources . push ( resource ) ;
339+ }
340+ return resources ;
319341 }
320342
321343 public getResourceData ( id : number , decompress : boolean ) : Promise < Buffer > {
322344 return this . db . resources . getResourceBodyById ( id , decompress ) ;
323345 }
324346
325347 public getResourceMeta ( id : number ) : IResourceMeta {
326- return this . resources . find ( x => x . id === id ) ;
348+ return this . resourcesById . get ( id ) ;
327349 }
328350
329351 /////// FRAMES ///////
0 commit comments