Re-factor the setupFakeWorkerGlobal
function (in src/display/api.js
), and the loadFakeWorker
function (in web/app.js
)
This patch reduces some duplication, by moving *all* fake worker loader code into the `setupFakeWorkerGlobal` function. Furthermore, the functions are simplified further by using `async`/`await` where appropriate.
This commit is contained in:
parent
a5485e1ef7
commit
8519f87efb
@ -1468,9 +1468,8 @@ const PDFWorker = (function PDFWorkerClosure() {
|
|||||||
let isWorkerDisabled = false;
|
let isWorkerDisabled = false;
|
||||||
let fallbackWorkerSrc;
|
let fallbackWorkerSrc;
|
||||||
let nextFakeWorkerId = 0;
|
let nextFakeWorkerId = 0;
|
||||||
let fakeWorkerFilesLoadedCapability;
|
let fakeWorkerCapability;
|
||||||
|
|
||||||
let fakeWorkerFilesLoader = null;
|
|
||||||
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
|
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
|
||||||
if (isNodeJS && typeof __non_webpack_require__ === 'function') {
|
if (isNodeJS && typeof __non_webpack_require__ === 'function') {
|
||||||
// Workers aren't supported in Node.js, force-disabling them there.
|
// Workers aren't supported in Node.js, force-disabling them there.
|
||||||
@ -1481,16 +1480,6 @@ const PDFWorker = (function PDFWorkerClosure() {
|
|||||||
} else {
|
} else {
|
||||||
fallbackWorkerSrc = './pdf.worker.js';
|
fallbackWorkerSrc = './pdf.worker.js';
|
||||||
}
|
}
|
||||||
fakeWorkerFilesLoader = function() {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
try {
|
|
||||||
const worker = __non_webpack_require__(getWorkerSrc());
|
|
||||||
resolve(worker.WorkerMessageHandler);
|
|
||||||
} catch (ex) {
|
|
||||||
reject(ex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
} else if (typeof document === 'object' && 'currentScript' in document) {
|
} else if (typeof document === 'object' && 'currentScript' in document) {
|
||||||
const pdfjsFilePath = document.currentScript &&
|
const pdfjsFilePath = document.currentScript &&
|
||||||
document.currentScript.src;
|
document.currentScript.src;
|
||||||
@ -1525,39 +1514,36 @@ const PDFWorker = (function PDFWorkerClosure() {
|
|||||||
|
|
||||||
// Loads worker code into main thread.
|
// Loads worker code into main thread.
|
||||||
function setupFakeWorkerGlobal() {
|
function setupFakeWorkerGlobal() {
|
||||||
if (fakeWorkerFilesLoadedCapability) {
|
if (fakeWorkerCapability) {
|
||||||
return fakeWorkerFilesLoadedCapability.promise;
|
return fakeWorkerCapability.promise;
|
||||||
}
|
}
|
||||||
fakeWorkerFilesLoadedCapability = createPromiseCapability();
|
fakeWorkerCapability = createPromiseCapability();
|
||||||
|
|
||||||
const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
|
const loader = async function() {
|
||||||
if (mainWorkerMessageHandler) {
|
const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
|
||||||
// The worker was already loaded using e.g. a `<script>` tag.
|
|
||||||
fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler);
|
if (mainWorkerMessageHandler) {
|
||||||
return fakeWorkerFilesLoadedCapability.promise;
|
// The worker was already loaded using e.g. a `<script>` tag.
|
||||||
}
|
return mainWorkerMessageHandler;
|
||||||
// In the developer build load worker_loader.js which in turn loads all the
|
|
||||||
// other files and resolves the promise. In production only the
|
|
||||||
// pdf.worker.js file is needed.
|
|
||||||
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
|
|
||||||
if (typeof SystemJS === 'object') {
|
|
||||||
SystemJS.import('pdfjs/core/worker').then((worker) => {
|
|
||||||
fakeWorkerFilesLoadedCapability.resolve(worker.WorkerMessageHandler);
|
|
||||||
}).catch(fakeWorkerFilesLoadedCapability.reject);
|
|
||||||
} else {
|
|
||||||
fakeWorkerFilesLoadedCapability.reject(
|
|
||||||
new Error('SystemJS must be used to load fake worker.'));
|
|
||||||
}
|
}
|
||||||
} else {
|
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
|
||||||
const loader = fakeWorkerFilesLoader || function() {
|
if (typeof SystemJS !== 'object') {
|
||||||
return loadScript(getWorkerSrc()).then(function() {
|
throw new Error('SystemJS must be used to load fake worker.');
|
||||||
return window.pdfjsWorker.WorkerMessageHandler;
|
}
|
||||||
});
|
const worker = await SystemJS.import('pdfjs/core/worker');
|
||||||
};
|
return worker.WorkerMessageHandler;
|
||||||
loader().then(fakeWorkerFilesLoadedCapability.resolve,
|
}
|
||||||
fakeWorkerFilesLoadedCapability.reject);
|
if ((typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) &&
|
||||||
}
|
(isNodeJS && typeof __non_webpack_require__ === 'function')) {
|
||||||
return fakeWorkerFilesLoadedCapability.promise;
|
const worker = __non_webpack_require__(getWorkerSrc());
|
||||||
|
return worker.WorkerMessageHandler;
|
||||||
|
}
|
||||||
|
await loadScript(getWorkerSrc());
|
||||||
|
return window.pdfjsWorker.WorkerMessageHandler;
|
||||||
|
};
|
||||||
|
loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);
|
||||||
|
|
||||||
|
return fakeWorkerCapability.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createCDNWrapper(url) {
|
function createCDNWrapper(url) {
|
||||||
|
17
web/app.js
17
web/app.js
@ -1523,21 +1523,16 @@ if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadFakeWorker() {
|
async function loadFakeWorker() {
|
||||||
if (!GlobalWorkerOptions.workerSrc) {
|
if (!GlobalWorkerOptions.workerSrc) {
|
||||||
GlobalWorkerOptions.workerSrc = AppOptions.get('workerSrc');
|
GlobalWorkerOptions.workerSrc = AppOptions.get('workerSrc');
|
||||||
}
|
}
|
||||||
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
|
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
|
||||||
return new Promise(function(resolve, reject) {
|
if (typeof SystemJS !== 'object') {
|
||||||
if (typeof SystemJS === 'object') {
|
throw new Error('SystemJS must be used to load fake worker.');
|
||||||
SystemJS.import('pdfjs/core/worker').then((worker) => {
|
}
|
||||||
window.pdfjsWorker = worker;
|
window.pdfjsWorker = await SystemJS.import('pdfjs/core/worker');
|
||||||
resolve();
|
return undefined;
|
||||||
}).catch(reject);
|
|
||||||
} else {
|
|
||||||
reject(new Error('SystemJS must be used to load fake worker.'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return loadScript(PDFWorker.getWorkerSrc());
|
return loadScript(PDFWorker.getWorkerSrc());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user