Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/toolkit/components/url-classifier/nsUrlClassifierProxies.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
#include "nsUrlClassifierProxies.h"
7
#include "nsUrlClassifierDBService.h"
8
9
#include "mozilla/SyncRunnable.h"
10
11
using namespace mozilla::safebrowsing;
12
using mozilla::NewRunnableMethod;
13
14
static nsresult
15
DispatchToWorkerThread(nsIRunnable* r)
16
0
{
17
0
  nsIThread* t = nsUrlClassifierDBService::BackgroundThread();
18
0
  if (!t)
19
0
    return NS_ERROR_FAILURE;
20
0
21
0
  return t->Dispatch(r, NS_DISPATCH_NORMAL);
22
0
}
23
24
NS_IMPL_ISUPPORTS(UrlClassifierDBServiceWorkerProxy, nsIUrlClassifierDBService)
25
26
NS_IMETHODIMP
27
UrlClassifierDBServiceWorkerProxy::Lookup(nsIPrincipal* aPrincipal,
28
                                          const nsACString& aTables,
29
                                          nsIUrlClassifierCallback* aCB)
30
0
{
31
0
  nsCOMPtr<nsIRunnable> r = new LookupRunnable(mTarget, aPrincipal, aTables,
32
0
                                               aCB);
33
0
  return DispatchToWorkerThread(r);
34
0
}
35
36
NS_IMETHODIMP
37
UrlClassifierDBServiceWorkerProxy::LookupRunnable::Run()
38
0
{
39
0
  (void) mTarget->Lookup(mPrincipal, mLookupTables, mCB);
40
0
  return NS_OK;
41
0
}
42
43
NS_IMETHODIMP
44
UrlClassifierDBServiceWorkerProxy::GetTables(nsIUrlClassifierCallback* aCB)
45
0
{
46
0
  nsCOMPtr<nsIRunnable> r = new GetTablesRunnable(mTarget, aCB);
47
0
  return DispatchToWorkerThread(r);
48
0
}
49
50
NS_IMETHODIMP
51
UrlClassifierDBServiceWorkerProxy::GetTablesRunnable::Run()
52
0
{
53
0
  mTarget->GetTables(mCB);
54
0
  return NS_OK;
55
0
}
56
57
NS_IMETHODIMP
58
UrlClassifierDBServiceWorkerProxy::SetHashCompleter
59
  (const nsACString&, nsIUrlClassifierHashCompleter*)
60
0
{
61
0
  MOZ_ASSERT_UNREACHABLE("This method should not be called!");
62
0
  return NS_ERROR_NOT_IMPLEMENTED;
63
0
}
64
65
NS_IMETHODIMP
66
UrlClassifierDBServiceWorkerProxy::BeginUpdate
67
  (nsIUrlClassifierUpdateObserver* aUpdater,
68
   const nsACString& aTables)
69
0
{
70
0
  nsCOMPtr<nsIRunnable> r = new BeginUpdateRunnable(mTarget, aUpdater,
71
0
                                                    aTables);
72
0
  return DispatchToWorkerThread(r);
73
0
}
74
75
NS_IMETHODIMP
76
UrlClassifierDBServiceWorkerProxy::BeginUpdateRunnable::Run()
77
0
{
78
0
  mTarget->BeginUpdate(mUpdater, mTables);
79
0
  return NS_OK;
80
0
}
81
82
NS_IMETHODIMP
83
UrlClassifierDBServiceWorkerProxy::BeginStream(const nsACString& aTable)
84
0
{
85
0
  nsCOMPtr<nsIRunnable> r =
86
0
    new BeginStreamRunnable(mTarget, aTable);
87
0
  return DispatchToWorkerThread(r);
88
0
}
89
90
NS_IMETHODIMP
91
UrlClassifierDBServiceWorkerProxy::BeginStreamRunnable::Run()
92
0
{
93
0
  mTarget->BeginStream(mTable);
94
0
  return NS_OK;
95
0
}
96
97
NS_IMETHODIMP
98
UrlClassifierDBServiceWorkerProxy::UpdateStream(const nsACString& aUpdateChunk)
99
0
{
100
0
  nsCOMPtr<nsIRunnable> r =
101
0
    new UpdateStreamRunnable(mTarget, aUpdateChunk);
102
0
  return DispatchToWorkerThread(r);
103
0
}
104
105
NS_IMETHODIMP
106
UrlClassifierDBServiceWorkerProxy::UpdateStreamRunnable::Run()
107
0
{
108
0
  mTarget->UpdateStream(mUpdateChunk);
109
0
  return NS_OK;
110
0
}
111
112
NS_IMETHODIMP
113
UrlClassifierDBServiceWorkerProxy::FinishStream()
114
0
{
115
0
  nsCOMPtr<nsIRunnable> r =
116
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::FinishStream",
117
0
                      mTarget,
118
0
                      &nsUrlClassifierDBServiceWorker::FinishStream);
119
0
  return DispatchToWorkerThread(r);
120
0
}
121
122
NS_IMETHODIMP
123
UrlClassifierDBServiceWorkerProxy::DoLocalLookupRunnable::Run()
124
0
{
125
0
  mTarget->DoLocalLookup(mSpec, mTables, mResults);
126
0
  return NS_OK;
127
0
}
128
129
nsresult
130
UrlClassifierDBServiceWorkerProxy::DoLocalLookup(const nsACString& spec,
131
                                                 const nsACString& tables,
132
                                                 LookupResultArray& results) const
133
134
0
{
135
0
  // Run synchronously on background thread. NS_DISPATCH_SYNC does *not* do
136
0
  // what we want -- it continues processing events on the main thread loop
137
0
  // before the Dispatch returns.
138
0
  nsCOMPtr<nsIRunnable> r = new DoLocalLookupRunnable(mTarget, spec, tables, results);
139
0
  nsIThread* t = nsUrlClassifierDBService::BackgroundThread();
140
0
  if (!t)
141
0
    return NS_ERROR_FAILURE;
142
0
143
0
  mozilla::SyncRunnable::DispatchToThread(t, r);
144
0
  return NS_OK;
145
0
}
146
147
NS_IMETHODIMP
148
UrlClassifierDBServiceWorkerProxy::FinishUpdate()
149
0
{
150
0
  nsCOMPtr<nsIRunnable> r =
151
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::FinishUpdate",
152
0
                      mTarget,
153
0
                      &nsUrlClassifierDBServiceWorker::FinishUpdate);
154
0
  return DispatchToWorkerThread(r);
155
0
}
156
157
NS_IMETHODIMP
158
UrlClassifierDBServiceWorkerProxy::CancelUpdate()
159
0
{
160
0
  nsCOMPtr<nsIRunnable> r =
161
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::CancelUpdate",
162
0
                      mTarget,
163
0
                      &nsUrlClassifierDBServiceWorker::CancelUpdate);
164
0
  return DispatchToWorkerThread(r);
165
0
}
166
167
NS_IMETHODIMP
168
UrlClassifierDBServiceWorkerProxy::ResetDatabase()
169
0
{
170
0
  nsCOMPtr<nsIRunnable> r =
171
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::ResetDatabase",
172
0
                      mTarget,
173
0
                      &nsUrlClassifierDBServiceWorker::ResetDatabase);
174
0
  return DispatchToWorkerThread(r);
175
0
}
176
177
NS_IMETHODIMP
178
UrlClassifierDBServiceWorkerProxy::ReloadDatabase()
179
0
{
180
0
  nsCOMPtr<nsIRunnable> r =
181
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::ReloadDatabase",
182
0
                      mTarget,
183
0
                      &nsUrlClassifierDBServiceWorker::ReloadDatabase);
184
0
  return DispatchToWorkerThread(r);
185
0
}
186
187
NS_IMETHODIMP
188
UrlClassifierDBServiceWorkerProxy::ClearCache()
189
0
{
190
0
  nsCOMPtr<nsIRunnable> r =
191
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::ClearCache",
192
0
                      mTarget,
193
0
                      &nsUrlClassifierDBServiceWorker::ClearCache);
194
0
  return DispatchToWorkerThread(r);
195
0
}
196
197
nsresult
198
UrlClassifierDBServiceWorkerProxy::OpenDb() const
199
0
{
200
0
  nsCOMPtr<nsIRunnable> r =
201
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::OpenDb",
202
0
                      mTarget,
203
0
                      &nsUrlClassifierDBServiceWorker::OpenDb);
204
0
  return DispatchToWorkerThread(r);
205
0
}
206
207
nsresult
208
UrlClassifierDBServiceWorkerProxy::CloseDb() const
209
0
{
210
0
  nsCOMPtr<nsIRunnable> r =
211
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::CloseDb",
212
0
                      mTarget,
213
0
                      &nsUrlClassifierDBServiceWorker::CloseDb);
214
0
  return DispatchToWorkerThread(r);
215
0
}
216
217
nsresult
218
UrlClassifierDBServiceWorkerProxy::PreShutdown() const
219
0
{
220
0
  nsCOMPtr<nsIRunnable> r =
221
0
    NewRunnableMethod("nsUrlClassifierDBServiceWorker::PreShutdown",
222
0
                      mTarget,
223
0
                      &nsUrlClassifierDBServiceWorker::PreShutdown);
224
0
  return DispatchToWorkerThread(r);
225
0
}
226
227
nsresult
228
UrlClassifierDBServiceWorkerProxy::CacheCompletions(const ConstCacheResultArray& aEntries) const
229
0
{
230
0
  nsCOMPtr<nsIRunnable> r = new CacheCompletionsRunnable(mTarget, aEntries);
231
0
  return DispatchToWorkerThread(r);
232
0
}
233
234
NS_IMETHODIMP
235
UrlClassifierDBServiceWorkerProxy::CacheCompletionsRunnable::Run()
236
0
{
237
0
  mTarget->CacheCompletions(mEntries);
238
0
  return NS_OK;
239
0
}
240
241
NS_IMETHODIMP
242
UrlClassifierDBServiceWorkerProxy::ClearLastResults()
243
0
{
244
0
  nsCOMPtr<nsIRunnable> r = new ClearLastResultsRunnable(mTarget);
245
0
  return DispatchToWorkerThread(r);
246
0
}
247
248
NS_IMETHODIMP
249
UrlClassifierDBServiceWorkerProxy::ClearLastResultsRunnable::Run()
250
0
{
251
0
  return mTarget->ClearLastResults();
252
0
}
253
254
nsresult
255
UrlClassifierDBServiceWorkerProxy::GetCacheInfo(const nsACString& aTable,
256
                                                nsIUrlClassifierGetCacheCallback* aCallback) const
257
0
{
258
0
  nsCOMPtr<nsIRunnable> r = new GetCacheInfoRunnable(mTarget, aTable, aCallback);
259
0
  return DispatchToWorkerThread(r);
260
0
}
261
262
NS_IMETHODIMP
263
UrlClassifierDBServiceWorkerProxy::GetCacheInfoRunnable::Run()
264
0
{
265
0
  MOZ_ASSERT(mCallback);
266
0
267
0
  mTarget->GetCacheInfo(mTable, getter_AddRefs(mCache));
268
0
269
0
  nsCOMPtr<nsIRunnable> r = new GetCacheInfoCallbackRunnable(mCache, mCallback);
270
0
  return NS_DispatchToMainThread(r);
271
0
}
272
273
274
NS_IMETHODIMP
275
UrlClassifierDBServiceWorkerProxy::GetCacheInfoCallbackRunnable::Run()
276
0
{
277
0
  MOZ_ASSERT(NS_IsMainThread(), "Must be called on main thread");
278
0
  MOZ_ASSERT(mCallback);
279
0
280
0
  mCallback->OnGetCacheComplete(mCache);
281
0
282
0
  return NS_OK;
283
0
}
284
285
NS_IMPL_ISUPPORTS(UrlClassifierLookupCallbackProxy,
286
                  nsIUrlClassifierLookupCallback)
287
288
NS_IMETHODIMP
289
UrlClassifierLookupCallbackProxy::LookupComplete(UniquePtr<LookupResultArray> aResults)
290
0
{
291
0
  nsCOMPtr<nsIRunnable> r = new LookupCompleteRunnable(mTarget,
292
0
                                                       std::move(aResults));
293
0
  return NS_DispatchToMainThread(r);
294
0
}
295
296
NS_IMETHODIMP
297
UrlClassifierLookupCallbackProxy::LookupCompleteRunnable::Run()
298
0
{
299
0
  mTarget->LookupComplete(std::move(mResults));
300
0
  return NS_OK;
301
0
}
302
303
NS_IMPL_ISUPPORTS(UrlClassifierCallbackProxy,
304
                  nsIUrlClassifierCallback)
305
306
NS_IMETHODIMP
307
UrlClassifierCallbackProxy::HandleEvent(const nsACString& aValue)
308
0
{
309
0
  nsCOMPtr<nsIRunnable> r = new HandleEventRunnable(mTarget, aValue);
310
0
  return NS_DispatchToMainThread(r);
311
0
}
312
313
NS_IMETHODIMP
314
UrlClassifierCallbackProxy::HandleEventRunnable::Run()
315
0
{
316
0
  mTarget->HandleEvent(mValue);
317
0
  return NS_OK;
318
0
}
319
320
NS_IMPL_ISUPPORTS(UrlClassifierUpdateObserverProxy,
321
                  nsIUrlClassifierUpdateObserver)
322
323
NS_IMETHODIMP
324
UrlClassifierUpdateObserverProxy::UpdateUrlRequested
325
  (const nsACString& aURL,
326
   const nsACString& aTable)
327
0
{
328
0
  nsCOMPtr<nsIRunnable> r =
329
0
    new UpdateUrlRequestedRunnable(mTarget, aURL, aTable);
330
0
  return NS_DispatchToMainThread(r);
331
0
}
332
333
NS_IMETHODIMP
334
UrlClassifierUpdateObserverProxy::UpdateUrlRequestedRunnable::Run()
335
0
{
336
0
  mTarget->UpdateUrlRequested(mURL, mTable);
337
0
  return NS_OK;
338
0
}
339
340
NS_IMETHODIMP
341
UrlClassifierUpdateObserverProxy::StreamFinished(nsresult aStatus,
342
                                                 uint32_t aDelay)
343
0
{
344
0
  nsCOMPtr<nsIRunnable> r =
345
0
    new StreamFinishedRunnable(mTarget, aStatus, aDelay);
346
0
  return NS_DispatchToMainThread(r);
347
0
}
348
349
NS_IMETHODIMP
350
UrlClassifierUpdateObserverProxy::StreamFinishedRunnable::Run()
351
0
{
352
0
  mTarget->StreamFinished(mStatus, mDelay);
353
0
  return NS_OK;
354
0
}
355
356
NS_IMETHODIMP
357
UrlClassifierUpdateObserverProxy::UpdateError(nsresult aError)
358
0
{
359
0
  nsCOMPtr<nsIRunnable> r =
360
0
    new UpdateErrorRunnable(mTarget, aError);
361
0
  return NS_DispatchToMainThread(r);
362
0
}
363
364
NS_IMETHODIMP
365
UrlClassifierUpdateObserverProxy::UpdateErrorRunnable::Run()
366
0
{
367
0
  mTarget->UpdateError(mError);
368
0
  return NS_OK;
369
0
}
370
371
NS_IMETHODIMP
372
UrlClassifierUpdateObserverProxy::UpdateSuccess(uint32_t aRequestedTimeout)
373
0
{
374
0
  nsCOMPtr<nsIRunnable> r =
375
0
    new UpdateSuccessRunnable(mTarget, aRequestedTimeout);
376
0
  return NS_DispatchToMainThread(r);
377
0
}
378
379
NS_IMETHODIMP
380
UrlClassifierUpdateObserverProxy::UpdateSuccessRunnable::Run()
381
0
{
382
0
  mTarget->UpdateSuccess(mRequestedTimeout);
383
0
  return NS_OK;
384
0
}