diff --git a/web/app.js b/web/app.js index ace56420e..1c44dc548 100644 --- a/web/app.js +++ b/web/app.js @@ -763,6 +763,12 @@ const PDFViewerApplication = { document.title = title; }, + get _docFilename() { + // Use `this.url` instead of `this.baseUrl` to perform filename detection + // based on the reference fragment as ultimate fallback if needed. + return this._contentDispositionFilename || getPDFFileNameFromURL(this.url); + }, + /** * @private */ @@ -984,17 +990,9 @@ const PDFViewerApplication = { downloadManager.downloadUrl(url, filename); } - const url = this.baseUrl; - // Use this.url instead of this.baseUrl to perform filename detection based - // on the reference fragment as ultimate fallback if needed. - const filename = - this._contentDispositionFilename || getPDFFileNameFromURL(this.url); - const downloadManager = this.downloadManager; - downloadManager.onerror = err => { - // This error won't really be helpful because it's likely the - // fallback won't work either (or is already open). - this.error(`PDF failed to download: ${err}`); - }; + const downloadManager = this.downloadManager, + url = this.baseUrl, + filename = this._docFilename; // When the PDF document isn't ready, or the PDF file is still downloading, // simply download using the URL. @@ -1017,17 +1015,9 @@ const PDFViewerApplication = { return; } - const url = this.baseUrl; - // Use this.url instead of this.baseUrl to perform filename detection based - // on the reference fragment as ultimate fallback if needed. - const filename = - this._contentDispositionFilename || getPDFFileNameFromURL(this.url); - const downloadManager = this.downloadManager; - downloadManager.onerror = err => { - // This error won't really be helpful because it's likely the - // fallback won't work either (or is already open). - this.error(`PDF failed to be saved: ${err}`); - }; + const downloadManager = this.downloadManager, + url = this.baseUrl, + filename = this._docFilename; // When the PDF document isn't ready, or the PDF file is still downloading, // simply download using the URL. @@ -1587,8 +1577,6 @@ const PDFViewerApplication = { } this._contentLength = length; } - const filename = - this._contentDispositionFilename || getPDFFileNameFromURL(this.url); try { await scripting.createSandbox({ @@ -1602,7 +1590,7 @@ const PDFViewerApplication = { ...this.documentInfo, baseURL: this.baseUrl, filesize: this._contentLength, - filename, + filename: this._docFilename, metadata: this.metadata, numPages: pdfDocument.numPages, URL: this.url, diff --git a/web/download_manager.js b/web/download_manager.js index 3c287f856..0261e4580 100644 --- a/web/download_manager.js +++ b/web/download_manager.js @@ -71,7 +71,6 @@ class DownloadManager { this.downloadUrl(url, filename); return; } - const blobUrl = URL.createObjectURL(blob); download(blobUrl, filename); } diff --git a/web/firefoxcom.js b/web/firefoxcom.js index afca70122..5ea019c61 100644 --- a/web/firefoxcom.js +++ b/web/firefoxcom.js @@ -130,8 +130,10 @@ class DownloadManager { filename, sourceEventType, }).then(error => { - if (error && this.onerror) { - this.onerror(error); + if (error) { + // If downloading failed in `PdfStreamConverter.jsm` it's very unlikely + // that attempting to fallback and re-download would be helpful here. + console.error("`ChromeActions.download` failed."); } URL.revokeObjectURL(blobUrl); });