commit
aea3eccd0f
@ -1045,6 +1045,88 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
|
|||||||
return PDFPageProxy;
|
return PDFPageProxy;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
class LoopbackPort {
|
||||||
|
constructor(defer) {
|
||||||
|
this._listeners = [];
|
||||||
|
this._defer = defer;
|
||||||
|
this._deferred = Promise.resolve(undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
postMessage(obj, transfers) {
|
||||||
|
function cloneValue(value) {
|
||||||
|
// Trying to perform a structured clone close to the spec, including
|
||||||
|
// transfers.
|
||||||
|
if (typeof value !== 'object' || value === null) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
if (cloned.has(value)) { // already cloned the object
|
||||||
|
return cloned.get(value);
|
||||||
|
}
|
||||||
|
var result;
|
||||||
|
var buffer;
|
||||||
|
if ((buffer = value.buffer) && isArrayBuffer(buffer)) {
|
||||||
|
// We found object with ArrayBuffer (typed array).
|
||||||
|
var transferable = transfers && transfers.indexOf(buffer) >= 0;
|
||||||
|
if (value === buffer) {
|
||||||
|
// Special case when we are faking typed arrays in compatibility.js.
|
||||||
|
result = value;
|
||||||
|
} else if (transferable) {
|
||||||
|
result = new value.constructor(buffer, value.byteOffset,
|
||||||
|
value.byteLength);
|
||||||
|
} else {
|
||||||
|
result = new value.constructor(value);
|
||||||
|
}
|
||||||
|
cloned.set(value, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
result = isArray(value) ? [] : {};
|
||||||
|
cloned.set(value, result); // adding to cache now for cyclic references
|
||||||
|
// Cloning all value and object properties, however ignoring properties
|
||||||
|
// defined via getter.
|
||||||
|
for (var i in value) {
|
||||||
|
var desc, p = value;
|
||||||
|
while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
|
||||||
|
p = Object.getPrototypeOf(p);
|
||||||
|
}
|
||||||
|
if (typeof desc.value === 'undefined' ||
|
||||||
|
typeof desc.value === 'function') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
result[i] = cloneValue(desc.value);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this._defer) {
|
||||||
|
this._listeners.forEach(function (listener) {
|
||||||
|
listener.call(this, {data: obj});
|
||||||
|
}, this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var cloned = new WeakMap();
|
||||||
|
var e = {data: cloneValue(obj)};
|
||||||
|
this._deferred.then(function () {
|
||||||
|
this._listeners.forEach(function (listener) {
|
||||||
|
listener.call(this, e);
|
||||||
|
}, this);
|
||||||
|
}.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
addEventListener(name, listener) {
|
||||||
|
this._listeners.push(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
removeEventListener(name, listener) {
|
||||||
|
var i = this._listeners.indexOf(listener);
|
||||||
|
this._listeners.splice(i, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
terminate() {
|
||||||
|
this._listeners = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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,
|
||||||
@ -1113,84 +1195,6 @@ var PDFWorker = (function PDFWorkerClosure() {
|
|||||||
return fakeWorkerFilesLoadedCapability.promise;
|
return fakeWorkerFilesLoadedCapability.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
function FakeWorkerPort(defer) {
|
|
||||||
this._listeners = [];
|
|
||||||
this._defer = defer;
|
|
||||||
this._deferred = Promise.resolve(undefined);
|
|
||||||
}
|
|
||||||
FakeWorkerPort.prototype = {
|
|
||||||
postMessage(obj, transfers) {
|
|
||||||
function cloneValue(value) {
|
|
||||||
// Trying to perform a structured clone close to the spec, including
|
|
||||||
// transfers.
|
|
||||||
if (typeof value !== 'object' || value === null) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
if (cloned.has(value)) { // already cloned the object
|
|
||||||
return cloned.get(value);
|
|
||||||
}
|
|
||||||
var result;
|
|
||||||
var buffer;
|
|
||||||
if ((buffer = value.buffer) && isArrayBuffer(buffer)) {
|
|
||||||
// We found object with ArrayBuffer (typed array).
|
|
||||||
var transferable = transfers && transfers.indexOf(buffer) >= 0;
|
|
||||||
if (value === buffer) {
|
|
||||||
// Special case when we are faking typed arrays in compatibility.js.
|
|
||||||
result = value;
|
|
||||||
} else if (transferable) {
|
|
||||||
result = new value.constructor(buffer, value.byteOffset,
|
|
||||||
value.byteLength);
|
|
||||||
} else {
|
|
||||||
result = new value.constructor(value);
|
|
||||||
}
|
|
||||||
cloned.set(value, result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
result = isArray(value) ? [] : {};
|
|
||||||
cloned.set(value, result); // adding to cache now for cyclic references
|
|
||||||
// Cloning all value and object properties, however ignoring properties
|
|
||||||
// defined via getter.
|
|
||||||
for (var i in value) {
|
|
||||||
var desc, p = value;
|
|
||||||
while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
|
|
||||||
p = Object.getPrototypeOf(p);
|
|
||||||
}
|
|
||||||
if (typeof desc.value === 'undefined' ||
|
|
||||||
typeof desc.value === 'function') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
result[i] = cloneValue(desc.value);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this._defer) {
|
|
||||||
this._listeners.forEach(function (listener) {
|
|
||||||
listener.call(this, {data: obj});
|
|
||||||
}, this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var cloned = new WeakMap();
|
|
||||||
var e = {data: cloneValue(obj)};
|
|
||||||
this._deferred.then(function () {
|
|
||||||
this._listeners.forEach(function (listener) {
|
|
||||||
listener.call(this, e);
|
|
||||||
}, this);
|
|
||||||
}.bind(this));
|
|
||||||
},
|
|
||||||
addEventListener(name, listener) {
|
|
||||||
this._listeners.push(listener);
|
|
||||||
},
|
|
||||||
removeEventListener(name, listener) {
|
|
||||||
var i = this._listeners.indexOf(listener);
|
|
||||||
this._listeners.splice(i, 1);
|
|
||||||
},
|
|
||||||
terminate() {
|
|
||||||
this._listeners = [];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
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.
|
||||||
// We want this function to fail in case if createObjectURL or Blob do not
|
// We want this function to fail in case if createObjectURL or Blob do not
|
||||||
@ -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,
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user