Commit a2639575 authored by Jan Varga's avatar Jan Varga
Browse files

Bug 1791762 - CreateFileInputStream, CreateFileOutputStream and...

Bug 1791762 - CreateFileInputStream, CreateFileOutputStream and CreateFileInputOutputStream should return MovingNotNull<T> instead of NotNull<T>; r=dom-storage-reviewers,jesup

Differential Revision: https://phabricator.services.mozilla.com/D157819
parent 36a12fbe
Loading
Loading
Loading
Loading
+7 −11
Original line number Diff line number Diff line
@@ -155,13 +155,12 @@ Result<std::pair<nsID, nsCOMPtr<nsISupports>>, nsresult> BodyStartWriteStream(
  QM_TRY_INSPECT(const auto& tmpFile,
                 BodyIdToFile(aBaseDir, id, BODY_FILE_TMP));

  QM_TRY_INSPECT(
      const auto& fileStream,
  QM_TRY_UNWRAP(
      nsCOMPtr<nsIOutputStream> fileStream,
      CreateFileOutputStream(PERSISTENCE_TYPE_DEFAULT, aDirectoryMetadata,
                             Client::DOMCACHE, tmpFile.get()));

  const auto compressed =
      MakeRefPtr<SnappyCompressOutputStream>(fileStream.get());
  const auto compressed = MakeRefPtr<SnappyCompressOutputStream>(fileStream);

  const nsCOMPtr<nsIEventTarget> target =
      do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
@@ -202,18 +201,15 @@ nsresult BodyFinalizeWrite(nsIFile& aBaseDir, const nsID& aId) {
  return NS_OK;
}

Result<NotNull<nsCOMPtr<nsIInputStream>>, nsresult> BodyOpen(
Result<MovingNotNull<nsCOMPtr<nsIInputStream>>, nsresult> BodyOpen(
    const CacheDirectoryMetadata& aDirectoryMetadata, nsIFile& aBaseDir,
    const nsID& aId) {
  QM_TRY_INSPECT(const auto& finalFile,
                 BodyIdToFile(aBaseDir, aId, BODY_FILE_FINAL));

  QM_TRY_RETURN(
      CreateFileInputStream(PERSISTENCE_TYPE_DEFAULT, aDirectoryMetadata,
                            Client::DOMCACHE, finalFile.get())
          .map([](NotNull<RefPtr<FileInputStream>>&& stream) {
            return WrapNotNullUnchecked(nsCOMPtr<nsIInputStream>{stream.get()});
          }));
  QM_TRY_RETURN(CreateFileInputStream(PERSISTENCE_TYPE_DEFAULT,
                                      aDirectoryMetadata, Client::DOMCACHE,
                                      finalFile.get()));
}

nsresult BodyMaybeUpdatePaddingSize(
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ void BodyCancelWrite(nsISupports& aCopyContext);

nsresult BodyFinalizeWrite(nsIFile& aBaseDir, const nsID& aId);

Result<NotNull<nsCOMPtr<nsIInputStream>>, nsresult> BodyOpen(
Result<MovingNotNull<nsCOMPtr<nsIInputStream>>, nsresult> BodyOpen(
    const CacheDirectoryMetadata& aDirectoryMetadata, nsIFile& aBaseDir,
    const nsID& aId);

+11 −14
Original line number Diff line number Diff line
@@ -14989,19 +14989,19 @@ already_AddRefed<nsISupports> MutableFile::CreateStream(bool aReadOnly) {
  nsCOMPtr<nsISupports> result;
  if (aReadOnly) {
    QM_TRY_INSPECT(
        const auto& stream,
    QM_TRY_UNWRAP(
        nsCOMPtr<nsIInputStream> stream,
        CreateFileInputStream(persistenceType, originMetadata, Client::IDB,
                              mFile, -1, -1, nsIFileInputStream::DEFER_OPEN),
        nullptr);
    result = NS_ISUPPORTS_CAST(nsIFileInputStream*, stream.get());
    result = stream;
  } else {
    QM_TRY_INSPECT(const auto& stream,
    QM_TRY_UNWRAP(nsCOMPtr<nsIRandomAccessStream> stream,
                  CreateFileRandomAccessStream(
                      persistenceType, originMetadata, Client::IDB, mFile, -1,
                      -1, nsIFileRandomAccessStream::DEFER_OPEN),
                  nullptr);
    result = NS_ISUPPORTS_CAST(nsIFileRandomAccessStream*, stream.get());
    result = stream;
  }
  return result.forget();
@@ -21493,13 +21493,10 @@ nsresult FileHelper::CreateFileFromStream(nsIFile& aFile, nsIFile& aJournalFile,
  QM_TRY(MOZ_TO_RESULT(aJournalFile.Create(nsIFile::NORMAL_FILE_TYPE, 0644)));
  // Now try to copy the stream.
  QM_TRY_UNWRAP(auto fileOutputStream,
  QM_TRY_UNWRAP(nsCOMPtr<nsIOutputStream> fileOutputStream,
                CreateFileOutputStream(mFileManager->Type(),
                                       mFileManager->OriginMetadata(),
                                       Client::IDB, &aFile)
                    .map([](NotNull<RefPtr<FileOutputStream>>&& stream) {
                      return nsCOMPtr<nsIOutputStream>{stream.get()};
                    }));
                                       Client::IDB, &aFile));
  AutoTArray<char, kFileCopyBufferSize> buffer;
  const auto actualOutputStream =
+19 −14
Original line number Diff line number Diff line
@@ -89,42 +89,47 @@ NS_IMETHODIMP FileQuotaStreamWithWrite<FileStreamBase>::Write(
  return NS_OK;
}

Result<NotNull<RefPtr<FileInputStream>>, nsresult> CreateFileInputStream(
Result<MovingNotNull<nsCOMPtr<nsIInputStream>>, nsresult> CreateFileInputStream(
    PersistenceType aPersistenceType, const OriginMetadata& aOriginMetadata,
    Client::Type aClientType, nsIFile* aFile, int32_t aIOFlags, int32_t aPerm,
    int32_t aBehaviorFlags) {
  const auto stream = MakeNotNull<RefPtr<FileInputStream>>(
      aPersistenceType, aOriginMetadata, aClientType);
  auto stream = MakeRefPtr<FileInputStream>(aPersistenceType, aOriginMetadata,
                                            aClientType);

  QM_TRY(MOZ_TO_RESULT(stream->Init(aFile, aIOFlags, aPerm, aBehaviorFlags)));

  return stream;
  return WrapMovingNotNullUnchecked(
      nsCOMPtr<nsIInputStream>(std::move(stream)));
}

Result<NotNull<RefPtr<FileOutputStream>>, nsresult> CreateFileOutputStream(
    PersistenceType aPersistenceType, const OriginMetadata& aOriginMetadata,
    Client::Type aClientType, nsIFile* aFile, int32_t aIOFlags, int32_t aPerm,
Result<MovingNotNull<nsCOMPtr<nsIOutputStream>>, nsresult>
CreateFileOutputStream(PersistenceType aPersistenceType,
                       const OriginMetadata& aOriginMetadata,
                       Client::Type aClientType, nsIFile* aFile,
                       int32_t aIOFlags, int32_t aPerm,
                       int32_t aBehaviorFlags) {
  const auto stream = MakeNotNull<RefPtr<FileOutputStream>>(
      aPersistenceType, aOriginMetadata, aClientType);
  auto stream = MakeRefPtr<FileOutputStream>(aPersistenceType, aOriginMetadata,
                                             aClientType);

  QM_TRY(MOZ_TO_RESULT(stream->Init(aFile, aIOFlags, aPerm, aBehaviorFlags)));

  return stream;
  return WrapMovingNotNullUnchecked(
      nsCOMPtr<nsIOutputStream>(std::move(stream)));
}

Result<NotNull<RefPtr<FileRandomAccessStream>>, nsresult>
Result<MovingNotNull<nsCOMPtr<nsIRandomAccessStream>>, nsresult>
CreateFileRandomAccessStream(PersistenceType aPersistenceType,
                             const OriginMetadata& aOriginMetadata,
                             Client::Type aClientType, nsIFile* aFile,
                             int32_t aIOFlags, int32_t aPerm,
                             int32_t aBehaviorFlags) {
  const auto stream = MakeNotNull<RefPtr<FileRandomAccessStream>>(
  auto stream = MakeRefPtr<FileRandomAccessStream>(
      aPersistenceType, aOriginMetadata, aClientType);

  QM_TRY(MOZ_TO_RESULT(stream->Init(aFile, aIOFlags, aPerm, aBehaviorFlags)));

  return stream;
  return WrapMovingNotNullUnchecked(
      nsCOMPtr<nsIRandomAccessStream>(std::move(stream)));
}

}  // namespace mozilla::dom::quota
+8 −6
Original line number Diff line number Diff line
@@ -120,17 +120,19 @@ class FileRandomAccessStream
  virtual ~FileRandomAccessStream() { Close(); }
};

Result<NotNull<RefPtr<FileInputStream>>, nsresult> CreateFileInputStream(
Result<MovingNotNull<nsCOMPtr<nsIInputStream>>, nsresult> CreateFileInputStream(
    PersistenceType aPersistenceType, const OriginMetadata& aOriginMetadata,
    Client::Type aClientType, nsIFile* aFile, int32_t aIOFlags = -1,
    int32_t aPerm = -1, int32_t aBehaviorFlags = 0);

Result<NotNull<RefPtr<FileOutputStream>>, nsresult> CreateFileOutputStream(
    PersistenceType aPersistenceType, const OriginMetadata& aOriginMetadata,
    Client::Type aClientType, nsIFile* aFile, int32_t aIOFlags = -1,
    int32_t aPerm = -1, int32_t aBehaviorFlags = 0);
Result<MovingNotNull<nsCOMPtr<nsIOutputStream>>, nsresult>
CreateFileOutputStream(PersistenceType aPersistenceType,
                       const OriginMetadata& aOriginMetadata,
                       Client::Type aClientType, nsIFile* aFile,
                       int32_t aIOFlags = -1, int32_t aPerm = -1,
                       int32_t aBehaviorFlags = 0);

Result<NotNull<RefPtr<FileRandomAccessStream>>, nsresult>
Result<MovingNotNull<nsCOMPtr<nsIRandomAccessStream>>, nsresult>
CreateFileRandomAccessStream(PersistenceType aPersistenceType,
                             const OriginMetadata& aOriginMetadata,
                             Client::Type aClientType, nsIFile* aFile,