Coverage Report

Created: 2018-09-25 14:53

/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