Skip to content

Commit

Permalink
Merge pull request #5531 from Rob--W/moz-chunked-only-moz
Browse files Browse the repository at this point in the history
Feature-test moz-chunked-arraybuffer before use
  • Loading branch information
yurydelendik committed Jul 2, 2015
2 parents d8e2014 + 2e63dcd commit 9ad6af4
Showing 1 changed file with 35 additions and 11 deletions.
46 changes: 35 additions & 11 deletions src/core/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down Expand Up @@ -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';
}
Expand Down

0 comments on commit 9ad6af4

Please sign in to comment.