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/. */
7 #ifndef mozilla_dom_quota_filestreams_h__
8 #define mozilla_dom_quota_filestreams_h__
15 #include "mozilla/AlreadyAddRefed.h"
16 #include "mozilla/RefPtr.h"
17 #include "mozilla/dom/quota/CommonMetadata.h"
18 #include "mozilla/dom/quota/PersistenceType.h"
19 #include "mozilla/dom/quota/QuotaObject.h"
20 #include "nsFileStreams.h"
21 #include "nsISupports.h"
30 namespace mozilla::dom::quota
{
34 template <class FileStreamBase
>
35 class FileQuotaStream
: public FileStreamBase
{
37 // nsFileStreamBase override
45 FileQuotaStream(PersistenceType aPersistenceType
,
46 const OriginMetadata
& aOriginMetadata
,
47 Client::Type aClientType
)
48 : mPersistenceType(aPersistenceType
),
49 mOriginMetadata(aOriginMetadata
),
50 mClientType(aClientType
) {}
52 // nsFileStreamBase override
53 virtual nsresult
DoOpen() override
;
55 PersistenceType mPersistenceType
;
56 OriginMetadata mOriginMetadata
;
57 Client::Type mClientType
;
58 RefPtr
<QuotaObject
> mQuotaObject
;
61 template <class FileStreamBase
>
62 class FileQuotaStreamWithWrite
: public FileQuotaStream
<FileStreamBase
> {
64 // nsFileStreamBase override
66 Write(const char* aBuf
, uint32_t aCount
, uint32_t* _retval
) override
;
69 FileQuotaStreamWithWrite(PersistenceType aPersistenceType
,
70 const OriginMetadata
& aOriginMetadata
,
71 Client::Type aClientType
)
72 : FileQuotaStream
<FileStreamBase
>(aPersistenceType
, aOriginMetadata
,
76 class FileInputStream
: public FileQuotaStream
<nsFileInputStream
> {
78 NS_INLINE_DECL_REFCOUNTING_INHERITED(FileInputStream
,
79 FileQuotaStream
<nsFileInputStream
>)
81 FileInputStream(PersistenceType aPersistenceType
,
82 const OriginMetadata
& aOriginMetadata
,
83 Client::Type aClientType
)
84 : FileQuotaStream
<nsFileInputStream
>(aPersistenceType
, aOriginMetadata
,
88 virtual ~FileInputStream() { Close(); }
91 class FileOutputStream
: public FileQuotaStreamWithWrite
<nsFileOutputStream
> {
93 NS_INLINE_DECL_REFCOUNTING_INHERITED(
94 FileOutputStream
, FileQuotaStreamWithWrite
<nsFileOutputStream
>);
96 FileOutputStream(PersistenceType aPersistenceType
,
97 const OriginMetadata
& aOriginMetadata
,
98 Client::Type aClientType
)
99 : FileQuotaStreamWithWrite
<nsFileOutputStream
>(
100 aPersistenceType
, aOriginMetadata
, aClientType
) {}
103 virtual ~FileOutputStream() { Close(); }
106 class FileStream
: public FileQuotaStreamWithWrite
<nsFileStream
> {
108 NS_INLINE_DECL_REFCOUNTING_INHERITED(FileStream
,
109 FileQuotaStreamWithWrite
<nsFileStream
>)
111 FileStream(PersistenceType aPersistenceType
,
112 const OriginMetadata
& aOriginMetadata
, Client::Type aClientType
)
113 : FileQuotaStreamWithWrite
<nsFileStream
>(aPersistenceType
,
114 aOriginMetadata
, aClientType
) {}
117 virtual ~FileStream() { Close(); }
120 Result
<NotNull
<RefPtr
<FileInputStream
>>, nsresult
> CreateFileInputStream(
121 PersistenceType aPersistenceType
, const OriginMetadata
& aOriginMetadata
,
122 Client::Type aClientType
, nsIFile
* aFile
, int32_t aIOFlags
= -1,
123 int32_t aPerm
= -1, int32_t aBehaviorFlags
= 0);
125 Result
<NotNull
<RefPtr
<FileOutputStream
>>, nsresult
> CreateFileOutputStream(
126 PersistenceType aPersistenceType
, const OriginMetadata
& aOriginMetadata
,
127 Client::Type aClientType
, nsIFile
* aFile
, int32_t aIOFlags
= -1,
128 int32_t aPerm
= -1, int32_t aBehaviorFlags
= 0);
130 Result
<NotNull
<RefPtr
<FileStream
>>, nsresult
> CreateFileStream(
131 PersistenceType aPersistenceType
, const OriginMetadata
& aOriginMetadata
,
132 Client::Type aClientType
, nsIFile
* aFile
, int32_t aIOFlags
= -1,
133 int32_t aPerm
= -1, int32_t aBehaviorFlags
= 0);
135 } // namespace mozilla::dom::quota
137 #endif /* mozilla_dom_quota_filestreams_h__ */