forked from mirrors/gecko-dev
		
	 6f76698fc0
			
		
	
	
		6f76698fc0
		
	
	
	
	
		
			
			Differential Revision: https://phabricator.services.mozilla.com/D2048 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			417 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			417 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #ifndef nsUrlClassifierProxies_h
 | |
| #define nsUrlClassifierProxies_h
 | |
| 
 | |
| #include "nsIUrlClassifierDBService.h"
 | |
| #include "nsUrlClassifierDBService.h"
 | |
| #include "nsProxyRelease.h"
 | |
| #include "nsThreadUtils.h"
 | |
| #include "mozilla/Attributes.h"
 | |
| #include "nsIPrincipal.h"
 | |
| #include "LookupCache.h"
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Thread proxy from the main thread to the worker thread.
 | |
|  */
 | |
| class UrlClassifierDBServiceWorkerProxy final : public nsIUrlClassifierDBService
 | |
| {
 | |
| public:
 | |
|   explicit UrlClassifierDBServiceWorkerProxy(nsUrlClassifierDBServiceWorker* aTarget)
 | |
|     : mTarget(aTarget)
 | |
|   { }
 | |
| 
 | |
|   NS_DECL_THREADSAFE_ISUPPORTS
 | |
|   NS_DECL_NSIURLCLASSIFIERDBSERVICE
 | |
| 
 | |
|   class LookupRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     LookupRunnable(nsUrlClassifierDBServiceWorker* aTarget,
 | |
|                    nsIPrincipal* aPrincipal,
 | |
|                    const nsACString& aTables,
 | |
|                    nsIUrlClassifierCallback* aCB)
 | |
|       : mozilla::Runnable("UrlClassifierDBServiceWorkerProxy::LookupRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mPrincipal(aPrincipal)
 | |
|       , mLookupTables(aTables)
 | |
|       , mCB(aCB)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|     const nsCOMPtr<nsIPrincipal> mPrincipal;
 | |
|     const nsCString mLookupTables;
 | |
|     const nsCOMPtr<nsIUrlClassifierCallback> mCB;
 | |
|   };
 | |
| 
 | |
|   class GetTablesRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     GetTablesRunnable(nsUrlClassifierDBServiceWorker* aTarget,
 | |
|                       nsIUrlClassifierCallback* aCB)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::GetTablesRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mCB(aCB)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|     const nsCOMPtr<nsIUrlClassifierCallback> mCB;
 | |
|   };
 | |
| 
 | |
|   class BeginUpdateRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     BeginUpdateRunnable(nsUrlClassifierDBServiceWorker* aTarget,
 | |
|                         nsIUrlClassifierUpdateObserver* aUpdater,
 | |
|                         const nsACString& aTables)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::BeginUpdateRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mUpdater(aUpdater)
 | |
|       , mTables(aTables)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|     const nsCOMPtr<nsIUrlClassifierUpdateObserver> mUpdater;
 | |
|     const nsCString mTables;
 | |
|   };
 | |
| 
 | |
|   class BeginStreamRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     BeginStreamRunnable(nsUrlClassifierDBServiceWorker* aTarget,
 | |
|                         const nsACString& aTable)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::BeginStreamRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mTable(aTable)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|     const nsCString mTable;
 | |
|   };
 | |
| 
 | |
|   class UpdateStreamRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     UpdateStreamRunnable(nsUrlClassifierDBServiceWorker* aTarget,
 | |
|                          const nsACString& aUpdateChunk)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::UpdateStreamRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mUpdateChunk(aUpdateChunk)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|     const nsCString mUpdateChunk;
 | |
|   };
 | |
| 
 | |
|   class CacheCompletionsRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     CacheCompletionsRunnable(nsUrlClassifierDBServiceWorker* aTarget,
 | |
|                              const mozilla::safebrowsing::ConstCacheResultArray& aEntries)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::CacheCompletionsRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mEntries(aEntries)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|     const mozilla::safebrowsing::ConstCacheResultArray mEntries;
 | |
|   };
 | |
| 
 | |
|   class DoLocalLookupRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     DoLocalLookupRunnable(nsUrlClassifierDBServiceWorker* aTarget,
 | |
|                           const nsACString& spec,
 | |
|                           const nsACString& tables,
 | |
|                           mozilla::safebrowsing::LookupResultArray& results)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::DoLocalLookupRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mSpec(spec)
 | |
|       , mTables(tables)
 | |
|       , mResults(results)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|     const nsCString mSpec;
 | |
|     const nsCString mTables;
 | |
|     mozilla::safebrowsing::LookupResultArray& mResults;
 | |
|   };
 | |
| 
 | |
|   class ClearLastResultsRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     explicit ClearLastResultsRunnable(nsUrlClassifierDBServiceWorker* aTarget)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::ClearLastResultsRunnable")
 | |
|       , mTarget(aTarget)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|   };
 | |
| 
 | |
|   class GetCacheInfoRunnable: public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     explicit GetCacheInfoRunnable(nsUrlClassifierDBServiceWorker* aTarget,
 | |
|                                   const nsACString& aTable,
 | |
|                                   nsIUrlClassifierGetCacheCallback* aCallback)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::GetCacheInfoRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mTable(aTable)
 | |
|       , mCache(nullptr)
 | |
|       , mCallback(new nsMainThreadPtrHolder<nsIUrlClassifierGetCacheCallback>(
 | |
|           "nsIUrlClassifierGetCacheCallback", aCallback))
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
|   private:
 | |
|     const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
|     const nsCString mTable;
 | |
|     nsCOMPtr<nsIUrlClassifierCacheInfo> mCache;
 | |
|     const nsMainThreadPtrHandle<nsIUrlClassifierGetCacheCallback> mCallback;
 | |
|   };
 | |
| 
 | |
|   class GetCacheInfoCallbackRunnable: public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     explicit GetCacheInfoCallbackRunnable(nsIUrlClassifierCacheInfo* aCache,
 | |
|                                           const nsMainThreadPtrHandle<nsIUrlClassifierGetCacheCallback>& aCallback)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierDBServiceWorkerProxy::GetCacheInfoCallbackRunnable")
 | |
|       , mCache(aCache)
 | |
|       , mCallback(aCallback)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
|   private:
 | |
|     nsCOMPtr<nsIUrlClassifierCacheInfo> mCache;
 | |
|     const nsMainThreadPtrHandle<nsIUrlClassifierGetCacheCallback> mCallback;
 | |
|   };
 | |
| 
 | |
| public:
 | |
|   nsresult DoLocalLookup(const nsACString& spec,
 | |
|                          const nsACString& tables,
 | |
|                          mozilla::safebrowsing::LookupResultArray& results) const;
 | |
| 
 | |
|   nsresult OpenDb() const;
 | |
|   nsresult CloseDb() const;
 | |
|   nsresult PreShutdown() const;
 | |
| 
 | |
|   nsresult CacheCompletions(const mozilla::safebrowsing::ConstCacheResultArray& aEntries) const;
 | |
| 
 | |
|   nsresult GetCacheInfo(const nsACString& aTable,
 | |
|                         nsIUrlClassifierGetCacheCallback* aCallback) const;
 | |
| private:
 | |
|   ~UrlClassifierDBServiceWorkerProxy() {}
 | |
| 
 | |
|   const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | |
| };
 | |
| 
 | |
| // The remaining classes here are all proxies to the main thread
 | |
| 
 | |
| class UrlClassifierLookupCallbackProxy final :
 | |
|   public nsIUrlClassifierLookupCallback
 | |
| {
 | |
| public:
 | |
|   explicit UrlClassifierLookupCallbackProxy(nsIUrlClassifierLookupCallback* aTarget)
 | |
|     : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierLookupCallback>(
 | |
|         "UrlClassifierLookupCallbackProxy::mTarget", aTarget))
 | |
|   { }
 | |
| 
 | |
|   NS_DECL_THREADSAFE_ISUPPORTS
 | |
|   NS_DECL_NSIURLCLASSIFIERLOOKUPCALLBACK
 | |
| 
 | |
|   class LookupCompleteRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     LookupCompleteRunnable(
 | |
|       const nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback>& aTarget,
 | |
|       mozilla::UniquePtr<mozilla::safebrowsing::LookupResultArray> aResults)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierLookupCallbackProxy::LookupCompleteRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mResults(std::move(aResults))
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback> mTarget;
 | |
|     mozilla::UniquePtr<mozilla::safebrowsing::LookupResultArray> mResults;
 | |
|   };
 | |
| 
 | |
| private:
 | |
|   ~UrlClassifierLookupCallbackProxy() {}
 | |
| 
 | |
|   const nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback> mTarget;
 | |
| };
 | |
| 
 | |
| class UrlClassifierCallbackProxy final : public nsIUrlClassifierCallback
 | |
| {
 | |
| public:
 | |
|   explicit UrlClassifierCallbackProxy(nsIUrlClassifierCallback* aTarget)
 | |
|     : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierCallback>(
 | |
|         "UrlClassifierCallbackProxy::mTarget", aTarget))
 | |
|   { }
 | |
| 
 | |
|   NS_DECL_THREADSAFE_ISUPPORTS
 | |
|   NS_DECL_NSIURLCLASSIFIERCALLBACK
 | |
| 
 | |
|   class HandleEventRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     HandleEventRunnable(
 | |
|       const nsMainThreadPtrHandle<nsIUrlClassifierCallback>& aTarget,
 | |
|       const nsACString& aValue)
 | |
|       : mozilla::Runnable("UrlClassifierCallbackProxy::HandleEventRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mValue(aValue)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const nsMainThreadPtrHandle<nsIUrlClassifierCallback> mTarget;
 | |
|     const nsCString mValue;
 | |
|   };
 | |
| 
 | |
| private:
 | |
|   ~UrlClassifierCallbackProxy() {}
 | |
| 
 | |
|   const nsMainThreadPtrHandle<nsIUrlClassifierCallback> mTarget;
 | |
| };
 | |
| 
 | |
| class UrlClassifierUpdateObserverProxy final :
 | |
|   public nsIUrlClassifierUpdateObserver
 | |
| {
 | |
| public:
 | |
|   explicit UrlClassifierUpdateObserverProxy(nsIUrlClassifierUpdateObserver* aTarget)
 | |
|     : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierUpdateObserver>(
 | |
|         "UrlClassifierUpdateObserverProxy::mTarget", aTarget))
 | |
|   { }
 | |
| 
 | |
|   NS_DECL_THREADSAFE_ISUPPORTS
 | |
|   NS_DECL_NSIURLCLASSIFIERUPDATEOBSERVER
 | |
| 
 | |
|   class UpdateUrlRequestedRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     UpdateUrlRequestedRunnable(
 | |
|       const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
 | |
|       const nsACString& aURL,
 | |
|       const nsACString& aTable)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierUpdateObserverProxy::UpdateUrlRequestedRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mURL(aURL)
 | |
|       , mTable(aTable)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
 | |
|     const nsCString mURL;
 | |
|     const nsCString mTable;
 | |
|   };
 | |
| 
 | |
|   class StreamFinishedRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     StreamFinishedRunnable(
 | |
|       const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
 | |
|       nsresult aStatus,
 | |
|       uint32_t aDelay)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierUpdateObserverProxy::StreamFinishedRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mStatus(aStatus)
 | |
|       , mDelay(aDelay)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
 | |
|     const nsresult mStatus;
 | |
|     const uint32_t mDelay;
 | |
|   };
 | |
| 
 | |
|   class UpdateErrorRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     UpdateErrorRunnable(
 | |
|       const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
 | |
|       nsresult aError)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierUpdateObserverProxy::UpdateErrorRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mError(aError)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
 | |
|     const nsresult mError;
 | |
|   };
 | |
| 
 | |
|   class UpdateSuccessRunnable : public mozilla::Runnable
 | |
|   {
 | |
|   public:
 | |
|     UpdateSuccessRunnable(
 | |
|       const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
 | |
|       uint32_t aRequestedTimeout)
 | |
|       : mozilla::Runnable(
 | |
|           "UrlClassifierUpdateObserverProxy::UpdateSuccessRunnable")
 | |
|       , mTarget(aTarget)
 | |
|       , mRequestedTimeout(aRequestedTimeout)
 | |
|     { }
 | |
| 
 | |
|     NS_DECL_NSIRUNNABLE
 | |
| 
 | |
|   private:
 | |
|     const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
 | |
|     const uint32_t mRequestedTimeout;
 | |
|   };
 | |
| 
 | |
| private:
 | |
|   ~UrlClassifierUpdateObserverProxy() {}
 | |
| 
 | |
|   const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
 | |
| };
 | |
| 
 | |
| #endif // nsUrlClassifierProxies_h
 |