Chromium Code Reviews| Index: remoting/host/it2me/it2me_host.cc |
| diff --git a/remoting/host/it2me/it2me_host.cc b/remoting/host/it2me/it2me_host.cc |
| index b9a17f8c9431b159fddbcd15a586eb438b315995..7adebc7cd7f9efa142a612d1720fcf76f0310f40 100644 |
| --- a/remoting/host/it2me/it2me_host.cc |
| +++ b/remoting/host/it2me/it2me_host.cc |
| @@ -6,7 +6,6 @@ |
| #include "base/bind.h" |
| #include "base/strings/string_util.h" |
| -#include "base/synchronization/waitable_event.h" |
| #include "base/threading/platform_thread.h" |
| #include "net/socket/client_socket_factory.h" |
| #include "remoting/base/auto_thread.h" |
| @@ -43,6 +42,7 @@ It2MeHost::It2MeHost( |
| const std::string& directory_bot_jid) |
| : host_context_(host_context), |
| task_runner_(task_runner), |
| + network_task_runner_(host_context_->network_task_runner()), |
| observer_(observer), |
| xmpp_server_config_(xmpp_server_config), |
| directory_bot_jid_(directory_bot_jid), |
| @@ -62,25 +62,25 @@ void It2MeHost::Connect() { |
| } |
| desktop_environment_factory_.reset(new It2MeDesktopEnvironmentFactory( |
| - host_context_->network_task_runner(), |
| + network_task_runner_, |
| host_context_->input_task_runner(), |
| host_context_->ui_task_runner())); |
| // Start monitoring configured policies. |
| policy_watcher_.reset( |
| - policy_hack::PolicyWatcher::Create(host_context_->network_task_runner())); |
| + policy_hack::PolicyWatcher::Create(host_context_, network_task_runner_)); |
| policy_watcher_->StartWatching( |
| base::Bind(&It2MeHost::OnPolicyUpdate, this)); |
| // Switch to the network thread to start the actual connection. |
| - host_context_->network_task_runner()->PostTask( |
| + network_task_runner_->PostTask( |
| FROM_HERE, base::Bind(&It2MeHost::ReadPolicyAndConnect, this)); |
| } |
| void It2MeHost::Disconnect() { |
| - if (!host_context_->network_task_runner()->BelongsToCurrentThread()) { |
| + if (!network_task_runner_->BelongsToCurrentThread()) { |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| - host_context_->network_task_runner()->PostTask( |
| + network_task_runner_->PostTask( |
| FROM_HERE, base::Bind(&It2MeHost::Disconnect, this)); |
| return; |
| } |
| @@ -111,16 +111,16 @@ void It2MeHost::Disconnect() { |
| // Deleting the host destroys SignalStrategy synchronously, but |
| // SignalStrategy::Listener handlers are not allowed to destroy |
| // SignalStrategy, so post task to destroy the host later. |
| - host_context_->network_task_runner()->PostTask( |
| + network_task_runner_->PostTask( |
| FROM_HERE, base::Bind(&It2MeHost::ShutdownOnNetworkThread, this)); |
| return; |
| } |
| } |
| void It2MeHost::RequestNatPolicy() { |
| - if (!host_context_->network_task_runner()->BelongsToCurrentThread()) { |
| + if (!network_task_runner_->BelongsToCurrentThread()) { |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| - host_context_->network_task_runner()->PostTask( |
| + network_task_runner_->PostTask( |
| FROM_HERE, base::Bind(&It2MeHost::RequestNatPolicy, this)); |
| return; |
| } |
| @@ -130,7 +130,7 @@ void It2MeHost::RequestNatPolicy() { |
| } |
| void It2MeHost::ReadPolicyAndConnect() { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| SetState(kStarting); |
| @@ -146,7 +146,7 @@ void It2MeHost::ReadPolicyAndConnect() { |
| } |
| void It2MeHost::FinishConnect() { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| if (state_ != kStarting) { |
| // Host has been stopped while we were fetching policy. |
| @@ -203,7 +203,7 @@ void It2MeHost::FinishConnect() { |
| host_context_->input_task_runner(), |
| host_context_->video_capture_task_runner(), |
| host_context_->video_encode_task_runner(), |
| - host_context_->network_task_runner(), |
| + network_task_runner_, |
| host_context_->ui_task_runner())); |
| host_->AddStatusObserver(this); |
| host_status_logger_.reset( |
| @@ -231,7 +231,7 @@ void It2MeHost::FinishConnect() { |
| } |
| void It2MeHost::ShutdownOnNetworkThread() { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| DCHECK(state_ == kDisconnecting || state_ == kDisconnected); |
| if (state_ == kDisconnecting) { |
| @@ -245,27 +245,30 @@ void It2MeHost::ShutdownOnNetworkThread() { |
| SetState(kDisconnected); |
| } |
| - host_context_->ui_task_runner()->PostTask( |
| - FROM_HERE, base::Bind(&It2MeHost::ShutdownOnUiThread, this)); |
| + task_runner_->PostTask(FROM_HERE, |
|
Jamie
2014/10/14 01:18:42
Why has this changed?
kelvinp
2014/10/15 23:03:10
As per wez, comment, we are trying to take referen
|
| + base::Bind(&It2MeHost::ShutdownOnUiThread, this)); |
| } |
| void It2MeHost::ShutdownOnUiThread() { |
| - DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(task_runner_->BelongsToCurrentThread()); |
| // Destroy the DesktopEnvironmentFactory, to free thread references. |
| desktop_environment_factory_.reset(); |
| // Stop listening for policy updates. |
| if (policy_watcher_.get()) { |
| - base::WaitableEvent policy_watcher_stopped_(true, false); |
| - policy_watcher_->StopWatching(&policy_watcher_stopped_); |
| - policy_watcher_stopped_.Wait(); |
| - policy_watcher_.reset(); |
| + policy_watcher_->StopWatching( |
| + base::Bind(&It2MeHost::OnPolicyWatcherShutdown, this)); |
| + return; |
| } |
| } |
| +void It2MeHost::OnPolicyWatcherShutdown() { |
| + policy_watcher_.reset(); |
| +} |
| + |
| void It2MeHost::OnAccessDenied(const std::string& jid) { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| ++failed_login_attempts_; |
| if (failed_login_attempts_ == kMaxLoginAttempts) { |
| @@ -274,7 +277,7 @@ void It2MeHost::OnAccessDenied(const std::string& jid) { |
| } |
| void It2MeHost::OnClientAuthenticated(const std::string& jid) { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| if (state_ == kDisconnecting) { |
| // Ignore the new connection if we are disconnecting. |
| @@ -305,13 +308,13 @@ void It2MeHost::OnClientAuthenticated(const std::string& jid) { |
| } |
| void It2MeHost::OnClientDisconnected(const std::string& jid) { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| Disconnect(); |
| } |
| void It2MeHost::OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies) { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| bool nat_policy; |
| if (policies->GetBoolean(policy_hack::PolicyWatcher::kNatPolicyName, |
| @@ -333,7 +336,7 @@ void It2MeHost::OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies) { |
| } |
| void It2MeHost::UpdateNatPolicy(bool nat_traversal_enabled) { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| VLOG(2) << "UpdateNatPolicy: " << nat_traversal_enabled; |
| @@ -352,7 +355,7 @@ void It2MeHost::UpdateNatPolicy(bool nat_traversal_enabled) { |
| } |
| void It2MeHost::UpdateHostDomainPolicy(const std::string& host_domain) { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| VLOG(2) << "UpdateHostDomainPolicy: " << host_domain; |
| @@ -371,7 +374,7 @@ It2MeHost::~It2MeHost() { |
| } |
| void It2MeHost::SetState(It2MeHostState state) { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| switch (state_) { |
| case kDisconnected: |
| @@ -427,7 +430,7 @@ void It2MeHost::OnReceivedSupportID( |
| bool success, |
| const std::string& support_id, |
| const base::TimeDelta& lifetime) { |
| - DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| if (!success) { |
| SetState(kError); |