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

Side by Side Diff: remoting/host/remoting_me2me_host.cc

Issue 10572005: Use SingleThreadTaskRunner instead of MessageLoopProxy in remoting/host. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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 | « remoting/host/policy_hack/nat_policy_win.cc ('k') | remoting/host/screen_recorder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // This file implements a standalone host process for Me2Me. 5 // This file implements a standalone host process for Me2Me.
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/at_exit.h" 9 #include "base/at_exit.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 // Call ConfigUpdatedDelayed after a short delay, so that this object won't 139 // Call ConfigUpdatedDelayed after a short delay, so that this object won't
140 // try to read the updated configuration file before it has been 140 // try to read the updated configuration file before it has been
141 // completely written. 141 // completely written.
142 // If the writer moves the new configuration file into place atomically, 142 // If the writer moves the new configuration file into place atomically,
143 // this delay may not be necessary. 143 // this delay may not be necessary.
144 config_updated_timer_->Reset(); 144 config_updated_timer_->Reset();
145 } 145 }
146 146
147 void ConfigUpdatedDelayed() { 147 void ConfigUpdatedDelayed() {
148 if (LoadConfig()) { 148 if (LoadConfig()) {
149 context_->network_message_loop()->PostTask( 149 context_->network_task_runner()->PostTask(
150 FROM_HERE, 150 FROM_HERE,
151 base::Bind(&HostProcess::CreateAuthenticatorFactory, 151 base::Bind(&HostProcess::CreateAuthenticatorFactory,
152 base::Unretained(this))); 152 base::Unretained(this)));
153 } else { 153 } else {
154 LOG(ERROR) << "Invalid configuration."; 154 LOG(ERROR) << "Invalid configuration.";
155 } 155 }
156 } 156 }
157 157
158 #if defined(OS_WIN) 158 #if defined(OS_WIN)
159 class ConfigChangedDelegate : public base::files::FilePathWatcher::Delegate { 159 class ConfigChangedDelegate : public base::files::FilePathWatcher::Delegate {
160 public: 160 public:
161 ConfigChangedDelegate(base::MessageLoopProxy* message_loop, 161 ConfigChangedDelegate(
162 const base::Closure& callback) 162 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
163 : message_loop_(message_loop), 163 const base::Closure& callback)
164 : task_runner_(task_runner),
164 callback_(callback) { 165 callback_(callback) {
165 } 166 }
166 167
167 void OnFilePathChanged(const FilePath& path) OVERRIDE { 168 void OnFilePathChanged(const FilePath& path) OVERRIDE {
168 message_loop_->PostTask(FROM_HERE, callback_); 169 task_runner_->PostTask(FROM_HERE, callback_);
169 } 170 }
170 171
171 void OnFilePathError(const FilePath& path) OVERRIDE { 172 void OnFilePathError(const FilePath& path) OVERRIDE {
172 } 173 }
173 174
174 private: 175 private:
175 scoped_refptr<base::MessageLoopProxy> message_loop_; 176 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
176 base::Closure callback_; 177 base::Closure callback_;
177 178
178 DISALLOW_COPY_AND_ASSIGN(ConfigChangedDelegate); 179 DISALLOW_COPY_AND_ASSIGN(ConfigChangedDelegate);
179 }; 180 };
180 #endif // defined(OS_WIN) 181 #endif // defined(OS_WIN)
181 182
182 void ListenForConfigChanges() { 183 void ListenForConfigChanges() {
183 #if defined(OS_MACOSX) 184 #if defined(OS_MACOSX)
184 remoting::RegisterHupSignalHandler( 185 remoting::RegisterHupSignalHandler(
185 base::Bind(&HostProcess::ConfigUpdatedDelayed, base::Unretained(this))); 186 base::Bind(&HostProcess::ConfigUpdatedDelayed, base::Unretained(this)));
(...skipping 22 matching lines...) Expand all
208 return kInvalidHostConfigurationExitCode; 209 return kInvalidHostConfigurationExitCode;
209 } 210 }
210 211
211 #if defined(OS_MACOSX) || defined(OS_WIN) 212 #if defined(OS_MACOSX) || defined(OS_WIN)
212 host_user_interface_.reset(new HostUserInterface(context_.get())); 213 host_user_interface_.reset(new HostUserInterface(context_.get()));
213 #endif 214 #endif
214 215
215 StartWatchingNatPolicy(); 216 StartWatchingNatPolicy();
216 217
217 #if defined(OS_MACOSX) || defined(OS_WIN) 218 #if defined(OS_MACOSX) || defined(OS_WIN)
218 context_->file_message_loop()->PostTask( 219 context_->file_task_runner()->PostTask(
219 FROM_HERE, 220 FROM_HERE,
220 base::Bind(&HostProcess::ListenForConfigChanges, 221 base::Bind(&HostProcess::ListenForConfigChanges,
221 base::Unretained(this))); 222 base::Unretained(this)));
222 #endif 223 #endif
223 message_loop_.Run(); 224 message_loop_.Run();
224 225
225 #if defined(OS_MACOSX) || defined(OS_WIN) 226 #if defined(OS_MACOSX) || defined(OS_WIN)
226 host_user_interface_.reset(); 227 host_user_interface_.reset();
227 #endif 228 #endif
228 229
229 base::WaitableEvent done_event(true, false); 230 base::WaitableEvent done_event(true, false);
230 nat_policy_->StopWatching(&done_event); 231 nat_policy_->StopWatching(&done_event);
231 done_event.Wait(); 232 done_event.Wait();
232 nat_policy_.reset(); 233 nat_policy_.reset();
233 234
234 return exit_code_; 235 return exit_code_;
235 } 236 }
236 237
237 // Overridden from HeartbeatSender::Listener 238 // Overridden from HeartbeatSender::Listener
238 virtual void OnUnknownHostIdError() OVERRIDE { 239 virtual void OnUnknownHostIdError() OVERRIDE {
239 LOG(ERROR) << "Host ID not found."; 240 LOG(ERROR) << "Host ID not found.";
240 Shutdown(kInvalidHostIdExitCode); 241 Shutdown(kInvalidHostIdExitCode);
241 } 242 }
242 243
243 private: 244 private:
244 void StartWatchingNatPolicy() { 245 void StartWatchingNatPolicy() {
245 nat_policy_.reset( 246 nat_policy_.reset(
246 policy_hack::NatPolicy::Create(context_->file_message_loop())); 247 policy_hack::NatPolicy::Create(context_->file_task_runner()));
247 nat_policy_->StartWatching( 248 nat_policy_->StartWatching(
248 base::Bind(&HostProcess::OnNatPolicyUpdate, base::Unretained(this))); 249 base::Bind(&HostProcess::OnNatPolicyUpdate, base::Unretained(this)));
249 } 250 }
250 251
251 // Read Host config from disk, returning true if successful. 252 // Read Host config from disk, returning true if successful.
252 bool LoadConfig() { 253 bool LoadConfig() {
253 JsonHostConfig host_config(host_config_path_); 254 JsonHostConfig host_config(host_config_path_);
254 JsonHostConfig auth_config(auth_config_path_); 255 JsonHostConfig auth_config(auth_config_path_);
255 256
256 FilePath failed_path; 257 FilePath failed_path;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 &xmpp_auth_service_)) { 308 &xmpp_auth_service_)) {
308 // For the me2me host, we default to ClientLogin token for chromiumsync 309 // For the me2me host, we default to ClientLogin token for chromiumsync
309 // because earlier versions of the host had no HTTP stack with which to 310 // because earlier versions of the host had no HTTP stack with which to
310 // request an OAuth2 access token. 311 // request an OAuth2 access token.
311 xmpp_auth_service_ = kChromotingTokenDefaultServiceName; 312 xmpp_auth_service_ = kChromotingTokenDefaultServiceName;
312 } 313 }
313 return true; 314 return true;
314 } 315 }
315 316
316 void OnNatPolicyUpdate(bool nat_traversal_enabled) { 317 void OnNatPolicyUpdate(bool nat_traversal_enabled) {
317 if (!context_->network_message_loop()->BelongsToCurrentThread()) { 318 if (!context_->network_task_runner()->BelongsToCurrentThread()) {
318 context_->network_message_loop()->PostTask(FROM_HERE, base::Bind( 319 context_->network_task_runner()->PostTask(FROM_HERE, base::Bind(
319 &HostProcess::OnNatPolicyUpdate, base::Unretained(this), 320 &HostProcess::OnNatPolicyUpdate, base::Unretained(this),
320 nat_traversal_enabled)); 321 nat_traversal_enabled));
321 return; 322 return;
322 } 323 }
323 324
324 bool policy_changed = allow_nat_traversal_ != nat_traversal_enabled; 325 bool policy_changed = allow_nat_traversal_ != nat_traversal_enabled;
325 allow_nat_traversal_ = nat_traversal_enabled; 326 allow_nat_traversal_ = nat_traversal_enabled;
326 327
327 if (host_) { 328 if (host_) {
328 // Restart the host if the policy has changed while the host was 329 // Restart the host if the policy has changed while the host was
329 // online. 330 // online.
330 if (policy_changed) 331 if (policy_changed)
331 RestartHost(); 332 RestartHost();
332 } else { 333 } else {
333 // Just start the host otherwise. 334 // Just start the host otherwise.
334 StartHost(); 335 StartHost();
335 } 336 }
336 } 337 }
337 338
338 void StartHost() { 339 void StartHost() {
339 DCHECK(context_->network_message_loop()->BelongsToCurrentThread()); 340 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
340 DCHECK(!host_); 341 DCHECK(!host_);
341 342
342 if (!signal_strategy_.get()) { 343 if (!signal_strategy_.get()) {
343 signal_strategy_.reset( 344 signal_strategy_.reset(
344 new XmppSignalStrategy(context_->jingle_thread(), xmpp_login_, 345 new XmppSignalStrategy(context_->jingle_thread(), xmpp_login_,
345 xmpp_auth_token_, xmpp_auth_service_)); 346 xmpp_auth_token_, xmpp_auth_service_));
346 347
347 signaling_connector_.reset(new SignalingConnector( 348 signaling_connector_.reset(new SignalingConnector(
348 signal_strategy_.get(), 349 signal_strategy_.get(),
349 base::Bind(&HostProcess::OnAuthFailed, base::Unretained(this)))); 350 base::Bind(&HostProcess::OnAuthFailed, base::Unretained(this))));
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 423
423 // Invoked when the user uses the Disconnect windows to terminate 424 // Invoked when the user uses the Disconnect windows to terminate
424 // the sessions. 425 // the sessions.
425 void OnDisconnectRequested() { 426 void OnDisconnectRequested() {
426 DCHECK(message_loop_.message_loop_proxy()->BelongsToCurrentThread()); 427 DCHECK(message_loop_.message_loop_proxy()->BelongsToCurrentThread());
427 428
428 host_->DisconnectAllClients(); 429 host_->DisconnectAllClients();
429 } 430 }
430 431
431 void RestartHost() { 432 void RestartHost() {
432 DCHECK(context_->network_message_loop()->BelongsToCurrentThread()); 433 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
433 434
434 if (restarting_ || shutting_down_) 435 if (restarting_ || shutting_down_)
435 return; 436 return;
436 437
437 restarting_ = true; 438 restarting_ = true;
438 host_->Shutdown(base::Bind( 439 host_->Shutdown(base::Bind(
439 &HostProcess::RestartOnHostShutdown, base::Unretained(this))); 440 &HostProcess::RestartOnHostShutdown, base::Unretained(this)));
440 } 441 }
441 442
442 void RestartOnHostShutdown() { 443 void RestartOnHostShutdown() {
443 DCHECK(context_->network_message_loop()->BelongsToCurrentThread()); 444 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
444 445
445 if (shutting_down_) 446 if (shutting_down_)
446 return; 447 return;
447 448
448 restarting_ = false; 449 restarting_ = false;
449 host_ = NULL; 450 host_ = NULL;
450 log_to_server_.reset(); 451 log_to_server_.reset();
451 host_event_logger_.reset(); 452 host_event_logger_.reset();
452 heartbeat_sender_.reset(); 453 heartbeat_sender_.reset();
453 454
454 StartHost(); 455 StartHost();
455 } 456 }
456 457
457 void Shutdown(int exit_code) { 458 void Shutdown(int exit_code) {
458 DCHECK(context_->network_message_loop()->BelongsToCurrentThread()); 459 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
459 460
460 if (shutting_down_) 461 if (shutting_down_)
461 return; 462 return;
462 463
463 shutting_down_ = true; 464 shutting_down_ = true;
464 exit_code_ = exit_code; 465 exit_code_ = exit_code;
465 host_->Shutdown(base::Bind( 466 host_->Shutdown(base::Bind(
466 &HostProcess::OnShutdownFinished, base::Unretained(this))); 467 &HostProcess::OnShutdownFinished, base::Unretained(this)));
467 } 468 }
468 469
469 void OnShutdownFinished() { 470 void OnShutdownFinished() {
470 DCHECK(context_->network_message_loop()->BelongsToCurrentThread()); 471 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
471 472
472 // Destroy networking objects while we are on the network thread. 473 // Destroy networking objects while we are on the network thread.
473 host_ = NULL; 474 host_ = NULL;
474 host_event_logger_.reset(); 475 host_event_logger_.reset();
475 log_to_server_.reset(); 476 log_to_server_.reset();
476 heartbeat_sender_.reset(); 477 heartbeat_sender_.reset();
477 signaling_connector_.reset(); 478 signaling_connector_.reset();
478 signal_strategy_.reset(); 479 signal_strategy_.reset();
479 480
480 message_loop_.PostTask(FROM_HERE, MessageLoop::QuitClosure()); 481 message_loop_.PostTask(FROM_HERE, MessageLoop::QuitClosure());
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 user32.GetFunctionPointer("SetProcessDPIAware")); 603 user32.GetFunctionPointer("SetProcessDPIAware"));
603 set_process_dpi_aware(); 604 set_process_dpi_aware();
604 } 605 }
605 606
606 // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting 607 // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting
607 // the command line from GetCommandLineW(), so we can safely pass NULL here. 608 // the command line from GetCommandLineW(), so we can safely pass NULL here.
608 return main(0, NULL); 609 return main(0, NULL);
609 } 610 }
610 611
611 #endif // defined(OS_WIN) 612 #endif // defined(OS_WIN)
OLDNEW
« no previous file with comments | « remoting/host/policy_hack/nat_policy_win.cc ('k') | remoting/host/screen_recorder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698