void TypeUtils::SerializePushStream(nsIInputStream* aStream, CacheReadStream& aReadStreamOut, ErrorResult& aRv) { nsCOMPtr<nsIAsyncInputStream> asyncStream = do_QueryInterface(aStream); if (NS_WARN_IF(!asyncStream)) { aRv = NS_ERROR_FAILURE; return; } bool nonBlocking = false; aRv = asyncStream->IsNonBlocking(&nonBlocking); if (NS_WARN_IF(aRv.Failed())) { return; } if (NS_WARN_IF(!nonBlocking)) { aRv = NS_ERROR_FAILURE; return; } aReadStreamOut.pushStreamChild() = CreatePushStream(asyncStream); MOZ_ASSERT(aReadStreamOut.pushStreamChild()); aReadStreamOut.params() = void_t(); aReadStreamOut.fds() = void_t(); // CachePushStreamChild::Start() must be called after sending the stream // across to the parent side. }
void CacheStreamControlChild::DeserializeFds(const CacheReadStream& aReadStream, nsTArray<FileDescriptor>& aFdsOut) { if (aReadStream.fds().type() != OptionalFileDescriptorSet::TPFileDescriptorSetChild) { return; } auto fdSetActor = static_cast<FileDescriptorSetChild*>( aReadStream.fds().get_PFileDescriptorSetChild()); MOZ_ASSERT(fdSetActor); fdSetActor->ForgetFileDescriptors(aFdsOut); MOZ_ASSERT(!aFdsOut.IsEmpty()); unused << fdSetActor->Send__delete__(fdSetActor); }