@@ -42,11 +42,11 @@ export class CRNetworkManager {
42
42
this . _eventListeners = this . instrumentNetworkEvents ( client ) ;
43
43
}
44
44
45
- instrumentNetworkEvents ( session : CRSession ) : RegisteredListener [ ] {
45
+ instrumentNetworkEvents ( session : CRSession , workerFrame ?: frames . Frame ) : RegisteredListener [ ] {
46
46
return [
47
- helper . addEventListener ( session , 'Fetch.requestPaused' , this . _onRequestPaused . bind ( this ) ) ,
47
+ helper . addEventListener ( session , 'Fetch.requestPaused' , this . _onRequestPaused . bind ( this , workerFrame ) ) ,
48
48
helper . addEventListener ( session , 'Fetch.authRequired' , this . _onAuthRequired . bind ( this ) ) ,
49
- helper . addEventListener ( session , 'Network.requestWillBeSent' , this . _onRequestWillBeSent . bind ( this ) ) ,
49
+ helper . addEventListener ( session , 'Network.requestWillBeSent' , this . _onRequestWillBeSent . bind ( this , workerFrame ) ) ,
50
50
helper . addEventListener ( session , 'Network.responseReceived' , this . _onResponseReceived . bind ( this ) ) ,
51
51
helper . addEventListener ( session , 'Network.loadingFinished' , this . _onLoadingFinished . bind ( this ) ) ,
52
52
helper . addEventListener ( session , 'Network.loadingFailed' , this . _onLoadingFailed . bind ( this ) ) ,
@@ -102,20 +102,20 @@ export class CRNetworkManager {
102
102
}
103
103
}
104
104
105
- _onRequestWillBeSent ( event : Protocol . Network . requestWillBeSentPayload ) {
105
+ _onRequestWillBeSent ( workerFrame : frames . Frame | undefined , event : Protocol . Network . requestWillBeSentPayload ) {
106
106
// Request interception doesn't happen for data URLs with Network Service.
107
107
if ( this . _protocolRequestInterceptionEnabled && ! event . request . url . startsWith ( 'data:' ) ) {
108
108
const requestId = event . requestId ;
109
109
const interceptionId = this . _requestIdToInterceptionId . get ( requestId ) ;
110
110
if ( interceptionId ) {
111
- this . _onRequest ( event , interceptionId ) ;
111
+ this . _onRequest ( workerFrame , event , interceptionId ) ;
112
112
this . _requestIdToInterceptionId . delete ( requestId ) ;
113
113
} else {
114
114
this . _requestIdToRequestWillBeSentEvent . set ( event . requestId , event ) ;
115
115
}
116
116
return ;
117
117
}
118
- this . _onRequest ( event , null ) ;
118
+ this . _onRequest ( workerFrame , event , null ) ;
119
119
}
120
120
121
121
_onAuthRequired ( event : Protocol . Fetch . authRequiredPayload ) {
@@ -133,7 +133,7 @@ export class CRNetworkManager {
133
133
} ) . catch ( debugError ) ;
134
134
}
135
135
136
- _onRequestPaused ( event : Protocol . Fetch . requestPausedPayload ) {
136
+ _onRequestPaused ( workerFrame : frames . Frame | undefined , event : Protocol . Fetch . requestPausedPayload ) {
137
137
if ( ! this . _userRequestInterceptionEnabled && this . _protocolRequestInterceptionEnabled ) {
138
138
this . _client . send ( 'Fetch.continueRequest' , {
139
139
requestId : event . requestId
@@ -146,14 +146,14 @@ export class CRNetworkManager {
146
146
const interceptionId = event . requestId ;
147
147
const requestWillBeSentEvent = this . _requestIdToRequestWillBeSentEvent . get ( requestId ) ;
148
148
if ( requestWillBeSentEvent ) {
149
- this . _onRequest ( requestWillBeSentEvent , interceptionId ) ;
149
+ this . _onRequest ( workerFrame , requestWillBeSentEvent , interceptionId ) ;
150
150
this . _requestIdToRequestWillBeSentEvent . delete ( requestId ) ;
151
151
} else {
152
152
this . _requestIdToInterceptionId . set ( requestId , interceptionId ) ;
153
153
}
154
154
}
155
155
156
- _onRequest ( event : Protocol . Network . requestWillBeSentPayload , interceptionId : string | null ) {
156
+ _onRequest ( workerFrame : frames . Frame | undefined , event : Protocol . Network . requestWillBeSentPayload , interceptionId : string | null ) {
157
157
if ( event . request . url . startsWith ( 'data:' ) )
158
158
return ;
159
159
let redirectChain : network . Request [ ] = [ ] ;
@@ -165,8 +165,12 @@ export class CRNetworkManager {
165
165
redirectChain = request . request . _redirectChain ;
166
166
}
167
167
}
168
- // TODO: how can frame be null here?
169
- const frame = event . frameId ? this . _page . _frameManager . frame ( event . frameId ) : null ;
168
+ const frame = event . frameId ? this . _page . _frameManager . frame ( event . frameId ) : workerFrame ;
169
+ if ( ! frame ) {
170
+ if ( interceptionId )
171
+ this . _client . send ( 'Fetch.continueRequest' , { requestId : interceptionId } ) . catch ( debugError ) ;
172
+ return ;
173
+ }
170
174
const isNavigationRequest = event . requestId === event . loaderId && event . type === 'Document' ;
171
175
const documentId = isNavigationRequest ? event . loaderId : undefined ;
172
176
const request = new InterceptableRequest ( this . _client , frame , interceptionId , documentId , this . _userRequestInterceptionEnabled , event , redirectChain ) ;
@@ -244,7 +248,7 @@ class InterceptableRequest implements network.RequestDelegate {
244
248
_documentId : string | undefined ;
245
249
private _client : CRSession ;
246
250
247
- constructor ( client : CRSession , frame : frames . Frame | null , interceptionId : string | null , documentId : string | undefined , allowInterception : boolean , event : Protocol . Network . requestWillBeSentPayload , redirectChain : network . Request [ ] ) {
251
+ constructor ( client : CRSession , frame : frames . Frame , interceptionId : string | null , documentId : string | undefined , allowInterception : boolean , event : Protocol . Network . requestWillBeSentPayload , redirectChain : network . Request [ ] ) {
248
252
this . _client = client ;
249
253
this . _requestId = event . requestId ;
250
254
this . _interceptionId = interceptionId ;
0 commit comments