Bug 1700051: part 46) Const-qualify `mozInlineSpellStatus::mAnchorRange`. r=smaug
[gecko.git] / dom / quota / FileStreams.h
blobae8db57f5ad137063d5441a83157985a41d02259
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__
10 // Local includes
11 #include "Client.h"
13 // Global includes
14 #include <cstdint>
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"
22 #include "nscore.h"
24 class nsIFile;
26 namespace mozilla {
27 class Runnable;
30 namespace mozilla::dom::quota {
32 class QuotaObject;
34 template <class FileStreamBase>
35 class FileQuotaStream : public FileStreamBase {
36 public:
37 // nsFileStreamBase override
38 NS_IMETHOD
39 SetEOF() override;
41 NS_IMETHOD
42 Close() override;
44 protected:
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> {
63 public:
64 // nsFileStreamBase override
65 NS_IMETHOD
66 Write(const char* aBuf, uint32_t aCount, uint32_t* _retval) override;
68 protected:
69 FileQuotaStreamWithWrite(PersistenceType aPersistenceType,
70 const OriginMetadata& aOriginMetadata,
71 Client::Type aClientType)
72 : FileQuotaStream<FileStreamBase>(aPersistenceType, aOriginMetadata,
73 aClientType) {}
76 class FileInputStream : public FileQuotaStream<nsFileInputStream> {
77 public:
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,
85 aClientType) {}
87 private:
88 virtual ~FileInputStream() { Close(); }
91 class FileOutputStream : public FileQuotaStreamWithWrite<nsFileOutputStream> {
92 public:
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) {}
102 private:
103 virtual ~FileOutputStream() { Close(); }
106 class FileStream : public FileQuotaStreamWithWrite<nsFileStream> {
107 public:
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) {}
116 private:
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__ */