From 315f455623c667b998da57c9491d3b2769275f3b Mon Sep 17 00:00:00 2001 From: David Sanders Date: Wed, 16 Mar 2022 03:33:12 -0700 Subject: [PATCH] chore: partially revert #21552 --- lib/browser/api/net.ts | 33 +++++++------------- shell/browser/api/electron_api_url_loader.cc | 3 +- typings/internal-ambient.d.ts | 1 + 3 files changed, 13 insertions(+), 24 deletions(-) diff --git a/lib/browser/api/net.ts b/lib/browser/api/net.ts index 80351c0cdbaae..08a44a4b503cc 100644 --- a/lib/browser/api/net.ts +++ b/lib/browser/api/net.ts @@ -59,29 +59,18 @@ class IncomingMessage extends Readable { get headers () { const filteredHeaders: Record = {}; - const { rawHeaders } = this._responseHead; - rawHeaders.forEach(header => { - const keyLowerCase = header.key.toLowerCase(); - if (Object.prototype.hasOwnProperty.call(filteredHeaders, keyLowerCase) && - discardableDuplicateHeaders.has(keyLowerCase)) { - // do nothing with discardable duplicate headers + const { headers } = this._responseHead; + Object.keys(headers).forEach(header => { + if (header === 'set-cookie') { + // keep set-cookie as an array per Node.js rules + // see https://nodejs.org/api/http.html#http_message_headers + filteredHeaders[header] = headers[header]; + } else if (discardableDuplicateHeaders.has(header)) { + // do not join discardable duplicate headers, instead keep the first + filteredHeaders[header] = headers[header][0]; } else { - if (keyLowerCase === 'set-cookie') { - // keep set-cookie as an array per Node.js rules - // see https://nodejs.org/api/http.html#http_message_headers - if (Object.prototype.hasOwnProperty.call(filteredHeaders, keyLowerCase)) { - (filteredHeaders[keyLowerCase] as string[]).push(header.value); - } else { - filteredHeaders[keyLowerCase] = [header.value]; - } - } else { - // for non-cookie headers, the values are joined together with ', ' - if (Object.prototype.hasOwnProperty.call(filteredHeaders, keyLowerCase)) { - filteredHeaders[keyLowerCase] += `, ${header.value}`; - } else { - filteredHeaders[keyLowerCase] = header.value; - } - } + // for everything else, the values are joined together with ', ' + filteredHeaders[header] = headers[header].join(', '); } }); return filteredHeaders; diff --git a/shell/browser/api/electron_api_url_loader.cc b/shell/browser/api/electron_api_url_loader.cc index 86a7eb0cc3f92..15b378c55ac56 100644 --- a/shell/browser/api/electron_api_url_loader.cc +++ b/shell/browser/api/electron_api_url_loader.cc @@ -578,9 +578,8 @@ void SimpleURLLoaderWrapper::OnResponseStarted( gin::Dictionary dict = gin::Dictionary::CreateEmpty(isolate); dict.Set("statusCode", response_head.headers->response_code()); dict.Set("statusMessage", response_head.headers->GetStatusText()); + dict.Set("headers", response_head.headers.get()); dict.Set("httpVersion", response_head.headers->GetHttpVersion()); - // Note that |response_head.headers| are filtered by Chromium and should not - // be used here. DCHECK(!response_head.raw_response_headers.empty()); dict.Set("rawHeaders", response_head.raw_response_headers); Emit("response-started", final_url, dict); diff --git a/typings/internal-ambient.d.ts b/typings/internal-ambient.d.ts index 92d707c8edacc..e7a362ba976d0 100644 --- a/typings/internal-ambient.d.ts +++ b/typings/internal-ambient.d.ts @@ -147,6 +147,7 @@ declare namespace NodeJS { statusCode: number; statusMessage: string; httpVersion: { major: number, minor: number }; + headers: Record; rawHeaders: { key: string, value: string }[]; };