Merge pull request #5531 from Rob--W/moz-chunked-only-moz
Feature-test moz-chunked-arraybuffer before use
This commit is contained in:
		
						commit
						9ad6af4a3f
					
				| @ -71,6 +71,28 @@ var NetworkManager = (function NetworkManagerClosure() { | |||||||
|     return array.buffer; |     return array.buffer; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | //#if !(CHROME || FIREFOX || MOZCENTRAL)
 | ||||||
|  |   var supportsMozChunked = (function supportsMozChunkedClosure() { | ||||||
|  |     var x = new XMLHttpRequest(); | ||||||
|  |     try { | ||||||
|  |       // Firefox 37- required .open() to be called before setting responseType.
 | ||||||
|  |       // https://bugzilla.mozilla.org/show_bug.cgi?id=707484
 | ||||||
|  |       x.open('GET', 'https://example.com'); | ||||||
|  |     } catch (e) { | ||||||
|  |       // Even though the URL is not visited, .open() could fail if the URL is
 | ||||||
|  |       // blocked, e.g. via the connect-src CSP directive or the NoScript addon.
 | ||||||
|  |       // When this error occurs, this feature detection method will mistakenly
 | ||||||
|  |       // report that moz-chunked-arraybuffer is not supported in Firefox 37-.
 | ||||||
|  |     } | ||||||
|  |     try { | ||||||
|  |       x.responseType = 'moz-chunked-arraybuffer'; | ||||||
|  |       return x.responseType === 'moz-chunked-arraybuffer'; | ||||||
|  |     } catch (e) { | ||||||
|  |       return false; | ||||||
|  |     } | ||||||
|  |   })(); | ||||||
|  | //#endif
 | ||||||
|  | 
 | ||||||
|   NetworkManager.prototype = { |   NetworkManager.prototype = { | ||||||
|     requestRange: function NetworkManager_requestRange(begin, end, listeners) { |     requestRange: function NetworkManager_requestRange(begin, end, listeners) { | ||||||
|       var args = { |       var args = { | ||||||
| @ -111,17 +133,19 @@ var NetworkManager = (function NetworkManagerClosure() { | |||||||
|         pendingRequest.expectedStatus = 200; |         pendingRequest.expectedStatus = 200; | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       if (args.onProgressiveData) { | //#if CHROME
 | ||||||
|         // Some legacy browsers might throw an exception.
 | //    var useMozChunkedLoading = false;
 | ||||||
|         try { | //#endif
 | ||||||
|           xhr.responseType = 'moz-chunked-arraybuffer'; | //#if (FIREFOX || MOZCENTRAL)
 | ||||||
|         } catch(e) {} | //    var useMozChunkedLoading = !!args.onProgressiveData;
 | ||||||
|         if (xhr.responseType === 'moz-chunked-arraybuffer') { | //#endif
 | ||||||
|           pendingRequest.onProgressiveData = args.onProgressiveData; | //#if !(CHROME || FIREFOX || MOZCENTRAL)
 | ||||||
|           pendingRequest.mozChunked = true; |       var useMozChunkedLoading = supportsMozChunked && !!args.onProgressiveData; | ||||||
|         } else { | //#endif
 | ||||||
|           xhr.responseType = 'arraybuffer'; |       if (useMozChunkedLoading) { | ||||||
|         } |         xhr.responseType = 'moz-chunked-arraybuffer'; | ||||||
|  |         pendingRequest.onProgressiveData = args.onProgressiveData; | ||||||
|  |         pendingRequest.mozChunked = true; | ||||||
|       } else { |       } else { | ||||||
|         xhr.responseType = 'arraybuffer'; |         xhr.responseType = 'arraybuffer'; | ||||||
|       } |       } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user