Browse Source

PDF.js version 1.8.432 - See mozilla/pdf.js@93420545024b1879b8d92cd9d3741c1727bc090d

master v1.8.432
pdfjsbot 8 years ago
parent
commit
b03be480a7
  1. 2
      bower.json
  2. 275
      build/pdf.combined.js
  3. 2
      build/pdf.combined.js.map
  4. 275
      build/pdf.js
  5. 2
      build/pdf.js.map
  6. 15
      build/pdf.min.js
  7. 267
      build/pdf.worker.js
  8. 2
      build/pdf.worker.js.map
  9. 44
      build/pdf.worker.min.js
  10. 3
      external/streams/streams-lib.js
  11. 4
      lib/display/api.js
  12. 4
      lib/display/global.js
  13. 4
      lib/pdf.js
  14. 4
      lib/pdf.worker.js
  15. 261
      lib/shared/util.js
  16. 2
      lib/test/unit/jasmine-boot.js
  17. 372
      lib/test/unit/util_stream_spec.js
  18. 2
      package.json

2
bower.json

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

275
build/pdf.combined.js

@ -1001,14 +1001,37 @@ var createObjectURL = function createObjectURLClosure() {
return buffer; return buffer;
}; };
}(); }();
function resolveCall(fn, args) {
var thisArg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (!fn) {
return Promise.resolve(undefined);
}
return new Promise(function (resolve, reject) {
resolve(fn.apply(thisArg, args));
});
}
function resolveOrReject(capability, success, reason) {
if (success) {
capability.resolve();
} else {
capability.reject(reason);
}
}
function finalize(promise) {
return Promise.resolve(promise).catch(function () {});
}
function MessageHandler(sourceName, targetName, comObj) { function MessageHandler(sourceName, targetName, comObj) {
var _this = this; var _this = this;
this.sourceName = sourceName; this.sourceName = sourceName;
this.targetName = targetName; this.targetName = targetName;
this.comObj = comObj; this.comObj = comObj;
this.callbackIndex = 1; this.callbackId = 1;
this.streamId = 1;
this.postMessageTransfers = true; this.postMessageTransfers = true;
this.streamSinks = Object.create(null);
this.streamControllers = Object.create(null);
var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); var callbacksCapabilities = this.callbacksCapabilities = Object.create(null);
var ah = this.actionHandler = Object.create(null); var ah = this.actionHandler = Object.create(null);
this._onComObjOnMessage = function (event) { this._onComObjOnMessage = function (event) {
@ -1016,7 +1039,9 @@ function MessageHandler(sourceName, targetName, comObj) {
if (data.targetName !== _this.sourceName) { if (data.targetName !== _this.sourceName) {
return; return;
} }
if (data.isReply) { if (data.stream) {
_this._processStreamMessage(data);
} else if (data.isReply) {
var callbackId = data.callbackId; var callbackId = data.callbackId;
if (data.callbackId in callbacksCapabilities) { if (data.callbackId in callbacksCapabilities) {
var callback = callbacksCapabilities[callbackId]; var callback = callbacksCapabilities[callbackId];
@ -1032,14 +1057,14 @@ function MessageHandler(sourceName, targetName, comObj) {
} else if (data.action in ah) { } else if (data.action in ah) {
var action = ah[data.action]; var action = ah[data.action];
if (data.callbackId) { if (data.callbackId) {
var sourceName = _this.sourceName; var _sourceName = _this.sourceName;
var targetName = data.sourceName; var _targetName = data.sourceName;
Promise.resolve().then(function () { Promise.resolve().then(function () {
return action[0].call(action[1], data.data); return action[0].call(action[1], data.data);
}).then(function (result) { }).then(function (result) {
comObj.postMessage({ comObj.postMessage({
sourceName: sourceName, sourceName: _sourceName,
targetName: targetName, targetName: _targetName,
isReply: true, isReply: true,
callbackId: data.callbackId, callbackId: data.callbackId,
data: result data: result
@ -1049,13 +1074,15 @@ function MessageHandler(sourceName, targetName, comObj) {
reason = reason + ''; reason = reason + '';
} }
comObj.postMessage({ comObj.postMessage({
sourceName: sourceName, sourceName: _sourceName,
targetName: targetName, targetName: _targetName,
isReply: true, isReply: true,
callbackId: data.callbackId, callbackId: data.callbackId,
error: reason error: reason
}); });
}); });
} else if (data.streamId) {
_this._createStreamSink(data);
} else { } else {
action[0].call(action[1], data.data); action[0].call(action[1], data.data);
} }
@ -1083,7 +1110,7 @@ MessageHandler.prototype = {
this.postMessage(message, transfers); this.postMessage(message, transfers);
}, },
sendWithPromise: function sendWithPromise(actionName, data, transfers) { sendWithPromise: function sendWithPromise(actionName, data, transfers) {
var callbackId = this.callbackIndex++; var callbackId = this.callbackId++;
var message = { var message = {
sourceName: this.sourceName, sourceName: this.sourceName,
targetName: this.targetName, targetName: this.targetName,
@ -1100,6 +1127,222 @@ MessageHandler.prototype = {
} }
return capability.promise; return capability.promise;
}, },
sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) {
var _this2 = this;
var streamId = this.streamId++;
var sourceName = this.sourceName;
var targetName = this.targetName;
return new _streamsLib.ReadableStream({
start: function start(controller) {
var startCapability = createPromiseCapability();
_this2.streamControllers[streamId] = {
controller: controller,
startCall: startCapability
};
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
action: actionName,
streamId: streamId,
data: data,
desiredSize: controller.desiredSize
});
return startCapability.promise;
},
pull: function pull(controller) {
var pullCapability = createPromiseCapability();
_this2.streamControllers[streamId].pullCall = pullCapability;
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: 'pull',
streamId: streamId,
desiredSize: controller.desiredSize
});
return pullCapability.promise;
},
cancel: function cancel(reason) {
var cancelCapability = createPromiseCapability();
_this2.streamControllers[streamId].cancelCall = cancelCapability;
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: 'cancel',
reason: reason,
streamId: streamId
});
return cancelCapability.promise;
}
}, queueingStrategy);
},
_createStreamSink: function _createStreamSink(data) {
var _this3 = this;
var self = this;
var action = this.actionHandler[data.action];
var streamId = data.streamId;
var desiredSize = data.desiredSize;
var sourceName = this.sourceName;
var targetName = data.sourceName;
var capability = createPromiseCapability();
var sendStreamRequest = function sendStreamRequest(_ref) {
var stream = _ref.stream,
chunk = _ref.chunk,
success = _ref.success,
reason = _ref.reason;
_this3.comObj.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
streamId: streamId,
chunk: chunk,
success: success,
reason: reason
});
};
var streamSink = {
enqueue: function enqueue(chunk) {
var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var lastDesiredSize = this.desiredSize;
this.desiredSize -= size;
if (lastDesiredSize > 0 && this.desiredSize <= 0) {
this.sinkCapability = createPromiseCapability();
this.ready = this.sinkCapability.promise;
}
sendStreamRequest({
stream: 'enqueue',
chunk: chunk
});
},
close: function close() {
sendStreamRequest({ stream: 'close' });
delete self.streamSinks[streamId];
},
error: function error(reason) {
sendStreamRequest({
stream: 'error',
reason: reason
});
},
sinkCapability: capability,
onPull: null,
onCancel: null,
desiredSize: desiredSize,
ready: null
};
streamSink.sinkCapability.resolve();
streamSink.ready = streamSink.sinkCapability.promise;
this.streamSinks[streamId] = streamSink;
resolveCall(action[0], [data.data, streamSink], action[1]).then(function () {
sendStreamRequest({
stream: 'start_complete',
success: true
});
}, function (reason) {
sendStreamRequest({
stream: 'start_complete',
success: false,
reason: reason
});
});
},
_processStreamMessage: function _processStreamMessage(data) {
var _this4 = this;
var sourceName = this.sourceName;
var targetName = data.sourceName;
var streamId = data.streamId;
var sendStreamResponse = function sendStreamResponse(_ref2) {
var stream = _ref2.stream,
success = _ref2.success,
reason = _ref2.reason;
_this4.comObj.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
success: success,
streamId: streamId,
reason: reason
});
};
var deleteStreamController = function deleteStreamController() {
Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) {
return capability && finalize(capability.promise);
})).then(function () {
delete _this4.streamControllers[data.streamId];
});
};
switch (data.stream) {
case 'start_complete':
resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, data.reason);
break;
case 'pull_complete':
resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, data.reason);
break;
case 'pull':
if (!this.streamSinks[data.streamId]) {
sendStreamResponse({
stream: 'pull_complete',
success: true
});
break;
}
if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) {
this.streamSinks[data.streamId].sinkCapability.resolve();
}
this.streamSinks[data.streamId].desiredSize = data.desiredSize;
resolveCall(this.streamSinks[data.streamId].onPull).then(function () {
sendStreamResponse({
stream: 'pull_complete',
success: true
});
}, function (reason) {
sendStreamResponse({
stream: 'pull_complete',
success: false,
reason: reason
});
});
break;
case 'enqueue':
this.streamControllers[data.streamId].controller.enqueue(data.chunk);
break;
case 'close':
this.streamControllers[data.streamId].controller.close();
deleteStreamController();
break;
case 'error':
this.streamControllers[data.streamId].controller.error(data.reason);
deleteStreamController();
break;
case 'cancel_complete':
resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, data.reason);
deleteStreamController();
break;
case 'cancel':
resolveCall(this.streamSinks[data.streamId].onCancel, [data.reason]).then(function () {
sendStreamResponse({
stream: 'cancel_complete',
success: true
});
}, function (reason) {
sendStreamResponse({
stream: 'cancel_complete',
success: false,
reason: reason
});
});
delete this.streamSinks[data.streamId];
break;
default:
throw new Error('Unexpected stream case');
}
},
postMessage: function postMessage(message, transfers) { postMessage: function postMessage(message, transfers) {
if (transfers && this.postMessageTransfers) { if (transfers && this.postMessageTransfers) {
this.comObj.postMessage(message, transfers); this.comObj.postMessage(message, transfers);
@ -12809,8 +13052,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}(); }();
var version, build; var version, build;
{ {
exports.version = version = '1.8.430'; exports.version = version = '1.8.432';
exports.build = build = 'e6f5b3e3'; exports.build = build = '93420545';
} }
exports.getDocument = getDocument; exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort; exports.LoopbackPort = LoopbackPort;
@ -28147,8 +28390,8 @@ if (!_util.globalScope.PDFJS) {
} }
var PDFJS = _util.globalScope.PDFJS; var PDFJS = _util.globalScope.PDFJS;
{ {
PDFJS.version = '1.8.430'; PDFJS.version = '1.8.432';
PDFJS.build = 'e6f5b3e3'; PDFJS.build = '93420545';
} }
PDFJS.pdfBug = false; PDFJS.pdfBug = false;
if (PDFJS.verbosity !== undefined) { if (PDFJS.verbosity !== undefined) {
@ -29793,7 +30036,7 @@ var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbo
} }
if (IsReadableStreamDefaultReader(reader) === true) { if (IsReadableStreamDefaultReader(reader) === true) {
for (var i = 0; i < reader._readRequests.length; i++) { for (var i = 0; i < reader._readRequests.length; i++) {
var _resolve = reader._readRequests[i]; var _resolve = reader._readRequests[i]._resolve;
_resolve(CreateIterResultObject(undefined, true)); _resolve(CreateIterResultObject(undefined, true));
} }
reader._readRequests = []; reader._readRequests = [];
@ -46762,8 +47005,8 @@ exports.TilingPattern = TilingPattern;
"use strict"; "use strict";
var pdfjsVersion = '1.8.430'; var pdfjsVersion = '1.8.432';
var pdfjsBuild = 'e6f5b3e3'; var pdfjsBuild = '93420545';
var pdfjsSharedUtil = __w_pdfjs_require__(0); var pdfjsSharedUtil = __w_pdfjs_require__(0);
var pdfjsDisplayGlobal = __w_pdfjs_require__(26); var pdfjsDisplayGlobal = __w_pdfjs_require__(26);
var pdfjsDisplayAPI = __w_pdfjs_require__(10); var pdfjsDisplayAPI = __w_pdfjs_require__(10);

2
build/pdf.combined.js.map

File diff suppressed because one or more lines are too long

275
build/pdf.js

@ -1001,14 +1001,37 @@ var createObjectURL = function createObjectURLClosure() {
return buffer; return buffer;
}; };
}(); }();
function resolveCall(fn, args) {
var thisArg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (!fn) {
return Promise.resolve(undefined);
}
return new Promise(function (resolve, reject) {
resolve(fn.apply(thisArg, args));
});
}
function resolveOrReject(capability, success, reason) {
if (success) {
capability.resolve();
} else {
capability.reject(reason);
}
}
function finalize(promise) {
return Promise.resolve(promise).catch(function () {});
}
function MessageHandler(sourceName, targetName, comObj) { function MessageHandler(sourceName, targetName, comObj) {
var _this = this; var _this = this;
this.sourceName = sourceName; this.sourceName = sourceName;
this.targetName = targetName; this.targetName = targetName;
this.comObj = comObj; this.comObj = comObj;
this.callbackIndex = 1; this.callbackId = 1;
this.streamId = 1;
this.postMessageTransfers = true; this.postMessageTransfers = true;
this.streamSinks = Object.create(null);
this.streamControllers = Object.create(null);
var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); var callbacksCapabilities = this.callbacksCapabilities = Object.create(null);
var ah = this.actionHandler = Object.create(null); var ah = this.actionHandler = Object.create(null);
this._onComObjOnMessage = function (event) { this._onComObjOnMessage = function (event) {
@ -1016,7 +1039,9 @@ function MessageHandler(sourceName, targetName, comObj) {
if (data.targetName !== _this.sourceName) { if (data.targetName !== _this.sourceName) {
return; return;
} }
if (data.isReply) { if (data.stream) {
_this._processStreamMessage(data);
} else if (data.isReply) {
var callbackId = data.callbackId; var callbackId = data.callbackId;
if (data.callbackId in callbacksCapabilities) { if (data.callbackId in callbacksCapabilities) {
var callback = callbacksCapabilities[callbackId]; var callback = callbacksCapabilities[callbackId];
@ -1032,14 +1057,14 @@ function MessageHandler(sourceName, targetName, comObj) {
} else if (data.action in ah) { } else if (data.action in ah) {
var action = ah[data.action]; var action = ah[data.action];
if (data.callbackId) { if (data.callbackId) {
var sourceName = _this.sourceName; var _sourceName = _this.sourceName;
var targetName = data.sourceName; var _targetName = data.sourceName;
Promise.resolve().then(function () { Promise.resolve().then(function () {
return action[0].call(action[1], data.data); return action[0].call(action[1], data.data);
}).then(function (result) { }).then(function (result) {
comObj.postMessage({ comObj.postMessage({
sourceName: sourceName, sourceName: _sourceName,
targetName: targetName, targetName: _targetName,
isReply: true, isReply: true,
callbackId: data.callbackId, callbackId: data.callbackId,
data: result data: result
@ -1049,13 +1074,15 @@ function MessageHandler(sourceName, targetName, comObj) {
reason = reason + ''; reason = reason + '';
} }
comObj.postMessage({ comObj.postMessage({
sourceName: sourceName, sourceName: _sourceName,
targetName: targetName, targetName: _targetName,
isReply: true, isReply: true,
callbackId: data.callbackId, callbackId: data.callbackId,
error: reason error: reason
}); });
}); });
} else if (data.streamId) {
_this._createStreamSink(data);
} else { } else {
action[0].call(action[1], data.data); action[0].call(action[1], data.data);
} }
@ -1083,7 +1110,7 @@ MessageHandler.prototype = {
this.postMessage(message, transfers); this.postMessage(message, transfers);
}, },
sendWithPromise: function sendWithPromise(actionName, data, transfers) { sendWithPromise: function sendWithPromise(actionName, data, transfers) {
var callbackId = this.callbackIndex++; var callbackId = this.callbackId++;
var message = { var message = {
sourceName: this.sourceName, sourceName: this.sourceName,
targetName: this.targetName, targetName: this.targetName,
@ -1100,6 +1127,222 @@ MessageHandler.prototype = {
} }
return capability.promise; return capability.promise;
}, },
sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) {
var _this2 = this;
var streamId = this.streamId++;
var sourceName = this.sourceName;
var targetName = this.targetName;
return new _streamsLib.ReadableStream({
start: function start(controller) {
var startCapability = createPromiseCapability();
_this2.streamControllers[streamId] = {
controller: controller,
startCall: startCapability
};
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
action: actionName,
streamId: streamId,
data: data,
desiredSize: controller.desiredSize
});
return startCapability.promise;
},
pull: function pull(controller) {
var pullCapability = createPromiseCapability();
_this2.streamControllers[streamId].pullCall = pullCapability;
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: 'pull',
streamId: streamId,
desiredSize: controller.desiredSize
});
return pullCapability.promise;
},
cancel: function cancel(reason) {
var cancelCapability = createPromiseCapability();
_this2.streamControllers[streamId].cancelCall = cancelCapability;
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: 'cancel',
reason: reason,
streamId: streamId
});
return cancelCapability.promise;
}
}, queueingStrategy);
},
_createStreamSink: function _createStreamSink(data) {
var _this3 = this;
var self = this;
var action = this.actionHandler[data.action];
var streamId = data.streamId;
var desiredSize = data.desiredSize;
var sourceName = this.sourceName;
var targetName = data.sourceName;
var capability = createPromiseCapability();
var sendStreamRequest = function sendStreamRequest(_ref) {
var stream = _ref.stream,
chunk = _ref.chunk,
success = _ref.success,
reason = _ref.reason;
_this3.comObj.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
streamId: streamId,
chunk: chunk,
success: success,
reason: reason
});
};
var streamSink = {
enqueue: function enqueue(chunk) {
var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var lastDesiredSize = this.desiredSize;
this.desiredSize -= size;
if (lastDesiredSize > 0 && this.desiredSize <= 0) {
this.sinkCapability = createPromiseCapability();
this.ready = this.sinkCapability.promise;
}
sendStreamRequest({
stream: 'enqueue',
chunk: chunk
});
},
close: function close() {
sendStreamRequest({ stream: 'close' });
delete self.streamSinks[streamId];
},
error: function error(reason) {
sendStreamRequest({
stream: 'error',
reason: reason
});
},
sinkCapability: capability,
onPull: null,
onCancel: null,
desiredSize: desiredSize,
ready: null
};
streamSink.sinkCapability.resolve();
streamSink.ready = streamSink.sinkCapability.promise;
this.streamSinks[streamId] = streamSink;
resolveCall(action[0], [data.data, streamSink], action[1]).then(function () {
sendStreamRequest({
stream: 'start_complete',
success: true
});
}, function (reason) {
sendStreamRequest({
stream: 'start_complete',
success: false,
reason: reason
});
});
},
_processStreamMessage: function _processStreamMessage(data) {
var _this4 = this;
var sourceName = this.sourceName;
var targetName = data.sourceName;
var streamId = data.streamId;
var sendStreamResponse = function sendStreamResponse(_ref2) {
var stream = _ref2.stream,
success = _ref2.success,
reason = _ref2.reason;
_this4.comObj.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
success: success,
streamId: streamId,
reason: reason
});
};
var deleteStreamController = function deleteStreamController() {
Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) {
return capability && finalize(capability.promise);
})).then(function () {
delete _this4.streamControllers[data.streamId];
});
};
switch (data.stream) {
case 'start_complete':
resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, data.reason);
break;
case 'pull_complete':
resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, data.reason);
break;
case 'pull':
if (!this.streamSinks[data.streamId]) {
sendStreamResponse({
stream: 'pull_complete',
success: true
});
break;
}
if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) {
this.streamSinks[data.streamId].sinkCapability.resolve();
}
this.streamSinks[data.streamId].desiredSize = data.desiredSize;
resolveCall(this.streamSinks[data.streamId].onPull).then(function () {
sendStreamResponse({
stream: 'pull_complete',
success: true
});
}, function (reason) {
sendStreamResponse({
stream: 'pull_complete',
success: false,
reason: reason
});
});
break;
case 'enqueue':
this.streamControllers[data.streamId].controller.enqueue(data.chunk);
break;
case 'close':
this.streamControllers[data.streamId].controller.close();
deleteStreamController();
break;
case 'error':
this.streamControllers[data.streamId].controller.error(data.reason);
deleteStreamController();
break;
case 'cancel_complete':
resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, data.reason);
deleteStreamController();
break;
case 'cancel':
resolveCall(this.streamSinks[data.streamId].onCancel, [data.reason]).then(function () {
sendStreamResponse({
stream: 'cancel_complete',
success: true
});
}, function (reason) {
sendStreamResponse({
stream: 'cancel_complete',
success: false,
reason: reason
});
});
delete this.streamSinks[data.streamId];
break;
default:
throw new Error('Unexpected stream case');
}
},
postMessage: function postMessage(message, transfers) { postMessage: function postMessage(message, transfers) {
if (transfers && this.postMessageTransfers) { if (transfers && this.postMessageTransfers) {
this.comObj.postMessage(message, transfers); this.comObj.postMessage(message, transfers);
@ -3538,8 +3781,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}(); }();
var version, build; var version, build;
{ {
exports.version = version = '1.8.430'; exports.version = version = '1.8.432';
exports.build = build = 'e6f5b3e3'; exports.build = build = '93420545';
} }
exports.getDocument = getDocument; exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort; exports.LoopbackPort = LoopbackPort;
@ -5512,8 +5755,8 @@ if (!_util.globalScope.PDFJS) {
} }
var PDFJS = _util.globalScope.PDFJS; var PDFJS = _util.globalScope.PDFJS;
{ {
PDFJS.version = '1.8.430'; PDFJS.version = '1.8.432';
PDFJS.build = 'e6f5b3e3'; PDFJS.build = '93420545';
} }
PDFJS.pdfBug = false; PDFJS.pdfBug = false;
if (PDFJS.verbosity !== undefined) { if (PDFJS.verbosity !== undefined) {
@ -7158,7 +7401,7 @@ var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbo
} }
if (IsReadableStreamDefaultReader(reader) === true) { if (IsReadableStreamDefaultReader(reader) === true) {
for (var i = 0; i < reader._readRequests.length; i++) { for (var i = 0; i < reader._readRequests.length; i++) {
var _resolve = reader._readRequests[i]; var _resolve = reader._readRequests[i]._resolve;
_resolve(CreateIterResultObject(undefined, true)); _resolve(CreateIterResultObject(undefined, true));
} }
reader._readRequests = []; reader._readRequests = [];
@ -11052,8 +11295,8 @@ exports.TilingPattern = TilingPattern;
"use strict"; "use strict";
var pdfjsVersion = '1.8.430'; var pdfjsVersion = '1.8.432';
var pdfjsBuild = 'e6f5b3e3'; var pdfjsBuild = '93420545';
var pdfjsSharedUtil = __w_pdfjs_require__(0); var pdfjsSharedUtil = __w_pdfjs_require__(0);
var pdfjsDisplayGlobal = __w_pdfjs_require__(9); var pdfjsDisplayGlobal = __w_pdfjs_require__(9);
var pdfjsDisplayAPI = __w_pdfjs_require__(3); var pdfjsDisplayAPI = __w_pdfjs_require__(3);

2
build/pdf.js.map

File diff suppressed because one or more lines are too long

15
build/pdf.min.js vendored

File diff suppressed because one or more lines are too long

267
build/pdf.worker.js vendored

@ -1001,14 +1001,37 @@ var createObjectURL = function createObjectURLClosure() {
return buffer; return buffer;
}; };
}(); }();
function resolveCall(fn, args) {
var thisArg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (!fn) {
return Promise.resolve(undefined);
}
return new Promise(function (resolve, reject) {
resolve(fn.apply(thisArg, args));
});
}
function resolveOrReject(capability, success, reason) {
if (success) {
capability.resolve();
} else {
capability.reject(reason);
}
}
function finalize(promise) {
return Promise.resolve(promise).catch(function () {});
}
function MessageHandler(sourceName, targetName, comObj) { function MessageHandler(sourceName, targetName, comObj) {
var _this = this; var _this = this;
this.sourceName = sourceName; this.sourceName = sourceName;
this.targetName = targetName; this.targetName = targetName;
this.comObj = comObj; this.comObj = comObj;
this.callbackIndex = 1; this.callbackId = 1;
this.streamId = 1;
this.postMessageTransfers = true; this.postMessageTransfers = true;
this.streamSinks = Object.create(null);
this.streamControllers = Object.create(null);
var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); var callbacksCapabilities = this.callbacksCapabilities = Object.create(null);
var ah = this.actionHandler = Object.create(null); var ah = this.actionHandler = Object.create(null);
this._onComObjOnMessage = function (event) { this._onComObjOnMessage = function (event) {
@ -1016,7 +1039,9 @@ function MessageHandler(sourceName, targetName, comObj) {
if (data.targetName !== _this.sourceName) { if (data.targetName !== _this.sourceName) {
return; return;
} }
if (data.isReply) { if (data.stream) {
_this._processStreamMessage(data);
} else if (data.isReply) {
var callbackId = data.callbackId; var callbackId = data.callbackId;
if (data.callbackId in callbacksCapabilities) { if (data.callbackId in callbacksCapabilities) {
var callback = callbacksCapabilities[callbackId]; var callback = callbacksCapabilities[callbackId];
@ -1032,14 +1057,14 @@ function MessageHandler(sourceName, targetName, comObj) {
} else if (data.action in ah) { } else if (data.action in ah) {
var action = ah[data.action]; var action = ah[data.action];
if (data.callbackId) { if (data.callbackId) {
var sourceName = _this.sourceName; var _sourceName = _this.sourceName;
var targetName = data.sourceName; var _targetName = data.sourceName;
Promise.resolve().then(function () { Promise.resolve().then(function () {
return action[0].call(action[1], data.data); return action[0].call(action[1], data.data);
}).then(function (result) { }).then(function (result) {
comObj.postMessage({ comObj.postMessage({
sourceName: sourceName, sourceName: _sourceName,
targetName: targetName, targetName: _targetName,
isReply: true, isReply: true,
callbackId: data.callbackId, callbackId: data.callbackId,
data: result data: result
@ -1049,13 +1074,15 @@ function MessageHandler(sourceName, targetName, comObj) {
reason = reason + ''; reason = reason + '';
} }
comObj.postMessage({ comObj.postMessage({
sourceName: sourceName, sourceName: _sourceName,
targetName: targetName, targetName: _targetName,
isReply: true, isReply: true,
callbackId: data.callbackId, callbackId: data.callbackId,
error: reason error: reason
}); });
}); });
} else if (data.streamId) {
_this._createStreamSink(data);
} else { } else {
action[0].call(action[1], data.data); action[0].call(action[1], data.data);
} }
@ -1083,7 +1110,7 @@ MessageHandler.prototype = {
this.postMessage(message, transfers); this.postMessage(message, transfers);
}, },
sendWithPromise: function sendWithPromise(actionName, data, transfers) { sendWithPromise: function sendWithPromise(actionName, data, transfers) {
var callbackId = this.callbackIndex++; var callbackId = this.callbackId++;
var message = { var message = {
sourceName: this.sourceName, sourceName: this.sourceName,
targetName: this.targetName, targetName: this.targetName,
@ -1100,6 +1127,222 @@ MessageHandler.prototype = {
} }
return capability.promise; return capability.promise;
}, },
sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) {
var _this2 = this;
var streamId = this.streamId++;
var sourceName = this.sourceName;
var targetName = this.targetName;
return new _streamsLib.ReadableStream({
start: function start(controller) {
var startCapability = createPromiseCapability();
_this2.streamControllers[streamId] = {
controller: controller,
startCall: startCapability
};
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
action: actionName,
streamId: streamId,
data: data,
desiredSize: controller.desiredSize
});
return startCapability.promise;
},
pull: function pull(controller) {
var pullCapability = createPromiseCapability();
_this2.streamControllers[streamId].pullCall = pullCapability;
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: 'pull',
streamId: streamId,
desiredSize: controller.desiredSize
});
return pullCapability.promise;
},
cancel: function cancel(reason) {
var cancelCapability = createPromiseCapability();
_this2.streamControllers[streamId].cancelCall = cancelCapability;
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: 'cancel',
reason: reason,
streamId: streamId
});
return cancelCapability.promise;
}
}, queueingStrategy);
},
_createStreamSink: function _createStreamSink(data) {
var _this3 = this;
var self = this;
var action = this.actionHandler[data.action];
var streamId = data.streamId;
var desiredSize = data.desiredSize;
var sourceName = this.sourceName;
var targetName = data.sourceName;
var capability = createPromiseCapability();
var sendStreamRequest = function sendStreamRequest(_ref) {
var stream = _ref.stream,
chunk = _ref.chunk,
success = _ref.success,
reason = _ref.reason;
_this3.comObj.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
streamId: streamId,
chunk: chunk,
success: success,
reason: reason
});
};
var streamSink = {
enqueue: function enqueue(chunk) {
var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var lastDesiredSize = this.desiredSize;
this.desiredSize -= size;
if (lastDesiredSize > 0 && this.desiredSize <= 0) {
this.sinkCapability = createPromiseCapability();
this.ready = this.sinkCapability.promise;
}
sendStreamRequest({
stream: 'enqueue',
chunk: chunk
});
},
close: function close() {
sendStreamRequest({ stream: 'close' });
delete self.streamSinks[streamId];
},
error: function error(reason) {
sendStreamRequest({
stream: 'error',
reason: reason
});
},
sinkCapability: capability,
onPull: null,
onCancel: null,
desiredSize: desiredSize,
ready: null
};
streamSink.sinkCapability.resolve();
streamSink.ready = streamSink.sinkCapability.promise;
this.streamSinks[streamId] = streamSink;
resolveCall(action[0], [data.data, streamSink], action[1]).then(function () {
sendStreamRequest({
stream: 'start_complete',
success: true
});
}, function (reason) {
sendStreamRequest({
stream: 'start_complete',
success: false,
reason: reason
});
});
},
_processStreamMessage: function _processStreamMessage(data) {
var _this4 = this;
var sourceName = this.sourceName;
var targetName = data.sourceName;
var streamId = data.streamId;
var sendStreamResponse = function sendStreamResponse(_ref2) {
var stream = _ref2.stream,
success = _ref2.success,
reason = _ref2.reason;
_this4.comObj.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
success: success,
streamId: streamId,
reason: reason
});
};
var deleteStreamController = function deleteStreamController() {
Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) {
return capability && finalize(capability.promise);
})).then(function () {
delete _this4.streamControllers[data.streamId];
});
};
switch (data.stream) {
case 'start_complete':
resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, data.reason);
break;
case 'pull_complete':
resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, data.reason);
break;
case 'pull':
if (!this.streamSinks[data.streamId]) {
sendStreamResponse({
stream: 'pull_complete',
success: true
});
break;
}
if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) {
this.streamSinks[data.streamId].sinkCapability.resolve();
}
this.streamSinks[data.streamId].desiredSize = data.desiredSize;
resolveCall(this.streamSinks[data.streamId].onPull).then(function () {
sendStreamResponse({
stream: 'pull_complete',
success: true
});
}, function (reason) {
sendStreamResponse({
stream: 'pull_complete',
success: false,
reason: reason
});
});
break;
case 'enqueue':
this.streamControllers[data.streamId].controller.enqueue(data.chunk);
break;
case 'close':
this.streamControllers[data.streamId].controller.close();
deleteStreamController();
break;
case 'error':
this.streamControllers[data.streamId].controller.error(data.reason);
deleteStreamController();
break;
case 'cancel_complete':
resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, data.reason);
deleteStreamController();
break;
case 'cancel':
resolveCall(this.streamSinks[data.streamId].onCancel, [data.reason]).then(function () {
sendStreamResponse({
stream: 'cancel_complete',
success: true
});
}, function (reason) {
sendStreamResponse({
stream: 'cancel_complete',
success: false,
reason: reason
});
});
delete this.streamSinks[data.streamId];
break;
default:
throw new Error('Unexpected stream case');
}
},
postMessage: function postMessage(message, transfers) { postMessage: function postMessage(message, transfers) {
if (transfers && this.postMessageTransfers) { if (transfers && this.postMessageTransfers) {
this.comObj.postMessage(message, transfers); this.comObj.postMessage(message, transfers);
@ -25994,7 +26237,7 @@ var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbo
} }
if (IsReadableStreamDefaultReader(reader) === true) { if (IsReadableStreamDefaultReader(reader) === true) {
for (var i = 0; i < reader._readRequests.length; i++) { for (var i = 0; i < reader._readRequests.length; i++) {
var _resolve = reader._readRequests[i]; var _resolve = reader._readRequests[i]._resolve;
_resolve(CreateIterResultObject(undefined, true)); _resolve(CreateIterResultObject(undefined, true));
} }
reader._readRequests = []; reader._readRequests = [];
@ -40061,8 +40304,8 @@ exports.Type1Parser = Type1Parser;
"use strict"; "use strict";
var pdfjsVersion = '1.8.430'; var pdfjsVersion = '1.8.432';
var pdfjsBuild = 'e6f5b3e3'; var pdfjsBuild = '93420545';
var pdfjsCoreWorker = __w_pdfjs_require__(8); var pdfjsCoreWorker = __w_pdfjs_require__(8);
{ {
__w_pdfjs_require__(19); __w_pdfjs_require__(19);

2
build/pdf.worker.js.map vendored

File diff suppressed because one or more lines are too long

44
build/pdf.worker.min.js vendored

File diff suppressed because one or more lines are too long

3
external/streams/streams-lib.js vendored

@ -1960,7 +1960,8 @@ function ReadableStreamClose(stream) {
if (IsReadableStreamDefaultReader(reader) === true) { if (IsReadableStreamDefaultReader(reader) === true) {
for (var i = 0; i < reader._readRequests.length; i++) { for (var i = 0; i < reader._readRequests.length; i++) {
var _resolve = reader._readRequests[i]; var _resolve = reader._readRequests[i]._resolve;
_resolve(CreateIterResultObject(undefined, true)); _resolve(CreateIterResultObject(undefined, true));
} }
reader._readRequests = []; reader._readRequests = [];

4
lib/display/api.js

@ -1418,8 +1418,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}(); }();
var version, build; var version, build;
{ {
exports.version = version = '1.8.430'; exports.version = version = '1.8.432';
exports.build = build = 'e6f5b3e3'; exports.build = build = '93420545';
} }
exports.getDocument = getDocument; exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort; exports.LoopbackPort = LoopbackPort;

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.430'; PDFJS.version = '1.8.432';
PDFJS.build = 'e6f5b3e3'; PDFJS.build = '93420545';
} }
PDFJS.pdfBug = false; PDFJS.pdfBug = false;
if (PDFJS.verbosity !== undefined) { if (PDFJS.verbosity !== undefined) {

4
lib/pdf.js

@ -14,8 +14,8 @@
*/ */
'use strict'; 'use strict';
var pdfjsVersion = '1.8.430'; var pdfjsVersion = '1.8.432';
var pdfjsBuild = 'e6f5b3e3'; var pdfjsBuild = '93420545';
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');

4
lib/pdf.worker.js vendored

@ -14,8 +14,8 @@
*/ */
'use strict'; 'use strict';
var pdfjsVersion = '1.8.430'; var pdfjsVersion = '1.8.432';
var pdfjsBuild = 'e6f5b3e3'; var pdfjsBuild = '93420545';
var pdfjsCoreWorker = require('./core/worker.js'); var pdfjsCoreWorker = require('./core/worker.js');
{ {
require('./core/network.js'); require('./core/network.js');

261
lib/shared/util.js

@ -917,14 +917,37 @@ var createObjectURL = function createObjectURLClosure() {
return buffer; return buffer;
}; };
}(); }();
function resolveCall(fn, args) {
var thisArg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (!fn) {
return Promise.resolve(undefined);
}
return new Promise(function (resolve, reject) {
resolve(fn.apply(thisArg, args));
});
}
function resolveOrReject(capability, success, reason) {
if (success) {
capability.resolve();
} else {
capability.reject(reason);
}
}
function finalize(promise) {
return Promise.resolve(promise).catch(function () {});
}
function MessageHandler(sourceName, targetName, comObj) { function MessageHandler(sourceName, targetName, comObj) {
var _this = this; var _this = this;
this.sourceName = sourceName; this.sourceName = sourceName;
this.targetName = targetName; this.targetName = targetName;
this.comObj = comObj; this.comObj = comObj;
this.callbackIndex = 1; this.callbackId = 1;
this.streamId = 1;
this.postMessageTransfers = true; this.postMessageTransfers = true;
this.streamSinks = Object.create(null);
this.streamControllers = Object.create(null);
var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); var callbacksCapabilities = this.callbacksCapabilities = Object.create(null);
var ah = this.actionHandler = Object.create(null); var ah = this.actionHandler = Object.create(null);
this._onComObjOnMessage = function (event) { this._onComObjOnMessage = function (event) {
@ -932,7 +955,9 @@ function MessageHandler(sourceName, targetName, comObj) {
if (data.targetName !== _this.sourceName) { if (data.targetName !== _this.sourceName) {
return; return;
} }
if (data.isReply) { if (data.stream) {
_this._processStreamMessage(data);
} else if (data.isReply) {
var callbackId = data.callbackId; var callbackId = data.callbackId;
if (data.callbackId in callbacksCapabilities) { if (data.callbackId in callbacksCapabilities) {
var callback = callbacksCapabilities[callbackId]; var callback = callbacksCapabilities[callbackId];
@ -948,14 +973,14 @@ function MessageHandler(sourceName, targetName, comObj) {
} else if (data.action in ah) { } else if (data.action in ah) {
var action = ah[data.action]; var action = ah[data.action];
if (data.callbackId) { if (data.callbackId) {
var sourceName = _this.sourceName; var _sourceName = _this.sourceName;
var targetName = data.sourceName; var _targetName = data.sourceName;
Promise.resolve().then(function () { Promise.resolve().then(function () {
return action[0].call(action[1], data.data); return action[0].call(action[1], data.data);
}).then(function (result) { }).then(function (result) {
comObj.postMessage({ comObj.postMessage({
sourceName: sourceName, sourceName: _sourceName,
targetName: targetName, targetName: _targetName,
isReply: true, isReply: true,
callbackId: data.callbackId, callbackId: data.callbackId,
data: result data: result
@ -965,13 +990,15 @@ function MessageHandler(sourceName, targetName, comObj) {
reason = reason + ''; reason = reason + '';
} }
comObj.postMessage({ comObj.postMessage({
sourceName: sourceName, sourceName: _sourceName,
targetName: targetName, targetName: _targetName,
isReply: true, isReply: true,
callbackId: data.callbackId, callbackId: data.callbackId,
error: reason error: reason
}); });
}); });
} else if (data.streamId) {
_this._createStreamSink(data);
} else { } else {
action[0].call(action[1], data.data); action[0].call(action[1], data.data);
} }
@ -999,7 +1026,7 @@ MessageHandler.prototype = {
this.postMessage(message, transfers); this.postMessage(message, transfers);
}, },
sendWithPromise: function sendWithPromise(actionName, data, transfers) { sendWithPromise: function sendWithPromise(actionName, data, transfers) {
var callbackId = this.callbackIndex++; var callbackId = this.callbackId++;
var message = { var message = {
sourceName: this.sourceName, sourceName: this.sourceName,
targetName: this.targetName, targetName: this.targetName,
@ -1016,6 +1043,222 @@ MessageHandler.prototype = {
} }
return capability.promise; return capability.promise;
}, },
sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) {
var _this2 = this;
var streamId = this.streamId++;
var sourceName = this.sourceName;
var targetName = this.targetName;
return new _streamsLib.ReadableStream({
start: function start(controller) {
var startCapability = createPromiseCapability();
_this2.streamControllers[streamId] = {
controller: controller,
startCall: startCapability
};
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
action: actionName,
streamId: streamId,
data: data,
desiredSize: controller.desiredSize
});
return startCapability.promise;
},
pull: function pull(controller) {
var pullCapability = createPromiseCapability();
_this2.streamControllers[streamId].pullCall = pullCapability;
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: 'pull',
streamId: streamId,
desiredSize: controller.desiredSize
});
return pullCapability.promise;
},
cancel: function cancel(reason) {
var cancelCapability = createPromiseCapability();
_this2.streamControllers[streamId].cancelCall = cancelCapability;
_this2.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: 'cancel',
reason: reason,
streamId: streamId
});
return cancelCapability.promise;
}
}, queueingStrategy);
},
_createStreamSink: function _createStreamSink(data) {
var _this3 = this;
var self = this;
var action = this.actionHandler[data.action];
var streamId = data.streamId;
var desiredSize = data.desiredSize;
var sourceName = this.sourceName;
var targetName = data.sourceName;
var capability = createPromiseCapability();
var sendStreamRequest = function sendStreamRequest(_ref) {
var stream = _ref.stream,
chunk = _ref.chunk,
success = _ref.success,
reason = _ref.reason;
_this3.comObj.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
streamId: streamId,
chunk: chunk,
success: success,
reason: reason
});
};
var streamSink = {
enqueue: function enqueue(chunk) {
var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var lastDesiredSize = this.desiredSize;
this.desiredSize -= size;
if (lastDesiredSize > 0 && this.desiredSize <= 0) {
this.sinkCapability = createPromiseCapability();
this.ready = this.sinkCapability.promise;
}
sendStreamRequest({
stream: 'enqueue',
chunk: chunk
});
},
close: function close() {
sendStreamRequest({ stream: 'close' });
delete self.streamSinks[streamId];
},
error: function error(reason) {
sendStreamRequest({
stream: 'error',
reason: reason
});
},
sinkCapability: capability,
onPull: null,
onCancel: null,
desiredSize: desiredSize,
ready: null
};
streamSink.sinkCapability.resolve();
streamSink.ready = streamSink.sinkCapability.promise;
this.streamSinks[streamId] = streamSink;
resolveCall(action[0], [data.data, streamSink], action[1]).then(function () {
sendStreamRequest({
stream: 'start_complete',
success: true
});
}, function (reason) {
sendStreamRequest({
stream: 'start_complete',
success: false,
reason: reason
});
});
},
_processStreamMessage: function _processStreamMessage(data) {
var _this4 = this;
var sourceName = this.sourceName;
var targetName = data.sourceName;
var streamId = data.streamId;
var sendStreamResponse = function sendStreamResponse(_ref2) {
var stream = _ref2.stream,
success = _ref2.success,
reason = _ref2.reason;
_this4.comObj.postMessage({
sourceName: sourceName,
targetName: targetName,
stream: stream,
success: success,
streamId: streamId,
reason: reason
});
};
var deleteStreamController = function deleteStreamController() {
Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) {
return capability && finalize(capability.promise);
})).then(function () {
delete _this4.streamControllers[data.streamId];
});
};
switch (data.stream) {
case 'start_complete':
resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, data.reason);
break;
case 'pull_complete':
resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, data.reason);
break;
case 'pull':
if (!this.streamSinks[data.streamId]) {
sendStreamResponse({
stream: 'pull_complete',
success: true
});
break;
}
if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) {
this.streamSinks[data.streamId].sinkCapability.resolve();
}
this.streamSinks[data.streamId].desiredSize = data.desiredSize;
resolveCall(this.streamSinks[data.streamId].onPull).then(function () {
sendStreamResponse({
stream: 'pull_complete',
success: true
});
}, function (reason) {
sendStreamResponse({
stream: 'pull_complete',
success: false,
reason: reason
});
});
break;
case 'enqueue':
this.streamControllers[data.streamId].controller.enqueue(data.chunk);
break;
case 'close':
this.streamControllers[data.streamId].controller.close();
deleteStreamController();
break;
case 'error':
this.streamControllers[data.streamId].controller.error(data.reason);
deleteStreamController();
break;
case 'cancel_complete':
resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, data.reason);
deleteStreamController();
break;
case 'cancel':
resolveCall(this.streamSinks[data.streamId].onCancel, [data.reason]).then(function () {
sendStreamResponse({
stream: 'cancel_complete',
success: true
});
}, function (reason) {
sendStreamResponse({
stream: 'cancel_complete',
success: false,
reason: reason
});
});
delete this.streamSinks[data.streamId];
break;
default:
throw new Error('Unexpected stream case');
}
},
postMessage: function postMessage(message, transfers) { postMessage: function postMessage(message, transfers) {
if (transfers && this.postMessageTransfers) { if (transfers && this.postMessageTransfers) {
this.comObj.postMessage(message, transfers); this.comObj.postMessage(message, transfers);

2
lib/test/unit/jasmine-boot.js

@ -15,7 +15,7 @@
'use strict'; 'use strict';
function initializePDFJS(callback) { function initializePDFJS(callback) {
Promise.all(['pdfjs/display/global', 'pdfjs-test/unit/annotation_spec', 'pdfjs-test/unit/api_spec', 'pdfjs-test/unit/bidi_spec', 'pdfjs-test/unit/cff_parser_spec', 'pdfjs-test/unit/cmap_spec', 'pdfjs-test/unit/crypto_spec', 'pdfjs-test/unit/document_spec', 'pdfjs-test/unit/dom_utils_spec', 'pdfjs-test/unit/evaluator_spec', 'pdfjs-test/unit/fonts_spec', 'pdfjs-test/unit/function_spec', 'pdfjs-test/unit/metadata_spec', 'pdfjs-test/unit/murmurhash3_spec', 'pdfjs-test/unit/network_spec', 'pdfjs-test/unit/parser_spec', 'pdfjs-test/unit/primitives_spec', 'pdfjs-test/unit/stream_spec', 'pdfjs-test/unit/type1_parser_spec', 'pdfjs-test/unit/ui_utils_spec', 'pdfjs-test/unit/unicode_spec', 'pdfjs-test/unit/util_spec', 'pdfjs-test/unit/custom_spec'].map(function (moduleName) { Promise.all(['pdfjs/display/global', 'pdfjs-test/unit/annotation_spec', 'pdfjs-test/unit/api_spec', 'pdfjs-test/unit/bidi_spec', 'pdfjs-test/unit/cff_parser_spec', 'pdfjs-test/unit/cmap_spec', 'pdfjs-test/unit/crypto_spec', 'pdfjs-test/unit/custom_spec', 'pdfjs-test/unit/document_spec', 'pdfjs-test/unit/dom_utils_spec', 'pdfjs-test/unit/evaluator_spec', 'pdfjs-test/unit/fonts_spec', 'pdfjs-test/unit/function_spec', 'pdfjs-test/unit/metadata_spec', 'pdfjs-test/unit/murmurhash3_spec', 'pdfjs-test/unit/network_spec', 'pdfjs-test/unit/parser_spec', 'pdfjs-test/unit/primitives_spec', 'pdfjs-test/unit/stream_spec', 'pdfjs-test/unit/type1_parser_spec', 'pdfjs-test/unit/ui_utils_spec', 'pdfjs-test/unit/unicode_spec', 'pdfjs-test/unit/util_spec', 'pdfjs-test/unit/util_stream_spec'].map(function (moduleName) {
return SystemJS.import(moduleName); return SystemJS.import(moduleName);
})).then(function (modules) { })).then(function (modules) {
var displayGlobal = modules[0]; var displayGlobal = modules[0];

372
lib/test/unit/util_stream_spec.js

@ -0,0 +1,372 @@
/* 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';
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 _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 _util = require('../../shared/util');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
describe('util_stream', function () {
var FakePort = function () {
function FakePort() {
_classCallCheck(this, FakePort);
this._listeners = [];
this._deferred = Promise.resolve(undefined);
}
_createClass(FakePort, [{
key: 'postMessage',
value: function postMessage(obj) {
var _this = this;
var event = { data: obj };
this._deferred.then(function () {
_this._listeners.forEach(function (listener) {
listener.call(this, event);
}, _this);
});
}
}, {
key: 'addEventListener',
value: function addEventListener(name, listener) {
this._listeners.push(listener);
}
}, {
key: 'removeEventListener',
value: function removeEventListener(name, listener) {
var i = this._listeners.indexOf(listener);
this._listeners.splice(i, 1);
}
}, {
key: 'terminate',
value: function terminate() {
this._listeners = [];
}
}]);
return FakePort;
}();
function sleep(ticks) {
return Promise.resolve().then(function () {
return ticks && sleep(ticks - 1);
});
}
describe('sendWithStream', function () {
it('should return a ReadableStream', function () {
var port = new FakePort();
var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
var readable = messageHandler1.sendWithStream('fakeHandler');
expect(typeof readable === 'undefined' ? 'undefined' : _typeof(readable)).toEqual('object');
expect(_typeof(readable.getReader)).toEqual('function');
});
it('should read using a reader', function (done) {
var log = '';
var port = new FakePort();
var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
messageHandler2.on('fakeHandler', function (data, sink) {
sink.onPull = function () {
log += 'p';
};
sink.onCancel = function (reason) {
log += 'c';
};
sink.ready.then(function () {
sink.enqueue('hi');
return sink.ready;
}).then(function () {
sink.close();
});
return sleep(5);
});
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
highWaterMark: 1,
size: function size() {
return 1;
}
});
var reader = readable.getReader();
sleep(10).then(function () {
expect(log).toEqual('');
return reader.read();
}).then(function (result) {
expect(log).toEqual('p');
expect(result.value).toEqual('hi');
expect(result.done).toEqual(false);
return sleep(10);
}).then(function () {
return reader.read();
}).then(function (result) {
expect(result.value).toEqual(undefined);
expect(result.done).toEqual(true);
done();
});
});
it('should not read any data when cancelled', function (done) {
var log = '';
var port = new FakePort();
var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
messageHandler2.on('fakeHandler', function (data, sink) {
sink.onPull = function () {
log += 'p';
};
sink.onCancel = function (reason) {
log += 'c';
};
log += '0';
sink.ready.then(function () {
log += '1';
sink.enqueue([1, 2, 3, 4], 4);
return sink.ready;
}).then(function () {
log += '2';
sink.enqueue([5, 6, 7, 8], 4);
return sink.ready;
}).then(function () {
log += '3';
sink.close();
}, function () {
log += '4';
});
});
var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
highWaterMark: 4,
size: function size(arr) {
return arr.length;
}
});
var reader = readable.getReader();
sleep(10).then(function () {
expect(log).toEqual('01');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual([1, 2, 3, 4]);
expect(result.done).toEqual(false);
return sleep(10);
}).then(function () {
expect(log).toEqual('01p2');
return reader.cancel();
}).then(function () {
expect(log).toEqual('01p2c');
done();
});
});
it('should not read when errored', function (done) {
var log = '';
var port = new FakePort();
var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
messageHandler2.on('fakeHandler', function (data, sink) {
sink.onPull = function () {
log += 'p';
};
sink.onCancel = function (reason) {
log += 'c';
};
sink.ready.then(function () {
sink.enqueue([1, 2, 3, 4], 4);
return sink.ready;
}).then(function () {
log += 'error';
sink.error('error');
});
});
var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
highWaterMark: 4,
size: function size(arr) {
return arr.length;
}
});
var reader = readable.getReader();
sleep(10).then(function () {
expect(log).toEqual('');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual([1, 2, 3, 4]);
expect(result.done).toEqual(false);
return reader.read();
}).then(function () {}, function (reason) {
expect(reason).toEqual('error');
done();
});
});
it('should read data with blocking promise', function (done) {
var log = '';
var port = new FakePort();
var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
messageHandler2.on('fakeHandler', function (data, sink) {
sink.onPull = function () {
log += 'p';
};
sink.onCancel = function (reason) {
log += 'c';
};
log += '0';
sink.ready.then(function () {
log += '1';
sink.enqueue([1, 2, 3, 4], 4);
return sink.ready;
}).then(function () {
log += '2';
sink.enqueue([5, 6, 7, 8], 4);
return sink.ready;
}).then(function () {
sink.close();
});
});
var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
highWaterMark: 4,
size: function size(arr) {
return arr.length;
}
});
var reader = readable.getReader();
sleep(10).then(function () {
expect(log).toEqual('01');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual([1, 2, 3, 4]);
expect(result.done).toEqual(false);
return sleep(10);
}).then(function () {
expect(log).toEqual('01p2');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual([5, 6, 7, 8]);
expect(result.done).toEqual(false);
return sleep(10);
}).then(function () {
expect(log).toEqual('01p2p');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual(undefined);
expect(result.done).toEqual(true);
done();
});
});
it('should read data with blocking promise and buffer whole data' + ' into stream', function (done) {
var log = '';
var port = new FakePort();
var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
messageHandler2.on('fakeHandler', function (data, sink) {
sink.onPull = function () {
log += 'p';
};
sink.onCancel = function (reason) {
log += 'c';
};
log += '0';
sink.ready.then(function () {
log += '1';
sink.enqueue([1, 2, 3, 4], 4);
return sink.ready;
}).then(function () {
log += '2';
sink.enqueue([5, 6, 7, 8], 4);
return sink.ready;
}).then(function () {
sink.close();
});
return sleep(10);
});
var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
highWaterMark: 8,
size: function size(arr) {
return arr.length;
}
});
var reader = readable.getReader();
sleep(10).then(function () {
expect(log).toEqual('012');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual([1, 2, 3, 4]);
expect(result.done).toEqual(false);
return sleep(10);
}).then(function () {
expect(log).toEqual('012p');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual([5, 6, 7, 8]);
expect(result.done).toEqual(false);
return sleep(10);
}).then(function () {
expect(log).toEqual('012p');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual(undefined);
expect(result.done).toEqual(true);
done();
});
});
it('should ignore any pull after close is called', function (done) {
var log = '';
var port = new FakePort();
var capability = (0, _util.createPromiseCapability)();
var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
messageHandler2.on('fakeHandler', function (data, sink) {
sink.onPull = function () {
log += 'p';
};
sink.onCancel = function (reason) {
log += 'c';
};
log += '0';
sink.ready.then(function () {
log += '1';
sink.enqueue([1, 2, 3, 4], 4);
});
return capability.promise.then(function () {
sink.close();
});
});
var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
highWaterMark: 10,
size: function size(arr) {
return arr.length;
}
});
var reader = readable.getReader();
sleep(10).then(function () {
expect(log).toEqual('01');
capability.resolve();
return capability.promise.then(function () {
return reader.read();
});
}).then(function (result) {
expect(result.value).toEqual([1, 2, 3, 4]);
expect(result.done).toEqual(false);
return sleep(10);
}).then(function () {
expect(log).toEqual('01');
return reader.read();
}).then(function (result) {
expect(result.value).toEqual(undefined);
expect(result.done).toEqual(true);
done();
});
});
});
});

2
package.json

@ -1,6 +1,6 @@
{ {
"name": "pdfjs-dist", "name": "pdfjs-dist",
"version": "1.8.430", "version": "1.8.432",
"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