Merge pull request #10139 from Snuffleupagus/issue-10135

Ensure that the `PDFDocumentLoadingTask` is rejected when "setting up fake worker" failed (issue 10135)
This commit is contained in:
Tim van der Meij 2018-10-07 15:54:50 +02:00 committed by GitHub
commit b2e7d0c89b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 29 deletions

View File

@ -45,9 +45,9 @@ const pdfjsFilePath =
typeof document !== 'undefined' && document.currentScript ? typeof document !== 'undefined' && document.currentScript ?
document.currentScript.src : null; document.currentScript.src : null;
var fakeWorkerFilesLoader = null; let fakeWorkerFilesLoader = null;
var useRequireEnsure = false;
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) { if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
let useRequireEnsure = false;
// For GENERIC build we need to add support for different fake file loaders // For GENERIC build we need to add support for different fake file loaders
// for different frameworks. // for different frameworks.
if (typeof window === 'undefined') { if (typeof window === 'undefined') {
@ -64,21 +64,33 @@ if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
if (typeof requirejs !== 'undefined' && requirejs.toUrl) { if (typeof requirejs !== 'undefined' && requirejs.toUrl) {
workerSrc = requirejs.toUrl('pdfjs-dist/build/pdf.worker.js'); workerSrc = requirejs.toUrl('pdfjs-dist/build/pdf.worker.js');
} }
var dynamicLoaderSupported = const dynamicLoaderSupported =
typeof requirejs !== 'undefined' && requirejs.load; typeof requirejs !== 'undefined' && requirejs.load;
fakeWorkerFilesLoader = useRequireEnsure ? (function (callback) { fakeWorkerFilesLoader = useRequireEnsure ? (function() {
return new Promise(function(resolve, reject) {
__non_webpack_require__.ensure([], function() { __non_webpack_require__.ensure([], function() {
var worker; try {
let worker;
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('LIB')) { if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('LIB')) {
worker = __non_webpack_require__('../pdf.worker.js'); worker = __non_webpack_require__('../pdf.worker.js');
} else { } else {
worker = __non_webpack_require__('./pdf.worker.js'); worker = __non_webpack_require__('./pdf.worker.js');
} }
callback(worker.WorkerMessageHandler); resolve(worker.WorkerMessageHandler);
}, null, 'pdfjsWorker'); } catch (ex) {
}) : dynamicLoaderSupported ? (function (callback) { reject(ex);
}
}, reject, 'pdfjsWorker');
});
}) : dynamicLoaderSupported ? (function() {
return new Promise(function(resolve, reject) {
requirejs(['pdfjs-dist/build/pdf.worker'], function(worker) { requirejs(['pdfjs-dist/build/pdf.worker'], function(worker) {
callback(worker.WorkerMessageHandler); try {
resolve(worker.WorkerMessageHandler);
} catch (ex) {
reject(ex);
}
}, reject);
}); });
}) : null; }) : null;
} }
@ -1374,21 +1386,26 @@ var PDFWorker = (function PDFWorkerClosure() {
if (typeof SystemJS === 'object') { if (typeof SystemJS === 'object') {
SystemJS.import('pdfjs/core/worker').then((worker) => { SystemJS.import('pdfjs/core/worker').then((worker) => {
fakeWorkerFilesLoadedCapability.resolve(worker.WorkerMessageHandler); fakeWorkerFilesLoadedCapability.resolve(worker.WorkerMessageHandler);
}); }).catch(fakeWorkerFilesLoadedCapability.reject);
} else if (typeof require === 'function') { } else if (typeof require === 'function') {
try {
let worker = require('../core/worker.js'); let worker = require('../core/worker.js');
fakeWorkerFilesLoadedCapability.resolve(worker.WorkerMessageHandler); fakeWorkerFilesLoadedCapability.resolve(worker.WorkerMessageHandler);
} else { } catch (ex) {
throw new Error( fakeWorkerFilesLoadedCapability.reject(ex);
'SystemJS or CommonJS must be used to load fake worker.');
} }
} else { } else {
let loader = fakeWorkerFilesLoader || function(callback) { fakeWorkerFilesLoadedCapability.reject(new Error(
loadScript(getWorkerSrc()).then(function() { 'SystemJS or CommonJS must be used to load fake worker.'));
callback(window.pdfjsWorker.WorkerMessageHandler); }
} else {
const loader = fakeWorkerFilesLoader || function() {
return loadScript(getWorkerSrc()).then(function() {
return window.pdfjsWorker.WorkerMessageHandler;
}); });
}; };
loader(fakeWorkerFilesLoadedCapability.resolve); loader().then(fakeWorkerFilesLoadedCapability.resolve,
fakeWorkerFilesLoadedCapability.reject);
} }
return fakeWorkerFilesLoadedCapability.promise; return fakeWorkerFilesLoadedCapability.promise;
} }
@ -1592,6 +1609,9 @@ var PDFWorker = (function PDFWorkerClosure() {
var messageHandler = new MessageHandler(id, id + '_worker', port); var messageHandler = new MessageHandler(id, id + '_worker', port);
this._messageHandler = messageHandler; this._messageHandler = messageHandler;
this._readyCapability.resolve(); this._readyCapability.resolve();
}).catch((reason) => {
this._readyCapability.reject(
new Error(`Setting up fake worker failed: "${reason.message}".`));
}); });
}, },

View File

@ -263,7 +263,9 @@ let PDFViewerApplication = {
AppOptions.set('locale', hashParams['locale']); AppOptions.set('locale', hashParams['locale']);
} }
return Promise.all(waitOn); return Promise.all(waitOn).catch((reason) => {
console.error(`_parseHashParameters: "${reason.message}".`);
});
}, },
/** /**
@ -1464,10 +1466,14 @@ function loadFakeWorker() {
SystemJS.import('pdfjs/core/worker').then((worker) => { SystemJS.import('pdfjs/core/worker').then((worker) => {
window.pdfjsWorker = worker; window.pdfjsWorker = worker;
resolve(); resolve();
}); }).catch(reject);
} else if (typeof require === 'function') { } else if (typeof require === 'function') {
try {
window.pdfjsWorker = require('../src/core/worker.js'); window.pdfjsWorker = require('../src/core/worker.js');
resolve(); resolve();
} catch (ex) {
reject(ex);
}
} else { } else {
reject(new Error( reject(new Error(
'SystemJS or CommonJS must be used to load fake worker.')); 'SystemJS or CommonJS must be used to load fake worker.'));