diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index e9034deb9a..f231c907c0 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -320,22 +320,17 @@ export abstract class APIRequestContext extends SdkObject { const notifyRequestFinished = (body?: Buffer) => { const endAt = monotonicTime(); // spec: http://www.softwareishard.com/blog/har-12-spec/#timings + const connectEnd = tlsHandshakeAt ?? tcpConnectionAt; const timings: har.Timings = { send: requestFinishAt! - startAt, wait: responseAt - requestFinishAt!, receive: endAt - responseAt, dns: dnsLookupAt ? dnsLookupAt - startAt : -1, - connect: (tlsHandshakeAt ?? tcpConnectionAt!) - startAt, // "If [ssl] is defined then the time is also included in the connect field " + connect: connectEnd ? connectEnd - startAt : -1, // "If [ssl] is defined then the time is also included in the connect field " ssl: tlsHandshakeAt ? tlsHandshakeAt - tcpConnectionAt! : -1, - blocked: -1, + blocked: reusedSocketAt ? reusedSocketAt - startAt : -1, }; - if (request.reusedSocket) { - timings.blocked = reusedSocketAt! - startAt; - timings.connect = -1; - timings.dns = -1; - } - const requestFinishedEvent: APIRequestFinishedEvent = { requestEvent, httpVersion: response.httpVersion, @@ -496,17 +491,16 @@ export abstract class APIRequestContext extends SdkObject { request.on('close', () => eventsHelper.removeEventListeners(listeners)); request.on('socket', socket => { - // happy eyeballs don't emit lookup and connect events, so we use our custom ones - const happyEyeBallsTimings = timingForSocket(socket); if (request.reusedSocket) { reusedSocketAt = monotonicTime(); - dnsLookupAt = startAt; - tcpConnectionAt = startAt; - } else { - dnsLookupAt = happyEyeBallsTimings.dnsLookupAt; - tcpConnectionAt ??= happyEyeBallsTimings.tcpConnectionAt; + return; } + // happy eyeballs don't emit lookup and connect events, so we use our custom ones + const happyEyeBallsTimings = timingForSocket(socket); + dnsLookupAt = happyEyeBallsTimings.dnsLookupAt; + tcpConnectionAt ??= happyEyeBallsTimings.tcpConnectionAt; + // non-happy-eyeballs sockets listeners.push( eventsHelper.addEventListener(socket, 'lookup', () => { dnsLookupAt = monotonicTime(); }),