Index: remoting/host/plugin/host_script_object.cc |
diff --git a/remoting/host/plugin/host_script_object.cc b/remoting/host/plugin/host_script_object.cc |
index 8cffb5e4842b980c67dd3802c07dc576044459b3..c900bc68aacb3f4d67696ed86a7c51399c1eb4a8 100644 |
--- a/remoting/host/plugin/host_script_object.cc |
+++ b/remoting/host/plugin/host_script_object.cc |
@@ -19,7 +19,7 @@ |
#include "remoting/base/auth_token_util.h" |
#include "remoting/host/chromoting_host.h" |
#include "remoting/host/chromoting_host_context.h" |
-#include "remoting/host/desktop_environment.h" |
+#include "remoting/host/desktop_environment_factory.h" |
#include "remoting/host/host_config.h" |
#include "remoting/host/host_event_logger.h" |
#include "remoting/host/host_key_pair.h" |
@@ -93,6 +93,7 @@ HostNPScriptObject::HostNPScriptObject( |
np_thread_id_(base::PlatformThread::CurrentId()), |
plugin_task_runner_( |
new PluginThreadTaskRunner(plugin_thread_delegate)), |
+ desktop_environment_factory_(new DesktopEnvironmentFactory()), |
failed_login_attempts_(0), |
disconnected_event_(true, false), |
nat_traversal_enabled_(false), |
@@ -511,43 +512,22 @@ void HostNPScriptObject::ReadPolicyAndConnect(const std::string& uid, |
// Only proceed to FinishConnect() if at least one policy update has been |
// received. |
if (policy_received_) { |
- FinishConnectMainThread(uid, auth_token, auth_service); |
+ FinishConnect(uid, auth_token, auth_service); |
} else { |
// Otherwise, create the policy watcher, and thunk the connect. |
pending_connect_ = |
- base::Bind(&HostNPScriptObject::FinishConnectMainThread, |
+ base::Bind(&HostNPScriptObject::FinishConnect, |
base::Unretained(this), uid, auth_token, auth_service); |
} |
} |
-void HostNPScriptObject::FinishConnectMainThread( |
- const std::string& uid, |
- const std::string& auth_token, |
- const std::string& auth_service) { |
- if (!host_context_->capture_task_runner()->BelongsToCurrentThread()) { |
- host_context_->capture_task_runner()->PostTask(FROM_HERE, base::Bind( |
- &HostNPScriptObject::FinishConnectMainThread, base::Unretained(this), |
- uid, auth_token, auth_service)); |
- return; |
- } |
- |
- // DesktopEnvironment must be initialized on the capture thread. |
- // |
- // TODO(sergeyu): Fix DesktopEnvironment so that it can be created |
- // on either the UI or the network thread so that we can avoid |
- // jumping to the main thread here. |
- desktop_environment_ = DesktopEnvironment::Create(host_context_.get()); |
- |
- FinishConnectNetworkThread(uid, auth_token, auth_service); |
-} |
- |
-void HostNPScriptObject::FinishConnectNetworkThread( |
+void HostNPScriptObject::FinishConnect( |
const std::string& uid, |
const std::string& auth_token, |
const std::string& auth_service) { |
if (!host_context_->network_task_runner()->BelongsToCurrentThread()) { |
host_context_->network_task_runner()->PostTask(FROM_HERE, base::Bind( |
- &HostNPScriptObject::FinishConnectNetworkThread, base::Unretained(this), |
+ &HostNPScriptObject::FinishConnect, base::Unretained(this), |
uid, auth_token, auth_service)); |
return; |
} |
@@ -564,12 +544,6 @@ void HostNPScriptObject::FinishConnectNetworkThread( |
return; |
} |
- // Verify that DesktopEnvironment has been created. |
- if (desktop_environment_.get() == NULL) { |
- SetState(kError); |
- return; |
- } |
- |
// Generate a key pair for the Host to use. |
// TODO(wez): Move this to the worker thread. |
host_key_pair_.Generate(); |
@@ -603,7 +577,8 @@ void HostNPScriptObject::FinishConnectNetworkThread( |
// Create the Host. |
host_ = new ChromotingHost( |
- host_context_.get(), signal_strategy_.get(), desktop_environment_.get(), |
+ host_context_.get(), signal_strategy_.get(), |
+ desktop_environment_factory_.get(), |
CreateHostSessionManager(network_settings, |
host_context_->url_request_context_getter())); |
host_->AddStatusObserver(this); |
@@ -895,7 +870,6 @@ void HostNPScriptObject::DisconnectInternal() { |
return; |
case kStarting: |
- desktop_environment_.reset(); |
SetState(kDisconnecting); |
SetState(kDisconnected); |
return; |
@@ -925,8 +899,6 @@ void HostNPScriptObject::DisconnectInternal() { |
void HostNPScriptObject::OnShutdownFinished() { |
DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); |
- |
- desktop_environment_.reset(); |
} |
void HostNPScriptObject::OnPolicyUpdate( |