|
@@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') {
|
|
(typeof window !== 'undefined' ? window : this).PDFJS = {};
|
|
(typeof window !== 'undefined' ? window : this).PDFJS = {};
|
|
}
|
|
}
|
|
|
|
|
|
-PDFJS.version = '1.1.546';
|
|
|
|
-PDFJS.build = 'b3a9a0d';
|
|
|
|
|
|
+PDFJS.version = '1.1.551';
|
|
|
|
+PDFJS.build = '2a5616c';
|
|
|
|
|
|
(function pdfjsWrapper() {
|
|
(function pdfjsWrapper() {
|
|
// Use strict in our context only - users might not want it
|
|
// Use strict in our context only - users might not want it
|
|
@@ -225,6 +225,11 @@ function warn(msg) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// Deprecated API function -- treated as warnings.
|
|
|
|
+function deprecated(details) {
|
|
|
|
+ warn('Deprecated API usage: ' + details);
|
|
|
|
+}
|
|
|
|
+
|
|
// Fatal errors that should trigger the fallback UI and halt execution by
|
|
// Fatal errors that should trigger the fallback UI and halt execution by
|
|
// throwing an exception.
|
|
// throwing an exception.
|
|
function error(msg) {
|
|
function error(msg) {
|
|
@@ -2172,7 +2177,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
|
|
|
|
this.chunksNeededByRequest = {};
|
|
this.chunksNeededByRequest = {};
|
|
this.requestsByChunk = {};
|
|
this.requestsByChunk = {};
|
|
- this.callbacksByRequest = {};
|
|
|
|
|
|
+ this.promisesByRequest = {};
|
|
this.progressiveDataLength = 0;
|
|
this.progressiveDataLength = 0;
|
|
|
|
|
|
this._loadedStreamCapability = createPromiseCapability();
|
|
this._loadedStreamCapability = createPromiseCapability();
|
|
@@ -2191,12 +2196,11 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
// contiguous ranges to load in as few requests as possible
|
|
// contiguous ranges to load in as few requests as possible
|
|
requestAllChunks: function ChunkedStreamManager_requestAllChunks() {
|
|
requestAllChunks: function ChunkedStreamManager_requestAllChunks() {
|
|
var missingChunks = this.stream.getMissingChunks();
|
|
var missingChunks = this.stream.getMissingChunks();
|
|
- this.requestChunks(missingChunks);
|
|
|
|
|
|
+ this._requestChunks(missingChunks);
|
|
return this._loadedStreamCapability.promise;
|
|
return this._loadedStreamCapability.promise;
|
|
},
|
|
},
|
|
|
|
|
|
- requestChunks: function ChunkedStreamManager_requestChunks(chunks,
|
|
|
|
- callback) {
|
|
|
|
|
|
+ _requestChunks: function ChunkedStreamManager_requestChunks(chunks) {
|
|
var requestId = this.currRequestId++;
|
|
var requestId = this.currRequestId++;
|
|
|
|
|
|
var chunksNeeded;
|
|
var chunksNeeded;
|
|
@@ -2209,13 +2213,11 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
}
|
|
}
|
|
|
|
|
|
if (isEmptyObj(chunksNeeded)) {
|
|
if (isEmptyObj(chunksNeeded)) {
|
|
- if (callback) {
|
|
|
|
- callback();
|
|
|
|
- }
|
|
|
|
- return;
|
|
|
|
|
|
+ return Promise.resolve();
|
|
}
|
|
}
|
|
|
|
|
|
- this.callbacksByRequest[requestId] = callback;
|
|
|
|
|
|
+ var capability = createPromiseCapability();
|
|
|
|
+ this.promisesByRequest[requestId] = capability;
|
|
|
|
|
|
var chunksToRequest = [];
|
|
var chunksToRequest = [];
|
|
for (var chunk in chunksNeeded) {
|
|
for (var chunk in chunksNeeded) {
|
|
@@ -2228,7 +2230,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
}
|
|
}
|
|
|
|
|
|
if (!chunksToRequest.length) {
|
|
if (!chunksToRequest.length) {
|
|
- return;
|
|
|
|
|
|
+ return capability.promise;
|
|
}
|
|
}
|
|
|
|
|
|
var groupedChunksToRequest = this.groupChunks(chunksToRequest);
|
|
var groupedChunksToRequest = this.groupChunks(chunksToRequest);
|
|
@@ -2239,6 +2241,8 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);
|
|
var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);
|
|
this.sendRequest(begin, end);
|
|
this.sendRequest(begin, end);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ return capability.promise;
|
|
},
|
|
},
|
|
|
|
|
|
getStream: function ChunkedStreamManager_getStream() {
|
|
getStream: function ChunkedStreamManager_getStream() {
|
|
@@ -2246,8 +2250,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
},
|
|
},
|
|
|
|
|
|
// Loads any chunks in the requested range that are not yet loaded
|
|
// Loads any chunks in the requested range that are not yet loaded
|
|
- requestRange: function ChunkedStreamManager_requestRange(
|
|
|
|
- begin, end, callback) {
|
|
|
|
|
|
+ requestRange: function ChunkedStreamManager_requestRange(begin, end) {
|
|
|
|
|
|
end = Math.min(end, this.length);
|
|
end = Math.min(end, this.length);
|
|
|
|
|
|
@@ -2259,11 +2262,10 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
chunks.push(chunk);
|
|
chunks.push(chunk);
|
|
}
|
|
}
|
|
|
|
|
|
- this.requestChunks(chunks, callback);
|
|
|
|
|
|
+ return this._requestChunks(chunks);
|
|
},
|
|
},
|
|
|
|
|
|
- requestRanges: function ChunkedStreamManager_requestRanges(ranges,
|
|
|
|
- callback) {
|
|
|
|
|
|
+ requestRanges: function ChunkedStreamManager_requestRanges(ranges) {
|
|
ranges = ranges || [];
|
|
ranges = ranges || [];
|
|
var chunksToRequest = [];
|
|
var chunksToRequest = [];
|
|
|
|
|
|
@@ -2278,7 +2280,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
}
|
|
}
|
|
|
|
|
|
chunksToRequest.sort(function(a, b) { return a - b; });
|
|
chunksToRequest.sort(function(a, b) { return a - b; });
|
|
- this.requestChunks(chunksToRequest, callback);
|
|
|
|
|
|
+ return this._requestChunks(chunksToRequest);
|
|
},
|
|
},
|
|
|
|
|
|
// Groups a sorted array of chunks into as few contiguous larger
|
|
// Groups a sorted array of chunks into as few contiguous larger
|
|
@@ -2377,17 +2379,15 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);
|
|
nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);
|
|
}
|
|
}
|
|
if (isInt(nextEmptyChunk)) {
|
|
if (isInt(nextEmptyChunk)) {
|
|
- this.requestChunks([nextEmptyChunk]);
|
|
|
|
|
|
+ this._requestChunks([nextEmptyChunk]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
for (i = 0; i < loadedRequests.length; ++i) {
|
|
for (i = 0; i < loadedRequests.length; ++i) {
|
|
requestId = loadedRequests[i];
|
|
requestId = loadedRequests[i];
|
|
- var callback = this.callbacksByRequest[requestId];
|
|
|
|
- delete this.callbacksByRequest[requestId];
|
|
|
|
- if (callback) {
|
|
|
|
- callback();
|
|
|
|
- }
|
|
|
|
|
|
+ var capability = this.promisesByRequest[requestId];
|
|
|
|
+ delete this.promisesByRequest[requestId];
|
|
|
|
+ capability.resolve();
|
|
}
|
|
}
|
|
|
|
|
|
this.msgHandler.send('DocProgress', {
|
|
this.msgHandler.send('DocProgress', {
|
|
@@ -2408,6 +2408,16 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
|
|
getEndChunk: function ChunkedStreamManager_getEndChunk(end) {
|
|
getEndChunk: function ChunkedStreamManager_getEndChunk(end) {
|
|
var chunk = Math.floor((end - 1) / this.chunkSize) + 1;
|
|
var chunk = Math.floor((end - 1) / this.chunkSize) + 1;
|
|
return chunk;
|
|
return chunk;
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ abort: function ChunkedStreamManager_abort() {
|
|
|
|
+ if (this.networkManager) {
|
|
|
|
+ this.networkManager.abortAllRequests();
|
|
|
|
+ }
|
|
|
|
+ for(var requestId in this.promisesByRequest) {
|
|
|
|
+ var capability = this.promisesByRequest[requestId];
|
|
|
|
+ capability.reject(new Error('Request was aborted'));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
@@ -2579,7 +2589,8 @@ var NetworkPdfManager = (function NetworkPdfManagerClosure() {
|
|
reject(e);
|
|
reject(e);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- pdfManager.streamManager.requestRange(e.begin, e.end, ensureHelper);
|
|
|
|
|
|
+ pdfManager.streamManager.requestRange(e.begin, e.end).
|
|
|
|
+ then(ensureHelper, reject);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2589,11 +2600,7 @@ var NetworkPdfManager = (function NetworkPdfManagerClosure() {
|
|
|
|
|
|
NetworkPdfManager.prototype.requestRange =
|
|
NetworkPdfManager.prototype.requestRange =
|
|
function NetworkPdfManager_requestRange(begin, end) {
|
|
function NetworkPdfManager_requestRange(begin, end) {
|
|
- return new Promise(function (resolve) {
|
|
|
|
- this.streamManager.requestRange(begin, end, function() {
|
|
|
|
- resolve();
|
|
|
|
- });
|
|
|
|
- }.bind(this));
|
|
|
|
|
|
+ return this.streamManager.requestRange(begin, end);
|
|
};
|
|
};
|
|
|
|
|
|
NetworkPdfManager.prototype.requestLoadedStream =
|
|
NetworkPdfManager.prototype.requestLoadedStream =
|
|
@@ -2613,7 +2620,7 @@ var NetworkPdfManager = (function NetworkPdfManagerClosure() {
|
|
|
|
|
|
NetworkPdfManager.prototype.terminate =
|
|
NetworkPdfManager.prototype.terminate =
|
|
function NetworkPdfManager_terminate() {
|
|
function NetworkPdfManager_terminate() {
|
|
- this.streamManager.networkManager.abortAllRequests();
|
|
|
|
|
|
+ this.streamManager.abort();
|
|
};
|
|
};
|
|
|
|
|
|
return NetworkPdfManager;
|
|
return NetworkPdfManager;
|
|
@@ -2758,7 +2765,7 @@ var Page = (function PageClosure() {
|
|
}.bind(this));
|
|
}.bind(this));
|
|
},
|
|
},
|
|
|
|
|
|
- getOperatorList: function Page_getOperatorList(handler, intent) {
|
|
|
|
|
|
+ getOperatorList: function Page_getOperatorList(handler, task, intent) {
|
|
var self = this;
|
|
var self = this;
|
|
|
|
|
|
var pdfManager = this.pdfManager;
|
|
var pdfManager = this.pdfManager;
|
|
@@ -2791,8 +2798,8 @@ var Page = (function PageClosure() {
|
|
pageIndex: self.pageIndex,
|
|
pageIndex: self.pageIndex,
|
|
intent: intent
|
|
intent: intent
|
|
});
|
|
});
|
|
- return partialEvaluator.getOperatorList(contentStream, self.resources,
|
|
|
|
- opList).then(function () {
|
|
|
|
|
|
+ return partialEvaluator.getOperatorList(contentStream, task,
|
|
|
|
+ self.resources, opList).then(function () {
|
|
return opList;
|
|
return opList;
|
|
});
|
|
});
|
|
});
|
|
});
|
|
@@ -2809,7 +2816,7 @@ var Page = (function PageClosure() {
|
|
}
|
|
}
|
|
|
|
|
|
var annotationsReadyPromise = Annotation.appendToOperatorList(
|
|
var annotationsReadyPromise = Annotation.appendToOperatorList(
|
|
- annotations, pageOpList, pdfManager, partialEvaluator, intent);
|
|
|
|
|
|
+ annotations, pageOpList, pdfManager, partialEvaluator, task, intent);
|
|
return annotationsReadyPromise.then(function () {
|
|
return annotationsReadyPromise.then(function () {
|
|
pageOpList.flush(true);
|
|
pageOpList.flush(true);
|
|
return pageOpList;
|
|
return pageOpList;
|
|
@@ -2817,7 +2824,7 @@ var Page = (function PageClosure() {
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
|
|
- extractTextContent: function Page_extractTextContent() {
|
|
|
|
|
|
+ extractTextContent: function Page_extractTextContent(task) {
|
|
var handler = {
|
|
var handler = {
|
|
on: function nullHandlerOn() {},
|
|
on: function nullHandlerOn() {},
|
|
send: function nullHandlerSend() {}
|
|
send: function nullHandlerSend() {}
|
|
@@ -2846,6 +2853,7 @@ var Page = (function PageClosure() {
|
|
self.fontCache);
|
|
self.fontCache);
|
|
|
|
|
|
return partialEvaluator.getTextContent(contentStream,
|
|
return partialEvaluator.getTextContent(contentStream,
|
|
|
|
+ task,
|
|
self.resources);
|
|
self.resources);
|
|
});
|
|
});
|
|
},
|
|
},
|
|
@@ -4498,9 +4506,9 @@ var XRef = (function XRefClosure() {
|
|
resolve(xref.fetch(ref, suppressEncryption));
|
|
resolve(xref.fetch(ref, suppressEncryption));
|
|
} catch (e) {
|
|
} catch (e) {
|
|
if (e instanceof MissingDataException) {
|
|
if (e instanceof MissingDataException) {
|
|
- streamManager.requestRange(e.begin, e.end, function () {
|
|
|
|
|
|
+ streamManager.requestRange(e.begin, e.end).then(function () {
|
|
tryFetch(resolve, reject);
|
|
tryFetch(resolve, reject);
|
|
- });
|
|
|
|
|
|
+ }, reject);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
reject(e);
|
|
reject(e);
|
|
@@ -4776,6 +4784,7 @@ var ObjectLoader = (function() {
|
|
this.keys = keys;
|
|
this.keys = keys;
|
|
this.xref = xref;
|
|
this.xref = xref;
|
|
this.refSet = null;
|
|
this.refSet = null;
|
|
|
|
+ this.capability = null;
|
|
}
|
|
}
|
|
|
|
|
|
ObjectLoader.prototype = {
|
|
ObjectLoader.prototype = {
|
|
@@ -4796,11 +4805,11 @@ var ObjectLoader = (function() {
|
|
nodesToVisit.push(this.obj[keys[i]]);
|
|
nodesToVisit.push(this.obj[keys[i]]);
|
|
}
|
|
}
|
|
|
|
|
|
- this.walk(nodesToVisit);
|
|
|
|
|
|
+ this._walk(nodesToVisit);
|
|
return this.capability.promise;
|
|
return this.capability.promise;
|
|
},
|
|
},
|
|
|
|
|
|
- walk: function ObjectLoader_walk(nodesToVisit) {
|
|
|
|
|
|
+ _walk: function ObjectLoader_walk(nodesToVisit) {
|
|
var nodesToRevisit = [];
|
|
var nodesToRevisit = [];
|
|
var pendingRequests = [];
|
|
var pendingRequests = [];
|
|
// DFS walk of the object graph.
|
|
// DFS walk of the object graph.
|
|
@@ -4847,7 +4856,7 @@ var ObjectLoader = (function() {
|
|
}
|
|
}
|
|
|
|
|
|
if (pendingRequests.length) {
|
|
if (pendingRequests.length) {
|
|
- this.xref.stream.manager.requestRanges(pendingRequests,
|
|
|
|
|
|
+ this.xref.stream.manager.requestRanges(pendingRequests).then(
|
|
function pendingRequestCallback() {
|
|
function pendingRequestCallback() {
|
|
nodesToVisit = nodesToRevisit;
|
|
nodesToVisit = nodesToRevisit;
|
|
for (var i = 0; i < nodesToRevisit.length; i++) {
|
|
for (var i = 0; i < nodesToRevisit.length; i++) {
|
|
@@ -4858,8 +4867,8 @@ var ObjectLoader = (function() {
|
|
this.refSet.remove(node);
|
|
this.refSet.remove(node);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- this.walk(nodesToVisit);
|
|
|
|
- }.bind(this));
|
|
|
|
|
|
+ this._walk(nodesToVisit);
|
|
|
|
+ }.bind(this), this.capability.reject);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
// Everything is loaded.
|
|
// Everything is loaded.
|
|
@@ -5233,7 +5242,7 @@ var Annotation = (function AnnotationClosure() {
|
|
}.bind(this));
|
|
}.bind(this));
|
|
},
|
|
},
|
|
|
|
|
|
- getOperatorList: function Annotation_getOperatorList(evaluator) {
|
|
|
|
|
|
+ getOperatorList: function Annotation_getOperatorList(evaluator, task) {
|
|
|
|
|
|
if (!this.appearance) {
|
|
if (!this.appearance) {
|
|
return Promise.resolve(new OperatorList());
|
|
return Promise.resolve(new OperatorList());
|
|
@@ -5260,7 +5269,8 @@ var Annotation = (function AnnotationClosure() {
|
|
return resourcesPromise.then(function(resources) {
|
|
return resourcesPromise.then(function(resources) {
|
|
var opList = new OperatorList();
|
|
var opList = new OperatorList();
|
|
opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]);
|
|
opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]);
|
|
- return evaluator.getOperatorList(self.appearance, resources, opList).
|
|
|
|
|
|
+ return evaluator.getOperatorList(self.appearance, task,
|
|
|
|
+ resources, opList).
|
|
then(function () {
|
|
then(function () {
|
|
opList.addOp(OPS.endAnnotation, []);
|
|
opList.addOp(OPS.endAnnotation, []);
|
|
self.appearance.reset();
|
|
self.appearance.reset();
|
|
@@ -5271,7 +5281,7 @@ var Annotation = (function AnnotationClosure() {
|
|
};
|
|
};
|
|
|
|
|
|
Annotation.appendToOperatorList = function Annotation_appendToOperatorList(
|
|
Annotation.appendToOperatorList = function Annotation_appendToOperatorList(
|
|
- annotations, opList, pdfManager, partialEvaluator, intent) {
|
|
|
|
|
|
+ annotations, opList, pdfManager, partialEvaluator, task, intent) {
|
|
|
|
|
|
function reject(e) {
|
|
function reject(e) {
|
|
annotationsReadyCapability.reject(e);
|
|
annotationsReadyCapability.reject(e);
|
|
@@ -5284,7 +5294,7 @@ var Annotation = (function AnnotationClosure() {
|
|
if (intent === 'display' && annotations[i].isViewable() ||
|
|
if (intent === 'display' && annotations[i].isViewable() ||
|
|
intent === 'print' && annotations[i].isPrintable()) {
|
|
intent === 'print' && annotations[i].isPrintable()) {
|
|
annotationPromises.push(
|
|
annotationPromises.push(
|
|
- annotations[i].getOperatorList(partialEvaluator));
|
|
|
|
|
|
+ annotations[i].getOperatorList(partialEvaluator, task));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Promise.all(annotationPromises).then(function(datas) {
|
|
Promise.all(annotationPromises).then(function(datas) {
|
|
@@ -5516,9 +5526,10 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
|
|
}
|
|
}
|
|
|
|
|
|
Util.inherit(TextWidgetAnnotation, WidgetAnnotation, {
|
|
Util.inherit(TextWidgetAnnotation, WidgetAnnotation, {
|
|
- getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator) {
|
|
|
|
|
|
+ getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator,
|
|
|
|
+ task) {
|
|
if (this.appearance) {
|
|
if (this.appearance) {
|
|
- return Annotation.prototype.getOperatorList.call(this, evaluator);
|
|
|
|
|
|
+ return Annotation.prototype.getOperatorList.call(this, evaluator, task);
|
|
}
|
|
}
|
|
|
|
|
|
var opList = new OperatorList();
|
|
var opList = new OperatorList();
|
|
@@ -5531,7 +5542,8 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
|
|
}
|
|
}
|
|
|
|
|
|
var stream = new Stream(stringToBytes(data.defaultAppearance));
|
|
var stream = new Stream(stringToBytes(data.defaultAppearance));
|
|
- return evaluator.getOperatorList(stream, this.fieldResources, opList).
|
|
|
|
|
|
+ return evaluator.getOperatorList(stream, task,
|
|
|
|
+ this.fieldResources, opList).
|
|
then(function () {
|
|
then(function () {
|
|
return opList;
|
|
return opList;
|
|
});
|
|
});
|
|
@@ -10919,6 +10931,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
buildFormXObject: function PartialEvaluator_buildFormXObject(resources,
|
|
buildFormXObject: function PartialEvaluator_buildFormXObject(resources,
|
|
xobj, smask,
|
|
xobj, smask,
|
|
operatorList,
|
|
operatorList,
|
|
|
|
+ task,
|
|
initialState) {
|
|
initialState) {
|
|
var matrix = xobj.dict.getArray('Matrix');
|
|
var matrix = xobj.dict.getArray('Matrix');
|
|
var bbox = xobj.dict.getArray('BBox');
|
|
var bbox = xobj.dict.getArray('BBox');
|
|
@@ -10951,7 +10964,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
|
|
|
|
operatorList.addOp(OPS.paintFormXObjectBegin, [matrix, bbox]);
|
|
operatorList.addOp(OPS.paintFormXObjectBegin, [matrix, bbox]);
|
|
|
|
|
|
- return this.getOperatorList(xobj,
|
|
|
|
|
|
+ return this.getOperatorList(xobj, task,
|
|
(xobj.dict.get('Resources') || resources), operatorList, initialState).
|
|
(xobj.dict.get('Resources') || resources), operatorList, initialState).
|
|
then(function () {
|
|
then(function () {
|
|
operatorList.addOp(OPS.paintFormXObjectEnd, []);
|
|
operatorList.addOp(OPS.paintFormXObjectEnd, []);
|
|
@@ -11063,7 +11076,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
},
|
|
},
|
|
|
|
|
|
handleSMask: function PartialEvaluator_handleSmask(smask, resources,
|
|
handleSMask: function PartialEvaluator_handleSmask(smask, resources,
|
|
- operatorList,
|
|
|
|
|
|
+ operatorList, task,
|
|
stateManager) {
|
|
stateManager) {
|
|
var smaskContent = smask.get('G');
|
|
var smaskContent = smask.get('G');
|
|
var smaskOptions = {
|
|
var smaskOptions = {
|
|
@@ -11071,13 +11084,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
backdrop: smask.get('BC')
|
|
backdrop: smask.get('BC')
|
|
};
|
|
};
|
|
return this.buildFormXObject(resources, smaskContent, smaskOptions,
|
|
return this.buildFormXObject(resources, smaskContent, smaskOptions,
|
|
- operatorList, stateManager.state.clone());
|
|
|
|
|
|
+ operatorList, task, stateManager.state.clone());
|
|
},
|
|
},
|
|
|
|
|
|
handleTilingType:
|
|
handleTilingType:
|
|
function PartialEvaluator_handleTilingType(fn, args, resources,
|
|
function PartialEvaluator_handleTilingType(fn, args, resources,
|
|
pattern, patternDict,
|
|
pattern, patternDict,
|
|
- operatorList) {
|
|
|
|
|
|
+ operatorList, task) {
|
|
// Create an IR of the pattern code.
|
|
// Create an IR of the pattern code.
|
|
var tilingOpList = new OperatorList();
|
|
var tilingOpList = new OperatorList();
|
|
// Merge the available resources, to prevent issues when the patternDict
|
|
// Merge the available resources, to prevent issues when the patternDict
|
|
@@ -11085,8 +11098,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
var resourcesArray = [patternDict.get('Resources'), resources];
|
|
var resourcesArray = [patternDict.get('Resources'), resources];
|
|
var patternResources = Dict.merge(this.xref, resourcesArray);
|
|
var patternResources = Dict.merge(this.xref, resourcesArray);
|
|
|
|
|
|
- return this.getOperatorList(pattern, patternResources, tilingOpList).then(
|
|
|
|
- function () {
|
|
|
|
|
|
+ return this.getOperatorList(pattern, task, patternResources,
|
|
|
|
+ tilingOpList).then(function () {
|
|
// Add the dependencies to the parent operator list so they are
|
|
// Add the dependencies to the parent operator list so they are
|
|
// resolved before sub operator list is executed synchronously.
|
|
// resolved before sub operator list is executed synchronously.
|
|
operatorList.addDependencies(tilingOpList.dependencies);
|
|
operatorList.addDependencies(tilingOpList.dependencies);
|
|
@@ -11099,7 +11112,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
|
|
|
|
handleSetFont:
|
|
handleSetFont:
|
|
function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef,
|
|
function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef,
|
|
- operatorList, state) {
|
|
|
|
|
|
+ operatorList, task, state) {
|
|
// TODO(mack): Not needed?
|
|
// TODO(mack): Not needed?
|
|
var fontName;
|
|
var fontName;
|
|
if (fontArgs) {
|
|
if (fontArgs) {
|
|
@@ -11113,8 +11126,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
if (!translated.font.isType3Font) {
|
|
if (!translated.font.isType3Font) {
|
|
return translated;
|
|
return translated;
|
|
}
|
|
}
|
|
- return translated.loadType3Data(self, resources, operatorList).then(
|
|
|
|
- function () {
|
|
|
|
|
|
+ return translated.loadType3Data(self, resources, operatorList, task).
|
|
|
|
+ then(function () {
|
|
return translated;
|
|
return translated;
|
|
});
|
|
});
|
|
}).then(function (translated) {
|
|
}).then(function (translated) {
|
|
@@ -11161,8 +11174,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
},
|
|
},
|
|
|
|
|
|
setGState: function PartialEvaluator_setGState(resources, gState,
|
|
setGState: function PartialEvaluator_setGState(resources, gState,
|
|
- operatorList, xref,
|
|
|
|
- stateManager) {
|
|
|
|
|
|
+ operatorList, task,
|
|
|
|
+ xref, stateManager) {
|
|
// This array holds the converted/processed state data.
|
|
// This array holds the converted/processed state data.
|
|
var gStateObj = [];
|
|
var gStateObj = [];
|
|
var gStateMap = gState.map;
|
|
var gStateMap = gState.map;
|
|
@@ -11186,8 +11199,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
break;
|
|
break;
|
|
case 'Font':
|
|
case 'Font':
|
|
promise = promise.then(function () {
|
|
promise = promise.then(function () {
|
|
- return self.handleSetFont(resources, null, value[0],
|
|
|
|
- operatorList, stateManager.state).
|
|
|
|
|
|
+ return self.handleSetFont(resources, null, value[0], operatorList,
|
|
|
|
+ task, stateManager.state).
|
|
then(function (loadedName) {
|
|
then(function (loadedName) {
|
|
operatorList.addDependency(loadedName);
|
|
operatorList.addDependency(loadedName);
|
|
gStateObj.push([key, [loadedName, value[1]]]);
|
|
gStateObj.push([key, [loadedName, value[1]]]);
|
|
@@ -11206,7 +11219,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
if (isDict(dict)) {
|
|
if (isDict(dict)) {
|
|
promise = promise.then(function () {
|
|
promise = promise.then(function () {
|
|
return self.handleSMask(dict, resources, operatorList,
|
|
return self.handleSMask(dict, resources, operatorList,
|
|
- stateManager);
|
|
|
|
|
|
+ task, stateManager);
|
|
});
|
|
});
|
|
gStateObj.push([key, true]);
|
|
gStateObj.push([key, true]);
|
|
} else {
|
|
} else {
|
|
@@ -11387,7 +11400,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
},
|
|
},
|
|
|
|
|
|
handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args,
|
|
handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args,
|
|
- cs, patterns, resources, xref) {
|
|
|
|
|
|
+ cs, patterns, resources, task, xref) {
|
|
// compile tiling patterns
|
|
// compile tiling patterns
|
|
var patternName = args[args.length - 1];
|
|
var patternName = args[args.length - 1];
|
|
// SCN/scn applies patterns along with normal colors
|
|
// SCN/scn applies patterns along with normal colors
|
|
@@ -11400,7 +11413,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
if (typeNum === TILING_PATTERN) {
|
|
if (typeNum === TILING_PATTERN) {
|
|
var color = cs.base ? cs.base.getRgb(args, 0) : null;
|
|
var color = cs.base ? cs.base.getRgb(args, 0) : null;
|
|
return this.handleTilingType(fn, color, resources, pattern,
|
|
return this.handleTilingType(fn, color, resources, pattern,
|
|
- dict, operatorList);
|
|
|
|
|
|
+ dict, operatorList, task);
|
|
} else if (typeNum === SHADING_PATTERN) {
|
|
} else if (typeNum === SHADING_PATTERN) {
|
|
var shading = dict.get('Shading');
|
|
var shading = dict.get('Shading');
|
|
var matrix = dict.get('Matrix');
|
|
var matrix = dict.get('Matrix');
|
|
@@ -11417,6 +11430,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
},
|
|
},
|
|
|
|
|
|
getOperatorList: function PartialEvaluator_getOperatorList(stream,
|
|
getOperatorList: function PartialEvaluator_getOperatorList(stream,
|
|
|
|
+ task,
|
|
resources,
|
|
resources,
|
|
operatorList,
|
|
operatorList,
|
|
initialState) {
|
|
initialState) {
|
|
@@ -11435,6 +11449,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
var timeSlotManager = new TimeSlotManager();
|
|
var timeSlotManager = new TimeSlotManager();
|
|
|
|
|
|
return new Promise(function next(resolve, reject) {
|
|
return new Promise(function next(resolve, reject) {
|
|
|
|
+ task.ensureNotTerminated();
|
|
timeSlotManager.reset();
|
|
timeSlotManager.reset();
|
|
var stop, operation = {}, i, ii, cs;
|
|
var stop, operation = {}, i, ii, cs;
|
|
while (!(stop = timeSlotManager.check())) {
|
|
while (!(stop = timeSlotManager.check())) {
|
|
@@ -11477,7 +11492,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
if (type.name === 'Form') {
|
|
if (type.name === 'Form') {
|
|
stateManager.save();
|
|
stateManager.save();
|
|
return self.buildFormXObject(resources, xobj, null,
|
|
return self.buildFormXObject(resources, xobj, null,
|
|
- operatorList,
|
|
|
|
|
|
+ operatorList, task,
|
|
stateManager.state.clone()).
|
|
stateManager.state.clone()).
|
|
then(function () {
|
|
then(function () {
|
|
stateManager.restore();
|
|
stateManager.restore();
|
|
@@ -11501,8 +11516,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
case OPS.setFont:
|
|
case OPS.setFont:
|
|
var fontSize = args[1];
|
|
var fontSize = args[1];
|
|
// eagerly collect all fonts
|
|
// eagerly collect all fonts
|
|
- return self.handleSetFont(resources, args, null,
|
|
|
|
- operatorList, stateManager.state).
|
|
|
|
|
|
+ return self.handleSetFont(resources, args, null, operatorList,
|
|
|
|
+ task, stateManager.state).
|
|
then(function (loadedName) {
|
|
then(function (loadedName) {
|
|
operatorList.addDependency(loadedName);
|
|
operatorList.addDependency(loadedName);
|
|
operatorList.addOp(OPS.setFont, [loadedName, fontSize]);
|
|
operatorList.addOp(OPS.setFont, [loadedName, fontSize]);
|
|
@@ -11608,7 +11623,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
cs = stateManager.state.fillColorSpace;
|
|
cs = stateManager.state.fillColorSpace;
|
|
if (cs.name === 'Pattern') {
|
|
if (cs.name === 'Pattern') {
|
|
return self.handleColorN(operatorList, OPS.setFillColorN,
|
|
return self.handleColorN(operatorList, OPS.setFillColorN,
|
|
- args, cs, patterns, resources, xref).then(function() {
|
|
|
|
|
|
+ args, cs, patterns, resources, task, xref).then(function() {
|
|
next(resolve, reject);
|
|
next(resolve, reject);
|
|
}, reject);
|
|
}, reject);
|
|
}
|
|
}
|
|
@@ -11619,7 +11634,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
cs = stateManager.state.strokeColorSpace;
|
|
cs = stateManager.state.strokeColorSpace;
|
|
if (cs.name === 'Pattern') {
|
|
if (cs.name === 'Pattern') {
|
|
return self.handleColorN(operatorList, OPS.setStrokeColorN,
|
|
return self.handleColorN(operatorList, OPS.setStrokeColorN,
|
|
- args, cs, patterns, resources, xref).then(function() {
|
|
|
|
|
|
+ args, cs, patterns, resources, task, xref).then(function() {
|
|
next(resolve, reject);
|
|
next(resolve, reject);
|
|
}, reject);
|
|
}, reject);
|
|
}
|
|
}
|
|
@@ -11653,8 +11668,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
}
|
|
}
|
|
|
|
|
|
var gState = extGState.get(dictName.name);
|
|
var gState = extGState.get(dictName.name);
|
|
- return self.setGState(resources, gState, operatorList, xref,
|
|
|
|
- stateManager).then(function() {
|
|
|
|
|
|
+ return self.setGState(resources, gState, operatorList, task,
|
|
|
|
+ xref, stateManager).then(function() {
|
|
next(resolve, reject);
|
|
next(resolve, reject);
|
|
}, reject);
|
|
}, reject);
|
|
case OPS.moveTo:
|
|
case OPS.moveTo:
|
|
@@ -11692,7 +11707,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
if (stop) {
|
|
if (stop) {
|
|
deferred.then(function () {
|
|
deferred.then(function () {
|
|
next(resolve, reject);
|
|
next(resolve, reject);
|
|
- });
|
|
|
|
|
|
+ }, reject);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
// Some PDFs don't close all restores inside object/form.
|
|
// Some PDFs don't close all restores inside object/form.
|
|
@@ -11704,7 +11719,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
|
|
- getTextContent: function PartialEvaluator_getTextContent(stream, resources,
|
|
|
|
|
|
+ getTextContent: function PartialEvaluator_getTextContent(stream, task,
|
|
|
|
+ resources,
|
|
stateManager) {
|
|
stateManager) {
|
|
|
|
|
|
stateManager = (stateManager || new StateManager(new TextState()));
|
|
stateManager = (stateManager || new StateManager(new TextState()));
|
|
@@ -11882,6 +11898,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
var timeSlotManager = new TimeSlotManager();
|
|
var timeSlotManager = new TimeSlotManager();
|
|
|
|
|
|
return new Promise(function next(resolve, reject) {
|
|
return new Promise(function next(resolve, reject) {
|
|
|
|
+ task.ensureNotTerminated();
|
|
timeSlotManager.reset();
|
|
timeSlotManager.reset();
|
|
var stop, operation = {}, args = [];
|
|
var stop, operation = {}, args = [];
|
|
while (!(stop = timeSlotManager.check())) {
|
|
while (!(stop = timeSlotManager.check())) {
|
|
@@ -12037,7 +12054,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
stateManager.transform(matrix);
|
|
stateManager.transform(matrix);
|
|
}
|
|
}
|
|
|
|
|
|
- return self.getTextContent(xobj,
|
|
|
|
|
|
+ return self.getTextContent(xobj, task,
|
|
xobj.dict.get('Resources') || resources, stateManager).
|
|
xobj.dict.get('Resources') || resources, stateManager).
|
|
then(function (formTextContent) {
|
|
then(function (formTextContent) {
|
|
Util.appendToArray(bidiTexts, formTextContent.items);
|
|
Util.appendToArray(bidiTexts, formTextContent.items);
|
|
@@ -12077,7 +12094,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|
if (stop) {
|
|
if (stop) {
|
|
deferred.then(function () {
|
|
deferred.then(function () {
|
|
next(resolve, reject);
|
|
next(resolve, reject);
|
|
- });
|
|
|
|
|
|
+ }, reject);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
resolve(textContent);
|
|
resolve(textContent);
|
|
@@ -12642,7 +12659,7 @@ var TranslatedFont = (function TranslatedFontClosure() {
|
|
]);
|
|
]);
|
|
this.sent = true;
|
|
this.sent = true;
|
|
},
|
|
},
|
|
- loadType3Data: function (evaluator, resources, parentOperatorList) {
|
|
|
|
|
|
+ loadType3Data: function (evaluator, resources, parentOperatorList, task) {
|
|
assert(this.font.isType3Font);
|
|
assert(this.font.isType3Font);
|
|
|
|
|
|
if (this.type3Loaded) {
|
|
if (this.type3Loaded) {
|
|
@@ -12659,7 +12676,7 @@ var TranslatedFont = (function TranslatedFontClosure() {
|
|
loadCharProcsPromise = loadCharProcsPromise.then(function (key) {
|
|
loadCharProcsPromise = loadCharProcsPromise.then(function (key) {
|
|
var glyphStream = charProcs[key];
|
|
var glyphStream = charProcs[key];
|
|
var operatorList = new OperatorList();
|
|
var operatorList = new OperatorList();
|
|
- return evaluator.getOperatorList(glyphStream, fontResources,
|
|
|
|
|
|
+ return evaluator.getOperatorList(glyphStream, task, fontResources,
|
|
operatorList).then(function () {
|
|
operatorList).then(function () {
|
|
charProcOperatorList[key] = operatorList.getIR();
|
|
charProcOperatorList[key] = operatorList.getIR();
|
|
|
|
|
|
@@ -34222,9 +34239,58 @@ var NullStream = (function NullStreamClosure() {
|
|
})();
|
|
})();
|
|
|
|
|
|
|
|
|
|
|
|
+var WorkerTask = (function WorkerTaskClosure() {
|
|
|
|
+ function WorkerTask(name) {
|
|
|
|
+ this.name = name;
|
|
|
|
+ this.terminated = false;
|
|
|
|
+ this._capability = createPromiseCapability();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ WorkerTask.prototype = {
|
|
|
|
+ get finished() {
|
|
|
|
+ return this._capability.promise;
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ finish: function () {
|
|
|
|
+ this._capability.resolve();
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ terminate: function () {
|
|
|
|
+ this.terminated = true;
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ ensureNotTerminated: function () {
|
|
|
|
+ if (this.terminated) {
|
|
|
|
+ throw new Error('Worker task was terminated');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ return WorkerTask;
|
|
|
|
+})();
|
|
|
|
+
|
|
var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
setup: function wphSetup(handler) {
|
|
setup: function wphSetup(handler) {
|
|
var pdfManager;
|
|
var pdfManager;
|
|
|
|
+ var terminated = false;
|
|
|
|
+ var cancelXHRs = null;
|
|
|
|
+ var WorkerTasks = [];
|
|
|
|
+
|
|
|
|
+ function ensureNotTerminated() {
|
|
|
|
+ if (terminated) {
|
|
|
|
+ throw new Error('Worker was terminated');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function startWorkerTask(task) {
|
|
|
|
+ WorkerTasks.push(task);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function finishWorkerTask(task) {
|
|
|
|
+ task.finish();
|
|
|
|
+ var i = WorkerTasks.indexOf(task);
|
|
|
|
+ WorkerTasks.splice(i, 1);
|
|
|
|
+ }
|
|
|
|
|
|
function loadDocument(recoveryMode) {
|
|
function loadDocument(recoveryMode) {
|
|
var loadDocumentCapability = createPromiseCapability();
|
|
var loadDocumentCapability = createPromiseCapability();
|
|
@@ -34261,13 +34327,14 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
|
|
|
|
function getPdfManager(data) {
|
|
function getPdfManager(data) {
|
|
var pdfManagerCapability = createPromiseCapability();
|
|
var pdfManagerCapability = createPromiseCapability();
|
|
|
|
+ var pdfManager;
|
|
|
|
|
|
var source = data.source;
|
|
var source = data.source;
|
|
var disableRange = data.disableRange;
|
|
var disableRange = data.disableRange;
|
|
if (source.data) {
|
|
if (source.data) {
|
|
try {
|
|
try {
|
|
pdfManager = new LocalPdfManager(source.data, source.password);
|
|
pdfManager = new LocalPdfManager(source.data, source.password);
|
|
- pdfManagerCapability.resolve();
|
|
|
|
|
|
+ pdfManagerCapability.resolve(pdfManager);
|
|
} catch (ex) {
|
|
} catch (ex) {
|
|
pdfManagerCapability.reject(ex);
|
|
pdfManagerCapability.reject(ex);
|
|
}
|
|
}
|
|
@@ -34275,7 +34342,7 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
} else if (source.chunkedViewerLoading) {
|
|
} else if (source.chunkedViewerLoading) {
|
|
try {
|
|
try {
|
|
pdfManager = new NetworkPdfManager(source, handler);
|
|
pdfManager = new NetworkPdfManager(source, handler);
|
|
- pdfManagerCapability.resolve();
|
|
|
|
|
|
+ pdfManagerCapability.resolve(pdfManager);
|
|
} catch (ex) {
|
|
} catch (ex) {
|
|
pdfManagerCapability.reject(ex);
|
|
pdfManagerCapability.reject(ex);
|
|
}
|
|
}
|
|
@@ -34336,6 +34403,7 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
} catch (ex) {
|
|
} catch (ex) {
|
|
pdfManagerCapability.reject(ex);
|
|
pdfManagerCapability.reject(ex);
|
|
}
|
|
}
|
|
|
|
+ cancelXHRs = null;
|
|
},
|
|
},
|
|
|
|
|
|
onProgressiveData: source.disableStream ? null :
|
|
onProgressiveData: source.disableStream ? null :
|
|
@@ -34376,10 +34444,11 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
// the data is array, instantiating directly from it
|
|
// the data is array, instantiating directly from it
|
|
try {
|
|
try {
|
|
pdfManager = new LocalPdfManager(pdfFile, source.password);
|
|
pdfManager = new LocalPdfManager(pdfFile, source.password);
|
|
- pdfManagerCapability.resolve();
|
|
|
|
|
|
+ pdfManagerCapability.resolve(pdfManager);
|
|
} catch (ex) {
|
|
} catch (ex) {
|
|
pdfManagerCapability.reject(ex);
|
|
pdfManagerCapability.reject(ex);
|
|
}
|
|
}
|
|
|
|
+ cancelXHRs = null;
|
|
},
|
|
},
|
|
|
|
|
|
onError: function onError(status) {
|
|
onError: function onError(status) {
|
|
@@ -34394,6 +34463,7 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
') while retrieving PDF "' + source.url + '".', status);
|
|
') while retrieving PDF "' + source.url + '".', status);
|
|
handler.send('UnexpectedResponse', exception);
|
|
handler.send('UnexpectedResponse', exception);
|
|
}
|
|
}
|
|
|
|
+ cancelXHRs = null;
|
|
},
|
|
},
|
|
|
|
|
|
onProgress: function onProgress(evt) {
|
|
onProgress: function onProgress(evt) {
|
|
@@ -34404,6 +34474,10 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ cancelXHRs = function () {
|
|
|
|
+ networkManager.abortRequest(fullRequestXhrId);
|
|
|
|
+ };
|
|
|
|
+
|
|
return pdfManagerCapability.promise;
|
|
return pdfManagerCapability.promise;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -34436,8 +34510,8 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
});
|
|
});
|
|
|
|
|
|
handler.on('GetDocRequest', function wphSetupDoc(data) {
|
|
handler.on('GetDocRequest', function wphSetupDoc(data) {
|
|
-
|
|
|
|
var onSuccess = function(doc) {
|
|
var onSuccess = function(doc) {
|
|
|
|
+ ensureNotTerminated();
|
|
handler.send('GetDoc', { pdfInfo: doc });
|
|
handler.send('GetDoc', { pdfInfo: doc });
|
|
};
|
|
};
|
|
|
|
|
|
@@ -34460,6 +34534,8 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ ensureNotTerminated();
|
|
|
|
+
|
|
PDFJS.maxImageSize = data.maxImageSize === undefined ?
|
|
PDFJS.maxImageSize = data.maxImageSize === undefined ?
|
|
-1 : data.maxImageSize;
|
|
-1 : data.maxImageSize;
|
|
PDFJS.disableFontFace = data.disableFontFace;
|
|
PDFJS.disableFontFace = data.disableFontFace;
|
|
@@ -34469,13 +34545,26 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
null : data.cMapUrl;
|
|
null : data.cMapUrl;
|
|
PDFJS.cMapPacked = data.cMapPacked === true;
|
|
PDFJS.cMapPacked = data.cMapPacked === true;
|
|
|
|
|
|
- getPdfManager(data).then(function () {
|
|
|
|
|
|
+ getPdfManager(data).then(function (newPdfManager) {
|
|
|
|
+ if (terminated) {
|
|
|
|
+ // We were in a process of setting up the manager, but it got
|
|
|
|
+ // terminated in the middle.
|
|
|
|
+ newPdfManager.terminate();
|
|
|
|
+ throw new Error('Worker was terminated');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pdfManager = newPdfManager;
|
|
|
|
+
|
|
handler.send('PDFManagerReady', null);
|
|
handler.send('PDFManagerReady', null);
|
|
pdfManager.onLoadedStream().then(function(stream) {
|
|
pdfManager.onLoadedStream().then(function(stream) {
|
|
handler.send('DataLoaded', { length: stream.bytes.byteLength });
|
|
handler.send('DataLoaded', { length: stream.bytes.byteLength });
|
|
});
|
|
});
|
|
}).then(function pdfManagerReady() {
|
|
}).then(function pdfManagerReady() {
|
|
|
|
+ ensureNotTerminated();
|
|
|
|
+
|
|
loadDocument(false).then(onSuccess, function loadFailure(ex) {
|
|
loadDocument(false).then(onSuccess, function loadFailure(ex) {
|
|
|
|
+ ensureNotTerminated();
|
|
|
|
+
|
|
// Try again with recoveryMode == true
|
|
// Try again with recoveryMode == true
|
|
if (!(ex instanceof XRefParseException)) {
|
|
if (!(ex instanceof XRefParseException)) {
|
|
if (ex instanceof PasswordException) {
|
|
if (ex instanceof PasswordException) {
|
|
@@ -34490,6 +34579,8 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
|
|
|
|
pdfManager.requestLoadedStream();
|
|
pdfManager.requestLoadedStream();
|
|
pdfManager.onLoadedStream().then(function() {
|
|
pdfManager.onLoadedStream().then(function() {
|
|
|
|
+ ensureNotTerminated();
|
|
|
|
+
|
|
loadDocument(true).then(onSuccess, onFailure);
|
|
loadDocument(true).then(onSuccess, onFailure);
|
|
});
|
|
});
|
|
}, onFailure);
|
|
}, onFailure);
|
|
@@ -34580,17 +34671,25 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
});
|
|
});
|
|
|
|
|
|
handler.on('RenderPageRequest', function wphSetupRenderPage(data) {
|
|
handler.on('RenderPageRequest', function wphSetupRenderPage(data) {
|
|
- pdfManager.getPage(data.pageIndex).then(function(page) {
|
|
|
|
|
|
+ var pageIndex = data.pageIndex;
|
|
|
|
+ pdfManager.getPage(pageIndex).then(function(page) {
|
|
|
|
+ var task = new WorkerTask('RenderPageRequest: page ' + pageIndex);
|
|
|
|
+ startWorkerTask(task);
|
|
|
|
|
|
- var pageNum = data.pageIndex + 1;
|
|
|
|
|
|
+ var pageNum = pageIndex + 1;
|
|
var start = Date.now();
|
|
var start = Date.now();
|
|
// Pre compile the pdf page and fetch the fonts/images.
|
|
// Pre compile the pdf page and fetch the fonts/images.
|
|
- page.getOperatorList(handler, data.intent).then(function(operatorList) {
|
|
|
|
|
|
+ page.getOperatorList(handler, task, data.intent).then(
|
|
|
|
+ function(operatorList) {
|
|
|
|
+ finishWorkerTask(task);
|
|
|
|
|
|
info('page=' + pageNum + ' - getOperatorList: time=' +
|
|
info('page=' + pageNum + ' - getOperatorList: time=' +
|
|
(Date.now() - start) + 'ms, len=' + operatorList.fnArray.length);
|
|
(Date.now() - start) + 'ms, len=' + operatorList.fnArray.length);
|
|
-
|
|
|
|
}, function(e) {
|
|
}, function(e) {
|
|
|
|
+ finishWorkerTask(task);
|
|
|
|
+ if (task.terminated) {
|
|
|
|
+ return; // ignoring errors from the terminated thread
|
|
|
|
+ }
|
|
|
|
|
|
var minimumStackMessage =
|
|
var minimumStackMessage =
|
|
'worker.js: while trying to getPage() and getOperatorList()';
|
|
'worker.js: while trying to getPage() and getOperatorList()';
|
|
@@ -34625,13 +34724,23 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
}, this);
|
|
}, this);
|
|
|
|
|
|
handler.on('GetTextContent', function wphExtractText(data) {
|
|
handler.on('GetTextContent', function wphExtractText(data) {
|
|
- return pdfManager.getPage(data.pageIndex).then(function(page) {
|
|
|
|
- var pageNum = data.pageIndex + 1;
|
|
|
|
|
|
+ var pageIndex = data.pageIndex;
|
|
|
|
+ return pdfManager.getPage(pageIndex).then(function(page) {
|
|
|
|
+ var task = new WorkerTask('GetTextContent: page ' + pageIndex);
|
|
|
|
+ startWorkerTask(task);
|
|
|
|
+ var pageNum = pageIndex + 1;
|
|
var start = Date.now();
|
|
var start = Date.now();
|
|
- return page.extractTextContent().then(function(textContent) {
|
|
|
|
|
|
+ return page.extractTextContent(task).then(function(textContent) {
|
|
|
|
+ finishWorkerTask(task);
|
|
info('text indexing: page=' + pageNum + ' - time=' +
|
|
info('text indexing: page=' + pageNum + ' - time=' +
|
|
(Date.now() - start) + 'ms');
|
|
(Date.now() - start) + 'ms');
|
|
return textContent;
|
|
return textContent;
|
|
|
|
+ }, function (reason) {
|
|
|
|
+ finishWorkerTask(task);
|
|
|
|
+ if (task.terminated) {
|
|
|
|
+ return; // ignoring errors from the terminated thread
|
|
|
|
+ }
|
|
|
|
+ throw reason;
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
@@ -34641,7 +34750,22 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
|
|
});
|
|
});
|
|
|
|
|
|
handler.on('Terminate', function wphTerminate(data) {
|
|
handler.on('Terminate', function wphTerminate(data) {
|
|
- pdfManager.terminate();
|
|
|
|
|
|
+ terminated = true;
|
|
|
|
+ if (pdfManager) {
|
|
|
|
+ pdfManager.terminate();
|
|
|
|
+ pdfManager = null;
|
|
|
|
+ }
|
|
|
|
+ if (cancelXHRs) {
|
|
|
|
+ cancelXHRs();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var waitOn = [];
|
|
|
|
+ WorkerTasks.forEach(function (task) {
|
|
|
|
+ waitOn.push(task.finished);
|
|
|
|
+ task.terminate();
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return Promise.all(waitOn).then(function () {});
|
|
});
|
|
});
|
|
}
|
|
}
|
|
};
|
|
};
|