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: #include "nsUrlClassifierProxies.h" michael@0: #include "nsUrlClassifierDBService.h" michael@0: michael@0: using namespace mozilla::safebrowsing; michael@0: michael@0: static nsresult michael@0: DispatchToWorkerThread(nsIRunnable* r) michael@0: { michael@0: nsIThread* t = nsUrlClassifierDBService::BackgroundThread(); michael@0: if (!t) michael@0: return NS_ERROR_FAILURE; michael@0: michael@0: return t->Dispatch(r, NS_DISPATCH_NORMAL); michael@0: } michael@0: michael@0: NS_IMPL_ISUPPORTS(UrlClassifierDBServiceWorkerProxy, michael@0: nsIUrlClassifierDBServiceWorker) michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::Lookup(nsIPrincipal* aPrincipal, michael@0: const nsACString& aTables, michael@0: nsIUrlClassifierCallback* aCB) michael@0: { michael@0: nsCOMPtr r = new LookupRunnable(mTarget, aPrincipal, aTables, michael@0: aCB); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::LookupRunnable::Run() michael@0: { michael@0: (void) mTarget->Lookup(mPrincipal, mLookupTables, mCB); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::GetTables(nsIUrlClassifierCallback* aCB) michael@0: { michael@0: nsCOMPtr r = new GetTablesRunnable(mTarget, aCB); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::GetTablesRunnable::Run() michael@0: { michael@0: mTarget->GetTables(mCB); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::SetHashCompleter michael@0: (const nsACString&, nsIUrlClassifierHashCompleter*) michael@0: { michael@0: NS_NOTREACHED("This method should not be called!"); michael@0: return NS_ERROR_NOT_IMPLEMENTED; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::BeginUpdate michael@0: (nsIUrlClassifierUpdateObserver* aUpdater, michael@0: const nsACString& aTables) michael@0: { michael@0: nsCOMPtr r = new BeginUpdateRunnable(mTarget, aUpdater, michael@0: aTables); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::BeginUpdateRunnable::Run() michael@0: { michael@0: mTarget->BeginUpdate(mUpdater, mTables); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::BeginStream(const nsACString& aTable) michael@0: { michael@0: nsCOMPtr r = michael@0: new BeginStreamRunnable(mTarget, aTable); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::BeginStreamRunnable::Run() michael@0: { michael@0: mTarget->BeginStream(mTable); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::UpdateStream(const nsACString& aUpdateChunk) michael@0: { michael@0: nsCOMPtr r = michael@0: new UpdateStreamRunnable(mTarget, aUpdateChunk); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::UpdateStreamRunnable::Run() michael@0: { michael@0: mTarget->UpdateStream(mUpdateChunk); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::FinishStream() michael@0: { michael@0: nsCOMPtr r = michael@0: NS_NewRunnableMethod(mTarget, michael@0: &nsIUrlClassifierDBServiceWorker::FinishStream); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::FinishUpdate() michael@0: { michael@0: nsCOMPtr r = michael@0: NS_NewRunnableMethod(mTarget, michael@0: &nsIUrlClassifierDBServiceWorker::FinishUpdate); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::CancelUpdate() michael@0: { michael@0: nsCOMPtr r = michael@0: NS_NewRunnableMethod(mTarget, michael@0: &nsIUrlClassifierDBServiceWorker::CancelUpdate); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::ResetDatabase() michael@0: { michael@0: nsCOMPtr r = michael@0: NS_NewRunnableMethod(mTarget, michael@0: &nsIUrlClassifierDBServiceWorker::ResetDatabase); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::CloseDb() michael@0: { michael@0: nsCOMPtr r = michael@0: NS_NewRunnableMethod(mTarget, michael@0: &nsIUrlClassifierDBServiceWorker::CloseDb); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::CacheCompletions(CacheResultArray * aEntries) michael@0: { michael@0: nsCOMPtr r = new CacheCompletionsRunnable(mTarget, aEntries); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::CacheCompletionsRunnable::Run() michael@0: { michael@0: mTarget->CacheCompletions(mEntries); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::CacheMisses(PrefixArray * aEntries) michael@0: { michael@0: nsCOMPtr r = new CacheMissesRunnable(mTarget, aEntries); michael@0: return DispatchToWorkerThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierDBServiceWorkerProxy::CacheMissesRunnable::Run() michael@0: { michael@0: mTarget->CacheMisses(mEntries); michael@0: return NS_OK; michael@0: } michael@0: michael@0: michael@0: NS_IMPL_ISUPPORTS(UrlClassifierLookupCallbackProxy, michael@0: nsIUrlClassifierLookupCallback) michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierLookupCallbackProxy::LookupComplete michael@0: (LookupResultArray * aResults) michael@0: { michael@0: nsCOMPtr r = new LookupCompleteRunnable(mTarget, aResults); michael@0: return NS_DispatchToMainThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierLookupCallbackProxy::LookupCompleteRunnable::Run() michael@0: { michael@0: mTarget->LookupComplete(mResults); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMPL_ISUPPORTS(UrlClassifierCallbackProxy, michael@0: nsIUrlClassifierCallback) michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierCallbackProxy::HandleEvent(const nsACString& aValue) michael@0: { michael@0: nsCOMPtr r = new HandleEventRunnable(mTarget, aValue); michael@0: return NS_DispatchToMainThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierCallbackProxy::HandleEventRunnable::Run() michael@0: { michael@0: mTarget->HandleEvent(mValue); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMPL_ISUPPORTS(UrlClassifierUpdateObserverProxy, michael@0: nsIUrlClassifierUpdateObserver) michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierUpdateObserverProxy::UpdateUrlRequested michael@0: (const nsACString& aURL, michael@0: const nsACString& aTable) michael@0: { michael@0: nsCOMPtr r = michael@0: new UpdateUrlRequestedRunnable(mTarget, aURL, aTable); michael@0: return NS_DispatchToMainThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierUpdateObserverProxy::UpdateUrlRequestedRunnable::Run() michael@0: { michael@0: mTarget->UpdateUrlRequested(mURL, mTable); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierUpdateObserverProxy::StreamFinished(nsresult aStatus, michael@0: uint32_t aDelay) michael@0: { michael@0: nsCOMPtr r = michael@0: new StreamFinishedRunnable(mTarget, aStatus, aDelay); michael@0: return NS_DispatchToMainThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierUpdateObserverProxy::StreamFinishedRunnable::Run() michael@0: { michael@0: mTarget->StreamFinished(mStatus, mDelay); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierUpdateObserverProxy::UpdateError(nsresult aError) michael@0: { michael@0: nsCOMPtr r = michael@0: new UpdateErrorRunnable(mTarget, aError); michael@0: return NS_DispatchToMainThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierUpdateObserverProxy::UpdateErrorRunnable::Run() michael@0: { michael@0: mTarget->UpdateError(mError); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierUpdateObserverProxy::UpdateSuccess(uint32_t aRequestedTimeout) michael@0: { michael@0: nsCOMPtr r = michael@0: new UpdateSuccessRunnable(mTarget, aRequestedTimeout); michael@0: return NS_DispatchToMainThread(r); michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: UrlClassifierUpdateObserverProxy::UpdateSuccessRunnable::Run() michael@0: { michael@0: mTarget->UpdateSuccess(mRequestedTimeout); michael@0: return NS_OK; michael@0: }