nsUrlClassifierProxies.h 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  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. #ifndef nsUrlClassifierProxies_h
  6. #define nsUrlClassifierProxies_h
  7. #include "nsIUrlClassifierDBService.h"
  8. #include "nsUrlClassifierDBService.h"
  9. #include "nsProxyRelease.h"
  10. #include "nsThreadUtils.h"
  11. #include "mozilla/Attributes.h"
  12. #include "nsIPrincipal.h"
  13. #include "LookupCache.h"
  14. /**
  15. * Thread proxy from the main thread to the worker thread.
  16. */
  17. class UrlClassifierDBServiceWorkerProxy final : public nsIUrlClassifierDBService
  18. {
  19. public:
  20. explicit UrlClassifierDBServiceWorkerProxy(nsUrlClassifierDBServiceWorker* aTarget)
  21. : mTarget(aTarget)
  22. { }
  23. NS_DECL_THREADSAFE_ISUPPORTS
  24. NS_DECL_NSIURLCLASSIFIERDBSERVICE
  25. class LookupRunnable : public mozilla::Runnable
  26. {
  27. public:
  28. LookupRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  29. nsIPrincipal* aPrincipal,
  30. const nsACString& aTables,
  31. nsIUrlClassifierCallback* aCB)
  32. : mTarget(aTarget)
  33. , mPrincipal(aPrincipal)
  34. , mLookupTables(aTables)
  35. , mCB(aCB)
  36. { }
  37. NS_DECL_NSIRUNNABLE
  38. private:
  39. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  40. nsCOMPtr<nsIPrincipal> mPrincipal;
  41. nsCString mLookupTables;
  42. nsCOMPtr<nsIUrlClassifierCallback> mCB;
  43. };
  44. class GetTablesRunnable : public mozilla::Runnable
  45. {
  46. public:
  47. GetTablesRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  48. nsIUrlClassifierCallback* aCB)
  49. : mTarget(aTarget)
  50. , mCB(aCB)
  51. { }
  52. NS_DECL_NSIRUNNABLE
  53. private:
  54. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  55. nsCOMPtr<nsIUrlClassifierCallback> mCB;
  56. };
  57. class BeginUpdateRunnable : public mozilla::Runnable
  58. {
  59. public:
  60. BeginUpdateRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  61. nsIUrlClassifierUpdateObserver* aUpdater,
  62. const nsACString& aTables)
  63. : mTarget(aTarget)
  64. , mUpdater(aUpdater)
  65. , mTables(aTables)
  66. { }
  67. NS_DECL_NSIRUNNABLE
  68. private:
  69. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  70. nsCOMPtr<nsIUrlClassifierUpdateObserver> mUpdater;
  71. nsCString mTables;
  72. };
  73. class BeginStreamRunnable : public mozilla::Runnable
  74. {
  75. public:
  76. BeginStreamRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  77. const nsACString& aTable)
  78. : mTarget(aTarget)
  79. , mTable(aTable)
  80. { }
  81. NS_DECL_NSIRUNNABLE
  82. private:
  83. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  84. nsCString mTable;
  85. };
  86. class UpdateStreamRunnable : public mozilla::Runnable
  87. {
  88. public:
  89. UpdateStreamRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  90. const nsACString& aUpdateChunk)
  91. : mTarget(aTarget)
  92. , mUpdateChunk(aUpdateChunk)
  93. { }
  94. NS_DECL_NSIRUNNABLE
  95. private:
  96. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  97. nsCString mUpdateChunk;
  98. };
  99. class CacheCompletionsRunnable : public mozilla::Runnable
  100. {
  101. public:
  102. CacheCompletionsRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  103. mozilla::safebrowsing::CacheResultArray *aEntries)
  104. : mTarget(aTarget)
  105. , mEntries(aEntries)
  106. { }
  107. NS_DECL_NSIRUNNABLE
  108. private:
  109. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  110. mozilla::safebrowsing::CacheResultArray *mEntries;
  111. };
  112. class CacheMissesRunnable : public mozilla::Runnable
  113. {
  114. public:
  115. CacheMissesRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  116. mozilla::safebrowsing::PrefixArray *aEntries)
  117. : mTarget(aTarget)
  118. , mEntries(aEntries)
  119. { }
  120. NS_DECL_NSIRUNNABLE
  121. private:
  122. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  123. mozilla::safebrowsing::PrefixArray *mEntries;
  124. };
  125. class DoLocalLookupRunnable : public mozilla::Runnable
  126. {
  127. public:
  128. DoLocalLookupRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  129. const nsACString& spec,
  130. const nsACString& tables,
  131. mozilla::safebrowsing::LookupResultArray* results)
  132. : mTarget(aTarget)
  133. , mSpec(spec)
  134. , mTables(tables)
  135. , mResults(results)
  136. { }
  137. NS_DECL_NSIRUNNABLE
  138. private:
  139. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  140. nsCString mSpec;
  141. nsCString mTables;
  142. mozilla::safebrowsing::LookupResultArray* mResults;
  143. };
  144. class SetLastUpdateTimeRunnable : public mozilla::Runnable
  145. {
  146. public:
  147. SetLastUpdateTimeRunnable(nsUrlClassifierDBServiceWorker* aTarget,
  148. const nsACString& table,
  149. uint64_t updateTime)
  150. : mTarget(aTarget),
  151. mTable(table),
  152. mUpdateTime(updateTime)
  153. { }
  154. NS_DECL_NSIRUNNABLE
  155. private:
  156. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  157. nsCString mTable;
  158. uint64_t mUpdateTime;
  159. };
  160. class ClearLastResultsRunnable : public mozilla::Runnable
  161. {
  162. public:
  163. explicit ClearLastResultsRunnable(nsUrlClassifierDBServiceWorker* aTarget)
  164. : mTarget(aTarget)
  165. { }
  166. NS_DECL_NSIRUNNABLE
  167. private:
  168. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  169. };
  170. public:
  171. nsresult DoLocalLookup(const nsACString& spec,
  172. const nsACString& tables,
  173. mozilla::safebrowsing::LookupResultArray* results);
  174. nsresult OpenDb();
  175. nsresult CloseDb();
  176. nsresult CacheCompletions(mozilla::safebrowsing::CacheResultArray * aEntries);
  177. nsresult CacheMisses(mozilla::safebrowsing::PrefixArray * aEntries);
  178. private:
  179. ~UrlClassifierDBServiceWorkerProxy() {}
  180. RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
  181. };
  182. // The remaining classes here are all proxies to the main thread
  183. class UrlClassifierLookupCallbackProxy final :
  184. public nsIUrlClassifierLookupCallback
  185. {
  186. public:
  187. explicit UrlClassifierLookupCallbackProxy(nsIUrlClassifierLookupCallback* aTarget)
  188. : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierLookupCallback>(aTarget))
  189. { }
  190. NS_DECL_THREADSAFE_ISUPPORTS
  191. NS_DECL_NSIURLCLASSIFIERLOOKUPCALLBACK
  192. class LookupCompleteRunnable : public mozilla::Runnable
  193. {
  194. public:
  195. LookupCompleteRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback>& aTarget,
  196. mozilla::safebrowsing::LookupResultArray *aResults)
  197. : mTarget(aTarget)
  198. , mResults(aResults)
  199. { }
  200. NS_DECL_NSIRUNNABLE
  201. private:
  202. nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback> mTarget;
  203. mozilla::safebrowsing::LookupResultArray * mResults;
  204. };
  205. private:
  206. ~UrlClassifierLookupCallbackProxy() {}
  207. nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback> mTarget;
  208. };
  209. class UrlClassifierCallbackProxy final : public nsIUrlClassifierCallback
  210. {
  211. public:
  212. explicit UrlClassifierCallbackProxy(nsIUrlClassifierCallback* aTarget)
  213. : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierCallback>(aTarget))
  214. { }
  215. NS_DECL_THREADSAFE_ISUPPORTS
  216. NS_DECL_NSIURLCLASSIFIERCALLBACK
  217. class HandleEventRunnable : public mozilla::Runnable
  218. {
  219. public:
  220. HandleEventRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierCallback>& aTarget,
  221. const nsACString& aValue)
  222. : mTarget(aTarget)
  223. , mValue(aValue)
  224. { }
  225. NS_DECL_NSIRUNNABLE
  226. private:
  227. nsMainThreadPtrHandle<nsIUrlClassifierCallback> mTarget;
  228. nsCString mValue;
  229. };
  230. private:
  231. ~UrlClassifierCallbackProxy() {}
  232. nsMainThreadPtrHandle<nsIUrlClassifierCallback> mTarget;
  233. };
  234. class UrlClassifierUpdateObserverProxy final :
  235. public nsIUrlClassifierUpdateObserver
  236. {
  237. public:
  238. explicit UrlClassifierUpdateObserverProxy(nsIUrlClassifierUpdateObserver* aTarget)
  239. : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierUpdateObserver>(aTarget))
  240. { }
  241. NS_DECL_THREADSAFE_ISUPPORTS
  242. NS_DECL_NSIURLCLASSIFIERUPDATEOBSERVER
  243. class UpdateUrlRequestedRunnable : public mozilla::Runnable
  244. {
  245. public:
  246. UpdateUrlRequestedRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
  247. const nsACString& aURL,
  248. const nsACString& aTable)
  249. : mTarget(aTarget)
  250. , mURL(aURL)
  251. , mTable(aTable)
  252. { }
  253. NS_DECL_NSIRUNNABLE
  254. private:
  255. nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
  256. nsCString mURL, mTable;
  257. };
  258. class StreamFinishedRunnable : public mozilla::Runnable
  259. {
  260. public:
  261. StreamFinishedRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
  262. nsresult aStatus, uint32_t aDelay)
  263. : mTarget(aTarget)
  264. , mStatus(aStatus)
  265. , mDelay(aDelay)
  266. { }
  267. NS_DECL_NSIRUNNABLE
  268. private:
  269. nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
  270. nsresult mStatus;
  271. uint32_t mDelay;
  272. };
  273. class UpdateErrorRunnable : public mozilla::Runnable
  274. {
  275. public:
  276. UpdateErrorRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
  277. nsresult aError)
  278. : mTarget(aTarget)
  279. , mError(aError)
  280. { }
  281. NS_DECL_NSIRUNNABLE
  282. private:
  283. nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
  284. nsresult mError;
  285. };
  286. class UpdateSuccessRunnable : public mozilla::Runnable
  287. {
  288. public:
  289. UpdateSuccessRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
  290. uint32_t aRequestedTimeout)
  291. : mTarget(aTarget)
  292. , mRequestedTimeout(aRequestedTimeout)
  293. { }
  294. NS_DECL_NSIRUNNABLE
  295. private:
  296. nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
  297. uint32_t mRequestedTimeout;
  298. };
  299. private:
  300. ~UrlClassifierUpdateObserverProxy() {}
  301. nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
  302. };
  303. #endif // nsUrlClassifierProxies_h