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

Side by Side Diff: remoting/protocol/webrtc_transport.cc

Issue 1545743002: Move ownership of Transport out of Session. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_not_pass_client
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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/protocol/webrtc_transport.h" 5 #include "remoting/protocol/webrtc_transport.h"
6 6
7 #include "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/single_thread_task_runner.h" 8 #include "base/single_thread_task_runner.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/task_runner_util.h" 10 #include "base/task_runner_util.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 private: 95 private:
96 ResultCallback result_callback_; 96 ResultCallback result_callback_;
97 97
98 DISALLOW_COPY_AND_ASSIGN(SetSessionDescriptionObserver); 98 DISALLOW_COPY_AND_ASSIGN(SetSessionDescriptionObserver);
99 }; 99 };
100 100
101 } // namespace 101 } // namespace
102 102
103 WebrtcTransport::WebrtcTransport( 103 WebrtcTransport::WebrtcTransport(
104 rtc::Thread* worker_thread, 104 rtc::Thread* worker_thread,
105 scoped_refptr<TransportContext> transport_context) 105 scoped_refptr<TransportContext> transport_context,
106 : transport_context_(transport_context), 106 EventHandler* event_handler)
107 worker_thread_(worker_thread), 107 : worker_thread_(worker_thread),
108 transport_context_(transport_context),
109 event_handler_(event_handler),
108 weak_factory_(this) {} 110 weak_factory_(this) {}
109 111
110 WebrtcTransport::~WebrtcTransport() {} 112 WebrtcTransport::~WebrtcTransport() {}
111 113
112 void WebrtcTransport::Start(EventHandler* event_handler, 114 void WebrtcTransport::Start(
113 Authenticator* authenticator) { 115 Authenticator* authenticator,
116 SendTransportInfoCallback send_transport_info_callback) {
114 DCHECK(thread_checker_.CalledOnValidThread()); 117 DCHECK(thread_checker_.CalledOnValidThread());
118 DCHECK(send_transport_info_callback_.is_null());
115 119
116 event_handler_ = event_handler; 120 send_transport_info_callback_ = std::move(send_transport_info_callback);
121
117 // TODO(sergeyu): Use the |authenticator| to authenticate PeerConnection. 122 // TODO(sergeyu): Use the |authenticator| to authenticate PeerConnection.
118 123
119 transport_context_->CreatePortAllocator(base::Bind( 124 transport_context_->CreatePortAllocator(base::Bind(
120 &WebrtcTransport::OnPortAllocatorCreated, weak_factory_.GetWeakPtr())); 125 &WebrtcTransport::OnPortAllocatorCreated, weak_factory_.GetWeakPtr()));
121 } 126 }
122 127
123 void WebrtcTransport::OnPortAllocatorCreated( 128 void WebrtcTransport::OnPortAllocatorCreated(
124 scoped_ptr<cricket::PortAllocator> port_allocator) { 129 scoped_ptr<cricket::PortAllocator> port_allocator) {
125 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); 130 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
126 131
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 } 243 }
239 244
240 return true; 245 return true;
241 } 246 }
242 247
243 StreamChannelFactory* WebrtcTransport::GetStreamChannelFactory() { 248 StreamChannelFactory* WebrtcTransport::GetStreamChannelFactory() {
244 DCHECK(thread_checker_.CalledOnValidThread()); 249 DCHECK(thread_checker_.CalledOnValidThread());
245 return &data_stream_adapter_; 250 return &data_stream_adapter_;
246 } 251 }
247 252
248 StreamChannelFactory* WebrtcTransport::GetMultiplexedChannelFactory() {
249 DCHECK(thread_checker_.CalledOnValidThread());
250 return GetStreamChannelFactory();
251 }
252
253 WebrtcTransport* WebrtcTransport::AsWebrtcTransport() {
254 return this;
255 }
256
257 void WebrtcTransport::OnLocalSessionDescriptionCreated( 253 void WebrtcTransport::OnLocalSessionDescriptionCreated(
258 scoped_ptr<webrtc::SessionDescriptionInterface> description, 254 scoped_ptr<webrtc::SessionDescriptionInterface> description,
259 const std::string& error) { 255 const std::string& error) {
260 DCHECK(thread_checker_.CalledOnValidThread()); 256 DCHECK(thread_checker_.CalledOnValidThread());
261 257
262 if (!peer_connection_) 258 if (!peer_connection_)
263 return; 259 return;
264 260
265 if (!description) { 261 if (!description) {
266 LOG(ERROR) << "PeerConnection offer creation failed: " << error; 262 LOG(ERROR) << "PeerConnection offer creation failed: " << error;
(...skipping 10 matching lines...) Expand all
277 273
278 // Format and send the session description to the peer. 274 // Format and send the session description to the peer.
279 scoped_ptr<XmlElement> transport_info( 275 scoped_ptr<XmlElement> transport_info(
280 new XmlElement(QName(kTransportNamespace, "transport"), true)); 276 new XmlElement(QName(kTransportNamespace, "transport"), true));
281 XmlElement* offer_tag = 277 XmlElement* offer_tag =
282 new XmlElement(QName(kTransportNamespace, "session-description")); 278 new XmlElement(QName(kTransportNamespace, "session-description"));
283 transport_info->AddElement(offer_tag); 279 transport_info->AddElement(offer_tag);
284 offer_tag->SetAttr(QName(std::string(), "type"), description->type()); 280 offer_tag->SetAttr(QName(std::string(), "type"), description->type());
285 offer_tag->SetBodyText(description_sdp); 281 offer_tag->SetBodyText(description_sdp);
286 282
287 event_handler_->OnOutgoingTransportInfo(std::move(transport_info)); 283 send_transport_info_callback_.Run(std::move(transport_info));
288 284
289 peer_connection_->SetLocalDescription( 285 peer_connection_->SetLocalDescription(
290 SetSessionDescriptionObserver::Create(base::Bind( 286 SetSessionDescriptionObserver::Create(base::Bind(
291 &WebrtcTransport::OnLocalDescriptionSet, weak_factory_.GetWeakPtr())), 287 &WebrtcTransport::OnLocalDescriptionSet, weak_factory_.GetWeakPtr())),
292 description.release()); 288 description.release());
293 } 289 }
294 290
295 void WebrtcTransport::OnLocalDescriptionSet(bool success, 291 void WebrtcTransport::OnLocalDescriptionSet(bool success,
296 const std::string& error) { 292 const std::string& error) {
297 DCHECK(thread_checker_.CalledOnValidThread()); 293 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 332
337 void WebrtcTransport::Close(ErrorCode error) { 333 void WebrtcTransport::Close(ErrorCode error) {
338 DCHECK(thread_checker_.CalledOnValidThread()); 334 DCHECK(thread_checker_.CalledOnValidThread());
339 335
340 weak_factory_.InvalidateWeakPtrs(); 336 weak_factory_.InvalidateWeakPtrs();
341 peer_connection_->Close(); 337 peer_connection_->Close();
342 peer_connection_ = nullptr; 338 peer_connection_ = nullptr;
343 peer_connection_factory_ = nullptr; 339 peer_connection_factory_ = nullptr;
344 340
345 if (error != OK) 341 if (error != OK)
346 event_handler_->OnTransportError(error); 342 event_handler_->OnWebrtcTransportError(error);
347 } 343 }
348 344
349 void WebrtcTransport::OnSignalingChange( 345 void WebrtcTransport::OnSignalingChange(
350 webrtc::PeerConnectionInterface::SignalingState new_state) { 346 webrtc::PeerConnectionInterface::SignalingState new_state) {
351 DCHECK(thread_checker_.CalledOnValidThread()); 347 DCHECK(thread_checker_.CalledOnValidThread());
352 } 348 }
353 349
354 void WebrtcTransport::OnAddStream(webrtc::MediaStreamInterface* stream) { 350 void WebrtcTransport::OnAddStream(webrtc::MediaStreamInterface* stream) {
355 DCHECK(thread_checker_.CalledOnValidThread()); 351 DCHECK(thread_checker_.CalledOnValidThread());
356 LOG(ERROR) << "Stream added " << stream->label(); 352 LOG(ERROR) << "Stream added " << stream->label();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 FROM_HERE, 384 FROM_HERE,
389 base::Bind(&WebrtcTransport::SendOffer, weak_factory_.GetWeakPtr())); 385 base::Bind(&WebrtcTransport::SendOffer, weak_factory_.GetWeakPtr()));
390 } 386 }
391 } 387 }
392 388
393 void WebrtcTransport::OnIceConnectionChange( 389 void WebrtcTransport::OnIceConnectionChange(
394 webrtc::PeerConnectionInterface::IceConnectionState new_state) { 390 webrtc::PeerConnectionInterface::IceConnectionState new_state) {
395 DCHECK(thread_checker_.CalledOnValidThread()); 391 DCHECK(thread_checker_.CalledOnValidThread());
396 392
397 if (new_state == webrtc::PeerConnectionInterface::kIceConnectionConnected) 393 if (new_state == webrtc::PeerConnectionInterface::kIceConnectionConnected)
398 event_handler_->OnTransportConnected(); 394 event_handler_->OnWebrtcTransportConnected();
399 } 395 }
400 396
401 void WebrtcTransport::OnIceGatheringChange( 397 void WebrtcTransport::OnIceGatheringChange(
402 webrtc::PeerConnectionInterface::IceGatheringState new_state) { 398 webrtc::PeerConnectionInterface::IceGatheringState new_state) {
403 DCHECK(thread_checker_.CalledOnValidThread()); 399 DCHECK(thread_checker_.CalledOnValidThread());
404 } 400 }
405 401
406 void WebrtcTransport::OnIceCandidate( 402 void WebrtcTransport::OnIceCandidate(
407 const webrtc::IceCandidateInterface* candidate) { 403 const webrtc::IceCandidateInterface* candidate) {
408 DCHECK(thread_checker_.CalledOnValidThread()); 404 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 CreateSessionDescriptionObserver::Create( 459 CreateSessionDescriptionObserver::Create(
464 base::Bind(&WebrtcTransport::OnLocalSessionDescriptionCreated, 460 base::Bind(&WebrtcTransport::OnLocalSessionDescriptionCreated,
465 weak_factory_.GetWeakPtr())), 461 weak_factory_.GetWeakPtr())),
466 &offer_config); 462 &offer_config);
467 } 463 }
468 464
469 void WebrtcTransport::SendTransportInfo() { 465 void WebrtcTransport::SendTransportInfo() {
470 DCHECK(thread_checker_.CalledOnValidThread()); 466 DCHECK(thread_checker_.CalledOnValidThread());
471 DCHECK(pending_transport_info_message_); 467 DCHECK(pending_transport_info_message_);
472 468
473 event_handler_->OnOutgoingTransportInfo( 469 send_transport_info_callback_.Run(std::move(pending_transport_info_message_));
474 std::move(pending_transport_info_message_));
475 pending_transport_info_message_.reset();
476 } 470 }
477 471
478 void WebrtcTransport::AddPendingCandidatesIfPossible() { 472 void WebrtcTransport::AddPendingCandidatesIfPossible() {
479 DCHECK(thread_checker_.CalledOnValidThread()); 473 DCHECK(thread_checker_.CalledOnValidThread());
480 474
481 if (peer_connection_->signaling_state() == 475 if (peer_connection_->signaling_state() ==
482 webrtc::PeerConnectionInterface::kStable) { 476 webrtc::PeerConnectionInterface::kStable) {
483 for (auto candidate : pending_incoming_candidates_) { 477 for (auto candidate : pending_incoming_candidates_) {
484 if (!peer_connection_->AddIceCandidate(candidate)) { 478 if (!peer_connection_->AddIceCandidate(candidate)) {
485 LOG(ERROR) << "Failed to add incoming candidate"; 479 LOG(ERROR) << "Failed to add incoming candidate";
486 Close(INCOMPATIBLE_PROTOCOL); 480 Close(INCOMPATIBLE_PROTOCOL);
487 return; 481 return;
488 } 482 }
489 } 483 }
490 pending_incoming_candidates_.clear(); 484 pending_incoming_candidates_.clear();
491 } 485 }
492 } 486 }
493 487
494 WebrtcTransportFactory::WebrtcTransportFactory(
495 rtc::Thread* worker_thread,
496 scoped_refptr<TransportContext> transport_context)
497 : worker_thread_(worker_thread),
498 transport_context_(transport_context) {}
499
500 WebrtcTransportFactory::~WebrtcTransportFactory() {}
501
502 scoped_ptr<Transport> WebrtcTransportFactory::CreateTransport() {
503 return make_scoped_ptr(
504 new WebrtcTransport(worker_thread_, transport_context_.get()));
505 }
506
507 } // namespace protocol 488 } // namespace protocol
508 } // namespace remoting 489 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698