From f17fc86275690e009d12b34c2edf1536bf81ab4d Mon Sep 17 00:00:00 2001 From: David Sanders Date: Sun, 20 Jun 2021 09:53:48 -0700 Subject: [PATCH] fix: properly handle optional requestHeaders with onBeforeSendHeaders --- shell/browser/api/electron_api_web_request.cc | 7 +++++-- spec-main/api-web-request-spec.ts | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/shell/browser/api/electron_api_web_request.cc b/shell/browser/api/electron_api_web_request.cc index a1d15f8f72591..f656f8e4d7845 100644 --- a/shell/browser/api/electron_api_web_request.cc +++ b/shell/browser/api/electron_api_web_request.cc @@ -214,8 +214,11 @@ void ReadFromResponse(v8::Isolate* isolate, void ReadFromResponse(v8::Isolate* isolate, gin::Dictionary* response, net::HttpRequestHeaders* headers) { - headers->Clear(); - response->Get("requestHeaders", headers); + v8::Local value; + if (response->Get("requestHeaders", &value) && value->IsObject()) { + headers->Clear(); + gin::Converter::FromV8(isolate, value, headers); + } } void ReadFromResponse(v8::Isolate* isolate, diff --git a/spec-main/api-web-request-spec.ts b/spec-main/api-web-request-spec.ts index 272dfa35ac34f..9bf1071790bae 100644 --- a/spec-main/api-web-request-spec.ts +++ b/spec-main/api-web-request-spec.ts @@ -214,6 +214,18 @@ describe('webRequest module', () => { await ajax(defaultURL); }); + it('leaves headers unchanged when no requestHeaders in callback', async () => { + let originalRequestHeaders: Record; + ses.webRequest.onBeforeSendHeaders((details, callback) => { + originalRequestHeaders = details.requestHeaders; + callback({}); + }); + ses.webRequest.onSendHeaders((details) => { + expect(details.requestHeaders).to.deep.equal(originalRequestHeaders); + }); + await ajax(defaultURL); + }); + it('works with file:// protocol', async () => { const requestHeaders = { Test: 'header'