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 |
index 97466b23bf18dc84ee0787d8d4c817ea9fda156a..a5ecf2f8b9513ee02e9a6e7f65f90b40cd385c25 100644 |
--- a/content/child/background_sync/background_sync_provider_thread_proxy.cc |
+++ b/content/child/background_sync/background_sync_provider_thread_proxy.cc |
@@ -20,13 +20,28 @@ namespace content { |
namespace { |
-// CallbackThreadAdapter<S,T> is a wrapper for WebCallbacks<S,T> which |
-// switches to a specific thread before calling the wrapped callback's |
+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 S, typename T> |
-class CallbackThreadAdapter : public blink::WebCallbacks<S, T> { |
+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) |
@@ -35,21 +50,21 @@ class CallbackThreadAdapter : public blink::WebCallbacks<S, T> { |
} |
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(&blink::WebCallbacks<S, T>::onSuccess, |
- base::Owned(callbacks_.release()), results)); |
+ 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(&blink::WebCallbacks<S, T>::onError, |
- base::Owned(callbacks_.release()), error)); |
+ base::Bind(on_error, base::Owned(callbacks_.release()), error)); |
} |
private: |
@@ -95,8 +110,7 @@ void BackgroundSyncProviderThreadProxy::registerBackgroundSync( |
base::Bind(&BackgroundSyncProvider::registerBackgroundSync, |
base::Unretained(sync_provider_), options, |
service_worker_registration, |
- new CallbackThreadAdapter<blink::WebSyncRegistration*, |
- blink::WebSyncError*>( |
+ new CallbackThreadAdapter<blink::WebSyncRegistrationCallbacks>( |
make_scoped_ptr(callbacks), |
WorkerTaskRunner::Instance()->CurrentWorkerId()))); |
} |
@@ -111,14 +125,15 @@ void BackgroundSyncProviderThreadProxy::unregisterBackgroundSync( |
DCHECK(callbacks); |
main_thread_task_runner_->PostTask( |
FROM_HERE, |
- base::Bind(&BackgroundSyncProvider::unregisterBackgroundSync, |
- base::Unretained(sync_provider_), periodicity, id, |
- // We cast WebString to string16 before crossing threads |
- // for thread-safety. |
- static_cast<base::string16>(tag), service_worker_registration, |
- new CallbackThreadAdapter<bool*, blink::WebSyncError*>( |
- make_scoped_ptr(callbacks), |
- WorkerTaskRunner::Instance()->CurrentWorkerId()))); |
+ base::Bind( |
+ &BackgroundSyncProvider::unregisterBackgroundSync, |
+ base::Unretained(sync_provider_), periodicity, id, |
+ // We cast WebString to string16 before crossing threads |
+ // for thread-safety. |
+ static_cast<base::string16>(tag), service_worker_registration, |
+ new CallbackThreadAdapter<blink::WebSyncUnregistrationCallbacks>( |
+ make_scoped_ptr(callbacks), |
+ WorkerTaskRunner::Instance()->CurrentWorkerId()))); |
} |
void BackgroundSyncProviderThreadProxy::getRegistration( |
@@ -135,8 +150,7 @@ void BackgroundSyncProviderThreadProxy::getRegistration( |
// We cast WebString to string16 before crossing threads |
// for thread-safety. |
static_cast<base::string16>(tag), service_worker_registration, |
- new CallbackThreadAdapter<blink::WebSyncRegistration*, |
- blink::WebSyncError*>( |
+ new CallbackThreadAdapter<blink::WebSyncRegistrationCallbacks>( |
make_scoped_ptr(callbacks), |
WorkerTaskRunner::Instance()->CurrentWorkerId()))); |
} |
@@ -149,14 +163,13 @@ void BackgroundSyncProviderThreadProxy::getRegistrations( |
DCHECK(callbacks); |
main_thread_task_runner_->PostTask( |
FROM_HERE, |
- base::Bind(&BackgroundSyncProvider::getRegistrations, |
- base::Unretained(sync_provider_), periodicity, |
- service_worker_registration, |
- new CallbackThreadAdapter< |
- blink::WebVector<blink::WebSyncRegistration*>*, |
- blink::WebSyncError*>( |
- make_scoped_ptr(callbacks), |
- WorkerTaskRunner::Instance()->CurrentWorkerId()))); |
+ base::Bind( |
+ &BackgroundSyncProvider::getRegistrations, |
+ base::Unretained(sync_provider_), periodicity, |
+ service_worker_registration, |
+ new CallbackThreadAdapter<blink::WebSyncGetRegistrationsCallbacks>( |
+ make_scoped_ptr(callbacks), |
+ WorkerTaskRunner::Instance()->CurrentWorkerId()))); |
} |
void BackgroundSyncProviderThreadProxy::getPermissionStatus( |
@@ -167,13 +180,13 @@ void BackgroundSyncProviderThreadProxy::getPermissionStatus( |
DCHECK(callbacks); |
main_thread_task_runner_->PostTask( |
FROM_HERE, |
- base::Bind(&BackgroundSyncProvider::getPermissionStatus, |
- base::Unretained(sync_provider_), periodicity, |
- service_worker_registration, |
- new CallbackThreadAdapter<blink::WebSyncPermissionStatus*, |
- blink::WebSyncError*>( |
- make_scoped_ptr(callbacks), |
- WorkerTaskRunner::Instance()->CurrentWorkerId()))); |
+ base::Bind( |
+ &BackgroundSyncProvider::getPermissionStatus, |
+ base::Unretained(sync_provider_), periodicity, |
+ service_worker_registration, |
+ new CallbackThreadAdapter<blink::WebSyncGetPermissionStatusCallbacks>( |
+ make_scoped_ptr(callbacks), |
+ WorkerTaskRunner::Instance()->CurrentWorkerId()))); |
} |
void BackgroundSyncProviderThreadProxy::OnWorkerRunLoopStopped() { |