OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/host/client_session.h" | 5 #include "remoting/host/client_session.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
10 #include "remoting/base/capabilities.h" | 10 #include "remoting/base/capabilities.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, | 44 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, |
45 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | 45 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
46 scoped_ptr<protocol::ConnectionToClient> connection, | 46 scoped_ptr<protocol::ConnectionToClient> connection, |
47 DesktopEnvironmentFactory* desktop_environment_factory, | 47 DesktopEnvironmentFactory* desktop_environment_factory, |
48 const base::TimeDelta& max_duration, | 48 const base::TimeDelta& max_duration, |
49 scoped_refptr<protocol::PairingRegistry> pairing_registry, | 49 scoped_refptr<protocol::PairingRegistry> pairing_registry, |
50 const std::vector<HostExtension*>& extensions) | 50 const std::vector<HostExtension*>& extensions) |
51 : event_handler_(event_handler), | 51 : event_handler_(event_handler), |
52 connection_(connection.Pass()), | 52 connection_(connection.Pass()), |
53 client_jid_(connection_->session()->jid()), | 53 client_jid_(connection_->session()->jid()), |
54 control_factory_(this), | |
55 desktop_environment_factory_(desktop_environment_factory), | 54 desktop_environment_factory_(desktop_environment_factory), |
56 input_tracker_(&host_input_filter_), | 55 input_tracker_(&host_input_filter_), |
57 remote_input_filter_(&input_tracker_), | 56 remote_input_filter_(&input_tracker_), |
58 mouse_clamping_filter_(&remote_input_filter_), | 57 mouse_clamping_filter_(&remote_input_filter_), |
59 disable_input_filter_(mouse_clamping_filter_.input_filter()), | 58 disable_input_filter_(mouse_clamping_filter_.input_filter()), |
60 disable_clipboard_filter_(clipboard_echo_filter_.host_filter()), | 59 disable_clipboard_filter_(clipboard_echo_filter_.host_filter()), |
61 auth_input_filter_(&disable_input_filter_), | 60 auth_input_filter_(&disable_input_filter_), |
62 auth_clipboard_filter_(&disable_clipboard_filter_), | 61 auth_clipboard_filter_(&disable_clipboard_filter_), |
63 client_clipboard_factory_(clipboard_echo_filter_.client_filter()), | 62 client_clipboard_factory_(clipboard_echo_filter_.client_filter()), |
64 max_duration_(max_duration), | 63 max_duration_(max_duration), |
65 audio_task_runner_(audio_task_runner), | 64 audio_task_runner_(audio_task_runner), |
66 input_task_runner_(input_task_runner), | 65 input_task_runner_(input_task_runner), |
67 video_capture_task_runner_(video_capture_task_runner), | 66 video_capture_task_runner_(video_capture_task_runner), |
68 video_encode_task_runner_(video_encode_task_runner), | 67 video_encode_task_runner_(video_encode_task_runner), |
69 network_task_runner_(network_task_runner), | 68 network_task_runner_(network_task_runner), |
70 ui_task_runner_(ui_task_runner), | 69 ui_task_runner_(ui_task_runner), |
71 pairing_registry_(pairing_registry), | 70 pairing_registry_(pairing_registry), |
72 pause_video_(false), | 71 pause_video_(false), |
73 lossless_video_encode_(false), | 72 lossless_video_encode_(false), |
74 lossless_video_color_(false) { | 73 lossless_video_color_(false), |
| 74 weak_factory_(this) { |
75 connection_->SetEventHandler(this); | 75 connection_->SetEventHandler(this); |
76 | 76 |
77 // TODO(sergeyu): Currently ConnectionToClient expects stubs to be | 77 // TODO(sergeyu): Currently ConnectionToClient expects stubs to be |
78 // set before channels are connected. Make it possible to set stubs | 78 // set before channels are connected. Make it possible to set stubs |
79 // later and set them only when connection is authenticated. | 79 // later and set them only when connection is authenticated. |
80 connection_->set_clipboard_stub(&auth_clipboard_filter_); | 80 connection_->set_clipboard_stub(&auth_clipboard_filter_); |
81 connection_->set_host_stub(this); | 81 connection_->set_host_stub(this); |
82 connection_->set_input_stub(&auth_input_filter_); | 82 connection_->set_input_stub(&auth_input_filter_); |
83 | 83 |
84 // |auth_*_filter_|'s states reflect whether the session is authenticated. | 84 // |auth_*_filter_|'s states reflect whether the session is authenticated. |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 | 274 |
275 // Disconnect the session if the connection was rejected by the host. | 275 // Disconnect the session if the connection was rejected by the host. |
276 if (!event_handler_->OnSessionAuthenticated(this)) { | 276 if (!event_handler_->OnSessionAuthenticated(this)) { |
277 DisconnectSession(); | 277 DisconnectSession(); |
278 return; | 278 return; |
279 } | 279 } |
280 | 280 |
281 // Create the desktop environment. Drop the connection if it could not be | 281 // Create the desktop environment. Drop the connection if it could not be |
282 // created for any reason (for instance the curtain could not initialize). | 282 // created for any reason (for instance the curtain could not initialize). |
283 desktop_environment_ = | 283 desktop_environment_ = |
284 desktop_environment_factory_->Create(control_factory_.GetWeakPtr()); | 284 desktop_environment_factory_->Create(weak_factory_.GetWeakPtr()); |
285 if (!desktop_environment_) { | 285 if (!desktop_environment_) { |
286 DisconnectSession(); | 286 DisconnectSession(); |
287 return; | 287 return; |
288 } | 288 } |
289 | 289 |
290 // Collate the set of capabilities to offer the client, if it supports them. | 290 // Collate the set of capabilities to offer the client, if it supports them. |
291 if (connection_->session()->config().SupportsCapabilities()) { | 291 if (connection_->session()->config().SupportsCapabilities()) { |
292 host_capabilities_ = desktop_environment_->GetCapabilities(); | 292 host_capabilities_ = desktop_environment_->GetCapabilities(); |
293 if (!host_capabilities_.empty()) { | 293 if (!host_capabilities_.empty()) { |
294 host_capabilities_.append(" "); | 294 host_capabilities_.append(" "); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 event_handler_->OnSessionChannelsConnected(this); | 355 event_handler_->OnSessionChannelsConnected(this); |
356 } | 356 } |
357 | 357 |
358 void ClientSession::OnConnectionClosed( | 358 void ClientSession::OnConnectionClosed( |
359 protocol::ConnectionToClient* connection, | 359 protocol::ConnectionToClient* connection, |
360 protocol::ErrorCode error) { | 360 protocol::ErrorCode error) { |
361 DCHECK(CalledOnValidThread()); | 361 DCHECK(CalledOnValidThread()); |
362 DCHECK_EQ(connection_.get(), connection); | 362 DCHECK_EQ(connection_.get(), connection); |
363 | 363 |
364 // Ignore any further callbacks. | 364 // Ignore any further callbacks. |
365 control_factory_.InvalidateWeakPtrs(); | 365 weak_factory_.InvalidateWeakPtrs(); |
366 | 366 |
367 // If the client never authenticated then the session failed. | 367 // If the client never authenticated then the session failed. |
368 if (!auth_input_filter_.enabled()) | 368 if (!auth_input_filter_.enabled()) |
369 event_handler_->OnSessionAuthenticationFailed(this); | 369 event_handler_->OnSessionAuthenticationFailed(this); |
370 | 370 |
371 // Block any further input events from the client. | 371 // Block any further input events from the client. |
372 // TODO(wez): Fix ChromotingHost::OnSessionClosed not to check our | 372 // TODO(wez): Fix ChromotingHost::OnSessionClosed not to check our |
373 // is_authenticated(), so that we can disable |auth_*_filter_| here. | 373 // is_authenticated(), so that we can disable |auth_*_filter_| here. |
374 disable_input_filter_.set_enabled(false); | 374 disable_input_filter_.set_enabled(false); |
375 disable_clipboard_filter_.set_enabled(false); | 375 disable_clipboard_filter_.set_enabled(false); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 return scoped_ptr<AudioEncoder>(new AudioEncoderVerbatim()); | 529 return scoped_ptr<AudioEncoder>(new AudioEncoderVerbatim()); |
530 } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) { | 530 } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) { |
531 return scoped_ptr<AudioEncoder>(new AudioEncoderOpus()); | 531 return scoped_ptr<AudioEncoder>(new AudioEncoderOpus()); |
532 } | 532 } |
533 | 533 |
534 NOTREACHED(); | 534 NOTREACHED(); |
535 return scoped_ptr<AudioEncoder>(); | 535 return scoped_ptr<AudioEncoder>(); |
536 } | 536 } |
537 | 537 |
538 } // namespace remoting | 538 } // namespace remoting |
OLD | NEW |