/src/mozilla-central/dom/quota/QuotaRequests.cpp
Line | Count | Source (jump to first uncovered line) |
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/. */ |
6 | | |
7 | | #include "QuotaRequests.h" |
8 | | |
9 | | #include "ActorsChild.h" |
10 | | #include "nsIQuotaCallbacks.h" |
11 | | |
12 | | namespace mozilla { |
13 | | namespace dom { |
14 | | namespace quota { |
15 | | |
16 | | RequestBase::RequestBase() |
17 | | : mResultCode(NS_OK) |
18 | | , mHaveResultOrErrorCode(false) |
19 | 0 | { |
20 | 0 | AssertIsOnOwningThread(); |
21 | 0 | } |
22 | | |
23 | | RequestBase::RequestBase(nsIPrincipal* aPrincipal) |
24 | | : mPrincipal(aPrincipal) |
25 | | , mResultCode(NS_OK) |
26 | | , mHaveResultOrErrorCode(false) |
27 | 0 | { |
28 | 0 | AssertIsOnOwningThread(); |
29 | 0 | } |
30 | | |
31 | | #ifdef DEBUG |
32 | | |
33 | | void |
34 | | RequestBase::AssertIsOnOwningThread() const |
35 | | { |
36 | | NS_ASSERT_OWNINGTHREAD(RequestBase); |
37 | | } |
38 | | |
39 | | #endif // DEBUG |
40 | | |
41 | | void |
42 | | RequestBase::SetError(nsresult aRv) |
43 | 0 | { |
44 | 0 | AssertIsOnOwningThread(); |
45 | 0 | MOZ_ASSERT(mResultCode == NS_OK); |
46 | 0 | MOZ_ASSERT(!mHaveResultOrErrorCode); |
47 | 0 |
|
48 | 0 | mResultCode = aRv; |
49 | 0 | mHaveResultOrErrorCode = true; |
50 | 0 |
|
51 | 0 | FireCallback(); |
52 | 0 | } |
53 | | |
54 | | NS_IMPL_CYCLE_COLLECTION_0(RequestBase) |
55 | | |
56 | 0 | NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(RequestBase) |
57 | 0 | NS_INTERFACE_MAP_ENTRY(nsISupports) |
58 | 0 | NS_INTERFACE_MAP_END |
59 | | |
60 | | NS_IMPL_CYCLE_COLLECTING_ADDREF(RequestBase) |
61 | | NS_IMPL_CYCLE_COLLECTING_RELEASE(RequestBase) |
62 | | |
63 | | NS_IMETHODIMP |
64 | | RequestBase::GetPrincipal(nsIPrincipal** aPrincipal) |
65 | 0 | { |
66 | 0 | AssertIsOnOwningThread(); |
67 | 0 | MOZ_ASSERT(aPrincipal); |
68 | 0 |
|
69 | 0 | NS_IF_ADDREF(*aPrincipal = mPrincipal); |
70 | 0 | return NS_OK; |
71 | 0 | } |
72 | | |
73 | | NS_IMETHODIMP |
74 | | RequestBase::GetResultCode(nsresult* aResultCode) |
75 | 0 | { |
76 | 0 | AssertIsOnOwningThread(); |
77 | 0 | MOZ_ASSERT(aResultCode); |
78 | 0 |
|
79 | 0 | if (!mHaveResultOrErrorCode) { |
80 | 0 | return NS_ERROR_FAILURE; |
81 | 0 | } |
82 | 0 | |
83 | 0 | *aResultCode = mResultCode; |
84 | 0 | return NS_OK; |
85 | 0 | } |
86 | | |
87 | | UsageRequest::UsageRequest(nsIQuotaUsageCallback* aCallback) |
88 | | : mCallback(aCallback) |
89 | | , mBackgroundActor(nullptr) |
90 | | , mCanceled(false) |
91 | 0 | { |
92 | 0 | AssertIsOnOwningThread(); |
93 | 0 | MOZ_ASSERT(aCallback); |
94 | 0 | } |
95 | | |
96 | | UsageRequest::UsageRequest(nsIPrincipal* aPrincipal, |
97 | | nsIQuotaUsageCallback* aCallback) |
98 | | : RequestBase(aPrincipal) |
99 | | , mCallback(aCallback) |
100 | | , mBackgroundActor(nullptr) |
101 | | , mCanceled(false) |
102 | 0 | { |
103 | 0 | AssertIsOnOwningThread(); |
104 | 0 | MOZ_ASSERT(aPrincipal); |
105 | 0 | MOZ_ASSERT(aCallback); |
106 | 0 | } |
107 | | |
108 | | UsageRequest::~UsageRequest() |
109 | 0 | { |
110 | 0 | AssertIsOnOwningThread(); |
111 | 0 | } |
112 | | |
113 | | void |
114 | | UsageRequest::SetBackgroundActor(QuotaUsageRequestChild* aBackgroundActor) |
115 | 0 | { |
116 | 0 | AssertIsOnOwningThread(); |
117 | 0 | MOZ_ASSERT(aBackgroundActor); |
118 | 0 | MOZ_ASSERT(!mBackgroundActor); |
119 | 0 |
|
120 | 0 | mBackgroundActor = aBackgroundActor; |
121 | 0 |
|
122 | 0 | if (mCanceled) { |
123 | 0 | mBackgroundActor->SendCancel(); |
124 | 0 | } |
125 | 0 | } |
126 | | |
127 | | void |
128 | | UsageRequest::SetResult(nsIVariant* aResult) |
129 | 0 | { |
130 | 0 | AssertIsOnOwningThread(); |
131 | 0 | MOZ_ASSERT(aResult); |
132 | 0 | MOZ_ASSERT(!mHaveResultOrErrorCode); |
133 | 0 |
|
134 | 0 | mResult = aResult; |
135 | 0 |
|
136 | 0 | mHaveResultOrErrorCode = true; |
137 | 0 |
|
138 | 0 | FireCallback(); |
139 | 0 | } |
140 | | |
141 | | NS_IMPL_CYCLE_COLLECTION_INHERITED(UsageRequest, RequestBase, mCallback) |
142 | | |
143 | 0 | NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(UsageRequest) |
144 | 0 | NS_INTERFACE_MAP_ENTRY(nsIQuotaUsageRequest) |
145 | 0 | NS_INTERFACE_MAP_END_INHERITING(RequestBase) |
146 | | |
147 | | NS_IMPL_ADDREF_INHERITED(UsageRequest, RequestBase) |
148 | | NS_IMPL_RELEASE_INHERITED(UsageRequest, RequestBase) |
149 | | |
150 | | NS_IMETHODIMP |
151 | | UsageRequest::GetResult(nsIVariant** aResult) |
152 | 0 | { |
153 | 0 | AssertIsOnOwningThread(); |
154 | 0 | MOZ_ASSERT(aResult); |
155 | 0 |
|
156 | 0 | if (!mHaveResultOrErrorCode) { |
157 | 0 | return NS_ERROR_FAILURE; |
158 | 0 | } |
159 | 0 | |
160 | 0 | NS_IF_ADDREF(*aResult = mResult); |
161 | 0 | return NS_OK; |
162 | 0 | } |
163 | | |
164 | | NS_IMETHODIMP |
165 | | UsageRequest::GetCallback(nsIQuotaUsageCallback** aCallback) |
166 | 0 | { |
167 | 0 | AssertIsOnOwningThread(); |
168 | 0 | MOZ_ASSERT(aCallback); |
169 | 0 |
|
170 | 0 | NS_IF_ADDREF(*aCallback = mCallback); |
171 | 0 | return NS_OK; |
172 | 0 | } |
173 | | |
174 | | NS_IMETHODIMP |
175 | | UsageRequest::SetCallback(nsIQuotaUsageCallback* aCallback) |
176 | 0 | { |
177 | 0 | AssertIsOnOwningThread(); |
178 | 0 |
|
179 | 0 | mCallback = aCallback; |
180 | 0 | return NS_OK; |
181 | 0 | } |
182 | | |
183 | | NS_IMETHODIMP |
184 | | UsageRequest::Cancel() |
185 | 0 | { |
186 | 0 | AssertIsOnOwningThread(); |
187 | 0 |
|
188 | 0 | if (mCanceled) { |
189 | 0 | NS_WARNING("Canceled more than once?!"); |
190 | 0 | return NS_ERROR_UNEXPECTED; |
191 | 0 | } |
192 | 0 |
|
193 | 0 | if (mBackgroundActor) { |
194 | 0 | mBackgroundActor->SendCancel(); |
195 | 0 | } |
196 | 0 |
|
197 | 0 | mCanceled = true; |
198 | 0 |
|
199 | 0 | return NS_OK; |
200 | 0 | } |
201 | | |
202 | | void |
203 | | UsageRequest::FireCallback() |
204 | 0 | { |
205 | 0 | AssertIsOnOwningThread(); |
206 | 0 | MOZ_ASSERT(mCallback); |
207 | 0 |
|
208 | 0 | mCallback->OnUsageResult(this); |
209 | 0 |
|
210 | 0 | // Clean up. |
211 | 0 | mCallback = nullptr; |
212 | 0 | } |
213 | | |
214 | | Request::Request() |
215 | 0 | { |
216 | 0 | AssertIsOnOwningThread(); |
217 | 0 | } |
218 | | |
219 | | Request::Request(nsIPrincipal* aPrincipal) |
220 | | : RequestBase(aPrincipal) |
221 | 0 | { |
222 | 0 | AssertIsOnOwningThread(); |
223 | 0 | MOZ_ASSERT(aPrincipal); |
224 | 0 | } |
225 | | |
226 | | Request::~Request() |
227 | 0 | { |
228 | 0 | AssertIsOnOwningThread(); |
229 | 0 | } |
230 | | |
231 | | void |
232 | | Request::SetResult(nsIVariant* aResult) |
233 | 0 | { |
234 | 0 | AssertIsOnOwningThread(); |
235 | 0 | MOZ_ASSERT(aResult); |
236 | 0 | MOZ_ASSERT(!mHaveResultOrErrorCode); |
237 | 0 |
|
238 | 0 | mResult = aResult; |
239 | 0 |
|
240 | 0 | mHaveResultOrErrorCode = true; |
241 | 0 |
|
242 | 0 | FireCallback(); |
243 | 0 | } |
244 | | |
245 | | NS_IMETHODIMP |
246 | | Request::GetResult(nsIVariant** aResult) |
247 | 0 | { |
248 | 0 | AssertIsOnOwningThread(); |
249 | 0 | MOZ_ASSERT(aResult); |
250 | 0 |
|
251 | 0 | if (!mHaveResultOrErrorCode) { |
252 | 0 | return NS_ERROR_FAILURE; |
253 | 0 | } |
254 | 0 | |
255 | 0 | NS_IF_ADDREF(*aResult = mResult); |
256 | 0 | return NS_OK; |
257 | 0 | } |
258 | | |
259 | | NS_IMPL_CYCLE_COLLECTION_INHERITED(Request, RequestBase, mCallback, mResult) |
260 | | |
261 | 0 | NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Request) |
262 | 0 | NS_INTERFACE_MAP_ENTRY(nsIQuotaRequest) |
263 | 0 | NS_INTERFACE_MAP_END_INHERITING(RequestBase) |
264 | | |
265 | | NS_IMPL_ADDREF_INHERITED(mozilla::dom::quota::Request, RequestBase) |
266 | | NS_IMPL_RELEASE_INHERITED(mozilla::dom::quota::Request, RequestBase) |
267 | | |
268 | | NS_IMETHODIMP |
269 | | Request::GetCallback(nsIQuotaCallback** aCallback) |
270 | 0 | { |
271 | 0 | AssertIsOnOwningThread(); |
272 | 0 | MOZ_ASSERT(aCallback); |
273 | 0 |
|
274 | 0 | NS_IF_ADDREF(*aCallback = mCallback); |
275 | 0 | return NS_OK; |
276 | 0 | } |
277 | | |
278 | | NS_IMETHODIMP |
279 | | Request::SetCallback(nsIQuotaCallback* aCallback) |
280 | 0 | { |
281 | 0 | AssertIsOnOwningThread(); |
282 | 0 |
|
283 | 0 | mCallback = aCallback; |
284 | 0 | return NS_OK; |
285 | 0 | } |
286 | | |
287 | | void |
288 | | Request::FireCallback() |
289 | 0 | { |
290 | 0 | AssertIsOnOwningThread(); |
291 | 0 |
|
292 | 0 | if (mCallback) { |
293 | 0 | mCallback->OnComplete(this); |
294 | 0 |
|
295 | 0 | // Clean up. |
296 | 0 | mCallback = nullptr; |
297 | 0 | } |
298 | 0 | } |
299 | | |
300 | | } // namespace quota |
301 | | } // namespace dom |
302 | | } // namespace mozilla |