| 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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 << audio_control.enable() << ")"; | 169 << audio_control.enable() << ")"; |
| 170 if (audio_scheduler_.get()) | 170 if (audio_scheduler_.get()) |
| 171 audio_scheduler_->Pause(!audio_control.enable()); | 171 audio_scheduler_->Pause(!audio_control.enable()); |
| 172 } | 172 } |
| 173 } | 173 } |
| 174 | 174 |
| 175 void ClientSession::SetCapabilities( | 175 void ClientSession::SetCapabilities( |
| 176 const protocol::Capabilities& capabilities) { | 176 const protocol::Capabilities& capabilities) { |
| 177 DCHECK(CalledOnValidThread()); | 177 DCHECK(CalledOnValidThread()); |
| 178 | 178 |
| 179 // The client should not send protocol::Capabilities if it is not supported by | |
| 180 // the config channel. | |
| 181 if (!connection_->session()->config().SupportsCapabilities()) { | |
| 182 LOG(ERROR) << "Unexpected protocol::Capabilities has been received."; | |
| 183 return; | |
| 184 } | |
| 185 | |
| 186 // Ignore all the messages but the 1st one. | 179 // Ignore all the messages but the 1st one. |
| 187 if (client_capabilities_) { | 180 if (client_capabilities_) { |
| 188 LOG(WARNING) << "protocol::Capabilities has been received already."; | 181 LOG(WARNING) << "protocol::Capabilities has been received already."; |
| 189 return; | 182 return; |
| 190 } | 183 } |
| 191 | 184 |
| 192 // Compute the set of capabilities supported by both client and host. | 185 // Compute the set of capabilities supported by both client and host. |
| 193 client_capabilities_ = make_scoped_ptr(new std::string()); | 186 client_capabilities_ = make_scoped_ptr(new std::string()); |
| 194 if (capabilities.has_capabilities()) | 187 if (capabilities.has_capabilities()) |
| 195 *client_capabilities_ = capabilities.capabilities(); | 188 *client_capabilities_ = capabilities.capabilities(); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 // Create the desktop environment. Drop the connection if it could not be | 274 // Create the desktop environment. Drop the connection if it could not be |
| 282 // created for any reason (for instance the curtain could not initialize). | 275 // created for any reason (for instance the curtain could not initialize). |
| 283 desktop_environment_ = | 276 desktop_environment_ = |
| 284 desktop_environment_factory_->Create(control_factory_.GetWeakPtr()); | 277 desktop_environment_factory_->Create(control_factory_.GetWeakPtr()); |
| 285 if (!desktop_environment_) { | 278 if (!desktop_environment_) { |
| 286 DisconnectSession(); | 279 DisconnectSession(); |
| 287 return; | 280 return; |
| 288 } | 281 } |
| 289 | 282 |
| 290 // Collate the set of capabilities to offer the client, if it supports them. | 283 // Collate the set of capabilities to offer the client, if it supports them. |
| 291 if (connection_->session()->config().SupportsCapabilities()) { | 284 host_capabilities_ = desktop_environment_->GetCapabilities(); |
| 292 host_capabilities_ = desktop_environment_->GetCapabilities(); | 285 if (!host_capabilities_.empty()) |
| 293 if (!host_capabilities_.empty()) { | 286 host_capabilities_.append(" "); |
| 294 host_capabilities_.append(" "); | 287 host_capabilities_.append(extension_manager_->GetCapabilities()); |
| 295 } | |
| 296 host_capabilities_.append(extension_manager_->GetCapabilities()); | |
| 297 } else { | |
| 298 VLOG(1) << "The client does not support any capabilities."; | |
| 299 desktop_environment_->SetCapabilities(std::string()); | |
| 300 } | |
| 301 | 288 |
| 302 // Create the object that controls the screen resolution. | 289 // Create the object that controls the screen resolution. |
| 303 screen_controls_ = desktop_environment_->CreateScreenControls(); | 290 screen_controls_ = desktop_environment_->CreateScreenControls(); |
| 304 | 291 |
| 305 // Create the event executor. | 292 // Create the event executor. |
| 306 input_injector_ = desktop_environment_->CreateInputInjector(); | 293 input_injector_ = desktop_environment_->CreateInputInjector(); |
| 307 | 294 |
| 308 // Connect the host clipboard and input stubs. | 295 // Connect the host clipboard and input stubs. |
| 309 host_input_filter_.set_input_stub(input_injector_.get()); | 296 host_input_filter_.set_input_stub(input_injector_.get()); |
| 310 clipboard_echo_filter_.set_host_stub(input_injector_.get()); | 297 clipboard_echo_filter_.set_host_stub(input_injector_.get()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 325 gnubby_auth_handler_ = desktop_environment_->CreateGnubbyAuthHandler( | 312 gnubby_auth_handler_ = desktop_environment_->CreateGnubbyAuthHandler( |
| 326 connection_->client_stub()); | 313 connection_->client_stub()); |
| 327 } | 314 } |
| 328 | 315 |
| 329 void ClientSession::OnConnectionChannelsConnected( | 316 void ClientSession::OnConnectionChannelsConnected( |
| 330 protocol::ConnectionToClient* connection) { | 317 protocol::ConnectionToClient* connection) { |
| 331 DCHECK(CalledOnValidThread()); | 318 DCHECK(CalledOnValidThread()); |
| 332 DCHECK_EQ(connection_.get(), connection); | 319 DCHECK_EQ(connection_.get(), connection); |
| 333 | 320 |
| 334 // Negotiate capabilities with the client. | 321 // Negotiate capabilities with the client. |
| 335 if (connection_->session()->config().SupportsCapabilities()) { | 322 VLOG(1) << "Host capabilities: " << host_capabilities_; |
| 336 VLOG(1) << "Host capabilities: " << host_capabilities_; | |
| 337 | 323 |
| 338 protocol::Capabilities capabilities; | 324 protocol::Capabilities capabilities; |
| 339 capabilities.set_capabilities(host_capabilities_); | 325 capabilities.set_capabilities(host_capabilities_); |
| 340 connection_->client_stub()->SetCapabilities(capabilities); | 326 connection_->client_stub()->SetCapabilities(capabilities); |
| 341 } | |
| 342 | 327 |
| 343 // Start the event executor. | 328 // Start the event executor. |
| 344 input_injector_->Start(CreateClipboardProxy()); | 329 input_injector_->Start(CreateClipboardProxy()); |
| 345 SetDisableInputs(false); | 330 SetDisableInputs(false); |
| 346 | 331 |
| 347 // Start recording video. | 332 // Start recording video. |
| 348 ResetVideoPipeline(); | 333 ResetVideoPipeline(); |
| 349 | 334 |
| 350 // Start recording audio. | 335 // Start recording audio. |
| 351 if (connection_->session()->config().is_audio_enabled()) | 336 if (connection_->session()->config().is_audio_enabled()) |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 return scoped_ptr<AudioEncoder>(new AudioEncoderVerbatim()); | 514 return scoped_ptr<AudioEncoder>(new AudioEncoderVerbatim()); |
| 530 } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) { | 515 } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) { |
| 531 return scoped_ptr<AudioEncoder>(new AudioEncoderOpus()); | 516 return scoped_ptr<AudioEncoder>(new AudioEncoderOpus()); |
| 532 } | 517 } |
| 533 | 518 |
| 534 NOTREACHED(); | 519 NOTREACHED(); |
| 535 return scoped_ptr<AudioEncoder>(); | 520 return scoped_ptr<AudioEncoder>(); |
| 536 } | 521 } |
| 537 | 522 |
| 538 } // namespace remoting | 523 } // namespace remoting |
| OLD | NEW |