(fetchParams, response)
| 14276 | response.headersList.set("content-length", serializedFullLength, true); |
| 14277 | response.headersList.set("content-type", type, true); |
| 14278 | } else { |
| 14279 | response.rangeRequested = true; |
| 14280 | const rangeHeader = request.headersList.get("range", true); |
| 14281 | const rangeValue = simpleRangeHeaderValue(rangeHeader, true); |
| 14282 | if (rangeValue === "failure") { |
| 14283 | return Promise.resolve(makeNetworkError("failed to fetch the data URL")); |
| 14284 | } |
| 14285 | let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue; |
| 14286 | if (rangeStart === null) { |
| 14287 | rangeStart = fullLength - rangeEnd; |
| 14288 | rangeEnd = rangeStart + rangeEnd - 1; |
| 14289 | } else { |
| 14290 | if (rangeStart >= fullLength) { |
| 14291 | return Promise.resolve(makeNetworkError("Range start is greater than the blob's size.")); |
| 14292 | } |
| 14293 | if (rangeEnd === null || rangeEnd >= fullLength) { |
| 14294 | rangeEnd = fullLength - 1; |
| 14295 | } |
| 14296 | } |
| 14297 | const slicedBlob = blob.slice(rangeStart, rangeEnd, type); |
| 14298 | const slicedBodyWithType = extractBody(slicedBlob); |
| 14299 | response.body = slicedBodyWithType[0]; |
| 14300 | const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`); |
| 14301 | const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength); |
| 14302 | response.status = 206; |
| 14303 | response.statusText = "Partial Content"; |
| 14304 | response.headersList.set("content-length", serializedSlicedLength, true); |
| 14305 | response.headersList.set("content-type", type, true); |
| 14306 | response.headersList.set("content-range", contentRange, true); |
| 14307 | } |
| 14308 | return Promise.resolve(response); |
| 14309 | } |
| 14310 | case "data:": { |
| 14311 | const currentURL = requestCurrentURL(request); |
| 14312 | const dataURLStruct = dataURLProcessor(currentURL); |
| 14313 | if (dataURLStruct === "failure") { |
| 14314 | return Promise.resolve(makeNetworkError("failed to fetch the data URL")); |
| 14315 | } |
| 14316 | const mimeType = serializeAMimeType(dataURLStruct.mimeType); |
| 14317 | return Promise.resolve(makeResponse({ |
| 14318 | statusText: "OK", |
| 14319 | headersList: [ |
| 14320 | ["content-type", { name: "Content-Type", value: mimeType }] |
| 14321 | ], |
| 14322 | body: safelyExtractBody(dataURLStruct.body)[0] |
| 14323 | })); |
| 14324 | } |
| 14325 | case "file:": { |
| 14326 | return Promise.resolve(makeNetworkError("not implemented... yet...")); |
| 14327 | } |
| 14328 | case "http:": |
| 14329 | case "https:": { |
| 14330 | return httpFetch(fetchParams).catch((err) => makeNetworkError(err)); |
| 14331 | } |
| 14332 | default: { |
| 14333 | return Promise.resolve(makeNetworkError("unknown scheme")); |
| 14334 | } |
| 14335 | } |
no test coverage detected