| 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/client/chromoting_client.h" | 5 #include "remoting/client/chromoting_client.h" |
| 6 | 6 |
| 7 #include <utility> |
| 8 |
| 7 #include "remoting/base/capabilities.h" | 9 #include "remoting/base/capabilities.h" |
| 8 #include "remoting/client/audio_decode_scheduler.h" | 10 #include "remoting/client/audio_decode_scheduler.h" |
| 9 #include "remoting/client/audio_player.h" | 11 #include "remoting/client/audio_player.h" |
| 10 #include "remoting/client/client_context.h" | 12 #include "remoting/client/client_context.h" |
| 11 #include "remoting/client/client_user_interface.h" | 13 #include "remoting/client/client_user_interface.h" |
| 12 #include "remoting/client/video_renderer.h" | 14 #include "remoting/client/video_renderer.h" |
| 13 #include "remoting/protocol/authenticator.h" | 15 #include "remoting/protocol/authenticator.h" |
| 14 #include "remoting/protocol/connection_to_host.h" | 16 #include "remoting/protocol/connection_to_host.h" |
| 15 #include "remoting/protocol/host_stub.h" | 17 #include "remoting/protocol/host_stub.h" |
| 16 #include "remoting/protocol/ice_connection_to_host.h" | 18 #include "remoting/protocol/ice_connection_to_host.h" |
| 17 #include "remoting/protocol/ice_transport.h" | 19 #include "remoting/protocol/ice_transport.h" |
| 18 #include "remoting/protocol/jingle_session_manager.h" | 20 #include "remoting/protocol/jingle_session_manager.h" |
| 19 #include "remoting/protocol/session_config.h" | 21 #include "remoting/protocol/session_config.h" |
| 20 #include "remoting/protocol/transport_context.h" | 22 #include "remoting/protocol/transport_context.h" |
| 21 | 23 |
| 22 namespace remoting { | 24 namespace remoting { |
| 23 | 25 |
| 24 ChromotingClient::ChromotingClient(ClientContext* client_context, | 26 ChromotingClient::ChromotingClient(ClientContext* client_context, |
| 25 ClientUserInterface* user_interface, | 27 ClientUserInterface* user_interface, |
| 26 VideoRenderer* video_renderer, | 28 VideoRenderer* video_renderer, |
| 27 scoped_ptr<AudioPlayer> audio_player) | 29 scoped_ptr<AudioPlayer> audio_player) |
| 28 : user_interface_(user_interface), | 30 : user_interface_(user_interface), |
| 29 video_renderer_(video_renderer), | 31 video_renderer_(video_renderer), |
| 30 connection_(new protocol::IceConnectionToHost()) { | 32 connection_(new protocol::IceConnectionToHost()) { |
| 31 DCHECK(client_context->main_task_runner()->BelongsToCurrentThread()); | 33 DCHECK(client_context->main_task_runner()->BelongsToCurrentThread()); |
| 32 if (audio_player) { | 34 if (audio_player) { |
| 33 audio_decode_scheduler_.reset(new AudioDecodeScheduler( | 35 audio_decode_scheduler_.reset(new AudioDecodeScheduler( |
| 34 client_context->main_task_runner(), | 36 client_context->main_task_runner(), |
| 35 client_context->audio_decode_task_runner(), audio_player.Pass())); | 37 client_context->audio_decode_task_runner(), std::move(audio_player))); |
| 36 } | 38 } |
| 37 } | 39 } |
| 38 | 40 |
| 39 ChromotingClient::~ChromotingClient() { | 41 ChromotingClient::~ChromotingClient() { |
| 40 if (signal_strategy_) | 42 if (signal_strategy_) |
| 41 signal_strategy_->RemoveListener(this); | 43 signal_strategy_->RemoveListener(this); |
| 42 } | 44 } |
| 43 | 45 |
| 46 void ChromotingClient::set_protocol_config( |
| 47 scoped_ptr<protocol::CandidateSessionConfig> config) { |
| 48 protocol_config_ = std::move(config); |
| 49 } |
| 50 |
| 44 void ChromotingClient::SetConnectionToHostForTests( | 51 void ChromotingClient::SetConnectionToHostForTests( |
| 45 scoped_ptr<protocol::ConnectionToHost> connection_to_host) { | 52 scoped_ptr<protocol::ConnectionToHost> connection_to_host) { |
| 46 connection_ = connection_to_host.Pass(); | 53 connection_ = std::move(connection_to_host); |
| 47 } | 54 } |
| 48 | 55 |
| 49 void ChromotingClient::Start( | 56 void ChromotingClient::Start( |
| 50 SignalStrategy* signal_strategy, | 57 SignalStrategy* signal_strategy, |
| 51 scoped_ptr<protocol::Authenticator> authenticator, | 58 scoped_ptr<protocol::Authenticator> authenticator, |
| 52 scoped_refptr<protocol::TransportContext> transport_context, | 59 scoped_refptr<protocol::TransportContext> transport_context, |
| 53 const std::string& host_jid, | 60 const std::string& host_jid, |
| 54 const std::string& capabilities) { | 61 const std::string& capabilities) { |
| 55 DCHECK(thread_checker_.CalledOnValidThread()); | 62 DCHECK(thread_checker_.CalledOnValidThread()); |
| 56 DCHECK(!session_manager_); // Start must be called more than once. | 63 DCHECK(!session_manager_); // Start must be called more than once. |
| 57 | 64 |
| 58 host_jid_ = host_jid; | 65 host_jid_ = host_jid; |
| 59 local_capabilities_ = capabilities; | 66 local_capabilities_ = capabilities; |
| 60 | 67 |
| 61 connection_->set_client_stub(this); | 68 connection_->set_client_stub(this); |
| 62 connection_->set_clipboard_stub(this); | 69 connection_->set_clipboard_stub(this); |
| 63 connection_->set_video_stub(video_renderer_->GetVideoStub()); | 70 connection_->set_video_stub(video_renderer_->GetVideoStub()); |
| 64 connection_->set_audio_stub(audio_decode_scheduler_.get()); | 71 connection_->set_audio_stub(audio_decode_scheduler_.get()); |
| 65 | 72 |
| 66 session_manager_.reset(new protocol::JingleSessionManager( | 73 session_manager_.reset(new protocol::JingleSessionManager( |
| 67 make_scoped_ptr(new protocol::IceTransportFactory(transport_context)), | 74 make_scoped_ptr(new protocol::IceTransportFactory(transport_context)), |
| 68 signal_strategy)); | 75 signal_strategy)); |
| 69 | 76 |
| 70 if (!protocol_config_) | 77 if (!protocol_config_) |
| 71 protocol_config_ = protocol::CandidateSessionConfig::CreateDefault(); | 78 protocol_config_ = protocol::CandidateSessionConfig::CreateDefault(); |
| 72 if (!audio_decode_scheduler_) | 79 if (!audio_decode_scheduler_) |
| 73 protocol_config_->DisableAudioChannel(); | 80 protocol_config_->DisableAudioChannel(); |
| 74 session_manager_->set_protocol_config(protocol_config_.Pass()); | 81 session_manager_->set_protocol_config(std::move(protocol_config_)); |
| 75 | 82 |
| 76 authenticator_ = authenticator.Pass(); | 83 authenticator_ = std::move(authenticator); |
| 77 | 84 |
| 78 signal_strategy_ = signal_strategy; | 85 signal_strategy_ = signal_strategy; |
| 79 signal_strategy_->AddListener(this); | 86 signal_strategy_->AddListener(this); |
| 80 | 87 |
| 81 switch (signal_strategy_->GetState()) { | 88 switch (signal_strategy_->GetState()) { |
| 82 case SignalStrategy::CONNECTING: | 89 case SignalStrategy::CONNECTING: |
| 83 // Nothing to do here. Just need to wait until |signal_strategy_| becomes | 90 // Nothing to do here. Just need to wait until |signal_strategy_| becomes |
| 84 // connected. | 91 // connected. |
| 85 break; | 92 break; |
| 86 case SignalStrategy::CONNECTED: | 93 case SignalStrategy::CONNECTED: |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 } | 195 } |
| 189 | 196 |
| 190 bool ChromotingClient::OnSignalStrategyIncomingStanza( | 197 bool ChromotingClient::OnSignalStrategyIncomingStanza( |
| 191 const buzz::XmlElement* stanza) { | 198 const buzz::XmlElement* stanza) { |
| 192 return false; | 199 return false; |
| 193 } | 200 } |
| 194 | 201 |
| 195 void ChromotingClient::StartConnection() { | 202 void ChromotingClient::StartConnection() { |
| 196 DCHECK(thread_checker_.CalledOnValidThread()); | 203 DCHECK(thread_checker_.CalledOnValidThread()); |
| 197 connection_->Connect( | 204 connection_->Connect( |
| 198 session_manager_->Connect(host_jid_, authenticator_.Pass()), this); | 205 session_manager_->Connect(host_jid_, std::move(authenticator_)), this); |
| 199 } | 206 } |
| 200 | 207 |
| 201 void ChromotingClient::OnAuthenticated() { | 208 void ChromotingClient::OnAuthenticated() { |
| 202 DCHECK(thread_checker_.CalledOnValidThread()); | 209 DCHECK(thread_checker_.CalledOnValidThread()); |
| 203 | 210 |
| 204 // Initialize the decoder. | 211 // Initialize the decoder. |
| 205 video_renderer_->OnSessionConfig(connection_->config()); | 212 video_renderer_->OnSessionConfig(connection_->config()); |
| 206 if (connection_->config().is_audio_enabled()) | 213 if (connection_->config().is_audio_enabled()) |
| 207 audio_decode_scheduler_->Initialize(connection_->config()); | 214 audio_decode_scheduler_->Initialize(connection_->config()); |
| 208 } | 215 } |
| 209 | 216 |
| 210 void ChromotingClient::OnChannelsConnected() { | 217 void ChromotingClient::OnChannelsConnected() { |
| 211 DCHECK(thread_checker_.CalledOnValidThread()); | 218 DCHECK(thread_checker_.CalledOnValidThread()); |
| 212 | 219 |
| 213 // Negotiate capabilities with the host. | 220 // Negotiate capabilities with the host. |
| 214 VLOG(1) << "Client capabilities: " << local_capabilities_; | 221 VLOG(1) << "Client capabilities: " << local_capabilities_; |
| 215 | 222 |
| 216 protocol::Capabilities capabilities; | 223 protocol::Capabilities capabilities; |
| 217 capabilities.set_capabilities(local_capabilities_); | 224 capabilities.set_capabilities(local_capabilities_); |
| 218 connection_->host_stub()->SetCapabilities(capabilities); | 225 connection_->host_stub()->SetCapabilities(capabilities); |
| 219 } | 226 } |
| 220 | 227 |
| 221 } // namespace remoting | 228 } // namespace remoting |
| OLD | NEW |