Index: content/child/background_sync/background_sync_provider_thread_proxy.cc |
diff --git a/content/child/background_sync/background_sync_provider_thread_proxy.cc b/content/child/background_sync/background_sync_provider_thread_proxy.cc |
deleted file mode 100644 |
index 021df27cbfd379cc82144b79b267d655da2b8749..0000000000000000000000000000000000000000 |
--- a/content/child/background_sync/background_sync_provider_thread_proxy.cc |
+++ /dev/null |
@@ -1,253 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/child/background_sync/background_sync_provider_thread_proxy.h" |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/lazy_instance.h" |
-#include "base/location.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/threading/thread_local.h" |
-#include "content/child/background_sync/background_sync_provider.h" |
- |
-using base::LazyInstance; |
-using base::ThreadLocalPointer; |
- |
-namespace content { |
- |
-namespace { |
- |
-template <typename T> |
-struct WebCallbacksMatcher; |
- |
-template <typename Stype, typename Ttype> |
-struct WebCallbacksMatcher<blink::WebCallbacks<Stype, Ttype>> { |
- using S = Stype; |
- using T = Ttype; |
- using WebCallbacks = typename blink::WebCallbacks<S, T>; |
-}; |
- |
-// CallbackThreadAdapter<WebCallbacks<S, T>> is a wrapper for WebCallbacks<S, T> |
-// which switches to a specific thread before calling the wrapped callback's |
-// onSuccess or onError methods. |
-// |
-// Takes ownership of the WebCallbacks object which it wraps. |
-template <typename X> |
-class CallbackThreadAdapter : public WebCallbacksMatcher<X>::WebCallbacks { |
- using S = typename WebCallbacksMatcher<X>::S; |
- using T = typename WebCallbacksMatcher<X>::T; |
- using OnSuccessType = void (blink::WebCallbacks<S, T>::*)(S); |
- using OnErrorType = void (blink::WebCallbacks<S, T>::*)(T); |
- |
- public: |
- CallbackThreadAdapter(scoped_ptr<blink::WebCallbacks<S, T>> callbacks, |
- int worker_thread_id) |
- : worker_thread_id_(worker_thread_id) { |
- callbacks_.reset(callbacks.release()); |
- } |
- |
- virtual void onSuccess(S results) { |
- OnSuccessType on_success = &blink::WebCallbacks<S, T>::onSuccess; |
- // If the worker thread has been destroyed, then this task will be |
- // silently discarded. |
- WorkerTaskRunner::Instance()->PostTask( |
- worker_thread_id_, |
- base::Bind(on_success, base::Owned(callbacks_.release()), results)); |
- } |
- |
- virtual void onError(T error) { |
- OnErrorType on_error = &blink::WebCallbacks<S, T>::onError; |
- // If the worker thread has been destroyed, then this task will be |
- // silently discarded. |
- WorkerTaskRunner::Instance()->PostTask( |
- worker_thread_id_, |
- base::Bind(on_error, base::Owned(callbacks_.release()), error)); |
- } |
- |
- private: |
- scoped_ptr<blink::WebCallbacks<S, T>> callbacks_; |
- int worker_thread_id_; |
-}; |
- |
-LazyInstance<ThreadLocalPointer<BackgroundSyncProviderThreadProxy>>::Leaky |
- g_sync_provider_tls = LAZY_INSTANCE_INITIALIZER; |
- |
-void DuplicateRegistrationHandleCallbackOnSWThread( |
- const BackgroundSyncProviderThreadProxy:: |
- DuplicateRegistrationHandleCallback& callback, |
- BackgroundSyncError error, |
- SyncRegistrationPtr registration) { |
- callback.Run(error, registration.Pass()); |
-} |
- |
-void DuplicateRegistrationHandleCallbackOnMainThread( |
- int worker_thread_id, |
- const BackgroundSyncProviderThreadProxy:: |
- DuplicateRegistrationHandleCallback& callback, |
- BackgroundSyncError error, |
- SyncRegistrationPtr registration) { |
- WorkerTaskRunner::Instance()->PostTask( |
- worker_thread_id, |
- base::Bind(&DuplicateRegistrationHandleCallbackOnSWThread, callback, |
- error, base::Passed(registration.Pass()))); |
-} |
- |
-} // anonymous namespace |
- |
-// static |
-BackgroundSyncProviderThreadProxy* |
-BackgroundSyncProviderThreadProxy::GetThreadInstance( |
- base::SingleThreadTaskRunner* main_thread_task_runner, |
- BackgroundSyncProvider* sync_provider) { |
- if (g_sync_provider_tls.Pointer()->Get()) |
- return g_sync_provider_tls.Pointer()->Get(); |
- |
- if (!WorkerThread::GetCurrentId()) { |
- // This could happen if GetThreadInstance is called very late (say by a |
- // garbage collected SyncRegistration). |
- return nullptr; |
- } |
- |
- BackgroundSyncProviderThreadProxy* instance = |
- new BackgroundSyncProviderThreadProxy(main_thread_task_runner, |
- sync_provider); |
- WorkerThread::AddObserver(instance); |
- return instance; |
-} |
- |
-void BackgroundSyncProviderThreadProxy::registerBackgroundSync( |
- const blink::WebSyncRegistration* options, |
- blink::WebServiceWorkerRegistration* service_worker_registration, |
- bool requested_from_service_worker, |
- blink::WebSyncRegistrationCallbacks* callbacks) { |
- DCHECK(options); |
- DCHECK(service_worker_registration); |
- DCHECK(callbacks); |
- main_thread_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &BackgroundSyncProvider::registerBackgroundSync, |
- base::Unretained(sync_provider_), options, |
- service_worker_registration, requested_from_service_worker, |
- new CallbackThreadAdapter<blink::WebSyncRegistrationCallbacks>( |
- make_scoped_ptr(callbacks), WorkerThread::GetCurrentId()))); |
-} |
- |
-void BackgroundSyncProviderThreadProxy::unregisterBackgroundSync( |
- int64_t handle_id, |
- blink::WebServiceWorkerRegistration* service_worker_registration, |
- blink::WebSyncUnregistrationCallbacks* callbacks) { |
- DCHECK(service_worker_registration); |
- DCHECK(callbacks); |
- main_thread_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &BackgroundSyncProvider::unregisterBackgroundSync, |
- base::Unretained(sync_provider_), handle_id, |
- service_worker_registration, |
- new CallbackThreadAdapter<blink::WebSyncUnregistrationCallbacks>( |
- make_scoped_ptr(callbacks), WorkerThread::GetCurrentId()))); |
-} |
- |
-void BackgroundSyncProviderThreadProxy::getRegistration( |
- blink::WebSyncRegistration::Periodicity periodicity, |
- const blink::WebString& tag, |
- blink::WebServiceWorkerRegistration* service_worker_registration, |
- blink::WebSyncRegistrationCallbacks* callbacks) { |
- DCHECK(service_worker_registration); |
- DCHECK(callbacks); |
- main_thread_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &BackgroundSyncProvider::getRegistration, |
- base::Unretained(sync_provider_), periodicity, |
- // We cast WebString to string16 before crossing threads |
- // for thread-safety. |
- static_cast<base::string16>(tag), service_worker_registration, |
- new CallbackThreadAdapter<blink::WebSyncRegistrationCallbacks>( |
- make_scoped_ptr(callbacks), WorkerThread::GetCurrentId()))); |
-} |
- |
-void BackgroundSyncProviderThreadProxy::getRegistrations( |
- blink::WebSyncRegistration::Periodicity periodicity, |
- blink::WebServiceWorkerRegistration* service_worker_registration, |
- blink::WebSyncGetRegistrationsCallbacks* callbacks) { |
- DCHECK(service_worker_registration); |
- DCHECK(callbacks); |
- main_thread_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &BackgroundSyncProvider::getRegistrations, |
- base::Unretained(sync_provider_), periodicity, |
- service_worker_registration, |
- new CallbackThreadAdapter<blink::WebSyncGetRegistrationsCallbacks>( |
- make_scoped_ptr(callbacks), WorkerThread::GetCurrentId()))); |
-} |
- |
-void BackgroundSyncProviderThreadProxy::getPermissionStatus( |
- blink::WebSyncRegistration::Periodicity periodicity, |
- blink::WebServiceWorkerRegistration* service_worker_registration, |
- blink::WebSyncGetPermissionStatusCallbacks* callbacks) { |
- DCHECK(service_worker_registration); |
- DCHECK(callbacks); |
- main_thread_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &BackgroundSyncProvider::getPermissionStatus, |
- base::Unretained(sync_provider_), periodicity, |
- service_worker_registration, |
- new CallbackThreadAdapter<blink::WebSyncGetPermissionStatusCallbacks>( |
- make_scoped_ptr(callbacks), WorkerThread::GetCurrentId()))); |
-} |
- |
-void BackgroundSyncProviderThreadProxy::releaseRegistration(int64_t handle_id) { |
- main_thread_task_runner_->PostTask( |
- FROM_HERE, base::Bind(&BackgroundSyncProvider::releaseRegistration, |
- base::Unretained(sync_provider_), handle_id)); |
-} |
- |
-void BackgroundSyncProviderThreadProxy::notifyWhenDone( |
- int64_t handle_id, |
- blink::WebSyncNotifyWhenDoneCallbacks* callbacks) { |
- DCHECK(callbacks); |
- |
- main_thread_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &BackgroundSyncProvider::notifyWhenDone, |
- base::Unretained(sync_provider_), handle_id, |
- new CallbackThreadAdapter<blink::WebSyncNotifyWhenDoneCallbacks>( |
- make_scoped_ptr(callbacks), WorkerThread::GetCurrentId()))); |
-} |
- |
-void BackgroundSyncProviderThreadProxy::DuplicateRegistrationHandle( |
- int64_t handle_id, |
- const DuplicateRegistrationHandleCallback& callback) { |
- main_thread_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&BackgroundSyncProvider::DuplicateRegistrationHandle, |
- base::Unretained(sync_provider_), handle_id, |
- base::Bind(&DuplicateRegistrationHandleCallbackOnMainThread, |
- WorkerThread::GetCurrentId(), callback))); |
-} |
- |
-void BackgroundSyncProviderThreadProxy::WillStopCurrentWorkerThread() { |
- delete this; |
-} |
- |
-BackgroundSyncProviderThreadProxy::BackgroundSyncProviderThreadProxy( |
- base::SingleThreadTaskRunner* main_thread_task_runner, |
- BackgroundSyncProvider* sync_provider) |
- : main_thread_task_runner_(main_thread_task_runner), |
- sync_provider_(sync_provider) { |
- g_sync_provider_tls.Pointer()->Set(this); |
-} |
- |
-BackgroundSyncProviderThreadProxy::~BackgroundSyncProviderThreadProxy() { |
- g_sync_provider_tls.Pointer()->Set(nullptr); |
-} |
- |
-} // namespace content |