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

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
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 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 client_capabilities_ = make_scoped_ptr(new std::string()); 190 client_capabilities_ = make_scoped_ptr(new std::string());
191 if (capabilities.has_capabilities()) 191 if (capabilities.has_capabilities())
192 *client_capabilities_ = capabilities.capabilities(); 192 *client_capabilities_ = capabilities.capabilities();
193 capabilities_ = IntersectCapabilities(*client_capabilities_, 193 capabilities_ = IntersectCapabilities(*client_capabilities_,
194 host_capabilities_); 194 host_capabilities_);
195 extension_manager_->OnNegotiatedCapabilities( 195 extension_manager_->OnNegotiatedCapabilities(
196 connection_->client_stub(), capabilities_); 196 connection_->client_stub(), capabilities_);
197 197
198 VLOG(1) << "Client capabilities: " << *client_capabilities_; 198 VLOG(1) << "Client capabilities: " << *client_capabilities_;
199 199
200 // Calculate the set of capabilities enabled by both client and host and
201 // pass it to the desktop environment if it is available.
202 desktop_environment_->SetCapabilities(capabilities_); 200 desktop_environment_->SetCapabilities(capabilities_);
201
202 if (pending_video_layout_message_) {
203 connection_->client_stub()->SetVideoLayout(*pending_video_layout_message_);
204 pending_video_layout_message_.reset();
205 }
203 } 206 }
204 207
205 void ClientSession::RequestPairing( 208 void ClientSession::RequestPairing(
206 const protocol::PairingRequest& pairing_request) { 209 const protocol::PairingRequest& pairing_request) {
207 if (pairing_registry_.get() && pairing_request.has_client_name()) { 210 if (pairing_registry_.get() && pairing_request.has_client_name()) {
208 protocol::PairingRegistry::Pairing pairing = 211 protocol::PairingRegistry::Pairing pairing =
209 pairing_registry_->CreatePairing(pairing_request.client_name()); 212 pairing_registry_->CreatePairing(pairing_request.client_name());
210 protocol::PairingResponse pairing_response; 213 protocol::PairingResponse pairing_response;
211 pairing_response.set_client_id(pairing.client_id()); 214 pairing_response.set_client_id(pairing.client_id());
212 pairing_response.set_shared_secret(pairing.shared_secret()); 215 pairing_response.set_shared_secret(pairing.shared_secret());
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 // Connect the host input stubs. 291 // Connect the host input stubs.
289 connection_->set_input_stub(&disable_input_filter_); 292 connection_->set_input_stub(&disable_input_filter_);
290 host_input_filter_.set_input_stub(input_injector_.get()); 293 host_input_filter_.set_input_stub(input_injector_.get());
291 294
292 // Connect the clipboard stubs. 295 // Connect the clipboard stubs.
293 connection_->set_clipboard_stub(&disable_clipboard_filter_); 296 connection_->set_clipboard_stub(&disable_clipboard_filter_);
294 clipboard_echo_filter_.set_host_stub(input_injector_.get()); 297 clipboard_echo_filter_.set_host_stub(input_injector_.get());
295 clipboard_echo_filter_.set_client_stub(connection_->client_stub()); 298 clipboard_echo_filter_.set_client_stub(connection_->client_stub());
296 } 299 }
297 300
301 void ClientSession::OnCreateVideoStreams(
302 protocol::ConnectionToClient* connection) {
303 DCHECK(CalledOnValidThread());
304 DCHECK_EQ(connection_.get(), connection);
305
306 // Create a VideoStream to pump frames from the capturer to the client.
307 video_stream_ = connection_->StartVideoStream(
308 desktop_environment_->CreateVideoCapturer());
309
310 video_stream_->SetSizeCallback(
311 base::Bind(&ClientSession::OnScreenSizeChanged, base::Unretained(this)));
312
313 // Apply video-control parameters to the new stream.
314 video_stream_->SetLosslessEncode(lossless_video_encode_);
315 video_stream_->SetLosslessColor(lossless_video_color_);
316
317 // Pause capturing if necessary.
318 video_stream_->Pause(pause_video_);
319 }
320
298 void ClientSession::OnConnectionChannelsConnected( 321 void ClientSession::OnConnectionChannelsConnected(
299 protocol::ConnectionToClient* connection) { 322 protocol::ConnectionToClient* connection) {
300 DCHECK(CalledOnValidThread()); 323 DCHECK(CalledOnValidThread());
301 DCHECK_EQ(connection_.get(), connection); 324 DCHECK_EQ(connection_.get(), connection);
302 325
303 // Negotiate capabilities with the client. 326 // Negotiate capabilities with the client.
304 VLOG(1) << "Host capabilities: " << host_capabilities_; 327 VLOG(1) << "Host capabilities: " << host_capabilities_;
305 protocol::Capabilities capabilities; 328 protocol::Capabilities capabilities;
306 capabilities.set_capabilities(host_capabilities_); 329 capabilities.set_capabilities(host_capabilities_);
307 connection_->client_stub()->SetCapabilities(capabilities); 330 connection_->client_stub()->SetCapabilities(capabilities);
308 331
309 // Start the event executor. 332 // Start the event executor.
310 input_injector_->Start(CreateClipboardProxy()); 333 input_injector_->Start(CreateClipboardProxy());
311 SetDisableInputs(false); 334 SetDisableInputs(false);
312 335
313 // Create MouseShapePump to send mouse cursor shape. 336 // Create MouseShapePump to send mouse cursor shape.
314 mouse_shape_pump_.reset( 337 mouse_shape_pump_.reset(
315 new MouseShapePump(desktop_environment_->CreateMouseCursorMonitor(), 338 new MouseShapePump(desktop_environment_->CreateMouseCursorMonitor(),
316 connection_->client_stub())); 339 connection_->client_stub()));
317 340
318 // Create a VideoStream to pump frames from the capturer to the client.
319 video_stream_ = connection_->StartVideoStream(
320 desktop_environment_->CreateVideoCapturer());
321
322 video_stream_->SetSizeCallback(
323 base::Bind(&ClientSession::OnScreenSizeChanged, base::Unretained(this)));
324
325 // Apply video-control parameters to the new stream.
326 video_stream_->SetLosslessEncode(lossless_video_encode_);
327 video_stream_->SetLosslessColor(lossless_video_color_);
328
329 // Pause capturing if necessary.
330 video_stream_->Pause(pause_video_);
331
332 // Create an AudioPump if audio is enabled, to pump audio samples. 341 // Create an AudioPump if audio is enabled, to pump audio samples.
333 if (connection_->session()->config().is_audio_enabled()) { 342 if (connection_->session()->config().is_audio_enabled()) {
334 scoped_ptr<AudioEncoder> audio_encoder = 343 scoped_ptr<AudioEncoder> audio_encoder =
335 CreateAudioEncoder(connection_->session()->config()); 344 CreateAudioEncoder(connection_->session()->config());
336 audio_pump_.reset(new AudioPump( 345 audio_pump_.reset(new AudioPump(
337 audio_task_runner_, desktop_environment_->CreateAudioCapturer(), 346 audio_task_runner_, desktop_environment_->CreateAudioCapturer(),
338 std::move(audio_encoder), connection_->audio_stub())); 347 std::move(audio_encoder), connection_->audio_stub()));
339 } 348 }
340 349
341 // Notify the event handler that all our channels are now connected. 350 // Notify the event handler that all our channels are now connected.
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 if (connection_->session()->config().protocol() == 450 if (connection_->session()->config().protocol() ==
442 protocol::SessionConfig::Protocol::WEBRTC) { 451 protocol::SessionConfig::Protocol::WEBRTC) {
443 protocol::VideoLayout layout; 452 protocol::VideoLayout layout;
444 protocol::VideoTrackLayout* video_track = layout.add_video_track(); 453 protocol::VideoTrackLayout* video_track = layout.add_video_track();
445 video_track->set_position_x(0); 454 video_track->set_position_x(0);
446 video_track->set_position_y(0); 455 video_track->set_position_y(0);
447 video_track->set_width(size.width() * kDefaultDpi / dpi.x()); 456 video_track->set_width(size.width() * kDefaultDpi / dpi.x());
448 video_track->set_height(size.height() * kDefaultDpi / dpi.y()); 457 video_track->set_height(size.height() * kDefaultDpi / dpi.y());
449 video_track->set_x_dpi(dpi.x()); 458 video_track->set_x_dpi(dpi.x());
450 video_track->set_y_dpi(dpi.y()); 459 video_track->set_y_dpi(dpi.y());
451 connection_->client_stub()->SetVideoLayout(layout); 460
461 // VideoLayout can be sent only after capabilities negotiation has finished.
462 if (client_capabilities_) {
463 connection_->client_stub()->SetVideoLayout(layout);
464 } else {
465 pending_video_layout_message_.reset(new protocol::VideoLayout(layout));
466 }
452 } 467 }
453 } 468 }
454 469
455 } // namespace remoting 470 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698