/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 | } |