diff --git a/shell/browser/api/electron_api_web_request.cc b/shell/browser/api/electron_api_web_request.cc index e81c0eeb91861..df39eb326e05d 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 4376a735a37b5..2eb0d7b3f5c25 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'