From df0e1edab5c735759e329cde7b28a2f489ec6b01 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sat, 19 Oct 2019 12:49:30 +0200 Subject: [PATCH] Re-factor sending of various Exceptions from the worker to the API As can be seen in the API, there's a number of document loading Exception handlers which are both really simple and highly similar. Hence these are changed such that all the relevant Exceptions are sent via *one* message instead. Furthermore, the patch also avoids unnecessarily re-creating `UnknownErrorException`s at the worker side and removes an unnecessary `bind` call. --- src/core/worker.js | 29 +++++++++++++------------- src/display/api.js | 51 +++++++++++++++++++++++----------------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/core/worker.js b/src/core/worker.js index 848b6f7e3..50c404d50 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -270,30 +270,29 @@ var WorkerMessageHandler = { handler.send('GetDoc', { pdfInfo: doc, }); } - function onFailure(e) { + function onFailure(ex) { ensureNotTerminated(); - if (e instanceof PasswordException) { - var task = new WorkerTask('PasswordException: response ' + e.code); + if (ex instanceof PasswordException) { + var task = new WorkerTask(`PasswordException: response ${ex.code}`); startWorkerTask(task); - handler.sendWithPromise('PasswordRequest', e).then(function (data) { + handler.sendWithPromise('PasswordRequest', ex).then(function(data) { finishWorkerTask(task); pdfManager.updatePassword(data.password); pdfManagerReady(); - }).catch(function (boundException) { + }).catch(function() { finishWorkerTask(task); - handler.send('PasswordException', boundException); - }.bind(null, e)); - } else if (e instanceof InvalidPDFException) { - handler.send('InvalidPDF', e); - } else if (e instanceof MissingPDFException) { - handler.send('MissingPDF', e); - } else if (e instanceof UnexpectedResponseException) { - handler.send('UnexpectedResponse', e); + handler.send('DocException', ex); + }); + } else if (ex instanceof InvalidPDFException || + ex instanceof MissingPDFException || + ex instanceof UnexpectedResponseException || + ex instanceof UnknownErrorException) { + handler.send('DocException', ex); } else { - handler.send('UnknownError', - new UnknownErrorException(e.message, e.toString())); + handler.send('DocException', + new UnknownErrorException(ex.message, ex.toString())); } } diff --git a/src/display/api.js b/src/display/api.js index 5114caf69..d370069b4 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -2001,6 +2001,32 @@ class WorkerTransport { loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); }); + messageHandler.on('DocException', function(ex) { + let reason; + switch (ex.name) { + case 'PasswordException': + reason = new PasswordException(ex.message, ex.code); + break; + case 'InvalidPDFException': + reason = new InvalidPDFException(ex.message); + break; + case 'MissingPDFException': + reason = new MissingPDFException(ex.message); + break; + case 'UnexpectedResponseException': + reason = new UnexpectedResponseException(ex.message, ex.status); + break; + case 'UnknownErrorException': + reason = new UnknownErrorException(ex.message, ex.details); + break; + } + if (typeof PDFJSDev === 'undefined' || + PDFJSDev.test('!PRODUCTION || TESTING')) { + assert(reason instanceof Error, 'DocException: expected an Error.'); + } + loadingTask._capability.reject(reason); + }); + messageHandler.on('PasswordRequest', (exception) => { this._passwordCapability = createPromiseCapability(); @@ -2022,31 +2048,6 @@ class WorkerTransport { return this._passwordCapability.promise; }); - messageHandler.on('PasswordException', function(exception) { - loadingTask._capability.reject( - new PasswordException(exception.message, exception.code)); - }); - - messageHandler.on('InvalidPDF', function(exception) { - loadingTask._capability.reject( - new InvalidPDFException(exception.message)); - }); - - messageHandler.on('MissingPDF', function(exception) { - loadingTask._capability.reject( - new MissingPDFException(exception.message)); - }); - - messageHandler.on('UnexpectedResponse', function(exception) { - loadingTask._capability.reject( - new UnexpectedResponseException(exception.message, exception.status)); - }); - - messageHandler.on('UnknownError', function(exception) { - loadingTask._capability.reject( - new UnknownErrorException(exception.message, exception.details)); - }); - messageHandler.on('DataLoaded', (data) => { // For consistency: Ensure that progress is always reported when the // entire PDF file has been loaded, regardless of how it was fetched.