|
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 using namespace mozilla::safebrowsing; |
|
10 |
|
11 static nsresult |
|
12 DispatchToWorkerThread(nsIRunnable* r) |
|
13 { |
|
14 nsIThread* t = nsUrlClassifierDBService::BackgroundThread(); |
|
15 if (!t) |
|
16 return NS_ERROR_FAILURE; |
|
17 |
|
18 return t->Dispatch(r, NS_DISPATCH_NORMAL); |
|
19 } |
|
20 |
|
21 NS_IMPL_ISUPPORTS(UrlClassifierDBServiceWorkerProxy, |
|
22 nsIUrlClassifierDBServiceWorker) |
|
23 |
|
24 NS_IMETHODIMP |
|
25 UrlClassifierDBServiceWorkerProxy::Lookup(nsIPrincipal* aPrincipal, |
|
26 const nsACString& aTables, |
|
27 nsIUrlClassifierCallback* aCB) |
|
28 { |
|
29 nsCOMPtr<nsIRunnable> r = new LookupRunnable(mTarget, aPrincipal, aTables, |
|
30 aCB); |
|
31 return DispatchToWorkerThread(r); |
|
32 } |
|
33 |
|
34 NS_IMETHODIMP |
|
35 UrlClassifierDBServiceWorkerProxy::LookupRunnable::Run() |
|
36 { |
|
37 (void) mTarget->Lookup(mPrincipal, mLookupTables, mCB); |
|
38 return NS_OK; |
|
39 } |
|
40 |
|
41 NS_IMETHODIMP |
|
42 UrlClassifierDBServiceWorkerProxy::GetTables(nsIUrlClassifierCallback* aCB) |
|
43 { |
|
44 nsCOMPtr<nsIRunnable> r = new GetTablesRunnable(mTarget, aCB); |
|
45 return DispatchToWorkerThread(r); |
|
46 } |
|
47 |
|
48 NS_IMETHODIMP |
|
49 UrlClassifierDBServiceWorkerProxy::GetTablesRunnable::Run() |
|
50 { |
|
51 mTarget->GetTables(mCB); |
|
52 return NS_OK; |
|
53 } |
|
54 |
|
55 NS_IMETHODIMP |
|
56 UrlClassifierDBServiceWorkerProxy::SetHashCompleter |
|
57 (const nsACString&, nsIUrlClassifierHashCompleter*) |
|
58 { |
|
59 NS_NOTREACHED("This method should not be called!"); |
|
60 return NS_ERROR_NOT_IMPLEMENTED; |
|
61 } |
|
62 |
|
63 NS_IMETHODIMP |
|
64 UrlClassifierDBServiceWorkerProxy::BeginUpdate |
|
65 (nsIUrlClassifierUpdateObserver* aUpdater, |
|
66 const nsACString& aTables) |
|
67 { |
|
68 nsCOMPtr<nsIRunnable> r = new BeginUpdateRunnable(mTarget, aUpdater, |
|
69 aTables); |
|
70 return DispatchToWorkerThread(r); |
|
71 } |
|
72 |
|
73 NS_IMETHODIMP |
|
74 UrlClassifierDBServiceWorkerProxy::BeginUpdateRunnable::Run() |
|
75 { |
|
76 mTarget->BeginUpdate(mUpdater, mTables); |
|
77 return NS_OK; |
|
78 } |
|
79 |
|
80 NS_IMETHODIMP |
|
81 UrlClassifierDBServiceWorkerProxy::BeginStream(const nsACString& aTable) |
|
82 { |
|
83 nsCOMPtr<nsIRunnable> r = |
|
84 new BeginStreamRunnable(mTarget, aTable); |
|
85 return DispatchToWorkerThread(r); |
|
86 } |
|
87 |
|
88 NS_IMETHODIMP |
|
89 UrlClassifierDBServiceWorkerProxy::BeginStreamRunnable::Run() |
|
90 { |
|
91 mTarget->BeginStream(mTable); |
|
92 return NS_OK; |
|
93 } |
|
94 |
|
95 NS_IMETHODIMP |
|
96 UrlClassifierDBServiceWorkerProxy::UpdateStream(const nsACString& aUpdateChunk) |
|
97 { |
|
98 nsCOMPtr<nsIRunnable> r = |
|
99 new UpdateStreamRunnable(mTarget, aUpdateChunk); |
|
100 return DispatchToWorkerThread(r); |
|
101 } |
|
102 |
|
103 NS_IMETHODIMP |
|
104 UrlClassifierDBServiceWorkerProxy::UpdateStreamRunnable::Run() |
|
105 { |
|
106 mTarget->UpdateStream(mUpdateChunk); |
|
107 return NS_OK; |
|
108 } |
|
109 |
|
110 NS_IMETHODIMP |
|
111 UrlClassifierDBServiceWorkerProxy::FinishStream() |
|
112 { |
|
113 nsCOMPtr<nsIRunnable> r = |
|
114 NS_NewRunnableMethod(mTarget, |
|
115 &nsIUrlClassifierDBServiceWorker::FinishStream); |
|
116 return DispatchToWorkerThread(r); |
|
117 } |
|
118 |
|
119 NS_IMETHODIMP |
|
120 UrlClassifierDBServiceWorkerProxy::FinishUpdate() |
|
121 { |
|
122 nsCOMPtr<nsIRunnable> r = |
|
123 NS_NewRunnableMethod(mTarget, |
|
124 &nsIUrlClassifierDBServiceWorker::FinishUpdate); |
|
125 return DispatchToWorkerThread(r); |
|
126 } |
|
127 |
|
128 NS_IMETHODIMP |
|
129 UrlClassifierDBServiceWorkerProxy::CancelUpdate() |
|
130 { |
|
131 nsCOMPtr<nsIRunnable> r = |
|
132 NS_NewRunnableMethod(mTarget, |
|
133 &nsIUrlClassifierDBServiceWorker::CancelUpdate); |
|
134 return DispatchToWorkerThread(r); |
|
135 } |
|
136 |
|
137 NS_IMETHODIMP |
|
138 UrlClassifierDBServiceWorkerProxy::ResetDatabase() |
|
139 { |
|
140 nsCOMPtr<nsIRunnable> r = |
|
141 NS_NewRunnableMethod(mTarget, |
|
142 &nsIUrlClassifierDBServiceWorker::ResetDatabase); |
|
143 return DispatchToWorkerThread(r); |
|
144 } |
|
145 |
|
146 NS_IMETHODIMP |
|
147 UrlClassifierDBServiceWorkerProxy::CloseDb() |
|
148 { |
|
149 nsCOMPtr<nsIRunnable> r = |
|
150 NS_NewRunnableMethod(mTarget, |
|
151 &nsIUrlClassifierDBServiceWorker::CloseDb); |
|
152 return DispatchToWorkerThread(r); |
|
153 } |
|
154 |
|
155 NS_IMETHODIMP |
|
156 UrlClassifierDBServiceWorkerProxy::CacheCompletions(CacheResultArray * aEntries) |
|
157 { |
|
158 nsCOMPtr<nsIRunnable> r = new CacheCompletionsRunnable(mTarget, aEntries); |
|
159 return DispatchToWorkerThread(r); |
|
160 } |
|
161 |
|
162 NS_IMETHODIMP |
|
163 UrlClassifierDBServiceWorkerProxy::CacheCompletionsRunnable::Run() |
|
164 { |
|
165 mTarget->CacheCompletions(mEntries); |
|
166 return NS_OK; |
|
167 } |
|
168 |
|
169 NS_IMETHODIMP |
|
170 UrlClassifierDBServiceWorkerProxy::CacheMisses(PrefixArray * aEntries) |
|
171 { |
|
172 nsCOMPtr<nsIRunnable> r = new CacheMissesRunnable(mTarget, aEntries); |
|
173 return DispatchToWorkerThread(r); |
|
174 } |
|
175 |
|
176 NS_IMETHODIMP |
|
177 UrlClassifierDBServiceWorkerProxy::CacheMissesRunnable::Run() |
|
178 { |
|
179 mTarget->CacheMisses(mEntries); |
|
180 return NS_OK; |
|
181 } |
|
182 |
|
183 |
|
184 NS_IMPL_ISUPPORTS(UrlClassifierLookupCallbackProxy, |
|
185 nsIUrlClassifierLookupCallback) |
|
186 |
|
187 NS_IMETHODIMP |
|
188 UrlClassifierLookupCallbackProxy::LookupComplete |
|
189 (LookupResultArray * aResults) |
|
190 { |
|
191 nsCOMPtr<nsIRunnable> r = new LookupCompleteRunnable(mTarget, aResults); |
|
192 return NS_DispatchToMainThread(r); |
|
193 } |
|
194 |
|
195 NS_IMETHODIMP |
|
196 UrlClassifierLookupCallbackProxy::LookupCompleteRunnable::Run() |
|
197 { |
|
198 mTarget->LookupComplete(mResults); |
|
199 return NS_OK; |
|
200 } |
|
201 |
|
202 NS_IMPL_ISUPPORTS(UrlClassifierCallbackProxy, |
|
203 nsIUrlClassifierCallback) |
|
204 |
|
205 NS_IMETHODIMP |
|
206 UrlClassifierCallbackProxy::HandleEvent(const nsACString& aValue) |
|
207 { |
|
208 nsCOMPtr<nsIRunnable> r = new HandleEventRunnable(mTarget, aValue); |
|
209 return NS_DispatchToMainThread(r); |
|
210 } |
|
211 |
|
212 NS_IMETHODIMP |
|
213 UrlClassifierCallbackProxy::HandleEventRunnable::Run() |
|
214 { |
|
215 mTarget->HandleEvent(mValue); |
|
216 return NS_OK; |
|
217 } |
|
218 |
|
219 NS_IMPL_ISUPPORTS(UrlClassifierUpdateObserverProxy, |
|
220 nsIUrlClassifierUpdateObserver) |
|
221 |
|
222 NS_IMETHODIMP |
|
223 UrlClassifierUpdateObserverProxy::UpdateUrlRequested |
|
224 (const nsACString& aURL, |
|
225 const nsACString& aTable) |
|
226 { |
|
227 nsCOMPtr<nsIRunnable> r = |
|
228 new UpdateUrlRequestedRunnable(mTarget, aURL, aTable); |
|
229 return NS_DispatchToMainThread(r); |
|
230 } |
|
231 |
|
232 NS_IMETHODIMP |
|
233 UrlClassifierUpdateObserverProxy::UpdateUrlRequestedRunnable::Run() |
|
234 { |
|
235 mTarget->UpdateUrlRequested(mURL, mTable); |
|
236 return NS_OK; |
|
237 } |
|
238 |
|
239 NS_IMETHODIMP |
|
240 UrlClassifierUpdateObserverProxy::StreamFinished(nsresult aStatus, |
|
241 uint32_t aDelay) |
|
242 { |
|
243 nsCOMPtr<nsIRunnable> r = |
|
244 new StreamFinishedRunnable(mTarget, aStatus, aDelay); |
|
245 return NS_DispatchToMainThread(r); |
|
246 } |
|
247 |
|
248 NS_IMETHODIMP |
|
249 UrlClassifierUpdateObserverProxy::StreamFinishedRunnable::Run() |
|
250 { |
|
251 mTarget->StreamFinished(mStatus, mDelay); |
|
252 return NS_OK; |
|
253 } |
|
254 |
|
255 NS_IMETHODIMP |
|
256 UrlClassifierUpdateObserverProxy::UpdateError(nsresult aError) |
|
257 { |
|
258 nsCOMPtr<nsIRunnable> r = |
|
259 new UpdateErrorRunnable(mTarget, aError); |
|
260 return NS_DispatchToMainThread(r); |
|
261 } |
|
262 |
|
263 NS_IMETHODIMP |
|
264 UrlClassifierUpdateObserverProxy::UpdateErrorRunnable::Run() |
|
265 { |
|
266 mTarget->UpdateError(mError); |
|
267 return NS_OK; |
|
268 } |
|
269 |
|
270 NS_IMETHODIMP |
|
271 UrlClassifierUpdateObserverProxy::UpdateSuccess(uint32_t aRequestedTimeout) |
|
272 { |
|
273 nsCOMPtr<nsIRunnable> r = |
|
274 new UpdateSuccessRunnable(mTarget, aRequestedTimeout); |
|
275 return NS_DispatchToMainThread(r); |
|
276 } |
|
277 |
|
278 NS_IMETHODIMP |
|
279 UrlClassifierUpdateObserverProxy::UpdateSuccessRunnable::Run() |
|
280 { |
|
281 mTarget->UpdateSuccess(mRequestedTimeout); |
|
282 return NS_OK; |
|
283 } |