mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
* fix(urlrequest): allow non-2xx repsponse results - closes #21046 * test(net): add test cases to verify non-2xx body * test(session): update spec to match clientrequest behavior * test(net): update test cases to match clientrequest behavior * spec: clean up async net spec
This commit is contained in:
@@ -288,6 +288,7 @@ bool URLRequestNS::Write(v8::Local<v8::Value> data, bool is_last) {
|
||||
network::ResourceRequest* request_ref = request_.get();
|
||||
loader_ = network::SimpleURLLoader::Create(std::move(request_),
|
||||
kTrafficAnnotation);
|
||||
loader_->SetAllowHttpErrorResults(true);
|
||||
loader_->SetOnResponseStartedCallback(base::Bind(
|
||||
&URLRequestNS::OnResponseStarted, weak_factory_.GetWeakPtr()));
|
||||
loader_->SetOnRedirectCallback(
|
||||
|
||||
@@ -3,6 +3,7 @@ import { net as originalNet, session, ClientRequest, BrowserWindow } from 'elect
|
||||
import * as http from 'http'
|
||||
import * as url from 'url'
|
||||
import { AddressInfo } from 'net'
|
||||
import { emittedOnce } from './events-helpers'
|
||||
|
||||
const outstandingRequests: ClientRequest[] = []
|
||||
const net: {request: (typeof originalNet)['request']} = {
|
||||
@@ -771,6 +772,53 @@ describe('net module', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('should allow to read response body from non-2xx response', async () => {
|
||||
const bodyData = randomString(kOneKiloByte)
|
||||
const serverUrl = await respondOnce.toSingleURL((request, response) => {
|
||||
response.statusCode = 404
|
||||
response.end(bodyData)
|
||||
})
|
||||
|
||||
let requestResponseEventEmitted = false
|
||||
let responseDataEventEmitted = false
|
||||
|
||||
const urlRequest = net.request(serverUrl)
|
||||
const eventHandlers = Promise.all([
|
||||
emittedOnce(urlRequest, 'response')
|
||||
.then(async (params: any[]) => {
|
||||
const response: Electron.IncomingMessage = params[0]
|
||||
requestResponseEventEmitted = true
|
||||
const statusCode = response.statusCode
|
||||
expect(statusCode).to.equal(404)
|
||||
const buffers: Buffer[] = []
|
||||
response.on('data', (chunk) => {
|
||||
buffers.push(chunk)
|
||||
responseDataEventEmitted = true
|
||||
})
|
||||
await new Promise((resolve, reject) => {
|
||||
response.on('error', () => {
|
||||
reject(new Error('error emitted'))
|
||||
})
|
||||
emittedOnce(response, 'end')
|
||||
.then(() => {
|
||||
const receivedBodyData = Buffer.concat(buffers)
|
||||
expect(receivedBodyData.toString()).to.equal(bodyData)
|
||||
})
|
||||
.then(resolve)
|
||||
.catch(reject)
|
||||
})
|
||||
}),
|
||||
emittedOnce(urlRequest, 'close')
|
||||
])
|
||||
|
||||
urlRequest.end()
|
||||
|
||||
await eventHandlers
|
||||
|
||||
expect(requestResponseEventEmitted).to.equal(true)
|
||||
expect(responseDataEventEmitted).to.equal(true)
|
||||
})
|
||||
|
||||
describe('webRequest', () => {
|
||||
afterEach(() => {
|
||||
session.defaultSession.webRequest.onBeforeRequest(null)
|
||||
|
||||
@@ -511,12 +511,19 @@ describe('session module', () => {
|
||||
const fetch = (url: string) => new Promise((resolve, reject) => {
|
||||
const request = net.request({ url, session: ses })
|
||||
request.on('response', (response) => {
|
||||
let data = ''
|
||||
let data: string | null = null
|
||||
response.on('data', (chunk) => {
|
||||
if (!data) {
|
||||
data = ''
|
||||
}
|
||||
data += chunk
|
||||
})
|
||||
response.on('end', () => {
|
||||
resolve(data)
|
||||
if (!data) {
|
||||
reject(new Error('Empty response'))
|
||||
} else {
|
||||
resolve(data)
|
||||
}
|
||||
})
|
||||
response.on('error', (error: any) => { reject(new Error(error)) })
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user