From 2bdbe09773821ec48c1cda8fda34c35b91ee4e31 Mon Sep 17 00:00:00 2001 From: Khafra Date: Sun, 23 Mar 2025 10:50:24 -0400 Subject: [PATCH 1/2] fix 4105 --- lib/web/fetch/index.js | 7 ++++--- test/fetch/issue-4105.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 test/fetch/issue-4105.js diff --git a/lib/web/fetch/index.js b/lib/web/fetch/index.js index 38bcfd3dfc2..645fa197d73 100644 --- a/lib/web/fetch/index.js +++ b/lib/web/fetch/index.js @@ -309,7 +309,9 @@ function finalizeAndReportTiming (response, initiatorType = 'other') { originalURL.href, initiatorType, globalThis, - cacheState + cacheState, + '', // bodyType + response.status ) } @@ -994,7 +996,7 @@ function fetchFinale (fetchParams, response) { // 3. Set fetchParams’s controller’s report timing steps to the following steps given a global object global: fetchParams.controller.reportTimingSteps = () => { // 1. If fetchParams’s request’s URL’s scheme is not an HTTP(S) scheme, then return. - if (fetchParams.request.url.protocol !== 'https:') { + if (!urlIsHttpHttpsScheme(fetchParams.request.url)) { return } @@ -1036,7 +1038,6 @@ function fetchFinale (fetchParams, response) { // fetchParams’s request’s URL, fetchParams’s request’s initiator type, global, cacheState, bodyInfo, // and responseStatus. if (fetchParams.request.initiatorType != null) { - // TODO: update markresourcetiming markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus) } } diff --git a/test/fetch/issue-4105.js b/test/fetch/issue-4105.js new file mode 100644 index 00000000000..a66afb75f07 --- /dev/null +++ b/test/fetch/issue-4105.js @@ -0,0 +1,32 @@ +'use strict' + +const { once } = require('node:events') +const { createServer } = require('node:http') +const { test } = require('node:test') +const { fetch } = require('../..') +const { tspl } = require('@matteo.collina/tspl') +const { PerformanceObserver } = require('node:perf_hooks') + +// https://github.com/nodejs/undici/issues/4105 +test('markResourceTiming responseStatus is set', async (t) => { + const { completed, deepEqual } = tspl(t, { plan: 1 }) + + const server = createServer((req, res) => { + res.statusCode = 200 + res.end('Hello World') + }).listen(3000) + + t.after(server.close.bind(server)) + await once(server, 'listening') + + new PerformanceObserver(items => { + items.getEntries().forEach(entry => { + deepEqual(entry.responseStatus, 200) + }) + }).observe({ type: 'resource', buffered: true }) + + const response = await fetch('http://localhost:3000') + await response.text() + + await completed +}) From 973944b03670e4c10a407356064da5ea86e22f10 Mon Sep 17 00:00:00 2001 From: Khafra Date: Sun, 23 Mar 2025 10:56:50 -0400 Subject: [PATCH 2/2] skip < node v22 --- test/fetch/issue-4105.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/fetch/issue-4105.js b/test/fetch/issue-4105.js index a66afb75f07..8d4b480eca8 100644 --- a/test/fetch/issue-4105.js +++ b/test/fetch/issue-4105.js @@ -7,8 +7,10 @@ const { fetch } = require('../..') const { tspl } = require('@matteo.collina/tspl') const { PerformanceObserver } = require('node:perf_hooks') +const isAtLeastv22 = process.versions.node.split('.').map(Number)[0] >= 22 + // https://github.com/nodejs/undici/issues/4105 -test('markResourceTiming responseStatus is set', async (t) => { +test('markResourceTiming responseStatus is set', { skip: !isAtLeastv22 }, async (t) => { const { completed, deepEqual } = tspl(t, { plan: 1 }) const server = createServer((req, res) => {