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 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 if (audio_capturer) { | 286 if (audio_capturer) { |
287 audio_stream_ = connection_->StartAudioStream(std::move(audio_capturer)); | 287 audio_stream_ = connection_->StartAudioStream(std::move(audio_capturer)); |
288 } | 288 } |
289 | 289 |
290 video_stream_->SetObserver(this); | 290 video_stream_->SetObserver(this); |
291 | 291 |
292 // Apply video-control parameters to the new stream. | 292 // Apply video-control parameters to the new stream. |
293 video_stream_->SetLosslessEncode(lossless_video_encode_); | 293 video_stream_->SetLosslessEncode(lossless_video_encode_); |
294 video_stream_->SetLosslessColor(lossless_video_color_); | 294 video_stream_->SetLosslessColor(lossless_video_color_); |
295 | 295 |
296 // Pause capturing if necessary. | 296 // Pause video stream first. It's unpaused OnConnectionChannelsConnected() |
297 video_stream_->Pause(pause_video_); | 297 // after all channels are connected. |
| 298 video_stream_->Pause(true); |
298 } | 299 } |
299 | 300 |
300 void ClientSession::OnConnectionChannelsConnected() { | 301 void ClientSession::OnConnectionChannelsConnected() { |
301 DCHECK(CalledOnValidThread()); | 302 DCHECK(CalledOnValidThread()); |
302 | 303 |
303 DCHECK(!channels_connected_); | 304 DCHECK(!channels_connected_); |
304 channels_connected_ = true; | 305 channels_connected_ = true; |
305 | 306 |
306 // Negotiate capabilities with the client. | 307 // Negotiate capabilities with the client. |
307 VLOG(1) << "Host capabilities: " << host_capabilities_; | 308 VLOG(1) << "Host capabilities: " << host_capabilities_; |
308 protocol::Capabilities capabilities; | 309 protocol::Capabilities capabilities; |
309 capabilities.set_capabilities(host_capabilities_); | 310 capabilities.set_capabilities(host_capabilities_); |
310 connection_->client_stub()->SetCapabilities(capabilities); | 311 connection_->client_stub()->SetCapabilities(capabilities); |
311 | 312 |
312 // Start the event executor. | 313 // Start the event executor. |
313 input_injector_->Start(CreateClipboardProxy()); | 314 input_injector_->Start(CreateClipboardProxy()); |
314 SetDisableInputs(false); | 315 SetDisableInputs(false); |
315 | 316 |
316 // Create MouseShapePump to send mouse cursor shape. | 317 // Create MouseShapePump to send mouse cursor shape. |
317 mouse_shape_pump_.reset( | 318 mouse_shape_pump_.reset( |
318 new MouseShapePump(desktop_environment_->CreateMouseCursorMonitor(), | 319 new MouseShapePump(desktop_environment_->CreateMouseCursorMonitor(), |
319 connection_->client_stub())); | 320 connection_->client_stub())); |
320 | 321 |
321 if (pending_video_layout_message_) { | 322 if (pending_video_layout_message_) { |
322 connection_->client_stub()->SetVideoLayout(*pending_video_layout_message_); | 323 connection_->client_stub()->SetVideoLayout(*pending_video_layout_message_); |
323 pending_video_layout_message_.reset(); | 324 pending_video_layout_message_.reset(); |
324 } | 325 } |
325 | 326 |
| 327 if (video_stream_) |
| 328 video_stream_->Pause(pause_video_); |
| 329 |
326 // Notify the event handler that all our channels are now connected. | 330 // Notify the event handler that all our channels are now connected. |
327 event_handler_->OnSessionChannelsConnected(this); | 331 event_handler_->OnSessionChannelsConnected(this); |
328 } | 332 } |
329 | 333 |
330 void ClientSession::OnConnectionClosed(protocol::ErrorCode error) { | 334 void ClientSession::OnConnectionClosed(protocol::ErrorCode error) { |
331 DCHECK(CalledOnValidThread()); | 335 DCHECK(CalledOnValidThread()); |
332 | 336 |
333 HOST_LOG << "Client disconnected: " << client_jid_ << "; error = " << error; | 337 HOST_LOG << "Client disconnected: " << client_jid_ << "; error = " << error; |
334 | 338 |
335 // Ignore any further callbacks. | 339 // Ignore any further callbacks. |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 DCHECK(CalledOnValidThread()); | 401 DCHECK(CalledOnValidThread()); |
398 DCHECK(desktop_environment_); | 402 DCHECK(desktop_environment_); |
399 return desktop_environment_->GetDesktopSessionId(); | 403 return desktop_environment_->GetDesktopSessionId(); |
400 } | 404 } |
401 | 405 |
402 ClientSessionControl* ClientSession::session_control() { | 406 ClientSessionControl* ClientSession::session_control() { |
403 DCHECK(CalledOnValidThread()); | 407 DCHECK(CalledOnValidThread()); |
404 return this; | 408 return this; |
405 } | 409 } |
406 | 410 |
| 411 void ClientSession::SetEventTimestampsSourceForTests( |
| 412 scoped_refptr<protocol::InputEventTimestampsSource> |
| 413 event_timestamp_source) { |
| 414 DCHECK(CalledOnValidThread()); |
| 415 video_stream_->SetEventTimestampsSource(event_timestamp_source); |
| 416 } |
| 417 |
407 std::unique_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() { | 418 std::unique_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() { |
408 DCHECK(CalledOnValidThread()); | 419 DCHECK(CalledOnValidThread()); |
409 | |
410 return base::MakeUnique<protocol::ClipboardThreadProxy>( | 420 return base::MakeUnique<protocol::ClipboardThreadProxy>( |
411 client_clipboard_factory_.GetWeakPtr(), | 421 client_clipboard_factory_.GetWeakPtr(), |
412 base::ThreadTaskRunnerHandle::Get()); | 422 base::ThreadTaskRunnerHandle::Get()); |
413 } | 423 } |
414 | 424 |
415 void ClientSession::OnVideoSizeChanged(protocol::VideoStream* video_stream, | 425 void ClientSession::OnVideoSizeChanged(protocol::VideoStream* video_stream, |
416 const webrtc::DesktopSize& size, | 426 const webrtc::DesktopSize& size, |
417 const webrtc::DesktopVector& dpi) { | 427 const webrtc::DesktopVector& dpi) { |
418 DCHECK(CalledOnValidThread()); | 428 DCHECK(CalledOnValidThread()); |
419 | 429 |
(...skipping 29 matching lines...) Expand all Loading... |
449 connection_->client_stub()->SetVideoLayout(layout); | 459 connection_->client_stub()->SetVideoLayout(layout); |
450 } else { | 460 } else { |
451 pending_video_layout_message_.reset(new protocol::VideoLayout(layout)); | 461 pending_video_layout_message_.reset(new protocol::VideoLayout(layout)); |
452 } | 462 } |
453 break; | 463 break; |
454 } | 464 } |
455 } | 465 } |
456 } | 466 } |
457 | 467 |
458 } // namespace remoting | 468 } // namespace remoting |
OLD | NEW |