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