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

Side by Side Diff: remoting/host/setup/daemon_controller.h

Issue 1864213002: Convert //remoting to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mac IWYU Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef REMOTING_HOST_SETUP_DAEMON_CONTROLLER_H_ 5 #ifndef REMOTING_HOST_SETUP_DAEMON_CONTROLLER_H_
6 #define REMOTING_HOST_SETUP_DAEMON_CONTROLLER_H_ 6 #define REMOTING_HOST_SETUP_DAEMON_CONTROLLER_H_
7 7
8 #include <memory>
8 #include <queue> 9 #include <queue>
9 #include <string> 10 #include <string>
10 11
11 #include "base/callback.h" 12 #include "base/callback.h"
12 #include "base/macros.h" 13 #include "base/macros.h"
13 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_ptr.h"
15 15
16 namespace base { 16 namespace base {
17 class DictionaryValue; 17 class DictionaryValue;
18 class SingleThreadTaskRunner; 18 class SingleThreadTaskRunner;
19 } // namespace base 19 } // namespace base
20 20
21 namespace remoting { 21 namespace remoting {
22 22
23 class AutoThread; 23 class AutoThread;
24 class AutoThreadTaskRunner; 24 class AutoThreadTaskRunner;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 RESULT_CANCELLED = 2, 59 RESULT_CANCELLED = 2,
60 60
61 // TODO(sergeyu): Add more error codes when we know how to handle 61 // TODO(sergeyu): Add more error codes when we know how to handle
62 // them in the webapp. 62 // them in the webapp.
63 }; 63 };
64 64
65 // Callback type for GetConfig(). If the host is configured then a dictionary 65 // Callback type for GetConfig(). If the host is configured then a dictionary
66 // is returned containing host_id and xmpp_login, with security-sensitive 66 // is returned containing host_id and xmpp_login, with security-sensitive
67 // fields filtered out. An empty dictionary is returned if the host is not 67 // fields filtered out. An empty dictionary is returned if the host is not
68 // configured, and nullptr if the configuration is corrupt or cannot be read. 68 // configured, and nullptr if the configuration is corrupt or cannot be read.
69 typedef base::Callback<void (scoped_ptr<base::DictionaryValue> config)> 69 typedef base::Callback<void(std::unique_ptr<base::DictionaryValue> config)>
70 GetConfigCallback; 70 GetConfigCallback;
71 71
72 // Callback used for asynchronous operations, e.g. when 72 // Callback used for asynchronous operations, e.g. when
73 // starting/stopping the service. 73 // starting/stopping the service.
74 typedef base::Callback<void (AsyncResult result)> CompletionCallback; 74 typedef base::Callback<void (AsyncResult result)> CompletionCallback;
75 75
76 struct UsageStatsConsent { 76 struct UsageStatsConsent {
77 // Indicates whether crash dump reporting is supported by the host. 77 // Indicates whether crash dump reporting is supported by the host.
78 bool supported; 78 bool supported;
79 79
(...skipping 20 matching lines...) Expand all
100 class Delegate { 100 class Delegate {
101 public: 101 public:
102 virtual ~Delegate() {} 102 virtual ~Delegate() {}
103 103
104 // Return the "installed/running" state of the daemon process. This method 104 // Return the "installed/running" state of the daemon process. This method
105 // should avoid accessing any data members of the implementation. 105 // should avoid accessing any data members of the implementation.
106 virtual State GetState() = 0; 106 virtual State GetState() = 0;
107 107
108 // Queries current host configuration. Any values that might be security 108 // Queries current host configuration. Any values that might be security
109 // sensitive have been filtered out. 109 // sensitive have been filtered out.
110 virtual scoped_ptr<base::DictionaryValue> GetConfig() = 0; 110 virtual std::unique_ptr<base::DictionaryValue> GetConfig() = 0;
111 111
112 // Starts the daemon process. This may require that the daemon be 112 // Starts the daemon process. This may require that the daemon be
113 // downloaded and installed. |done| is invoked on the calling thread when 113 // downloaded and installed. |done| is invoked on the calling thread when
114 // the operation is completed. 114 // the operation is completed.
115 virtual void SetConfigAndStart( 115 virtual void SetConfigAndStart(
116 scoped_ptr<base::DictionaryValue> config, 116 std::unique_ptr<base::DictionaryValue> config,
117 bool consent, 117 bool consent,
118 const CompletionCallback& done) = 0; 118 const CompletionCallback& done) = 0;
119 119
120 // Updates current host configuration with the values specified in 120 // Updates current host configuration with the values specified in
121 // |config|. Any value in the existing configuration that isn't specified in 121 // |config|. Any value in the existing configuration that isn't specified in
122 // |config| is preserved. |config| must not contain host_id or xmpp_login 122 // |config| is preserved. |config| must not contain host_id or xmpp_login
123 // values, because implementations of this method cannot change them. |done| 123 // values, because implementations of this method cannot change them. |done|
124 // is invoked on the calling thread when the operation is completed. 124 // is invoked on the calling thread when the operation is completed.
125 virtual void UpdateConfig( 125 virtual void UpdateConfig(std::unique_ptr<base::DictionaryValue> config,
126 scoped_ptr<base::DictionaryValue> config, 126 const CompletionCallback& done) = 0;
127 const CompletionCallback& done) = 0;
128 127
129 // Stops the daemon process. |done| is invoked on the calling thread when 128 // Stops the daemon process. |done| is invoked on the calling thread when
130 // the operation is completed. 129 // the operation is completed.
131 virtual void Stop(const CompletionCallback& done) = 0; 130 virtual void Stop(const CompletionCallback& done) = 0;
132 131
133 // Get the user's consent to crash reporting. 132 // Get the user's consent to crash reporting.
134 virtual UsageStatsConsent GetUsageStatsConsent() = 0; 133 virtual UsageStatsConsent GetUsageStatsConsent() = 0;
135 }; 134 };
136 135
137 static scoped_refptr<DaemonController> Create(); 136 static scoped_refptr<DaemonController> Create();
138 137
139 explicit DaemonController(scoped_ptr<Delegate> delegate); 138 explicit DaemonController(std::unique_ptr<Delegate> delegate);
140 139
141 // Return the "installed/running" state of the daemon process. 140 // Return the "installed/running" state of the daemon process.
142 // 141 //
143 // TODO(sergeyu): This method is called synchronously from the 142 // TODO(sergeyu): This method is called synchronously from the
144 // webapp. In most cases it requires IO operations, so it may block 143 // webapp. In most cases it requires IO operations, so it may block
145 // the user interface. Replace it with asynchronous notifications, 144 // the user interface. Replace it with asynchronous notifications,
146 // e.g. with StartStateNotifications()/StopStateNotifications() methods. 145 // e.g. with StartStateNotifications()/StopStateNotifications() methods.
147 State GetState(); 146 State GetState();
148 147
149 // Queries current host configuration. The |done| is called 148 // Queries current host configuration. The |done| is called
150 // after the configuration is read, and any values that might be security 149 // after the configuration is read, and any values that might be security
151 // sensitive have been filtered out. 150 // sensitive have been filtered out.
152 void GetConfig(const GetConfigCallback& done); 151 void GetConfig(const GetConfigCallback& done);
153 152
154 // Start the daemon process. This may require that the daemon be 153 // Start the daemon process. This may require that the daemon be
155 // downloaded and installed. |done| is called when the 154 // downloaded and installed. |done| is called when the
156 // operation is finished or fails. 155 // operation is finished or fails.
157 // 156 //
158 // TODO(sergeyu): This method writes config and starts the host - 157 // TODO(sergeyu): This method writes config and starts the host -
159 // these two steps are merged for simplicity. Consider splitting it 158 // these two steps are merged for simplicity. Consider splitting it
160 // into SetConfig() and Start() once we have basic host setup flow 159 // into SetConfig() and Start() once we have basic host setup flow
161 // working. 160 // working.
162 void SetConfigAndStart(scoped_ptr<base::DictionaryValue> config, 161 void SetConfigAndStart(std::unique_ptr<base::DictionaryValue> config,
163 bool consent, 162 bool consent,
164 const CompletionCallback& done); 163 const CompletionCallback& done);
165 164
166 // Updates current host configuration with the values specified in 165 // Updates current host configuration with the values specified in
167 // |config|. Changes must take effect before the call completes. 166 // |config|. Changes must take effect before the call completes.
168 // Any value in the existing configuration that isn't specified in |config| 167 // Any value in the existing configuration that isn't specified in |config|
169 // is preserved. |config| must not contain host_id or xmpp_login values, 168 // is preserved. |config| must not contain host_id or xmpp_login values,
170 // because implementations of this method cannot change them. 169 // because implementations of this method cannot change them.
171 void UpdateConfig(scoped_ptr<base::DictionaryValue> config, 170 void UpdateConfig(std::unique_ptr<base::DictionaryValue> config,
172 const CompletionCallback& done); 171 const CompletionCallback& done);
173 172
174 // Stop the daemon process. It is permitted to call Stop while the daemon 173 // Stop the daemon process. It is permitted to call Stop while the daemon
175 // process is being installed, in which case the installation should be 174 // process is being installed, in which case the installation should be
176 // aborted if possible; if not then it is sufficient to ensure that the 175 // aborted if possible; if not then it is sufficient to ensure that the
177 // daemon process is not started automatically upon successful installation. 176 // daemon process is not started automatically upon successful installation.
178 // As with Start, Stop may return before the operation is complete--poll 177 // As with Start, Stop may return before the operation is complete--poll
179 // GetState until the state is STATE_STOPPED. 178 // GetState until the state is STATE_STOPPED.
180 void Stop(const CompletionCallback& done); 179 void Stop(const CompletionCallback& done);
181 180
182 // Get the user's consent to crash reporting. 181 // Get the user's consent to crash reporting.
183 void GetUsageStatsConsent(const GetUsageStatsConsentCallback& done); 182 void GetUsageStatsConsent(const GetUsageStatsConsentCallback& done);
184 183
185 private: 184 private:
186 friend class base::RefCountedThreadSafe<DaemonController>; 185 friend class base::RefCountedThreadSafe<DaemonController>;
187 virtual ~DaemonController(); 186 virtual ~DaemonController();
188 187
189 // Blocking helper methods used to call the delegate. 188 // Blocking helper methods used to call the delegate.
190 void DoGetConfig(const GetConfigCallback& done); 189 void DoGetConfig(const GetConfigCallback& done);
191 void DoSetConfigAndStart(scoped_ptr<base::DictionaryValue> config, 190 void DoSetConfigAndStart(std::unique_ptr<base::DictionaryValue> config,
192 bool consent, 191 bool consent,
193 const CompletionCallback& done); 192 const CompletionCallback& done);
194 void DoUpdateConfig(scoped_ptr<base::DictionaryValue> config, 193 void DoUpdateConfig(std::unique_ptr<base::DictionaryValue> config,
195 const CompletionCallback& done); 194 const CompletionCallback& done);
196 void DoStop(const CompletionCallback& done); 195 void DoStop(const CompletionCallback& done);
197 void DoGetUsageStatsConsent(const GetUsageStatsConsentCallback& done); 196 void DoGetUsageStatsConsent(const GetUsageStatsConsentCallback& done);
198 197
199 // "Trampoline" callbacks that schedule the next pending request and then 198 // "Trampoline" callbacks that schedule the next pending request and then
200 // invoke the original caller-supplied callback. 199 // invoke the original caller-supplied callback.
201 void InvokeCompletionCallbackAndScheduleNext( 200 void InvokeCompletionCallbackAndScheduleNext(
202 const CompletionCallback& done, 201 const CompletionCallback& done,
203 AsyncResult result); 202 AsyncResult result);
204 void InvokeConfigCallbackAndScheduleNext( 203 void InvokeConfigCallbackAndScheduleNext(
205 const GetConfigCallback& done, 204 const GetConfigCallback& done,
206 scoped_ptr<base::DictionaryValue> config); 205 std::unique_ptr<base::DictionaryValue> config);
207 void InvokeConsentCallbackAndScheduleNext( 206 void InvokeConsentCallbackAndScheduleNext(
208 const GetUsageStatsConsentCallback& done, 207 const GetUsageStatsConsentCallback& done,
209 const UsageStatsConsent& consent); 208 const UsageStatsConsent& consent);
210 209
211 // Queue management methods. 210 // Queue management methods.
212 void ScheduleNext(); 211 void ScheduleNext();
213 void ServiceOrQueueRequest(const base::Closure& request); 212 void ServiceOrQueueRequest(const base::Closure& request);
214 void ServiceNextRequest(); 213 void ServiceNextRequest();
215 214
216 // Task runner on which all public methods of this class should be called. 215 // Task runner on which all public methods of this class should be called.
217 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_; 216 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
218 217
219 // Task runner used to run blocking calls to the delegate. A single thread 218 // Task runner used to run blocking calls to the delegate. A single thread
220 // task runner is used to guarantee that one method of the delegate is 219 // task runner is used to guarantee that one method of the delegate is
221 // called at a time. 220 // called at a time.
222 scoped_refptr<AutoThreadTaskRunner> delegate_task_runner_; 221 scoped_refptr<AutoThreadTaskRunner> delegate_task_runner_;
223 222
224 scoped_ptr<AutoThread> delegate_thread_; 223 std::unique_ptr<AutoThread> delegate_thread_;
225 224
226 scoped_ptr<Delegate> delegate_; 225 std::unique_ptr<Delegate> delegate_;
227 226
228 std::queue<base::Closure> pending_requests_; 227 std::queue<base::Closure> pending_requests_;
229 228
230 DISALLOW_COPY_AND_ASSIGN(DaemonController); 229 DISALLOW_COPY_AND_ASSIGN(DaemonController);
231 }; 230 };
232 231
233 } // namespace remoting 232 } // namespace remoting
234 233
235 #endif // REMOTING_HOST_SETUP_DAEMON_CONTROLLER_H_ 234 #endif // REMOTING_HOST_SETUP_DAEMON_CONTROLLER_H_
OLDNEW
« no previous file with comments | « remoting/host/server_log_entry_host_unittest.cc ('k') | remoting/host/setup/daemon_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698