diff --git a/web/pdf_print_service.js b/web/pdf_print_service.js index 1f28b2596..392cdaf91 100644 --- a/web/pdf_print_service.js +++ b/web/pdf_print_service.js @@ -187,6 +187,24 @@ }); }, + performPrint: function () { + this.throwIfInactive(); + return new Promise(function (resolve) { + // Push window.print in the macrotask queue to avoid being affected by + // the deprecation of running print() code in a microtask, see + // https://github.com/mozilla/pdf.js/issues/7547. + setTimeout(function () { + if (!this.active) { + resolve(); + return; + } + print.call(window); + // Delay promise resolution in case print() was not synchronous. + setTimeout(resolve, 20); // Tidy-up. + }.bind(this), 0); + }.bind(this)); + }, + get active() { return this === activeService; }, @@ -223,8 +241,7 @@ } var activeServiceOnEntry = activeService; activeService.renderPages().then(function () { - activeServiceOnEntry.throwIfInactive(); - return startPrint(activeServiceOnEntry); + return activeServiceOnEntry.performPrint(); }).catch(function () { // Ignore any error messages. }).then(function () { @@ -246,23 +263,6 @@ window.dispatchEvent(event); } - function startPrint(activeServiceOnEntry) { - return new Promise(function (resolve) { - // Push window.print in the macrotask queue to avoid being affected by - // the deprecation of running print() code in a microtask, see - // https://github.com/mozilla/pdf.js/issues/7547. - setTimeout(function () { - if (!activeServiceOnEntry.active) { - resolve(); - return; - } - print.call(window); - // Delay promise resolution in case print() was not synchronous. - setTimeout(resolve, 20); // Tidy-up. - }, 0); - }); - } - function abort() { if (activeService) { activeService.destroy();