nsUrlClassifierProxies.cpp 9.1 KB

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