From 9f8a9900d04a8c5c54e1934b63e418cb041829e0 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 1d51f96379d15..b8b5e05a96a6c 100644 --- a/shell/browser/api/electron_api_web_request.cc +++ b/shell/browser/api/electron_api_web_request.cc @@ -133,8 +133,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 4d1af9278f37ef9a72e8b2f080df6ffec13ed55c 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');