From e0d4b322cfe7bfc77b1df1ab9c8f5542d6040c19 Mon Sep 17 00:00:00 2001 From: Mack Duan Date: Sat, 20 Apr 2013 17:36:10 -0700 Subject: [PATCH] Only perform range requests for identity Content-Encoding --- .../firefox/components/PdfStreamConverter.js | 31 ++++++++++++++----- src/worker.js | 6 ++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/extensions/firefox/components/PdfStreamConverter.js b/extensions/firefox/components/PdfStreamConverter.js index 71c4d897b..a637bec1b 100644 --- a/extensions/firefox/components/PdfStreamConverter.js +++ b/extensions/firefox/components/PdfStreamConverter.js @@ -692,17 +692,34 @@ PdfStreamConverter.prototype = { // nsIRequestObserver::onStartRequest onStartRequest: function(aRequest, aContext) { // Setup the request so we can use it below. - var acceptRanges = false; + var isHttpRequest = false; try { aRequest.QueryInterface(Ci.nsIHttpChannel); - if (aRequest.getResponseHeader('Accept-Ranges') === 'bytes') { - var hash = aRequest.URI.ref; - acceptRanges = hash.indexOf('disableRange=true') < 0; - } + isHttpRequest = true; } catch (e) {} + + var rangeRequest = false; + if (isHttpRequest) { + var contentEncoding = 'identity'; + try { + contentEncoding = aRequest.getResponseHeader('Content-Encoding'); + } catch (e) {} + + var acceptRanges; + try { + acceptRanges = aRequest.getResponseHeader('Accept-Ranges'); + } catch (e) {} + + var hash = aRequest.URI.ref; + rangeRequest = contentEncoding === 'identity' && + acceptRanges === 'bytes' && + hash.indexOf('disableRange=true') < 0; + } + aRequest.QueryInterface(Ci.nsIChannel); aRequest.QueryInterface(Ci.nsIWritablePropertyBag); + var contentDispositionFilename; try { contentDispositionFilename = aRequest.contentDispositionFilename; @@ -712,7 +729,7 @@ PdfStreamConverter.prototype = { aRequest.setProperty('contentType', aRequest.contentType); aRequest.contentType = 'text/html'; - if (!acceptRanges) { + if (!rangeRequest) { // Creating storage for PDF data var contentLength = aRequest.contentLength; this.dataListener = new PdfDataListener(contentLength); @@ -750,7 +767,7 @@ PdfStreamConverter.prototype = { // Double check the url is still the correct one. if (domWindow.document.documentURIObject.equals(aRequest.URI)) { var actions; - if (acceptRanges) { + if (rangeRequest) { // We are going to be issuing range requests, so cancel the // original request aRequest.resume(); diff --git a/src/worker.js b/src/worker.js index d3d73d415..a77387385 100644 --- a/src/worker.js +++ b/src/worker.js @@ -183,6 +183,12 @@ var WorkerMessageHandler = { return; } + var contentEncoding = + fullRequestXhr.getResponseHeader('Content-Encoding') || 'identity'; + if (contentEncoding !== 'identity') { + return; + } + var length = fullRequestXhr.getResponseHeader('Content-Length'); length = parseInt(length, 10); if (!isInt(length)) {