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. 17495
      build/pdf.combined.js
  3. 2
      build/pdf.combined.js.map
  4. 4783
      build/pdf.js
  5. 2
      build/pdf.js.map
  6. 16
      build/pdf.min.js
  7. 1854
      build/pdf.worker.js
  8. 2
      build/pdf.worker.js.map
  9. 40
      build/pdf.worker.min.js
  10. 273
      lib/core/worker.js
  11. 170
      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 @@ @@ -1,6 +1,6 @@
{
"name": "pdfjs-dist",
"version": "1.8.579",
"version": "1.8.581",
"main": [
"build/pdf.js",
"build/pdf.worker.js"

17495
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

4783
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

1854
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

273
lib/core/worker.js

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

170
lib/display/api.js

@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
Object.defineProperty(exports, "__esModule", {
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; }; }();
@ -33,6 +33,8 @@ var _canvas = require('./canvas'); @@ -33,6 +33,8 @@ var _canvas = require('./canvas');
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"); } }
var DEFAULT_RANGE_CHUNK_SIZE = 65536;
@ -68,6 +70,10 @@ var useRequireEnsure = false; @@ -68,6 +70,10 @@ var useRequireEnsure = false;
});
} : null;
}
var PDFNetworkStream;
function setPDFNetworkStreamClass(cls) {
PDFNetworkStream = cls;
}
function getDocument(src, pdfDataRangeTransport, passwordCallback, progressCallback) {
var task = new PDFDocumentLoadingTask();
if (arguments.length > 1) {
@ -159,8 +165,18 @@ function getDocument(src, pdfDataRangeTransport, passwordCallback, progressCallb @@ -159,8 +165,18 @@ function getDocument(src, pdfDataRangeTransport, passwordCallback, progressCallb
if (task.destroyed) {
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 transport = new WorkerTransport(messageHandler, task, rangeTransport, CMapReaderFactory);
messageHandler.postMessageTransfers = worker.postMessageTransfers;
var transport = new WorkerTransport(messageHandler, task, networkStream, CMapReaderFactory);
task._transport = transport;
messageHandler.send('Ready', null);
});
@ -181,7 +197,6 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { @@ -181,7 +197,6 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
return worker.messageHandler.sendWithPromise('GetDocRequest', {
docId: docId,
source: source,
disableRange: (0, _dom_utils.getDefaultSetting)('disableRange'),
maxImageSize: (0, _dom_utils.getDefaultSetting)('maxImageSize'),
disableFontFace: (0, _dom_utils.getDefaultSetting)('disableFontFace'),
disableCreateObjectURL: (0, _dom_utils.getDefaultSetting)('disableCreateObjectURL'),
@ -730,6 +745,7 @@ var PDFWorker = function PDFWorkerClosure() { @@ -730,6 +745,7 @@ var PDFWorker = function PDFWorkerClosure() {
}
this.name = name;
this.destroyed = false;
this.postMessageTransfers = true;
this._readyCapability = (0, _util.createPromiseCapability)();
this._port = null;
this._webWorker = null;
@ -796,6 +812,7 @@ var PDFWorker = function PDFWorkerClosure() { @@ -796,6 +812,7 @@ var PDFWorker = function PDFWorkerClosure() {
_this6._port = worker;
_this6._webWorker = worker;
if (!data.supportTransfers) {
_this6.postMessageTransfers = false;
isPostMessageTransfersDisabled = true;
}
_this6._readyCapability.resolve();
@ -888,10 +905,9 @@ var PDFWorker = function PDFWorkerClosure() { @@ -888,10 +905,9 @@ var PDFWorker = function PDFWorkerClosure() {
return PDFWorker;
}();
var WorkerTransport = function WorkerTransportClosure() {
function WorkerTransport(messageHandler, loadingTask, pdfDataRangeTransport, CMapReaderFactory) {
function WorkerTransport(messageHandler, loadingTask, networkStream, CMapReaderFactory) {
this.messageHandler = messageHandler;
this.loadingTask = loadingTask;
this.pdfDataRangeTransport = pdfDataRangeTransport;
this.commonObjs = new PDFObjects();
this.fontLoader = new _font_loader.FontLoader(loadingTask.docId);
this.CMapReaderFactory = new CMapReaderFactory({
@ -901,6 +917,9 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -901,6 +917,9 @@ var WorkerTransport = function WorkerTransportClosure() {
this.destroyed = false;
this.destroyCapability = null;
this._passwordCapability = null;
this._networkStream = networkStream;
this._fullReader = null;
this._lastProgress = null;
this.pageCache = [];
this.pagePromises = [];
this.downloadInfoCapability = (0, _util.createPromiseCapability)();
@ -930,9 +949,8 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -930,9 +949,8 @@ var WorkerTransport = function WorkerTransportClosure() {
waitOn.push(terminated);
Promise.all(waitOn).then(function () {
_this8.fontLoader.clear();
if (_this8.pdfDataRangeTransport) {
_this8.pdfDataRangeTransport.abort();
_this8.pdfDataRangeTransport = null;
if (_this8._networkStream) {
_this8._networkStream.cancelAllRequests();
}
if (_this8.messageHandler) {
_this8.messageHandler.destroy();
@ -945,24 +963,89 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -945,24 +963,89 @@ var WorkerTransport = function WorkerTransportClosure() {
setupMessageHandler: function WorkerTransport_setupMessageHandler() {
var messageHandler = this.messageHandler;
var loadingTask = this.loadingTask;
var pdfDataRangeTransport = this.pdfDataRangeTransport;
if (pdfDataRangeTransport) {
pdfDataRangeTransport.addRangeListener(function (begin, chunk) {
messageHandler.send('OnDataRange', {
begin: begin,
chunk: chunk
messageHandler.on('GetReader', function (data, sink) {
var _this9 = this;
(0, _util.assert)(this._networkStream);
this._fullReader = this._networkStream.getFullReader();
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 });
});
pdfDataRangeTransport.addProgressiveReadListener(function (chunk) {
messageHandler.send('OnDataRange', { chunk: chunk });
});
messageHandler.on('RequestDataRange', function transportDataRange(data) {
pdfDataRangeTransport.requestDataRange(data.begin, data.end);
}, this);
}
};
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
});
}
};
}
headersCapability.resolve({
isStreamingSupported: fullReader.isStreamingSupported,
isRangeSupported: fullReader.isRangeSupported,
contentLength: fullReader.contentLength
});
}, headersCapability.reject);
return headersCapability.promise;
}, 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) {
var pdfInfo = data.pdfInfo;
this.numPages = data.pdfInfo.numPages;
@ -972,12 +1055,12 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -972,12 +1055,12 @@ var WorkerTransport = function WorkerTransportClosure() {
loadingTask._capability.resolve(pdfDocument);
}, this);
messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) {
var _this9 = this;
var _this11 = this;
this._passwordCapability = (0, _util.createPromiseCapability)();
if (loadingTask.onPassword) {
var updatePassword = function updatePassword(password) {
_this9._passwordCapability.resolve({ password: password });
_this11._passwordCapability.resolve({ password: password });
};
loadingTask.onPassword(updatePassword, exception.code);
} else {
@ -1003,11 +1086,7 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -1003,11 +1086,7 @@ var WorkerTransport = function WorkerTransportClosure() {
messageHandler.on('DataLoaded', function transportPage(data) {
this.downloadInfoCapability.resolve(data);
}, this);
messageHandler.on('PDFManagerReady', function transportPage(data) {
if (this.pdfDataRangeTransport) {
this.pdfDataRangeTransport.transportReady();
}
}, this);
messageHandler.on('PDFManagerReady', function transportPage(data) {}, this);
messageHandler.on('StartRenderPage', function transportRender(data) {
if (this.destroyed) {
return;
@ -1024,7 +1103,7 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -1024,7 +1103,7 @@ var WorkerTransport = function WorkerTransportClosure() {
page._renderPageChunk(data.operatorList, data.intent);
}, this);
messageHandler.on('commonobj', function transportObj(data) {
var _this10 = this;
var _this12 = this;
if (this.destroyed) {
return;
@ -1057,7 +1136,7 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -1057,7 +1136,7 @@ var WorkerTransport = function WorkerTransportClosure() {
fontRegistry: fontRegistry
});
var fontReady = function fontReady(fontObjs) {
_this10.commonObjs.resolve(id, font);
_this12.commonObjs.resolve(id, font);
};
this.fontLoader.bind([font], fontReady);
break;
@ -1199,7 +1278,7 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -1199,7 +1278,7 @@ var WorkerTransport = function WorkerTransportClosure() {
return this.messageHandler.sendWithPromise('GetData', null);
},
getPage: function WorkerTransport_getPage(pageNumber, capability) {
var _this11 = this;
var _this13 = this;
if (!(0, _util.isInt)(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) {
return Promise.reject(new Error('Invalid page request'));
@ -1209,11 +1288,11 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -1209,11 +1288,11 @@ var WorkerTransport = function WorkerTransportClosure() {
return this.pagePromises[pageIndex];
}
var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex: pageIndex }).then(function (pageInfo) {
if (_this11.destroyed) {
if (_this13.destroyed) {
throw new Error('Transport destroyed');
}
var page = new PDFPageProxy(pageIndex, pageInfo, _this11);
_this11.pageCache[pageIndex] = page;
var page = new PDFPageProxy(pageIndex, pageInfo, _this13);
_this13.pageCache[pageIndex] = page;
return page;
});
this.pagePromises[pageIndex] = promise;
@ -1264,17 +1343,17 @@ var WorkerTransport = function WorkerTransportClosure() { @@ -1264,17 +1343,17 @@ var WorkerTransport = function WorkerTransportClosure() {
return this.messageHandler.sendWithPromise('GetStats', null);
},
startCleanup: function WorkerTransport_startCleanup() {
var _this12 = this;
var _this14 = this;
this.messageHandler.sendWithPromise('Cleanup', null).then(function () {
for (var i = 0, ii = _this12.pageCache.length; i < ii; i++) {
var page = _this12.pageCache[i];
for (var i = 0, ii = _this14.pageCache.length; i < ii; i++) {
var page = _this14.pageCache[i];
if (page) {
page.cleanup();
}
}
_this12.commonObjs.clear();
_this12.fontLoader.clear();
_this14.commonObjs.clear();
_this14.fontLoader.clear();
});
}
};
@ -1488,8 +1567,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() { @@ -1488,8 +1567,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}();
var version, build;
{
exports.version = version = '1.8.579';
exports.build = build = '37ac8f86';
exports.version = version = '1.8.581';
exports.build = build = '343b4dc2';
}
exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort;
@ -1497,6 +1576,7 @@ exports.PDFDataRangeTransport = PDFDataRangeTransport; @@ -1497,6 +1576,7 @@ exports.PDFDataRangeTransport = PDFDataRangeTransport;
exports.PDFWorker = PDFWorker;
exports.PDFDocumentProxy = PDFDocumentProxy;
exports.PDFPageProxy = PDFPageProxy;
exports.setPDFNetworkStreamClass = setPDFNetworkStreamClass;
exports._UnsupportedManager = _UnsupportedManager;
exports.version = version;
exports.build = build;

4
lib/display/global.js

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

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

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

246
lib/display/transport_stream.js

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

7
lib/pdf.worker.js vendored

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

41
lib/shared/util.js

@ -922,6 +922,19 @@ function resolveCall(fn, args) { @@ -922,6 +922,19 @@ function resolveCall(fn, 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) {
if (success) {
capability.resolve();
@ -1102,10 +1115,11 @@ MessageHandler.prototype = { @@ -1102,10 +1115,11 @@ MessageHandler.prototype = {
var sendStreamRequest = function sendStreamRequest(_ref) {
var stream = _ref.stream,
chunk = _ref.chunk,
transfers = _ref.transfers,
success = _ref.success,
reason = _ref.reason;
_this3.comObj.postMessage({
_this3.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
@ -1113,11 +1127,12 @@ MessageHandler.prototype = { @@ -1113,11 +1127,12 @@ MessageHandler.prototype = {
chunk: chunk,
success: success,
reason: reason
});
}, transfers);
};
var streamSink = {
enqueue: function enqueue(chunk) {
var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var transfers = arguments[2];
if (this.isCancelled) {
return;
@ -1130,7 +1145,8 @@ MessageHandler.prototype = { @@ -1130,7 +1145,8 @@ MessageHandler.prototype = {
}
sendStreamRequest({
stream: 'enqueue',
chunk: chunk
chunk: chunk,
transfers: transfers
});
},
close: function close() {
@ -1141,6 +1157,10 @@ MessageHandler.prototype = { @@ -1141,6 +1157,10 @@ MessageHandler.prototype = {
delete self.streamSinks[streamId];
},
error: function error(reason) {
if (this.isCancelled) {
return;
}
this.isCancelled = true;
sendStreamRequest({
stream: 'error',
reason: reason
@ -1199,10 +1219,10 @@ MessageHandler.prototype = { @@ -1199,10 +1219,10 @@ MessageHandler.prototype = {
};
switch (data.stream) {
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;
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;
case 'pull':
if (!this.streamSinks[data.streamId]) {
@ -1230,11 +1250,13 @@ MessageHandler.prototype = { @@ -1230,11 +1250,13 @@ MessageHandler.prototype = {
});
break;
case 'enqueue':
assert(this.streamControllers[data.streamId], 'enqueue should have stream controller');
if (!this.streamControllers[data.streamId].isClosed) {
this.streamControllers[data.streamId].controller.enqueue(data.chunk);
}
break;
case 'close':
assert(this.streamControllers[data.streamId], 'close should have stream controller');
if (this.streamControllers[data.streamId].isClosed) {
break;
}
@ -1243,18 +1265,19 @@ MessageHandler.prototype = { @@ -1243,18 +1265,19 @@ MessageHandler.prototype = {
deleteStreamController();
break;
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();
break;
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();
break;
case 'cancel':
if (!this.streamSinks[data.streamId]) {
break;
}
resolveCall(this.streamSinks[data.streamId].onCancel, [data.reason]).then(function () {
resolveCall(this.streamSinks[data.streamId].onCancel, [wrapReason(data.reason)]).then(function () {
sendStreamResponse({
stream: 'cancel_complete',
success: true
@ -1266,7 +1289,7 @@ MessageHandler.prototype = { @@ -1266,7 +1289,7 @@ MessageHandler.prototype = {
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;
delete this.streamSinks[data.streamId];
break;

2
lib/test/unit/network_spec.js

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

2
package.json

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

Loading…
Cancel
Save