Index: remoting/host/client_session.cc |
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc |
index aa3b43b878444ac98994fd288e5c049f2c9268af..ef6f5a6a4c7bb03645fc4a2197f389f85a294d5d 100644 |
--- a/remoting/host/client_session.cc |
+++ b/remoting/host/client_session.cc |
@@ -94,8 +94,6 @@ ClientSession::ClientSession( |
mouse_clamping_filter_(&remote_input_filter_), |
disable_input_filter_(mouse_clamping_filter_.input_filter()), |
disable_clipboard_filter_(clipboard_echo_filter_.host_filter()), |
- auth_input_filter_(&disable_input_filter_), |
- auth_clipboard_filter_(&disable_clipboard_filter_), |
client_clipboard_factory_(clipboard_echo_filter_.client_filter()), |
max_duration_(max_duration), |
audio_task_runner_(audio_task_runner), |
@@ -105,23 +103,13 @@ ClientSession::ClientSession( |
network_task_runner_(network_task_runner), |
ui_task_runner_(ui_task_runner), |
pairing_registry_(pairing_registry), |
+ is_authenticated_(false), |
pause_video_(false), |
lossless_video_encode_(false), |
lossless_video_color_(false), |
weak_factory_(this) { |
connection_->SetEventHandler(this); |
- // TODO(sergeyu): Currently ConnectionToClient expects stubs to be |
- // set before channels are connected. Make it possible to set stubs |
- // later and set them only when connection is authenticated. |
- connection_->set_clipboard_stub(&auth_clipboard_filter_); |
- connection_->set_host_stub(this); |
- connection_->set_input_stub(&auth_input_filter_); |
- |
- // |auth_*_filter_|'s states reflect whether the session is authenticated. |
- auth_input_filter_.set_enabled(false); |
- auth_clipboard_filter_.set_enabled(false); |
- |
// Create a manager for the configured extensions, if any. |
extension_manager_.reset(new HostExtensionSessionManager(extensions, this)); |
@@ -289,11 +277,7 @@ void ClientSession::OnConnectionAuthenticated( |
DCHECK(!screen_controls_); |
DCHECK(!video_frame_pump_); |
- auth_input_filter_.set_enabled(true); |
- auth_clipboard_filter_.set_enabled(true); |
- |
- clipboard_echo_filter_.set_client_stub(connection_->client_stub()); |
- mouse_clamping_filter_.set_video_stub(connection_->video_stub()); |
+ is_authenticated_ = true; |
if (max_duration_ > base::TimeDelta()) { |
// TODO(simonmorris): Let Disconnect() tell the client that the |
@@ -317,6 +301,12 @@ void ClientSession::OnConnectionAuthenticated( |
return; |
} |
+ // Connect host stub. |
+ connection_->set_host_stub(this); |
+ |
+ // Connect video stub. |
+ mouse_clamping_filter_.set_video_stub(connection_->video_stub()); |
+ |
// Collate the set of capabilities to offer the client, if it supports them. |
host_capabilities_ = desktop_environment_->GetCapabilities(); |
if (!host_capabilities_.empty()) |
@@ -329,9 +319,14 @@ void ClientSession::OnConnectionAuthenticated( |
// Create the event executor. |
input_injector_ = desktop_environment_->CreateInputInjector(); |
- // Connect the host clipboard and input stubs. |
+ // Connect the host input stubs. |
+ connection_->set_input_stub(&disable_input_filter_); |
host_input_filter_.set_input_stub(input_injector_.get()); |
+ |
+ // Connect the clipboard stubs. |
+ connection_->set_clipboard_stub(&disable_clipboard_filter_); |
clipboard_echo_filter_.set_host_stub(input_injector_.get()); |
+ clipboard_echo_filter_.set_client_stub(connection_->client_stub()); |
// Create a GnubbyAuthHandler to proxy gnubbyd messages. |
gnubby_auth_handler_ = desktop_environment_->CreateGnubbyAuthHandler( |
@@ -345,7 +340,6 @@ void ClientSession::OnConnectionChannelsConnected( |
// Negotiate capabilities with the client. |
VLOG(1) << "Host capabilities: " << host_capabilities_; |
- |
protocol::Capabilities capabilities; |
capabilities.set_capabilities(host_capabilities_); |
connection_->client_stub()->SetCapabilities(capabilities); |
@@ -380,15 +374,9 @@ void ClientSession::OnConnectionClosed( |
weak_factory_.InvalidateWeakPtrs(); |
// If the client never authenticated then the session failed. |
- if (!auth_input_filter_.enabled()) |
+ if (!is_authenticated_) |
event_handler_->OnSessionAuthenticationFailed(this); |
- // Block any further input events from the client. |
- // TODO(wez): Fix ChromotingHost::OnSessionClosed not to check our |
- // is_authenticated(), so that we can disable |auth_*_filter_| here. |
- disable_input_filter_.set_enabled(false); |
- disable_clipboard_filter_.set_enabled(false); |
- |
// Ensure that any pressed keys or buttons are released. |
input_tracker_.ReleaseAll(); |