From 2a19dc86e74fd4ce8b7bab05e4104c46e98f2596 Mon Sep 17 00:00:00 2001 From: Rob Wu Date: Thu, 6 Feb 2014 23:05:19 +0100 Subject: [PATCH] Do not switch to a range request for small PDFs --- src/core/pdf_manager.js | 8 ++++---- src/core/worker.js | 10 ++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/core/pdf_manager.js b/src/core/pdf_manager.js index de7b59447..b6343b1cf 100644 --- a/src/core/pdf_manager.js +++ b/src/core/pdf_manager.js @@ -19,6 +19,9 @@ 'use strict'; +// The maximum number of bytes fetched per range request +var RANGE_CHUNK_SIZE = 65536; + // TODO(mack): Make use of PDFJS.Util.inherit() when it becomes available var BasePdfManager = (function BasePdfManagerClosure() { function BasePdfManager() { @@ -132,9 +135,6 @@ var LocalPdfManager = (function LocalPdfManagerClosure() { })(); var NetworkPdfManager = (function NetworkPdfManagerClosure() { - - var CHUNK_SIZE = 65536; - function NetworkPdfManager(args, msgHandler) { this.msgHandler = msgHandler; @@ -147,7 +147,7 @@ var NetworkPdfManager = (function NetworkPdfManagerClosure() { disableAutoFetch: args.disableAutoFetch, initialData: args.initialData }; - this.streamManager = new ChunkedStreamManager(args.length, CHUNK_SIZE, + this.streamManager = new ChunkedStreamManager(args.length, RANGE_CHUNK_SIZE, args.url, params); this.pdfModel = new PDFDocument(this, this.streamManager.getStream(), diff --git a/src/core/worker.js b/src/core/worker.js index 2b85412d7..b72d54529 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -18,7 +18,7 @@ MissingPDFException, PasswordException, PDFJS, Promise, UnknownErrorException, NetworkManager, LocalPdfManager, NetworkPdfManager, XRefParseException, LegacyPromise, - isInt, PasswordResponses, MessageHandler, Ref */ + isInt, PasswordResponses, MessageHandler, Ref, RANGE_CHUNK_SIZE */ 'use strict'; @@ -119,6 +119,13 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = { if (!isInt(length)) { return; } + source.length = length; + if (length <= 2 * RANGE_CHUNK_SIZE) { + // The file size is smaller than the size of two chunks, so it does + // not make any sense to abort the request and retry with a range + // request. + return; + } // NOTE: by cancelling the full request, and then issuing range // requests, there will be an issue for sites where you can only @@ -126,7 +133,6 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = { // server should not be returning that it can support range requests. networkManager.abortRequest(fullRequestXhrId); - source.length = length; try { pdfManager = new NetworkPdfManager(source, handler); pdfManagerPromise.resolve(pdfManager);