Skip to content

Commit

Permalink
Merge pull request #10161 from Snuffleupagus/DataLoaded-onProgress
Browse files Browse the repository at this point in the history
Ensure that `onProgress` is always called when the entire PDF file has been loaded, regardless of how it was fetched (issue 10160)
  • Loading branch information
timvandermeij authored Oct 20, 2018
2 parents e63e2ef + 327f2eb commit d218929
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 9 deletions.
17 changes: 11 additions & 6 deletions src/display/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -1763,12 +1763,9 @@ class WorkerTransport {
fullReader.headersReady.then(() => {
// If stream or range are disabled, it's our only way to report
// loading progress.
if (!fullReader.isStreamingSupported ||
!fullReader.isRangeSupported) {
if (this._lastProgress) {
if (loadingTask.onProgress) {
loadingTask.onProgress(this._lastProgress);
}
if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
if (this._lastProgress && loadingTask.onProgress) {
loadingTask.onProgress(this._lastProgress);
}
fullReader.onProgress = (evt) => {
if (loadingTask.onProgress) {
Expand Down Expand Up @@ -1866,6 +1863,14 @@ class WorkerTransport {
}, this);

messageHandler.on('DataLoaded', function(data) {
// For consistency: Ensure that progress is always reported when the
// entire PDF file has been loaded, regardless of how it was fetched.
if (loadingTask.onProgress) {
loadingTask.onProgress({
loaded: data.length,
total: data.length,
});
}
this.downloadInfoCapability.resolve(data);
}, this);

Expand Down
17 changes: 14 additions & 3 deletions test/unit/api_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,20 @@ describe('api', function() {
// Sanity check to make sure that we fetched the entire PDF file.
expect(typedArrayPdf.length).toEqual(basicApiFileLength);

var loadingTask = getDocument(typedArrayPdf);
loadingTask.promise.then(function(data) {
expect(data instanceof PDFDocumentProxy).toEqual(true);
const loadingTask = getDocument(typedArrayPdf);

const progressReportedCapability = createPromiseCapability();
loadingTask.onProgress = function(data) {
progressReportedCapability.resolve(data);
};

Promise.all([
loadingTask.promise,
progressReportedCapability.promise,
]).then(function(data) {
expect(data[0] instanceof PDFDocumentProxy).toEqual(true);
expect(data[1].loaded / data[1].total).toEqual(1);

loadingTask.destroy().then(done);
}).catch(done.fail);
});
Expand Down

0 comments on commit d218929

Please sign in to comment.