diff --git a/extensions/firefox/components/PdfStreamConverter.js b/extensions/firefox/components/PdfStreamConverter.js index d5b12dbde..f8a5a315f 100644 --- a/extensions/firefox/components/PdfStreamConverter.js +++ b/extensions/firefox/components/PdfStreamConverter.js @@ -131,29 +131,29 @@ function PdfDataListener(length) { } PdfDataListener.prototype = { - set: function PdfDataListener_set(chunk, offset) { - if (this.length < 0) { - var willBeLoaded = this.loaded + chunk.length; + append: function PdfDataListener_append(chunk) { + var willBeLoaded = this.loaded + chunk.length; + if (this.length >= 0 && this.length < willBeLoaded) { + this.length = -1; // reset the length, server is giving incorrect one + } + if (this.length < 0 && this.data.length < willBeLoaded) { // data length is unknown and new chunk will not fit in the existing // buffer, resizing the buffer by doubling the its last length - if (this.data.length < willBeLoaded) { - var newLength = this.data.length; - for (; newLength < willBeLoaded; newLength *= 2) {} - var newData = new Uint8Array(newLength); - newData.set(this.data); - this.data = newData; - } - this.data.set(chunk, this.loaded); - this.loaded = willBeLoaded; - } else { - this.data.set(chunk, offset); - this.loaded = offset + chunk.length; - this.onprogress(this.loaded, this.length); + var newLength = this.data.length; + for (; newLength < willBeLoaded; newLength *= 2) {} + var newData = new Uint8Array(newLength); + newData.set(this.data); + this.data = newData; } + this.data.set(chunk, this.loaded); + this.loaded = willBeLoaded; + if (this.length >= 0) + this.onprogress(this.loaded, this.length); }, getData: function PdfDataListener_getData() { - var data = this.length >= 0 ? this.data : - this.data.subarray(0, this.loaded); + var data = this.data; + if (this.loaded != data.length) + data = data.subarray(0, this.loaded); delete this.data; // releasing temporary storage return data; }, @@ -462,7 +462,7 @@ PdfStreamConverter.prototype = { var binaryStream = this.binaryStream; binaryStream.setInputStream(aInputStream); - this.dataListener.set(binaryStream.readByteArray(aCount), aOffset); + this.dataListener.append(binaryStream.readByteArray(aCount)); }, // nsIRequestObserver::onStartRequest