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; | ||||
|   } | ||||
| 
 | ||||
| //#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 = { | ||||
|     requestRange: function NetworkManager_requestRange(begin, end, listeners) { | ||||
|       var args = { | ||||
| @ -111,17 +133,19 @@ var NetworkManager = (function NetworkManagerClosure() { | ||||
|         pendingRequest.expectedStatus = 200; | ||||
|       } | ||||
| 
 | ||||
|       if (args.onProgressiveData) { | ||||
|         // Some legacy browsers might throw an exception.
 | ||||
|         try { | ||||
|           xhr.responseType = 'moz-chunked-arraybuffer'; | ||||
|         } catch(e) {} | ||||
|         if (xhr.responseType === 'moz-chunked-arraybuffer') { | ||||
|           pendingRequest.onProgressiveData = args.onProgressiveData; | ||||
|           pendingRequest.mozChunked = true; | ||||
|         } else { | ||||
|           xhr.responseType = 'arraybuffer'; | ||||
|         } | ||||
| //#if CHROME
 | ||||
| //    var useMozChunkedLoading = false;
 | ||||
| //#endif
 | ||||
| //#if (FIREFOX || MOZCENTRAL)
 | ||||
| //    var useMozChunkedLoading = !!args.onProgressiveData;
 | ||||
| //#endif
 | ||||
| //#if !(CHROME || FIREFOX || MOZCENTRAL)
 | ||||
|       var useMozChunkedLoading = supportsMozChunked && !!args.onProgressiveData; | ||||
| //#endif
 | ||||
|       if (useMozChunkedLoading) { | ||||
|         xhr.responseType = 'moz-chunked-arraybuffer'; | ||||
|         pendingRequest.onProgressiveData = args.onProgressiveData; | ||||
|         pendingRequest.mozChunked = true; | ||||
|       } else { | ||||
|         xhr.responseType = 'arraybuffer'; | ||||
|       } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user