dom/quota/FileStreams.h

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:bf3881dc376d
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=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() MOZ_OVERRIDE;
26
27 NS_IMETHOD
28 Close() MOZ_OVERRIDE;
29
30 protected:
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() MOZ_OVERRIDE;
39
40 PersistenceType mPersistenceType;
41 nsCString mGroup;
42 nsCString mOrigin;
43 nsRefPtr<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) MOZ_OVERRIDE;
53
54 protected:
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:
72 FileInputStream(PersistenceType aPersistenceType, const nsACString& aGroup,
73 const nsACString& aOrigin)
74 : FileQuotaStream<nsFileInputStream>(aPersistenceType, aGroup, aOrigin)
75 { }
76
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:
93 FileOutputStream(PersistenceType aPersistenceType, const nsACString& aGroup,
94 const nsACString& aOrigin)
95 : FileQuotaStreamWithWrite<nsFileOutputStream>(aPersistenceType, aGroup,
96 aOrigin)
97 { }
98
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:
115 FileStream(PersistenceType aPersistenceType, const nsACString& aGroup,
116 const nsACString& aOrigin)
117 : FileQuotaStreamWithWrite<nsFileStream>(aPersistenceType, aGroup, aOrigin)
118 { }
119
120 virtual ~FileStream() {
121 Close();
122 }
123 };
124
125 END_QUOTA_NAMESPACE
126
127 #endif /* mozilla_dom_quota_filestreams_h__ */

mercurial