Convert network.js to use ES6 classes
				
					
				
			This commit is contained in:
		
							parent
							
								
									cc661a4d38
								
							
						
					
					
						commit
						f9769af365
					
				| @ -12,6 +12,7 @@ | |||||||
|  * See the License for the specific language governing permissions and |  * See the License for the specific language governing permissions and | ||||||
|  * limitations under the License. |  * limitations under the License. | ||||||
|  */ |  */ | ||||||
|  | /* eslint no-var: error */ | ||||||
| 
 | 
 | ||||||
| import { assert, createPromiseCapability, stringToBytes } from '../shared/util'; | import { assert, createPromiseCapability, stringToBytes } from '../shared/util'; | ||||||
| import { | import { | ||||||
| @ -24,10 +25,20 @@ if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('FIREFOX || MOZCENTRAL')) { | |||||||
|                   'be used with FIREFOX or MOZCENTRAL build.'); |                   'be used with FIREFOX or MOZCENTRAL build.'); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var OK_RESPONSE = 200; | const OK_RESPONSE = 200; | ||||||
| var PARTIAL_CONTENT_RESPONSE = 206; | const PARTIAL_CONTENT_RESPONSE = 206; | ||||||
| 
 | 
 | ||||||
| function NetworkManager(url, args) { | function getArrayBuffer(xhr) { | ||||||
|  |   const data = xhr.response; | ||||||
|  |   if (typeof data !== 'string') { | ||||||
|  |     return data; | ||||||
|  |   } | ||||||
|  |   const array = stringToBytes(data); | ||||||
|  |   return array.buffer; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class NetworkManager { | ||||||
|  |   constructor(url, args) { | ||||||
|     this.url = url; |     this.url = url; | ||||||
|     args = args || {}; |     args = args || {}; | ||||||
|     this.isHttp = /^https?:/i.test(url); |     this.isHttp = /^https?:/i.test(url); | ||||||
| @ -42,53 +53,42 @@ function NetworkManager(url, args) { | |||||||
|     this.pendingRequests = Object.create(null); |     this.pendingRequests = Object.create(null); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| function getArrayBuffer(xhr) { |   requestRange(begin, end, listeners) { | ||||||
|   var data = xhr.response; |     const args = { | ||||||
|   if (typeof data !== 'string') { |  | ||||||
|     return data; |  | ||||||
|   } |  | ||||||
|   let array = stringToBytes(data); |  | ||||||
|   return array.buffer; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| NetworkManager.prototype = { |  | ||||||
|   requestRange: function NetworkManager_requestRange(begin, end, listeners) { |  | ||||||
|     var args = { |  | ||||||
|       begin, |       begin, | ||||||
|       end, |       end, | ||||||
|     }; |     }; | ||||||
|     for (var prop in listeners) { |     for (const prop in listeners) { | ||||||
|       args[prop] = listeners[prop]; |       args[prop] = listeners[prop]; | ||||||
|     } |     } | ||||||
|     return this.request(args); |     return this.request(args); | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   requestFull: function NetworkManager_requestFull(listeners) { |   requestFull(listeners) { | ||||||
|     return this.request(listeners); |     return this.request(listeners); | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   request: function NetworkManager_request(args) { |   request(args) { | ||||||
|     var xhr = this.getXhr(); |     const xhr = this.getXhr(); | ||||||
|     var xhrId = this.currXhrId++; |     const xhrId = this.currXhrId++; | ||||||
|     var pendingRequest = this.pendingRequests[xhrId] = { |     const pendingRequest = this.pendingRequests[xhrId] = { | ||||||
|       xhr, |       xhr, | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     xhr.open('GET', this.url); |     xhr.open('GET', this.url); | ||||||
|     xhr.withCredentials = this.withCredentials; |     xhr.withCredentials = this.withCredentials; | ||||||
|     for (var property in this.httpHeaders) { |     for (const property in this.httpHeaders) { | ||||||
|       var value = this.httpHeaders[property]; |       const value = this.httpHeaders[property]; | ||||||
|       if (typeof value === 'undefined') { |       if (typeof value === 'undefined') { | ||||||
|         continue; |         continue; | ||||||
|       } |       } | ||||||
|       xhr.setRequestHeader(property, value); |       xhr.setRequestHeader(property, value); | ||||||
|     } |     } | ||||||
|     if (this.isHttp && 'begin' in args && 'end' in args) { |     if (this.isHttp && 'begin' in args && 'end' in args) { | ||||||
|       var rangeStr = args.begin + '-' + (args.end - 1); |       xhr.setRequestHeader('Range', `bytes=${args.begin}-${args.end - 1}`); | ||||||
|       xhr.setRequestHeader('Range', 'bytes=' + rangeStr); |       pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; | ||||||
|       pendingRequest.expectedStatus = 206; |  | ||||||
|     } else { |     } else { | ||||||
|       pendingRequest.expectedStatus = 200; |       pendingRequest.expectedStatus = OK_RESPONSE; | ||||||
|     } |     } | ||||||
|     xhr.responseType = 'arraybuffer'; |     xhr.responseType = 'arraybuffer'; | ||||||
| 
 | 
 | ||||||
| @ -108,10 +108,10 @@ NetworkManager.prototype = { | |||||||
|     xhr.send(null); |     xhr.send(null); | ||||||
| 
 | 
 | ||||||
|     return xhrId; |     return xhrId; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   onProgress: function NetworkManager_onProgress(xhrId, evt) { |   onProgress(xhrId, evt) { | ||||||
|     var pendingRequest = this.pendingRequests[xhrId]; |     const pendingRequest = this.pendingRequests[xhrId]; | ||||||
|     if (!pendingRequest) { |     if (!pendingRequest) { | ||||||
|       // Maybe abortRequest was called...
 |       // Maybe abortRequest was called...
 | ||||||
|       return; |       return; | ||||||
| @ -120,16 +120,16 @@ NetworkManager.prototype = { | |||||||
|     if (pendingRequest.onProgress) { |     if (pendingRequest.onProgress) { | ||||||
|       pendingRequest.onProgress(evt); |       pendingRequest.onProgress(evt); | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   onStateChange: function NetworkManager_onStateChange(xhrId, evt) { |   onStateChange(xhrId, evt) { | ||||||
|     var pendingRequest = this.pendingRequests[xhrId]; |     const pendingRequest = this.pendingRequests[xhrId]; | ||||||
|     if (!pendingRequest) { |     if (!pendingRequest) { | ||||||
|       // Maybe abortRequest was called...
 |       // Maybe abortRequest was called...
 | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     var xhr = pendingRequest.xhr; |     const xhr = pendingRequest.xhr; | ||||||
|     if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { |     if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { | ||||||
|       pendingRequest.onHeadersReceived(); |       pendingRequest.onHeadersReceived(); | ||||||
|       delete pendingRequest.onHeadersReceived; |       delete pendingRequest.onHeadersReceived; | ||||||
| @ -141,25 +141,25 @@ NetworkManager.prototype = { | |||||||
| 
 | 
 | ||||||
|     if (!(xhrId in this.pendingRequests)) { |     if (!(xhrId in this.pendingRequests)) { | ||||||
|       // The XHR request might have been aborted in onHeadersReceived()
 |       // The XHR request might have been aborted in onHeadersReceived()
 | ||||||
|       // callback, in which case we should abort request
 |       // callback, in which case we should abort request.
 | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     delete this.pendingRequests[xhrId]; |     delete this.pendingRequests[xhrId]; | ||||||
| 
 | 
 | ||||||
|     // success status == 0 can be on ftp, file and other protocols
 |     // Success status == 0 can be on ftp, file and other protocols.
 | ||||||
|     if (xhr.status === 0 && this.isHttp) { |     if (xhr.status === 0 && this.isHttp) { | ||||||
|       if (pendingRequest.onError) { |       if (pendingRequest.onError) { | ||||||
|         pendingRequest.onError(xhr.status); |         pendingRequest.onError(xhr.status); | ||||||
|       } |       } | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     var xhrStatus = xhr.status || OK_RESPONSE; |     const xhrStatus = xhr.status || OK_RESPONSE; | ||||||
| 
 | 
 | ||||||
|     // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:
 |     // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:
 | ||||||
|     // "A server MAY ignore the Range header". This means it's possible to
 |     // "A server MAY ignore the Range header". This means it's possible to
 | ||||||
|     // get a 200 rather than a 206 response from a range request.
 |     // get a 200 rather than a 206 response from a range request.
 | ||||||
|     var ok_response_on_range_request = |     const ok_response_on_range_request = | ||||||
|       xhrStatus === OK_RESPONSE && |       xhrStatus === OK_RESPONSE && | ||||||
|       pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; |       pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; | ||||||
| 
 | 
 | ||||||
| @ -171,13 +171,12 @@ NetworkManager.prototype = { | |||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     var chunk = getArrayBuffer(xhr); |     const chunk = getArrayBuffer(xhr); | ||||||
|     if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { |     if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { | ||||||
|       var rangeHeader = xhr.getResponseHeader('Content-Range'); |       const rangeHeader = xhr.getResponseHeader('Content-Range'); | ||||||
|       var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); |       const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); | ||||||
|       var begin = parseInt(matches[1], 10); |  | ||||||
|       pendingRequest.onDone({ |       pendingRequest.onDone({ | ||||||
|         begin, |         begin: parseInt(matches[1], 10), | ||||||
|         chunk, |         chunk, | ||||||
|       }); |       }); | ||||||
|     } else if (chunk) { |     } else if (chunk) { | ||||||
| @ -188,38 +187,39 @@ NetworkManager.prototype = { | |||||||
|     } else if (pendingRequest.onError) { |     } else if (pendingRequest.onError) { | ||||||
|       pendingRequest.onError(xhr.status); |       pendingRequest.onError(xhr.status); | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   hasPendingRequests: function NetworkManager_hasPendingRequests() { |   hasPendingRequests() { | ||||||
|     for (var xhrId in this.pendingRequests) { |     for (const xhrId in this.pendingRequests) { | ||||||
|       return true; |       return true; | ||||||
|     } |     } | ||||||
|     return false; |     return false; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   getRequestXhr: function NetworkManager_getXhr(xhrId) { |   getRequestXhr(xhrId) { | ||||||
|     return this.pendingRequests[xhrId].xhr; |     return this.pendingRequests[xhrId].xhr; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   isPendingRequest: function NetworkManager_isPendingRequest(xhrId) { |   isPendingRequest(xhrId) { | ||||||
|     return xhrId in this.pendingRequests; |     return xhrId in this.pendingRequests; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   abortAllRequests: function NetworkManager_abortAllRequests() { |   abortAllRequests() { | ||||||
|     for (var xhrId in this.pendingRequests) { |     for (const xhrId in this.pendingRequests) { | ||||||
|       this.abortRequest(xhrId | 0); |       this.abortRequest(xhrId | 0); | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   abortRequest: function NetworkManager_abortRequest(xhrId) { |   abortRequest(xhrId) { | ||||||
|     var xhr = this.pendingRequests[xhrId].xhr; |     const xhr = this.pendingRequests[xhrId].xhr; | ||||||
|     delete this.pendingRequests[xhrId]; |     delete this.pendingRequests[xhrId]; | ||||||
|     xhr.abort(); |     xhr.abort(); | ||||||
|   }, |   } | ||||||
| }; | } | ||||||
| 
 | 
 | ||||||
| /** @implements {IPDFStream} */ | /** @implements {IPDFStream} */ | ||||||
| function PDFNetworkStream(source) { | class PDFNetworkStream { | ||||||
|  |   constructor(source) { | ||||||
|     this._source = source; |     this._source = source; | ||||||
|     this._manager = new NetworkManager(source.url, { |     this._manager = new NetworkManager(source.url, { | ||||||
|       httpHeaders: source.httpHeaders, |       httpHeaders: source.httpHeaders, | ||||||
| @ -230,46 +230,45 @@ function PDFNetworkStream(source) { | |||||||
|     this._rangeRequestReaders = []; |     this._rangeRequestReaders = []; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| PDFNetworkStream.prototype = { |   _onRangeRequestReaderClosed(reader) { | ||||||
|   _onRangeRequestReaderClosed: |     const i = this._rangeRequestReaders.indexOf(reader); | ||||||
|       function PDFNetworkStream_onRangeRequestReaderClosed(reader) { |  | ||||||
|     var i = this._rangeRequestReaders.indexOf(reader); |  | ||||||
|     if (i >= 0) { |     if (i >= 0) { | ||||||
|       this._rangeRequestReaders.splice(i, 1); |       this._rangeRequestReaders.splice(i, 1); | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   getFullReader: function PDFNetworkStream_getFullReader() { |   getFullReader() { | ||||||
|     assert(!this._fullRequestReader); |     assert(!this._fullRequestReader); | ||||||
|     this._fullRequestReader = |     this._fullRequestReader = | ||||||
|       new PDFNetworkStreamFullRequestReader(this._manager, this._source); |       new PDFNetworkStreamFullRequestReader(this._manager, this._source); | ||||||
|     return this._fullRequestReader; |     return this._fullRequestReader; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   getRangeReader: function PDFNetworkStream_getRangeReader(begin, end) { |   getRangeReader(begin, end) { | ||||||
|     var reader = new PDFNetworkStreamRangeRequestReader(this._manager, |     const reader = new PDFNetworkStreamRangeRequestReader(this._manager, | ||||||
|                                                           begin, end); |                                                           begin, end); | ||||||
|     reader.onClosed = this._onRangeRequestReaderClosed.bind(this); |     reader.onClosed = this._onRangeRequestReaderClosed.bind(this); | ||||||
|     this._rangeRequestReaders.push(reader); |     this._rangeRequestReaders.push(reader); | ||||||
|     return reader; |     return reader; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   cancelAllRequests: function PDFNetworkStream_cancelAllRequests(reason) { |   cancelAllRequests(reason) { | ||||||
|     if (this._fullRequestReader) { |     if (this._fullRequestReader) { | ||||||
|       this._fullRequestReader.cancel(reason); |       this._fullRequestReader.cancel(reason); | ||||||
|     } |     } | ||||||
|     var readers = this._rangeRequestReaders.slice(0); |     const readers = this._rangeRequestReaders.slice(0); | ||||||
|     readers.forEach(function(reader) { |     readers.forEach(function(reader) { | ||||||
|       reader.cancel(reason); |       reader.cancel(reason); | ||||||
|     }); |     }); | ||||||
|   }, |   } | ||||||
| }; | } | ||||||
| 
 | 
 | ||||||
| /** @implements {IPDFStreamReader} */ | /** @implements {IPDFStreamReader} */ | ||||||
| function PDFNetworkStreamFullRequestReader(manager, source) { | class PDFNetworkStreamFullRequestReader { | ||||||
|  |   constructor(manager, source) { | ||||||
|     this._manager = manager; |     this._manager = manager; | ||||||
| 
 | 
 | ||||||
|   var args = { |     const args = { | ||||||
|       onHeadersReceived: this._onHeadersReceived.bind(this), |       onHeadersReceived: this._onHeadersReceived.bind(this), | ||||||
|       onDone: this._onDone.bind(this), |       onDone: this._onDone.bind(this), | ||||||
|       onError: this._onError.bind(this), |       onError: this._onError.bind(this), | ||||||
| @ -279,7 +278,7 @@ function PDFNetworkStreamFullRequestReader(manager, source) { | |||||||
|     this._fullRequestId = manager.requestFull(args); |     this._fullRequestId = manager.requestFull(args); | ||||||
|     this._headersReceivedCapability = createPromiseCapability(); |     this._headersReceivedCapability = createPromiseCapability(); | ||||||
|     this._disableRange = source.disableRange || false; |     this._disableRange = source.disableRange || false; | ||||||
|   this._contentLength = source.length; // optional
 |     this._contentLength = source.length; // Optional
 | ||||||
|     this._rangeChunkSize = source.rangeChunkSize; |     this._rangeChunkSize = source.rangeChunkSize; | ||||||
|     if (!this._rangeChunkSize && !this._disableRange) { |     if (!this._rangeChunkSize && !this._disableRange) { | ||||||
|       this._disableRange = true; |       this._disableRange = true; | ||||||
| @ -297,16 +296,14 @@ function PDFNetworkStreamFullRequestReader(manager, source) { | |||||||
|     this.onProgress = null; |     this.onProgress = null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| PDFNetworkStreamFullRequestReader.prototype = { |   _onHeadersReceived() { | ||||||
|   _onHeadersReceived: |     const fullRequestXhrId = this._fullRequestId; | ||||||
|       function PDFNetworkStreamFullRequestReader_onHeadersReceived() { |     const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); | ||||||
|     var fullRequestXhrId = this._fullRequestId; |  | ||||||
|     var fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); |  | ||||||
| 
 | 
 | ||||||
|     const getResponseHeader = (name) => { |     const getResponseHeader = (name) => { | ||||||
|       return fullRequestXhr.getResponseHeader(name); |       return fullRequestXhr.getResponseHeader(name); | ||||||
|     }; |     }; | ||||||
|     let { allowRangeRequests, suggestedLength, } = |     const { allowRangeRequests, suggestedLength, } = | ||||||
|       validateRangeRequestCapabilities({ |       validateRangeRequestCapabilities({ | ||||||
|         getResponseHeader, |         getResponseHeader, | ||||||
|         isHttp: this._manager.isHttp, |         isHttp: this._manager.isHttp, | ||||||
| @ -331,12 +328,12 @@ PDFNetworkStreamFullRequestReader.prototype = { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     this._headersReceivedCapability.resolve(); |     this._headersReceivedCapability.resolve(); | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   _onDone: function PDFNetworkStreamFullRequestReader_onDone(args) { |   _onDone(args) { | ||||||
|     if (args) { |     if (args) { | ||||||
|       if (this._requests.length > 0) { |       if (this._requests.length > 0) { | ||||||
|         var requestCapability = this._requests.shift(); |         const requestCapability = this._requests.shift(); | ||||||
|         requestCapability.resolve({ value: args.chunk, done: false, }); |         requestCapability.resolve({ value: args.chunk, done: false, }); | ||||||
|       } else { |       } else { | ||||||
|         this._cachedChunks.push(args.chunk); |         this._cachedChunks.push(args.chunk); | ||||||
| @ -350,11 +347,11 @@ PDFNetworkStreamFullRequestReader.prototype = { | |||||||
|       requestCapability.resolve({ value: undefined, done: true, }); |       requestCapability.resolve({ value: undefined, done: true, }); | ||||||
|     }); |     }); | ||||||
|     this._requests = []; |     this._requests = []; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   _onError: function PDFNetworkStreamFullRequestReader_onError(status) { |   _onError(status) { | ||||||
|     var url = this._url; |     const url = this._url; | ||||||
|     var exception = createResponseStatusError(status, url); |     const exception = createResponseStatusError(status, url); | ||||||
|     this._storedError = exception; |     this._storedError = exception; | ||||||
|     this._headersReceivedCapability.reject(exception); |     this._headersReceivedCapability.reject(exception); | ||||||
|     this._requests.forEach(function(requestCapability) { |     this._requests.forEach(function(requestCapability) { | ||||||
| @ -362,54 +359,54 @@ PDFNetworkStreamFullRequestReader.prototype = { | |||||||
|     }); |     }); | ||||||
|     this._requests = []; |     this._requests = []; | ||||||
|     this._cachedChunks = []; |     this._cachedChunks = []; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   _onProgress: function PDFNetworkStreamFullRequestReader_onProgress(data) { |   _onProgress(data) { | ||||||
|     if (this.onProgress) { |     if (this.onProgress) { | ||||||
|       this.onProgress({ |       this.onProgress({ | ||||||
|         loaded: data.loaded, |         loaded: data.loaded, | ||||||
|         total: data.lengthComputable ? data.total : this._contentLength, |         total: data.lengthComputable ? data.total : this._contentLength, | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   get filename() { |   get filename() { | ||||||
|     return this._filename; |     return this._filename; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   get isRangeSupported() { |   get isRangeSupported() { | ||||||
|     return this._isRangeSupported; |     return this._isRangeSupported; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   get isStreamingSupported() { |   get isStreamingSupported() { | ||||||
|     return this._isStreamingSupported; |     return this._isStreamingSupported; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   get contentLength() { |   get contentLength() { | ||||||
|     return this._contentLength; |     return this._contentLength; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   get headersReady() { |   get headersReady() { | ||||||
|     return this._headersReceivedCapability.promise; |     return this._headersReceivedCapability.promise; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   async read() { |   async read() { | ||||||
|     if (this._storedError) { |     if (this._storedError) { | ||||||
|       throw this._storedError; |       throw this._storedError; | ||||||
|     } |     } | ||||||
|     if (this._cachedChunks.length > 0) { |     if (this._cachedChunks.length > 0) { | ||||||
|       var chunk = this._cachedChunks.shift(); |       const chunk = this._cachedChunks.shift(); | ||||||
|       return { value: chunk, done: false, }; |       return { value: chunk, done: false, }; | ||||||
|     } |     } | ||||||
|     if (this._done) { |     if (this._done) { | ||||||
|       return { value: undefined, done: true, }; |       return { value: undefined, done: true, }; | ||||||
|     } |     } | ||||||
|     var requestCapability = createPromiseCapability(); |     const requestCapability = createPromiseCapability(); | ||||||
|     this._requests.push(requestCapability); |     this._requests.push(requestCapability); | ||||||
|     return requestCapability.promise; |     return requestCapability.promise; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   cancel: function PDFNetworkStreamFullRequestReader_cancel(reason) { |   cancel(reason) { | ||||||
|     this._done = true; |     this._done = true; | ||||||
|     this._headersReceivedCapability.reject(reason); |     this._headersReceivedCapability.reject(reason); | ||||||
|     this._requests.forEach(function (requestCapability) { |     this._requests.forEach(function (requestCapability) { | ||||||
| @ -420,13 +417,14 @@ PDFNetworkStreamFullRequestReader.prototype = { | |||||||
|       this._manager.abortRequest(this._fullRequestId); |       this._manager.abortRequest(this._fullRequestId); | ||||||
|     } |     } | ||||||
|     this._fullRequestReader = null; |     this._fullRequestReader = null; | ||||||
|   }, |   } | ||||||
| }; | } | ||||||
| 
 | 
 | ||||||
| /** @implements {IPDFStreamRangeReader} */ | /** @implements {IPDFStreamRangeReader} */ | ||||||
| function PDFNetworkStreamRangeRequestReader(manager, begin, end) { | class PDFNetworkStreamRangeRequestReader { | ||||||
|  |   constructor(manager, begin, end) { | ||||||
|     this._manager = manager; |     this._manager = manager; | ||||||
|   var args = { |     const args = { | ||||||
|       onDone: this._onDone.bind(this), |       onDone: this._onDone.bind(this), | ||||||
|       onProgress: this._onProgress.bind(this), |       onProgress: this._onProgress.bind(this), | ||||||
|     }; |     }; | ||||||
| @ -439,17 +437,16 @@ function PDFNetworkStreamRangeRequestReader(manager, begin, end) { | |||||||
|     this.onClosed = null; |     this.onClosed = null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| PDFNetworkStreamRangeRequestReader.prototype = { |   _close() { | ||||||
|   _close: function PDFNetworkStreamRangeRequestReader_close() { |  | ||||||
|     if (this.onClosed) { |     if (this.onClosed) { | ||||||
|       this.onClosed(this); |       this.onClosed(this); | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   _onDone: function PDFNetworkStreamRangeRequestReader_onDone(data) { |   _onDone(data) { | ||||||
|     var chunk = data.chunk; |     const chunk = data.chunk; | ||||||
|     if (this._requests.length > 0) { |     if (this._requests.length > 0) { | ||||||
|       var requestCapability = this._requests.shift(); |       const requestCapability = this._requests.shift(); | ||||||
|       requestCapability.resolve({ value: chunk, done: false, }); |       requestCapability.resolve({ value: chunk, done: false, }); | ||||||
|     } else { |     } else { | ||||||
|       this._queuedChunk = chunk; |       this._queuedChunk = chunk; | ||||||
| @ -460,35 +457,35 @@ PDFNetworkStreamRangeRequestReader.prototype = { | |||||||
|     }); |     }); | ||||||
|     this._requests = []; |     this._requests = []; | ||||||
|     this._close(); |     this._close(); | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   _onProgress: function PDFNetworkStreamRangeRequestReader_onProgress(evt) { |   _onProgress(evt) { | ||||||
|     if (!this.isStreamingSupported && this.onProgress) { |     if (!this.isStreamingSupported && this.onProgress) { | ||||||
|       this.onProgress({ |       this.onProgress({ | ||||||
|         loaded: evt.loaded, |         loaded: evt.loaded, | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   get isStreamingSupported() { |   get isStreamingSupported() { | ||||||
|     return false; // TODO allow progressive range bytes loading
 |     return false; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   async read() { |   async read() { | ||||||
|     if (this._queuedChunk !== null) { |     if (this._queuedChunk !== null) { | ||||||
|       var chunk = this._queuedChunk; |       const chunk = this._queuedChunk; | ||||||
|       this._queuedChunk = null; |       this._queuedChunk = null; | ||||||
|       return { value: chunk, done: false, }; |       return { value: chunk, done: false, }; | ||||||
|     } |     } | ||||||
|     if (this._done) { |     if (this._done) { | ||||||
|       return { value: undefined, done: true, }; |       return { value: undefined, done: true, }; | ||||||
|     } |     } | ||||||
|     var requestCapability = createPromiseCapability(); |     const requestCapability = createPromiseCapability(); | ||||||
|     this._requests.push(requestCapability); |     this._requests.push(requestCapability); | ||||||
|     return requestCapability.promise; |     return requestCapability.promise; | ||||||
|   }, |   } | ||||||
| 
 | 
 | ||||||
|   cancel: function PDFNetworkStreamRangeRequestReader_cancel(reason) { |   cancel(reason) { | ||||||
|     this._done = true; |     this._done = true; | ||||||
|     this._requests.forEach(function (requestCapability) { |     this._requests.forEach(function (requestCapability) { | ||||||
|       requestCapability.resolve({ value: undefined, done: true, }); |       requestCapability.resolve({ value: undefined, done: true, }); | ||||||
| @ -498,10 +495,9 @@ PDFNetworkStreamRangeRequestReader.prototype = { | |||||||
|       this._manager.abortRequest(this._requestId); |       this._manager.abortRequest(this._requestId); | ||||||
|     } |     } | ||||||
|     this._close(); |     this._close(); | ||||||
|   }, |   } | ||||||
| }; | } | ||||||
| 
 | 
 | ||||||
| export { | export { | ||||||
|   PDFNetworkStream, |   PDFNetworkStream, | ||||||
|   NetworkManager, |  | ||||||
| }; | }; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user