зеркало из https://github.com/mozilla/gecko-dev.git
360 строки
11 KiB
C++
360 строки
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
|