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

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

Issue 1852033002: Fix WebRTC transport to use single offer-answer exchange instead of two. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@no_cast
Patch Set: Created 4 years, 8 months 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 #include <utility> 8 #include <utility>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 desktop_environment_factory_(desktop_environment_factory), 73 desktop_environment_factory_(desktop_environment_factory),
74 input_tracker_(&host_input_filter_), 74 input_tracker_(&host_input_filter_),
75 remote_input_filter_(&input_tracker_), 75 remote_input_filter_(&input_tracker_),
76 mouse_clamping_filter_(&remote_input_filter_), 76 mouse_clamping_filter_(&remote_input_filter_),
77 disable_input_filter_(&mouse_clamping_filter_), 77 disable_input_filter_(&mouse_clamping_filter_),
78 disable_clipboard_filter_(clipboard_echo_filter_.host_filter()), 78 disable_clipboard_filter_(clipboard_echo_filter_.host_filter()),
79 client_clipboard_factory_(clipboard_echo_filter_.client_filter()), 79 client_clipboard_factory_(clipboard_echo_filter_.client_filter()),
80 max_duration_(max_duration), 80 max_duration_(max_duration),
81 audio_task_runner_(audio_task_runner), 81 audio_task_runner_(audio_task_runner),
82 pairing_registry_(pairing_registry), 82 pairing_registry_(pairing_registry),
83 is_authenticated_(false),
84 pause_video_(false),
85 lossless_video_encode_(false),
86 // Note that |lossless_video_color_| defaults to true, but actually only 83 // Note that |lossless_video_color_| defaults to true, but actually only
87 // controls VP9 video stream color quality. 84 // controls VP9 video stream color quality.
88 lossless_video_color_(!base::CommandLine::ForCurrentProcess()->HasSwitch( 85 lossless_video_color_(!base::CommandLine::ForCurrentProcess()->HasSwitch(
89 kDisableI444SwitchName)), 86 kDisableI444SwitchName)),
90 weak_factory_(this) { 87 weak_factory_(this) {
91 connection_->SetEventHandler(this); 88 connection_->SetEventHandler(this);
92 89
93 // Create a manager for the configured extensions, if any. 90 // Create a manager for the configured extensions, if any.
94 extension_manager_.reset(new HostExtensionSessionManager(extensions, this)); 91 extension_manager_.reset(new HostExtensionSessionManager(extensions, this));
95 92
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 client_capabilities_ = base::WrapUnique(new std::string()); 188 client_capabilities_ = base::WrapUnique(new std::string());
192 if (capabilities.has_capabilities()) 189 if (capabilities.has_capabilities())
193 *client_capabilities_ = capabilities.capabilities(); 190 *client_capabilities_ = capabilities.capabilities();
194 capabilities_ = IntersectCapabilities(*client_capabilities_, 191 capabilities_ = IntersectCapabilities(*client_capabilities_,
195 host_capabilities_); 192 host_capabilities_);
196 extension_manager_->OnNegotiatedCapabilities( 193 extension_manager_->OnNegotiatedCapabilities(
197 connection_->client_stub(), capabilities_); 194 connection_->client_stub(), capabilities_);
198 195
199 VLOG(1) << "Client capabilities: " << *client_capabilities_; 196 VLOG(1) << "Client capabilities: " << *client_capabilities_;
200 197
201 // Calculate the set of capabilities enabled by both client and host and
202 // pass it to the desktop environment if it is available.
203 desktop_environment_->SetCapabilities(capabilities_); 198 desktop_environment_->SetCapabilities(capabilities_);
204 } 199 }
205 200
206 void ClientSession::RequestPairing( 201 void ClientSession::RequestPairing(
207 const protocol::PairingRequest& pairing_request) { 202 const protocol::PairingRequest& pairing_request) {
208 if (pairing_registry_.get() && pairing_request.has_client_name()) { 203 if (pairing_registry_.get() && pairing_request.has_client_name()) {
209 protocol::PairingRegistry::Pairing pairing = 204 protocol::PairingRegistry::Pairing pairing =
210 pairing_registry_->CreatePairing(pairing_request.client_name()); 205 pairing_registry_->CreatePairing(pairing_request.client_name());
211 protocol::PairingResponse pairing_response; 206 protocol::PairingResponse pairing_response;
212 pairing_response.set_client_id(pairing.client_id()); 207 pairing_response.set_client_id(pairing.client_id());
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 // Connect the host input stubs. 284 // Connect the host input stubs.
290 connection_->set_input_stub(&disable_input_filter_); 285 connection_->set_input_stub(&disable_input_filter_);
291 host_input_filter_.set_input_stub(input_injector_.get()); 286 host_input_filter_.set_input_stub(input_injector_.get());
292 287
293 // Connect the clipboard stubs. 288 // Connect the clipboard stubs.
294 connection_->set_clipboard_stub(&disable_clipboard_filter_); 289 connection_->set_clipboard_stub(&disable_clipboard_filter_);
295 clipboard_echo_filter_.set_host_stub(input_injector_.get()); 290 clipboard_echo_filter_.set_host_stub(input_injector_.get());
296 clipboard_echo_filter_.set_client_stub(connection_->client_stub()); 291 clipboard_echo_filter_.set_client_stub(connection_->client_stub());
297 } 292 }
298 293
294 void ClientSession::CreateVideoStreams(
295 protocol::ConnectionToClient* connection) {
296 DCHECK(CalledOnValidThread());
297 DCHECK_EQ(connection_.get(), connection);
298
299 // Create a VideoStream to pump frames from the capturer to the client.
300 video_stream_ = connection_->StartVideoStream(
301 desktop_environment_->CreateVideoCapturer());
302
303 video_stream_->SetSizeCallback(
304 base::Bind(&ClientSession::OnScreenSizeChanged, base::Unretained(this)));
305
306 // Apply video-control parameters to the new stream.
307 video_stream_->SetLosslessEncode(lossless_video_encode_);
308 video_stream_->SetLosslessColor(lossless_video_color_);
309
310 // Pause capturing if necessary.
311 video_stream_->Pause(pause_video_);
312 }
313
299 void ClientSession::OnConnectionChannelsConnected( 314 void ClientSession::OnConnectionChannelsConnected(
300 protocol::ConnectionToClient* connection) { 315 protocol::ConnectionToClient* connection) {
301 DCHECK(CalledOnValidThread()); 316 DCHECK(CalledOnValidThread());
302 DCHECK_EQ(connection_.get(), connection); 317 DCHECK_EQ(connection_.get(), connection);
303 318
319 DCHECK(!channels_connected_);
320 channels_connected_ = true;
321
304 // Negotiate capabilities with the client. 322 // Negotiate capabilities with the client.
305 VLOG(1) << "Host capabilities: " << host_capabilities_; 323 VLOG(1) << "Host capabilities: " << host_capabilities_;
306 protocol::Capabilities capabilities; 324 protocol::Capabilities capabilities;
307 capabilities.set_capabilities(host_capabilities_); 325 capabilities.set_capabilities(host_capabilities_);
308 connection_->client_stub()->SetCapabilities(capabilities); 326 connection_->client_stub()->SetCapabilities(capabilities);
309 327
310 // Start the event executor. 328 // Start the event executor.
311 input_injector_->Start(CreateClipboardProxy()); 329 input_injector_->Start(CreateClipboardProxy());
312 SetDisableInputs(false); 330 SetDisableInputs(false);
313 331
314 // Create MouseShapePump to send mouse cursor shape. 332 // Create MouseShapePump to send mouse cursor shape.
315 mouse_shape_pump_.reset( 333 mouse_shape_pump_.reset(
316 new MouseShapePump(desktop_environment_->CreateMouseCursorMonitor(), 334 new MouseShapePump(desktop_environment_->CreateMouseCursorMonitor(),
317 connection_->client_stub())); 335 connection_->client_stub()));
318 336
319 // Create a VideoStream to pump frames from the capturer to the client.
320 video_stream_ = connection_->StartVideoStream(
321 desktop_environment_->CreateVideoCapturer());
322
323 video_stream_->SetSizeCallback(
324 base::Bind(&ClientSession::OnScreenSizeChanged, base::Unretained(this)));
325
326 // Apply video-control parameters to the new stream.
327 video_stream_->SetLosslessEncode(lossless_video_encode_);
328 video_stream_->SetLosslessColor(lossless_video_color_);
329
330 // Pause capturing if necessary.
331 video_stream_->Pause(pause_video_);
332
333 // Create an AudioPump if audio is enabled, to pump audio samples. 337 // Create an AudioPump if audio is enabled, to pump audio samples.
334 if (connection_->session()->config().is_audio_enabled()) { 338 if (connection_->session()->config().is_audio_enabled()) {
335 std::unique_ptr<AudioEncoder> audio_encoder = 339 std::unique_ptr<AudioEncoder> audio_encoder =
336 CreateAudioEncoder(connection_->session()->config()); 340 CreateAudioEncoder(connection_->session()->config());
337 audio_pump_.reset(new AudioPump( 341 audio_pump_.reset(new AudioPump(
338 audio_task_runner_, desktop_environment_->CreateAudioCapturer(), 342 audio_task_runner_, desktop_environment_->CreateAudioCapturer(),
339 std::move(audio_encoder), connection_->audio_stub())); 343 std::move(audio_encoder), connection_->audio_stub()));
340 } 344 }
341 345
346 if (pending_video_layout_message_) {
347 connection_->client_stub()->SetVideoLayout(*pending_video_layout_message_);
348 pending_video_layout_message_.reset();
349 }
350
342 // Notify the event handler that all our channels are now connected. 351 // Notify the event handler that all our channels are now connected.
343 event_handler_->OnSessionChannelsConnected(this); 352 event_handler_->OnSessionChannelsConnected(this);
344 } 353 }
345 354
346 void ClientSession::OnConnectionClosed( 355 void ClientSession::OnConnectionClosed(
347 protocol::ConnectionToClient* connection, 356 protocol::ConnectionToClient* connection,
348 protocol::ErrorCode error) { 357 protocol::ErrorCode error) {
349 DCHECK(CalledOnValidThread()); 358 DCHECK(CalledOnValidThread());
350 DCHECK_EQ(connection_.get(), connection); 359 DCHECK_EQ(connection_.get(), connection);
351 360
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 if (connection_->session()->config().protocol() == 451 if (connection_->session()->config().protocol() ==
443 protocol::SessionConfig::Protocol::WEBRTC) { 452 protocol::SessionConfig::Protocol::WEBRTC) {
444 protocol::VideoLayout layout; 453 protocol::VideoLayout layout;
445 protocol::VideoTrackLayout* video_track = layout.add_video_track(); 454 protocol::VideoTrackLayout* video_track = layout.add_video_track();
446 video_track->set_position_x(0); 455 video_track->set_position_x(0);
447 video_track->set_position_y(0); 456 video_track->set_position_y(0);
448 video_track->set_width(size.width() * kDefaultDpi / dpi.x()); 457 video_track->set_width(size.width() * kDefaultDpi / dpi.x());
449 video_track->set_height(size.height() * kDefaultDpi / dpi.y()); 458 video_track->set_height(size.height() * kDefaultDpi / dpi.y());
450 video_track->set_x_dpi(dpi.x()); 459 video_track->set_x_dpi(dpi.x());
451 video_track->set_y_dpi(dpi.y()); 460 video_track->set_y_dpi(dpi.y());
452 connection_->client_stub()->SetVideoLayout(layout); 461
462 // VideoLayout can be sent only after the control channel is connected.
463 // TODO(sergeyu): Change client_stub() implementation to allow queuing while
464 // connection is being established.
465 if (channels_connected_) {
466 connection_->client_stub()->SetVideoLayout(layout);
467 } else {
468 pending_video_layout_message_.reset(new protocol::VideoLayout(layout));
469 }
453 } 470 }
454 } 471 }
455 472
456 } // namespace remoting 473 } // 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