forked from Floorp-Projects/Floorp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQuotaCommon.h
179 lines (138 loc) · 4.9 KB
/
QuotaCommon.h
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/* -*- 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_quotacommon_h__
#define mozilla_dom_quota_quotacommon_h__
#include "nsCOMPtr.h"
#include "nsDebug.h"
#include "nsPrintfCString.h"
#include "nsString.h"
#include "nsTArray.h"
#define BEGIN_QUOTA_NAMESPACE \
namespace mozilla { \
namespace dom { \
namespace quota {
#define END_QUOTA_NAMESPACE \
} /* namespace quota */ \
} /* namespace dom */ \
} /* namespace mozilla */
#define USING_QUOTA_NAMESPACE using namespace mozilla::dom::quota;
#define DSSTORE_FILE_NAME ".DS_Store"
#define DESKTOP_FILE_NAME ".desktop"
#define DESKTOP_INI_FILE_NAME "desktop.ini"
#define THUMBS_DB_FILE_NAME "thumbs.db"
#define QM_WARNING(...) \
do { \
nsPrintfCString str(__VA_ARGS__); \
mozilla::dom::quota::ReportInternalError(__FILE__, __LINE__, str.get()); \
NS_WARNING(str.get()); \
} while (0)
// Telemetry probes to collect number of failure during the initialization.
#ifdef NIGHTLY_BUILD
# define REPORT_TELEMETRY_INIT_ERR(_key, _label) \
mozilla::Telemetry::AccumulateCategoricalKeyed( \
mozilla::dom::quota::_key, \
mozilla::Telemetry::LABELS_QM_INIT_TELEMETRY_ERROR::_label);
# define REPORT_TELEMETRY_ERR_IN_INIT(_initializing, _key, _label) \
do { \
if (_initializing) { \
REPORT_TELEMETRY_INIT_ERR(_key, _label) \
} \
} while (0)
# define RECORD_IN_NIGHTLY(_recorder, _status) \
do { \
if (NS_SUCCEEDED(_recorder)) { \
_recorder = _status; \
} \
} while (0)
# define CONTINUE_IN_NIGHTLY_RETURN_IN_OTHERS(_dummy) continue
# define RETURN_STATUS_OR_RESULT(_status, _rv) \
return NS_FAILED(_status) ? _status : _rv
#else
# define REPORT_TELEMETRY_INIT_ERR(_key, _label) \
{}
# define REPORT_TELEMETRY_ERR_IN_INIT(_initializing, _key, _label) \
{}
# define RECORD_IN_NIGHTLY(_dummy, _status) \
{}
# define CONTINUE_IN_NIGHTLY_RETURN_IN_OTHERS(_rv) return _rv
# define RETURN_STATUS_OR_RESULT(_status, _rv) return _rv
#endif
class nsIEventTarget;
namespace mozilla {
class LogModule;
namespace dom {
namespace quota {
extern const char kQuotaGenericDelimiter;
// Telemetry keys to indicate types of errors.
#ifdef NIGHTLY_BUILD
extern const nsLiteralCString kQuotaInternalError;
extern const nsLiteralCString kQuotaExternalError;
#else
// No need for these when we're not collecting telemetry.
# define kQuotaInternalError
# define kQuotaExternalError
#endif
class BackgroundThreadObject {
protected:
nsCOMPtr<nsIEventTarget> mOwningThread;
public:
void AssertIsOnOwningThread() const
#ifdef DEBUG
;
#else
{
}
#endif
nsIEventTarget* OwningThread() const;
protected:
BackgroundThreadObject();
explicit BackgroundThreadObject(nsIEventTarget* aOwningThread);
};
void AssertIsOnIOThread();
void AssertCurrentThreadOwnsQuotaMutex();
bool IsOnIOThread();
void ReportInternalError(const char* aFile, uint32_t aLine, const char* aStr);
LogModule* GetQuotaManagerLogger();
void AnonymizeCString(nsACString& aCString);
class AnonymizedCString : public nsCString {
public:
explicit AnonymizedCString(const nsACString& aCString) : nsCString(aCString) {
AnonymizeCString(*this);
}
};
void AnonymizeOriginString(nsACString& aOriginString);
class AnonymizedOriginString : public nsCString {
public:
explicit AnonymizedOriginString(const nsACString& aOriginString)
: nsCString(aOriginString) {
AnonymizeOriginString(*this);
}
};
template <typename T>
void StringifyTableKeys(const T& aTable, nsACString& aResult) {
bool first = true;
for (auto iter = aTable.ConstIter(); !iter.Done(); iter.Next()) {
if (first) {
first = false;
} else {
aResult.Append(NS_LITERAL_CSTRING(", "));
}
const auto& key = iter.Get()->GetKey();
aResult.Append(key);
}
}
class IntString : public nsAutoString {
public:
explicit IntString(int64_t aInteger) { AppendInt(aInteger); }
};
class IntCString : public nsAutoCString {
public:
explicit IntCString(int64_t aInteger) { AppendInt(aInteger); }
};
} // namespace quota
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_quota_quotacommon_h__