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

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

Powered by Google App Engine
This is Rietveld 408576698