Browse Source

Merge pull request #8361 from tobytailor/master

Export LoopbackPort
Yury Delendik 8 years ago committed by GitHub
parent
commit
aea3eccd0f
  1. 153
      src/display/api.js
  2. 4
      src/display/global.js
  3. 1
      src/main_loader.js
  4. 1
      src/pdf.js

153
src/display/api.js

@ -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,

4
src/display/global.js

@ -14,7 +14,8 @@
*/ */
import { import {
_UnsupportedManager, getDocument, PDFDataRangeTransport, PDFWorker _UnsupportedManager, getDocument, LoopbackPort, PDFDataRangeTransport,
PDFWorker
} from './api'; } from './api';
import { import {
addLinkAttributes, CustomStyle, DEFAULT_LINK_REL, getFilenameFromUrl, addLinkAttributes, CustomStyle, DEFAULT_LINK_REL, getFilenameFromUrl,
@ -281,6 +282,7 @@ if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('MOZCENTRAL')) {
} }
PDFJS.getDocument = getDocument; PDFJS.getDocument = getDocument;
PDFJS.LoopbackPort = LoopbackPort;
PDFJS.PDFDataRangeTransport = PDFDataRangeTransport; PDFJS.PDFDataRangeTransport = PDFDataRangeTransport;
PDFJS.PDFWorker = PDFWorker; PDFJS.PDFWorker = PDFWorker;

1
src/main_loader.js

@ -44,6 +44,7 @@
exports.version = displayAPI.version; exports.version = displayAPI.version;
exports.getDocument = displayAPI.getDocument; exports.getDocument = displayAPI.getDocument;
exports.PDFDataRangeTransport = displayAPI.PDFDataRangeTransport; exports.PDFDataRangeTransport = displayAPI.PDFDataRangeTransport;
exports.LoopbackPort = displayAPI.LoopbackPort;
exports.PDFWorker = displayAPI.PDFWorker; exports.PDFWorker = displayAPI.PDFWorker;
exports.renderTextLayer = displayTextLayer.renderTextLayer; exports.renderTextLayer = displayTextLayer.renderTextLayer;
exports.AnnotationLayer = displayAnnotationLayer.AnnotationLayer; exports.AnnotationLayer = displayAnnotationLayer.AnnotationLayer;

1
src/pdf.js

@ -31,6 +31,7 @@ exports.PDFJS = pdfjsDisplayGlobal.PDFJS;
exports.build = pdfjsDisplayAPI.build; exports.build = pdfjsDisplayAPI.build;
exports.version = pdfjsDisplayAPI.version; exports.version = pdfjsDisplayAPI.version;
exports.getDocument = pdfjsDisplayAPI.getDocument; exports.getDocument = pdfjsDisplayAPI.getDocument;
exports.LoobpackPort = pdfjsDisplayAPI.LoopbackPort;
exports.PDFDataRangeTransport = pdfjsDisplayAPI.PDFDataRangeTransport; exports.PDFDataRangeTransport = pdfjsDisplayAPI.PDFDataRangeTransport;
exports.PDFWorker = pdfjsDisplayAPI.PDFWorker; exports.PDFWorker = pdfjsDisplayAPI.PDFWorker;
exports.renderTextLayer = pdfjsDisplayTextLayer.renderTextLayer; exports.renderTextLayer = pdfjsDisplayTextLayer.renderTextLayer;

Loading…
Cancel
Save