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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/callback_helper.h

Issue 304153007: [SyncFS][Reland] Relay callback destruction to TaskRunner on RelayCallbackToTaskRunner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: wrap .h.pump to 80 chars Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/sync_file_system/drive_backend/callback_helper.h.pump » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // This file was GENERATED by command: 1 // This file was GENERATED by command:
2 // pump.py callback_helper.h.pump 2 // pump.py callback_helper.h.pump
3 // DO NOT EDIT BY HAND!!! 3 // DO NOT EDIT BY HAND!!!
4 4
5 5
6 // Copyright 2014 The Chromium Authors. All rights reserved. 6 // Copyright 2014 The Chromium Authors. All rights reserved.
7 // Use of this source code is governed by a BSD-style license that can be 7 // Use of this source code is governed by a BSD-style license that can be
8 // found in the LICENSE file. 8 // found in the LICENSE file.
9 9
10 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_ 10 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_
11 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_ 11 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/location.h" 14 #include "base/location.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/sequenced_task_runner.h"
16 #include "base/thread_task_runner_handle.h" 17 #include "base/thread_task_runner_handle.h"
17 18
18 // TODO(tzik): Merge this file to media/base/bind_to_current_loop.h. 19 // TODO(tzik): Merge this file to media/base/bind_to_current_loop.h.
19 20
20 namespace sync_file_system { 21 namespace sync_file_system {
21 namespace drive_backend { 22 namespace drive_backend {
22 23
23 namespace internal { 24 namespace internal {
24 25
25 template <typename T> 26 template <typename T>
26 typename base::enable_if< 27 typename base::enable_if<
27 base::internal::IsMoveOnlyType<T>::value, 28 base::internal::IsMoveOnlyType<T>::value,
28 base::internal::PassedWrapper<T> >::type 29 base::internal::PassedWrapper<T> >::type
29 RebindForward(T& t) { 30 RebindForward(T& t) {
30 return base::Passed(&t); 31 return base::Passed(&t);
31 } 32 }
32 33
33 template <typename T> 34 template <typename T>
34 typename base::enable_if< 35 typename base::enable_if<
35 !base::internal::IsMoveOnlyType<T>::value, 36 !base::internal::IsMoveOnlyType<T>::value,
36 T&>::type 37 T&>::type
37 RebindForward(T& t) { 38 RebindForward(T& t) {
38 return t; 39 return t;
39 } 40 }
40 41
42 template <typename T>
43 class CallbackHolder {
44 public:
45 CallbackHolder(base::SequencedTaskRunner* task_runner,
46 const tracked_objects::Location& from_here,
47 const base::Callback<T>& callback)
48 : task_runner_(task_runner),
49 from_here_(from_here),
50 callback_(new base::Callback<T>(callback)) {
51 DCHECK(task_runner_);
52 }
53
54 ~CallbackHolder() {
55 base::Callback<T>* callback = callback_.release();
56 if (!task_runner_->DeleteSoon(from_here_, callback))
57 delete callback;
58 }
59
60 base::SequencedTaskRunner* task_runner() const { return task_runner_; }
61 const tracked_objects::Location& from_here() const { return from_here_; }
62 const base::Callback<T>& callback() const { return *callback_; }
63
64 private:
65 scoped_refptr<base::SequencedTaskRunner> task_runner_;
66 const tracked_objects::Location from_here_;
67 scoped_ptr<base::Callback<T> > callback_;
68
69 DISALLOW_COPY_AND_ASSIGN(CallbackHolder);
70 };
71
41 template <typename> 72 template <typename>
42 struct RelayToTaskRunnerHelper; 73 struct RelayToTaskRunnerHelper;
43 74
44 template <> 75 template <>
45 struct RelayToTaskRunnerHelper<void()> { 76 struct RelayToTaskRunnerHelper<void()> {
46 static void Run(base::TaskRunner* task_runner, 77 static void Run(CallbackHolder<void()>* holder) {
47 const tracked_objects::Location& from_here, 78 holder->task_runner()->PostTask(
48 const base::Callback<void()>& callback) { 79 holder->from_here(), base::Bind(holder->callback()));
49 task_runner->PostTask(from_here, base::Bind(callback));
50 } 80 }
51 }; 81 };
52 82
53 template <typename A1> 83 template <typename A1>
54 struct RelayToTaskRunnerHelper<void(A1)> { 84 struct RelayToTaskRunnerHelper<void(A1)> {
55 static void Run(base::TaskRunner* task_runner, 85 static void Run(CallbackHolder<void(A1)>* holder, A1 a1) {
56 const tracked_objects::Location& from_here, 86 holder->task_runner()->PostTask(
57 const base::Callback<void(A1)>& callback, A1 a1) { 87 holder->from_here(), base::Bind(holder->callback(), RebindForward(a1)));
58 task_runner->PostTask(from_here, base::Bind(callback, RebindForward(a1)));
59 } 88 }
60 }; 89 };
61 90
62 template <typename A1, typename A2> 91 template <typename A1, typename A2>
63 struct RelayToTaskRunnerHelper<void(A1, A2)> { 92 struct RelayToTaskRunnerHelper<void(A1, A2)> {
64 static void Run(base::TaskRunner* task_runner, 93 static void Run(CallbackHolder<void(A1, A2)>* holder, A1 a1, A2 a2) {
65 const tracked_objects::Location& from_here, 94 holder->task_runner()->PostTask(
66 const base::Callback<void(A1, A2)>& callback, A1 a1, A2 a2) { 95 holder->from_here(), base::Bind(holder->callback(), RebindForward(a1),
67 task_runner->PostTask(from_here, base::Bind(callback, RebindForward(a1), 96 RebindForward(a2)));
68 RebindForward(a2)));
69 } 97 }
70 }; 98 };
71 99
72 template <typename A1, typename A2, typename A3> 100 template <typename A1, typename A2, typename A3>
73 struct RelayToTaskRunnerHelper<void(A1, A2, A3)> { 101 struct RelayToTaskRunnerHelper<void(A1, A2, A3)> {
74 static void Run(base::TaskRunner* task_runner, 102 static void Run(CallbackHolder<void(A1, A2, A3)>* holder, A1 a1, A2 a2,
75 const tracked_objects::Location& from_here, 103 A3 a3) {
76 const base::Callback<void(A1, A2, A3)>& callback, A1 a1, 104 holder->task_runner()->PostTask(
77 A2 a2, A3 a3) { 105 holder->from_here(), base::Bind(holder->callback(), RebindForward(a1),
78 task_runner->PostTask(from_here, base::Bind(callback, RebindForward(a1), 106 RebindForward(a2), RebindForward(a3)));
79 RebindForward(a2), RebindForward(a3)));
80 } 107 }
81 }; 108 };
82 109
83 template <typename A1, typename A2, typename A3, typename A4> 110 template <typename A1, typename A2, typename A3, typename A4>
84 struct RelayToTaskRunnerHelper<void(A1, A2, A3, A4)> { 111 struct RelayToTaskRunnerHelper<void(A1, A2, A3, A4)> {
85 static void Run(base::TaskRunner* task_runner, 112 static void Run(CallbackHolder<void(A1, A2, A3, A4)>* holder, A1 a1, A2 a2,
86 const tracked_objects::Location& from_here, 113 A3 a3, A4 a4) {
87 const base::Callback<void(A1, A2, A3, A4)>& callback, A1 a1, 114 holder->task_runner()->PostTask(
88 A2 a2, A3 a3, A4 a4) { 115 holder->from_here(), base::Bind(holder->callback(), RebindForward(a1),
89 task_runner->PostTask(from_here, base::Bind(callback, RebindForward(a1), 116 RebindForward(a2), RebindForward(a3), RebindForward(a4)));
90 RebindForward(a2), RebindForward(a3), RebindForward(a4)));
91 } 117 }
92 }; 118 };
93 119
94 template <typename A1, typename A2, typename A3, typename A4, typename A5> 120 template <typename A1, typename A2, typename A3, typename A4, typename A5>
95 struct RelayToTaskRunnerHelper<void(A1, A2, A3, A4, A5)> { 121 struct RelayToTaskRunnerHelper<void(A1, A2, A3, A4, A5)> {
96 static void Run(base::TaskRunner* task_runner, 122 static void Run(CallbackHolder<void(A1, A2, A3, A4, A5)>* holder, A1 a1,
97 const tracked_objects::Location& from_here, 123 A2 a2, A3 a3, A4 a4, A5 a5) {
98 const base::Callback<void(A1, A2, A3, A4, A5)>& callback, 124 holder->task_runner()->PostTask(
99 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { 125 holder->from_here(), base::Bind(holder->callback(), RebindForward(a1),
100 task_runner->PostTask(from_here, base::Bind(callback, RebindForward(a1), 126 RebindForward(a2), RebindForward(a3), RebindForward(a4),
101 RebindForward(a2), RebindForward(a3), RebindForward(a4), 127 RebindForward(a5)));
102 RebindForward(a5)));
103 } 128 }
104 }; 129 };
105 130
106 template <typename A1, typename A2, typename A3, typename A4, typename A5, 131 template <typename A1, typename A2, typename A3, typename A4, typename A5,
107 typename A6> 132 typename A6>
108 struct RelayToTaskRunnerHelper<void(A1, A2, A3, A4, A5, A6)> { 133 struct RelayToTaskRunnerHelper<void(A1, A2, A3, A4, A5, A6)> {
109 static void Run(base::TaskRunner* task_runner, 134 static void Run(CallbackHolder<void(A1, A2, A3, A4, A5, A6)>* holder, A1 a1,
110 const tracked_objects::Location& from_here, 135 A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) {
111 const base::Callback<void(A1, A2, A3, A4, A5, A6)>& callback, 136 holder->task_runner()->PostTask(
112 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { 137 holder->from_here(), base::Bind(holder->callback(), RebindForward(a1),
113 task_runner->PostTask(from_here, base::Bind(callback, RebindForward(a1), 138 RebindForward(a2), RebindForward(a3), RebindForward(a4),
114 RebindForward(a2), RebindForward(a3), RebindForward(a4), 139 RebindForward(a5), RebindForward(a6)));
115 RebindForward(a5), RebindForward(a6)));
116 } 140 }
117 }; 141 };
118 142
119 template <typename A1, typename A2, typename A3, typename A4, typename A5, 143 template <typename A1, typename A2, typename A3, typename A4, typename A5,
120 typename A6, typename A7> 144 typename A6, typename A7>
121 struct RelayToTaskRunnerHelper<void(A1, A2, A3, A4, A5, A6, A7)> { 145 struct RelayToTaskRunnerHelper<void(A1, A2, A3, A4, A5, A6, A7)> {
122 static void Run(base::TaskRunner* task_runner, 146 static void Run(CallbackHolder<void(A1, A2, A3, A4, A5, A6, A7)>* holder,
123 const tracked_objects::Location& from_here, 147 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) {
124 const base::Callback<void(A1, A2, A3, A4, A5, A6, 148 holder->task_runner()->PostTask(
125 A7)>& callback, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, 149 holder->from_here(), base::Bind(holder->callback(), RebindForward(a1),
126 A7 a7) { 150 RebindForward(a2), RebindForward(a3), RebindForward(a4),
127 task_runner->PostTask(from_here, base::Bind(callback, RebindForward(a1), 151 RebindForward(a5), RebindForward(a6), RebindForward(a7)));
128 RebindForward(a2), RebindForward(a3), RebindForward(a4),
129 RebindForward(a5), RebindForward(a6), RebindForward(a7)));
130 } 152 }
131 }; 153 };
132 154
133 } // namespace internal 155 } // namespace internal
134 156
135 template <typename T> 157 template <typename T>
136 base::Callback<T> RelayCallbackToTaskRunner( 158 base::Callback<T> RelayCallbackToTaskRunner(
137 base::TaskRunner* task_runner, 159 base::SequencedTaskRunner* task_runner,
138 const tracked_objects::Location& from_here, 160 const tracked_objects::Location& from_here,
139 const base::Callback<T>& callback) { 161 const base::Callback<T>& callback) {
140 DCHECK(task_runner->RunsTasksOnCurrentThread()); 162 DCHECK(task_runner->RunsTasksOnCurrentThread());
141 163
142 if (callback.is_null()) 164 if (callback.is_null())
143 return base::Callback<T>(); 165 return base::Callback<T>();
144 166
145 return base::Bind(&internal::RelayToTaskRunnerHelper<T>::Run, 167 return base::Bind(&internal::RelayToTaskRunnerHelper<T>::Run,
146 make_scoped_refptr(task_runner), from_here, 168 base::Owned(new internal::CallbackHolder<T>(
147 callback); 169 task_runner, from_here, callback)));
148 } 170 }
149 171
150 template <typename T> 172 template <typename T>
151 base::Callback<T> RelayCallbackToCurrentThread( 173 base::Callback<T> RelayCallbackToCurrentThread(
152 const tracked_objects::Location& from_here, 174 const tracked_objects::Location& from_here,
153 const base::Callback<T>& callback) { 175 const base::Callback<T>& callback) {
154 return RelayCallbackToTaskRunner( 176 return RelayCallbackToTaskRunner(
155 base::ThreadTaskRunnerHandle::Get(), 177 base::ThreadTaskRunnerHandle::Get(),
156 from_here, callback); 178 from_here, callback);
157 } 179 }
158 180
159 } // namespace drive_backend 181 } // namespace drive_backend
160 } // namespace sync_file_system 182 } // namespace sync_file_system
161 183
162 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_ 184 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/sync_file_system/drive_backend/callback_helper.h.pump » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698