|
|
@ -1045,80 +1045,13 @@ var PDFPageProxy = (function PDFPageProxyClosure() { |
|
|
|
return PDFPageProxy; |
|
|
|
return PDFPageProxy; |
|
|
|
})(); |
|
|
|
})(); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
class LoopbackPort { |
|
|
|
* PDF.js web worker abstraction, it controls instantiation of PDF documents and |
|
|
|
constructor(defer) { |
|
|
|
* WorkerTransport for them. If creation of a web worker is not possible, |
|
|
|
|
|
|
|
* a "fake" worker will be used instead. |
|
|
|
|
|
|
|
* @class |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var PDFWorker = (function PDFWorkerClosure() { |
|
|
|
|
|
|
|
var nextFakeWorkerId = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getWorkerSrc() { |
|
|
|
|
|
|
|
if (typeof workerSrc !== 'undefined') { |
|
|
|
|
|
|
|
return workerSrc; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (getDefaultSetting('workerSrc')) { |
|
|
|
|
|
|
|
return getDefaultSetting('workerSrc'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (typeof PDFJSDev !== 'undefined' && |
|
|
|
|
|
|
|
PDFJSDev.test('PRODUCTION && !(MOZCENTRAL || FIREFOX)') && |
|
|
|
|
|
|
|
pdfjsFilePath) { |
|
|
|
|
|
|
|
return pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, '.worker$1$2'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
error('No PDFJS.workerSrc specified'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var fakeWorkerFilesLoadedCapability; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Loads worker code into main thread.
|
|
|
|
|
|
|
|
function setupFakeWorkerGlobal() { |
|
|
|
|
|
|
|
var WorkerMessageHandler; |
|
|
|
|
|
|
|
if (fakeWorkerFilesLoadedCapability) { |
|
|
|
|
|
|
|
return fakeWorkerFilesLoadedCapability.promise; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
fakeWorkerFilesLoadedCapability = createPromiseCapability(); |
|
|
|
|
|
|
|
// In the developer build load worker_loader 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') { |
|
|
|
|
|
|
|
Promise.all([SystemJS.import('pdfjs/core/network'), |
|
|
|
|
|
|
|
SystemJS.import('pdfjs/core/worker')]).then((modules) => { |
|
|
|
|
|
|
|
var worker = modules[1]; |
|
|
|
|
|
|
|
WorkerMessageHandler = worker.WorkerMessageHandler; |
|
|
|
|
|
|
|
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} else if (typeof require === 'function') { |
|
|
|
|
|
|
|
var worker = require('../core/worker.js'); |
|
|
|
|
|
|
|
WorkerMessageHandler = worker.WorkerMessageHandler; |
|
|
|
|
|
|
|
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
throw new Error( |
|
|
|
|
|
|
|
'SystemJS or CommonJS must be used to load fake worker.'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else if (PDFJSDev.test('SINGLE_FILE')) { |
|
|
|
|
|
|
|
var pdfjsCoreWorker = require('../core/worker.js'); |
|
|
|
|
|
|
|
require('../core/network.js'); |
|
|
|
|
|
|
|
WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler; |
|
|
|
|
|
|
|
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
var loader = fakeWorkerFilesLoader || function (callback) { |
|
|
|
|
|
|
|
Util.loadScript(getWorkerSrc(), function () { |
|
|
|
|
|
|
|
callback(window.pdfjsDistBuildPdfWorker.WorkerMessageHandler); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
loader(fakeWorkerFilesLoadedCapability.resolve); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return fakeWorkerFilesLoadedCapability.promise; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function FakeWorkerPort(defer) { |
|
|
|
|
|
|
|
this._listeners = []; |
|
|
|
this._listeners = []; |
|
|
|
this._defer = defer; |
|
|
|
this._defer = defer; |
|
|
|
this._deferred = Promise.resolve(undefined); |
|
|
|
this._deferred = Promise.resolve(undefined); |
|
|
|
} |
|
|
|
} |
|
|
|
FakeWorkerPort.prototype = { |
|
|
|
|
|
|
|
postMessage(obj, transfers) { |
|
|
|
postMessage(obj, transfers) { |
|
|
|
function cloneValue(value) { |
|
|
|
function cloneValue(value) { |
|
|
|
// Trying to perform a structured clone close to the spec, including
|
|
|
|
// Trying to perform a structured clone close to the spec, including
|
|
|
@ -1178,18 +1111,89 @@ var PDFWorker = (function PDFWorkerClosure() { |
|
|
|
listener.call(this, e); |
|
|
|
listener.call(this, e); |
|
|
|
}, this); |
|
|
|
}, this); |
|
|
|
}.bind(this)); |
|
|
|
}.bind(this)); |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
addEventListener(name, listener) { |
|
|
|
addEventListener(name, listener) { |
|
|
|
this._listeners.push(listener); |
|
|
|
this._listeners.push(listener); |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
removeEventListener(name, listener) { |
|
|
|
removeEventListener(name, listener) { |
|
|
|
var i = this._listeners.indexOf(listener); |
|
|
|
var i = this._listeners.indexOf(listener); |
|
|
|
this._listeners.splice(i, 1); |
|
|
|
this._listeners.splice(i, 1); |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
terminate() { |
|
|
|
terminate() { |
|
|
|
this._listeners = []; |
|
|
|
this._listeners = []; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* PDF.js web worker abstraction, it controls instantiation of PDF documents and |
|
|
|
|
|
|
|
* WorkerTransport for them. If creation of a web worker is not possible, |
|
|
|
|
|
|
|
* a "fake" worker will be used instead. |
|
|
|
|
|
|
|
* @class |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
var PDFWorker = (function PDFWorkerClosure() { |
|
|
|
|
|
|
|
var nextFakeWorkerId = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getWorkerSrc() { |
|
|
|
|
|
|
|
if (typeof workerSrc !== 'undefined') { |
|
|
|
|
|
|
|
return workerSrc; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (getDefaultSetting('workerSrc')) { |
|
|
|
|
|
|
|
return getDefaultSetting('workerSrc'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (typeof PDFJSDev !== 'undefined' && |
|
|
|
|
|
|
|
PDFJSDev.test('PRODUCTION && !(MOZCENTRAL || FIREFOX)') && |
|
|
|
|
|
|
|
pdfjsFilePath) { |
|
|
|
|
|
|
|
return pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, '.worker$1$2'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
error('No PDFJS.workerSrc specified'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var fakeWorkerFilesLoadedCapability; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Loads worker code into main thread.
|
|
|
|
|
|
|
|
function setupFakeWorkerGlobal() { |
|
|
|
|
|
|
|
var WorkerMessageHandler; |
|
|
|
|
|
|
|
if (fakeWorkerFilesLoadedCapability) { |
|
|
|
|
|
|
|
return fakeWorkerFilesLoadedCapability.promise; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
fakeWorkerFilesLoadedCapability = createPromiseCapability(); |
|
|
|
|
|
|
|
// In the developer build load worker_loader 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') { |
|
|
|
|
|
|
|
Promise.all([SystemJS.import('pdfjs/core/network'), |
|
|
|
|
|
|
|
SystemJS.import('pdfjs/core/worker')]).then((modules) => { |
|
|
|
|
|
|
|
var worker = modules[1]; |
|
|
|
|
|
|
|
WorkerMessageHandler = worker.WorkerMessageHandler; |
|
|
|
|
|
|
|
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} else if (typeof require === 'function') { |
|
|
|
|
|
|
|
var worker = require('../core/worker.js'); |
|
|
|
|
|
|
|
WorkerMessageHandler = worker.WorkerMessageHandler; |
|
|
|
|
|
|
|
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
throw new Error( |
|
|
|
|
|
|
|
'SystemJS or CommonJS must be used to load fake worker.'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else if (PDFJSDev.test('SINGLE_FILE')) { |
|
|
|
|
|
|
|
var pdfjsCoreWorker = require('../core/worker.js'); |
|
|
|
|
|
|
|
require('../core/network.js'); |
|
|
|
|
|
|
|
WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler; |
|
|
|
|
|
|
|
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
var loader = fakeWorkerFilesLoader || function (callback) { |
|
|
|
|
|
|
|
Util.loadScript(getWorkerSrc(), function () { |
|
|
|
|
|
|
|
callback(window.pdfjsDistBuildPdfWorker.WorkerMessageHandler); |
|
|
|
|
|
|
|
}); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
loader(fakeWorkerFilesLoadedCapability.resolve); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return fakeWorkerFilesLoadedCapability.promise; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function createCDNWrapper(url) { |
|
|
|
function createCDNWrapper(url) { |
|
|
|
// We will rely on blob URL's property to specify origin.
|
|
|
|
// We will rely on blob URL's property to specify origin.
|
|
|
@ -1379,7 +1383,7 @@ var PDFWorker = (function PDFWorkerClosure() { |
|
|
|
// structured cloning) when typed arrays are not supported. Relying
|
|
|
|
// structured cloning) when typed arrays are not supported. Relying
|
|
|
|
// on a chance that messages will be sent in proper order.
|
|
|
|
// on a chance that messages will be sent in proper order.
|
|
|
|
var isTypedArraysPresent = Uint8Array !== Float32Array; |
|
|
|
var isTypedArraysPresent = Uint8Array !== Float32Array; |
|
|
|
var port = new FakeWorkerPort(isTypedArraysPresent); |
|
|
|
var port = new LoopbackPort(isTypedArraysPresent); |
|
|
|
this._port = port; |
|
|
|
this._port = port; |
|
|
|
|
|
|
|
|
|
|
|
// All fake workers use the same port, making id unique.
|
|
|
|
// All fake workers use the same port, making id unique.
|
|
|
@ -2216,6 +2220,7 @@ if (typeof PDFJSDev !== 'undefined') { |
|
|
|
|
|
|
|
|
|
|
|
export { |
|
|
|
export { |
|
|
|
getDocument, |
|
|
|
getDocument, |
|
|
|
|
|
|
|
LoopbackPort, |
|
|
|
PDFDataRangeTransport, |
|
|
|
PDFDataRangeTransport, |
|
|
|
PDFWorker, |
|
|
|
PDFWorker, |
|
|
|
PDFDocumentProxy, |
|
|
|
PDFDocumentProxy, |
|
|
|