diff --git a/src/display/api.js b/src/display/api.js index aaedfcf3b..8430e0f3a 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -357,7 +357,7 @@ function getDocument(src) { task._worker = worker; } - const fetchDocParams = { + const docParams = { docId, apiVersion: typeof PDFJSDev !== "undefined" && !PDFJSDev.test("TESTING") @@ -398,107 +398,84 @@ function getDocument(src) { if (task.destroyed) { throw new Error("Loading aborted"); } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } - const workerIdPromise = _fetchDocument(worker, fetchDocParams); - const networkStreamPromise = new Promise(function (resolve) { - let networkStream; - if (rangeTransport) { - networkStream = new PDFDataTransportStream(rangeTransport, { - disableRange, - disableStream, - }); - } else if (!data) { - if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) { - throw new Error("Not implemented: createPDFNetworkStream"); - } - const createPDFNetworkStream = params => { - if ( - typeof PDFJSDev !== "undefined" && - PDFJSDev.test("GENERIC") && - isNodeJS - ) { - const isFetchSupported = function () { - return ( - typeof fetch !== "undefined" && - typeof Response !== "undefined" && - "body" in Response.prototype - ); - }; - return isFetchSupported() && isValidFetchUrl(params.url) - ? new PDFFetchStream(params) - : new PDFNodeStream(params); - } - return isValidFetchUrl(params.url) - ? new PDFFetchStream(params) - : new PDFNetworkStream(params); - }; - - networkStream = createPDFNetworkStream({ - url, - length, - httpHeaders, - withCredentials, - rangeChunkSize, - disableRange, - disableStream, - }); - } - resolve(networkStream); - }); - - return Promise.all([workerIdPromise, networkStreamPromise]).then( - function ([workerId, networkStream]) { - if (task.destroyed) { - throw new Error("Loading aborted"); - } - - const messageHandler = new MessageHandler( - docId, - workerId, - worker.port - ); - const transport = new WorkerTransport( - messageHandler, - task, - networkStream, - transportParams, - transportFactory - ); - task._transport = transport; - messageHandler.send("Ready", null); - } + const workerIdPromise = worker.messageHandler.sendWithPromise( + "GetDocRequest", + docParams, + data ? [data.buffer] : null ); + + let networkStream; + if (rangeTransport) { + networkStream = new PDFDataTransportStream(rangeTransport, { + disableRange, + disableStream, + }); + } else if (!data) { + if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) { + throw new Error("Not implemented: createPDFNetworkStream"); + } + const createPDFNetworkStream = params => { + if ( + typeof PDFJSDev !== "undefined" && + PDFJSDev.test("GENERIC") && + isNodeJS + ) { + const isFetchSupported = function () { + return ( + typeof fetch !== "undefined" && + typeof Response !== "undefined" && + "body" in Response.prototype + ); + }; + return isFetchSupported() && isValidFetchUrl(params.url) + ? new PDFFetchStream(params) + : new PDFNodeStream(params); + } + return isValidFetchUrl(params.url) + ? new PDFFetchStream(params) + : new PDFNetworkStream(params); + }; + + networkStream = createPDFNetworkStream({ + url, + length, + httpHeaders, + withCredentials, + rangeChunkSize, + disableRange, + disableStream, + }); + } + + return workerIdPromise.then(workerId => { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + + const messageHandler = new MessageHandler(docId, workerId, worker.port); + const transport = new WorkerTransport( + messageHandler, + task, + networkStream, + transportParams, + transportFactory + ); + task._transport = transport; + messageHandler.send("Ready", null); + }); }) .catch(task._capability.reject); return task; } -/** - * Starts fetching of specified PDF document/data. - * - * @param {PDFWorker} worker - * @param {Object} source - * @returns {Promise} A promise that is resolved when the worker ID of - * the `MessageHandler` is known. - * @private - */ -async function _fetchDocument(worker, source) { - if (worker.destroyed) { - throw new Error("Worker was destroyed"); - } - const workerId = await worker.messageHandler.sendWithPromise( - "GetDocRequest", - source, - source.data ? [source.data.buffer] : null - ); - - if (worker.destroyed) { - throw new Error("Worker was destroyed"); - } - return workerId; -} - function getUrlProp(val) { if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) { return null; // The 'url' is unused with `PDFDataRangeTransport`.