Bug 1688354 [wpt PR 27298] - Treat 'rem' as an absolute unit for font size, a=testonly
[gecko.git] / dom / quota / FileStreams.h
bloba5a3344993ff1519c9296013d0adf0bd4b75e4fa
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/PersistenceType.h"
18 #include "mozilla/dom/quota/QuotaInfo.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 GroupAndOrigin& aGroupAndOrigin,
47 Client::Type aClientType)
48 : mPersistenceType(aPersistenceType),
49 mGroupAndOrigin(aGroupAndOrigin),
50 mClientType(aClientType) {}
52 // nsFileStreamBase override
53 virtual nsresult DoOpen() override;
55 PersistenceType mPersistenceType;
56 GroupAndOrigin mGroupAndOrigin;
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 GroupAndOrigin& aGroupAndOrigin,
71 Client::Type aClientType)
72 : FileQuotaStream<FileStreamBase>(aPersistenceType, aGroupAndOrigin,
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 GroupAndOrigin& aGroupAndOrigin,
83 Client::Type aClientType)
84 : FileQuotaStream<nsFileInputStream>(aPersistenceType, aGroupAndOrigin,
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 GroupAndOrigin& aGroupAndOrigin,
98 Client::Type aClientType)
99 : FileQuotaStreamWithWrite<nsFileOutputStream>(
100 aPersistenceType, aGroupAndOrigin, 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 GroupAndOrigin& aGroupAndOrigin, Client::Type aClientType)
113 : FileQuotaStreamWithWrite<nsFileStream>(aPersistenceType,
114 aGroupAndOrigin, aClientType) {}
116 private:
117 virtual ~FileStream() { Close(); }
120 Result<NotNull<RefPtr<FileInputStream>>, nsresult> CreateFileInputStream(
121 PersistenceType aPersistenceType, const GroupAndOrigin& aGroupAndOrigin,
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 GroupAndOrigin& aGroupAndOrigin,
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 GroupAndOrigin& aGroupAndOrigin,
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__ */