Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(225)

Unified Diff: chrome/browser/sync_file_system/drive_backend/callback_helper.h

Issue 259503004: [SyncFS] Refine callback helpers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync_file_system/drive_backend/callback_helper.h
diff --git a/chrome/browser/sync_file_system/drive_backend/callback_helper.h b/chrome/browser/sync_file_system/drive_backend/callback_helper.h
index 2dd97964a52d9aea78af4fac4b015f44a597649a..5a1f4b35e83b43320988ba95cec7a6115c7adb31 100644
--- a/chrome/browser/sync_file_system/drive_backend/callback_helper.h
+++ b/chrome/browser/sync_file_system/drive_backend/callback_helper.h
@@ -7,7 +7,10 @@
#include "base/bind.h"
#include "base/location.h"
-#include "base/message_loop/message_loop_proxy.h"
+#include "base/logging.h"
+#include "base/thread_task_runner_handle.h"
+
+// TODO(tzik): Merge this file to media/base/bind_to_current_loop.h.
namespace sync_file_system {
namespace drive_backend {
@@ -30,45 +33,65 @@ RebindForward(T& t) {
return t;
}
-template <typename T>
-void RelayToTaskRunner1(base::SequencedTaskRunner* task_runner,
- const tracked_objects::Location& from_here,
- const base::Callback<void(T)>& callback,
- T arg) {
- task_runner->PostTask(
- from_here, base::Bind(callback, RebindForward(arg)));
-}
+template <typename>
+struct RelayToTaskRunner;
+
+template <>
+struct RelayToTaskRunner<void()> {
+ static void Run(base::TaskRunner* task_runner,
+ const tracked_objects::Location& from_here,
+ const base::Callback<void()>& callback) {
+ task_runner->PostTask(from_here, base::Bind(
+ callback));
+ }
+};
+
+template <typename T1>
+struct RelayToTaskRunner<void(T1)> {
+ static void Run(base::TaskRunner* task_runner,
+ const tracked_objects::Location& from_here,
+ const base::Callback<void(T1)>& callback,
+ T1 t1) {
+ task_runner->PostTask(from_here, base::Bind(
+ callback,
+ RebindForward(t1)));
+ }
+};
template <typename T1, typename T2>
-void RelayToTaskRunner2(base::SequencedTaskRunner* task_runner,
- const tracked_objects::Location& from_here,
- const base::Callback<void(T1, T2)>& callback,
- T1 arg1,
- T2 arg2) {
- task_runner->PostTask(
- from_here, base::Bind(callback,
- RebindForward(arg1),
- RebindForward(arg2)));
-}
+struct RelayToTaskRunner<void(T1, T2)> {
+ static void Run(base::TaskRunner* task_runner,
+ const tracked_objects::Location& from_here,
+ const base::Callback<void(T1, T2)>& callback,
+ T1 t1,
+ T2 t2) {
+ task_runner->PostTask(from_here, base::Bind(
+ callback,
+ RebindForward(t1),
+ RebindForward(t2)));
+ }
+};
} // namespace internal
template <typename T>
-base::Callback<void(T)> CreateRelayedCallback(
- const base::Callback<void(T)>& callback) {
- return base::Bind(&internal::RelayToTaskRunner1<T>,
- base::MessageLoopProxy::current(),
- FROM_HERE,
+base::Callback<T> RelayCallbackToTaskRunner(
peria 2014/04/24 05:13:53 Please add a test for this template. Or move this
tzik 2014/04/24 07:02:17 Done.
+ base::TaskRunner* task_runner,
+ const tracked_objects::Location& from_here,
+ const base::Callback<T>& callback) {
+ DCHECK(task_runner->RunsTasksOnCurrentThread());
+ return base::Bind(&internal::RelayToTaskRunner<T>::Run,
+ make_scoped_refptr(task_runner), from_here,
callback);
}
-template <typename T1, typename T2>
-base::Callback<void(T1, T2)> CreateRelayedCallback(
- const base::Callback<void(T1, T2)>& callback) {
- return base::Bind(&internal::RelayToTaskRunner2<T1, T2>,
- base::MessageLoopProxy::current(),
- FROM_HERE,
- callback);
+template <typename T>
+base::Callback<T> RelayCallbackToCurrentThread(
+ const tracked_objects::Location& from_here,
+ const base::Callback<T>& callback) {
+ return RelayCallbackToTaskRunner(
+ base::ThreadTaskRunnerHandle::Get(),
+ from_here, callback);
}
} // namespace drive_backend

Powered by Google App Engine
This is Rietveld 408576698