Browse Source

Merge pull request #8508 from yurydelendik/issue8246

Fixes duplicate creation of PDFWorker for the same port.
Jonas Jenwald 8 years ago committed by GitHub
parent
commit
1766fe8184
  1. 20
      src/display/api.js

20
src/display/api.js

@ -264,7 +264,7 @@ function getDocument(src, pdfDataRangeTransport,
// 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 settings, using it. // is specified in global settings, using it.
var workerPort = getDefaultSetting('workerPort'); var workerPort = getDefaultSetting('workerPort');
worker = workerPort ? new PDFWorker(null, workerPort) : new PDFWorker(); worker = workerPort ? PDFWorker.fromPort(workerPort) : new PDFWorker();
task._worker = worker; task._worker = worker;
} }
var docId = task.docId; var docId = task.docId;
@ -1160,7 +1160,7 @@ class LoopbackPort {
* @class * @class
*/ */
var PDFWorker = (function PDFWorkerClosure() { var PDFWorker = (function PDFWorkerClosure() {
var nextFakeWorkerId = 0; let nextFakeWorkerId = 0;
function getWorkerSrc() { function getWorkerSrc() {
if (typeof workerSrc !== 'undefined') { if (typeof workerSrc !== 'undefined') {
@ -1177,7 +1177,7 @@ var PDFWorker = (function PDFWorkerClosure() {
error('No PDFJS.workerSrc specified'); error('No PDFJS.workerSrc specified');
} }
var fakeWorkerFilesLoadedCapability; let fakeWorkerFilesLoadedCapability;
// Loads worker code into main thread. // Loads worker code into main thread.
function setupFakeWorkerGlobal() { function setupFakeWorkerGlobal() {
@ -1229,7 +1229,13 @@ var PDFWorker = (function PDFWorkerClosure() {
return URL.createObjectURL(new Blob([wrapper])); return URL.createObjectURL(new Blob([wrapper]));
} }
let pdfWorkerPorts = new WeakMap();
function PDFWorker(name, port) { function PDFWorker(name, port) {
if (pdfWorkerPorts.has(port)) {
throw new Error('Cannot use more than one PDFWorker per port');
}
this.name = name; this.name = name;
this.destroyed = false; this.destroyed = false;
@ -1239,6 +1245,7 @@ var PDFWorker = (function PDFWorkerClosure() {
this._messageHandler = null; this._messageHandler = null;
if (port) { if (port) {
pdfWorkerPorts.set(port, this);
this._initializeFromPort(port); this._initializeFromPort(port);
return; return;
} }
@ -1444,6 +1451,13 @@ var PDFWorker = (function PDFWorkerClosure() {
}, },
}; };
PDFWorker.fromPort = function (port) {
if (pdfWorkerPorts.has(port)) {
return pdfWorkerPorts.get(port);
}
return new PDFWorker(null, port);
};
return PDFWorker; return PDFWorker;
})(); })();

Loading…
Cancel
Save