Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Side by Side Diff: remoting/host/client_session.cc

Issue 1472873005: Add VideoStream interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_video_pump
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « remoting/host/client_session.h ('k') | remoting/host/client_session_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/command_line.h" 9 #include "base/command_line.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
12 #include "remoting/base/capabilities.h" 12 #include "remoting/base/capabilities.h"
13 #include "remoting/base/logging.h" 13 #include "remoting/base/logging.h"
14 #include "remoting/codec/audio_encoder.h" 14 #include "remoting/codec/audio_encoder.h"
15 #include "remoting/codec/audio_encoder_opus.h" 15 #include "remoting/codec/audio_encoder_opus.h"
16 #include "remoting/codec/audio_encoder_verbatim.h" 16 #include "remoting/codec/audio_encoder_verbatim.h"
17 #include "remoting/codec/video_encoder.h"
18 #include "remoting/codec/video_encoder_verbatim.h"
19 #include "remoting/codec/video_encoder_vpx.h"
20 #include "remoting/host/audio_capturer.h" 17 #include "remoting/host/audio_capturer.h"
21 #include "remoting/host/audio_pump.h" 18 #include "remoting/host/audio_pump.h"
22 #include "remoting/host/desktop_capturer_proxy.h" 19 #include "remoting/host/desktop_capturer_proxy.h"
23 #include "remoting/host/desktop_environment.h" 20 #include "remoting/host/desktop_environment.h"
24 #include "remoting/host/host_extension_session.h" 21 #include "remoting/host/host_extension_session.h"
25 #include "remoting/host/input_injector.h" 22 #include "remoting/host/input_injector.h"
26 #include "remoting/host/mouse_shape_pump.h" 23 #include "remoting/host/mouse_shape_pump.h"
27 #include "remoting/host/screen_controls.h" 24 #include "remoting/host/screen_controls.h"
28 #include "remoting/host/screen_resolution.h" 25 #include "remoting/host/screen_resolution.h"
29 #include "remoting/proto/control.pb.h" 26 #include "remoting/proto/control.pb.h"
(...skipping 10 matching lines...) Expand all
40 // Default DPI to assume for old clients that use notifyClientDimensions. 37 // Default DPI to assume for old clients that use notifyClientDimensions.
41 const int kDefaultDPI = 96; 38 const int kDefaultDPI = 96;
42 39
43 namespace remoting { 40 namespace remoting {
44 41
45 namespace { 42 namespace {
46 43
47 // Name of command-line flag to disable use of I444 by default. 44 // Name of command-line flag to disable use of I444 by default.
48 const char kDisableI444SwitchName[] = "disable-i444"; 45 const char kDisableI444SwitchName[] = "disable-i444";
49 46
50 scoped_ptr<VideoEncoder> CreateVideoEncoder(
51 const protocol::SessionConfig& config) {
52 const protocol::ChannelConfig& video_config = config.video_config();
53
54 if (video_config.codec == protocol::ChannelConfig::CODEC_VP8) {
55 return VideoEncoderVpx::CreateForVP8().Pass();
56 } else if (video_config.codec == protocol::ChannelConfig::CODEC_VP9) {
57 return VideoEncoderVpx::CreateForVP9().Pass();
58 } else if (video_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) {
59 return make_scoped_ptr(new VideoEncoderVerbatim());
60 }
61
62 NOTREACHED();
63 return nullptr;
64 }
65
66 scoped_ptr<AudioEncoder> CreateAudioEncoder( 47 scoped_ptr<AudioEncoder> CreateAudioEncoder(
67 const protocol::SessionConfig& config) { 48 const protocol::SessionConfig& config) {
68 const protocol::ChannelConfig& audio_config = config.audio_config(); 49 const protocol::ChannelConfig& audio_config = config.audio_config();
69 50
70 if (audio_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) { 51 if (audio_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) {
71 return make_scoped_ptr(new AudioEncoderVerbatim()); 52 return make_scoped_ptr(new AudioEncoderVerbatim());
72 } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) { 53 } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) {
73 return make_scoped_ptr(new AudioEncoderOpus()); 54 return make_scoped_ptr(new AudioEncoderOpus());
74 } 55 }
75 56
(...skipping 16 matching lines...) Expand all
92 const base::TimeDelta& max_duration, 73 const base::TimeDelta& max_duration,
93 scoped_refptr<protocol::PairingRegistry> pairing_registry, 74 scoped_refptr<protocol::PairingRegistry> pairing_registry,
94 const std::vector<HostExtension*>& extensions) 75 const std::vector<HostExtension*>& extensions)
95 : event_handler_(event_handler), 76 : event_handler_(event_handler),
96 connection_(connection.Pass()), 77 connection_(connection.Pass()),
97 client_jid_(connection_->session()->jid()), 78 client_jid_(connection_->session()->jid()),
98 desktop_environment_factory_(desktop_environment_factory), 79 desktop_environment_factory_(desktop_environment_factory),
99 input_tracker_(&host_input_filter_), 80 input_tracker_(&host_input_filter_),
100 remote_input_filter_(&input_tracker_), 81 remote_input_filter_(&input_tracker_),
101 mouse_clamping_filter_(&remote_input_filter_), 82 mouse_clamping_filter_(&remote_input_filter_),
102 disable_input_filter_(mouse_clamping_filter_.input_filter()), 83 disable_input_filter_(&mouse_clamping_filter_),
103 disable_clipboard_filter_(clipboard_echo_filter_.host_filter()), 84 disable_clipboard_filter_(clipboard_echo_filter_.host_filter()),
104 client_clipboard_factory_(clipboard_echo_filter_.client_filter()), 85 client_clipboard_factory_(clipboard_echo_filter_.client_filter()),
105 max_duration_(max_duration), 86 max_duration_(max_duration),
106 audio_task_runner_(audio_task_runner), 87 audio_task_runner_(audio_task_runner),
107 input_task_runner_(input_task_runner), 88 input_task_runner_(input_task_runner),
108 video_capture_task_runner_(video_capture_task_runner), 89 video_capture_task_runner_(video_capture_task_runner),
109 video_encode_task_runner_(video_encode_task_runner), 90 video_encode_task_runner_(video_encode_task_runner),
110 network_task_runner_(network_task_runner), 91 network_task_runner_(network_task_runner),
111 ui_task_runner_(ui_task_runner), 92 ui_task_runner_(ui_task_runner),
112 pairing_registry_(pairing_registry), 93 pairing_registry_(pairing_registry),
(...skipping 16 matching lines...) Expand all
129 remote_input_filter_.SetExpectLocalEcho(false); 110 remote_input_filter_.SetExpectLocalEcho(false);
130 #endif // defined(OS_WIN) 111 #endif // defined(OS_WIN)
131 } 112 }
132 113
133 ClientSession::~ClientSession() { 114 ClientSession::~ClientSession() {
134 DCHECK(CalledOnValidThread()); 115 DCHECK(CalledOnValidThread());
135 DCHECK(!audio_pump_); 116 DCHECK(!audio_pump_);
136 DCHECK(!desktop_environment_); 117 DCHECK(!desktop_environment_);
137 DCHECK(!input_injector_); 118 DCHECK(!input_injector_);
138 DCHECK(!screen_controls_); 119 DCHECK(!screen_controls_);
139 DCHECK(!video_frame_pump_); 120 DCHECK(!video_stream_);
140 121
141 connection_.reset(); 122 connection_.reset();
142 } 123 }
143 124
144 void ClientSession::NotifyClientResolution( 125 void ClientSession::NotifyClientResolution(
145 const protocol::ClientResolution& resolution) { 126 const protocol::ClientResolution& resolution) {
146 DCHECK(CalledOnValidThread()); 127 DCHECK(CalledOnValidThread());
147 128
148 // TODO(sergeyu): Move these checks to protocol layer. 129 // TODO(sergeyu): Move these checks to protocol layer.
149 if (!resolution.has_dips_width() || !resolution.has_dips_height() || 130 if (!resolution.has_dips_width() || !resolution.has_dips_height() ||
(...skipping 14 matching lines...) Expand all
164 webrtc::DesktopSize(resolution.dips_width(), resolution.dips_height()), 145 webrtc::DesktopSize(resolution.dips_width(), resolution.dips_height()),
165 webrtc::DesktopVector(kDefaultDPI, kDefaultDPI)); 146 webrtc::DesktopVector(kDefaultDPI, kDefaultDPI));
166 147
167 // Try to match the client's resolution. 148 // Try to match the client's resolution.
168 screen_controls_->SetScreenResolution(client_resolution); 149 screen_controls_->SetScreenResolution(client_resolution);
169 } 150 }
170 151
171 void ClientSession::ControlVideo(const protocol::VideoControl& video_control) { 152 void ClientSession::ControlVideo(const protocol::VideoControl& video_control) {
172 DCHECK(CalledOnValidThread()); 153 DCHECK(CalledOnValidThread());
173 154
174 // Note that |video_frame_pump_| may be null, depending upon whether 155 // Note that |video_stream_| may be null, depending upon whether
175 // extensions choose to wrap or "steal" the video capturer or encoder. 156 // extensions choose to wrap or "steal" the video capturer or encoder.
176 if (video_control.has_enable()) { 157 if (video_control.has_enable()) {
177 VLOG(1) << "Received VideoControl (enable=" 158 VLOG(1) << "Received VideoControl (enable="
178 << video_control.enable() << ")"; 159 << video_control.enable() << ")";
179 pause_video_ = !video_control.enable(); 160 pause_video_ = !video_control.enable();
180 if (video_frame_pump_) 161 if (video_stream_)
181 video_frame_pump_->Pause(pause_video_); 162 video_stream_->Pause(pause_video_);
182 } 163 }
183 if (video_control.has_lossless_encode()) { 164 if (video_control.has_lossless_encode()) {
184 VLOG(1) << "Received VideoControl (lossless_encode=" 165 VLOG(1) << "Received VideoControl (lossless_encode="
185 << video_control.lossless_encode() << ")"; 166 << video_control.lossless_encode() << ")";
186 lossless_video_encode_ = video_control.lossless_encode(); 167 lossless_video_encode_ = video_control.lossless_encode();
187 if (video_frame_pump_) 168 if (video_stream_)
188 video_frame_pump_->SetLosslessEncode(lossless_video_encode_); 169 video_stream_->SetLosslessEncode(lossless_video_encode_);
189 } 170 }
190 if (video_control.has_lossless_color()) { 171 if (video_control.has_lossless_color()) {
191 VLOG(1) << "Received VideoControl (lossless_color=" 172 VLOG(1) << "Received VideoControl (lossless_color="
192 << video_control.lossless_color() << ")"; 173 << video_control.lossless_color() << ")";
193 lossless_video_color_ = video_control.lossless_color(); 174 lossless_video_color_ = video_control.lossless_color();
194 if (video_frame_pump_) 175 if (video_stream_)
195 video_frame_pump_->SetLosslessColor(lossless_video_color_); 176 video_stream_->SetLosslessColor(lossless_video_color_);
196 } 177 }
197 } 178 }
198 179
199 void ClientSession::ControlAudio(const protocol::AudioControl& audio_control) { 180 void ClientSession::ControlAudio(const protocol::AudioControl& audio_control) {
200 DCHECK(CalledOnValidThread()); 181 DCHECK(CalledOnValidThread());
201 182
202 if (audio_control.has_enable()) { 183 if (audio_control.has_enable()) {
203 VLOG(1) << "Received AudioControl (enable=" 184 VLOG(1) << "Received AudioControl (enable="
204 << audio_control.enable() << ")"; 185 << audio_control.enable() << ")";
205 if (audio_pump_) 186 if (audio_pump_)
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 } 259 }
279 260
280 void ClientSession::OnConnectionAuthenticated( 261 void ClientSession::OnConnectionAuthenticated(
281 protocol::ConnectionToClient* connection) { 262 protocol::ConnectionToClient* connection) {
282 DCHECK(CalledOnValidThread()); 263 DCHECK(CalledOnValidThread());
283 DCHECK_EQ(connection_.get(), connection); 264 DCHECK_EQ(connection_.get(), connection);
284 DCHECK(!audio_pump_); 265 DCHECK(!audio_pump_);
285 DCHECK(!desktop_environment_); 266 DCHECK(!desktop_environment_);
286 DCHECK(!input_injector_); 267 DCHECK(!input_injector_);
287 DCHECK(!screen_controls_); 268 DCHECK(!screen_controls_);
288 DCHECK(!video_frame_pump_); 269 DCHECK(!video_stream_);
289 270
290 is_authenticated_ = true; 271 is_authenticated_ = true;
291 272
292 if (max_duration_ > base::TimeDelta()) { 273 if (max_duration_ > base::TimeDelta()) {
293 max_duration_timer_.Start( 274 max_duration_timer_.Start(
294 FROM_HERE, max_duration_, 275 FROM_HERE, max_duration_,
295 base::Bind(&ClientSession::DisconnectSession, base::Unretained(this), 276 base::Bind(&ClientSession::DisconnectSession, base::Unretained(this),
296 protocol::MAX_SESSION_LENGTH)); 277 protocol::MAX_SESSION_LENGTH));
297 } 278 }
298 279
299 // Notify EventHandler. 280 // Notify EventHandler.
300 event_handler_->OnSessionAuthenticated(this); 281 event_handler_->OnSessionAuthenticated(this);
301 282
302 // Create the desktop environment. Drop the connection if it could not be 283 // Create the desktop environment. Drop the connection if it could not be
303 // created for any reason (for instance the curtain could not initialize). 284 // created for any reason (for instance the curtain could not initialize).
304 desktop_environment_ = 285 desktop_environment_ =
305 desktop_environment_factory_->Create(weak_factory_.GetWeakPtr()); 286 desktop_environment_factory_->Create(weak_factory_.GetWeakPtr());
306 if (!desktop_environment_) { 287 if (!desktop_environment_) {
307 DisconnectSession(protocol::HOST_CONFIGURATION_ERROR); 288 DisconnectSession(protocol::HOST_CONFIGURATION_ERROR);
308 return; 289 return;
309 } 290 }
310 291
311 // Connect host stub. 292 // Connect host stub.
312 connection_->set_host_stub(this); 293 connection_->set_host_stub(this);
313 294
314 // Connect video stub.
315 mouse_clamping_filter_.set_video_stub(connection_->video_stub());
316
317 // Collate the set of capabilities to offer the client, if it supports them. 295 // Collate the set of capabilities to offer the client, if it supports them.
318 host_capabilities_ = desktop_environment_->GetCapabilities(); 296 host_capabilities_ = desktop_environment_->GetCapabilities();
319 if (!host_capabilities_.empty()) 297 if (!host_capabilities_.empty())
320 host_capabilities_.append(" "); 298 host_capabilities_.append(" ");
321 host_capabilities_.append(extension_manager_->GetCapabilities()); 299 host_capabilities_.append(extension_manager_->GetCapabilities());
322 300
323 // Create the object that controls the screen resolution. 301 // Create the object that controls the screen resolution.
324 screen_controls_ = desktop_environment_->CreateScreenControls(); 302 screen_controls_ = desktop_environment_->CreateScreenControls();
325 303
326 // Create the event executor. 304 // Create the event executor.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 // If the client never authenticated then the session failed. 363 // If the client never authenticated then the session failed.
386 if (!is_authenticated_) 364 if (!is_authenticated_)
387 event_handler_->OnSessionAuthenticationFailed(this); 365 event_handler_->OnSessionAuthenticationFailed(this);
388 366
389 // Ensure that any pressed keys or buttons are released. 367 // Ensure that any pressed keys or buttons are released.
390 input_tracker_.ReleaseAll(); 368 input_tracker_.ReleaseAll();
391 369
392 // Stop components access the client, audio or video stubs, which are no 370 // Stop components access the client, audio or video stubs, which are no
393 // longer valid once ConnectionToClient calls OnConnectionClosed(). 371 // longer valid once ConnectionToClient calls OnConnectionClosed().
394 audio_pump_.reset(); 372 audio_pump_.reset();
395 video_frame_pump_.reset(); 373 video_stream_.reset();
396 mouse_shape_pump_.reset(); 374 mouse_shape_pump_.reset();
397 client_clipboard_factory_.InvalidateWeakPtrs(); 375 client_clipboard_factory_.InvalidateWeakPtrs();
398 input_injector_.reset(); 376 input_injector_.reset();
399 screen_controls_.reset(); 377 screen_controls_.reset();
400 desktop_environment_.reset(); 378 desktop_environment_.reset();
401 379
402 // Notify the ChromotingHost that this client is disconnected. 380 // Notify the ChromotingHost that this client is disconnected.
403 event_handler_->OnSessionClosed(this); 381 event_handler_->OnSessionClosed(this);
404 } 382 }
405 383
384 void ClientSession::OnCreateVideoEncoder(scoped_ptr<VideoEncoder>* encoder) {
385 DCHECK(CalledOnValidThread());
386 extension_manager_->OnCreateVideoEncoder(encoder);
387 }
388
406 void ClientSession::OnInputEventReceived( 389 void ClientSession::OnInputEventReceived(
407 protocol::ConnectionToClient* connection, 390 protocol::ConnectionToClient* connection,
408 int64_t event_timestamp) { 391 int64_t event_timestamp) {
409 DCHECK(CalledOnValidThread()); 392 DCHECK(CalledOnValidThread());
410 DCHECK_EQ(connection_.get(), connection); 393 DCHECK_EQ(connection_.get(), connection);
411 394
412 if (video_frame_pump_.get()) 395 if (video_stream_.get())
413 video_frame_pump_->OnInputEventReceived(event_timestamp); 396 video_stream_->OnInputEventReceived(event_timestamp);
414 } 397 }
415 398
416 void ClientSession::OnRouteChange( 399 void ClientSession::OnRouteChange(
417 protocol::ConnectionToClient* connection, 400 protocol::ConnectionToClient* connection,
418 const std::string& channel_name, 401 const std::string& channel_name,
419 const protocol::TransportRoute& route) { 402 const protocol::TransportRoute& route) {
420 DCHECK(CalledOnValidThread()); 403 DCHECK(CalledOnValidThread());
421 DCHECK_EQ(connection_.get(), connection); 404 DCHECK_EQ(connection_.get(), connection);
422 event_handler_->OnSessionRouteChange(this, channel_name, route); 405 event_handler_->OnSessionRouteChange(this, channel_name, route);
423 } 406 }
(...skipping 24 matching lines...) Expand all
448 if (disable_inputs) 431 if (disable_inputs)
449 input_tracker_.ReleaseAll(); 432 input_tracker_.ReleaseAll();
450 433
451 disable_input_filter_.set_enabled(!disable_inputs); 434 disable_input_filter_.set_enabled(!disable_inputs);
452 disable_clipboard_filter_.set_enabled(!disable_inputs); 435 disable_clipboard_filter_.set_enabled(!disable_inputs);
453 } 436 }
454 437
455 void ClientSession::ResetVideoPipeline() { 438 void ClientSession::ResetVideoPipeline() {
456 DCHECK(CalledOnValidThread()); 439 DCHECK(CalledOnValidThread());
457 440
441 video_stream_.reset();
458 mouse_shape_pump_.reset(); 442 mouse_shape_pump_.reset();
459 connection_->set_video_feedback_stub(nullptr);
460 video_frame_pump_.reset();
461 443
462 // Create VideoEncoder and DesktopCapturer to match the session's video 444 // Create VideoEncoder and DesktopCapturer to match the session's video
463 // channel configuration. 445 // channel configuration.
464 scoped_ptr<webrtc::DesktopCapturer> video_capturer = 446 scoped_ptr<webrtc::DesktopCapturer> video_capturer =
465 desktop_environment_->CreateVideoCapturer(); 447 desktop_environment_->CreateVideoCapturer();
466 extension_manager_->OnCreateVideoCapturer(&video_capturer); 448 extension_manager_->OnCreateVideoCapturer(&video_capturer);
467 scoped_ptr<VideoEncoder> video_encoder =
468 CreateVideoEncoder(connection_->session()->config());
469 extension_manager_->OnCreateVideoEncoder(&video_encoder);
470 449
471 // Don't start the VideoFramePump if either capturer or encoder are missing. 450 // Don't start the video stream if the extension took ownership of the
472 if (!video_capturer || !video_encoder) 451 // capturer.
452 if (!video_capturer)
473 return; 453 return;
474 454
475 // Create MouseShapePump to send mouse cursor shape. 455 // Create MouseShapePump to send mouse cursor shape.
476 mouse_shape_pump_.reset( 456 mouse_shape_pump_.reset(
477 new MouseShapePump(video_capture_task_runner_, 457 new MouseShapePump(video_capture_task_runner_,
478 desktop_environment_->CreateMouseCursorMonitor(), 458 desktop_environment_->CreateMouseCursorMonitor(),
479 connection_->client_stub())); 459 connection_->client_stub()));
480 460
481 // Create a VideoFramePump to pump frames from the capturer to the client.' 461 // Create a VideoStream to pump frames from the capturer to the client.
482 // 462
483 // TODO(sergeyu): Move DesktopCapturerProxy creation to DesktopEnvironment. 463 // TODO(sergeyu): Move DesktopCapturerProxy creation to DesktopEnvironment.
484 // When using IpcDesktopCapturer the capture thread is not useful. 464 // When using IpcDesktopCapturer the capture thread is not useful.
485 scoped_ptr<DesktopCapturerProxy> capturer_proxy(new DesktopCapturerProxy( 465 scoped_ptr<webrtc::DesktopCapturer> capturer_proxy(new DesktopCapturerProxy(
486 video_capture_task_runner_, video_capturer.Pass())); 466 video_capture_task_runner_, video_capturer.Pass()));
487 video_frame_pump_.reset(new protocol::VideoFramePump(
488 video_encode_task_runner_, capturer_proxy.Pass(), video_encoder.Pass(),
489 &mouse_clamping_filter_));
490 467
491 // Apply video-control parameters to the new scheduler. 468 video_stream_ = connection_->StartVideoStream(capturer_proxy.Pass());
492 video_frame_pump_->SetLosslessEncode(lossless_video_encode_); 469 video_stream_->SetSizeCallback(
493 video_frame_pump_->SetLosslessColor(lossless_video_color_); 470 base::Bind(&ClientSession::OnScreenSizeChanged, base::Unretained(this)));
471
472 // Apply video-control parameters to the new stream.
473 video_stream_->SetLosslessEncode(lossless_video_encode_);
474 video_stream_->SetLosslessColor(lossless_video_color_);
494 475
495 // Pause capturing if necessary. 476 // Pause capturing if necessary.
496 video_frame_pump_->Pause(pause_video_); 477 video_stream_->Pause(pause_video_);
497
498 connection_->set_video_feedback_stub(
499 video_frame_pump_->video_feedback_stub());
500 } 478 }
501 479
502 void ClientSession::SetGnubbyAuthHandlerForTesting( 480 void ClientSession::SetGnubbyAuthHandlerForTesting(
503 GnubbyAuthHandler* gnubby_auth_handler) { 481 GnubbyAuthHandler* gnubby_auth_handler) {
504 DCHECK(CalledOnValidThread()); 482 DCHECK(CalledOnValidThread());
505 gnubby_auth_handler_.reset(gnubby_auth_handler); 483 gnubby_auth_handler_.reset(gnubby_auth_handler);
506 } 484 }
507 485
508 scoped_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() { 486 scoped_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() {
509 DCHECK(CalledOnValidThread()); 487 DCHECK(CalledOnValidThread());
510 488
511 return make_scoped_ptr( 489 return make_scoped_ptr(
512 new protocol::ClipboardThreadProxy(client_clipboard_factory_.GetWeakPtr(), 490 new protocol::ClipboardThreadProxy(client_clipboard_factory_.GetWeakPtr(),
513 base::ThreadTaskRunnerHandle::Get())); 491 base::ThreadTaskRunnerHandle::Get()));
514 } 492 }
515 493
494 void ClientSession::OnScreenSizeChanged(const webrtc::DesktopSize& size) {
495 DCHECK(CalledOnValidThread());
496 mouse_clamping_filter_.set_input_size(size);
497 mouse_clamping_filter_.set_output_size(size);
498 }
499
516 } // namespace remoting 500 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/client_session.h ('k') | remoting/host/client_session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698