Blame netwerk/cache2/CacheFileOutputStream.h

Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#ifndef CacheFileOutputStream__h__
Packit f0b94e
#define CacheFileOutputStream__h__
Packit f0b94e
Packit f0b94e
#include "nsIAsyncOutputStream.h"
Packit f0b94e
#include "nsISeekableStream.h"
Packit f0b94e
#include "nsCOMPtr.h"
Packit f0b94e
#include "nsAutoPtr.h"
Packit f0b94e
#include "CacheFileChunk.h"
Packit f0b94e
Packit f0b94e
namespace mozilla {
Packit f0b94e
namespace net {
Packit f0b94e
Packit f0b94e
class CacheFile;
Packit f0b94e
class CacheOutputCloseListener;
Packit f0b94e
Packit f0b94e
class CacheFileOutputStream : public nsIAsyncOutputStream,
Packit f0b94e
                              public nsISeekableStream,
Packit f0b94e
                              public CacheFileChunkListener {
Packit f0b94e
  NS_DECL_THREADSAFE_ISUPPORTS
Packit f0b94e
  NS_DECL_NSIOUTPUTSTREAM
Packit f0b94e
  NS_DECL_NSIASYNCOUTPUTSTREAM
Packit f0b94e
  NS_DECL_NSISEEKABLESTREAM
Packit f0b94e
Packit f0b94e
 public:
Packit f0b94e
  CacheFileOutputStream(CacheFile *aFile,
Packit f0b94e
                        CacheOutputCloseListener *aCloseListener,
Packit f0b94e
                        bool aAlternativeData);
Packit f0b94e
Packit f0b94e
  NS_IMETHOD OnChunkRead(nsresult aResult, CacheFileChunk *aChunk) override;
Packit f0b94e
  NS_IMETHOD OnChunkWritten(nsresult aResult, CacheFileChunk *aChunk) override;
Packit f0b94e
  NS_IMETHOD OnChunkAvailable(nsresult aResult, uint32_t aChunkIdx,
Packit f0b94e
                              CacheFileChunk *aChunk) override;
Packit f0b94e
  NS_IMETHOD OnChunkUpdated(CacheFileChunk *aChunk) override;
Packit f0b94e
Packit f0b94e
  void NotifyCloseListener();
Packit f0b94e
  bool IsAlternativeData() const { return mAlternativeData; };
Packit f0b94e
Packit f0b94e
  // Memory reporting
Packit f0b94e
  size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const;
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  virtual ~CacheFileOutputStream();
Packit f0b94e
Packit f0b94e
  nsresult CloseWithStatusLocked(nsresult aStatus);
Packit f0b94e
  void ReleaseChunk();
Packit f0b94e
  void EnsureCorrectChunk(bool aReleaseOnly);
Packit f0b94e
  void FillHole();
Packit f0b94e
  void NotifyListener();
Packit f0b94e
Packit f0b94e
  RefPtr<CacheFile> mFile;
Packit f0b94e
  RefPtr<CacheFileChunk> mChunk;
Packit f0b94e
  RefPtr<CacheOutputCloseListener> mCloseListener;
Packit f0b94e
  int64_t mPos;
Packit f0b94e
  bool mClosed : 1;
Packit f0b94e
  bool const mAlternativeData : 1;
Packit f0b94e
  nsresult mStatus;
Packit f0b94e
Packit f0b94e
  nsCOMPtr<nsIOutputStreamCallback> mCallback;
Packit f0b94e
  uint32_t mCallbackFlags;
Packit f0b94e
  nsCOMPtr<nsIEventTarget> mCallbackTarget;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
}  // namespace net
Packit f0b94e
}  // namespace mozilla
Packit f0b94e
Packit f0b94e
#endif