[api-major] Refactor PDFWorker
to be initialized with a parameter object, rather than a bunch of regular parameters
This commit is contained in:
parent
c3c1fc511d
commit
83d52518da
@ -125,8 +125,8 @@ function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
|
|||||||
* @property {number} rangeChunkSize - Optional parameter to specify
|
* @property {number} rangeChunkSize - Optional parameter to specify
|
||||||
* maximum number of bytes fetched per range request. The default value is
|
* maximum number of bytes fetched per range request. The default value is
|
||||||
* 2^16 = 65536.
|
* 2^16 = 65536.
|
||||||
* @property {PDFWorker} worker - The worker that will be used for the loading
|
* @property {PDFWorker} worker - (optional) The worker that will be used for
|
||||||
* and parsing of the PDF data.
|
* the loading and parsing of the PDF data.
|
||||||
* @property {string} docBaseUrl - (optional) The base URL of the document,
|
* @property {string} docBaseUrl - (optional) The base URL of the document,
|
||||||
* used when attempting to recover valid absolute URLs for annotations, and
|
* used when attempting to recover valid absolute URLs for annotations, and
|
||||||
* outline items, that (incorrectly) only specify relative URLs.
|
* outline items, that (incorrectly) only specify relative URLs.
|
||||||
@ -193,7 +193,7 @@ function getDocument(src) {
|
|||||||
|
|
||||||
var params = {};
|
var params = {};
|
||||||
var rangeTransport = null;
|
var rangeTransport = null;
|
||||||
var worker = null;
|
let worker = null;
|
||||||
var CMapReaderFactory = DOMCMapReaderFactory;
|
var CMapReaderFactory = DOMCMapReaderFactory;
|
||||||
|
|
||||||
for (var key in source) {
|
for (var key in source) {
|
||||||
@ -240,10 +240,17 @@ function getDocument(src) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!worker) {
|
if (!worker) {
|
||||||
|
const workerParams = {
|
||||||
|
};
|
||||||
// Worker was not provided -- creating and owning our own. If message port
|
// Worker was not provided -- creating and owning our own. If message port
|
||||||
// is specified in global worker options, using it.
|
// is specified in global worker options, using it.
|
||||||
let workerPort = GlobalWorkerOptions.workerPort;
|
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;
|
task._worker = worker;
|
||||||
}
|
}
|
||||||
var docId = task.docId;
|
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
|
* 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.
|
* a "fake" worker will be used instead.
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
@ -1280,7 +1293,10 @@ var PDFWorker = (function PDFWorkerClosure() {
|
|||||||
|
|
||||||
let pdfWorkerPorts = new WeakMap();
|
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)) {
|
if (port && pdfWorkerPorts.has(port)) {
|
||||||
throw new Error('Cannot use more than one PDFWorker per 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)) {
|
* @param {PDFWorkerParameters} params - The worker initialization parameters.
|
||||||
return pdfWorkerPorts.get(port);
|
*/
|
||||||
|
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() {
|
PDFWorker.getWorkerSrc = function() {
|
||||||
|
@ -324,7 +324,7 @@ describe('api', function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
it('worker created or destroyed', function (done) {
|
it('worker created or destroyed', function (done) {
|
||||||
var worker = new PDFWorker('test1');
|
var worker = new PDFWorker({ name: 'test1', });
|
||||||
worker.promise.then(function () {
|
worker.promise.then(function () {
|
||||||
expect(worker.name).toEqual('test1');
|
expect(worker.name).toEqual('test1');
|
||||||
expect(!!worker.port).toEqual(true);
|
expect(!!worker.port).toEqual(true);
|
||||||
@ -361,7 +361,7 @@ describe('api', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('worker created and can be used in getDocument', function (done) {
|
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(
|
var loadingTask = getDocument(
|
||||||
buildGetDocumentParams(basicApiFileName, {
|
buildGetDocumentParams(basicApiFileName, {
|
||||||
worker,
|
worker,
|
||||||
@ -386,9 +386,9 @@ describe('api', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('creates more than one worker', function (done) {
|
it('creates more than one worker', function (done) {
|
||||||
var worker1 = new PDFWorker('test1');
|
var worker1 = new PDFWorker({ name: 'test1', });
|
||||||
var worker2 = new PDFWorker('test2');
|
var worker2 = new PDFWorker({ name: 'test2', });
|
||||||
var worker3 = new PDFWorker('test3');
|
var worker3 = new PDFWorker({ name: 'test3', });
|
||||||
var ready = Promise.all([worker1.promise, worker2.promise,
|
var ready = Promise.all([worker1.promise, worker2.promise,
|
||||||
worker3.promise]);
|
worker3.promise]);
|
||||||
ready.then(function () {
|
ready.then(function () {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user