From d512e4497968e404d75c02ddc81e6efe67f04f7e Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Tue, 2 Nov 2021 14:30:20 +0100 Subject: [PATCH 1/2] fix: incorrect Content-Disposition serialization --- shell/browser/api/electron_api_web_request.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/shell/browser/api/electron_api_web_request.cc b/shell/browser/api/electron_api_web_request.cc index 621deff0cde20..3b964ceccb988 100644 --- a/shell/browser/api/electron_api_web_request.cc +++ b/shell/browser/api/electron_api_web_request.cc @@ -132,8 +132,10 @@ v8::Local HttpResponseHeadersToV8( net::HttpContentDisposition header(value, std::string()); std::string decodedFilename = header.is_attachment() ? " attachment" : " inline"; - decodedFilename += "; filename=" + header.filename(); - value = decodedFilename; + // The filename must be encased in double quotes for serialization + // to happen correctly. + std::string filename = "\"" + header.filename() + "\""; + value = decodedFilename + "; filename=" + filename; } if (!values) values = response_headers.SetKey(key, base::ListValue()); From 060e810d9d5b7165afc9f089bd89a748118290c0 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Tue, 2 Nov 2021 19:13:48 +0100 Subject: [PATCH 2/2] test: fixup test --- spec-main/api-web-request-spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-main/api-web-request-spec.ts b/spec-main/api-web-request-spec.ts index 472e9a011d4ad..ea088b64fa484 100644 --- a/spec-main/api-web-request-spec.ts +++ b/spec-main/api-web-request-spec.ts @@ -354,7 +354,7 @@ describe('webRequest module', () => { it('does not change content-disposition header by default', async () => { ses.webRequest.onHeadersReceived((details, callback) => { - expect(details.responseHeaders!['content-disposition']).to.deep.equal([' attachment; filename=aa中aa.txt']); + expect(details.responseHeaders!['content-disposition']).to.deep.equal([' attachment; filename="aa中aa.txt"']); callback({}); }); const { data, headers } = await ajax(defaultURL + 'contentDisposition');