Skip to content

Commit c153875

Browse files
authored
fetch: avoid async function in mainFetch to generate response (#3605)
1 parent 4f66a47 commit c153875

File tree

1 file changed

+39
-45
lines changed

1 file changed

+39
-45
lines changed

lib/web/fetch/index.js

+39-45
Original file line numberDiff line numberDiff line change
@@ -573,53 +573,46 @@ async function mainFetch (fetchParams, recursive = false) {
573573
// 11. If response is null, then set response to the result of running
574574
// the steps corresponding to the first matching statement:
575575
if (response === null) {
576-
response = await (async () => {
577-
const currentURL = requestCurrentURL(request)
578-
579-
if (
580-
// - request’s current URL’s origin is same origin with request’s origin,
581-
// and request’s response tainting is "basic"
582-
(sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||
583-
// request’s current URL’s scheme is "data"
584-
(currentURL.protocol === 'data:') ||
585-
// - request’s mode is "navigate" or "websocket"
586-
(request.mode === 'navigate' || request.mode === 'websocket')
587-
) {
588-
// 1. Set request’s response tainting to "basic".
589-
request.responseTainting = 'basic'
590-
591-
// 2. Return the result of running scheme fetch given fetchParams.
592-
return await schemeFetch(fetchParams)
593-
}
594-
595-
// request’s mode is "same-origin"
596-
if (request.mode === 'same-origin') {
597-
// 1. Return a network error.
598-
return makeNetworkError('request mode cannot be "same-origin"')
599-
}
600-
601-
// request’s mode is "no-cors"
602-
if (request.mode === 'no-cors') {
603-
// 1. If request’s redirect mode is not "follow", then return a network
604-
// error.
605-
if (request.redirect !== 'follow') {
606-
return makeNetworkError(
607-
'redirect mode cannot be "follow" for "no-cors" request'
608-
)
609-
}
610-
576+
const currentURL = requestCurrentURL(request)
577+
if (
578+
// - request’s current URL’s origin is same origin with request’s origin,
579+
// and request’s response tainting is "basic"
580+
(sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||
581+
// request’s current URL’s scheme is "data"
582+
(currentURL.protocol === 'data:') ||
583+
// - request’s mode is "navigate" or "websocket"
584+
(request.mode === 'navigate' || request.mode === 'websocket')
585+
) {
586+
// 1. Set request’s response tainting to "basic".
587+
request.responseTainting = 'basic'
588+
589+
// 2. Return the result of running scheme fetch given fetchParams.
590+
response = await schemeFetch(fetchParams)
591+
592+
// request’s mode is "same-origin"
593+
} else if (request.mode === 'same-origin') {
594+
// 1. Return a network error.
595+
response = makeNetworkError('request mode cannot be "same-origin"')
596+
597+
// request’s mode is "no-cors"
598+
} else if (request.mode === 'no-cors') {
599+
// 1. If request’s redirect mode is not "follow", then return a network
600+
// error.
601+
if (request.redirect !== 'follow') {
602+
response = makeNetworkError(
603+
'redirect mode cannot be "follow" for "no-cors" request'
604+
)
605+
} else {
611606
// 2. Set request’s response tainting to "opaque".
612607
request.responseTainting = 'opaque'
613608

614609
// 3. Return the result of running scheme fetch given fetchParams.
615-
return await schemeFetch(fetchParams)
616-
}
617-
618-
// request’s current URL’s scheme is not an HTTP(S) scheme
619-
if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {
620-
// Return a network error.
621-
return makeNetworkError('URL scheme must be a HTTP(S) scheme')
610+
response = await schemeFetch(fetchParams)
622611
}
612+
// request’s current URL’s scheme is not an HTTP(S) scheme
613+
} else if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {
614+
// Return a network error.
615+
response = makeNetworkError('URL scheme must be a HTTP(S) scheme')
623616

624617
// - request’s use-CORS-preflight flag is set
625618
// - request’s unsafe-request flag is set and either request’s method is
@@ -633,13 +626,14 @@ async function mainFetch (fetchParams, recursive = false) {
633626
// 4. Return corsWithPreflightResponse.
634627
// TODO
635628

636-
// Otherwise
629+
// Otherwise
630+
} else {
637631
// 1. Set request’s response tainting to "cors".
638632
request.responseTainting = 'cors'
639633

640634
// 2. Return the result of running HTTP fetch given fetchParams.
641-
return await httpFetch(fetchParams)
642-
})()
635+
response = await httpFetch(fetchParams)
636+
}
643637
}
644638

645639
// 12. If recursive is true, then return response.

0 commit comments

Comments
 (0)