summaryrefslogtreecommitdiffstats
path: root/toolkit/components/url-classifier/nsUrlClassifierProxies.h
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/url-classifier/nsUrlClassifierProxies.h')
-rw-r--r--toolkit/components/url-classifier/nsUrlClassifierProxies.h373
1 files changed, 373 insertions, 0 deletions
diff --git a/toolkit/components/url-classifier/nsUrlClassifierProxies.h b/toolkit/components/url-classifier/nsUrlClassifierProxies.h
new file mode 100644
index 000000000..3a6c39434
--- /dev/null
+++ b/toolkit/components/url-classifier/nsUrlClassifierProxies.h
@@ -0,0 +1,373 @@
+/* -*- 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)
+ : mTarget(aTarget)
+ , mPrincipal(aPrincipal)
+ , mLookupTables(aTables)
+ , mCB(aCB)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ nsCOMPtr<nsIPrincipal> mPrincipal;
+ nsCString mLookupTables;
+ nsCOMPtr<nsIUrlClassifierCallback> mCB;
+ };
+
+ class GetTablesRunnable : public mozilla::Runnable
+ {
+ public:
+ GetTablesRunnable(nsUrlClassifierDBServiceWorker* aTarget,
+ nsIUrlClassifierCallback* aCB)
+ : mTarget(aTarget)
+ , mCB(aCB)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ nsCOMPtr<nsIUrlClassifierCallback> mCB;
+ };
+
+ class BeginUpdateRunnable : public mozilla::Runnable
+ {
+ public:
+ BeginUpdateRunnable(nsUrlClassifierDBServiceWorker* aTarget,
+ nsIUrlClassifierUpdateObserver* aUpdater,
+ const nsACString& aTables)
+ : mTarget(aTarget)
+ , mUpdater(aUpdater)
+ , mTables(aTables)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ nsCOMPtr<nsIUrlClassifierUpdateObserver> mUpdater;
+ nsCString mTables;
+ };
+
+ class BeginStreamRunnable : public mozilla::Runnable
+ {
+ public:
+ BeginStreamRunnable(nsUrlClassifierDBServiceWorker* aTarget,
+ const nsACString& aTable)
+ : mTarget(aTarget)
+ , mTable(aTable)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ nsCString mTable;
+ };
+
+ class UpdateStreamRunnable : public mozilla::Runnable
+ {
+ public:
+ UpdateStreamRunnable(nsUrlClassifierDBServiceWorker* aTarget,
+ const nsACString& aUpdateChunk)
+ : mTarget(aTarget)
+ , mUpdateChunk(aUpdateChunk)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ nsCString mUpdateChunk;
+ };
+
+ class CacheCompletionsRunnable : public mozilla::Runnable
+ {
+ public:
+ CacheCompletionsRunnable(nsUrlClassifierDBServiceWorker* aTarget,
+ mozilla::safebrowsing::CacheResultArray *aEntries)
+ : mTarget(aTarget)
+ , mEntries(aEntries)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ mozilla::safebrowsing::CacheResultArray *mEntries;
+ };
+
+ class CacheMissesRunnable : public mozilla::Runnable
+ {
+ public:
+ CacheMissesRunnable(nsUrlClassifierDBServiceWorker* aTarget,
+ mozilla::safebrowsing::PrefixArray *aEntries)
+ : mTarget(aTarget)
+ , mEntries(aEntries)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ mozilla::safebrowsing::PrefixArray *mEntries;
+ };
+
+ class DoLocalLookupRunnable : public mozilla::Runnable
+ {
+ public:
+ DoLocalLookupRunnable(nsUrlClassifierDBServiceWorker* aTarget,
+ const nsACString& spec,
+ const nsACString& tables,
+ mozilla::safebrowsing::LookupResultArray* results)
+ : mTarget(aTarget)
+ , mSpec(spec)
+ , mTables(tables)
+ , mResults(results)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+
+ nsCString mSpec;
+ nsCString mTables;
+ mozilla::safebrowsing::LookupResultArray* mResults;
+ };
+
+ class SetLastUpdateTimeRunnable : public mozilla::Runnable
+ {
+ public:
+ SetLastUpdateTimeRunnable(nsUrlClassifierDBServiceWorker* aTarget,
+ const nsACString& table,
+ uint64_t updateTime)
+ : mTarget(aTarget),
+ mTable(table),
+ mUpdateTime(updateTime)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ nsCString mTable;
+ uint64_t mUpdateTime;
+ };
+
+ class ClearLastResultsRunnable : public mozilla::Runnable
+ {
+ public:
+ explicit ClearLastResultsRunnable(nsUrlClassifierDBServiceWorker* aTarget)
+ : mTarget(aTarget)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+ private:
+ RefPtr<nsUrlClassifierDBServiceWorker> mTarget;
+ };
+
+public:
+ nsresult DoLocalLookup(const nsACString& spec,
+ const nsACString& tables,
+ mozilla::safebrowsing::LookupResultArray* results);
+
+ nsresult OpenDb();
+ nsresult CloseDb();
+
+ nsresult CacheCompletions(mozilla::safebrowsing::CacheResultArray * aEntries);
+ nsresult CacheMisses(mozilla::safebrowsing::PrefixArray * aEntries);
+
+private:
+ ~UrlClassifierDBServiceWorkerProxy() {}
+
+ 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>(aTarget))
+ { }
+
+ NS_DECL_THREADSAFE_ISUPPORTS
+ NS_DECL_NSIURLCLASSIFIERLOOKUPCALLBACK
+
+ class LookupCompleteRunnable : public mozilla::Runnable
+ {
+ public:
+ LookupCompleteRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback>& aTarget,
+ mozilla::safebrowsing::LookupResultArray *aResults)
+ : mTarget(aTarget)
+ , mResults(aResults)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback> mTarget;
+ mozilla::safebrowsing::LookupResultArray * mResults;
+ };
+
+private:
+ ~UrlClassifierLookupCallbackProxy() {}
+
+ nsMainThreadPtrHandle<nsIUrlClassifierLookupCallback> mTarget;
+};
+
+class UrlClassifierCallbackProxy final : public nsIUrlClassifierCallback
+{
+public:
+ explicit UrlClassifierCallbackProxy(nsIUrlClassifierCallback* aTarget)
+ : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierCallback>(aTarget))
+ { }
+
+ NS_DECL_THREADSAFE_ISUPPORTS
+ NS_DECL_NSIURLCLASSIFIERCALLBACK
+
+ class HandleEventRunnable : public mozilla::Runnable
+ {
+ public:
+ HandleEventRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierCallback>& aTarget,
+ const nsACString& aValue)
+ : mTarget(aTarget)
+ , mValue(aValue)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ nsMainThreadPtrHandle<nsIUrlClassifierCallback> mTarget;
+ nsCString mValue;
+ };
+
+private:
+ ~UrlClassifierCallbackProxy() {}
+
+ nsMainThreadPtrHandle<nsIUrlClassifierCallback> mTarget;
+};
+
+class UrlClassifierUpdateObserverProxy final :
+ public nsIUrlClassifierUpdateObserver
+{
+public:
+ explicit UrlClassifierUpdateObserverProxy(nsIUrlClassifierUpdateObserver* aTarget)
+ : mTarget(new nsMainThreadPtrHolder<nsIUrlClassifierUpdateObserver>(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)
+ : mTarget(aTarget)
+ , mURL(aURL)
+ , mTable(aTable)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
+ nsCString mURL, mTable;
+ };
+
+ class StreamFinishedRunnable : public mozilla::Runnable
+ {
+ public:
+ StreamFinishedRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
+ nsresult aStatus, uint32_t aDelay)
+ : mTarget(aTarget)
+ , mStatus(aStatus)
+ , mDelay(aDelay)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
+ nsresult mStatus;
+ uint32_t mDelay;
+ };
+
+ class UpdateErrorRunnable : public mozilla::Runnable
+ {
+ public:
+ UpdateErrorRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
+ nsresult aError)
+ : mTarget(aTarget)
+ , mError(aError)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
+ nsresult mError;
+ };
+
+ class UpdateSuccessRunnable : public mozilla::Runnable
+ {
+ public:
+ UpdateSuccessRunnable(const nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver>& aTarget,
+ uint32_t aRequestedTimeout)
+ : mTarget(aTarget)
+ , mRequestedTimeout(aRequestedTimeout)
+ { }
+
+ NS_DECL_NSIRUNNABLE
+
+ private:
+ nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
+ uint32_t mRequestedTimeout;
+ };
+
+private:
+ ~UrlClassifierUpdateObserverProxy() {}
+
+ nsMainThreadPtrHandle<nsIUrlClassifierUpdateObserver> mTarget;
+};
+
+#endif // nsUrlClassifierProxies_h