* @return {Promise} A promise that is resolved with {PDFDocumentProxy} object.
*/
PDFJS.getDocument = function getDocument(source) {
- var url, data, headers, password, parameters = {};
+ var url, data, headers, password, parameters = {}, workerInitializedPromise, workerReadyPromise, transport;
if (typeof source === 'string') {
url = source;
} else if (isArrayBuffer(source)) {
'string or a parameter object');
}
- var promise = new PDFJS.Promise();
- var transport = new WorkerTransport(promise);
+ workerInitializedPromise = new PDFJS.Promise();
+ workerReadyPromise = new PDFJS.Promise();
+ transport = new WorkerTransport(workerInitializedPromise, workerReadyPromise);
if (data) {
// assuming the data is array, instantiating directly from it
transport.sendData(data, parameters);
url: url,
progress: function getPDFProgress(evt) {
if (evt.lengthComputable)
- promise.progress({
+ workerReadyPromise.progress({
loaded: evt.loaded,
total: evt.total
});
},
error: function getPDFError(e) {
- promise.reject('Unexpected server response of ' +
+ workerReadyPromise.reject('Unexpected server response of ' +
e.target.status + '.');
},
headers: headers
},
function getPDFLoad(data) {
- transport.sendData(data, parameters);
+ //we have to wait for the WorkerTransport to finalize worker-support detection! This may take a while...
+ workerInitializedPromise.then(function () {
+ transport.sendData(data, parameters);
+ });
});
}
- return promise;
+ return workerReadyPromise;
};
/**
* For internal use only.
*/
var WorkerTransport = (function WorkerTransportClosure() {
- function WorkerTransport(promise) {
- this.workerReadyPromise = promise;
+ function WorkerTransport(workerInitializedPromise, workerReadyPromise) {
+ this.workerReadyPromise = workerReadyPromise;
this.objs = new PDFObjects();
this.pageCache = [];
globalScope.PDFJS.disableWorker = true;
this.setupFakeWorker();
}
+ workerInitializedPromise.resolve();
}.bind(this));
var testObj = new Uint8Array(1);
// Thus, we fallback to a faked worker.
globalScope.PDFJS.disableWorker = true;
this.setupFakeWorker();
+ workerInitializedPromise.resolve();
}
WorkerTransport.prototype = {
destroy: function WorkerTransport_destroy() {