| exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream) |
| |
| exports.writableStream = isFunction(global.WritableStream) |
| |
| exports.abortController = isFunction(global.AbortController) |
| |
| // The xhr request to example.com may violate some restrictive CSP configurations, |
| // so if we're running in a browser that supports `fetch`, avoid calling getXHR() |
| // and assume support for certain features below. |
| var xhr |
| function getXHR () { |
| // Cache the xhr value |
| if (xhr !== undefined) return xhr |
| |
| if (global.XMLHttpRequest) { |
| xhr = new global.XMLHttpRequest() |
| // If XDomainRequest is available (ie only, where xhr might not work |
| // cross domain), use the page location. Otherwise use example.com |
| // Note: this doesn't actually make an http request. |
| try { |
| xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com') |
| } catch(e) { |
| xhr = null |
| } |
| } else { |
| // Service workers don't have XHR |
| xhr = null |
| } |
| return xhr |
| } |
| |
| function checkTypeSupport (type) { |
| var xhr = getXHR() |
| if (!xhr) return false |
| try { |
| xhr.responseType = type |
| return xhr.responseType === type |
| } catch (e) {} |
| return false |
| } |
| |
| // If fetch is supported, then arraybuffer will be supported too. Skip calling |
| // checkTypeSupport(), since that calls getXHR(). |
| exports.arraybuffer = exports.fetch || checkTypeSupport('arraybuffer') |
| |
| // These next two tests unavoidably show warnings in Chrome. Since fetch will always |
| // be used if it's available, just return false for these to avoid the warnings. |
| exports.msstream = !exports.fetch && checkTypeSupport('ms-stream') |
| exports.mozchunkedarraybuffer = !exports.fetch && checkTypeSupport('moz-chunked-arraybuffer') |
| |
| // If fetch is supported, then overrideMimeType will be supported too. Skip calling |
| // getXHR(). |
| exports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false) |
| |
| function isFunction (value) { |
| return typeof value === 'function' |
| } |
| |
| xhr = null // Help gc |