mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-08 17:30:09 +02:00
Ensure that the viewer handles BaseViewer
initialization failures
*This patch can be tested e.g. with the `poppler-85140-0.pdf` document from the test-suite.* For some sufficiently corrupt documents the `getDocument` call will succeed, but fetching even the very first page fails. Currently we only print error messages (in the console) from the `{BaseViewer, PDFThumbnailViewer}.setDocument` methods, but don't actually provide these errors to allow the viewer to handle them properly. In practice this means that the GENERIC viewer won't display the `errorWrapper`, and in the MOZCENTRAL viewer the *browser* loading indicator is never hidden (since we never unblock the "load" event).
This commit is contained in:
parent
dc455c836e
commit
9de30c4ff0
2 changed files with 27 additions and 16 deletions
27
web/app.js
27
web/app.js
|
@ -949,22 +949,22 @@ const PDFViewerApplication = {
|
|||
pdfDocument => {
|
||||
this.load(pdfDocument);
|
||||
},
|
||||
exception => {
|
||||
reason => {
|
||||
if (loadingTask !== this.pdfLoadingTask) {
|
||||
return undefined; // Ignore errors for previously opened PDF files.
|
||||
}
|
||||
|
||||
let key = "loading_error";
|
||||
if (exception instanceof InvalidPDFException) {
|
||||
if (reason instanceof InvalidPDFException) {
|
||||
key = "invalid_file_error";
|
||||
} else if (exception instanceof MissingPDFException) {
|
||||
} else if (reason instanceof MissingPDFException) {
|
||||
key = "missing_file_error";
|
||||
} else if (exception instanceof UnexpectedResponseException) {
|
||||
} else if (reason instanceof UnexpectedResponseException) {
|
||||
key = "unexpected_response_error";
|
||||
}
|
||||
return this.l10n.get(key).then(msg => {
|
||||
this._documentError(msg, { message: exception?.message });
|
||||
throw exception;
|
||||
this._documentError(msg, { message: reason?.message });
|
||||
throw reason;
|
||||
});
|
||||
}
|
||||
);
|
||||
|
@ -1368,11 +1368,18 @@ const PDFViewerApplication = {
|
|||
});
|
||||
});
|
||||
|
||||
pagesPromise.then(() => {
|
||||
this._unblockDocumentLoadEvent();
|
||||
pagesPromise.then(
|
||||
() => {
|
||||
this._unblockDocumentLoadEvent();
|
||||
|
||||
this._initializeAutoPrint(pdfDocument, openActionPromise);
|
||||
});
|
||||
this._initializeAutoPrint(pdfDocument, openActionPromise);
|
||||
},
|
||||
reason => {
|
||||
this.l10n.get("loading_error").then(msg => {
|
||||
this._documentError(msg, { message: reason?.message });
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
onePageRendered.then(data => {
|
||||
this.externalServices.reportTelemetry({
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue