summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/background_sync/background_sync_manager.cc75
-rw-r--r--content/browser/background_sync/background_sync_manager.h18
2 files changed, 27 insertions, 66 deletions
diff --git a/content/browser/background_sync/background_sync_manager.cc b/content/browser/background_sync/background_sync_manager.cc
index 1fbf24b..dd4f2f8 100644
--- a/content/browser/background_sync/background_sync_manager.cc
+++ b/content/browser/background_sync/background_sync_manager.cc
@@ -829,58 +829,21 @@ void BackgroundSyncManager::OnNetworkChanged() {
FireReadyEvents();
}
-void BackgroundSyncManager::PendingStatusAndRegistrationCallback(
- const StatusAndRegistrationCallback& callback,
- ErrorType error,
- const BackgroundSyncRegistration& sync_registration) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- // The callback might delete this object, so hang onto a weak ptr to find out.
- base::WeakPtr<BackgroundSyncManager> manager = weak_ptr_factory_.GetWeakPtr();
- callback.Run(error, sync_registration);
- if (manager)
- op_scheduler_.CompleteOperationAndRunNext();
-}
-
-void BackgroundSyncManager::PendingStatusAndRegistrationsCallback(
- const StatusAndRegistrationsCallback& callback,
- ErrorType error,
- const std::vector<BackgroundSyncRegistration>& sync_registrations) {
- // The callback might delete this object, so hang onto a weak ptr to find out.
- base::WeakPtr<BackgroundSyncManager> manager = weak_ptr_factory_.GetWeakPtr();
- callback.Run(error, sync_registrations);
- if (manager)
- op_scheduler_.CompleteOperationAndRunNext();
-}
-
-void BackgroundSyncManager::PendingStatusCallback(
- const StatusCallback& callback,
- ErrorType error) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- // The callback might delete this object, so hang onto a weak ptr to find out.
- base::WeakPtr<BackgroundSyncManager> manager = weak_ptr_factory_.GetWeakPtr();
- callback.Run(error);
- if (manager)
- op_scheduler_.CompleteOperationAndRunNext();
-}
-
-void BackgroundSyncManager::PendingClosure(const base::Closure& callback) {
+template <typename CallbackT, typename... Params>
+void BackgroundSyncManager::CompleteOperationCallback(const CallbackT& callback,
+ Params... parameters) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- // The callback might delete this object, so hang onto a weak ptr to find out.
- base::WeakPtr<BackgroundSyncManager> manager = weak_ptr_factory_.GetWeakPtr();
- callback.Run();
- if (manager)
- op_scheduler_.CompleteOperationAndRunNext();
+ callback.Run(parameters...);
+ op_scheduler_.CompleteOperationAndRunNext();
}
base::Closure BackgroundSyncManager::MakeEmptyCompletion() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- return base::Bind(&BackgroundSyncManager::PendingClosure,
- weak_ptr_factory_.GetWeakPtr(),
- base::Bind(base::DoNothing));
+ return base::Bind(
+ &BackgroundSyncManager::CompleteOperationCallback<base::Closure>,
+ weak_ptr_factory_.GetWeakPtr(), base::Bind(base::DoNothing));
}
BackgroundSyncManager::StatusAndRegistrationCallback
@@ -888,25 +851,31 @@ BackgroundSyncManager::MakeStatusAndRegistrationCompletion(
const StatusAndRegistrationCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- return base::Bind(
- &BackgroundSyncManager::PendingStatusAndRegistrationCallback,
- weak_ptr_factory_.GetWeakPtr(), callback);
+ return base::Bind(&BackgroundSyncManager::CompleteOperationCallback<
+ StatusAndRegistrationCallback, ErrorType,
+ const BackgroundSyncRegistration&>,
+ weak_ptr_factory_.GetWeakPtr(), callback);
}
BackgroundSyncManager::StatusAndRegistrationsCallback
BackgroundSyncManager::MakeStatusAndRegistrationsCompletion(
const StatusAndRegistrationsCallback& callback) {
- return base::Bind(
- &BackgroundSyncManager::PendingStatusAndRegistrationsCallback,
- weak_ptr_factory_.GetWeakPtr(), callback);
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ return base::Bind(&BackgroundSyncManager::CompleteOperationCallback<
+ StatusAndRegistrationsCallback, ErrorType,
+ const std::vector<BackgroundSyncRegistration>&>,
+ weak_ptr_factory_.GetWeakPtr(), callback);
}
BackgroundSyncManager::StatusCallback
BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- return base::Bind(&BackgroundSyncManager::PendingStatusCallback,
- weak_ptr_factory_.GetWeakPtr(), callback);
+ return base::Bind(
+ &BackgroundSyncManager::CompleteOperationCallback<StatusCallback,
+ ErrorType>,
+ weak_ptr_factory_.GetWeakPtr(), callback);
}
} // namespace content
diff --git a/content/browser/background_sync/background_sync_manager.h b/content/browser/background_sync/background_sync_manager.h
index 171b02f..f9c8960 100644
--- a/content/browser/background_sync/background_sync_manager.h
+++ b/content/browser/background_sync/background_sync_manager.h
@@ -288,25 +288,17 @@ class CONTENT_EXPORT BackgroundSyncManager
void OnNetworkChanged();
- // Operation Scheduling callbacks
- void PendingStatusAndRegistrationCallback(
- const StatusAndRegistrationCallback& callback,
- ErrorType error,
- const BackgroundSyncRegistration& sync_registration);
- void PendingStatusAndRegistrationsCallback(
- const StatusAndRegistrationsCallback& callback,
- ErrorType error,
- const std::vector<BackgroundSyncRegistration>& sync_registrations);
- void PendingStatusCallback(const StatusCallback& callback, ErrorType error);
- void PendingClosure(const base::Closure& closure);
-
+ // Operation Scheduling callback and convenience functions.
+ template <typename CallbackT, typename... Params>
+ void CompleteOperationCallback(const CallbackT& callback,
+ Params... parameters);
+ base::Closure MakeEmptyCompletion();
StatusAndRegistrationCallback MakeStatusAndRegistrationCompletion(
const StatusAndRegistrationCallback& callback);
StatusAndRegistrationsCallback MakeStatusAndRegistrationsCompletion(
const StatusAndRegistrationsCallback& callback);
BackgroundSyncManager::StatusCallback MakeStatusCompletion(
const StatusCallback& callback);
- base::Closure MakeEmptyCompletion();
SWIdToRegistrationsMap sw_to_registrations_map_;
CacheStorageScheduler op_scheduler_;