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; } } }