tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

CacheFileOutputStream.h (2231B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #ifndef CacheFileOutputStream__h__
      6 #define CacheFileOutputStream__h__
      7 
      8 #include "nsIAsyncOutputStream.h"
      9 #include "nsISeekableStream.h"
     10 #include "nsCOMPtr.h"
     11 #include "CacheFileChunk.h"
     12 #include "Dictionary.h"
     13 
     14 namespace mozilla {
     15 namespace net {
     16 
     17 class CacheFile;
     18 class CacheOutputCloseListener;
     19 
     20 class CacheFileOutputStream : public nsIAsyncOutputStream,
     21                              public nsISeekableStream,
     22                              public CacheFileChunkListener {
     23  NS_DECL_THREADSAFE_ISUPPORTS
     24  NS_DECL_NSIOUTPUTSTREAM
     25  NS_DECL_NSIASYNCOUTPUTSTREAM
     26  NS_DECL_NSISEEKABLESTREAM
     27  NS_DECL_NSITELLABLESTREAM
     28 
     29 public:
     30  CacheFileOutputStream(CacheFile* aFile,
     31                        CacheOutputCloseListener* aCloseListener,
     32                        bool aAlternativeData);
     33 
     34  NS_IMETHOD OnChunkRead(nsresult aResult, CacheFileChunk* aChunk) override;
     35  NS_IMETHOD OnChunkWritten(nsresult aResult, CacheFileChunk* aChunk) override;
     36  NS_IMETHOD OnChunkAvailable(nsresult aResult, uint32_t aChunkIdx,
     37                              CacheFileChunk* aChunk) override;
     38  NS_IMETHOD OnChunkUpdated(CacheFileChunk* aChunk) override;
     39 
     40  void NotifyCloseListener();
     41  bool IsAlternativeData() const { return mAlternativeData; };
     42 
     43  void SetDictionary(DictionaryCacheEntry* aDict) { mDict = aDict; }
     44 
     45  // Memory reporting
     46  size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const;
     47 
     48 private:
     49  virtual ~CacheFileOutputStream();
     50 
     51  nsresult CloseWithStatusLocked(nsresult aStatus);
     52  void ReleaseChunk();
     53  void EnsureCorrectChunk(bool aReleaseOnly);
     54  void FillHole();
     55  void NotifyListener();
     56 
     57  RefPtr<CacheFile> mFile;
     58  RefPtr<CacheFileChunk> mChunk;
     59  RefPtr<CacheOutputCloseListener> mCloseListener;
     60  int64_t mPos;
     61  bool mClosed : 1;
     62  bool const mAlternativeData : 1;
     63  nsresult mStatus;
     64 
     65  nsCOMPtr<nsIOutputStreamCallback> mCallback;
     66  uint32_t mCallbackFlags;
     67  nsCOMPtr<nsIEventTarget> mCallbackTarget;
     68  RefPtr<DictionaryCacheEntry> mDict;
     69 };
     70 
     71 }  // namespace net
     72 }  // namespace mozilla
     73 
     74 #endif