1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-20 23:28:06 +02:00

Merge pull request #1849 from kingsquare/master

Fix for web worker test in Safari
This commit is contained in:
Yury Delendik 2012-06-28 03:05:04 -07:00
commit 665ff0d36f
2 changed files with 43 additions and 12 deletions

View file

@ -18,7 +18,9 @@
* @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)) {
@ -37,8 +39,9 @@ PDFJS.getDocument = function getDocument(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);
@ -48,24 +51,31 @@ PDFJS.getDocument = function getDocument(source) {
{
url: url,
progress: function getPDFProgress(evt) {
if (evt.lengthComputable)
promise.progress({
if (evt.lengthComputable) {
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);
// sometimes the pdf has finished downloading before the web worker-test
// has finished. In that case the rendering of the final pdf would cause
// errors. We have to wait for the WorkerTransport to finalize worker-
// support detection
workerInitializedPromise.then(function workerInitialized() {
transport.sendData(data, parameters);
});
});
}
return promise;
return workerReadyPromise;
};
/**
@ -426,8 +436,8 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
* 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 = [];
@ -471,6 +481,7 @@ var WorkerTransport = (function WorkerTransportClosure() {
globalScope.PDFJS.disableWorker = true;
this.setupFakeWorker();
}
workerInitializedPromise.resolve();
}.bind(this));
var testObj = new Uint8Array(1);
@ -486,6 +497,7 @@ var WorkerTransport = (function WorkerTransportClosure() {
// Thus, we fallback to a faked worker.
globalScope.PDFJS.disableWorker = true;
this.setupFakeWorker();
workerInitializedPromise.resolve();
}
WorkerTransport.prototype = {
destroy: function WorkerTransport_destroy() {