Index: remoting/host/client_session.cc |
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc |
index 540277ecc6d041fa2262597be002c0ee79d5833c..578fe7569a8f71f550992574758a5759de48a204 100644 |
--- a/remoting/host/client_session.cc |
+++ b/remoting/host/client_session.cc |
@@ -25,12 +25,15 @@ ClientSession::ClientSession( |
: event_handler_(event_handler), |
connection_(connection.Pass()), |
client_jid_(connection_->session()->jid()), |
- is_authenticated_(false), |
host_clipboard_stub_(host_clipboard_stub), |
host_input_stub_(host_input_stub), |
input_tracker_(host_input_stub_), |
remote_input_filter_(&input_tracker_), |
mouse_input_filter_(&remote_input_filter_), |
+ disable_input_filter_(&mouse_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()), |
capturer_(capturer), |
max_duration_(max_duration) { |
@@ -43,6 +46,10 @@ ClientSession::ClientSession( |
connection_->set_host_stub(this); |
connection_->set_input_stub(this); |
clipboard_echo_filter_.set_host_stub(host_clipboard_stub_); |
+ |
+ // |auth_*_filter_|'s states reflect whether the session is authenticated. |
+ auth_input_filter_.set_enabled(false); |
+ auth_clipboard_filter_.set_enabled(false); |
} |
ClientSession::~ClientSession() { |
@@ -86,9 +93,8 @@ void ClientSession::OnConnectionAuthenticated( |
DCHECK(CalledOnValidThread()); |
DCHECK_EQ(connection_.get(), connection); |
- is_authenticated_ = true; |
- auth_input_filter_.set_input_stub(&disable_input_filter_); |
- auth_clipboard_filter_.set_clipboard_stub(&disable_clipboard_filter_); |
+ auth_input_filter_.set_enabled(true); |
+ auth_clipboard_filter_.set_enabled(true); |
clipboard_echo_filter_.set_client_stub(connection_->client_stub()); |
@@ -115,10 +121,15 @@ void ClientSession::OnConnectionClosed( |
protocol::ErrorCode error) { |
DCHECK(CalledOnValidThread()); |
DCHECK_EQ(connection_.get(), connection); |
- if (!is_authenticated_) |
+ |
+ if (!auth_input_filter_.enabled()) |
event_handler_->OnSessionAuthenticationFailed(this); |
- auth_input_filter_.set_input_stub(NULL); |
- auth_clipboard_filter_.set_clipboard_stub(NULL); |
+ |
+ // 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(); |
@@ -161,15 +172,11 @@ void ClientSession::LocalMouseMoved(const SkIPoint& mouse_pos) { |
void ClientSession::SetDisableInputs(bool disable_inputs) { |
DCHECK(CalledOnValidThread()); |
- if (disable_inputs) { |
- disable_input_filter_.set_input_stub(NULL); |
- disable_clipboard_filter_.set_clipboard_stub(NULL); |
+ if (disable_inputs) |
input_tracker_.ReleaseAll(); |
- } else { |
- disable_input_filter_.set_input_stub(&mouse_input_filter_); |
- disable_clipboard_filter_.set_clipboard_stub( |
- clipboard_echo_filter_.host_filter()); |
- } |
+ |
+ disable_input_filter_.set_enabled(!disable_inputs); |
+ disable_clipboard_filter_.set_enabled(!disable_inputs); |
} |
scoped_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() { |