(fetchParams, recursive)
| 13677 | } |
| 13678 | __name(fetching, "fetching"); |
| 13679 | async function mainFetch(fetchParams, recursive) { |
| 13680 | try { |
| 13681 | const request = fetchParams.request; |
| 13682 | let response = null; |
| 13683 | if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { |
| 13684 | response = makeNetworkError("local URLs only"); |
| 13685 | } |
| 13686 | tryUpgradeRequestToAPotentiallyTrustworthyURL(request); |
| 13687 | if (requestBadPort(request) === "blocked") { |
| 13688 | response = makeNetworkError("bad port"); |
| 13689 | } |
| 13690 | if (request.referrerPolicy === "") { |
| 13691 | request.referrerPolicy = request.policyContainer.referrerPolicy; |
| 13692 | } |
| 13693 | if (request.referrer !== "no-referrer") { |
| 13694 | request.referrer = determineRequestsReferrer(request); |
| 13695 | } |
| 13696 | if (response === null) { |
| 13697 | const currentURL = requestCurrentURL(request); |
| 13698 | if ( |
| 13699 | // - request?s current URL?s origin is same origin with request?s origin, |
| 13700 | // and request?s response tainting is "basic" |
| 13701 | sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || // request?s current URL?s scheme is "data" |
| 13702 | currentURL.protocol === "data:" || // - request?s mode is "navigate" or "websocket" |
| 13703 | (request.mode === "navigate" || request.mode === "websocket") |
| 13704 | ) { |
| 13705 | request.responseTainting = "basic"; |
| 13706 | response = await schemeFetch(fetchParams); |
| 13707 | } else if (request.mode === "same-origin") { |
| 13708 | response = makeNetworkError('request mode cannot be "same-origin"'); |
| 13709 | } else if (request.mode === "no-cors") { |
| 13710 | if (request.redirect !== "follow") { |
| 13711 | response = makeNetworkError( |
| 13712 | 'redirect mode cannot be "follow" for "no-cors" request' |
| 13713 | ); |
| 13714 | } else { |
| 13715 | request.responseTainting = "opaque"; |
| 13716 | response = await schemeFetch(fetchParams); |
| 13717 | } |
| 13718 | } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { |
| 13719 | response = makeNetworkError("URL scheme must be a HTTP(S) scheme"); |
| 13720 | } else { |
| 13721 | request.responseTainting = "cors"; |
| 13722 | response = await httpFetch(fetchParams); |
| 13723 | } |
| 13724 | } |
| 13725 | if (recursive) { |
| 13726 | return response; |
| 13727 | } |
| 13728 | if (response.status !== 0 && !response.internalResponse) { |
| 13729 | if (request.responseTainting === "cors") { |
| 13730 | } |
| 13731 | if (request.responseTainting === "basic") { |
| 13732 | response = filterResponse(response, "basic"); |
| 13733 | } else if (request.responseTainting === "cors") { |
| 13734 | response = filterResponse(response, "cors"); |
| 13735 | } else if (request.responseTainting === "opaque") { |
| 13736 | response = filterResponse(response, "opaque"); |
no test coverage detected