diff --git a/src/main/downloadsManager.test.js b/src/main/downloadsManager.test.js index d44c23737c2..8f556e152be 100644 --- a/src/main/downloadsManager.test.js +++ b/src/main/downloadsManager.test.js @@ -192,6 +192,20 @@ describe('main/downloadsManager', () => { expect(dl.fileSizes.get('file.txt')).toBe('4242'); }); + it('MM-68690 - should not throw when content-disposition header is missing', () => { + const dl = new DownloadsManager({}); + const details = { + responseHeaders: { + 'content-encoding': ['gzip'], + 'x-uncompressed-content-length': ['4242'], + }, + }; + const cb = jest.fn(); + expect(() => dl.webRequestOnHeadersReceivedHandler(details, cb)).not.toThrow(); + expect(cb).toHaveBeenCalledWith({}); + expect(dl.fileSizes.size).toBe(0); + }); + it('should clear the downloads list', () => { const dl = new DownloadsManager(JSON.stringify(downloadsJson)); dl.clearDownloadsDropDown(); diff --git a/src/main/downloadsManager.ts b/src/main/downloadsManager.ts index 2de8b52d38f..d853c0593fa 100644 --- a/src/main/downloadsManager.ts +++ b/src/main/downloadsManager.ts @@ -143,7 +143,7 @@ export class DownloadsManager extends JsonFileManager { webRequestOnHeadersReceivedHandler = (details: Electron.OnHeadersReceivedListenerDetails, cb: (headersReceivedResponse: Electron.HeadersReceivedResponse) => void) => { const headers = details.responseHeaders ?? {}; - if (headers?.['content-encoding']?.includes('gzip') && headers?.['x-uncompressed-content-length'] && headers?.['content-disposition'].join(';')?.includes('filename=')) { + if (headers?.['content-encoding']?.includes('gzip') && headers?.['x-uncompressed-content-length'] && headers?.['content-disposition']?.join?.(';')?.includes('filename=')) { const filename = readFilenameFromContentDispositionHeader(headers['content-disposition']); const fileSize = headers['x-uncompressed-content-length']?.[0] || '0'; if (filename && (!this.fileSizes.has(filename) || this.fileSizes.get(filename)?.toString() !== fileSize)) {