@@ -14,7 +14,8 @@ internal class NetworkManager
1414
1515 private readonly CDPSession _client ;
1616 private readonly Dictionary < string , Request > _requestIdToRequest = new Dictionary < string , Request > ( ) ;
17- private readonly Dictionary < string , Request > _interceptionIdToRequest = new Dictionary < string , Request > ( ) ;
17+ private readonly Dictionary < string , RequestWillBeSentPayload > _requestIdToRequestWillBeSentEvent =
18+ new Dictionary < string , RequestWillBeSentPayload > ( ) ;
1819 private readonly MultiMap < string , string > _requestHashToRequestIds = new MultiMap < string , string > ( ) ;
1920 private readonly MultiMap < string , string > _requestHashToInterceptionIds = new MultiMap < string , string > ( ) ;
2021 private readonly FrameManager _frameManager ;
@@ -103,7 +104,7 @@ private async void Client_MessageReceived(object sender, MessageEventArgs e)
103104 switch ( e . MessageID )
104105 {
105106 case "Network.requestWillBeSent" :
106- OnRequestWillBeSent ( e . MessageData . ToObject < RequestWillBeSentResponse > ( ) ) ;
107+ OnRequestWillBeSent ( e . MessageData . ToObject < RequestWillBeSentPayload > ( ) ) ;
107108 break ;
108109 case "Network.requestIntercepted" :
109110 await OnRequestInterceptedAsync ( e . MessageData . ToObject < RequestInterceptedResponse > ( ) ) . ConfigureAwait ( false ) ;
@@ -135,9 +136,9 @@ private void OnLoadingFailed(LoadingFailedResponse e)
135136
136137 if ( request . InterceptionId != null )
137138 {
138- _interceptionIdToRequest . Remove ( request . InterceptionId ) ;
139139 _attemptedAuthentications . Remove ( request . InterceptionId ) ;
140140 }
141+
141142 RequestFailed ( this , new RequestEventArgs
142143 {
143144 Request = request
@@ -156,7 +157,6 @@ private void OnLoadingFinished(LoadingFinishedResponse e)
156157
157158 if ( request . InterceptionId != null )
158159 {
159- _interceptionIdToRequest . Remove ( request . InterceptionId ) ;
160160 _attemptedAuthentications . Remove ( request . InterceptionId ) ;
161161 }
162162
@@ -240,53 +240,56 @@ private async Task OnRequestInterceptedAsync(RequestInterceptedResponse e)
240240 }
241241 }
242242
243- if ( ! string . IsNullOrEmpty ( e . RedirectUrl ) )
244- {
245- var request = _interceptionIdToRequest [ e . InterceptionId ] ;
246-
247- HandleRequestRedirect ( request , e . ResponseStatusCode , e . ResponseHeaders , false , false ) ;
248- HandleRequestStart (
249- request . RequestId ,
250- e . InterceptionId ,
251- e . RedirectUrl ,
252- e . IsNavigationRequest ,
253- e . ResourceType ,
254- e . Request ,
255- e . FrameId ,
256- request . RedirectChainList ) ;
257- return ;
258- }
259-
260243 var requestHash = e . Request . Hash ;
261244 var requestId = _requestHashToRequestIds . FirstValue ( requestHash ) ;
262245 if ( requestId != null )
263246 {
264- _requestHashToRequestIds . Delete ( requestHash , requestId ) ;
265- HandleRequestStart (
266- requestId ,
267- e . InterceptionId ,
268- e . Request . Url ,
269- e . IsNavigationRequest ,
270- e . ResourceType ,
271- e . Request ,
272- e . FrameId ,
273- new List < Request > ( ) ) ;
247+ _requestIdToRequestWillBeSentEvent . TryGetValue ( requestId , out var requestWillBeSentEvent ) ;
248+
249+ if ( requestWillBeSentEvent != null )
250+ {
251+ OnRequest ( requestWillBeSentEvent , e . InterceptionId ) ;
252+ _requestHashToRequestIds . Delete ( requestHash , requestId ) ;
253+ _requestIdToRequestWillBeSentEvent . Remove ( requestId ) ;
254+ }
274255 }
275256 else
276257 {
277258 _requestHashToInterceptionIds . Add ( requestHash , e . InterceptionId ) ;
278- HandleRequestStart (
279- null ,
280- e . InterceptionId ,
281- e . Request . Url ,
282- e . IsNavigationRequest ,
283- e . ResourceType ,
284- e . Request ,
285- e . FrameId ,
286- new List < Request > ( ) ) ;
287259 }
288260 }
289261
262+ private void OnRequest ( RequestWillBeSentPayload e , string interceptionId )
263+ {
264+ var redirectChain = new List < Request > ( ) ;
265+ if ( e . RedirectResponse != null )
266+ {
267+ _requestIdToRequest . TryGetValue ( e . RequestId , out var request ) ;
268+ // If we connect late to the target, we could have missed the requestWillBeSent event.
269+ if ( request != null )
270+ {
271+ HandleRequestRedirect (
272+ request ,
273+ e . RedirectResponse . Status ,
274+ e . RedirectResponse . Headers ,
275+ e . RedirectResponse . FromDiskCache ,
276+ e . RedirectResponse . FromServiceWorker ,
277+ e . RedirectResponse . SecurityDetails ) ;
278+ redirectChain = request . RedirectChainList ;
279+ }
280+ }
281+ var isNavigationRequest = e . RequestId == e . LoaderId && e . Type == ResourceType . Document ;
282+ HandleRequestStart (
283+ e . RequestId ,
284+ interceptionId ,
285+ e . Request . Url ,
286+ isNavigationRequest ,
287+ e . Type ,
288+ e . Request ,
289+ e . FrameId ,
290+ redirectChain ) ;
291+ }
292+
290293 private void OnRequestServedFromCache ( RequestServedFromCacheResponse response )
291294 {
292295 if ( _requestIdToRequest . TryGetValue ( response . RequestId , out var request ) )
@@ -324,15 +327,7 @@ private void HandleRequestStart(
324327 frame ,
325328 redirectChain ) ;
326329
327- if ( ! string . IsNullOrEmpty ( requestId ) )
328- {
329- _requestIdToRequest . Add ( requestId , request ) ;
330- }
331- if ( ! string . IsNullOrEmpty ( interceptionId ) )
332- {
333- _interceptionIdToRequest . Add ( interceptionId , request ) ;
334- }
335-
330+ _requestIdToRequest . Add ( requestId , request ) ;
336331 Request ( this , new RequestEventArgs
337332 {
338333 Request = request
@@ -368,7 +363,6 @@ private void HandleRequestRedirect(
368363
369364 if ( request . InterceptionId != null )
370365 {
371- _interceptionIdToRequest . Remove ( request . InterceptionId ) ;
372366 _attemptedAuthentications . Remove ( request . InterceptionId ) ;
373367 }
374368
@@ -383,49 +377,25 @@ private void HandleRequestRedirect(
383377 } ) ;
384378 }
385379
386- private void OnRequestWillBeSent ( RequestWillBeSentResponse e )
380+ private void OnRequestWillBeSent ( RequestWillBeSentPayload e )
387381 {
388- var redirectChain = new List < Request > ( ) ;
389-
390382 if ( _protocolRequestInterceptionEnabled )
391383 {
392- // All redirects are handled in requestIntercepted.
393- if ( e . RedirectResponse != null )
394- {
395- return ;
396- }
397384 var requestHash = e . Request . Hash ;
398385 var interceptionId = _requestHashToInterceptionIds . FirstValue ( requestHash ) ;
399- if ( interceptionId != null && _interceptionIdToRequest . TryGetValue ( interceptionId , out var request ) )
386+ if ( interceptionId != null )
400387 {
401- request . RequestId = e . RequestId ;
402- _requestIdToRequest [ e . RequestId ] = request ;
388+ OnRequest ( e , interceptionId ) ;
403389 _requestHashToInterceptionIds . Delete ( requestHash , interceptionId ) ;
404390 }
405391 else
406392 {
407393 _requestHashToRequestIds . Add ( requestHash , e . RequestId ) ;
394+ _requestIdToRequestWillBeSentEvent . Add ( e . RequestId , e ) ;
408395 }
409396 return ;
410397 }
411-
412- if ( e . RedirectResponse != null && _requestIdToRequest . ContainsKey ( e . RequestId ) )
413- {
414- var request = _requestIdToRequest [ e . RequestId ] ;
415- // If we connect late to the target, we could have missed the requestWillBeSent event.
416- HandleRequestRedirect (
417- request ,
418- e . RedirectResponse . Status ,
419- e . RedirectResponse . Headers ,
420- e . RedirectResponse . FromDiskCache ,
421- e . RedirectResponse . FromServiceWorker ,
422- e . RedirectResponse . SecurityDetails ) ;
423-
424- redirectChain = request . RedirectChainList ;
425- }
426- var isNavigationRequest = e . RequestId == e . LoaderId && e . Type == ResourceType . Document ;
427-
428- HandleRequestStart ( e . RequestId , null , e . Request . Url , isNavigationRequest , e . Type , e . Request , e . FrameId , redirectChain ) ;
398+ OnRequest ( e , null ) ;
429399 }
430400
431401 private async Task UpdateProtocolRequestInterceptionAsync ( )
0 commit comments