michael@0: /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef nsUrlClassifierProxies_h michael@0: #define nsUrlClassifierProxies_h michael@0: michael@0: #include "nsIUrlClassifierDBService.h" michael@0: #include "nsProxyRelease.h" michael@0: #include "nsThreadUtils.h" michael@0: #include "mozilla/Attributes.h" michael@0: #include "nsIPrincipal.h" michael@0: #include "LookupCache.h" michael@0: michael@0: michael@0: /** michael@0: * Thread proxy from the main thread to the worker thread. michael@0: */ michael@0: class UrlClassifierDBServiceWorkerProxy MOZ_FINAL : michael@0: public nsIUrlClassifierDBServiceWorker michael@0: { michael@0: public: michael@0: UrlClassifierDBServiceWorkerProxy(nsIUrlClassifierDBServiceWorker* aTarget) michael@0: : mTarget(aTarget) michael@0: { } michael@0: michael@0: NS_DECL_THREADSAFE_ISUPPORTS michael@0: NS_DECL_NSIURLCLASSIFIERDBSERVICE michael@0: NS_DECL_NSIURLCLASSIFIERDBSERVICEWORKER michael@0: michael@0: class LookupRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: LookupRunnable(nsIUrlClassifierDBServiceWorker* aTarget, michael@0: nsIPrincipal* aPrincipal, michael@0: const nsACString& aTables, michael@0: nsIUrlClassifierCallback* aCB) michael@0: : mTarget(aTarget) michael@0: , mPrincipal(aPrincipal) michael@0: , mLookupTables(aTables) michael@0: , mCB(aCB) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsCOMPtr mTarget; michael@0: nsCOMPtr mPrincipal; michael@0: nsCString mLookupTables; michael@0: nsCOMPtr mCB; michael@0: }; michael@0: michael@0: class GetTablesRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: GetTablesRunnable(nsIUrlClassifierDBServiceWorker* aTarget, michael@0: nsIUrlClassifierCallback* aCB) michael@0: : mTarget(aTarget) michael@0: , mCB(aCB) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsCOMPtr mTarget; michael@0: nsCOMPtr mCB; michael@0: }; michael@0: michael@0: class BeginUpdateRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: BeginUpdateRunnable(nsIUrlClassifierDBServiceWorker* aTarget, michael@0: nsIUrlClassifierUpdateObserver* aUpdater, michael@0: const nsACString& aTables) michael@0: : mTarget(aTarget) michael@0: , mUpdater(aUpdater) michael@0: , mTables(aTables) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsCOMPtr mTarget; michael@0: nsCOMPtr mUpdater; michael@0: nsCString mTables; michael@0: }; michael@0: michael@0: class BeginStreamRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: BeginStreamRunnable(nsIUrlClassifierDBServiceWorker* aTarget, michael@0: const nsACString& aTable) michael@0: : mTarget(aTarget) michael@0: , mTable(aTable) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsCOMPtr mTarget; michael@0: nsCString mTable; michael@0: }; michael@0: michael@0: class UpdateStreamRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: UpdateStreamRunnable(nsIUrlClassifierDBServiceWorker* aTarget, michael@0: const nsACString& aUpdateChunk) michael@0: : mTarget(aTarget) michael@0: , mUpdateChunk(aUpdateChunk) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsCOMPtr mTarget; michael@0: nsCString mUpdateChunk; michael@0: }; michael@0: michael@0: class CacheCompletionsRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: CacheCompletionsRunnable(nsIUrlClassifierDBServiceWorker* aTarget, michael@0: mozilla::safebrowsing::CacheResultArray *aEntries) michael@0: : mTarget(aTarget) michael@0: , mEntries(aEntries) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsCOMPtr mTarget; michael@0: mozilla::safebrowsing::CacheResultArray *mEntries; michael@0: }; michael@0: michael@0: class CacheMissesRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: CacheMissesRunnable(nsIUrlClassifierDBServiceWorker* aTarget, michael@0: mozilla::safebrowsing::PrefixArray *aEntries) michael@0: : mTarget(aTarget) michael@0: , mEntries(aEntries) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsCOMPtr mTarget; michael@0: mozilla::safebrowsing::PrefixArray *mEntries; michael@0: }; michael@0: michael@0: private: michael@0: nsCOMPtr mTarget; michael@0: }; michael@0: michael@0: // The remaining classes here are all proxies to the main thread michael@0: michael@0: class UrlClassifierLookupCallbackProxy MOZ_FINAL : michael@0: public nsIUrlClassifierLookupCallback michael@0: { michael@0: public: michael@0: UrlClassifierLookupCallbackProxy(nsIUrlClassifierLookupCallback* aTarget) michael@0: : mTarget(new nsMainThreadPtrHolder(aTarget)) michael@0: { } michael@0: michael@0: NS_DECL_THREADSAFE_ISUPPORTS michael@0: NS_DECL_NSIURLCLASSIFIERLOOKUPCALLBACK michael@0: michael@0: class LookupCompleteRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: LookupCompleteRunnable(const nsMainThreadPtrHandle& aTarget, michael@0: mozilla::safebrowsing::LookupResultArray *aResults) michael@0: : mTarget(aTarget) michael@0: , mResults(aResults) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: mozilla::safebrowsing::LookupResultArray * mResults; michael@0: }; michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: }; michael@0: michael@0: class UrlClassifierCallbackProxy MOZ_FINAL : public nsIUrlClassifierCallback michael@0: { michael@0: public: michael@0: UrlClassifierCallbackProxy(nsIUrlClassifierCallback* aTarget) michael@0: : mTarget(new nsMainThreadPtrHolder(aTarget)) michael@0: { } michael@0: michael@0: NS_DECL_THREADSAFE_ISUPPORTS michael@0: NS_DECL_NSIURLCLASSIFIERCALLBACK michael@0: michael@0: class HandleEventRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: HandleEventRunnable(const nsMainThreadPtrHandle& aTarget, michael@0: const nsACString& aValue) michael@0: : mTarget(aTarget) michael@0: , mValue(aValue) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: nsCString mValue; michael@0: }; michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: }; michael@0: michael@0: class UrlClassifierUpdateObserverProxy MOZ_FINAL : michael@0: public nsIUrlClassifierUpdateObserver michael@0: { michael@0: public: michael@0: UrlClassifierUpdateObserverProxy(nsIUrlClassifierUpdateObserver* aTarget) michael@0: : mTarget(new nsMainThreadPtrHolder(aTarget)) michael@0: { } michael@0: michael@0: NS_DECL_THREADSAFE_ISUPPORTS michael@0: NS_DECL_NSIURLCLASSIFIERUPDATEOBSERVER michael@0: michael@0: class UpdateUrlRequestedRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: UpdateUrlRequestedRunnable(const nsMainThreadPtrHandle& aTarget, michael@0: const nsACString& aURL, michael@0: const nsACString& aTable) michael@0: : mTarget(aTarget) michael@0: , mURL(aURL) michael@0: , mTable(aTable) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: nsCString mURL, mTable; michael@0: }; michael@0: michael@0: class StreamFinishedRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: StreamFinishedRunnable(const nsMainThreadPtrHandle& aTarget, michael@0: nsresult aStatus, uint32_t aDelay) michael@0: : mTarget(aTarget) michael@0: , mStatus(aStatus) michael@0: , mDelay(aDelay) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: nsresult mStatus; michael@0: uint32_t mDelay; michael@0: }; michael@0: michael@0: class UpdateErrorRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: UpdateErrorRunnable(const nsMainThreadPtrHandle& aTarget, michael@0: nsresult aError) michael@0: : mTarget(aTarget) michael@0: , mError(aError) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: nsresult mError; michael@0: }; michael@0: michael@0: class UpdateSuccessRunnable : public nsRunnable michael@0: { michael@0: public: michael@0: UpdateSuccessRunnable(const nsMainThreadPtrHandle& aTarget, michael@0: uint32_t aRequestedTimeout) michael@0: : mTarget(aTarget) michael@0: , mRequestedTimeout(aRequestedTimeout) michael@0: { } michael@0: michael@0: NS_DECL_NSIRUNNABLE michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: uint32_t mRequestedTimeout; michael@0: }; michael@0: michael@0: private: michael@0: nsMainThreadPtrHandle mTarget; michael@0: }; michael@0: michael@0: #endif // nsUrlClassifierProxies_h