@@ -21,7 +21,7 @@ import type { ObservableWebRequest } from "./network-webrequest-logger";
2121import { contentLengthFromHeaders } from "./network-webrequest-logger" ;
2222
2323type Listeners = {
24- onBeforeRequest : Parameters < ObservableWebRequest [ "onBeforeRequest " ] > [ 1 ] ;
24+ onSendHeaders : Parameters < ObservableWebRequest [ "onSendHeaders " ] > [ 1 ] ;
2525 onCompleted : Parameters < ObservableWebRequest [ "onCompleted" ] > [ 1 ] ;
2626 onErrorOccurred : Parameters < ObservableWebRequest [ "onErrorOccurred" ] > [ 1 ] ;
2727} ;
@@ -33,8 +33,8 @@ function fakeWebRequest(): { webRequest: ObservableWebRequest } & {
3333 return {
3434 listeners,
3535 webRequest : {
36- onBeforeRequest : ( _filter , listener ) => {
37- listeners . onBeforeRequest = listener ;
36+ onSendHeaders : ( _filter , listener ) => {
37+ listeners . onSendHeaders = listener ;
3838 } ,
3939 onCompleted : ( _filter , listener ) => {
4040 listeners . onCompleted = listener ;
@@ -84,29 +84,20 @@ describe("contentLengthFromHeaders", () => {
8484} ) ;
8585
8686describe ( "installRendererNetworkLogging" , ( ) => {
87- it ( "always invokes the onBeforeRequest callback" , async ( ) => {
88- const { listeners } = await installFresh ( ) ;
89- const callback = vi . fn ( ) ;
90-
91- listeners . onBeforeRequest (
92- { id : 1 , method : "GET" , url : "https://example.com/" } ,
93- callback ,
94- ) ;
95-
96- expect ( callback ) . toHaveBeenCalledWith ( { } ) ;
97- } ) ;
98-
9987 it ( "records a completed request and mirrors it to the dev toolbar" , async ( ) => {
10088 const { listeners, devNetwork, record } = await installFresh ( ) ;
10189
102- listeners . onBeforeRequest (
103- { id : 7 , method : "GET" , url : "https://us.posthog.com/api/" } ,
104- vi . fn ( ) ,
105- ) ;
90+ listeners . onSendHeaders ( {
91+ id : 7 ,
92+ method : "GET" ,
93+ url : "https://us.posthog.com/api/" ,
94+ timestamp : 1_000 ,
95+ } ) ;
10696 listeners . onCompleted ( {
10797 id : 7 ,
10898 method : "GET" ,
10999 url : "https://us.posthog.com/api/" ,
100+ timestamp : 1_290 ,
110101 statusCode : 200 ,
111102 responseHeaders : { "Content-Length" : [ "1834" ] } ,
112103 } ) ;
@@ -116,14 +107,16 @@ describe("installRendererNetworkLogging", () => {
116107 method : "GET" ,
117108 url : "https://us.posthog.com/api/" ,
118109 status : 200 ,
119- durationMs : expect . any ( Number ) ,
110+ durationMs : 290 ,
120111 bytes : 1834 ,
121112 } ) ;
122113 expect ( devNetwork . recordExternal ) . toHaveBeenCalledWith (
123114 expect . objectContaining ( {
124115 origin : "renderer" ,
125116 status : 200 ,
126117 ok : true ,
118+ durationMs : 290 ,
119+ startedAt : 1_000 ,
127120 bytes : 1834 ,
128121 } ) ,
129122 ) ;
@@ -132,14 +125,17 @@ describe("installRendererNetworkLogging", () => {
132125 it ( "records a failed request with the chromium error string" , async ( ) => {
133126 const { listeners, devNetwork, record } = await installFresh ( ) ;
134127
135- listeners . onBeforeRequest (
136- { id : 9 , method : "POST" , url : "https://example.com/x" } ,
137- vi . fn ( ) ,
138- ) ;
128+ listeners . onSendHeaders ( {
129+ id : 9 ,
130+ method : "POST" ,
131+ url : "https://example.com/x" ,
132+ timestamp : 5_000 ,
133+ } ) ;
139134 listeners . onErrorOccurred ( {
140135 id : 9 ,
141136 method : "POST" ,
142137 url : "https://example.com/x" ,
138+ timestamp : 5_120 ,
143139 error : "net::ERR_CONNECTION_RESET" ,
144140 } ) ;
145141
@@ -148,13 +144,15 @@ describe("installRendererNetworkLogging", () => {
148144 method : "POST" ,
149145 url : "https://example.com/x" ,
150146 status : null ,
151- durationMs : expect . any ( Number ) ,
147+ durationMs : 120 ,
152148 bytes : null ,
153149 error : "net::ERR_CONNECTION_RESET" ,
154150 } ) ;
155151 expect ( devNetwork . recordExternal ) . toHaveBeenCalledWith (
156152 expect . objectContaining ( {
157153 ok : false ,
154+ durationMs : 120 ,
155+ startedAt : 5_000 ,
158156 error : "net::ERR_CONNECTION_RESET" ,
159157 } ) ,
160158 ) ;
@@ -167,6 +165,7 @@ describe("installRendererNetworkLogging", () => {
167165 id : 3 ,
168166 method : "GET" ,
169167 url : "https://example.com/missing" ,
168+ timestamp : 2_000 ,
170169 statusCode : 404 ,
171170 } ) ;
172171
@@ -175,13 +174,14 @@ describe("installRendererNetworkLogging", () => {
175174 ) ;
176175 } ) ;
177176
178- it ( "still records completions whose start entry was evicted" , async ( ) => {
177+ it ( "still records completions with no start entry ( evicted or cache hit that skipped onSendHeaders) " , async ( ) => {
179178 const { listeners, record } = await installFresh ( ) ;
180179
181180 listeners . onCompleted ( {
182181 id : 999 ,
183182 method : "GET" ,
184183 url : "https://example.com/" ,
184+ timestamp : 3_000 ,
185185 statusCode : 200 ,
186186 } ) ;
187187
0 commit comments