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