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

Unified Diff: remoting/host/client_session.cc

Issue 902613004: Fix ConnectionToClient to connect stubs only after authentication. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@audio_pump
Patch Set: Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/client_session.h ('k') | remoting/host/client_session_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
« no previous file with comments | « remoting/host/client_session.h ('k') | remoting/host/client_session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698