Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/toolkit/components/url-classifier/nsUrlClassifierProxies.h
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
#ifndef nsUrlClassifierProxies_h
7
#define nsUrlClassifierProxies_h
8
9
#include "nsIUrlClassifierDBService.h"
10
#include "nsUrlClassifierDBService.h"
11
#include "nsProxyRelease.h"
12
#include "nsThreadUtils.h"
13
#include "mozilla/Attributes.h"
14
#include "nsIPrincipal.h"
15
#include "LookupCache.h"
16
17
18
/**
19
 * Thread proxy from the main thread to the worker thread.
20
 */
21
class UrlClassifierDBServiceWorkerProxy final : public nsIUrlClassifierDBService
22
{
23
public:
24
  explicit UrlClassifierDBServiceWorkerProxy(nsUrlClassifierDBServiceWorker* aTarget)
25
    : mTarget(aTarget)
26
0
  { }
27
28
  NS_DECL_THREADSAFE_ISUPPORTS
29
  NS_DECL_NSIURLCLASSIFIERDBSERVICE
30
31
  class LookupRunnable : public mozilla::Runnable
32
  {
33
  public:
34
    LookupRunnable(nsUrlClassifierDBServiceWorker* aTarget,
35
                   nsIPrincipal* aPrincipal,
36
                   const nsACString& aTables,
37
                   nsIUrlClassifierCallback* aCB)
38
      : mozilla::Runnable("UrlClassifierDBServiceWorkerProxy::LookupRunnable")
39
      , mTarget(aTarget)
40
      , mPrincipal(aPrincipal)
41
      , mLookupTables(aTables)
42
      , mCB(aCB)
43
0
    { }
44
45
    NS_DECL_NSIRUNNABLE
46
47
  private:
48
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
49
    const nsCOMPtr<nsIPrincipal> mPrincipal;
50
    const nsCString mLookupTables;
51
    const nsCOMPtr<nsIUrlClassifierCallback> mCB;
52
  };
53
54
  class GetTablesRunnable : public mozilla::Runnable
55
  {
56
  public:
57
    GetTablesRunnable(nsUrlClassifierDBServiceWorker* aTarget,
58
                      nsIUrlClassifierCallback* aCB)
59
      : mozilla::Runnable(
60
          "UrlClassifierDBServiceWorkerProxy::GetTablesRunnable")
61
      , mTarget(aTarget)
62
      , mCB(aCB)
63
0
    { }
64
65
    NS_DECL_NSIRUNNABLE
66
67
  private:
68
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
69
    const nsCOMPtr<nsIUrlClassifierCallback> mCB;
70
  };
71
72
  class BeginUpdateRunnable : public mozilla::Runnable
73
  {
74
  public:
75
    BeginUpdateRunnable(nsUrlClassifierDBServiceWorker* aTarget,
76
                        nsIUrlClassifierUpdateObserver* aUpdater,
77
                        const nsACString& aTables)
78
      : mozilla::Runnable(
79
          "UrlClassifierDBServiceWorkerProxy::BeginUpdateRunnable")
80
      , mTarget(aTarget)
81
      , mUpdater(aUpdater)
82
      , mTables(aTables)
83
0
    { }
84
85
    NS_DECL_NSIRUNNABLE
86
87
  private:
88
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
89
    const nsCOMPtr<nsIUrlClassifierUpdateObserver> mUpdater;
90
    const nsCString mTables;
91
  };
92
93
  class BeginStreamRunnable : public mozilla::Runnable
94
  {
95
  public:
96
    BeginStreamRunnable(nsUrlClassifierDBServiceWorker* aTarget,
97
                        const nsACString& aTable)
98
      : mozilla::Runnable(
99
          "UrlClassifierDBServiceWorkerProxy::BeginStreamRunnable")
100
      , mTarget(aTarget)
101
      , mTable(aTable)
102
0
    { }
103
104
    NS_DECL_NSIRUNNABLE
105
106
  private:
107
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
108
    const nsCString mTable;
109
  };
110
111
  class UpdateStreamRunnable : public mozilla::Runnable
112
  {
113
  public:
114
    UpdateStreamRunnable(nsUrlClassifierDBServiceWorker* aTarget,
115
                         const nsACString& aUpdateChunk)
116
      : mozilla::Runnable(
117
          "UrlClassifierDBServiceWorkerProxy::UpdateStreamRunnable")
118
      , mTarget(aTarget)
119
      , mUpdateChunk(aUpdateChunk)
120
0
    { }
121
122
    NS_DECL_NSIRUNNABLE
123
124
  private:
125
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
126
    const nsCString mUpdateChunk;
127
  };
128
129
  class CacheCompletionsRunnable : public mozilla::Runnable
130
  {
131
  public:
132
    CacheCompletionsRunnable(nsUrlClassifierDBServiceWorker* aTarget,
133
                             const mozilla::safebrowsing::ConstCacheResultArray& aEntries)
134
      : mozilla::Runnable(
135
          "UrlClassifierDBServiceWorkerProxy::CacheCompletionsRunnable")
136
      , mTarget(aTarget)
137
      , mEntries(aEntries)
138
0
    { }
139
140
    NS_DECL_NSIRUNNABLE
141
142
  private:
143
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
144
    const mozilla::safebrowsing::ConstCacheResultArray mEntries;
145
  };
146
147
  class DoLocalLookupRunnable : public mozilla::Runnable
148
  {
149
  public:
150
    DoLocalLookupRunnable(nsUrlClassifierDBServiceWorker* aTarget,
151
                          const nsACString& spec,
152
                          const nsACString& tables,
153
                          mozilla::safebrowsing::LookupResultArray& results)
154
      : mozilla::Runnable(
155
          "UrlClassifierDBServiceWorkerProxy::DoLocalLookupRunnable")
156
      , mTarget(aTarget)
157
      , mSpec(spec)
158
      , mTables(tables)
159
      , mResults(results)
160
0
    { }
161
162
    NS_DECL_NSIRUNNABLE
163
  private:
164
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
165
    const nsCString mSpec;
166
    const nsCString mTables;
167
    mozilla::safebrowsing::LookupResultArray& mResults;
168
  };
169
170
  class ClearLastResultsRunnable : public mozilla::Runnable
171
  {
172
  public:
173
    explicit ClearLastResultsRunnable(nsUrlClassifierDBServiceWorker* aTarget)
174
      : mozilla::Runnable(
175
          "UrlClassifierDBServiceWorkerProxy::ClearLastResultsRunnable")
176
      , mTarget(aTarget)
177
0
    { }
178
179
    NS_DECL_NSIRUNNABLE
180
  private:
181
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
182
  };
183
184
  class GetCacheInfoRunnable: public mozilla::Runnable
185
  {
186
  public:
187
    explicit GetCacheInfoRunnable(nsUrlClassifierDBServiceWorker* aTarget,
188
                                  const nsACString& aTable,
189
                                  nsIUrlClassifierGetCacheCallback* aCallback)
190
      : mozilla::Runnable(
191
          "UrlClassifierDBServiceWorkerProxy::GetCacheInfoRunnable")
192
      , mTarget(aTarget)
193
      , mTable(aTable)
194
      , mCache(nullptr)
195
      , mCallback(new nsMainThreadPtrHolder<nsIUrlClassifierGetCacheCallback>(
196
          "nsIUrlClassifierGetCacheCallback", aCallback))
197
0
    { }
198
199
    NS_DECL_NSIRUNNABLE
200
  private:
201
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
202
    const nsCString mTable;
203
    nsCOMPtr<nsIUrlClassifierCacheInfo> mCache;
204
    const nsMainThreadPtrHandle<nsIUrlClassifierGetCacheCallback> mCallback;
205
  };
206
207
  class GetCacheInfoCallbackRunnable: public mozilla::Runnable
208
  {
209
  public:
210
    explicit GetCacheInfoCallbackRunnable(nsIUrlClassifierCacheInfo* aCache,
211
                                          const nsMainThreadPtrHandle<nsIUrlClassifierGetCacheCallback>& aCallback)
212
      : mozilla::Runnable(
213
          "UrlClassifierDBServiceWorkerProxy::GetCacheInfoCallbackRunnable")
214
      , mCache(aCache)
215
      , mCallback(aCallback)
216
0
    { }
217
218
    NS_DECL_NSIRUNNABLE
219
  private:
220
    nsCOMPtr<nsIUrlClassifierCacheInfo> mCache;
221
    const nsMainThreadPtrHandle<nsIUrlClassifierGetCacheCallback> mCallback;
222
  };
223
224
public:
225
  nsresult DoLocalLookup(const nsACString& spec,
226
                         const nsACString& tables,
227
                         mozilla::safebrowsing::LookupResultArray& results) const;
228
229
  nsresult OpenDb() const;
230
  nsresult CloseDb() const;
231
  nsresult PreShutdown() const;
232
233
  nsresult CacheCompletions(const mozilla::safebrowsing::ConstCacheResultArray& aEntries) const;
234
235
  nsresult GetCacheInfo(const nsACString& aTable,
236
                        nsIUrlClassifierGetCacheCallback* aCallback) const;
237
private:
238
0
  ~UrlClassifierDBServiceWorkerProxy() {}
239
240
  const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
241
};
242
243
// The remaining classes here are all proxies to the main thread
244
245
class UrlClassifierLookupCallbackProxy final :
246
  public nsIUrlClassifierLookupCallback
247
{
248
public:
249
  explicit UrlClassifierLookupCallbackProxy(nsIUrlClassifierLookupCallback* aTarget)
250
    : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierLookupCallback>(
251
        "UrlClassifierLookupCallbackProxy::mTarget", aTarget))
252
0
  { }
253
254
  NS_DECL_THREADSAFE_ISUPPORTS
255
  NS_DECL_NSIURLCLASSIFIERLOOKUPCALLBACK
256
257
  class LookupCompleteRunnable : public mozilla::Runnable
258
  {
259
  public:
260
    LookupCompleteRunnable(
261
      const nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback>& aTarget,
262
      mozilla::UniquePtr<mozilla::safebrowsing::LookupResultArray> aResults)
263
      : mozilla::Runnable(
264
          "UrlClassifierLookupCallbackProxy::LookupCompleteRunnable")
265
      , mTarget(aTarget)
266
      , mResults(std::move(aResults))
267
0
    { }
268
269
    NS_DECL_NSIRUNNABLE
270
271
  private:
272
    const nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback> mTarget;
273
    mozilla::UniquePtr<mozilla::safebrowsing::LookupResultArray> mResults;
274
  };
275
276
private:
277
0
  ~UrlClassifierLookupCallbackProxy() {}
278
279
  const nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback> mTarget;
280
};
281
282
class UrlClassifierCallbackProxy final : public nsIUrlClassifierCallback
283
{
284
public:
285
  explicit UrlClassifierCallbackProxy(nsIUrlClassifierCallback* aTarget)
286
    : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierCallback>(
287
        "UrlClassifierCallbackProxy::mTarget", aTarget))
288
0
  { }
289
290
  NS_DECL_THREADSAFE_ISUPPORTS
291
  NS_DECL_NSIURLCLASSIFIERCALLBACK
292
293
  class HandleEventRunnable : public mozilla::Runnable
294
  {
295
  public:
296
    HandleEventRunnable(
297
      const nsMainThreadPtrHandle<nsIUrlClassifierCallback>& aTarget,
298
      const nsACString& aValue)
299
      : mozilla::Runnable("UrlClassifierCallbackProxy::HandleEventRunnable")
300
      , mTarget(aTarget)
301
      , mValue(aValue)
302
0
    { }
303
304
    NS_DECL_NSIRUNNABLE
305
306
  private:
307
    const nsMainThreadPtrHandle<nsIUrlClassifierCallback> mTarget;
308
    const nsCString mValue;
309
  };
310
311
private:
312
0
  ~UrlClassifierCallbackProxy() {}
313
314
  const nsMainThreadPtrHandle<nsIUrlClassifierCallback> mTarget;
315
};
316
317
class UrlClassifierUpdateObserverProxy final :
318
  public nsIUrlClassifierUpdateObserver
319
{
320
public:
321
  explicit UrlClassifierUpdateObserverProxy(nsIUrlClassifierUpdateObserver* aTarget)
322
    : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierUpdateObserver>(
323
        "UrlClassifierUpdateObserverProxy::mTarget", aTarget))
324
0
  { }
325
326
  NS_DECL_THREADSAFE_ISUPPORTS
327
  NS_DECL_NSIURLCLASSIFIERUPDATEOBSERVER
328
329
  class UpdateUrlRequestedRunnable : public mozilla::Runnable
330
  {
331
  public:
332
    UpdateUrlRequestedRunnable(
333
      const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
334
      const nsACString& aURL,
335
      const nsACString& aTable)
336
      : mozilla::Runnable(
337
          "UrlClassifierUpdateObserverProxy::UpdateUrlRequestedRunnable")
338
      , mTarget(aTarget)
339
      , mURL(aURL)
340
      , mTable(aTable)
341
0
    { }
342
343
    NS_DECL_NSIRUNNABLE
344
345
  private:
346
    const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
347
    const nsCString mURL;
348
    const nsCString mTable;
349
  };
350
351
  class StreamFinishedRunnable : public mozilla::Runnable
352
  {
353
  public:
354
    StreamFinishedRunnable(
355
      const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
356
      nsresult aStatus,
357
      uint32_t aDelay)
358
      : mozilla::Runnable(
359
          "UrlClassifierUpdateObserverProxy::StreamFinishedRunnable")
360
      , mTarget(aTarget)
361
      , mStatus(aStatus)
362
      , mDelay(aDelay)
363
0
    { }
364
365
    NS_DECL_NSIRUNNABLE
366
367
  private:
368
    const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
369
    const nsresult mStatus;
370
    const uint32_t mDelay;
371
  };
372
373
  class UpdateErrorRunnable : public mozilla::Runnable
374
  {
375
  public:
376
    UpdateErrorRunnable(
377
      const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
378
      nsresult aError)
379
      : mozilla::Runnable(
380
          "UrlClassifierUpdateObserverProxy::UpdateErrorRunnable")
381
      , mTarget(aTarget)
382
      , mError(aError)
383
0
    { }
384
385
    NS_DECL_NSIRUNNABLE
386
387
  private:
388
    const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
389
    const nsresult mError;
390
  };
391
392
  class UpdateSuccessRunnable : public mozilla::Runnable
393
  {
394
  public:
395
    UpdateSuccessRunnable(
396
      const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
397
      uint32_t aRequestedTimeout)
398
      : mozilla::Runnable(
399
          "UrlClassifierUpdateObserverProxy::UpdateSuccessRunnable")
400
      , mTarget(aTarget)
401
      , mRequestedTimeout(aRequestedTimeout)
402
0
    { }
403
404
    NS_DECL_NSIRUNNABLE
405
406
  private:
407
    const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
408
    const uint32_t mRequestedTimeout;
409
  };
410
411
private:
412
0
  ~UrlClassifierUpdateObserverProxy() {}
413
414
  const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
415
};
416
417
#endif // nsUrlClassifierProxies_h