Example #1
0
void
TypeUtils::ToPCacheResponse(PCacheResponse& aOut, Response& aIn, ErrorResult& aRv)
{
  if (aIn.BodyUsed()) {
    aRv.ThrowTypeError(MSG_FETCH_BODY_CONSUMED_ERROR);
    return;
  }

  nsRefPtr<InternalResponse> ir = aIn.GetInternalResponse();
  ToPCacheResponseWithoutBody(aOut, *ir, aRv);

  nsCOMPtr<nsIInputStream> stream;
  aIn.GetBody(getter_AddRefs(stream));
  if (stream) {
    aIn.SetBodyUsed();
  }

  SerializeCacheStream(stream, &aOut.body(), aRv);
  if (NS_WARN_IF(aRv.Failed())) {
    return;
  }
}
void
CompareCache::ManageValueResult(JSContext* aCx, JS::Handle<JS::Value> aValue)
{
    AssertIsOnMainThread();

    // The cache returns undefined if the object is not stored.
    if (aValue.isUndefined()) {
        mManager->CacheFinished(NS_OK, false);
        return;
    }

    MOZ_ASSERT(aValue.isObject());

    JS::Rooted<JSObject*> obj(aCx, &aValue.toObject());
    if (NS_WARN_IF(!obj)) {
        mManager->CacheFinished(NS_ERROR_FAILURE, false);
        return;
    }

    Response* response = nullptr;
    nsresult rv = UNWRAP_OBJECT(Response, obj, response);
    if (NS_WARN_IF(NS_FAILED(rv))) {
        mManager->CacheFinished(rv, false);
        return;
    }

    MOZ_ASSERT(response->Ok());

    nsCOMPtr<nsIInputStream> inputStream;
    response->GetBody(getter_AddRefs(inputStream));
    MOZ_ASSERT(inputStream);

    MOZ_ASSERT(!mPump);
    rv = NS_NewInputStreamPump(getter_AddRefs(mPump), inputStream);
    if (NS_WARN_IF(NS_FAILED(rv))) {
        mManager->CacheFinished(rv, false);
        return;
    }

    nsCOMPtr<nsIStreamLoader> loader;
    rv = NS_NewStreamLoader(getter_AddRefs(loader), this);
    if (NS_WARN_IF(NS_FAILED(rv))) {
        mManager->CacheFinished(rv, false);
        return;
    }

    rv = mPump->AsyncRead(loader, nullptr);
    if (NS_WARN_IF(NS_FAILED(rv))) {
        mPump = nullptr;
        mManager->CacheFinished(rv, false);
        return;
    }

    nsCOMPtr<nsIThreadRetargetableRequest> rr = do_QueryInterface(mPump);
    if (rr) {
        nsCOMPtr<nsIEventTarget> sts =
            do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
        rv = rr->RetargetDeliveryTo(sts);
        if (NS_WARN_IF(NS_FAILED(rv))) {
            mPump = nullptr;
            mManager->CacheFinished(rv, false);
            return;
        }
    }
}