diff --git a/src/display/api.js b/src/display/api.js index ef72b6694..f82b6f25e 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -125,8 +125,8 @@ function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { * @property {number} rangeChunkSize - Optional parameter to specify * maximum number of bytes fetched per range request. The default value is * 2^16 = 65536. - * @property {PDFWorker} worker - The worker that will be used for the loading - * and parsing of the PDF data. + * @property {PDFWorker} worker - (optional) The worker that will be used for + * the loading and parsing of the PDF data. * @property {string} docBaseUrl - (optional) The base URL of the document, * used when attempting to recover valid absolute URLs for annotations, and * outline items, that (incorrectly) only specify relative URLs. @@ -193,7 +193,7 @@ function getDocument(src) { var params = {}; var rangeTransport = null; - var worker = null; + let worker = null; var CMapReaderFactory = DOMCMapReaderFactory; for (var key in source) { @@ -240,10 +240,17 @@ function getDocument(src) { } if (!worker) { + const workerParams = { + }; // Worker was not provided -- creating and owning our own. If message port // is specified in global worker options, using it. let workerPort = GlobalWorkerOptions.workerPort; - worker = workerPort ? PDFWorker.fromPort(workerPort) : new PDFWorker(); + if (workerPort) { + workerParams.port = workerPort; + worker = PDFWorker.fromPort(workerParams); + } else { + worker = new PDFWorker(workerParams); + } task._worker = worker; } var docId = task.docId; @@ -1192,9 +1199,15 @@ class LoopbackPort { } } +/** + * @typedef {Object} PDFWorkerParameters + * @property {string} name - (optional) The name of the worker. + * @property {Object} port - (optional) The `workerPort`. + */ + /** * PDF.js web worker abstraction, it controls instantiation of PDF documents and - * WorkerTransport for them. If creation of a web worker is not possible, + * WorkerTransport for them. If creation of a web worker is not possible, * a "fake" worker will be used instead. * @class */ @@ -1280,7 +1293,10 @@ var PDFWorker = (function PDFWorkerClosure() { let pdfWorkerPorts = new WeakMap(); - function PDFWorker(name, port) { + /** + * @param {PDFWorkerParameters} params - The worker initialization parameters. + */ + function PDFWorker({ name = null, port = null, } = {}) { if (port && pdfWorkerPorts.has(port)) { throw new Error('Cannot use more than one PDFWorker per port'); } @@ -1495,11 +1511,14 @@ var PDFWorker = (function PDFWorkerClosure() { }, }; - PDFWorker.fromPort = function (port) { - if (pdfWorkerPorts.has(port)) { - return pdfWorkerPorts.get(port); + /** + * @param {PDFWorkerParameters} params - The worker initialization parameters. + */ + PDFWorker.fromPort = function(params) { + if (pdfWorkerPorts.has(params.port)) { + return pdfWorkerPorts.get(params.port); } - return new PDFWorker(null, port); + return new PDFWorker(params); }; PDFWorker.getWorkerSrc = function() { diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index efa24ae90..f879ba7c3 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -324,7 +324,7 @@ describe('api', function() { } it('worker created or destroyed', function (done) { - var worker = new PDFWorker('test1'); + var worker = new PDFWorker({ name: 'test1', }); worker.promise.then(function () { expect(worker.name).toEqual('test1'); expect(!!worker.port).toEqual(true); @@ -361,7 +361,7 @@ describe('api', function() { }); }); it('worker created and can be used in getDocument', function (done) { - var worker = new PDFWorker('test1'); + var worker = new PDFWorker({ name: 'test1', }); var loadingTask = getDocument( buildGetDocumentParams(basicApiFileName, { worker, @@ -386,9 +386,9 @@ describe('api', function() { }); }); it('creates more than one worker', function (done) { - var worker1 = new PDFWorker('test1'); - var worker2 = new PDFWorker('test2'); - var worker3 = new PDFWorker('test3'); + var worker1 = new PDFWorker({ name: 'test1', }); + var worker2 = new PDFWorker({ name: 'test2', }); + var worker3 = new PDFWorker({ name: 'test3', }); var ready = Promise.all([worker1.promise, worker2.promise, worker3.promise]); ready.then(function () {