forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			359 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			359 lines
		
	
	
	
		
			11 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.Clone()) {}
 | 
						|
 | 
						|
    NS_DECL_NSIRUNNABLE
 | 
						|
 | 
						|
   private:
 | 
						|
    const RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
 | 
						|
    const mozilla::safebrowsing::ConstCacheResultArray mEntries;
 | 
						|
  };
 | 
						|
 | 
						|
  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 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() = default;
 | 
						|
 | 
						|
  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() = default;
 | 
						|
 | 
						|
  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() = default;
 | 
						|
 | 
						|
  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() = default;
 | 
						|
 | 
						|
  const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
 | 
						|
};
 | 
						|
 | 
						|
#endif  // nsUrlClassifierProxies_h
 |