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