already_AddRefed<InternalResponse> InternalResponse::Clone(CloneType aCloneType) { RefPtr<InternalResponse> clone = CreateIncompleteCopy(); clone->mHeaders = new InternalHeaders(*mHeaders); // Make sure the clone response will have the same padding size. clone->mPaddingInfo = mPaddingInfo; clone->mPaddingSize = mPaddingSize; if (mWrappedResponse) { clone->mWrappedResponse = mWrappedResponse->Clone(aCloneType); MOZ_ASSERT(!mBody); return clone.forget(); } if (!mBody || aCloneType == eDontCloneInputStream) { return clone.forget(); } nsCOMPtr<nsIInputStream> clonedBody; nsCOMPtr<nsIInputStream> replacementBody; nsresult rv = NS_CloneInputStream(mBody, getter_AddRefs(clonedBody), getter_AddRefs(replacementBody)); if (NS_WARN_IF(NS_FAILED(rv))) { return nullptr; } clone->mBody.swap(clonedBody); if (replacementBody) { mBody.swap(replacementBody); } return clone.forget(); }
already_AddRefed<InternalResponse> InternalResponse::Clone() { nsRefPtr<InternalResponse> clone = CreateIncompleteCopy(); clone->mHeaders = new InternalHeaders(*mHeaders); if (mWrappedResponse) { clone->mWrappedResponse = mWrappedResponse->Clone(); MOZ_ASSERT(!mBody); return clone.forget(); } if (!mBody) { return clone.forget(); } nsCOMPtr<nsIInputStream> clonedBody; nsCOMPtr<nsIInputStream> replacementBody; nsresult rv = NS_CloneInputStream(mBody, getter_AddRefs(clonedBody), getter_AddRefs(replacementBody)); if (NS_WARN_IF(NS_FAILED(rv))) { return nullptr; } clone->mBody.swap(clonedBody); if (replacementBody) { mBody.swap(replacementBody); } return clone.forget(); }
already_AddRefed<InternalResponse> InternalResponse::CORSResponse() { MOZ_ASSERT(!mWrappedResponse, "Can't CORSResponse a already wrapped response"); RefPtr<InternalResponse> cors = CreateIncompleteCopy(); cors->mType = ResponseType::Cors; cors->mHeaders = InternalHeaders::CORSHeaders(Headers()); cors->mWrappedResponse = this; return cors.forget(); }
already_AddRefed<InternalResponse> InternalResponse::BasicResponse() { MOZ_ASSERT(!mWrappedResponse, "Can't BasicResponse a already wrapped response"); RefPtr<InternalResponse> basic = CreateIncompleteCopy(); basic->mType = ResponseType::Basic; basic->mHeaders = InternalHeaders::BasicHeaders(Headers()); basic->mWrappedResponse = this; return basic.forget(); }