Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 92500c71be | |||
| 05c6f4394c | |||
| 9ed7614aed | |||
| bad84ecb3a | |||
| 70b928bbb9 | |||
| 53bf1d38e2 | |||
| ac250a9b04 | |||
| 83f7b7ef32 | |||
| f3df5d7ace |
+1
-1
@@ -1,3 +1,3 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "4.1"
|
||||
- "6.4"
|
||||
@@ -13,9 +13,9 @@ browsers:
|
||||
- name: opera
|
||||
version: 11..latest
|
||||
- name: iphone
|
||||
version: 5.1..latest
|
||||
version: '8.1..latest'
|
||||
- name: android
|
||||
version: 4.0..latest
|
||||
version: '4.0..latest'
|
||||
server: ./test/server/index.js
|
||||
scripts:
|
||||
- "/ie8-polyfill.js"
|
||||
|
||||
@@ -75,6 +75,8 @@ also be a bit slow. This was the default in versions of this module before 1.5.
|
||||
that isn't a single-byte ASCII or utf8 character) will be corrupted. Of course, this option
|
||||
is only safe for text data. May also cause the 'content-type' response header to be
|
||||
incorrectly reported (as 'text/plain; charset=x-user-defined').
|
||||
* 'disable-fetch': Force the use of plain XHR regardless of the browser declaring a fetch
|
||||
capability. Preserves the correctness of binary data and the 'content-type' response header.
|
||||
* 'prefer-fast': Deprecated; now a synonym for 'default', which has the same performance
|
||||
characteristics as this mode did in versions before 1.5.
|
||||
|
||||
|
||||
+9
-4
@@ -7,8 +7,8 @@ var toArrayBuffer = require('to-arraybuffer')
|
||||
var IncomingMessage = response.IncomingMessage
|
||||
var rStates = response.readyStates
|
||||
|
||||
function decideMode (preferBinary) {
|
||||
if (capability.fetch) {
|
||||
function decideMode (preferBinary, useFetch) {
|
||||
if (capability.fetch && useFetch) {
|
||||
return 'fetch'
|
||||
} else if (capability.mozchunkedarraybuffer) {
|
||||
return 'moz-chunked-arraybuffer'
|
||||
@@ -37,7 +37,12 @@ var ClientRequest = module.exports = function (opts) {
|
||||
})
|
||||
|
||||
var preferBinary
|
||||
if (opts.mode === 'prefer-streaming') {
|
||||
var useFetch = true
|
||||
if (opts.mode === 'disable-fetch') {
|
||||
// If the use of XHR should be preferred and includes preserving the 'content-type' header
|
||||
useFetch = false
|
||||
preferBinary = true
|
||||
} else if (opts.mode === 'prefer-streaming') {
|
||||
// If streaming is a high priority but binary compatibility and
|
||||
// the accuracy of the 'content-type' header aren't
|
||||
preferBinary = false
|
||||
@@ -50,7 +55,7 @@ var ClientRequest = module.exports = function (opts) {
|
||||
} else {
|
||||
throw new Error('Invalid value for opts.mode')
|
||||
}
|
||||
self._mode = decideMode(preferBinary)
|
||||
self._mode = decideMode(preferBinary, useFetch)
|
||||
|
||||
self.on('finish', function () {
|
||||
self._onFinish()
|
||||
|
||||
+1
-1
@@ -143,7 +143,7 @@ IncomingMessage.prototype._onXHRProgress = function () {
|
||||
}
|
||||
break
|
||||
case 'arraybuffer':
|
||||
if (xhr.readyState !== rStates.DONE)
|
||||
if (xhr.readyState !== rStates.DONE || !xhr.response)
|
||||
break
|
||||
response = xhr.response
|
||||
self.push(new Buffer(new Uint8Array(response)))
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "stream-http",
|
||||
"version": "2.3.1",
|
||||
"version": "2.4.0",
|
||||
"description": "Streaming http in the browser",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
@@ -41,6 +41,6 @@
|
||||
"tape": "^4.0.0",
|
||||
"ua-parser-js": "^0.7.7",
|
||||
"webworkify": "^1.0.2",
|
||||
"zuul": "^3.1.0"
|
||||
"zuul": "^3.10.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
var Buffer = require('buffer').Buffer
|
||||
var test = require('tape')
|
||||
|
||||
var http = require('../..')
|
||||
|
||||
test('disable fetch', function (t) {
|
||||
var originalFetch
|
||||
if (typeof fetch === 'function') {
|
||||
originalFetch = fetch
|
||||
}
|
||||
|
||||
var fetchCalled = false
|
||||
fetch = function (input, options) {
|
||||
fetchCalled = true
|
||||
if (originalFetch) {
|
||||
return originalFetch(input, options)
|
||||
}
|
||||
}
|
||||
|
||||
http.get({
|
||||
path: '/browserify.png',
|
||||
mode: 'disable-fetch'
|
||||
}, function (res) {
|
||||
t.ok(!fetchCalled, 'fetch was not called')
|
||||
|
||||
if (originalFetch) {
|
||||
fetch = originalFetch
|
||||
}
|
||||
|
||||
res.on('end', function () {
|
||||
t.ok(res.headers['content-type'] === 'image/png', 'content-type was set correctly')
|
||||
t.end()
|
||||
})
|
||||
|
||||
res.on('data', function () {})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user