diff --git a/src/shared/message_handler.js b/src/shared/message_handler.js index 6d74a01fd..0ed90ee5e 100644 --- a/src/shared/message_handler.js +++ b/src/shared/message_handler.js @@ -41,6 +41,8 @@ const StreamKind = { START_COMPLETE: 8, }; +function onFn() {} + function wrapReason(reason) { if ( !( @@ -121,9 +123,7 @@ class MessageHandler { targetName = data.sourceName, comObj = this.comObj; - new Promise(function (resolve) { - resolve(action(data.data)); - }).then( + Promise.try(action, data.data).then( function (result) { comObj.postMessage({ sourceName, @@ -365,9 +365,7 @@ class MessageHandler { streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; - new Promise(function (resolve) { - resolve(action(data.data, streamSink)); - }).then( + Promise.try(action, data.data, streamSink).then( function () { comObj.postMessage({ sourceName, @@ -432,9 +430,7 @@ class MessageHandler { // Reset desiredSize property of sink on every pull. streamSink.desiredSize = data.desiredSize; - new Promise(function (resolve) { - resolve(streamSink.onPull?.()); - }).then( + Promise.try(streamSink.onPull || onFn).then( function () { comObj.postMessage({ sourceName, @@ -488,10 +484,9 @@ class MessageHandler { if (!streamSink) { break; } + const dataReason = wrapReason(data.reason); - new Promise(function (resolve) { - resolve(streamSink.onCancel?.(wrapReason(data.reason))); - }).then( + Promise.try(streamSink.onCancel || onFn, dataReason).then( function () { comObj.postMessage({ sourceName, @@ -511,7 +506,7 @@ class MessageHandler { }); } ); - streamSink.sinkCapability.reject(wrapReason(data.reason)); + streamSink.sinkCapability.reject(dataReason); streamSink.isCancelled = true; delete this.streamSinks[streamId]; break; diff --git a/src/shared/util.js b/src/shared/util.js index b6dfb4002..1d812bf01 100644 --- a/src/shared/util.js +++ b/src/shared/util.js @@ -1124,6 +1124,19 @@ function fromBase64Util(str) { return stringToBytes(atob(str)); } +// TODO: Remove this once https://bugzilla.mozilla.org/show_bug.cgi?id=1928493 +// is fixed. +if ( + (typeof PDFJSDev === "undefined" || PDFJSDev.test("SKIP_BABEL")) && + typeof Promise.try !== "function" +) { + Promise.try = function (fn, ...args) { + return new Promise(resolve => { + resolve(fn(...args)); + }); + }; +} + export { AbortException, AnnotationActionEventType,