Browse Source

PDF.js version 1.8.581 - See mozilla/pdf.js@343b4dc2b61c88f9b549f212b5d91a8b7acd4209

master v1.8.581
pdfjsbot 8 years ago
parent
commit
f8b6be1393
  1. 2
      bower.json
  2. 46403
      build/pdf.combined.js
  3. 2
      build/pdf.combined.js.map
  4. 4721
      build/pdf.js
  5. 2
      build/pdf.js.map
  6. 16
      build/pdf.min.js
  7. 1802
      build/pdf.worker.js
  8. 2
      build/pdf.worker.js.map
  9. 40
      build/pdf.worker.min.js
  10. 265
      lib/core/worker.js
  11. 162
      lib/display/api.js
  12. 4
      lib/display/global.js
  13. 4
      lib/display/network.js
  14. 246
      lib/display/transport_stream.js
  15. 7
      lib/pdf.js
  16. 7
      lib/pdf.worker.js
  17. 41
      lib/shared/util.js
  18. 2
      lib/test/unit/network_spec.js
  19. 2
      package.json

2
bower.json

@ -1,6 +1,6 @@
{ {
"name": "pdfjs-dist", "name": "pdfjs-dist",
"version": "1.8.579", "version": "1.8.581",
"main": [ "main": [
"build/pdf.js", "build/pdf.js",
"build/pdf.worker.js" "build/pdf.worker.js"

46403
build/pdf.combined.js

File diff suppressed because it is too large Load Diff

2
build/pdf.combined.js.map

File diff suppressed because one or more lines are too long

4721
build/pdf.js

File diff suppressed because it is too large Load Diff

2
build/pdf.js.map

File diff suppressed because one or more lines are too long

16
build/pdf.min.js vendored

File diff suppressed because one or more lines are too long

1802
build/pdf.worker.js vendored

File diff suppressed because it is too large Load Diff

2
build/pdf.worker.js.map vendored

File diff suppressed because one or more lines are too long

40
build/pdf.worker.min.js vendored

File diff suppressed because one or more lines are too long

265
lib/core/worker.js

@ -17,7 +17,7 @@
Object.defineProperty(exports, "__esModule", { Object.defineProperty(exports, "__esModule", {
value: true value: true
}); });
exports.WorkerMessageHandler = exports.WorkerTask = exports.setPDFNetworkStreamClass = undefined; exports.WorkerMessageHandler = exports.WorkerTask = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
@ -53,215 +53,118 @@ var WorkerTask = function WorkerTaskClosure() {
}(); }();
; ;
var PDFWorkerStream = function PDFWorkerStreamClosure() { var PDFWorkerStream = function PDFWorkerStreamClosure() {
function PDFWorkerStream(params, msgHandler) { function PDFWorkerStream(msgHandler) {
this._queuedChunks = [];
var initialData = params.initialData;
if (initialData && initialData.length > 0) {
this._queuedChunks.push(initialData);
}
this._msgHandler = msgHandler; this._msgHandler = msgHandler;
this._isRangeSupported = !params.disableRange; this._contentLength = null;
this._isStreamingSupported = !params.disableStream;
this._contentLength = params.length;
this._fullRequestReader = null; this._fullRequestReader = null;
this._rangeReaders = []; this._rangeRequestReaders = [];
msgHandler.on('OnDataRange', this._onReceiveData.bind(this));
msgHandler.on('OnDataProgress', this._onProgress.bind(this));
} }
PDFWorkerStream.prototype = { PDFWorkerStream.prototype = {
_onReceiveData: function PDFWorkerStream_onReceiveData(args) { getFullReader: function getFullReader() {
if (args.begin === undefined) {
if (this._fullRequestReader) {
this._fullRequestReader._enqueue(args.chunk);
} else {
this._queuedChunks.push(args.chunk);
}
} else {
var found = this._rangeReaders.some(function (rangeReader) {
if (rangeReader._begin !== args.begin) {
return false;
}
rangeReader._enqueue(args.chunk);
return true;
});
(0, _util.assert)(found);
}
},
_onProgress: function PDFWorkerStream_onProgress(evt) {
if (this._rangeReaders.length > 0) {
var firstReader = this._rangeReaders[0];
if (firstReader.onProgress) {
firstReader.onProgress({ loaded: evt.loaded });
}
}
},
_removeRangeReader: function PDFWorkerStream_removeRangeReader(reader) {
var i = this._rangeReaders.indexOf(reader);
if (i >= 0) {
this._rangeReaders.splice(i, 1);
}
},
getFullReader: function PDFWorkerStream_getFullReader() {
(0, _util.assert)(!this._fullRequestReader); (0, _util.assert)(!this._fullRequestReader);
var queuedChunks = this._queuedChunks; this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);
this._queuedChunks = null; return this._fullRequestReader;
return new PDFWorkerStreamReader(this, queuedChunks);
}, },
getRangeReader: function PDFWorkerStream_getRangeReader(begin, end) { getRangeReader: function getRangeReader(begin, end) {
var reader = new PDFWorkerStreamRangeReader(this, begin, end); var reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);
this._msgHandler.send('RequestDataRange', { this._rangeRequestReaders.push(reader);
begin: begin,
end: end
});
this._rangeReaders.push(reader);
return reader; return reader;
}, },
cancelAllRequests: function PDFWorkerStream_cancelAllRequests(reason) { cancelAllRequests: function cancelAllRequests(reason) {
if (this._fullRequestReader) { if (this._fullRequestReader) {
this._fullRequestReader.cancel(reason); this._fullRequestReader.cancel(reason);
} }
var readers = this._rangeReaders.slice(0); var readers = this._rangeRequestReaders.slice(0);
readers.forEach(function (rangeReader) { readers.forEach(function (reader) {
rangeReader.cancel(reason); reader.cancel(reason);
}); });
} }
}; };
function PDFWorkerStreamReader(stream, queuedChunks) { function PDFWorkerStreamReader(msgHandler) {
this._stream = stream; var _this = this;
this._done = false;
this._queuedChunks = queuedChunks || []; this._msgHandler = msgHandler;
this._requests = []; this._contentLength = null;
this._headersReady = Promise.resolve(); this._isRangeSupported = false;
stream._fullRequestReader = this; this._isStreamingSupported = false;
this.onProgress = null; var readableStream = this._msgHandler.sendWithStream('GetReader');
} this._reader = readableStream.getReader();
PDFWorkerStreamReader.prototype = { this._headersReady = this._msgHandler.sendWithPromise('ReaderHeadersReady').then(function (data) {
_enqueue: function PDFWorkerStreamReader_enqueue(chunk) { _this._isStreamingSupported = data.isStreamingSupported;
if (this._done) { _this._isRangeSupported = data.isRangeSupported;
return; _this._contentLength = data.contentLength;
}
if (this._requests.length > 0) {
var requestCapability = this._requests.shift();
requestCapability.resolve({
value: chunk,
done: false
}); });
return;
} }
this._queuedChunks.push(chunk); PDFWorkerStreamReader.prototype = {
},
get headersReady() { get headersReady() {
return this._headersReady; return this._headersReady;
}, },
get isRangeSupported() { get contentLength() {
return this._stream._isRangeSupported; return this._contentLength;
}, },
get isStreamingSupported() { get isStreamingSupported() {
return this._stream._isStreamingSupported; return this._isStreamingSupported;
}, },
get contentLength() { get isRangeSupported() {
return this._stream._contentLength; return this._isRangeSupported;
}, },
read: function PDFWorkerStreamReader_read() { read: function read() {
if (this._queuedChunks.length > 0) { return this._reader.read().then(function (_ref) {
var chunk = this._queuedChunks.shift(); var value = _ref.value,
return Promise.resolve({ done = _ref.done;
value: chunk,
done: false if (done) {
}); return {
}
if (this._done) {
return Promise.resolve({
value: undefined, value: undefined,
done: true done: true
}); };
} }
var requestCapability = (0, _util.createPromiseCapability)(); return {
this._requests.push(requestCapability); value: value.buffer,
return requestCapability.promise; done: false
}, };
cancel: function PDFWorkerStreamReader_cancel(reason) {
this._done = true;
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({
value: undefined,
done: true
});
}); });
this._requests = []; },
cancel: function cancel(reason) {
this._reader.cancel(reason);
} }
}; };
function PDFWorkerStreamRangeReader(stream, begin, end) { function PDFWorkerStreamRangeReader(begin, end, msgHandler) {
this._stream = stream; this._msgHandler = msgHandler;
this._begin = begin;
this._end = end;
this._queuedChunk = null;
this._requests = [];
this._done = false;
this.onProgress = null; this.onProgress = null;
} var readableStream = this._msgHandler.sendWithStream('GetRangeReader', {
PDFWorkerStreamRangeReader.prototype = { begin: begin,
_enqueue: function PDFWorkerStreamRangeReader_enqueue(chunk) { end: end
if (this._done) {
return;
}
if (this._requests.length === 0) {
this._queuedChunk = chunk;
} else {
var requestsCapability = this._requests.shift();
requestsCapability.resolve({
value: chunk,
done: false
});
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({
value: undefined,
done: true
});
}); });
this._requests = []; this._reader = readableStream.getReader();
} }
this._done = true; PDFWorkerStreamRangeReader.prototype = {
this._stream._removeRangeReader(this);
},
get isStreamingSupported() { get isStreamingSupported() {
return false; return false;
}, },
read: function PDFWorkerStreamRangeReader_read() { read: function read() {
if (this._queuedChunk) { return this._reader.read().then(function (_ref2) {
return Promise.resolve({ var value = _ref2.value,
value: this._queuedChunk, done = _ref2.done;
done: false
}); if (done) {
} return {
if (this._done) {
return Promise.resolve({
value: undefined, value: undefined,
done: true done: true
}); };
} }
var requestCapability = (0, _util.createPromiseCapability)(); return {
this._requests.push(requestCapability); value: value.buffer,
return requestCapability.promise; done: false
}, };
cancel: function PDFWorkerStreamRangeReader_cancel(reason) {
this._done = true;
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({
value: undefined,
done: true
});
}); });
this._requests = []; },
this._stream._removeRangeReader(this); cancel: function cancel(reason) {
this._reader.cancel(reason);
} }
}; };
return PDFWorkerStream; return PDFWorkerStream;
}(); }();
var PDFNetworkStream;
function setPDFNetworkStreamClass(cls) {
PDFNetworkStream = cls;
}
var WorkerMessageHandler = { var WorkerMessageHandler = {
setup: function setup(handler, port) { setup: function setup(handler, port) {
var testMessageProcessed = false; var testMessageProcessed = false;
@ -360,30 +263,16 @@ var WorkerMessageHandler = {
} }
return pdfManagerCapability.promise; return pdfManagerCapability.promise;
} }
var pdfStream; var pdfStream,
cachedChunks = [];
try { try {
if (source.chunkedViewerLoading) { pdfStream = new PDFWorkerStream(handler);
pdfStream = new PDFWorkerStream(source, handler);
} else {
if (!PDFNetworkStream) {
throw new Error('./network module is not loaded');
}
pdfStream = new PDFNetworkStream(data);
}
} catch (ex) { } catch (ex) {
pdfManagerCapability.reject(ex); pdfManagerCapability.reject(ex);
return pdfManagerCapability.promise; return pdfManagerCapability.promise;
} }
var fullRequest = pdfStream.getFullReader(); var fullRequest = pdfStream.getFullReader();
fullRequest.headersReady.then(function () { fullRequest.headersReady.then(function () {
if (!fullRequest.isStreamingSupported || !fullRequest.isRangeSupported) {
fullRequest.onProgress = function (evt) {
handler.send('DocProgress', {
loaded: evt.loaded,
total: evt.total
});
};
}
if (!fullRequest.isRangeSupported) { if (!fullRequest.isRangeSupported) {
return; return;
} }
@ -396,14 +285,17 @@ var WorkerMessageHandler = {
disableAutoFetch: disableAutoFetch, disableAutoFetch: disableAutoFetch,
rangeChunkSize: source.rangeChunkSize rangeChunkSize: source.rangeChunkSize
}, evaluatorOptions, docBaseUrl); }, evaluatorOptions, docBaseUrl);
for (var i = 0; i < cachedChunks.length; i++) {
pdfManager.sendProgressiveData(cachedChunks[i]);
}
cachedChunks = [];
pdfManagerCapability.resolve(pdfManager); pdfManagerCapability.resolve(pdfManager);
cancelXHRs = null; cancelXHRs = null;
}).catch(function (reason) { }).catch(function (reason) {
pdfManagerCapability.reject(reason); pdfManagerCapability.reject(reason);
cancelXHRs = null; cancelXHRs = null;
}); });
var cachedChunks = [], var loaded = 0;
loaded = 0;
var flushChunks = function flushChunks() { var flushChunks = function flushChunks() {
var pdfFile = (0, _util.arraysToBytes)(cachedChunks); var pdfFile = (0, _util.arraysToBytes)(cachedChunks);
if (source.length && pdfFile.length !== source.length) { if (source.length && pdfFile.length !== source.length) {
@ -695,6 +587,5 @@ function isMessagePort(maybePort) {
if (typeof window === 'undefined' && !(0, _util.isNodeJS)() && typeof self !== 'undefined' && isMessagePort(self)) { if (typeof window === 'undefined' && !(0, _util.isNodeJS)() && typeof self !== 'undefined' && isMessagePort(self)) {
WorkerMessageHandler.initializeFromPort(self); WorkerMessageHandler.initializeFromPort(self);
} }
exports.setPDFNetworkStreamClass = setPDFNetworkStreamClass;
exports.WorkerTask = WorkerTask; exports.WorkerTask = WorkerTask;
exports.WorkerMessageHandler = WorkerMessageHandler; exports.WorkerMessageHandler = WorkerMessageHandler;

162
lib/display/api.js

@ -17,7 +17,7 @@
Object.defineProperty(exports, "__esModule", { Object.defineProperty(exports, "__esModule", {
value: true value: true
}); });
exports.build = exports.version = exports._UnsupportedManager = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.getDocument = undefined; exports.build = exports.version = exports._UnsupportedManager = exports.setPDFNetworkStreamClass = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.getDocument = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
@ -33,6 +33,8 @@ var _canvas = require('./canvas');
var _metadata = require('./metadata'); var _metadata = require('./metadata');
var _transport_stream = require('./transport_stream');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var DEFAULT_RANGE_CHUNK_SIZE = 65536; var DEFAULT_RANGE_CHUNK_SIZE = 65536;
@ -68,6 +70,10 @@ var useRequireEnsure = false;
}); });
} : null; } : null;
} }
var PDFNetworkStream;
function setPDFNetworkStreamClass(cls) {
PDFNetworkStream = cls;
}
function getDocument(src, pdfDataRangeTransport, passwordCallback, progressCallback) { function getDocument(src, pdfDataRangeTransport, passwordCallback, progressCallback) {
var task = new PDFDocumentLoadingTask(); var task = new PDFDocumentLoadingTask();
if (arguments.length > 1) { if (arguments.length > 1) {
@ -159,8 +165,18 @@ function getDocument(src, pdfDataRangeTransport, passwordCallback, progressCallb
if (task.destroyed) { if (task.destroyed) {
throw new Error('Loading aborted'); throw new Error('Loading aborted');
} }
var networkStream = void 0;
if (rangeTransport) {
networkStream = new _transport_stream.PDFDataTransportStream(params, rangeTransport);
} else if (!params.data) {
networkStream = new PDFNetworkStream({
source: params,
disableRange: (0, _dom_utils.getDefaultSetting)('disableRange')
});
}
var messageHandler = new _util.MessageHandler(docId, workerId, worker.port); var messageHandler = new _util.MessageHandler(docId, workerId, worker.port);
var transport = new WorkerTransport(messageHandler, task, rangeTransport, CMapReaderFactory); messageHandler.postMessageTransfers = worker.postMessageTransfers;
var transport = new WorkerTransport(messageHandler, task, networkStream, CMapReaderFactory);
task._transport = transport; task._transport = transport;
messageHandler.send('Ready', null); messageHandler.send('Ready', null);
}); });
@ -181,7 +197,6 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
return worker.messageHandler.sendWithPromise('GetDocRequest', { return worker.messageHandler.sendWithPromise('GetDocRequest', {
docId: docId, docId: docId,
source: source, source: source,
disableRange: (0, _dom_utils.getDefaultSetting)('disableRange'),
maxImageSize: (0, _dom_utils.getDefaultSetting)('maxImageSize'), maxImageSize: (0, _dom_utils.getDefaultSetting)('maxImageSize'),
disableFontFace: (0, _dom_utils.getDefaultSetting)('disableFontFace'), disableFontFace: (0, _dom_utils.getDefaultSetting)('disableFontFace'),
disableCreateObjectURL: (0, _dom_utils.getDefaultSetting)('disableCreateObjectURL'), disableCreateObjectURL: (0, _dom_utils.getDefaultSetting)('disableCreateObjectURL'),
@ -730,6 +745,7 @@ var PDFWorker = function PDFWorkerClosure() {
} }
this.name = name; this.name = name;
this.destroyed = false; this.destroyed = false;
this.postMessageTransfers = true;
this._readyCapability = (0, _util.createPromiseCapability)(); this._readyCapability = (0, _util.createPromiseCapability)();
this._port = null; this._port = null;
this._webWorker = null; this._webWorker = null;
@ -796,6 +812,7 @@ var PDFWorker = function PDFWorkerClosure() {
_this6._port = worker; _this6._port = worker;
_this6._webWorker = worker; _this6._webWorker = worker;
if (!data.supportTransfers) { if (!data.supportTransfers) {
_this6.postMessageTransfers = false;
isPostMessageTransfersDisabled = true; isPostMessageTransfersDisabled = true;
} }
_this6._readyCapability.resolve(); _this6._readyCapability.resolve();
@ -888,10 +905,9 @@ var PDFWorker = function PDFWorkerClosure() {
return PDFWorker; return PDFWorker;
}(); }();
var WorkerTransport = function WorkerTransportClosure() { var WorkerTransport = function WorkerTransportClosure() {
function WorkerTransport(messageHandler, loadingTask, pdfDataRangeTransport, CMapReaderFactory) { function WorkerTransport(messageHandler, loadingTask, networkStream, CMapReaderFactory) {
this.messageHandler = messageHandler; this.messageHandler = messageHandler;
this.loadingTask = loadingTask; this.loadingTask = loadingTask;
this.pdfDataRangeTransport = pdfDataRangeTransport;
this.commonObjs = new PDFObjects(); this.commonObjs = new PDFObjects();
this.fontLoader = new _font_loader.FontLoader(loadingTask.docId); this.fontLoader = new _font_loader.FontLoader(loadingTask.docId);
this.CMapReaderFactory = new CMapReaderFactory({ this.CMapReaderFactory = new CMapReaderFactory({
@ -901,6 +917,9 @@ var WorkerTransport = function WorkerTransportClosure() {
this.destroyed = false; this.destroyed = false;
this.destroyCapability = null; this.destroyCapability = null;
this._passwordCapability = null; this._passwordCapability = null;
this._networkStream = networkStream;
this._fullReader = null;
this._lastProgress = null;
this.pageCache = []; this.pageCache = [];
this.pagePromises = []; this.pagePromises = [];
this.downloadInfoCapability = (0, _util.createPromiseCapability)(); this.downloadInfoCapability = (0, _util.createPromiseCapability)();
@ -930,9 +949,8 @@ var WorkerTransport = function WorkerTransportClosure() {
waitOn.push(terminated); waitOn.push(terminated);
Promise.all(waitOn).then(function () { Promise.all(waitOn).then(function () {
_this8.fontLoader.clear(); _this8.fontLoader.clear();
if (_this8.pdfDataRangeTransport) { if (_this8._networkStream) {
_this8.pdfDataRangeTransport.abort(); _this8._networkStream.cancelAllRequests();
_this8.pdfDataRangeTransport = null;
} }
if (_this8.messageHandler) { if (_this8.messageHandler) {
_this8.messageHandler.destroy(); _this8.messageHandler.destroy();
@ -945,24 +963,89 @@ var WorkerTransport = function WorkerTransportClosure() {
setupMessageHandler: function WorkerTransport_setupMessageHandler() { setupMessageHandler: function WorkerTransport_setupMessageHandler() {
var messageHandler = this.messageHandler; var messageHandler = this.messageHandler;
var loadingTask = this.loadingTask; var loadingTask = this.loadingTask;
var pdfDataRangeTransport = this.pdfDataRangeTransport; messageHandler.on('GetReader', function (data, sink) {
if (pdfDataRangeTransport) { var _this9 = this;
pdfDataRangeTransport.addRangeListener(function (begin, chunk) {
messageHandler.send('OnDataRange', { (0, _util.assert)(this._networkStream);
begin: begin, this._fullReader = this._networkStream.getFullReader();
chunk: chunk this._fullReader.onProgress = function (evt) {
}); _this9._lastProgress = {
loaded: evt.loaded,
total: evt.total
};
};
sink.onPull = function () {
_this9._fullReader.read().then(function (_ref2) {
var value = _ref2.value,
done = _ref2.done;
if (done) {
sink.close();
return;
}
(0, _util.assert)((0, _util.isArrayBuffer)(value));
sink.enqueue(new Uint8Array(value), 1, [value]);
}).catch(function (reason) {
sink.error(reason);
}); });
pdfDataRangeTransport.addProgressListener(function (loaded) { };
messageHandler.send('OnDataProgress', { loaded: loaded }); sink.onCancel = function (reason) {
_this9._fullReader.cancel(reason);
};
}, this);
messageHandler.on('ReaderHeadersReady', function (data) {
var _this10 = this;
var headersCapability = (0, _util.createPromiseCapability)();
var fullReader = this._fullReader;
fullReader.headersReady.then(function () {
if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
if (_this10._lastProgress) {
var _loadingTask = _this10.loadingTask;
if (_loadingTask.onProgress) {
_loadingTask.onProgress(_this10._lastProgress);
}
}
fullReader.onProgress = function (evt) {
var loadingTask = _this10.loadingTask;
if (loadingTask.onProgress) {
loadingTask.onProgress({
loaded: evt.loaded,
total: evt.total
}); });
pdfDataRangeTransport.addProgressiveReadListener(function (chunk) { }
messageHandler.send('OnDataRange', { chunk: chunk }); };
}
headersCapability.resolve({
isStreamingSupported: fullReader.isStreamingSupported,
isRangeSupported: fullReader.isRangeSupported,
contentLength: fullReader.contentLength
}); });
messageHandler.on('RequestDataRange', function transportDataRange(data) { }, headersCapability.reject);
pdfDataRangeTransport.requestDataRange(data.begin, data.end); return headersCapability.promise;
}, this); }, this);
messageHandler.on('GetRangeReader', function (data, sink) {
(0, _util.assert)(this._networkStream);
var _rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
sink.onPull = function () {
_rangeReader.read().then(function (_ref3) {
var value = _ref3.value,
done = _ref3.done;
if (done) {
sink.close();
return;
} }
(0, _util.assert)((0, _util.isArrayBuffer)(value));
sink.enqueue(new Uint8Array(value), 1, [value]);
}).catch(function (reason) {
sink.error(reason);
});
};
sink.onCancel = function (reason) {
_rangeReader.cancel(reason);
};
}, this);
messageHandler.on('GetDoc', function transportDoc(data) { messageHandler.on('GetDoc', function transportDoc(data) {
var pdfInfo = data.pdfInfo; var pdfInfo = data.pdfInfo;
this.numPages = data.pdfInfo.numPages; this.numPages = data.pdfInfo.numPages;
@ -972,12 +1055,12 @@ var WorkerTransport = function WorkerTransportClosure() {
loadingTask._capability.resolve(pdfDocument); loadingTask._capability.resolve(pdfDocument);
}, this); }, this);
messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) { messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) {
var _this9 = this; var _this11 = this;
this._passwordCapability = (0, _util.createPromiseCapability)(); this._passwordCapability = (0, _util.createPromiseCapability)();
if (loadingTask.onPassword) { if (loadingTask.onPassword) {
var updatePassword = function updatePassword(password) { var updatePassword = function updatePassword(password) {
_this9._passwordCapability.resolve({ password: password }); _this11._passwordCapability.resolve({ password: password });
}; };
loadingTask.onPassword(updatePassword, exception.code); loadingTask.onPassword(updatePassword, exception.code);
} else { } else {
@ -1003,11 +1086,7 @@ var WorkerTransport = function WorkerTransportClosure() {
messageHandler.on('DataLoaded', function transportPage(data) { messageHandler.on('DataLoaded', function transportPage(data) {
this.downloadInfoCapability.resolve(data); this.downloadInfoCapability.resolve(data);
}, this); }, this);
messageHandler.on('PDFManagerReady', function transportPage(data) { messageHandler.on('PDFManagerReady', function transportPage(data) {}, this);
if (this.pdfDataRangeTransport) {
this.pdfDataRangeTransport.transportReady();
}
}, this);
messageHandler.on('StartRenderPage', function transportRender(data) { messageHandler.on('StartRenderPage', function transportRender(data) {
if (this.destroyed) { if (this.destroyed) {
return; return;
@ -1024,7 +1103,7 @@ var WorkerTransport = function WorkerTransportClosure() {
page._renderPageChunk(data.operatorList, data.intent); page._renderPageChunk(data.operatorList, data.intent);
}, this); }, this);
messageHandler.on('commonobj', function transportObj(data) { messageHandler.on('commonobj', function transportObj(data) {
var _this10 = this; var _this12 = this;
if (this.destroyed) { if (this.destroyed) {
return; return;
@ -1057,7 +1136,7 @@ var WorkerTransport = function WorkerTransportClosure() {
fontRegistry: fontRegistry fontRegistry: fontRegistry
}); });
var fontReady = function fontReady(fontObjs) { var fontReady = function fontReady(fontObjs) {
_this10.commonObjs.resolve(id, font); _this12.commonObjs.resolve(id, font);
}; };
this.fontLoader.bind([font], fontReady); this.fontLoader.bind([font], fontReady);
break; break;
@ -1199,7 +1278,7 @@ var WorkerTransport = function WorkerTransportClosure() {
return this.messageHandler.sendWithPromise('GetData', null); return this.messageHandler.sendWithPromise('GetData', null);
}, },
getPage: function WorkerTransport_getPage(pageNumber, capability) { getPage: function WorkerTransport_getPage(pageNumber, capability) {
var _this11 = this; var _this13 = this;
if (!(0, _util.isInt)(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) { if (!(0, _util.isInt)(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) {
return Promise.reject(new Error('Invalid page request')); return Promise.reject(new Error('Invalid page request'));
@ -1209,11 +1288,11 @@ var WorkerTransport = function WorkerTransportClosure() {
return this.pagePromises[pageIndex]; return this.pagePromises[pageIndex];
} }
var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex: pageIndex }).then(function (pageInfo) { var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex: pageIndex }).then(function (pageInfo) {
if (_this11.destroyed) { if (_this13.destroyed) {
throw new Error('Transport destroyed'); throw new Error('Transport destroyed');
} }
var page = new PDFPageProxy(pageIndex, pageInfo, _this11); var page = new PDFPageProxy(pageIndex, pageInfo, _this13);
_this11.pageCache[pageIndex] = page; _this13.pageCache[pageIndex] = page;
return page; return page;
}); });
this.pagePromises[pageIndex] = promise; this.pagePromises[pageIndex] = promise;
@ -1264,17 +1343,17 @@ var WorkerTransport = function WorkerTransportClosure() {
return this.messageHandler.sendWithPromise('GetStats', null); return this.messageHandler.sendWithPromise('GetStats', null);
}, },
startCleanup: function WorkerTransport_startCleanup() { startCleanup: function WorkerTransport_startCleanup() {
var _this12 = this; var _this14 = this;
this.messageHandler.sendWithPromise('Cleanup', null).then(function () { this.messageHandler.sendWithPromise('Cleanup', null).then(function () {
for (var i = 0, ii = _this12.pageCache.length; i < ii; i++) { for (var i = 0, ii = _this14.pageCache.length; i < ii; i++) {
var page = _this12.pageCache[i]; var page = _this14.pageCache[i];
if (page) { if (page) {
page.cleanup(); page.cleanup();
} }
} }
_this12.commonObjs.clear(); _this14.commonObjs.clear();
_this12.fontLoader.clear(); _this14.fontLoader.clear();
}); });
} }
}; };
@ -1488,8 +1567,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}(); }();
var version, build; var version, build;
{ {
exports.version = version = '1.8.579'; exports.version = version = '1.8.581';
exports.build = build = '37ac8f86'; exports.build = build = '343b4dc2';
} }
exports.getDocument = getDocument; exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort; exports.LoopbackPort = LoopbackPort;
@ -1497,6 +1576,7 @@ exports.PDFDataRangeTransport = PDFDataRangeTransport;
exports.PDFWorker = PDFWorker; exports.PDFWorker = PDFWorker;
exports.PDFDocumentProxy = PDFDocumentProxy; exports.PDFDocumentProxy = PDFDocumentProxy;
exports.PDFPageProxy = PDFPageProxy; exports.PDFPageProxy = PDFPageProxy;
exports.setPDFNetworkStreamClass = setPDFNetworkStreamClass;
exports._UnsupportedManager = _UnsupportedManager; exports._UnsupportedManager = _UnsupportedManager;
exports.version = version; exports.version = version;
exports.build = build; exports.build = build;

4
lib/display/global.js

@ -39,8 +39,8 @@ if (!_util.globalScope.PDFJS) {
} }
var PDFJS = _util.globalScope.PDFJS; var PDFJS = _util.globalScope.PDFJS;
{ {
PDFJS.version = '1.8.579'; PDFJS.version = '1.8.581';
PDFJS.build = '37ac8f86'; PDFJS.build = '343b4dc2';
} }
PDFJS.pdfBug = false; PDFJS.pdfBug = false;
if (PDFJS.verbosity !== undefined) { if (PDFJS.verbosity !== undefined) {

4
lib/core/network.js → lib/display/network.js

@ -21,7 +21,7 @@ exports.NetworkManager = exports.PDFNetworkStream = undefined;
var _util = require('../shared/util'); var _util = require('../shared/util');
var _worker = require('./worker'); var _api = require('./api');
; ;
var OK_RESPONSE = 200; var OK_RESPONSE = 200;
@ -502,6 +502,6 @@ PDFNetworkStreamRangeRequestReader.prototype = {
this._close(); this._close();
} }
}; };
(0, _worker.setPDFNetworkStreamClass)(PDFNetworkStream); (0, _api.setPDFNetworkStreamClass)(PDFNetworkStream);
exports.PDFNetworkStream = PDFNetworkStream; exports.PDFNetworkStream = PDFNetworkStream;
exports.NetworkManager = NetworkManager; exports.NetworkManager = NetworkManager;

246
lib/display/transport_stream.js

@ -0,0 +1,246 @@
/* Copyright 2017 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PDFDataTransportStream = undefined;
var _util = require('../shared/util');
var PDFDataTransportStream = function PDFDataTransportStreamClosure() {
function PDFDataTransportStream(params, pdfDataRangeTransport) {
var _this = this;
(0, _util.assert)(pdfDataRangeTransport);
this._queuedChunks = [];
var initialData = params.initialData;
if (initialData && initialData.length > 0) {
var buffer = new Uint8Array(initialData).buffer;
this._queuedChunks.push(buffer);
}
this._pdfDataRangeTransport = pdfDataRangeTransport;
this._isRangeSupported = !params.disableRange;
this._isStreamingSupported = !params.disableStream;
this._contentLength = params.length;
this._fullRequestReader = null;
this._rangeReaders = [];
this._pdfDataRangeTransport.addRangeListener(function (begin, chunk) {
_this._onReceiveData({
begin: begin,
chunk: chunk
});
});
this._pdfDataRangeTransport.addProgressListener(function (loaded) {
_this._onProgress({ loaded: loaded });
});
this._pdfDataRangeTransport.addProgressiveReadListener(function (chunk) {
_this._onReceiveData({ chunk: chunk });
});
this._pdfDataRangeTransport.transportReady();
}
PDFDataTransportStream.prototype = {
_onReceiveData: function PDFDataTransportStream_onReceiveData(args) {
var buffer = new Uint8Array(args.chunk).buffer;
if (args.begin === undefined) {
if (this._fullRequestReader) {
this._fullRequestReader._enqueue(buffer);
} else {
this._queuedChunks.push(buffer);
}
} else {
var found = this._rangeReaders.some(function (rangeReader) {
if (rangeReader._begin !== args.begin) {
return false;
}
rangeReader._enqueue(buffer);
return true;
});
(0, _util.assert)(found);
}
},
_onProgress: function PDFDataTransportStream_onDataProgress(evt) {
if (this._rangeReaders.length > 0) {
var firstReader = this._rangeReaders[0];
if (firstReader.onProgress) {
firstReader.onProgress({ loaded: evt.loaded });
}
}
},
_removeRangeReader: function PDFDataTransportStream_removeRangeReader(reader) {
var i = this._rangeReaders.indexOf(reader);
if (i >= 0) {
this._rangeReaders.splice(i, 1);
}
},
getFullReader: function PDFDataTransportStream_getFullReader() {
(0, _util.assert)(!this._fullRequestReader);
var queuedChunks = this._queuedChunks;
this._queuedChunks = null;
return new PDFDataTransportStreamReader(this, queuedChunks);
},
getRangeReader: function PDFDataTransportStream_getRangeReader(begin, end) {
var reader = new PDFDataTransportStreamRangeReader(this, begin, end);
this._pdfDataRangeTransport.requestDataRange(begin, end);
this._rangeReaders.push(reader);
return reader;
},
cancelAllRequests: function PDFDataTransportStream_cancelAllRequests(reason) {
if (this._fullRequestReader) {
this._fullRequestReader.cancel(reason);
}
var readers = this._rangeReaders.slice(0);
readers.forEach(function (rangeReader) {
rangeReader.cancel(reason);
});
this._pdfDataRangeTransport.abort();
}
};
function PDFDataTransportStreamReader(stream, queuedChunks) {
this._stream = stream;
this._done = false;
this._queuedChunks = queuedChunks || [];
this._requests = [];
this._headersReady = Promise.resolve();
stream._fullRequestReader = this;
this.onProgress = null;
}
PDFDataTransportStreamReader.prototype = {
_enqueue: function PDFDataTransportStreamReader_enqueue(chunk) {
if (this._done) {
return;
}
if (this._requests.length > 0) {
var requestCapability = this._requests.shift();
requestCapability.resolve({
value: chunk,
done: false
});
return;
}
this._queuedChunks.push(chunk);
},
get headersReady() {
return this._headersReady;
},
get isRangeSupported() {
return this._stream._isRangeSupported;
},
get isStreamingSupported() {
return this._stream._isStreamingSupported;
},
get contentLength() {
return this._stream._contentLength;
},
read: function PDFDataTransportStreamReader_read() {
if (this._queuedChunks.length > 0) {
var chunk = this._queuedChunks.shift();
return Promise.resolve({
value: chunk,
done: false
});
}
if (this._done) {
return Promise.resolve({
value: undefined,
done: true
});
}
var requestCapability = (0, _util.createPromiseCapability)();
this._requests.push(requestCapability);
return requestCapability.promise;
},
cancel: function PDFDataTransportStreamReader_cancel(reason) {
this._done = true;
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({
value: undefined,
done: true
});
});
this._requests = [];
}
};
function PDFDataTransportStreamRangeReader(stream, begin, end) {
this._stream = stream;
this._begin = begin;
this._end = end;
this._queuedChunk = null;
this._requests = [];
this._done = false;
this.onProgress = null;
}
PDFDataTransportStreamRangeReader.prototype = {
_enqueue: function PDFDataTransportStreamRangeReader_enqueue(chunk) {
if (this._done) {
return;
}
if (this._requests.length === 0) {
this._queuedChunk = chunk;
} else {
var requestsCapability = this._requests.shift();
requestsCapability.resolve({
value: chunk,
done: false
});
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({
value: undefined,
done: true
});
});
this._requests = [];
}
this._done = true;
this._stream._removeRangeReader(this);
},
get isStreamingSupported() {
return false;
},
read: function PDFDataTransportStreamRangeReader_read() {
if (this._queuedChunk) {
var chunk = this._queuedChunk;
this._queuedChunk = null;
return Promise.resolve({
value: chunk,
done: false
});
}
if (this._done) {
return Promise.resolve({
value: undefined,
done: true
});
}
var requestCapability = (0, _util.createPromiseCapability)();
this._requests.push(requestCapability);
return requestCapability.promise;
},
cancel: function PDFDataTransportStreamRangeReader_cancel(reason) {
this._done = true;
this._requests.forEach(function (requestCapability) {
requestCapability.resolve({
value: undefined,
done: true
});
});
this._requests = [];
this._stream._removeRangeReader(this);
}
};
return PDFDataTransportStream;
}();
exports.PDFDataTransportStream = PDFDataTransportStream;

7
lib/pdf.js

@ -14,8 +14,8 @@
*/ */
'use strict'; 'use strict';
var pdfjsVersion = '1.8.579'; var pdfjsVersion = '1.8.581';
var pdfjsBuild = '37ac8f86'; var pdfjsBuild = '343b4dc2';
var pdfjsSharedUtil = require('./shared/util.js'); var pdfjsSharedUtil = require('./shared/util.js');
var pdfjsDisplayGlobal = require('./display/global.js'); var pdfjsDisplayGlobal = require('./display/global.js');
var pdfjsDisplayAPI = require('./display/api.js'); var pdfjsDisplayAPI = require('./display/api.js');
@ -23,6 +23,9 @@ var pdfjsDisplayTextLayer = require('./display/text_layer.js');
var pdfjsDisplayAnnotationLayer = require('./display/annotation_layer.js'); var pdfjsDisplayAnnotationLayer = require('./display/annotation_layer.js');
var pdfjsDisplayDOMUtils = require('./display/dom_utils.js'); var pdfjsDisplayDOMUtils = require('./display/dom_utils.js');
var pdfjsDisplaySVG = require('./display/svg.js'); var pdfjsDisplaySVG = require('./display/svg.js');
{
require('./display/network.js');
}
exports.PDFJS = pdfjsDisplayGlobal.PDFJS; exports.PDFJS = pdfjsDisplayGlobal.PDFJS;
exports.build = pdfjsDisplayAPI.build; exports.build = pdfjsDisplayAPI.build;
exports.version = pdfjsDisplayAPI.version; exports.version = pdfjsDisplayAPI.version;

7
lib/pdf.worker.js vendored

@ -14,10 +14,7 @@
*/ */
'use strict'; 'use strict';
var pdfjsVersion = '1.8.579'; var pdfjsVersion = '1.8.581';
var pdfjsBuild = '37ac8f86'; var pdfjsBuild = '343b4dc2';
var pdfjsCoreWorker = require('./core/worker.js'); var pdfjsCoreWorker = require('./core/worker.js');
{
require('./core/network.js');
}
exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler; exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;

41
lib/shared/util.js

@ -922,6 +922,19 @@ function resolveCall(fn, args) {
resolve(fn.apply(thisArg, args)); resolve(fn.apply(thisArg, args));
}); });
} }
function wrapReason(reason) {
if ((typeof reason === 'undefined' ? 'undefined' : _typeof(reason)) !== 'object') {
return reason;
}
switch (reason.name) {
case 'MissingPDFException':
return new MissingPDFException(reason.message);
case 'UnexpectedResponseException':
return new UnexpectedResponseException(reason.message, reason.status);
default:
return new UnknownErrorException(reason.message, reason.details);
}
}
function resolveOrReject(capability, success, reason) { function resolveOrReject(capability, success, reason) {
if (success) { if (success) {
capability.resolve(); capability.resolve();
@ -1102,10 +1115,11 @@ MessageHandler.prototype = {
var sendStreamRequest = function sendStreamRequest(_ref) { var sendStreamRequest = function sendStreamRequest(_ref) {
var stream = _ref.stream, var stream = _ref.stream,
chunk = _ref.chunk, chunk = _ref.chunk,
transfers = _ref.transfers,
success = _ref.success, success = _ref.success,
reason = _ref.reason; reason = _ref.reason;
_this3.comObj.postMessage({ _this3.postMessage({
sourceName: sourceName, sourceName: sourceName,
targetName: targetName, targetName: targetName,
stream: stream, stream: stream,
@ -1113,11 +1127,12 @@ MessageHandler.prototype = {
chunk: chunk, chunk: chunk,
success: success, success: success,
reason: reason reason: reason
}); }, transfers);
}; };
var streamSink = { var streamSink = {
enqueue: function enqueue(chunk) { enqueue: function enqueue(chunk) {
var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var transfers = arguments[2];
if (this.isCancelled) { if (this.isCancelled) {
return; return;
@ -1130,7 +1145,8 @@ MessageHandler.prototype = {
} }
sendStreamRequest({ sendStreamRequest({
stream: 'enqueue', stream: 'enqueue',
chunk: chunk chunk: chunk,
transfers: transfers
}); });
}, },
close: function close() { close: function close() {
@ -1141,6 +1157,10 @@ MessageHandler.prototype = {
delete self.streamSinks[streamId]; delete self.streamSinks[streamId];
}, },
error: function error(reason) { error: function error(reason) {
if (this.isCancelled) {
return;
}
this.isCancelled = true;
sendStreamRequest({ sendStreamRequest({
stream: 'error', stream: 'error',
reason: reason reason: reason
@ -1199,10 +1219,10 @@ MessageHandler.prototype = {
}; };
switch (data.stream) { switch (data.stream) {
case 'start_complete': case 'start_complete':
resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, data.reason); resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, wrapReason(data.reason));
break; break;
case 'pull_complete': case 'pull_complete':
resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, data.reason); resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, wrapReason(data.reason));
break; break;
case 'pull': case 'pull':
if (!this.streamSinks[data.streamId]) { if (!this.streamSinks[data.streamId]) {
@ -1230,11 +1250,13 @@ MessageHandler.prototype = {
}); });
break; break;
case 'enqueue': case 'enqueue':
assert(this.streamControllers[data.streamId], 'enqueue should have stream controller');
if (!this.streamControllers[data.streamId].isClosed) { if (!this.streamControllers[data.streamId].isClosed) {
this.streamControllers[data.streamId].controller.enqueue(data.chunk); this.streamControllers[data.streamId].controller.enqueue(data.chunk);
} }
break; break;
case 'close': case 'close':
assert(this.streamControllers[data.streamId], 'close should have stream controller');
if (this.streamControllers[data.streamId].isClosed) { if (this.streamControllers[data.streamId].isClosed) {
break; break;
} }
@ -1243,18 +1265,19 @@ MessageHandler.prototype = {
deleteStreamController(); deleteStreamController();
break; break;
case 'error': case 'error':
this.streamControllers[data.streamId].controller.error(data.reason); assert(this.streamControllers[data.streamId], 'error should have stream controller');
this.streamControllers[data.streamId].controller.error(wrapReason(data.reason));
deleteStreamController(); deleteStreamController();
break; break;
case 'cancel_complete': case 'cancel_complete':
resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, data.reason); resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, wrapReason(data.reason));
deleteStreamController(); deleteStreamController();
break; break;
case 'cancel': case 'cancel':
if (!this.streamSinks[data.streamId]) { if (!this.streamSinks[data.streamId]) {
break; break;
} }
resolveCall(this.streamSinks[data.streamId].onCancel, [data.reason]).then(function () { resolveCall(this.streamSinks[data.streamId].onCancel, [wrapReason(data.reason)]).then(function () {
sendStreamResponse({ sendStreamResponse({
stream: 'cancel_complete', stream: 'cancel_complete',
success: true success: true
@ -1266,7 +1289,7 @@ MessageHandler.prototype = {
reason: reason reason: reason
}); });
}); });
this.streamSinks[data.streamId].sinkCapability.reject(data.reason); this.streamSinks[data.streamId].sinkCapability.reject(wrapReason(data.reason));
this.streamSinks[data.streamId].isCancelled = true; this.streamSinks[data.streamId].isCancelled = true;
delete this.streamSinks[data.streamId]; delete this.streamSinks[data.streamId];
break; break;

2
lib/test/unit/network_spec.js

@ -14,7 +14,7 @@
*/ */
'use strict'; 'use strict';
var _network = require('../../core/network'); var _network = require('../../display/network');
describe('network', function () { describe('network', function () {
var pdf1 = new URL('../pdfs/tracemonkey.pdf', window.location).href; var pdf1 = new URL('../pdfs/tracemonkey.pdf', window.location).href;

2
package.json

@ -1,6 +1,6 @@
{ {
"name": "pdfjs-dist", "name": "pdfjs-dist",
"version": "1.8.579", "version": "1.8.581",
"main": "build/pdf.js", "main": "build/pdf.js",
"description": "Generic build of Mozilla's PDF.js library.", "description": "Generic build of Mozilla's PDF.js library.",
"keywords": [ "keywords": [

Loading…
Cancel
Save