Commit acf4cdb7 authored by Ben Kelly's avatar Ben Kelly
Browse files

Bug 1397128 P6 Allow ReadStream to be created with an initially nullptr base stream. r=tt

parent 2cf80de4
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -353,7 +353,7 @@ AutoChildOpArgs::SendAsOpArgs()
  MOZ_DIAGNOSTIC_ASSERT(!mSent);
  mSent = true;
  for (UniquePtr<AutoIPCStream>& autoStream : mStreamCleanupList) {
    autoStream->TakeValue();
    autoStream->TakeOptionalValue();
  }
  return mOpArgs;
}
@@ -506,7 +506,7 @@ AutoParentOpResult::SendAsOpResult()
  MOZ_DIAGNOSTIC_ASSERT(!mSent);
  mSent = true;
  for (UniquePtr<AutoIPCStream>& autoStream : mStreamCleanupList) {
    autoStream->TakeValue();
    autoStream->TakeOptionalValue();
  }
  return mOpResult;
}
@@ -537,7 +537,6 @@ AutoParentOpResult::SerializeReadStream(const nsID& aId, StreamList* aStreamList
  MOZ_DIAGNOSTIC_ASSERT(!mSent);

  nsCOMPtr<nsIInputStream> stream = aStreamList->Extract(aId);
  MOZ_DIAGNOSTIC_ASSERT(stream);

  if (!mStreamControl) {
    mStreamControl = static_cast<CacheStreamControlParent*>(
+0 −1
Original line number Diff line number Diff line
@@ -100,7 +100,6 @@ CacheStreamControlChild::SerializeStream(CacheReadStream* aReadStreamOut,
{
  NS_ASSERT_OWNINGTHREAD(CacheStreamControlChild);
  MOZ_DIAGNOSTIC_ASSERT(aReadStreamOut);
  MOZ_DIAGNOSTIC_ASSERT(aStream);
  UniquePtr<AutoIPCStream> autoStream(new AutoIPCStream(aReadStreamOut->stream()));
  autoStream->Serialize(aStream, Manager());
  aStreamCleanupList.AppendElement(Move(autoStream));
+0 −1
Original line number Diff line number Diff line
@@ -59,7 +59,6 @@ CacheStreamControlParent::SerializeStream(CacheReadStream* aReadStreamOut,
{
  NS_ASSERT_OWNINGTHREAD(CacheStreamControlParent);
  MOZ_DIAGNOSTIC_ASSERT(aReadStreamOut);
  MOZ_DIAGNOSTIC_ASSERT(aStream);

  UniquePtr<AutoIPCStream> autoStream(new AutoIPCStream(aReadStreamOut->stream()));
  DebugOnly<bool> ok = autoStream->Serialize(aStream, Manager());
+10 −7
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ namespace cache {
using mozilla::Unused;
using mozilla::ipc::AutoIPCStream;
using mozilla::ipc::IPCStream;
using mozilla::ipc::OptionalIPCStream;

// ----------------------------------------------------------------------------

@@ -220,9 +221,8 @@ ReadStream::Inner::Inner(StreamControl* aControl, const nsID& aId,
  , mMutex("dom::cache::ReadStream")
  , mCondVar(mMutex, "dom::cache::ReadStream")
  , mStream(aStream)
  , mSnappyStream(new SnappyUncompressInputStream(aStream))
  , mSnappyStream(aStream ? new SnappyUncompressInputStream(aStream) : nullptr)
{
  MOZ_DIAGNOSTIC_ASSERT(mStream);
  MOZ_DIAGNOSTIC_ASSERT(mControl);
  mControl->AddReadStream(this);
}
@@ -261,7 +261,8 @@ ReadStream::Inner::Serialize(CacheReadStream* aReadStreamOut,
    mControl->SerializeStream(aReadStreamOut, mStream, aStreamCleanupList);
  }

  MOZ_DIAGNOSTIC_ASSERT(aReadStreamOut->stream().get_IPCStream().type() ==
  MOZ_DIAGNOSTIC_ASSERT(aReadStreamOut->stream().type() == OptionalIPCStream::Tvoid_t ||
                        aReadStreamOut->stream().get_IPCStream().type() ==
                        IPCStream::TInputStreamParamsWithFds);

  // We're passing ownership across the IPC barrier with the control, so
@@ -591,7 +592,8 @@ ReadStream::Create(const CacheReadStream& aReadStream)
    return nullptr;
  }

  MOZ_DIAGNOSTIC_ASSERT(aReadStream.stream().get_IPCStream().type() ==
  MOZ_DIAGNOSTIC_ASSERT(aReadStream.stream().type() == OptionalIPCStream::Tvoid_t ||
                        aReadStream.stream().get_IPCStream().type() ==
                        IPCStream::TInputStreamParamsWithFds);

  // Control is guaranteed to survive this method as ActorDestroy() cannot
@@ -607,12 +609,13 @@ ReadStream::Create(const CacheReadStream& aReadStream)
  MOZ_DIAGNOSTIC_ASSERT(control);

  nsCOMPtr<nsIInputStream> stream = DeserializeIPCStream(aReadStream.stream());
  MOZ_DIAGNOSTIC_ASSERT(stream);

  // Currently we expect all cache read streams to be blocking file streams.
#if !defined(RELEASE_OR_BETA)
  if (stream) {
    nsCOMPtr<nsIAsyncInputStream> asyncStream = do_QueryInterface(stream);
    MOZ_DIAGNOSTIC_ASSERT(!asyncStream);
  }
#endif

  RefPtr<Inner> inner = new Inner(control, aReadStream.id(), stream);