Example #1
0
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();
}
Example #3
0
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();
}
Example #4
0
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();
}