@@ -232,7 +232,10 @@ export class Recorder extends EventEmitter {
232232 } ) ;
233233
234234 await cdp . send ( "Fetch.enable" , {
235- patterns : [ { urlPattern : "*" , requestStage : "Response" } ] ,
235+ patterns : [
236+ { urlPattern : "*" , requestStage : "Response" } ,
237+ { requestStage : "Request" , resourceType : "Fetch" } ,
238+ ] ,
236239 } ) ;
237240
238241 // Response
@@ -668,6 +671,14 @@ export class Recorder extends EventEmitter {
668671
669672 let continued = false ;
670673
674+ // response is either responseStatusCode or responseErrorReason are set
675+ const isResponse = responseStatusCode || responseErrorReason ;
676+
677+ if ( ! isResponse && networkId ) {
678+ await this . handleFetchRequest ( networkId , requestId , cdp ) ;
679+ return ;
680+ }
681+
671682 try {
672683 if (
673684 responseStatusCode &&
@@ -709,6 +720,37 @@ export class Recorder extends EventEmitter {
709720 }
710721 }
711722
723+ async handleFetchRequest (
724+ networkId : string ,
725+ requestId : string ,
726+ cdp : CDPSession ,
727+ ) {
728+ const reqresp = this . pendingReqResp ( networkId , true ) ;
729+
730+ if (
731+ reqresp &&
732+ reqresp . priority === "Low" &&
733+ reqresp . resourceType === "fetch"
734+ ) {
735+ if ( await this . isDupeFetch ( reqresp ) ) {
736+ this . removeReqResp ( networkId ) ;
737+ await cdp . send ( "Fetch.failRequest" , {
738+ requestId,
739+ errorReason : "Aborted" ,
740+ } ) ;
741+ logger . debug (
742+ "Aborted dupe low-priority fetch in request phase" ,
743+ { url : reqresp . url } ,
744+ "recorder" ,
745+ ) ;
746+ return false ;
747+ }
748+ }
749+
750+ await cdp . send ( "Fetch.continueRequest" , { requestId } ) ;
751+ return true ;
752+ }
753+
712754 async handleFetchResponse (
713755 params : Protocol . Fetch . RequestPausedEvent ,
714756 cdp : CDPSession ,
0 commit comments