diff --git a/src/display/transport_stream.js b/src/display/transport_stream.js index 32d916307..04b7a7c70 100644 --- a/src/display/transport_stream.js +++ b/src/display/transport_stream.js @@ -12,12 +12,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +/* eslint no-var: error */ import { assert, createPromiseCapability } from '../shared/util'; - /** @implements {IPDFStream} */ -var PDFDataTransportStream = (function PDFDataTransportStreamClosure() { - function PDFDataTransportStream(params, pdfDataRangeTransport) { +/** @implements {IPDFStream} */ +class PDFDataTransportStream { + constructor(params, pdfDataRangeTransport) { assert(pdfDataRangeTransport); this._queuedChunks = []; @@ -25,7 +26,7 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() { const initialData = params.initialData; if (initialData && initialData.length > 0) { - let buffer = new Uint8Array(initialData).buffer; + const buffer = new Uint8Array(initialData).buffer; this._queuedChunks.push(buffer); } @@ -55,95 +56,93 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() { this._pdfDataRangeTransport.transportReady(); } - PDFDataTransportStream.prototype = { - _onReceiveData: function PDFDataTransportStream_onReceiveData(args) { - let buffer = new Uint8Array(args.chunk).buffer; - if (args.begin === undefined) { - if (this._fullRequestReader) { - this._fullRequestReader._enqueue(buffer); - } else { - this._queuedChunks.push(buffer); - } - } else { - var found = this._rangeReaders.some(function (rangeReader) { - if (rangeReader._begin !== args.begin) { - return false; - } - rangeReader._enqueue(buffer); - return true; - }); - assert(found); - } - }, - get _progressiveDataLength() { - return (this._fullRequestReader ? this._fullRequestReader._loaded : 0); - }, - - _onProgress: function PDFDataTransportStream_onDataProgress(evt) { - if (evt.total === undefined) { - // Reporting to first range reader, if it exists. - let firstReader = this._rangeReaders[0]; - if (firstReader && firstReader.onProgress) { - firstReader.onProgress({ loaded: evt.loaded, }); - } + _onReceiveData(args) { + const buffer = new Uint8Array(args.chunk).buffer; + if (args.begin === undefined) { + if (this._fullRequestReader) { + this._fullRequestReader._enqueue(buffer); } else { - let fullReader = this._fullRequestReader; - if (fullReader && fullReader.onProgress) { - fullReader.onProgress({ loaded: evt.loaded, total: evt.total, }); + this._queuedChunks.push(buffer); + } + } else { + const found = this._rangeReaders.some(function(rangeReader) { + if (rangeReader._begin !== args.begin) { + return false; } - } - }, - - _onProgressiveDone() { - if (this._fullRequestReader) { - this._fullRequestReader.progressiveDone(); - } - this._progressiveDone = true; - }, - - _removeRangeReader: - function PDFDataTransportStream_removeRangeReader(reader) { - var i = this._rangeReaders.indexOf(reader); - if (i >= 0) { - this._rangeReaders.splice(i, 1); - } - }, - - getFullReader: function PDFDataTransportStream_getFullReader() { - assert(!this._fullRequestReader); - var queuedChunks = this._queuedChunks; - this._queuedChunks = null; - return new PDFDataTransportStreamReader(this, queuedChunks, - this._progressiveDone); - }, - - getRangeReader: function PDFDataTransportStream_getRangeReader(begin, end) { - if (end <= this._progressiveDataLength) { - return null; - } - var reader = new PDFDataTransportStreamRangeReader(this, begin, end); - this._pdfDataRangeTransport.requestDataRange(begin, end); - this._rangeReaders.push(reader); - return reader; - }, - - cancelAllRequests: - function PDFDataTransportStream_cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - var readers = this._rangeReaders.slice(0); - readers.forEach(function (rangeReader) { - rangeReader.cancel(reason); + rangeReader._enqueue(buffer); + return true; }); - this._pdfDataRangeTransport.abort(); - }, - }; + assert(found); + } + } - /** @implements {IPDFStreamReader} */ - function PDFDataTransportStreamReader(stream, queuedChunks, - progressiveDone = false) { + get _progressiveDataLength() { + return (this._fullRequestReader ? this._fullRequestReader._loaded : 0); + } + + _onProgress(evt) { + if (evt.total === undefined) { + // Reporting to first range reader, if it exists. + const firstReader = this._rangeReaders[0]; + if (firstReader && firstReader.onProgress) { + firstReader.onProgress({ loaded: evt.loaded, }); + } + } else { + const fullReader = this._fullRequestReader; + if (fullReader && fullReader.onProgress) { + fullReader.onProgress({ loaded: evt.loaded, total: evt.total, }); + } + } + } + + _onProgressiveDone() { + if (this._fullRequestReader) { + this._fullRequestReader.progressiveDone(); + } + this._progressiveDone = true; + } + + _removeRangeReader(reader) { + const i = this._rangeReaders.indexOf(reader); + if (i >= 0) { + this._rangeReaders.splice(i, 1); + } + } + + getFullReader() { + assert(!this._fullRequestReader); + const queuedChunks = this._queuedChunks; + this._queuedChunks = null; + return new PDFDataTransportStreamReader(this, queuedChunks, + this._progressiveDone); + } + + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFDataTransportStreamRangeReader(this, begin, end); + this._pdfDataRangeTransport.requestDataRange(begin, end); + this._rangeReaders.push(reader); + return reader; + } + + cancelAllRequests(reason) { + if (this._fullRequestReader) { + this._fullRequestReader.cancel(reason); + } + const readers = this._rangeReaders.slice(0); + readers.forEach(function(rangeReader) { + rangeReader.cancel(reason); + }); + this._pdfDataRangeTransport.abort(); + } +} + +/** @implements {IPDFStreamReader} */ +class PDFDataTransportStreamReader { + constructor(stream, queuedChunks, progressiveDone = false) { this._stream = stream; this._done = progressiveDone || false; this._filename = null; @@ -156,73 +155,74 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() { this._headersReady = Promise.resolve(); stream._fullRequestReader = this; - this.onProgress = null; // not used + this.onProgress = null; } - PDFDataTransportStreamReader.prototype = { - _enqueue: function PDFDataTransportStreamReader_enqueue(chunk) { - if (this._done) { - return; // ignore new data - } - if (this._requests.length > 0) { - var requestCapability = this._requests.shift(); - requestCapability.resolve({ value: chunk, done: false, }); - } else { - this._queuedChunks.push(chunk); - } - this._loaded += chunk.byteLength; - }, - get headersReady() { - return this._headersReady; - }, + _enqueue(chunk) { + if (this._done) { + return; // Ignore new data. + } + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ value: chunk, done: false, }); + } else { + this._queuedChunks.push(chunk); + } + this._loaded += chunk.byteLength; + } - get filename() { - return this._filename; - }, + get headersReady() { + return this._headersReady; + } - get isRangeSupported() { - return this._stream._isRangeSupported; - }, + get filename() { + return this._filename; + } - get isStreamingSupported() { - return this._stream._isStreamingSupported; - }, + get isRangeSupported() { + return this._stream._isRangeSupported; + } - get contentLength() { - return this._stream._contentLength; - }, + get isStreamingSupported() { + return this._stream._isStreamingSupported; + } - async read() { - if (this._queuedChunks.length > 0) { - var chunk = this._queuedChunks.shift(); - return { value: chunk, done: false, }; - } - if (this._done) { - return { value: undefined, done: true, }; - } - var requestCapability = createPromiseCapability(); - this._requests.push(requestCapability); - return requestCapability.promise; - }, + get contentLength() { + return this._stream._contentLength; + } - cancel: function PDFDataTransportStreamReader_cancel(reason) { - this._done = true; - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ value: undefined, done: true, }); - }); - this._requests = []; - }, + async read() { + if (this._queuedChunks.length > 0) { + const chunk = this._queuedChunks.shift(); + return { value: chunk, done: false, }; + } + if (this._done) { + return { value: undefined, done: true, }; + } + const requestCapability = createPromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } - progressiveDone() { - if (this._done) { - return; - } - this._done = true; - }, - }; + cancel(reason) { + this._done = true; + this._requests.forEach(function(requestCapability) { + requestCapability.resolve({ value: undefined, done: true, }); + }); + this._requests = []; + } - /** @implements {IPDFStreamRangeReader} */ - function PDFDataTransportStreamRangeReader(stream, begin, end) { + progressiveDone() { + if (this._done) { + return; + } + this._done = true; + } +} + +/** @implements {IPDFStreamRangeReader} */ +class PDFDataTransportStreamRangeReader { + constructor(stream, begin, end) { this._stream = stream; this._begin = begin; this._end = end; @@ -232,55 +232,52 @@ var PDFDataTransportStream = (function PDFDataTransportStreamClosure() { this.onProgress = null; } - PDFDataTransportStreamRangeReader.prototype = { - _enqueue: function PDFDataTransportStreamRangeReader_enqueue(chunk) { - if (this._done) { - return; // ignore new data - } - if (this._requests.length === 0) { - this._queuedChunk = chunk; - } else { - var requestsCapability = this._requests.shift(); - requestsCapability.resolve({ value: chunk, done: false, }); - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ value: undefined, done: true, }); - }); - this._requests = []; - } - this._done = true; - this._stream._removeRangeReader(this); - }, - get isStreamingSupported() { - return false; - }, - - async read() { - if (this._queuedChunk) { - let chunk = this._queuedChunk; - this._queuedChunk = null; - return { value: chunk, done: false, }; - } - if (this._done) { - return { value: undefined, done: true, }; - } - var requestCapability = createPromiseCapability(); - this._requests.push(requestCapability); - return requestCapability.promise; - }, - - cancel: function PDFDataTransportStreamRangeReader_cancel(reason) { - this._done = true; - this._requests.forEach(function (requestCapability) { + _enqueue(chunk) { + if (this._done) { + return; // ignore new data + } + if (this._requests.length === 0) { + this._queuedChunk = chunk; + } else { + const requestsCapability = this._requests.shift(); + requestsCapability.resolve({ value: chunk, done: false, }); + this._requests.forEach(function(requestCapability) { requestCapability.resolve({ value: undefined, done: true, }); }); this._requests = []; - this._stream._removeRangeReader(this); - }, - }; + } + this._done = true; + this._stream._removeRangeReader(this); + } - return PDFDataTransportStream; -})(); + get isStreamingSupported() { + return false; + } + + async read() { + if (this._queuedChunk) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { value: chunk, done: false, }; + } + if (this._done) { + return { value: undefined, done: true, }; + } + const requestCapability = createPromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + + cancel(reason) { + this._done = true; + this._requests.forEach(function(requestCapability) { + requestCapability.resolve({ value: undefined, done: true, }); + }); + this._requests = []; + this._stream._removeRangeReader(this); + } +} export { PDFDataTransportStream,