1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef mozilla_dom_quota_filestreams_h__ 8 #define mozilla_dom_quota_filestreams_h__ 9 10 #include "QuotaCommon.h" 11 12 #include "nsFileStreams.h" 13 14 #include "PersistenceType.h" 15 #include "QuotaObject.h" 16 17 BEGIN_QUOTA_NAMESPACE 18 19 template <class FileStreamBase> 20 class FileQuotaStream : public FileStreamBase 21 { 22 public: 23 // nsFileStreamBase override 24 NS_IMETHOD 25 SetEOF() override; 26 27 NS_IMETHOD 28 Close() override; 29 30 protected: FileQuotaStream(PersistenceType aPersistenceType,const nsACString & aGroup,const nsACString & aOrigin)31 FileQuotaStream(PersistenceType aPersistenceType, const nsACString& aGroup, 32 const nsACString& aOrigin) 33 : mPersistenceType(aPersistenceType), mGroup(aGroup), mOrigin(aOrigin) 34 { } 35 36 // nsFileStreamBase override 37 virtual nsresult 38 DoOpen() override; 39 40 PersistenceType mPersistenceType; 41 nsCString mGroup; 42 nsCString mOrigin; 43 RefPtr<QuotaObject> mQuotaObject; 44 }; 45 46 template <class FileStreamBase> 47 class FileQuotaStreamWithWrite : public FileQuotaStream<FileStreamBase> 48 { 49 public: 50 // nsFileStreamBase override 51 NS_IMETHOD 52 Write(const char* aBuf, uint32_t aCount, uint32_t* _retval) override; 53 54 protected: FileQuotaStreamWithWrite(PersistenceType aPersistenceType,const nsACString & aGroup,const nsACString & aOrigin)55 FileQuotaStreamWithWrite(PersistenceType aPersistenceType, 56 const nsACString& aGroup, const nsACString& aOrigin) 57 : FileQuotaStream<FileStreamBase>(aPersistenceType, aGroup, aOrigin) 58 { } 59 }; 60 61 class FileInputStream : public FileQuotaStream<nsFileInputStream> 62 { 63 public: 64 NS_DECL_ISUPPORTS_INHERITED 65 66 static already_AddRefed<FileInputStream> 67 Create(PersistenceType aPersistenceType, const nsACString& aGroup, 68 const nsACString& aOrigin, nsIFile* aFile, int32_t aIOFlags = -1, 69 int32_t aPerm = -1, int32_t aBehaviorFlags = 0); 70 71 private: FileInputStream(PersistenceType aPersistenceType,const nsACString & aGroup,const nsACString & aOrigin)72 FileInputStream(PersistenceType aPersistenceType, const nsACString& aGroup, 73 const nsACString& aOrigin) 74 : FileQuotaStream<nsFileInputStream>(aPersistenceType, aGroup, aOrigin) 75 { } 76 ~FileInputStream()77 virtual ~FileInputStream() { 78 Close(); 79 } 80 }; 81 82 class FileOutputStream : public FileQuotaStreamWithWrite<nsFileOutputStream> 83 { 84 public: 85 NS_DECL_ISUPPORTS_INHERITED 86 87 static already_AddRefed<FileOutputStream> 88 Create(PersistenceType aPersistenceType, const nsACString& aGroup, 89 const nsACString& aOrigin, nsIFile* aFile, int32_t aIOFlags = -1, 90 int32_t aPerm = -1, int32_t aBehaviorFlags = 0); 91 92 private: FileOutputStream(PersistenceType aPersistenceType,const nsACString & aGroup,const nsACString & aOrigin)93 FileOutputStream(PersistenceType aPersistenceType, const nsACString& aGroup, 94 const nsACString& aOrigin) 95 : FileQuotaStreamWithWrite<nsFileOutputStream>(aPersistenceType, aGroup, 96 aOrigin) 97 { } 98 ~FileOutputStream()99 virtual ~FileOutputStream() { 100 Close(); 101 } 102 }; 103 104 class FileStream : public FileQuotaStreamWithWrite<nsFileStream> 105 { 106 public: 107 NS_DECL_ISUPPORTS_INHERITED 108 109 static already_AddRefed<FileStream> 110 Create(PersistenceType aPersistenceType, const nsACString& aGroup, 111 const nsACString& aOrigin, nsIFile* aFile, int32_t aIOFlags = -1, 112 int32_t aPerm = -1, int32_t aBehaviorFlags = 0); 113 114 private: FileStream(PersistenceType aPersistenceType,const nsACString & aGroup,const nsACString & aOrigin)115 FileStream(PersistenceType aPersistenceType, const nsACString& aGroup, 116 const nsACString& aOrigin) 117 : FileQuotaStreamWithWrite<nsFileStream>(aPersistenceType, aGroup, aOrigin) 118 { } 119 ~FileStream()120 virtual ~FileStream() { 121 Close(); 122 } 123 }; 124 125 END_QUOTA_NAMESPACE 126 127 #endif /* mozilla_dom_quota_filestreams_h__ */ 128