diff --git a/web/app.js b/web/app.js index 2e87b64ce..2c5a120aa 100644 --- a/web/app.js +++ b/web/app.js @@ -838,9 +838,7 @@ const PDFViewerApplication = { this.open({ url, length, originalUrl }); }, onError: err => { - this.l10n.get("pdfjs-loading-error").then(msg => { - this._documentError(msg, err); - }); + this._documentError("pdfjs-loading-error", err); }, onProgress: (loaded, total) => { this.progress(loaded / total); @@ -1050,10 +1048,11 @@ const PDFViewerApplication = { } else if (reason instanceof UnexpectedResponseException) { key = "pdfjs-unexpected-response-error"; } - return this.l10n.get(key).then(msg => { - this._documentError(msg, { message: reason?.message }); - throw reason; - }); + return this._documentError(key, { message: reason.message }).then( + () => { + throw reason; + } + ); } ); }, @@ -1134,10 +1133,13 @@ const PDFViewerApplication = { * Report the error; used for errors affecting loading and/or parsing of * the entire PDF document. */ - _documentError(message, moreInfo = null) { + async _documentError(key, moreInfo = null) { this._unblockDocumentLoadEvent(); - this._otherError(message, moreInfo); + const message = await this._otherError( + key || "pdfjs-loading-error", + moreInfo + ); this.eventBus.dispatch("documenterror", { source: this, @@ -1148,12 +1150,15 @@ const PDFViewerApplication = { /** * Report the error; used for errors affecting e.g. only a single page. - * @param {string} message - A message that is human readable. + * @param {string} key - The localization key for the error. * @param {Object} [moreInfo] - Further information about the error that is * more technical. Should have a 'message' and * optionally a 'stack' property. + * @returns {string} A (localized) error message that is human readable. */ - _otherError(message, moreInfo = null) { + async _otherError(key, moreInfo = null) { + const message = await this.l10n.get(key); + const moreInfoText = [`PDF.js v${version || "?"} (build: ${build || "?"})`]; if (moreInfo) { moreInfoText.push(`Message: ${moreInfo.message}`); @@ -1171,6 +1176,7 @@ const PDFViewerApplication = { } console.error(`${message}\n\n${moreInfoText.join("\n")}`); + return message; }, progress(level) { @@ -1387,9 +1393,7 @@ const PDFViewerApplication = { this._initializeAutoPrint(pdfDocument, openActionPromise); }, reason => { - this.l10n.get("pdfjs-loading-error").then(msg => { - this._documentError(msg, { message: reason?.message }); - }); + this._documentError("pdfjs-loading-error", { message: reason.message }); } ); @@ -1778,9 +1782,7 @@ const PDFViewerApplication = { } if (!this.supportsPrinting) { - this.l10n.get("pdfjs-printing-not-supported").then(msg => { - this._otherError(msg); - }); + this._otherError("pdfjs-printing-not-supported"); return; } @@ -2242,8 +2244,8 @@ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { throw new Error("file origin does not match viewer's"); } } catch (ex) { - PDFViewerApplication.l10n.get("pdfjs-loading-error").then(msg => { - PDFViewerApplication._documentError(msg, { message: ex?.message }); + PDFViewerApplication._documentError("pdfjs-loading-error", { + message: ex.message, }); throw ex; } @@ -2308,9 +2310,7 @@ function webViewerPageRendered({ pageNumber, error }) { } if (error) { - PDFViewerApplication.l10n.get("pdfjs-rendering-error").then(msg => { - PDFViewerApplication._otherError(msg, error); - }); + PDFViewerApplication._otherError("pdfjs-rendering-error", error); } } diff --git a/web/chromecom.js b/web/chromecom.js index 403a9e1a9..5a4ebfbf5 100644 --- a/web/chromecom.js +++ b/web/chromecom.js @@ -108,10 +108,11 @@ const ChromeCom = { // Even without this check, the file load in frames is still blocked, // but this may change in the future (https://crbug.com/550151). if (origin && !/^file:|^chrome-extension:/.test(origin)) { - viewerApp._documentError( - `Blocked ${origin} from loading ${file}. Refused to load ` + - "a local file in a non-local page for security reasons." - ); + viewerApp._documentError(null, { + message: + `Blocked ${origin} from loading ${file}. Refused to load ` + + "a local file in a non-local page for security reasons.", + }); return; } isAllowedFileSchemeAccess(function (isAllowedAccess) {