@@ -28,6 +28,7 @@ import { logError } from '../logger';
28
28
export class CRNetworkManager {
29
29
private _client : CRSession ;
30
30
private _page : Page ;
31
+ private _parentManager : CRNetworkManager | null ;
31
32
private _requestIdToRequest = new Map < string , InterceptableRequest > ( ) ;
32
33
private _requestIdToRequestWillBeSentEvent = new Map < string , Protocol . Network . requestWillBeSentPayload > ( ) ;
33
34
private _credentials : { username : string , password : string } | null = null ;
@@ -37,9 +38,10 @@ export class CRNetworkManager {
37
38
private _requestIdToRequestPausedEvent = new Map < string , Protocol . Fetch . requestPausedPayload > ( ) ;
38
39
private _eventListeners : RegisteredListener [ ] ;
39
40
40
- constructor ( client : CRSession , page : Page ) {
41
+ constructor ( client : CRSession , page : Page , parentManager : CRNetworkManager | null ) {
41
42
this . _client = client ;
42
43
this . _page = page ;
44
+ this . _parentManager = parentManager ;
43
45
this . _eventListeners = this . instrumentNetworkEvents ( client ) ;
44
46
}
45
47
@@ -235,7 +237,9 @@ export class CRNetworkManager {
235
237
}
236
238
237
239
_onLoadingFinished ( event : Protocol . Network . loadingFinishedPayload ) {
238
- const request = this . _requestIdToRequest . get ( event . requestId ) ;
240
+ let request = this . _requestIdToRequest . get ( event . requestId ) ;
241
+ if ( ! request )
242
+ request = this . _maybeAdoptMainRequest ( event . requestId ) ;
239
243
// For certain requestIds we never receive requestWillBeSent event.
240
244
// @see https://crbug.com/750469
241
245
if ( ! request )
@@ -253,7 +257,9 @@ export class CRNetworkManager {
253
257
}
254
258
255
259
_onLoadingFailed ( event : Protocol . Network . loadingFailedPayload ) {
256
- const request = this . _requestIdToRequest . get ( event . requestId ) ;
260
+ let request = this . _requestIdToRequest . get ( event . requestId ) ;
261
+ if ( ! request )
262
+ request = this . _maybeAdoptMainRequest ( event . requestId ) ;
257
263
// For certain requestIds we never receive requestWillBeSent event.
258
264
// @see https://crbug.com/750469
259
265
if ( ! request )
@@ -267,6 +273,23 @@ export class CRNetworkManager {
267
273
request . request . _setFailureText ( event . errorText ) ;
268
274
this . _page . _frameManager . requestFailed ( request . request , ! ! event . canceled ) ;
269
275
}
276
+
277
+ private _maybeAdoptMainRequest ( requestId : Protocol . Network . RequestId ) : InterceptableRequest | undefined {
278
+ // OOPIF has a main request that starts in the parent session but finishes in the child session.
279
+ if ( ! this . _parentManager )
280
+ return ;
281
+ const request = this . _parentManager . _requestIdToRequest . get ( requestId ) ;
282
+ // Main requests have matching loaderId and requestId.
283
+ if ( ! request || request . _documentId !== requestId )
284
+ return ;
285
+ this . _requestIdToRequest . set ( requestId , request ) ;
286
+ this . _parentManager . _requestIdToRequest . delete ( requestId ) ;
287
+ if ( request . _interceptionId && this . _parentManager . _attemptedAuthentications . has ( request . _interceptionId ) ) {
288
+ this . _parentManager . _attemptedAuthentications . delete ( request . _interceptionId ) ;
289
+ this . _attemptedAuthentications . add ( request . _interceptionId ) ;
290
+ }
291
+ return request ;
292
+ }
270
293
}
271
294
272
295
class InterceptableRequest implements network . RouteDelegate {
0 commit comments