|
|
|
Lines 316-331
Response::Constructor(const GlobalObject
|
Link Here
|
|---|
|
| 316 |
} |
316 |
} |
| 317 |
} |
317 |
} |
| 318 |
|
318 |
|
| 319 |
r->SetMimeType(); |
319 |
r->SetMimeType(); |
| 320 |
return r.forget(); |
320 |
return r.forget(); |
| 321 |
} |
321 |
} |
| 322 |
|
322 |
|
| 323 |
already_AddRefed<Response> |
323 |
already_AddRefed<Response> |
|
|
324 |
Response::QuirkResponse(JSContext* aCx, nsresult& aRv) |
| 325 |
{ |
| 326 |
MOZ_DIAGNOSTIC_ASSERT(aCx); |
| 327 |
MOZ_DIAGNOSTIC_ASSERT(!BodyUsed()); |
| 328 |
|
| 329 |
ErrorResult result; |
| 330 |
RefPtr<FetchStreamReader> streamReader; |
| 331 |
nsCOMPtr<nsIInputStream> inputStream; |
| 332 |
|
| 333 |
JS::Rooted<JSObject*> body(aCx); |
| 334 |
MaybeTeeReadableStreamBody(aCx, &body, getter_AddRefs(streamReader), |
| 335 |
getter_AddRefs(inputStream), result); |
| 336 |
if (NS_WARN_IF(result.Failed())) { |
| 337 |
return nullptr; |
| 338 |
} |
| 339 |
|
| 340 |
MOZ_ASSERT_IF(body, streamReader); |
| 341 |
MOZ_ASSERT_IF(body, inputStream); |
| 342 |
|
| 343 |
RefPtr<InternalResponse> ir = |
| 344 |
mInternalResponse->Clone(body ? InternalResponse::eDontCloneInputStream |
| 345 |
: InternalResponse::eCloneInputStream, |
| 346 |
true /* quirkResponse */); |
| 347 |
|
| 348 |
RefPtr<Response> response = new Response(mOwner, ir, mSignal); |
| 349 |
|
| 350 |
if (body) { |
| 351 |
// Maybe we have a body, but we receive null from MaybeTeeReadableStreamBody |
| 352 |
// if this body is a native stream. In this case the InternalResponse will |
| 353 |
// have a clone of the native body and the ReadableStream will be created |
| 354 |
// lazily if needed. |
| 355 |
response->SetReadableStreamBody(aCx, body); |
| 356 |
response->mFetchStreamReader = streamReader; |
| 357 |
ir->SetBody(inputStream, InternalResponse::UNKNOWN_BODY_SIZE); |
| 358 |
} |
| 359 |
|
| 360 |
return response.forget(); |
| 361 |
} |
| 362 |
|
| 363 |
already_AddRefed<Response> |
| 324 |
Response::Clone(JSContext* aCx, ErrorResult& aRv) |
364 |
Response::Clone(JSContext* aCx, ErrorResult& aRv) |
| 325 |
{ |
365 |
{ |
| 326 |
if (BodyUsed()) { |
366 |
if (BodyUsed()) { |
| 327 |
aRv.ThrowTypeError<MSG_FETCH_BODY_CONSUMED_ERROR>(); |
367 |
aRv.ThrowTypeError<MSG_FETCH_BODY_CONSUMED_ERROR>(); |
| 328 |
return nullptr; |
368 |
return nullptr; |
| 329 |
} |
369 |
} |
| 330 |
|
370 |
|
| 331 |
RefPtr<FetchStreamReader> streamReader; |
371 |
RefPtr<FetchStreamReader> streamReader; |