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:
commit
665ff0d36f
2 changed files with 43 additions and 12 deletions
32
src/api.js
32
src/api.js
|
@ -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() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue