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

Side by Side Diff: webrtc/pc/webrtcsession_unittest.cc

Issue 3001083002: Revert of Adding support for Unified Plan offer/answer negotiation. (Closed)
Patch Set: Created 3 years, 4 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 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 "a=fmtp:96 apt=0\r\n"; 136 "a=fmtp:96 apt=0\r\n";
137 137
138 static const char kStream1[] = "stream1"; 138 static const char kStream1[] = "stream1";
139 static const char kVideoTrack1[] = "video1"; 139 static const char kVideoTrack1[] = "video1";
140 static const char kAudioTrack1[] = "audio1"; 140 static const char kAudioTrack1[] = "audio1";
141 141
142 static const char kStream2[] = "stream2"; 142 static const char kStream2[] = "stream2";
143 static const char kVideoTrack2[] = "video2"; 143 static const char kVideoTrack2[] = "video2";
144 static const char kAudioTrack2[] = "audio2"; 144 static const char kAudioTrack2[] = "audio2";
145 145
146 static constexpr bool kStopped = true;
147 static constexpr bool kActive = false;
148
149 enum RTCCertificateGenerationMethod { ALREADY_GENERATED, DTLS_IDENTITY_STORE }; 146 enum RTCCertificateGenerationMethod { ALREADY_GENERATED, DTLS_IDENTITY_STORE };
150 147
151 class MockIceObserver : public webrtc::IceObserver { 148 class MockIceObserver : public webrtc::IceObserver {
152 public: 149 public:
153 MockIceObserver() 150 MockIceObserver()
154 : oncandidatesready_(false), 151 : oncandidatesready_(false),
155 ice_connection_state_(PeerConnectionInterface::kIceConnectionNew), 152 ice_connection_state_(PeerConnectionInterface::kIceConnectionNew),
156 ice_gathering_state_(PeerConnectionInterface::kIceGatheringNew) { 153 ice_gathering_state_(PeerConnectionInterface::kIceGatheringNew) {
157 } 154 }
158 155
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 metrics_observer_(new rtc::RefCountedObject<FakeMetricsObserver>()) { 391 metrics_observer_(new rtc::RefCountedObject<FakeMetricsObserver>()) {
395 cricket::ServerAddresses stun_servers; 392 cricket::ServerAddresses stun_servers;
396 stun_servers.insert(stun_socket_addr_); 393 stun_servers.insert(stun_socket_addr_);
397 allocator_.reset(new cricket::BasicPortAllocator( 394 allocator_.reset(new cricket::BasicPortAllocator(
398 &network_manager_, 395 &network_manager_,
399 stun_servers, 396 stun_servers,
400 SocketAddress(), SocketAddress(), SocketAddress())); 397 SocketAddress(), SocketAddress(), SocketAddress()));
401 allocator_->set_flags(cricket::PORTALLOCATOR_DISABLE_TCP | 398 allocator_->set_flags(cricket::PORTALLOCATOR_DISABLE_TCP |
402 cricket::PORTALLOCATOR_DISABLE_RELAY); 399 cricket::PORTALLOCATOR_DISABLE_RELAY);
403 EXPECT_TRUE(channel_manager_->Init()); 400 EXPECT_TRUE(channel_manager_->Init());
401 desc_factory_->set_add_legacy_streams(false);
404 allocator_->set_step_delay(cricket::kMinimumStepDelay); 402 allocator_->set_step_delay(cricket::kMinimumStepDelay);
405 } 403 }
406 404
407 void AddInterface(const SocketAddress& addr) { 405 void AddInterface(const SocketAddress& addr) {
408 network_manager_.AddInterface(addr); 406 network_manager_.AddInterface(addr);
409 } 407 }
410 void RemoveInterface(const SocketAddress& addr) { 408 void RemoveInterface(const SocketAddress& addr) {
411 network_manager_.RemoveInterface(addr); 409 network_manager_.RemoveInterface(addr);
412 } 410 }
413 411
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 PeerConnectionInterface::kRtcpMuxPolicyNegotiate, 500 PeerConnectionInterface::kRtcpMuxPolicyNegotiate,
503 rtc::CryptoOptions()); 501 rtc::CryptoOptions());
504 } 502 }
505 503
506 void InitWithGcm() { 504 void InitWithGcm() {
507 rtc::CryptoOptions crypto_options; 505 rtc::CryptoOptions crypto_options;
508 crypto_options.enable_gcm_crypto_suites = true; 506 crypto_options.enable_gcm_crypto_suites = true;
509 InitWithCryptoOptions(crypto_options); 507 InitWithCryptoOptions(crypto_options);
510 } 508 }
511 509
512 // The following convenience functions can be applied for both local side and
513 // remote side. The flags can be overwritten for different use cases.
514 void SendAudioVideoStream1() { 510 void SendAudioVideoStream1() {
515 send_stream_1_ = true; 511 send_stream_1_ = true;
516 send_stream_2_ = false; 512 send_stream_2_ = false;
517 local_send_audio_ = true; 513 send_audio_ = true;
518 local_send_video_ = true; 514 send_video_ = true;
519 remote_send_audio_ = true;
520 remote_send_video_ = true;
521 } 515 }
522 516
523 void SendAudioVideoStream2() { 517 void SendAudioVideoStream2() {
524 send_stream_1_ = false; 518 send_stream_1_ = false;
525 send_stream_2_ = true; 519 send_stream_2_ = true;
526 local_send_audio_ = true; 520 send_audio_ = true;
527 local_send_video_ = true; 521 send_video_ = true;
528 remote_send_audio_ = true;
529 remote_send_video_ = true;
530 } 522 }
531 523
532 void SendAudioVideoStream1And2() { 524 void SendAudioVideoStream1And2() {
533 send_stream_1_ = true; 525 send_stream_1_ = true;
534 send_stream_2_ = true; 526 send_stream_2_ = true;
535 local_send_audio_ = true; 527 send_audio_ = true;
536 local_send_video_ = true; 528 send_video_ = true;
537 remote_send_audio_ = true;
538 remote_send_video_ = true;
539 } 529 }
540 530
541 void SendNothing() { 531 void SendNothing() {
542 send_stream_1_ = false; 532 send_stream_1_ = false;
543 send_stream_2_ = false; 533 send_stream_2_ = false;
544 local_send_audio_ = false; 534 send_audio_ = false;
545 local_send_video_ = false; 535 send_video_ = false;
546 remote_send_audio_ = false;
547 remote_send_video_ = false;
548 } 536 }
549 537
550 void SendAudioOnlyStream2() { 538 void SendAudioOnlyStream2() {
551 send_stream_1_ = false; 539 send_stream_1_ = false;
552 send_stream_2_ = true; 540 send_stream_2_ = true;
553 local_send_audio_ = true; 541 send_audio_ = true;
554 local_send_video_ = false; 542 send_video_ = false;
555 remote_send_audio_ = true;
556 remote_send_video_ = false;
557 } 543 }
558 544
559 void SendVideoOnlyStream2() { 545 void SendVideoOnlyStream2() {
560 send_stream_1_ = false; 546 send_stream_1_ = false;
561 send_stream_2_ = true; 547 send_stream_2_ = true;
562 local_send_audio_ = false; 548 send_audio_ = false;
563 local_send_video_ = true; 549 send_video_ = true;
564 remote_send_audio_ = false;
565 remote_send_video_ = true;
566 } 550 }
567 551
568 // Helper function used to add a specific media section to the 552 void AddStreamsToOptions(cricket::MediaSessionOptions* session_options) {
569 // |session_options|. 553 if (send_stream_1_ && send_audio_) {
570 void AddMediaSection(cricket::MediaType type, 554 session_options->AddSendStream(cricket::MEDIA_TYPE_AUDIO, kAudioTrack1,
571 const std::string& mid, 555 kStream1);
572 cricket::MediaContentDirection direction,
573 bool stopped,
574 cricket::MediaSessionOptions* opts) {
575 opts->media_description_options.push_back(cricket::MediaDescriptionOptions(
576 type, mid,
577 cricket::RtpTransceiverDirection::FromMediaContentDirection(direction),
578 stopped));
579 }
580
581 // Add the media sections to the options from |offered_media_sections_| when
582 // creating an answer or a new offer.
583 // This duplicates a lot of logic from PeerConnection but this can be fixed
584 // when PeerConnection and WebRtcSession are merged.
585 void AddExistingMediaSectionsAndSendersToOptions(
586 cricket::MediaSessionOptions* session_options,
587 bool send_audio,
588 bool recv_audio,
589 bool send_video,
590 bool recv_video) {
591 int num_sim_layer = 1;
592 for (auto media_description_options : offered_media_sections_) {
593 if (media_description_options.type == cricket::MEDIA_TYPE_AUDIO) {
594 bool stopped = !send_audio && !recv_audio;
595 auto media_desc_options = cricket::MediaDescriptionOptions(
596 cricket::MEDIA_TYPE_AUDIO, media_description_options.mid,
597 cricket::RtpTransceiverDirection(send_audio, recv_audio), stopped);
598 if (send_stream_1_ && send_audio) {
599 media_desc_options.AddAudioSender(kAudioTrack1, kStream1);
600 }
601 if (send_stream_2_ && send_audio) {
602 media_desc_options.AddAudioSender(kAudioTrack2, kStream2);
603 }
604 session_options->media_description_options.push_back(
605 media_desc_options);
606 } else if (media_description_options.type == cricket::MEDIA_TYPE_VIDEO) {
607 bool stopped = !send_video && !recv_video;
608 auto media_desc_options = cricket::MediaDescriptionOptions(
609 cricket::MEDIA_TYPE_VIDEO, media_description_options.mid,
610 cricket::RtpTransceiverDirection(send_video, recv_video), stopped);
611 if (send_stream_1_ && send_video) {
612 media_desc_options.AddVideoSender(kVideoTrack1, kStream1,
613 num_sim_layer);
614 }
615 if (send_stream_2_ && send_video) {
616 media_desc_options.AddVideoSender(kVideoTrack2, kStream2,
617 num_sim_layer);
618 }
619 session_options->media_description_options.push_back(
620 media_desc_options);
621 } else if (media_description_options.type == cricket::MEDIA_TYPE_DATA) {
622 session_options->media_description_options.push_back(
623 cricket::MediaDescriptionOptions(
624 cricket::MEDIA_TYPE_DATA, media_description_options.mid,
625 // Direction for data sections is meaningless, but legacy
626 // endpoints might expect sendrecv.
627 cricket::RtpTransceiverDirection(true, true), false));
628 } else {
629 RTC_NOTREACHED();
630 }
631 } 556 }
632 } 557 if (send_stream_1_ && send_video_) {
633 558 session_options->AddSendStream(cricket::MEDIA_TYPE_VIDEO, kVideoTrack1,
634 // Add the existing media sections first and then add new media sections if 559 kStream1);
635 // needed.
636 void AddMediaSectionsAndSendersToOptions(
637 cricket::MediaSessionOptions* session_options,
638 bool send_audio,
639 bool recv_audio,
640 bool send_video,
641 bool recv_video) {
642 AddExistingMediaSectionsAndSendersToOptions(
643 session_options, send_audio, recv_audio, send_video, recv_video);
644
645 if (!session_options->has_audio() && (send_audio || recv_audio)) {
646 cricket::MediaDescriptionOptions media_desc_options =
647 cricket::MediaDescriptionOptions(
648 cricket::MEDIA_TYPE_AUDIO, cricket::CN_AUDIO,
649 cricket::RtpTransceiverDirection(send_audio, recv_audio),
650 kActive);
651 if (send_stream_1_ && send_audio) {
652 media_desc_options.AddAudioSender(kAudioTrack1, kStream1);
653 }
654 if (send_stream_2_ && send_audio) {
655 media_desc_options.AddAudioSender(kAudioTrack2, kStream2);
656 }
657 session_options->media_description_options.push_back(media_desc_options);
658 offered_media_sections_.push_back(media_desc_options);
659 } 560 }
660 561 if (send_stream_2_ && send_audio_) {
661 if (!session_options->has_video() && (send_video || recv_video)) { 562 session_options->AddSendStream(cricket::MEDIA_TYPE_AUDIO, kAudioTrack2,
662 cricket::MediaDescriptionOptions media_desc_options = 563 kStream2);
663 cricket::MediaDescriptionOptions(
664 cricket::MEDIA_TYPE_VIDEO, cricket::CN_VIDEO,
665 cricket::RtpTransceiverDirection(send_video, recv_video),
666 kActive);
667 int num_sim_layer = 1;
668 if (send_stream_1_ && send_video) {
669 media_desc_options.AddVideoSender(kVideoTrack1, kStream1,
670 num_sim_layer);
671 }
672 if (send_stream_2_ && send_video) {
673 media_desc_options.AddVideoSender(kVideoTrack2, kStream2,
674 num_sim_layer);
675 }
676 session_options->media_description_options.push_back(media_desc_options);
677 offered_media_sections_.push_back(media_desc_options);
678 } 564 }
679 565 if (send_stream_2_ && send_video_) {
680 if (!session_options->has_data() && 566 session_options->AddSendStream(cricket::MEDIA_TYPE_VIDEO, kVideoTrack2,
681 (data_channel_ || 567 kStream2);
682 session_options->data_channel_type != cricket::DCT_NONE)) { 568 }
683 cricket::MediaDescriptionOptions media_desc_options = 569 if (data_channel_ && session_->data_channel_type() == cricket::DCT_RTP) {
684 cricket::MediaDescriptionOptions( 570 session_options->AddSendStream(cricket::MEDIA_TYPE_DATA,
685 cricket::MEDIA_TYPE_DATA, cricket::CN_DATA, 571 data_channel_->label(),
686 cricket::RtpTransceiverDirection(true, true), kActive); 572 data_channel_->label());
687 if (session_options->data_channel_type == cricket::DCT_RTP) {
688 media_desc_options.AddRtpDataChannel(data_channel_->label(),
689 data_channel_->label());
690 }
691 session_options->media_description_options.push_back(media_desc_options);
692 offered_media_sections_.push_back(media_desc_options);
693 } 573 }
694 } 574 }
695 575
696 void GetOptionsForOffer( 576 void GetOptionsForOffer(
697 const PeerConnectionInterface::RTCOfferAnswerOptions& rtc_options, 577 const PeerConnectionInterface::RTCOfferAnswerOptions& rtc_options,
698 cricket::MediaSessionOptions* session_options) { 578 cricket::MediaSessionOptions* session_options) {
699 ExtractSharedMediaSessionOptions(rtc_options, session_options); 579 ASSERT_TRUE(ExtractMediaSessionOptions(rtc_options, true, session_options));
700 580
701 // |recv_X| is true by default if |offer_to_receive_X| is undefined. 581 AddStreamsToOptions(session_options);
702 bool recv_audio = rtc_options.offer_to_receive_audio != 0; 582 if (rtc_options.offer_to_receive_audio ==
703 bool recv_video = rtc_options.offer_to_receive_video != 0; 583 RTCOfferAnswerOptions::kUndefined) {
704 584 session_options->recv_audio =
705 AddMediaSectionsAndSendersToOptions(session_options, local_send_audio_, 585 session_options->HasSendMediaStream(cricket::MEDIA_TYPE_AUDIO);
706 recv_audio, local_send_video_, 586 }
707 recv_video); 587 if (rtc_options.offer_to_receive_video ==
588 RTCOfferAnswerOptions::kUndefined) {
589 session_options->recv_video =
590 session_options->HasSendMediaStream(cricket::MEDIA_TYPE_VIDEO);
591 }
708 session_options->bundle_enabled = 592 session_options->bundle_enabled =
709 session_options->bundle_enabled && 593 session_options->bundle_enabled &&
710 (session_options->has_audio() || session_options->has_video() || 594 (session_options->has_audio() || session_options->has_video() ||
711 session_options->has_data()); 595 session_options->has_data());
712 596
597 if (session_->data_channel_type() == cricket::DCT_SCTP && data_channel_) {
598 session_options->data_channel_type = cricket::DCT_SCTP;
599 } else if (session_->data_channel_type() == cricket::DCT_QUIC) {
600 session_options->data_channel_type = cricket::DCT_QUIC;
601 }
602
713 session_options->crypto_options = crypto_options_; 603 session_options->crypto_options = crypto_options_;
714 } 604 }
715 605
716 void GetOptionsForAnswer(cricket::MediaSessionOptions* session_options) { 606 void GetOptionsForAnswer(cricket::MediaSessionOptions* session_options) {
717 AddExistingMediaSectionsAndSendersToOptions( 607 // ParseConstraintsForAnswer is used to set some defaults.
718 session_options, local_send_audio_, local_recv_audio_, 608 ASSERT_TRUE(webrtc::ParseConstraintsForAnswer(nullptr, session_options));
719 local_send_video_, local_recv_video_);
720 609
610 AddStreamsToOptions(session_options);
721 session_options->bundle_enabled = 611 session_options->bundle_enabled =
722 session_options->bundle_enabled && 612 session_options->bundle_enabled &&
723 (session_options->has_audio() || session_options->has_video() || 613 (session_options->has_audio() || session_options->has_video() ||
724 session_options->has_data()); 614 session_options->has_data());
725 615
726 if (session_->data_channel_type() != cricket::DCT_RTP) {
727 session_options->data_channel_type = session_->data_channel_type();
728 }
729
730 session_options->crypto_options = crypto_options_;
731 }
732
733 void GetOptionsForRemoteAnswer(
734 cricket::MediaSessionOptions* session_options) {
735 bool recv_audio = local_send_audio_ || remote_recv_audio_;
736 bool recv_video = local_send_video_ || remote_recv_video_;
737 bool send_audio = false;
738 bool send_video = false;
739
740 AddExistingMediaSectionsAndSendersToOptions(
741 session_options, send_audio, recv_audio, send_video, recv_video);
742
743 session_options->bundle_enabled =
744 session_options->bundle_enabled &&
745 (session_options->has_audio() || session_options->has_video() ||
746 session_options->has_data());
747
748 if (session_->data_channel_type() != cricket::DCT_RTP) {
749 session_options->data_channel_type = session_->data_channel_type();
750 }
751
752 session_options->crypto_options = crypto_options_;
753 }
754
755 void GetOptionsForAudioOnlyRemoteOffer(
756 cricket::MediaSessionOptions* session_options) {
757 remote_recv_audio_ = true;
758 remote_recv_video_ = false;
759 GetOptionsForRemoteOffer(session_options);
760 }
761
762 void GetOptionsForRemoteOffer(cricket::MediaSessionOptions* session_options) {
763 AddMediaSectionsAndSendersToOptions(session_options, remote_send_audio_,
764 remote_recv_audio_, remote_send_video_,
765 remote_recv_video_);
766 session_options->bundle_enabled =
767 (session_options->has_audio() || session_options->has_video() ||
768 session_options->has_data());
769
770 if (session_->data_channel_type() != cricket::DCT_RTP) { 616 if (session_->data_channel_type() != cricket::DCT_RTP) {
771 session_options->data_channel_type = session_->data_channel_type(); 617 session_options->data_channel_type = session_->data_channel_type();
772 } 618 }
773 619
774 session_options->crypto_options = crypto_options_; 620 session_options->crypto_options = crypto_options_;
775 } 621 }
776 622
777 // Creates a local offer and applies it. Starts ICE. 623 // Creates a local offer and applies it. Starts ICE.
778 // Call SendAudioVideoStreamX() before this function 624 // Call SendAudioVideoStreamX() before this function
779 // to decide which streams to create. 625 // to decide which streams to create.
780 void InitiateCall() { 626 void InitiateCall() {
781 SessionDescriptionInterface* offer = CreateOffer(); 627 SessionDescriptionInterface* offer = CreateOffer();
782 SetLocalDescriptionWithoutError(offer); 628 SetLocalDescriptionWithoutError(offer);
783 EXPECT_TRUE_WAIT(PeerConnectionInterface::kIceGatheringNew != 629 EXPECT_TRUE_WAIT(PeerConnectionInterface::kIceGatheringNew !=
784 observer_.ice_gathering_state_, 630 observer_.ice_gathering_state_,
785 kIceCandidatesTimeout); 631 kIceCandidatesTimeout);
786 } 632 }
787 633
788 SessionDescriptionInterface* CreateOffer() { 634 SessionDescriptionInterface* CreateOffer() {
789 PeerConnectionInterface::RTCOfferAnswerOptions options; 635 PeerConnectionInterface::RTCOfferAnswerOptions options;
790 options.offer_to_receive_audio = 636 options.offer_to_receive_audio =
791 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; 637 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue;
638
792 return CreateOffer(options); 639 return CreateOffer(options);
793 } 640 }
794 641
795 SessionDescriptionInterface* CreateOffer( 642 SessionDescriptionInterface* CreateOffer(
796 const PeerConnectionInterface::RTCOfferAnswerOptions options) { 643 const PeerConnectionInterface::RTCOfferAnswerOptions options) {
797 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> 644 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest>
798 observer = new WebRtcSessionCreateSDPObserverForTest(); 645 observer = new WebRtcSessionCreateSDPObserverForTest();
799 cricket::MediaSessionOptions session_options; 646 cricket::MediaSessionOptions session_options;
800 GetOptionsForOffer(options, &session_options); 647 GetOptionsForOffer(options, &session_options);
801 session_->CreateOffer(observer, options, session_options); 648 session_->CreateOffer(observer, options, session_options);
802 EXPECT_TRUE_WAIT( 649 EXPECT_TRUE_WAIT(
803 observer->state() != WebRtcSessionCreateSDPObserverForTest::kInit, 650 observer->state() != WebRtcSessionCreateSDPObserverForTest::kInit,
804 2000); 651 2000);
805 return observer->ReleaseDescription(); 652 return observer->ReleaseDescription();
806 } 653 }
807 654
808 SessionDescriptionInterface* CreateAnswer( 655 SessionDescriptionInterface* CreateAnswer(
809 const cricket::MediaSessionOptions& options) { 656 const cricket::MediaSessionOptions& options) {
810 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> observer 657 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> observer
811 = new WebRtcSessionCreateSDPObserverForTest(); 658 = new WebRtcSessionCreateSDPObserverForTest();
812 cricket::MediaSessionOptions session_options = options; 659 cricket::MediaSessionOptions session_options = options;
813 GetOptionsForAnswer(&session_options); 660 GetOptionsForAnswer(&session_options);
661 // Overwrite recv_audio and recv_video with passed-in values.
662 session_options.recv_video = options.recv_video;
663 session_options.recv_audio = options.recv_audio;
814 session_->CreateAnswer(observer, session_options); 664 session_->CreateAnswer(observer, session_options);
815 EXPECT_TRUE_WAIT( 665 EXPECT_TRUE_WAIT(
816 observer->state() != WebRtcSessionCreateSDPObserverForTest::kInit, 666 observer->state() != WebRtcSessionCreateSDPObserverForTest::kInit,
817 2000); 667 2000);
818 return observer->ReleaseDescription(); 668 return observer->ReleaseDescription();
819 } 669 }
820 670
821 SessionDescriptionInterface* CreateAnswer() { 671 SessionDescriptionInterface* CreateAnswer() {
822 cricket::MediaSessionOptions options; 672 cricket::MediaSessionOptions options;
823 options.bundle_enabled = true; 673 options.recv_video = true;
674 options.recv_audio = true;
824 return CreateAnswer(options); 675 return CreateAnswer(options);
825 } 676 }
826 677
827 bool ChannelsExist() const { 678 bool ChannelsExist() const {
828 return (session_->voice_channel() != NULL && 679 return (session_->voice_channel() != NULL &&
829 session_->video_channel() != NULL); 680 session_->video_channel() != NULL);
830 } 681 }
831 682
832 void VerifyCryptoParams(const cricket::SessionDescription* sdp, 683 void VerifyCryptoParams(const cricket::SessionDescription* sdp,
833 bool gcm_enabled = false) { 684 bool gcm_enabled = false) {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 ASSERT_TRUE(audio != NULL); 782 ASSERT_TRUE(audio != NULL);
932 ASSERT_EQ(expected, audio->description.identity_fingerprint.get() != NULL); 783 ASSERT_EQ(expected, audio->description.identity_fingerprint.get() != NULL);
933 const TransportInfo* video = sdp->GetTransportInfoByName("video"); 784 const TransportInfo* video = sdp->GetTransportInfoByName("video");
934 ASSERT_TRUE(video != NULL); 785 ASSERT_TRUE(video != NULL);
935 ASSERT_EQ(expected, video->description.identity_fingerprint.get() != NULL); 786 ASSERT_EQ(expected, video->description.identity_fingerprint.get() != NULL);
936 } 787 }
937 788
938 void VerifyAnswerFromNonCryptoOffer() { 789 void VerifyAnswerFromNonCryptoOffer() {
939 // Create an SDP without Crypto. 790 // Create an SDP without Crypto.
940 cricket::MediaSessionOptions options; 791 cricket::MediaSessionOptions options;
941 GetOptionsForRemoteOffer(&options); 792 options.recv_video = true;
942 JsepSessionDescription* offer( 793 JsepSessionDescription* offer(
943 CreateRemoteOffer(options, cricket::SEC_DISABLED)); 794 CreateRemoteOffer(options, cricket::SEC_DISABLED));
944 ASSERT_TRUE(offer != NULL); 795 ASSERT_TRUE(offer != NULL);
945 VerifyNoCryptoParams(offer->description(), false); 796 VerifyNoCryptoParams(offer->description(), false);
946 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, 797 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto,
947 offer); 798 offer);
948 const webrtc::SessionDescriptionInterface* answer = CreateAnswer(); 799 const webrtc::SessionDescriptionInterface* answer = CreateAnswer();
949 // Answer should be NULL as no crypto params in offer. 800 // Answer should be NULL as no crypto params in offer.
950 ASSERT_TRUE(answer == NULL); 801 ASSERT_TRUE(answer == NULL);
951 } 802 }
952 803
953 void VerifyAnswerFromCryptoOffer() { 804 void VerifyAnswerFromCryptoOffer() {
954 cricket::MediaSessionOptions options; 805 cricket::MediaSessionOptions options;
955 GetOptionsForRemoteOffer(&options); 806 options.recv_video = true;
956 options.bundle_enabled = true; 807 options.bundle_enabled = true;
957 std::unique_ptr<JsepSessionDescription> offer( 808 std::unique_ptr<JsepSessionDescription> offer(
958 CreateRemoteOffer(options, cricket::SEC_REQUIRED)); 809 CreateRemoteOffer(options, cricket::SEC_REQUIRED));
959 ASSERT_TRUE(offer.get() != NULL); 810 ASSERT_TRUE(offer.get() != NULL);
960 VerifyCryptoParams(offer->description()); 811 VerifyCryptoParams(offer->description());
961 SetRemoteDescriptionWithoutError(offer.release()); 812 SetRemoteDescriptionWithoutError(offer.release());
962 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); 813 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
963 ASSERT_TRUE(answer.get() != NULL); 814 ASSERT_TRUE(answer.get() != NULL);
964 VerifyCryptoParams(answer->description()); 815 VerifyCryptoParams(answer->description());
965 } 816 }
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 // creates a local answer and applies is as a local description. 919 // creates a local answer and applies is as a local description.
1069 // Call SendAudioVideoStreamX() before this function 920 // Call SendAudioVideoStreamX() before this function
1070 // to decide which local and remote streams to create. 921 // to decide which local and remote streams to create.
1071 void CreateAndSetRemoteOfferAndLocalAnswer() { 922 void CreateAndSetRemoteOfferAndLocalAnswer() {
1072 SessionDescriptionInterface* offer = CreateRemoteOffer(); 923 SessionDescriptionInterface* offer = CreateRemoteOffer();
1073 SetRemoteDescriptionWithoutError(offer); 924 SetRemoteDescriptionWithoutError(offer);
1074 SessionDescriptionInterface* answer = CreateAnswer(); 925 SessionDescriptionInterface* answer = CreateAnswer();
1075 SetLocalDescriptionWithoutError(answer); 926 SetLocalDescriptionWithoutError(answer);
1076 } 927 }
1077 void SetLocalDescriptionWithoutError(SessionDescriptionInterface* desc) { 928 void SetLocalDescriptionWithoutError(SessionDescriptionInterface* desc) {
1078 ASSERT_TRUE(session_->SetLocalDescription(desc, nullptr)); 929 EXPECT_TRUE(session_->SetLocalDescription(desc, NULL));
1079 session_->MaybeStartGathering(); 930 session_->MaybeStartGathering();
1080 } 931 }
1081 void SetLocalDescriptionExpectState(SessionDescriptionInterface* desc, 932 void SetLocalDescriptionExpectState(SessionDescriptionInterface* desc,
1082 WebRtcSession::State expected_state) { 933 WebRtcSession::State expected_state) {
1083 SetLocalDescriptionWithoutError(desc); 934 SetLocalDescriptionWithoutError(desc);
1084 EXPECT_EQ(expected_state, session_->state()); 935 EXPECT_EQ(expected_state, session_->state());
1085 } 936 }
1086 void SetLocalDescriptionExpectError(const std::string& action, 937 void SetLocalDescriptionExpectError(const std::string& action,
1087 const std::string& expected_error, 938 const std::string& expected_error,
1088 SessionDescriptionInterface* desc) { 939 SessionDescriptionInterface* desc) {
1089 std::string error; 940 std::string error;
1090 EXPECT_FALSE(session_->SetLocalDescription(desc, &error)); 941 EXPECT_FALSE(session_->SetLocalDescription(desc, &error));
1091 std::string sdp_type = "local "; 942 std::string sdp_type = "local ";
1092 sdp_type.append(action); 943 sdp_type.append(action);
1093 EXPECT_NE(std::string::npos, error.find(sdp_type)); 944 EXPECT_NE(std::string::npos, error.find(sdp_type));
1094 EXPECT_NE(std::string::npos, error.find(expected_error)); 945 EXPECT_NE(std::string::npos, error.find(expected_error));
1095 } 946 }
1096 void SetLocalDescriptionOfferExpectError(const std::string& expected_error, 947 void SetLocalDescriptionOfferExpectError(const std::string& expected_error,
1097 SessionDescriptionInterface* desc) { 948 SessionDescriptionInterface* desc) {
1098 SetLocalDescriptionExpectError(SessionDescriptionInterface::kOffer, 949 SetLocalDescriptionExpectError(SessionDescriptionInterface::kOffer,
1099 expected_error, desc); 950 expected_error, desc);
1100 } 951 }
1101 void SetLocalDescriptionAnswerExpectError(const std::string& expected_error, 952 void SetLocalDescriptionAnswerExpectError(const std::string& expected_error,
1102 SessionDescriptionInterface* desc) { 953 SessionDescriptionInterface* desc) {
1103 SetLocalDescriptionExpectError(SessionDescriptionInterface::kAnswer, 954 SetLocalDescriptionExpectError(SessionDescriptionInterface::kAnswer,
1104 expected_error, desc); 955 expected_error, desc);
1105 } 956 }
1106 void SetRemoteDescriptionWithoutError(SessionDescriptionInterface* desc) { 957 void SetRemoteDescriptionWithoutError(SessionDescriptionInterface* desc) {
1107 ASSERT_TRUE(session_->SetRemoteDescription(desc, nullptr)); 958 EXPECT_TRUE(session_->SetRemoteDescription(desc, NULL));
1108 } 959 }
1109 void SetRemoteDescriptionExpectState(SessionDescriptionInterface* desc, 960 void SetRemoteDescriptionExpectState(SessionDescriptionInterface* desc,
1110 WebRtcSession::State expected_state) { 961 WebRtcSession::State expected_state) {
1111 SetRemoteDescriptionWithoutError(desc); 962 SetRemoteDescriptionWithoutError(desc);
1112 EXPECT_EQ(expected_state, session_->state()); 963 EXPECT_EQ(expected_state, session_->state());
1113 } 964 }
1114 void SetRemoteDescriptionExpectError(const std::string& action, 965 void SetRemoteDescriptionExpectError(const std::string& action,
1115 const std::string& expected_error, 966 const std::string& expected_error,
1116 SessionDescriptionInterface* desc) { 967 SessionDescriptionInterface* desc) {
1117 std::string error; 968 std::string error;
(...skipping 16 matching lines...) Expand all
1134 void SetRemoteDescriptionAnswerExpectError( 985 void SetRemoteDescriptionAnswerExpectError(
1135 const std::string& expected_error, SessionDescriptionInterface* desc) { 986 const std::string& expected_error, SessionDescriptionInterface* desc) {
1136 SetRemoteDescriptionExpectError(SessionDescriptionInterface::kAnswer, 987 SetRemoteDescriptionExpectError(SessionDescriptionInterface::kAnswer,
1137 expected_error, desc); 988 expected_error, desc);
1138 } 989 }
1139 990
1140 void CreateCryptoOfferAndNonCryptoAnswer(SessionDescriptionInterface** offer, 991 void CreateCryptoOfferAndNonCryptoAnswer(SessionDescriptionInterface** offer,
1141 SessionDescriptionInterface** nocrypto_answer) { 992 SessionDescriptionInterface** nocrypto_answer) {
1142 // Create a SDP without Crypto. 993 // Create a SDP without Crypto.
1143 cricket::MediaSessionOptions options; 994 cricket::MediaSessionOptions options;
1144 GetOptionsForRemoteOffer(&options); 995 options.recv_video = true;
1145 options.bundle_enabled = true; 996 options.bundle_enabled = true;
1146 *offer = CreateRemoteOffer(options, cricket::SEC_ENABLED); 997 *offer = CreateRemoteOffer(options, cricket::SEC_ENABLED);
1147 ASSERT_TRUE(*offer != NULL); 998 ASSERT_TRUE(*offer != NULL);
1148 VerifyCryptoParams((*offer)->description()); 999 VerifyCryptoParams((*offer)->description());
1149 1000
1150 cricket::MediaSessionOptions answer_options; 1001 *nocrypto_answer = CreateRemoteAnswer(*offer, options,
1151 GetOptionsForRemoteAnswer(&answer_options); 1002 cricket::SEC_DISABLED);
1152 *nocrypto_answer =
1153 CreateRemoteAnswer(*offer, answer_options, cricket::SEC_DISABLED);
1154 EXPECT_TRUE(*nocrypto_answer != NULL); 1003 EXPECT_TRUE(*nocrypto_answer != NULL);
1155 } 1004 }
1156 1005
1157 void CreateDtlsOfferAndNonDtlsAnswer(SessionDescriptionInterface** offer, 1006 void CreateDtlsOfferAndNonDtlsAnswer(SessionDescriptionInterface** offer,
1158 SessionDescriptionInterface** nodtls_answer) { 1007 SessionDescriptionInterface** nodtls_answer) {
1159 cricket::MediaSessionOptions options; 1008 cricket::MediaSessionOptions options;
1160 AddMediaSection(cricket::MEDIA_TYPE_AUDIO, cricket::CN_AUDIO, 1009 options.recv_video = true;
1161 cricket::MD_RECVONLY, kActive, &options);
1162 AddMediaSection(cricket::MEDIA_TYPE_VIDEO, cricket::CN_VIDEO,
1163 cricket::MD_RECVONLY, kActive, &options);
1164 options.bundle_enabled = true; 1010 options.bundle_enabled = true;
1165 1011
1166 std::unique_ptr<SessionDescriptionInterface> temp_offer( 1012 std::unique_ptr<SessionDescriptionInterface> temp_offer(
1167 CreateRemoteOffer(options, cricket::SEC_ENABLED)); 1013 CreateRemoteOffer(options, cricket::SEC_ENABLED));
1168 1014
1169 *nodtls_answer = 1015 *nodtls_answer =
1170 CreateRemoteAnswer(temp_offer.get(), options, cricket::SEC_ENABLED); 1016 CreateRemoteAnswer(temp_offer.get(), options, cricket::SEC_ENABLED);
1171 EXPECT_TRUE(*nodtls_answer != NULL); 1017 EXPECT_TRUE(*nodtls_answer != NULL);
1172 VerifyFingerprintStatus((*nodtls_answer)->description(), false); 1018 VerifyFingerprintStatus((*nodtls_answer)->description(), false);
1173 VerifyCryptoParams((*nodtls_answer)->description()); 1019 VerifyCryptoParams((*nodtls_answer)->description());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1215 cricket::MediaSessionOptions options, 1061 cricket::MediaSessionOptions options,
1216 const SessionDescriptionInterface* current_desc) { 1062 const SessionDescriptionInterface* current_desc) {
1217 return CreateRemoteOfferWithVersion(options, cricket::SEC_ENABLED, 1063 return CreateRemoteOfferWithVersion(options, cricket::SEC_ENABLED,
1218 kSessionVersion, current_desc); 1064 kSessionVersion, current_desc);
1219 } 1065 }
1220 1066
1221 JsepSessionDescription* CreateRemoteOfferWithSctpPort( 1067 JsepSessionDescription* CreateRemoteOfferWithSctpPort(
1222 const char* sctp_stream_name, int new_port, 1068 const char* sctp_stream_name, int new_port,
1223 cricket::MediaSessionOptions options) { 1069 cricket::MediaSessionOptions options) {
1224 options.data_channel_type = cricket::DCT_SCTP; 1070 options.data_channel_type = cricket::DCT_SCTP;
1225 GetOptionsForRemoteOffer(&options); 1071 options.AddSendStream(cricket::MEDIA_TYPE_DATA, "datachannel",
1072 sctp_stream_name);
1226 return ChangeSDPSctpPort(new_port, CreateRemoteOffer(options)); 1073 return ChangeSDPSctpPort(new_port, CreateRemoteOffer(options));
1227 } 1074 }
1228 1075
1229 // Takes ownership of offer_basis (and deletes it). 1076 // Takes ownership of offer_basis (and deletes it).
1230 JsepSessionDescription* ChangeSDPSctpPort( 1077 JsepSessionDescription* ChangeSDPSctpPort(
1231 int new_port, webrtc::SessionDescriptionInterface *offer_basis) { 1078 int new_port, webrtc::SessionDescriptionInterface *offer_basis) {
1232 // Stringify the input SDP, swap the 5000 for 'new_port' and create a new 1079 // Stringify the input SDP, swap the 5000 for 'new_port' and create a new
1233 // SessionDescription from the mutated string. 1080 // SessionDescription from the mutated string.
1234 const char* default_port_str = "5000"; 1081 const char* default_port_str = "5000";
1235 char new_port_str[16]; 1082 char new_port_str[16];
1236 rtc::sprintfn(new_port_str, sizeof(new_port_str), "%d", new_port); 1083 rtc::sprintfn(new_port_str, sizeof(new_port_str), "%d", new_port);
1237 std::string offer_str; 1084 std::string offer_str;
1238 offer_basis->ToString(&offer_str); 1085 offer_basis->ToString(&offer_str);
1239 rtc::replace_substrs(default_port_str, strlen(default_port_str), 1086 rtc::replace_substrs(default_port_str, strlen(default_port_str),
1240 new_port_str, strlen(new_port_str), 1087 new_port_str, strlen(new_port_str),
1241 &offer_str); 1088 &offer_str);
1242 JsepSessionDescription* offer = new JsepSessionDescription( 1089 JsepSessionDescription* offer = new JsepSessionDescription(
1243 offer_basis->type()); 1090 offer_basis->type());
1244 delete offer_basis; 1091 delete offer_basis;
1245 offer->Initialize(offer_str, NULL); 1092 offer->Initialize(offer_str, NULL);
1246 return offer; 1093 return offer;
1247 } 1094 }
1248 1095
1249 // Create a remote offer. Call SendAudioVideoStreamX() 1096 // Create a remote offer. Call SendAudioVideoStreamX()
1250 // before this function to decide which streams to create. 1097 // before this function to decide which streams to create.
1251 JsepSessionDescription* CreateRemoteOffer() { 1098 JsepSessionDescription* CreateRemoteOffer() {
1252 cricket::MediaSessionOptions options; 1099 cricket::MediaSessionOptions options;
1253 GetOptionsForRemoteOffer(&options); 1100 GetOptionsForAnswer(&options);
1254 return CreateRemoteOffer(options, session_->remote_description()); 1101 return CreateRemoteOffer(options, session_->remote_description());
1255 } 1102 }
1256 1103
1257 JsepSessionDescription* CreateRemoteAnswer( 1104 JsepSessionDescription* CreateRemoteAnswer(
1258 const SessionDescriptionInterface* offer, 1105 const SessionDescriptionInterface* offer,
1259 cricket::MediaSessionOptions options, 1106 cricket::MediaSessionOptions options,
1260 cricket::SecurePolicy policy) { 1107 cricket::SecurePolicy policy) {
1261 desc_factory_->set_secure(policy); 1108 desc_factory_->set_secure(policy);
1262 const std::string session_id = 1109 const std::string session_id =
1263 rtc::ToString(rtc::CreateRandomId64()); 1110 rtc::ToString(rtc::CreateRandomId64());
(...skipping 14 matching lines...) Expand all
1278 return CreateRemoteAnswer(offer, options, cricket::SEC_REQUIRED); 1125 return CreateRemoteAnswer(offer, options, cricket::SEC_REQUIRED);
1279 } 1126 }
1280 1127
1281 // Creates an answer session description. 1128 // Creates an answer session description.
1282 // Call SendAudioVideoStreamX() before this function 1129 // Call SendAudioVideoStreamX() before this function
1283 // to decide which streams to create. 1130 // to decide which streams to create.
1284 JsepSessionDescription* CreateRemoteAnswer( 1131 JsepSessionDescription* CreateRemoteAnswer(
1285 const SessionDescriptionInterface* offer) { 1132 const SessionDescriptionInterface* offer) {
1286 cricket::MediaSessionOptions options; 1133 cricket::MediaSessionOptions options;
1287 GetOptionsForAnswer(&options); 1134 GetOptionsForAnswer(&options);
1288 options.bundle_enabled = true;
1289 return CreateRemoteAnswer(offer, options, cricket::SEC_REQUIRED); 1135 return CreateRemoteAnswer(offer, options, cricket::SEC_REQUIRED);
1290 } 1136 }
1291 1137
1292 void TestSessionCandidatesWithBundleRtcpMux(bool bundle, bool rtcp_mux) { 1138 void TestSessionCandidatesWithBundleRtcpMux(bool bundle, bool rtcp_mux) {
1293 AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); 1139 AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort));
1294 Init(); 1140 Init();
1295 SendAudioVideoStream1(); 1141 SendAudioVideoStream1();
1296 1142
1297 PeerConnectionInterface::RTCOfferAnswerOptions options; 1143 PeerConnectionInterface::RTCOfferAnswerOptions options;
1298 options.use_rtp_mux = bundle; 1144 options.use_rtp_mux = bundle;
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 InitWithDtlsIdentityGenFail(); 1448 InitWithDtlsIdentityGenFail();
1603 VerifyMultipleAsyncCreateDescriptionAfterInit(false, type); 1449 VerifyMultipleAsyncCreateDescriptionAfterInit(false, type);
1604 } 1450 }
1605 1451
1606 void VerifyMultipleAsyncCreateDescriptionAfterInit( 1452 void VerifyMultipleAsyncCreateDescriptionAfterInit(
1607 bool success, CreateSessionDescriptionRequest::Type type) { 1453 bool success, CreateSessionDescriptionRequest::Type type) {
1608 RTC_CHECK(session_); 1454 RTC_CHECK(session_);
1609 SetFactoryDtlsSrtp(); 1455 SetFactoryDtlsSrtp();
1610 if (type == CreateSessionDescriptionRequest::kAnswer) { 1456 if (type == CreateSessionDescriptionRequest::kAnswer) {
1611 cricket::MediaSessionOptions options; 1457 cricket::MediaSessionOptions options;
1612 GetOptionsForRemoteOffer(&options);
1613 std::unique_ptr<JsepSessionDescription> offer( 1458 std::unique_ptr<JsepSessionDescription> offer(
1614 CreateRemoteOffer(options, cricket::SEC_DISABLED)); 1459 CreateRemoteOffer(options, cricket::SEC_DISABLED));
1615 ASSERT_TRUE(offer.get() != NULL); 1460 ASSERT_TRUE(offer.get() != NULL);
1616 SetRemoteDescriptionWithoutError(offer.release()); 1461 SetRemoteDescriptionWithoutError(offer.release());
1617 } 1462 }
1618 1463
1619 PeerConnectionInterface::RTCOfferAnswerOptions options; 1464 PeerConnectionInterface::RTCOfferAnswerOptions options;
1620 cricket::MediaSessionOptions offer_session_options; 1465 cricket::MediaSessionOptions session_options;
1621 cricket::MediaSessionOptions answer_session_options;
1622 GetOptionsForOffer(options, &offer_session_options);
1623 GetOptionsForAnswer(&answer_session_options);
1624 const int kNumber = 3; 1466 const int kNumber = 3;
1625 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> 1467 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest>
1626 observers[kNumber]; 1468 observers[kNumber];
1627 for (int i = 0; i < kNumber; ++i) { 1469 for (int i = 0; i < kNumber; ++i) {
1628 observers[i] = new WebRtcSessionCreateSDPObserverForTest(); 1470 observers[i] = new WebRtcSessionCreateSDPObserverForTest();
1629 if (type == CreateSessionDescriptionRequest::kOffer) { 1471 if (type == CreateSessionDescriptionRequest::kOffer) {
1630 session_->CreateOffer(observers[i], options, offer_session_options); 1472 session_->CreateOffer(observers[i], options, session_options);
1631 } else { 1473 } else {
1632 session_->CreateAnswer(observers[i], answer_session_options); 1474 session_->CreateAnswer(observers[i], session_options);
1633 } 1475 }
1634 } 1476 }
1635 1477
1636 WebRtcSessionCreateSDPObserverForTest::State expected_state = 1478 WebRtcSessionCreateSDPObserverForTest::State expected_state =
1637 success ? WebRtcSessionCreateSDPObserverForTest::kSucceeded : 1479 success ? WebRtcSessionCreateSDPObserverForTest::kSucceeded :
1638 WebRtcSessionCreateSDPObserverForTest::kFailed; 1480 WebRtcSessionCreateSDPObserverForTest::kFailed;
1639 1481
1640 for (int i = 0; i < kNumber; ++i) { 1482 for (int i = 0; i < kNumber; ++i) {
1641 EXPECT_EQ_WAIT(expected_state, observers[i]->state(), 1000); 1483 EXPECT_EQ_WAIT(expected_state, observers[i]->state(), 1000);
1642 if (success) { 1484 if (success) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1680 PeerConnectionFactoryInterface::Options options_; 1522 PeerConnectionFactoryInterface::Options options_;
1681 PeerConnectionInterface::RTCConfiguration configuration_; 1523 PeerConnectionInterface::RTCConfiguration configuration_;
1682 std::unique_ptr<WebRtcSessionForTest> session_; 1524 std::unique_ptr<WebRtcSessionForTest> session_;
1683 MockIceObserver observer_; 1525 MockIceObserver observer_;
1684 cricket::FakeVideoMediaChannel* video_channel_; 1526 cricket::FakeVideoMediaChannel* video_channel_;
1685 cricket::FakeVoiceMediaChannel* voice_channel_; 1527 cricket::FakeVoiceMediaChannel* voice_channel_;
1686 rtc::scoped_refptr<FakeMetricsObserver> metrics_observer_; 1528 rtc::scoped_refptr<FakeMetricsObserver> metrics_observer_;
1687 // The following flags affect options created for CreateOffer/CreateAnswer. 1529 // The following flags affect options created for CreateOffer/CreateAnswer.
1688 bool send_stream_1_ = false; 1530 bool send_stream_1_ = false;
1689 bool send_stream_2_ = false; 1531 bool send_stream_2_ = false;
1690 bool local_send_audio_ = false; 1532 bool send_audio_ = false;
1691 bool local_send_video_ = false; 1533 bool send_video_ = false;
1692 bool local_recv_audio_ = true;
1693 bool local_recv_video_ = true;
1694 bool remote_send_audio_ = false;
1695 bool remote_send_video_ = false;
1696 bool remote_recv_audio_ = true;
1697 bool remote_recv_video_ = true;
1698 std::vector<cricket::MediaDescriptionOptions> offered_media_sections_;
1699 rtc::scoped_refptr<DataChannel> data_channel_; 1534 rtc::scoped_refptr<DataChannel> data_channel_;
1700 // Last values received from data channel creation signal. 1535 // Last values received from data channel creation signal.
1701 std::string last_data_channel_label_; 1536 std::string last_data_channel_label_;
1702 InternalDataChannelInit last_data_channel_config_; 1537 InternalDataChannelInit last_data_channel_config_;
1703 rtc::CryptoOptions crypto_options_; 1538 rtc::CryptoOptions crypto_options_;
1704 }; 1539 };
1705 1540
1706 TEST_P(WebRtcSessionTest, TestInitializeWithDtls) { 1541 TEST_P(WebRtcSessionTest, TestInitializeWithDtls) {
1707 InitWithDtls(GetParam()); 1542 InitWithDtls(GetParam());
1708 // SDES is disabled when DTLS is on. 1543 // SDES is disabled when DTLS is on.
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1928 // answer without SDES or DTLS --> success 1763 // answer without SDES or DTLS --> success
1929 // TestCreateAnswerReceiveOfferWithoutEncryption: set remote offer and local 1764 // TestCreateAnswerReceiveOfferWithoutEncryption: set remote offer and local
1930 // answer without SDES or DTLS --> success 1765 // answer without SDES or DTLS --> success
1931 // 1766 //
1932 1767
1933 // Test that we return a failure when applying a remote/local offer that doesn't 1768 // Test that we return a failure when applying a remote/local offer that doesn't
1934 // have cryptos enabled when DTLS is off. 1769 // have cryptos enabled when DTLS is off.
1935 TEST_F(WebRtcSessionTest, TestSetNonSdesOfferWhenSdesOn) { 1770 TEST_F(WebRtcSessionTest, TestSetNonSdesOfferWhenSdesOn) {
1936 Init(); 1771 Init();
1937 cricket::MediaSessionOptions options; 1772 cricket::MediaSessionOptions options;
1938 GetOptionsForRemoteOffer(&options); 1773 options.recv_video = true;
1939 JsepSessionDescription* offer = CreateRemoteOffer( 1774 JsepSessionDescription* offer = CreateRemoteOffer(
1940 options, cricket::SEC_DISABLED); 1775 options, cricket::SEC_DISABLED);
1941 ASSERT_TRUE(offer != NULL); 1776 ASSERT_TRUE(offer != NULL);
1942 VerifyNoCryptoParams(offer->description(), false); 1777 VerifyNoCryptoParams(offer->description(), false);
1943 // SetRemoteDescription and SetLocalDescription will take the ownership of 1778 // SetRemoteDescription and SetLocalDescription will take the ownership of
1944 // the offer. 1779 // the offer.
1945 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, offer); 1780 SetRemoteDescriptionOfferExpectError(kSdpWithoutSdesCrypto, offer);
1946 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED); 1781 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED);
1947 ASSERT_TRUE(offer != NULL); 1782 ASSERT_TRUE(offer != NULL);
1948 SetLocalDescriptionOfferExpectError(kSdpWithoutSdesCrypto, offer); 1783 SetLocalDescriptionOfferExpectError(kSdpWithoutSdesCrypto, offer);
(...skipping 25 matching lines...) Expand all
1974 SetRemoteDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer); 1809 SetRemoteDescriptionAnswerExpectError(kSdpWithoutSdesCrypto, answer);
1975 } 1810 }
1976 1811
1977 // Test that we accept an offer with a DTLS fingerprint when DTLS is on 1812 // Test that we accept an offer with a DTLS fingerprint when DTLS is on
1978 // and that we return an answer with a DTLS fingerprint. 1813 // and that we return an answer with a DTLS fingerprint.
1979 TEST_P(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) { 1814 TEST_P(WebRtcSessionTest, TestReceiveDtlsOfferCreateDtlsAnswer) {
1980 SendAudioVideoStream1(); 1815 SendAudioVideoStream1();
1981 InitWithDtls(GetParam()); 1816 InitWithDtls(GetParam());
1982 SetFactoryDtlsSrtp(); 1817 SetFactoryDtlsSrtp();
1983 cricket::MediaSessionOptions options; 1818 cricket::MediaSessionOptions options;
1984 GetOptionsForRemoteOffer(&options); 1819 options.recv_video = true;
1985 JsepSessionDescription* offer = 1820 JsepSessionDescription* offer =
1986 CreateRemoteOffer(options, cricket::SEC_DISABLED); 1821 CreateRemoteOffer(options, cricket::SEC_DISABLED);
1987 ASSERT_TRUE(offer != NULL); 1822 ASSERT_TRUE(offer != NULL);
1988 VerifyFingerprintStatus(offer->description(), true); 1823 VerifyFingerprintStatus(offer->description(), true);
1989 VerifyNoCryptoParams(offer->description(), true); 1824 VerifyNoCryptoParams(offer->description(), true);
1990 1825
1991 // SetRemoteDescription will take the ownership of the offer. 1826 // SetRemoteDescription will take the ownership of the offer.
1992 SetRemoteDescriptionWithoutError(offer); 1827 SetRemoteDescriptionWithoutError(offer);
1993 1828
1994 // Verify that we get a crypto fingerprint in the answer. 1829 // Verify that we get a crypto fingerprint in the answer.
(...skipping 18 matching lines...) Expand all
2013 SessionDescriptionInterface* offer = CreateOffer(); 1848 SessionDescriptionInterface* offer = CreateOffer();
2014 ASSERT_TRUE(offer != NULL); 1849 ASSERT_TRUE(offer != NULL);
2015 VerifyFingerprintStatus(offer->description(), true); 1850 VerifyFingerprintStatus(offer->description(), true);
2016 // Check that we don't have an a=crypto line in the offer. 1851 // Check that we don't have an a=crypto line in the offer.
2017 VerifyNoCryptoParams(offer->description(), true); 1852 VerifyNoCryptoParams(offer->description(), true);
2018 1853
2019 // Now set the local description, which should work, even without a=crypto. 1854 // Now set the local description, which should work, even without a=crypto.
2020 SetLocalDescriptionWithoutError(offer); 1855 SetLocalDescriptionWithoutError(offer);
2021 1856
2022 cricket::MediaSessionOptions options; 1857 cricket::MediaSessionOptions options;
2023 GetOptionsForAnswer(&options); 1858 options.recv_video = true;
2024 JsepSessionDescription* answer = 1859 JsepSessionDescription* answer =
2025 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); 1860 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED);
2026 ASSERT_TRUE(answer != NULL); 1861 ASSERT_TRUE(answer != NULL);
2027 VerifyFingerprintStatus(answer->description(), true); 1862 VerifyFingerprintStatus(answer->description(), true);
2028 VerifyNoCryptoParams(answer->description(), true); 1863 VerifyNoCryptoParams(answer->description(), true);
2029 1864
2030 // SetRemoteDescription will take the ownership of the answer. 1865 // SetRemoteDescription will take the ownership of the answer.
2031 SetRemoteDescriptionWithoutError(answer); 1866 SetRemoteDescriptionWithoutError(answer);
2032 } 1867 }
2033 1868
2034 // Test that if we support DTLS and the other side didn't offer a fingerprint, 1869 // Test that if we support DTLS and the other side didn't offer a fingerprint,
2035 // we will fail to set the remote description. 1870 // we will fail to set the remote description.
2036 TEST_P(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) { 1871 TEST_P(WebRtcSessionTest, TestReceiveNonDtlsOfferWhenDtlsOn) {
2037 InitWithDtls(GetParam()); 1872 InitWithDtls(GetParam());
2038 cricket::MediaSessionOptions options; 1873 cricket::MediaSessionOptions options;
2039 GetOptionsForRemoteOffer(&options); 1874 options.recv_video = true;
2040 options.bundle_enabled = true; 1875 options.bundle_enabled = true;
2041 JsepSessionDescription* offer = CreateRemoteOffer( 1876 JsepSessionDescription* offer = CreateRemoteOffer(
2042 options, cricket::SEC_REQUIRED); 1877 options, cricket::SEC_REQUIRED);
2043 ASSERT_TRUE(offer != NULL); 1878 ASSERT_TRUE(offer != NULL);
2044 VerifyFingerprintStatus(offer->description(), false); 1879 VerifyFingerprintStatus(offer->description(), false);
2045 VerifyCryptoParams(offer->description()); 1880 VerifyCryptoParams(offer->description());
2046 1881
2047 // SetRemoteDescription will take the ownership of the offer. 1882 // SetRemoteDescription will take the ownership of the offer.
2048 SetRemoteDescriptionOfferExpectError( 1883 SetRemoteDescriptionOfferExpectError(
2049 kSdpWithoutDtlsFingerprint, offer); 1884 kSdpWithoutDtlsFingerprint, offer);
(...skipping 17 matching lines...) Expand all
2067 SetRemoteDescriptionWithoutError(offer); 1902 SetRemoteDescriptionWithoutError(offer);
2068 SetLocalDescriptionAnswerExpectError( 1903 SetLocalDescriptionAnswerExpectError(
2069 kSdpWithoutDtlsFingerprint, answer); 1904 kSdpWithoutDtlsFingerprint, answer);
2070 } 1905 }
2071 1906
2072 // Test that we return a failure when applying a remote answer that doesn't have 1907 // Test that we return a failure when applying a remote answer that doesn't have
2073 // a DTLS fingerprint when DTLS is required. 1908 // a DTLS fingerprint when DTLS is required.
2074 TEST_P(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) { 1909 TEST_P(WebRtcSessionTest, TestSetRemoteNonDtlsAnswerWhenDtlsOn) {
2075 InitWithDtls(GetParam()); 1910 InitWithDtls(GetParam());
2076 SessionDescriptionInterface* offer = CreateOffer(); 1911 SessionDescriptionInterface* offer = CreateOffer();
2077 cricket::MediaSessionOptions offer_options; 1912 cricket::MediaSessionOptions options;
2078 GetOptionsForRemoteOffer(&offer_options); 1913 options.recv_video = true;
2079
2080 std::unique_ptr<SessionDescriptionInterface> temp_offer( 1914 std::unique_ptr<SessionDescriptionInterface> temp_offer(
2081 CreateRemoteOffer(offer_options, cricket::SEC_ENABLED)); 1915 CreateRemoteOffer(options, cricket::SEC_ENABLED));
2082 1916 JsepSessionDescription* answer =
2083 cricket::MediaSessionOptions answer_options; 1917 CreateRemoteAnswer(temp_offer.get(), options, cricket::SEC_ENABLED);
2084 GetOptionsForAnswer(&answer_options);
2085 JsepSessionDescription* answer = CreateRemoteAnswer(
2086 temp_offer.get(), answer_options, cricket::SEC_ENABLED);
2087 1918
2088 // SetRemoteDescription and SetLocalDescription will take the ownership of 1919 // SetRemoteDescription and SetLocalDescription will take the ownership of
2089 // the offer and answer. 1920 // the offer and answer.
2090 SetLocalDescriptionWithoutError(offer); 1921 SetLocalDescriptionWithoutError(offer);
2091 SetRemoteDescriptionAnswerExpectError( 1922 SetRemoteDescriptionAnswerExpectError(
2092 kSdpWithoutDtlsFingerprint, answer); 1923 kSdpWithoutDtlsFingerprint, answer);
2093 } 1924 }
2094 1925
2095 // Test that we create a local offer without SDES or DTLS and accept a remote 1926 // Test that we create a local offer without SDES or DTLS and accept a remote
2096 // answer without SDES or DTLS when encryption is disabled. 1927 // answer without SDES or DTLS when encryption is disabled.
2097 TEST_P(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) { 1928 TEST_P(WebRtcSessionTest, TestCreateOfferReceiveAnswerWithoutEncryption) {
2098 SendAudioVideoStream1(); 1929 SendAudioVideoStream1();
2099 options_.disable_encryption = true; 1930 options_.disable_encryption = true;
2100 InitWithDtls(GetParam()); 1931 InitWithDtls(GetParam());
2101 1932
2102 // Verify that we get a crypto fingerprint in the answer. 1933 // Verify that we get a crypto fingerprint in the answer.
2103 SessionDescriptionInterface* offer = CreateOffer(); 1934 SessionDescriptionInterface* offer = CreateOffer();
2104 ASSERT_TRUE(offer != NULL); 1935 ASSERT_TRUE(offer != NULL);
2105 VerifyFingerprintStatus(offer->description(), false); 1936 VerifyFingerprintStatus(offer->description(), false);
2106 // Check that we don't have an a=crypto line in the offer. 1937 // Check that we don't have an a=crypto line in the offer.
2107 VerifyNoCryptoParams(offer->description(), false); 1938 VerifyNoCryptoParams(offer->description(), false);
2108 1939
2109 // Now set the local description, which should work, even without a=crypto. 1940 // Now set the local description, which should work, even without a=crypto.
2110 SetLocalDescriptionWithoutError(offer); 1941 SetLocalDescriptionWithoutError(offer);
2111 1942
2112 cricket::MediaSessionOptions options; 1943 cricket::MediaSessionOptions options;
2113 GetOptionsForAnswer(&options); 1944 options.recv_video = true;
2114 JsepSessionDescription* answer = 1945 JsepSessionDescription* answer =
2115 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); 1946 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED);
2116 ASSERT_TRUE(answer != NULL); 1947 ASSERT_TRUE(answer != NULL);
2117 VerifyFingerprintStatus(answer->description(), false); 1948 VerifyFingerprintStatus(answer->description(), false);
2118 VerifyNoCryptoParams(answer->description(), false); 1949 VerifyNoCryptoParams(answer->description(), false);
2119 1950
2120 // SetRemoteDescription will take the ownership of the answer. 1951 // SetRemoteDescription will take the ownership of the answer.
2121 SetRemoteDescriptionWithoutError(answer); 1952 SetRemoteDescriptionWithoutError(answer);
2122 } 1953 }
2123 1954
2124 // Test that we create a local answer without SDES or DTLS and accept a remote 1955 // Test that we create a local answer without SDES or DTLS and accept a remote
2125 // offer without SDES or DTLS when encryption is disabled. 1956 // offer without SDES or DTLS when encryption is disabled.
2126 TEST_P(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) { 1957 TEST_P(WebRtcSessionTest, TestCreateAnswerReceiveOfferWithoutEncryption) {
2127 options_.disable_encryption = true; 1958 options_.disable_encryption = true;
2128 InitWithDtls(GetParam()); 1959 InitWithDtls(GetParam());
2129 1960
2130 cricket::MediaSessionOptions options; 1961 cricket::MediaSessionOptions options;
2131 GetOptionsForRemoteOffer(&options); 1962 options.recv_video = true;
2132 JsepSessionDescription* offer = 1963 JsepSessionDescription* offer =
2133 CreateRemoteOffer(options, cricket::SEC_DISABLED); 1964 CreateRemoteOffer(options, cricket::SEC_DISABLED);
2134 ASSERT_TRUE(offer != NULL); 1965 ASSERT_TRUE(offer != NULL);
2135 VerifyFingerprintStatus(offer->description(), false); 1966 VerifyFingerprintStatus(offer->description(), false);
2136 VerifyNoCryptoParams(offer->description(), false); 1967 VerifyNoCryptoParams(offer->description(), false);
2137 1968
2138 // SetRemoteDescription will take the ownership of the offer. 1969 // SetRemoteDescription will take the ownership of the offer.
2139 SetRemoteDescriptionWithoutError(offer); 1970 SetRemoteDescriptionWithoutError(offer);
2140 1971
2141 // Verify that we get a crypto fingerprint in the answer. 1972 // Verify that we get a crypto fingerprint in the answer.
(...skipping 12 matching lines...) Expand all
2154 // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=4525 1985 // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=4525
2155 TEST_P(WebRtcSessionTest, TestCreateAnswerWithDifferentSslRoles) { 1986 TEST_P(WebRtcSessionTest, TestCreateAnswerWithDifferentSslRoles) {
2156 SendAudioVideoStream1(); 1987 SendAudioVideoStream1();
2157 InitWithDtls(GetParam()); 1988 InitWithDtls(GetParam());
2158 SetFactoryDtlsSrtp(); 1989 SetFactoryDtlsSrtp();
2159 1990
2160 SessionDescriptionInterface* offer = CreateOffer(); 1991 SessionDescriptionInterface* offer = CreateOffer();
2161 SetLocalDescriptionWithoutError(offer); 1992 SetLocalDescriptionWithoutError(offer);
2162 1993
2163 cricket::MediaSessionOptions options; 1994 cricket::MediaSessionOptions options;
2164 GetOptionsForAnswer(&options); 1995 options.recv_video = true;
2165 1996
2166 // First, negotiate different SSL roles. 1997 // First, negotiate different SSL roles.
2167 SessionDescriptionInterface* answer = 1998 SessionDescriptionInterface* answer =
2168 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); 1999 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED);
2169 TransportInfo* audio_transport_info = 2000 TransportInfo* audio_transport_info =
2170 answer->description()->GetTransportInfoByName("audio"); 2001 answer->description()->GetTransportInfoByName("audio");
2171 audio_transport_info->description.connection_role = 2002 audio_transport_info->description.connection_role =
2172 cricket::CONNECTIONROLE_ACTIVE; 2003 cricket::CONNECTIONROLE_ACTIVE;
2173 TransportInfo* video_transport_info = 2004 TransportInfo* video_transport_info =
2174 answer->description()->GetTransportInfoByName("video"); 2005 answer->description()->GetTransportInfoByName("video");
2175 video_transport_info->description.connection_role = 2006 video_transport_info->description.connection_role =
2176 cricket::CONNECTIONROLE_PASSIVE; 2007 cricket::CONNECTIONROLE_PASSIVE;
2177 SetRemoteDescriptionWithoutError(answer); 2008 SetRemoteDescriptionWithoutError(answer);
2178 2009
2179 // Now create an offer in the reverse direction, and ensure the initial 2010 // Now create an offer in the reverse direction, and ensure the initial
2180 // offerer responds with an answer with correct SSL roles. 2011 // offerer responds with an answer with correct SSL roles.
2181 offer = CreateRemoteOfferWithVersion(options, cricket::SEC_DISABLED, 2012 offer = CreateRemoteOfferWithVersion(options, cricket::SEC_DISABLED,
2182 kSessionVersion, 2013 kSessionVersion,
2183 session_->remote_description()); 2014 session_->remote_description());
2184 SetRemoteDescriptionWithoutError(offer); 2015 SetRemoteDescriptionWithoutError(offer);
2185 2016
2186 cricket::MediaSessionOptions answer_options; 2017 answer = CreateAnswer();
2187 answer_options.bundle_enabled = true;
2188 answer = CreateAnswer(answer_options);
2189 audio_transport_info = answer->description()->GetTransportInfoByName("audio"); 2018 audio_transport_info = answer->description()->GetTransportInfoByName("audio");
2190 EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE, 2019 EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE,
2191 audio_transport_info->description.connection_role); 2020 audio_transport_info->description.connection_role);
2192 video_transport_info = answer->description()->GetTransportInfoByName("video"); 2021 video_transport_info = answer->description()->GetTransportInfoByName("video");
2193 EXPECT_EQ(cricket::CONNECTIONROLE_ACTIVE, 2022 EXPECT_EQ(cricket::CONNECTIONROLE_ACTIVE,
2194 video_transport_info->description.connection_role); 2023 video_transport_info->description.connection_role);
2195 SetLocalDescriptionWithoutError(answer); 2024 SetLocalDescriptionWithoutError(answer);
2196 2025
2197 // Lastly, start BUNDLE-ing on "audio", expecting that the "passive" role of 2026 // Lastly, start BUNDLE-ing on "audio", expecting that the "passive" role of
2198 // audio is transferred over to video in the answer that completes the BUNDLE 2027 // audio is transferred over to video in the answer that completes the BUNDLE
2199 // negotiation. 2028 // negotiation.
2200 options.bundle_enabled = true; 2029 options.bundle_enabled = true;
2201 offer = CreateRemoteOfferWithVersion(options, cricket::SEC_DISABLED, 2030 offer = CreateRemoteOfferWithVersion(options, cricket::SEC_DISABLED,
2202 kSessionVersion, 2031 kSessionVersion,
2203 session_->remote_description()); 2032 session_->remote_description());
2204 SetRemoteDescriptionWithoutError(offer); 2033 SetRemoteDescriptionWithoutError(offer);
2205 answer = CreateAnswer(answer_options); 2034 answer = CreateAnswer();
2206 audio_transport_info = answer->description()->GetTransportInfoByName("audio"); 2035 audio_transport_info = answer->description()->GetTransportInfoByName("audio");
2207 EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE, 2036 EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE,
2208 audio_transport_info->description.connection_role); 2037 audio_transport_info->description.connection_role);
2209 video_transport_info = answer->description()->GetTransportInfoByName("video"); 2038 video_transport_info = answer->description()->GetTransportInfoByName("video");
2210 EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE, 2039 EXPECT_EQ(cricket::CONNECTIONROLE_PASSIVE,
2211 video_transport_info->description.connection_role); 2040 video_transport_info->description.connection_role);
2212 SetLocalDescriptionWithoutError(answer); 2041 SetLocalDescriptionWithoutError(answer);
2213 } 2042 }
2214 2043
2215 TEST_F(WebRtcSessionTest, TestSetLocalOfferTwice) { 2044 TEST_F(WebRtcSessionTest, TestSetLocalOfferTwice) {
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
2556 // is called. 2385 // is called.
2557 EXPECT_EQ(0u, observer_.mline_0_candidates_.size()); 2386 EXPECT_EQ(0u, observer_.mline_0_candidates_.size());
2558 EXPECT_EQ(0u, observer_.mline_1_candidates_.size()); 2387 EXPECT_EQ(0u, observer_.mline_1_candidates_.size());
2559 CreateAndSetRemoteOfferAndLocalAnswer(); 2388 CreateAndSetRemoteOfferAndLocalAnswer();
2560 // Wait until at least one local candidate has been collected. 2389 // Wait until at least one local candidate has been collected.
2561 EXPECT_TRUE_WAIT(0u < observer_.mline_0_candidates_.size(), 2390 EXPECT_TRUE_WAIT(0u < observer_.mline_0_candidates_.size(),
2562 kIceCandidatesTimeout); 2391 kIceCandidatesTimeout);
2563 2392
2564 std::unique_ptr<SessionDescriptionInterface> local_offer(CreateOffer()); 2393 std::unique_ptr<SessionDescriptionInterface> local_offer(CreateOffer());
2565 2394
2566 ASSERT_TRUE(local_offer);
2567 ASSERT_TRUE(local_offer->candidates(kMediaContentIndex0) != NULL); 2395 ASSERT_TRUE(local_offer->candidates(kMediaContentIndex0) != NULL);
2568 EXPECT_LT(0u, local_offer->candidates(kMediaContentIndex0)->count()); 2396 EXPECT_LT(0u, local_offer->candidates(kMediaContentIndex0)->count());
2569 2397
2570 SessionDescriptionInterface* remote_offer(CreateRemoteOffer()); 2398 SessionDescriptionInterface* remote_offer(CreateRemoteOffer());
2571 SetRemoteDescriptionWithoutError(remote_offer); 2399 SetRemoteDescriptionWithoutError(remote_offer);
2572 SessionDescriptionInterface* answer = CreateAnswer(); 2400 SessionDescriptionInterface* answer = CreateAnswer();
2573 ASSERT_TRUE(answer->candidates(kMediaContentIndex0) != NULL); 2401 ASSERT_TRUE(answer->candidates(kMediaContentIndex0) != NULL);
2574 EXPECT_LT(0u, answer->candidates(kMediaContentIndex0)->count()); 2402 EXPECT_LT(0u, answer->candidates(kMediaContentIndex0)->count());
2575 SetLocalDescriptionWithoutError(answer); 2403 SetLocalDescriptionWithoutError(answer);
2576 } 2404 }
2577 2405
2578 // Verifies TransportProxy and media channels are created with content names 2406 // Verifies TransportProxy and media channels are created with content names
2579 // present in the SessionDescription. 2407 // present in the SessionDescription.
2580 TEST_F(WebRtcSessionTest, TestChannelCreationsWithContentNames) { 2408 TEST_F(WebRtcSessionTest, TestChannelCreationsWithContentNames) {
2581 Init(); 2409 Init();
2582 SendAudioVideoStream1(); 2410 SendAudioVideoStream1();
2583 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); 2411 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer());
2584 2412
2585 // CreateOffer creates session description with the content names "audio" and 2413 // CreateOffer creates session description with the content names "audio" and
2586 // "video". Goal is to modify these content names and verify transport 2414 // "video". Goal is to modify these content names and verify transport
2587 // channels 2415 // channels
2588 // in the WebRtcSession, as channels are created with the content names 2416 // in the WebRtcSession, as channels are created with the content names
2589 // present in SDP. 2417 // present in SDP.
2590 std::string sdp; 2418 std::string sdp;
2591 EXPECT_TRUE(offer->ToString(&sdp)); 2419 EXPECT_TRUE(offer->ToString(&sdp));
2420 const std::string kAudioMid = "a=mid:audio";
2421 const std::string kAudioMidReplaceStr = "a=mid:audio_content_name";
2422 const std::string kVideoMid = "a=mid:video";
2423 const std::string kVideoMidReplaceStr = "a=mid:video_content_name";
2424
2425 // Replacing |audio| with |audio_content_name|.
2426 rtc::replace_substrs(kAudioMid.c_str(), kAudioMid.length(),
2427 kAudioMidReplaceStr.c_str(),
2428 kAudioMidReplaceStr.length(),
2429 &sdp);
2430 // Replacing |video| with |video_content_name|.
2431 rtc::replace_substrs(kVideoMid.c_str(), kVideoMid.length(),
2432 kVideoMidReplaceStr.c_str(),
2433 kVideoMidReplaceStr.length(),
2434 &sdp);
2592 2435
2593 SessionDescriptionInterface* modified_offer = 2436 SessionDescriptionInterface* modified_offer =
2594 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, NULL); 2437 CreateSessionDescription(JsepSessionDescription::kOffer, sdp, NULL);
2595 2438
2596 SetRemoteDescriptionWithoutError(modified_offer); 2439 SetRemoteDescriptionWithoutError(modified_offer);
2597 2440
2598 cricket::MediaSessionOptions answer_options; 2441 SessionDescriptionInterface* answer = CreateAnswer();
2599 answer_options.bundle_enabled = false;
2600 SessionDescriptionInterface* answer = CreateAnswer(answer_options);
2601 SetLocalDescriptionWithoutError(answer); 2442 SetLocalDescriptionWithoutError(answer);
2602 2443
2603 rtc::PacketTransportInternal* voice_transport_channel = 2444 rtc::PacketTransportInternal* voice_transport_channel =
2604 session_->voice_rtp_transport_channel(); 2445 session_->voice_rtp_transport_channel();
2605 EXPECT_TRUE(voice_transport_channel != NULL); 2446 EXPECT_TRUE(voice_transport_channel != NULL);
2606 EXPECT_EQ(voice_transport_channel->debug_name(), 2447 EXPECT_EQ(voice_transport_channel->debug_name(),
2607 "audio " + std::to_string(cricket::ICE_CANDIDATE_COMPONENT_RTP)); 2448 "audio_content_name " +
2449 std::to_string(cricket::ICE_CANDIDATE_COMPONENT_RTP));
2608 rtc::PacketTransportInternal* video_transport_channel = 2450 rtc::PacketTransportInternal* video_transport_channel =
2609 session_->video_rtp_transport_channel(); 2451 session_->video_rtp_transport_channel();
2610 ASSERT_TRUE(video_transport_channel != NULL); 2452 ASSERT_TRUE(video_transport_channel != NULL);
2611 EXPECT_EQ(video_transport_channel->debug_name(), 2453 EXPECT_EQ(video_transport_channel->debug_name(),
2612 "video " + std::to_string(cricket::ICE_CANDIDATE_COMPONENT_RTP)); 2454 "video_content_name " +
2455 std::to_string(cricket::ICE_CANDIDATE_COMPONENT_RTP));
2613 EXPECT_TRUE((video_channel_ = media_engine_->GetVideoChannel(0)) != NULL); 2456 EXPECT_TRUE((video_channel_ = media_engine_->GetVideoChannel(0)) != NULL);
2614 EXPECT_TRUE((voice_channel_ = media_engine_->GetVoiceChannel(0)) != NULL); 2457 EXPECT_TRUE((voice_channel_ = media_engine_->GetVoiceChannel(0)) != NULL);
2615 } 2458 }
2616 2459
2617 // Test that an offer contains the correct media content descriptions based on 2460 // Test that an offer contains the correct media content descriptions based on
2618 // the send streams when no constraints have been set. 2461 // the send streams when no constraints have been set.
2619 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraintsOrStreams) { 2462 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraintsOrStreams) {
2620 Init(); 2463 Init();
2621 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); 2464 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer());
2622 2465
2623 ASSERT_TRUE(offer != NULL); 2466 ASSERT_TRUE(offer != NULL);
2624 const cricket::ContentInfo* content = 2467 const cricket::ContentInfo* content =
2625 cricket::GetFirstAudioContent(offer->description()); 2468 cricket::GetFirstAudioContent(offer->description());
2626 ASSERT_TRUE(content != NULL); 2469 EXPECT_TRUE(content != NULL);
2627 EXPECT_EQ(
2628 cricket::MD_RECVONLY,
2629 static_cast<const cricket::AudioContentDescription*>(content->description)
2630 ->direction());
2631 content = cricket::GetFirstVideoContent(offer->description()); 2470 content = cricket::GetFirstVideoContent(offer->description());
2632 ASSERT_TRUE(content != NULL); 2471 EXPECT_TRUE(content == NULL);
2633 EXPECT_EQ(
2634 cricket::MD_RECVONLY,
2635 static_cast<const cricket::VideoContentDescription*>(content->description)
2636 ->direction());
2637 } 2472 }
2638 2473
2639 // Test that an offer contains the correct media content descriptions based on 2474 // Test that an offer contains the correct media content descriptions based on
2640 // the send streams when no constraints have been set. 2475 // the send streams when no constraints have been set.
2641 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraints) { 2476 TEST_F(WebRtcSessionTest, CreateOfferWithoutConstraints) {
2642 Init(); 2477 Init();
2643 // Test Audio only offer. 2478 // Test Audio only offer.
2644 SendAudioOnlyStream2(); 2479 SendAudioOnlyStream2();
2645 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); 2480 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer());
2646 2481
2647 const cricket::ContentInfo* content = 2482 const cricket::ContentInfo* content =
2648 cricket::GetFirstAudioContent(offer->description()); 2483 cricket::GetFirstAudioContent(offer->description());
2649 ASSERT_TRUE(content != NULL); 2484 EXPECT_TRUE(content != NULL);
2650 EXPECT_EQ(
2651 cricket::MD_SENDRECV,
2652 static_cast<const cricket::AudioContentDescription*>(content->description)
2653 ->direction());
2654 content = cricket::GetFirstVideoContent(offer->description()); 2485 content = cricket::GetFirstVideoContent(offer->description());
2655 ASSERT_TRUE(content != NULL); 2486 EXPECT_TRUE(content == NULL);
2656 EXPECT_EQ(
2657 cricket::MD_RECVONLY,
2658 static_cast<const cricket::VideoContentDescription*>(content->description)
2659 ->direction());
2660 2487
2661 // Test Audio / Video offer. 2488 // Test Audio / Video offer.
2662 SendAudioVideoStream1(); 2489 SendAudioVideoStream1();
2663 offer.reset(CreateOffer()); 2490 offer.reset(CreateOffer());
2664 content = cricket::GetFirstAudioContent(offer->description()); 2491 content = cricket::GetFirstAudioContent(offer->description());
2665 ASSERT_TRUE(content != NULL); 2492 EXPECT_TRUE(content != NULL);
2666 EXPECT_EQ(
2667 cricket::MD_SENDRECV,
2668 static_cast<const cricket::AudioContentDescription*>(content->description)
2669 ->direction());
2670
2671 content = cricket::GetFirstVideoContent(offer->description()); 2493 content = cricket::GetFirstVideoContent(offer->description());
2672 ASSERT_TRUE(content != NULL); 2494 EXPECT_TRUE(content != NULL);
2673 EXPECT_EQ(
2674 cricket::MD_SENDRECV,
2675 static_cast<const cricket::VideoContentDescription*>(content->description)
2676 ->direction());
2677 } 2495 }
2678 2496
2679 // Test that an offer contains no media content descriptions if 2497 // Test that an offer contains no media content descriptions if
2680 // kOfferToReceiveVideo and kOfferToReceiveAudio constraints are set to false. 2498 // kOfferToReceiveVideo and kOfferToReceiveAudio constraints are set to false.
2681 TEST_F(WebRtcSessionTest, CreateOfferWithConstraintsWithoutStreams) { 2499 TEST_F(WebRtcSessionTest, CreateOfferWithConstraintsWithoutStreams) {
2682 Init(); 2500 Init();
2683 PeerConnectionInterface::RTCOfferAnswerOptions options; 2501 PeerConnectionInterface::RTCOfferAnswerOptions options;
2684 options.offer_to_receive_audio = 0; 2502 options.offer_to_receive_audio = 0;
2685 options.offer_to_receive_video = 0; 2503 options.offer_to_receive_video = 0;
2686 2504
2687 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); 2505 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options));
2688 2506
2689 ASSERT_TRUE(offer != NULL); 2507 ASSERT_TRUE(offer != NULL);
2690 const cricket::ContentInfo* content = 2508 const cricket::ContentInfo* content =
2691 cricket::GetFirstAudioContent(offer->description()); 2509 cricket::GetFirstAudioContent(offer->description());
2692 EXPECT_TRUE(content == NULL); 2510 EXPECT_TRUE(content == NULL);
2693 content = cricket::GetFirstVideoContent(offer->description()); 2511 content = cricket::GetFirstVideoContent(offer->description());
2694 EXPECT_TRUE(content == NULL); 2512 EXPECT_TRUE(content == NULL);
2695 } 2513 }
2696 2514
2697 // Test that an offer contains only audio media content descriptions if 2515 // Test that an offer contains only audio media content descriptions if
2698 // kOfferToReceiveAudio constraints are set to true. 2516 // kOfferToReceiveAudio constraints are set to true.
2699 TEST_F(WebRtcSessionTest, CreateAudioOnlyOfferWithConstraints) { 2517 TEST_F(WebRtcSessionTest, CreateAudioOnlyOfferWithConstraints) {
2700 Init(); 2518 Init();
2701 PeerConnectionInterface::RTCOfferAnswerOptions options; 2519 PeerConnectionInterface::RTCOfferAnswerOptions options;
2702 options.offer_to_receive_audio = 2520 options.offer_to_receive_audio =
2703 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; 2521 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue;
2704 options.offer_to_receive_video = 0;
2705 2522
2706 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options)); 2523 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer(options));
2707 2524
2708 const cricket::ContentInfo* content = 2525 const cricket::ContentInfo* content =
2709 cricket::GetFirstAudioContent(offer->description()); 2526 cricket::GetFirstAudioContent(offer->description());
2710 EXPECT_TRUE(content != NULL); 2527 EXPECT_TRUE(content != NULL);
2711 content = cricket::GetFirstVideoContent(offer->description()); 2528 content = cricket::GetFirstVideoContent(offer->description());
2712 EXPECT_TRUE(content == NULL); 2529 EXPECT_TRUE(content == NULL);
2713 } 2530 }
2714 2531
(...skipping 14 matching lines...) Expand all
2729 cricket::GetFirstAudioContent(offer->description()); 2546 cricket::GetFirstAudioContent(offer->description());
2730 EXPECT_TRUE(content != NULL); 2547 EXPECT_TRUE(content != NULL);
2731 2548
2732 content = cricket::GetFirstVideoContent(offer->description()); 2549 content = cricket::GetFirstVideoContent(offer->description());
2733 EXPECT_TRUE(content != NULL); 2550 EXPECT_TRUE(content != NULL);
2734 2551
2735 // Sets constraints to false and verifies that audio/video contents are 2552 // Sets constraints to false and verifies that audio/video contents are
2736 // removed. 2553 // removed.
2737 options.offer_to_receive_audio = 0; 2554 options.offer_to_receive_audio = 0;
2738 options.offer_to_receive_video = 0; 2555 options.offer_to_receive_video = 0;
2739 // Remove the media sections added in previous offer.
2740 offered_media_sections_.clear();
2741 offer.reset(CreateOffer(options)); 2556 offer.reset(CreateOffer(options));
2742 2557
2743 content = cricket::GetFirstAudioContent(offer->description()); 2558 content = cricket::GetFirstAudioContent(offer->description());
2744 EXPECT_TRUE(content == NULL); 2559 EXPECT_TRUE(content == NULL);
2745 content = cricket::GetFirstVideoContent(offer->description()); 2560 content = cricket::GetFirstVideoContent(offer->description());
2746 EXPECT_TRUE(content == NULL); 2561 EXPECT_TRUE(content == NULL);
2747 } 2562 }
2748 2563
2749 // Test that an answer can not be created if the last remote description is not 2564 // Test that an answer can not be created if the last remote description is not
2750 // an offer. 2565 // an offer.
(...skipping 23 matching lines...) Expand all
2774 ASSERT_TRUE(content != NULL); 2589 ASSERT_TRUE(content != NULL);
2775 EXPECT_FALSE(content->rejected); 2590 EXPECT_FALSE(content->rejected);
2776 } 2591 }
2777 2592
2778 // Test that an answer contains the correct media content descriptions when no 2593 // Test that an answer contains the correct media content descriptions when no
2779 // constraints have been set and the offer only contain audio. 2594 // constraints have been set and the offer only contain audio.
2780 TEST_F(WebRtcSessionTest, CreateAudioAnswerWithoutConstraintsOrStreams) { 2595 TEST_F(WebRtcSessionTest, CreateAudioAnswerWithoutConstraintsOrStreams) {
2781 Init(); 2596 Init();
2782 // Create a remote offer with audio only. 2597 // Create a remote offer with audio only.
2783 cricket::MediaSessionOptions options; 2598 cricket::MediaSessionOptions options;
2784 GetOptionsForAudioOnlyRemoteOffer(&options);
2785 2599
2786 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options)); 2600 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options));
2787 ASSERT_TRUE(cricket::GetFirstVideoContent(offer->description()) == NULL); 2601 ASSERT_TRUE(cricket::GetFirstVideoContent(offer->description()) == NULL);
2788 ASSERT_TRUE(cricket::GetFirstAudioContent(offer->description()) != NULL); 2602 ASSERT_TRUE(cricket::GetFirstAudioContent(offer->description()) != NULL);
2789 2603
2790 SetRemoteDescriptionWithoutError(offer.release()); 2604 SetRemoteDescriptionWithoutError(offer.release());
2791 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); 2605 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
2792 const cricket::ContentInfo* content = 2606 const cricket::ContentInfo* content =
2793 cricket::GetFirstAudioContent(answer->description()); 2607 cricket::GetFirstAudioContent(answer->description());
2794 ASSERT_TRUE(content != NULL); 2608 ASSERT_TRUE(content != NULL);
(...skipping 24 matching lines...) Expand all
2819 2633
2820 // Test that an answer contains the correct media content descriptions when 2634 // Test that an answer contains the correct media content descriptions when
2821 // constraints have been set but no stream is sent. 2635 // constraints have been set but no stream is sent.
2822 TEST_F(WebRtcSessionTest, CreateAnswerWithConstraintsWithoutStreams) { 2636 TEST_F(WebRtcSessionTest, CreateAnswerWithConstraintsWithoutStreams) {
2823 Init(); 2637 Init();
2824 // Create a remote offer with audio and video content. 2638 // Create a remote offer with audio and video content.
2825 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); 2639 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer());
2826 SetRemoteDescriptionWithoutError(offer.release()); 2640 SetRemoteDescriptionWithoutError(offer.release());
2827 2641
2828 cricket::MediaSessionOptions session_options; 2642 cricket::MediaSessionOptions session_options;
2829 remote_send_audio_ = false; 2643 session_options.recv_audio = false;
2830 remote_send_video_ = false; 2644 session_options.recv_video = false;
2831 local_recv_audio_ = false;
2832 local_recv_video_ = false;
2833 std::unique_ptr<SessionDescriptionInterface> answer( 2645 std::unique_ptr<SessionDescriptionInterface> answer(
2834 CreateAnswer(session_options)); 2646 CreateAnswer(session_options));
2835 2647
2836 const cricket::ContentInfo* content = 2648 const cricket::ContentInfo* content =
2837 cricket::GetFirstAudioContent(answer->description()); 2649 cricket::GetFirstAudioContent(answer->description());
2838 ASSERT_TRUE(content != NULL); 2650 ASSERT_TRUE(content != NULL);
2839 EXPECT_TRUE(content->rejected); 2651 EXPECT_TRUE(content->rejected);
2840 2652
2841 content = cricket::GetFirstVideoContent(answer->description()); 2653 content = cricket::GetFirstVideoContent(answer->description());
2842 ASSERT_TRUE(content != NULL); 2654 ASSERT_TRUE(content != NULL);
2843 EXPECT_TRUE(content->rejected); 2655 EXPECT_TRUE(content->rejected);
2844 } 2656 }
2845 2657
2846 // Test that an answer contains the correct media content descriptions when 2658 // Test that an answer contains the correct media content descriptions when
2847 // constraints have been set and streams are sent. 2659 // constraints have been set and streams are sent.
2848 TEST_F(WebRtcSessionTest, CreateAnswerWithConstraints) { 2660 TEST_F(WebRtcSessionTest, CreateAnswerWithConstraints) {
2849 Init(); 2661 Init();
2850 // Create a remote offer with audio and video content. 2662 // Create a remote offer with audio and video content.
2851 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer()); 2663 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer());
2852 SetRemoteDescriptionWithoutError(offer.release()); 2664 SetRemoteDescriptionWithoutError(offer.release());
2853 2665
2854 cricket::MediaSessionOptions options; 2666 cricket::MediaSessionOptions options;
2667 options.recv_audio = false;
2668 options.recv_video = false;
2669
2855 // Test with a stream with tracks. 2670 // Test with a stream with tracks.
2856 SendAudioVideoStream1(); 2671 SendAudioVideoStream1();
2857 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer(options)); 2672 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer(options));
2858 2673
2859 // TODO(perkj): Should the direction be set to SEND_ONLY? 2674 // TODO(perkj): Should the direction be set to SEND_ONLY?
2860 const cricket::ContentInfo* content = 2675 const cricket::ContentInfo* content =
2861 cricket::GetFirstAudioContent(answer->description()); 2676 cricket::GetFirstAudioContent(answer->description());
2862 ASSERT_TRUE(content != NULL); 2677 ASSERT_TRUE(content != NULL);
2863 EXPECT_FALSE(content->rejected); 2678 EXPECT_FALSE(content->rejected);
2864 2679
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2904 // later updates with video. 2719 // later updates with video.
2905 TEST_F(WebRtcSessionTest, TestAVOfferWithAudioOnlyAnswer) { 2720 TEST_F(WebRtcSessionTest, TestAVOfferWithAudioOnlyAnswer) {
2906 Init(); 2721 Init();
2907 EXPECT_TRUE(media_engine_->GetVideoChannel(0) == NULL); 2722 EXPECT_TRUE(media_engine_->GetVideoChannel(0) == NULL);
2908 EXPECT_TRUE(media_engine_->GetVoiceChannel(0) == NULL); 2723 EXPECT_TRUE(media_engine_->GetVoiceChannel(0) == NULL);
2909 2724
2910 SendAudioVideoStream1(); 2725 SendAudioVideoStream1();
2911 SessionDescriptionInterface* offer = CreateOffer(); 2726 SessionDescriptionInterface* offer = CreateOffer();
2912 2727
2913 cricket::MediaSessionOptions options; 2728 cricket::MediaSessionOptions options;
2914 AddMediaSection(cricket::MEDIA_TYPE_AUDIO, cricket::CN_AUDIO,
2915 cricket::MD_RECVONLY, kActive, &options);
2916 AddMediaSection(cricket::MEDIA_TYPE_VIDEO, cricket::CN_VIDEO,
2917 cricket::MD_INACTIVE, kStopped, &options);
2918 local_recv_video_ = false;
2919 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer, options); 2729 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer, options);
2920 2730
2921 // SetLocalDescription and SetRemoteDescriptions takes ownership of offer 2731 // SetLocalDescription and SetRemoteDescriptions takes ownership of offer
2922 // and answer; 2732 // and answer;
2923 SetLocalDescriptionWithoutError(offer); 2733 SetLocalDescriptionWithoutError(offer);
2924 SetRemoteDescriptionWithoutError(answer); 2734 SetRemoteDescriptionWithoutError(answer);
2925 2735
2926 video_channel_ = media_engine_->GetVideoChannel(0); 2736 video_channel_ = media_engine_->GetVideoChannel(0);
2927 voice_channel_ = media_engine_->GetVoiceChannel(0); 2737 voice_channel_ = media_engine_->GetVoiceChannel(0);
2928 2738
2929 ASSERT_TRUE(video_channel_ == nullptr); 2739 ASSERT_TRUE(video_channel_ == NULL);
2930 2740
2931 ASSERT_EQ(0u, voice_channel_->recv_streams().size()); 2741 ASSERT_EQ(0u, voice_channel_->recv_streams().size());
2932 ASSERT_EQ(1u, voice_channel_->send_streams().size()); 2742 ASSERT_EQ(1u, voice_channel_->send_streams().size());
2933 EXPECT_EQ(kAudioTrack1, voice_channel_->send_streams()[0].id); 2743 EXPECT_EQ(kAudioTrack1, voice_channel_->send_streams()[0].id);
2934 2744
2935 // Let the remote end update the session descriptions, with Audio and Video. 2745 // Let the remote end update the session descriptions, with Audio and Video.
2936 SendAudioVideoStream2(); 2746 SendAudioVideoStream2();
2937 local_recv_video_ = true;
2938 CreateAndSetRemoteOfferAndLocalAnswer(); 2747 CreateAndSetRemoteOfferAndLocalAnswer();
2939 2748
2940 video_channel_ = media_engine_->GetVideoChannel(0); 2749 video_channel_ = media_engine_->GetVideoChannel(0);
2941 voice_channel_ = media_engine_->GetVoiceChannel(0); 2750 voice_channel_ = media_engine_->GetVoiceChannel(0);
2942 2751
2943 ASSERT_TRUE(video_channel_ != nullptr); 2752 ASSERT_TRUE(video_channel_ != NULL);
2944 ASSERT_TRUE(voice_channel_ != nullptr); 2753 ASSERT_TRUE(voice_channel_ != NULL);
2945 2754
2946 ASSERT_EQ(1u, video_channel_->recv_streams().size()); 2755 ASSERT_EQ(1u, video_channel_->recv_streams().size());
2947 ASSERT_EQ(1u, video_channel_->send_streams().size()); 2756 ASSERT_EQ(1u, video_channel_->send_streams().size());
2948 EXPECT_EQ(kVideoTrack2, video_channel_->recv_streams()[0].id); 2757 EXPECT_EQ(kVideoTrack2, video_channel_->recv_streams()[0].id);
2949 EXPECT_EQ(kVideoTrack2, video_channel_->send_streams()[0].id); 2758 EXPECT_EQ(kVideoTrack2, video_channel_->send_streams()[0].id);
2950 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); 2759 ASSERT_EQ(1u, voice_channel_->recv_streams().size());
2951 ASSERT_EQ(1u, voice_channel_->send_streams().size()); 2760 ASSERT_EQ(1u, voice_channel_->send_streams().size());
2952 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); 2761 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id);
2953 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); 2762 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id);
2954 2763
2955 // Change session back to audio only. 2764 // Change session back to audio only.
2956 // The remote side doesn't send and recv video.
2957 SendAudioOnlyStream2(); 2765 SendAudioOnlyStream2();
2958 remote_recv_video_ = false;
2959 CreateAndSetRemoteOfferAndLocalAnswer(); 2766 CreateAndSetRemoteOfferAndLocalAnswer();
2960 2767
2961 video_channel_ = media_engine_->GetVideoChannel(0); 2768 EXPECT_EQ(0u, video_channel_->recv_streams().size());
2962 voice_channel_ = media_engine_->GetVoiceChannel(0);
2963
2964 // The audio is expected to be rejected.
2965 EXPECT_TRUE(video_channel_ == nullptr);
2966
2967 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); 2769 ASSERT_EQ(1u, voice_channel_->recv_streams().size());
2968 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); 2770 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id);
2969 ASSERT_EQ(1u, voice_channel_->send_streams().size()); 2771 ASSERT_EQ(1u, voice_channel_->send_streams().size());
2970 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); 2772 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id);
2971 } 2773 }
2972 2774
2973 // This test verifies the call setup when remote answer with video only and 2775 // This test verifies the call setup when remote answer with video only and
2974 // later updates with audio. 2776 // later updates with audio.
2975 TEST_F(WebRtcSessionTest, TestAVOfferWithVideoOnlyAnswer) { 2777 TEST_F(WebRtcSessionTest, TestAVOfferWithVideoOnlyAnswer) {
2976 Init(); 2778 Init();
2977 EXPECT_TRUE(media_engine_->GetVideoChannel(0) == NULL); 2779 EXPECT_TRUE(media_engine_->GetVideoChannel(0) == NULL);
2978 EXPECT_TRUE(media_engine_->GetVoiceChannel(0) == NULL); 2780 EXPECT_TRUE(media_engine_->GetVoiceChannel(0) == NULL);
2979 SendAudioVideoStream1(); 2781 SendAudioVideoStream1();
2980 SessionDescriptionInterface* offer = CreateOffer(); 2782 SessionDescriptionInterface* offer = CreateOffer();
2981 2783
2982 cricket::MediaSessionOptions options; 2784 cricket::MediaSessionOptions options;
2983 AddMediaSection(cricket::MEDIA_TYPE_AUDIO, cricket::CN_AUDIO, 2785 options.recv_audio = false;
2984 cricket::MD_INACTIVE, kStopped, &options); 2786 options.recv_video = true;
2985 AddMediaSection(cricket::MEDIA_TYPE_VIDEO, cricket::CN_VIDEO, 2787 SessionDescriptionInterface* answer = CreateRemoteAnswer(
2986 cricket::MD_RECVONLY, kActive, &options); 2788 offer, options, cricket::SEC_ENABLED);
2987 local_recv_audio_ = false;
2988 SessionDescriptionInterface* answer =
2989 CreateRemoteAnswer(offer, options, cricket::SEC_ENABLED);
2990 2789
2991 // SetLocalDescription and SetRemoteDescriptions takes ownership of offer 2790 // SetLocalDescription and SetRemoteDescriptions takes ownership of offer
2992 // and answer. 2791 // and answer.
2993 SetLocalDescriptionWithoutError(offer); 2792 SetLocalDescriptionWithoutError(offer);
2994 SetRemoteDescriptionWithoutError(answer); 2793 SetRemoteDescriptionWithoutError(answer);
2995 2794
2996 video_channel_ = media_engine_->GetVideoChannel(0); 2795 video_channel_ = media_engine_->GetVideoChannel(0);
2997 voice_channel_ = media_engine_->GetVoiceChannel(0); 2796 voice_channel_ = media_engine_->GetVoiceChannel(0);
2998 2797
2999 ASSERT_TRUE(voice_channel_ == NULL); 2798 ASSERT_TRUE(voice_channel_ == NULL);
3000 ASSERT_TRUE(video_channel_ != NULL); 2799 ASSERT_TRUE(video_channel_ != NULL);
3001 2800
3002 EXPECT_EQ(0u, video_channel_->recv_streams().size()); 2801 EXPECT_EQ(0u, video_channel_->recv_streams().size());
3003 ASSERT_EQ(1u, video_channel_->send_streams().size()); 2802 ASSERT_EQ(1u, video_channel_->send_streams().size());
3004 EXPECT_EQ(kVideoTrack1, video_channel_->send_streams()[0].id); 2803 EXPECT_EQ(kVideoTrack1, video_channel_->send_streams()[0].id);
3005 2804
3006 // Update the session descriptions, with Audio and Video. 2805 // Update the session descriptions, with Audio and Video.
3007 SendAudioVideoStream2(); 2806 SendAudioVideoStream2();
3008 local_recv_audio_ = true; 2807 CreateAndSetRemoteOfferAndLocalAnswer();
3009 SessionDescriptionInterface* offer2 = CreateRemoteOffer();
3010 SetRemoteDescriptionWithoutError(offer2);
3011 cricket::MediaSessionOptions answer_options;
3012 // Disable the bundling here. If the media is bundled on audio
3013 // transport, then we can't reject the audio because switching the bundled
3014 // transport is not currently supported.
3015 // (https://bugs.chromium.org/p/webrtc/issues/detail?id=6704)
3016 answer_options.bundle_enabled = false;
3017 SessionDescriptionInterface* answer2 = CreateAnswer(answer_options);
3018 SetLocalDescriptionWithoutError(answer2);
3019 2808
3020 voice_channel_ = media_engine_->GetVoiceChannel(0); 2809 voice_channel_ = media_engine_->GetVoiceChannel(0);
2810 ASSERT_TRUE(voice_channel_ != NULL);
3021 2811
3022 ASSERT_TRUE(voice_channel_ != NULL);
3023 ASSERT_EQ(1u, voice_channel_->recv_streams().size()); 2812 ASSERT_EQ(1u, voice_channel_->recv_streams().size());
3024 ASSERT_EQ(1u, voice_channel_->send_streams().size()); 2813 ASSERT_EQ(1u, voice_channel_->send_streams().size());
3025 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id); 2814 EXPECT_EQ(kAudioTrack2, voice_channel_->recv_streams()[0].id);
3026 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id); 2815 EXPECT_EQ(kAudioTrack2, voice_channel_->send_streams()[0].id);
3027 2816
3028 // Change session back to video only. 2817 // Change session back to video only.
3029 // The remote side doesn't send and recv audio.
3030 SendVideoOnlyStream2(); 2818 SendVideoOnlyStream2();
3031 remote_recv_audio_ = false; 2819 CreateAndSetRemoteOfferAndLocalAnswer();
3032 SessionDescriptionInterface* offer3 = CreateRemoteOffer();
3033 SetRemoteDescriptionWithoutError(offer3);
3034 SessionDescriptionInterface* answer3 = CreateAnswer(answer_options);
3035 SetLocalDescriptionWithoutError(answer3);
3036 2820
3037 video_channel_ = media_engine_->GetVideoChannel(0); 2821 video_channel_ = media_engine_->GetVideoChannel(0);
3038 voice_channel_ = media_engine_->GetVoiceChannel(0); 2822 voice_channel_ = media_engine_->GetVoiceChannel(0);
3039 2823
3040 // The video is expected to be rejected.
3041 EXPECT_TRUE(voice_channel_ == nullptr);
3042
3043 ASSERT_EQ(1u, video_channel_->recv_streams().size()); 2824 ASSERT_EQ(1u, video_channel_->recv_streams().size());
3044 EXPECT_EQ(kVideoTrack2, video_channel_->recv_streams()[0].id); 2825 EXPECT_EQ(kVideoTrack2, video_channel_->recv_streams()[0].id);
3045 ASSERT_EQ(1u, video_channel_->send_streams().size()); 2826 ASSERT_EQ(1u, video_channel_->send_streams().size());
3046 EXPECT_EQ(kVideoTrack2, video_channel_->send_streams()[0].id); 2827 EXPECT_EQ(kVideoTrack2, video_channel_->send_streams()[0].id);
3047 } 2828 }
3048 2829
3049 TEST_F(WebRtcSessionTest, VerifyCryptoParamsInSDP) { 2830 TEST_F(WebRtcSessionTest, VerifyCryptoParamsInSDP) {
3050 Init(); 2831 Init();
3051 SendAudioVideoStream1(); 2832 SendAudioVideoStream1();
3052 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); 2833 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer());
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
3237 } 3018 }
3238 3019
3239 // Test that candidates sent to the "video" transport do not get pushed down to 3020 // Test that candidates sent to the "video" transport do not get pushed down to
3240 // the "audio" transport channel when bundling. 3021 // the "audio" transport channel when bundling.
3241 TEST_F(WebRtcSessionTest, TestIgnoreCandidatesForUnusedTransportWhenBundling) { 3022 TEST_F(WebRtcSessionTest, TestIgnoreCandidatesForUnusedTransportWhenBundling) {
3242 AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort)); 3023 AddInterface(rtc::SocketAddress(kClientAddrHost1, kClientAddrPort));
3243 3024
3244 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyBalanced); 3025 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyBalanced);
3245 SendAudioVideoStream1(); 3026 SendAudioVideoStream1();
3246 3027
3247 cricket::MediaSessionOptions offer_options; 3028 PeerConnectionInterface::RTCOfferAnswerOptions options;
3248 GetOptionsForRemoteOffer(&offer_options); 3029 options.use_rtp_mux = true;
3249 offer_options.bundle_enabled = true;
3250 3030
3251 SessionDescriptionInterface* offer = CreateRemoteOffer(offer_options); 3031 SessionDescriptionInterface* offer = CreateRemoteOffer();
3252 SetRemoteDescriptionWithoutError(offer); 3032 SetRemoteDescriptionWithoutError(offer);
3253 3033
3254 cricket::MediaSessionOptions answer_options; 3034 SessionDescriptionInterface* answer = CreateAnswer();
3255 answer_options.bundle_enabled = true;
3256 SessionDescriptionInterface* answer = CreateAnswer(answer_options);
3257 SetLocalDescriptionWithoutError(answer); 3035 SetLocalDescriptionWithoutError(answer);
3258 3036
3259 EXPECT_EQ(session_->voice_rtp_transport_channel(), 3037 EXPECT_EQ(session_->voice_rtp_transport_channel(),
3260 session_->video_rtp_transport_channel()); 3038 session_->video_rtp_transport_channel());
3261 3039
3262 cricket::BaseChannel* voice_channel = session_->voice_channel(); 3040 cricket::BaseChannel* voice_channel = session_->voice_channel();
3263 ASSERT_TRUE(voice_channel != NULL); 3041 ASSERT_TRUE(voice_channel != NULL);
3264 3042
3265 // Checks if one of the transport channels contains a connection using a given 3043 // Checks if one of the transport channels contains a connection using a given
3266 // port. 3044 // port.
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
3411 3189
3412 PeerConnectionInterface::RTCOfferAnswerOptions options; 3190 PeerConnectionInterface::RTCOfferAnswerOptions options;
3413 options.use_rtp_mux = true; 3191 options.use_rtp_mux = true;
3414 3192
3415 SessionDescriptionInterface* offer = CreateOffer(options); 3193 SessionDescriptionInterface* offer = CreateOffer(options);
3416 SetLocalDescriptionWithoutError(offer); 3194 SetLocalDescriptionWithoutError(offer);
3417 3195
3418 EXPECT_EQ(session_->voice_rtp_transport_channel(), 3196 EXPECT_EQ(session_->voice_rtp_transport_channel(),
3419 session_->video_rtp_transport_channel()); 3197 session_->video_rtp_transport_channel());
3420 3198
3421 SendVideoOnlyStream2(); 3199 SendAudioVideoStream2();
3422 local_send_audio_ = false;
3423 remote_recv_audio_ = false;
3424 cricket::MediaSessionOptions recv_options; 3200 cricket::MediaSessionOptions recv_options;
3425 GetOptionsForRemoteAnswer(&recv_options); 3201 recv_options.recv_audio = false;
3202 recv_options.recv_video = true;
3426 SessionDescriptionInterface* answer = 3203 SessionDescriptionInterface* answer =
3427 CreateRemoteAnswer(session_->local_description(), recv_options); 3204 CreateRemoteAnswer(session_->local_description(), recv_options);
3428 SetRemoteDescriptionWithoutError(answer); 3205 SetRemoteDescriptionWithoutError(answer);
3429 3206
3430 EXPECT_TRUE(nullptr == session_->voice_channel()); 3207 EXPECT_TRUE(nullptr == session_->voice_channel());
3431 EXPECT_TRUE(nullptr != session_->video_rtp_transport_channel()); 3208 EXPECT_TRUE(nullptr != session_->video_rtp_transport_channel());
3432 3209
3433 session_->Close(); 3210 session_->Close();
3434 EXPECT_TRUE(nullptr == session_->voice_rtp_transport_channel()); 3211 EXPECT_TRUE(nullptr == session_->voice_rtp_transport_channel());
3435 EXPECT_TRUE(nullptr == session_->voice_rtcp_transport_channel()); 3212 EXPECT_TRUE(nullptr == session_->voice_rtcp_transport_channel());
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3502 // Expect an error when applying the remote description 3279 // Expect an error when applying the remote description
3503 SetRemoteDescriptionExpectError(JsepSessionDescription::kOffer, 3280 SetRemoteDescriptionExpectError(JsepSessionDescription::kOffer,
3504 kCreateChannelFailed, modified_offer); 3281 kCreateChannelFailed, modified_offer);
3505 } 3282 }
3506 3283
3507 // kBundlePolicyMaxCompat bundle policy and answer contains BUNDLE. 3284 // kBundlePolicyMaxCompat bundle policy and answer contains BUNDLE.
3508 TEST_F(WebRtcSessionTest, TestMaxCompatBundleInAnswer) { 3285 TEST_F(WebRtcSessionTest, TestMaxCompatBundleInAnswer) {
3509 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxCompat); 3286 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyMaxCompat);
3510 SendAudioVideoStream1(); 3287 SendAudioVideoStream1();
3511 3288
3512 PeerConnectionInterface::RTCOfferAnswerOptions rtc_options; 3289 PeerConnectionInterface::RTCOfferAnswerOptions options;
3513 rtc_options.use_rtp_mux = true; 3290 options.use_rtp_mux = true;
3514 3291
3515 SessionDescriptionInterface* offer = CreateOffer(rtc_options); 3292 SessionDescriptionInterface* offer = CreateOffer(options);
3516 SetLocalDescriptionWithoutError(offer); 3293 SetLocalDescriptionWithoutError(offer);
3517 3294
3518 EXPECT_NE(session_->voice_rtp_transport_channel(), 3295 EXPECT_NE(session_->voice_rtp_transport_channel(),
3519 session_->video_rtp_transport_channel()); 3296 session_->video_rtp_transport_channel());
3520 3297
3521 SendAudioVideoStream2(); 3298 SendAudioVideoStream2();
3522 SessionDescriptionInterface* answer = 3299 SessionDescriptionInterface* answer =
3523 CreateRemoteAnswer(session_->local_description()); 3300 CreateRemoteAnswer(session_->local_description());
3524 SetRemoteDescriptionWithoutError(answer); 3301 SetRemoteDescriptionWithoutError(answer);
3525 3302
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
3861 SetLocalDescriptionWithoutError(jsep_offer_str); 3638 SetLocalDescriptionWithoutError(jsep_offer_str);
3862 EXPECT_FALSE(session_->voice_channel()->srtp_required_for_testing()); 3639 EXPECT_FALSE(session_->voice_channel()->srtp_required_for_testing());
3863 EXPECT_FALSE(session_->video_channel()->srtp_required_for_testing()); 3640 EXPECT_FALSE(session_->video_channel()->srtp_required_for_testing());
3864 } 3641 }
3865 3642
3866 // This test verifies that an answer contains new ufrag and password if an offer 3643 // This test verifies that an answer contains new ufrag and password if an offer
3867 // with new ufrag and password is received. 3644 // with new ufrag and password is received.
3868 TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewUfragAndPassword) { 3645 TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewUfragAndPassword) {
3869 Init(); 3646 Init();
3870 cricket::MediaSessionOptions options; 3647 cricket::MediaSessionOptions options;
3871 GetOptionsForRemoteOffer(&options); 3648 options.recv_video = true;
3872 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options)); 3649 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options));
3873 SetRemoteDescriptionWithoutError(offer.release()); 3650 SetRemoteDescriptionWithoutError(offer.release());
3874 3651
3875 SendAudioVideoStream1(); 3652 SendAudioVideoStream1();
3876 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); 3653 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
3877 SetLocalDescriptionWithoutError(answer.release()); 3654 SetLocalDescriptionWithoutError(answer.release());
3878 3655
3879 // Receive an offer with new ufrag and password. 3656 // Receive an offer with new ufrag and password.
3880 for (size_t i = 0; i < options.media_description_options.size(); ++i) { 3657 for (const cricket::ContentInfo& content :
3881 options.media_description_options[i].transport_options.ice_restart = true; 3658 session_->local_description()->description()->contents()) {
3659 options.transport_options[content.name].ice_restart = true;
3882 } 3660 }
3883
3884 std::unique_ptr<JsepSessionDescription> updated_offer1( 3661 std::unique_ptr<JsepSessionDescription> updated_offer1(
3885 CreateRemoteOffer(options, session_->remote_description())); 3662 CreateRemoteOffer(options, session_->remote_description()));
3886 SetRemoteDescriptionWithoutError(updated_offer1.release()); 3663 SetRemoteDescriptionWithoutError(updated_offer1.release());
3887 3664
3888 std::unique_ptr<SessionDescriptionInterface> updated_answer1(CreateAnswer()); 3665 std::unique_ptr<SessionDescriptionInterface> updated_answer1(CreateAnswer());
3889 3666
3890 EXPECT_FALSE(IceUfragPwdEqual(updated_answer1->description(), 3667 EXPECT_FALSE(IceUfragPwdEqual(updated_answer1->description(),
3891 session_->local_description()->description())); 3668 session_->local_description()->description()));
3892 3669
3893 // Even a second answer (created before the description is set) should have 3670 // Even a second answer (created before the description is set) should have
3894 // a new ufrag/password. 3671 // a new ufrag/password.
3895 std::unique_ptr<SessionDescriptionInterface> updated_answer2(CreateAnswer()); 3672 std::unique_ptr<SessionDescriptionInterface> updated_answer2(CreateAnswer());
3896 3673
3897 EXPECT_FALSE(IceUfragPwdEqual(updated_answer2->description(), 3674 EXPECT_FALSE(IceUfragPwdEqual(updated_answer2->description(),
3898 session_->local_description()->description())); 3675 session_->local_description()->description()));
3899 3676
3900 SetLocalDescriptionWithoutError(updated_answer2.release()); 3677 SetLocalDescriptionWithoutError(updated_answer2.release());
3901 } 3678 }
3902 3679
3903 // This test verifies that an answer contains new ufrag and password if an offer 3680 // This test verifies that an answer contains new ufrag and password if an offer
3904 // that changes either the ufrag or password (but not both) is received. 3681 // that changes either the ufrag or password (but not both) is received.
3905 // RFC 5245 says: "If the offer contained a change in the a=ice-ufrag or 3682 // RFC 5245 says: "If the offer contained a change in the a=ice-ufrag or
3906 // a=ice-pwd attributes compared to the previous SDP from the peer, it 3683 // a=ice-pwd attributes compared to the previous SDP from the peer, it
3907 // indicates that ICE is restarting for this media stream." 3684 // indicates that ICE is restarting for this media stream."
3908 TEST_F(WebRtcSessionTest, TestOfferChangingOnlyUfragOrPassword) { 3685 TEST_F(WebRtcSessionTest, TestOfferChangingOnlyUfragOrPassword) {
3909 Init(); 3686 Init();
3910 cricket::MediaSessionOptions options; 3687 cricket::MediaSessionOptions options;
3911 GetOptionsForRemoteOffer(&options); 3688 options.recv_audio = true;
3689 options.recv_video = true;
3912 // Create an offer with audio and video. 3690 // Create an offer with audio and video.
3913 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options)); 3691 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options));
3914 SetIceUfragPwd(offer.get(), "original_ufrag", "original_password12345"); 3692 SetIceUfragPwd(offer.get(), "original_ufrag", "original_password12345");
3915 SetRemoteDescriptionWithoutError(offer.release()); 3693 SetRemoteDescriptionWithoutError(offer.release());
3916 3694
3917 SendAudioVideoStream1(); 3695 SendAudioVideoStream1();
3918 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); 3696 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
3919 SetLocalDescriptionWithoutError(answer.release()); 3697 SetLocalDescriptionWithoutError(answer.release());
3920 3698
3921 // Receive an offer with a new ufrag but stale password. 3699 // Receive an offer with a new ufrag but stale password.
(...skipping 19 matching lines...) Expand all
3941 EXPECT_FALSE(IceUfragPwdEqual(updated_answer2->description(), 3719 EXPECT_FALSE(IceUfragPwdEqual(updated_answer2->description(),
3942 session_->local_description()->description())); 3720 session_->local_description()->description()));
3943 SetLocalDescriptionWithoutError(updated_answer2.release()); 3721 SetLocalDescriptionWithoutError(updated_answer2.release());
3944 } 3722 }
3945 3723
3946 // This test verifies that an answer contains old ufrag and password if an offer 3724 // This test verifies that an answer contains old ufrag and password if an offer
3947 // with old ufrag and password is received. 3725 // with old ufrag and password is received.
3948 TEST_F(WebRtcSessionTest, TestCreateAnswerWithOldUfragAndPassword) { 3726 TEST_F(WebRtcSessionTest, TestCreateAnswerWithOldUfragAndPassword) {
3949 Init(); 3727 Init();
3950 cricket::MediaSessionOptions options; 3728 cricket::MediaSessionOptions options;
3951 GetOptionsForRemoteOffer(&options); 3729 options.recv_video = true;
3952 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options)); 3730 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options));
3953 SetRemoteDescriptionWithoutError(offer.release()); 3731 SetRemoteDescriptionWithoutError(offer.release());
3954 3732
3955 SendAudioVideoStream1(); 3733 SendAudioVideoStream1();
3956 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); 3734 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
3957 SetLocalDescriptionWithoutError(answer.release()); 3735 SetLocalDescriptionWithoutError(answer.release());
3958 3736
3959 // Receive an offer without changed ufrag or password. 3737 // Receive an offer without changed ufrag or password.
3960 std::unique_ptr<JsepSessionDescription> updated_offer2( 3738 std::unique_ptr<JsepSessionDescription> updated_offer2(
3961 CreateRemoteOffer(options, session_->remote_description())); 3739 CreateRemoteOffer(options, session_->remote_description()));
3962 SetRemoteDescriptionWithoutError(updated_offer2.release()); 3740 SetRemoteDescriptionWithoutError(updated_offer2.release());
3963 3741
3964 std::unique_ptr<SessionDescriptionInterface> updated_answer2(CreateAnswer()); 3742 std::unique_ptr<SessionDescriptionInterface> updated_answer2(CreateAnswer());
3965 3743
3966 EXPECT_TRUE(IceUfragPwdEqual(updated_answer2->description(), 3744 EXPECT_TRUE(IceUfragPwdEqual(updated_answer2->description(),
3967 session_->local_description()->description())); 3745 session_->local_description()->description()));
3968 3746
3969 SetLocalDescriptionWithoutError(updated_answer2.release()); 3747 SetLocalDescriptionWithoutError(updated_answer2.release());
3970 } 3748 }
3971 3749
3972 // This test verifies that if an offer does an ICE restart on some, but not all 3750 // This test verifies that if an offer does an ICE restart on some, but not all
3973 // media sections, the answer will change the ufrag/password in the correct 3751 // media sections, the answer will change the ufrag/password in the correct
3974 // media sections. 3752 // media sections.
3975 TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewAndOldUfragAndPassword) { 3753 TEST_F(WebRtcSessionTest, TestCreateAnswerWithNewAndOldUfragAndPassword) {
3976 Init(); 3754 Init();
3977 cricket::MediaSessionOptions options; 3755 cricket::MediaSessionOptions options;
3978 GetOptionsForRemoteOffer(&options); 3756 options.recv_video = true;
3757 options.recv_audio = true;
3979 options.bundle_enabled = false; 3758 options.bundle_enabled = false;
3980 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options)); 3759 std::unique_ptr<JsepSessionDescription> offer(CreateRemoteOffer(options));
3981 3760
3982 SetIceUfragPwd(offer.get(), cricket::MEDIA_TYPE_AUDIO, "aaaa", 3761 SetIceUfragPwd(offer.get(), cricket::MEDIA_TYPE_AUDIO, "aaaa",
3983 "aaaaaaaaaaaaaaaaaaaaaa"); 3762 "aaaaaaaaaaaaaaaaaaaaaa");
3984 SetIceUfragPwd(offer.get(), cricket::MEDIA_TYPE_VIDEO, "bbbb", 3763 SetIceUfragPwd(offer.get(), cricket::MEDIA_TYPE_VIDEO, "bbbb",
3985 "bbbbbbbbbbbbbbbbbbbbbb"); 3764 "bbbbbbbbbbbbbbbbbbbbbb");
3986 SetRemoteDescriptionWithoutError(offer.release()); 3765 SetRemoteDescriptionWithoutError(offer.release());
3987 3766
3988 SendAudioVideoStream1(); 3767 SendAudioVideoStream1();
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
4100 CreateDataChannel(); 3879 CreateDataChannel();
4101 InitiateCall(); 3880 InitiateCall();
4102 ASSERT_TRUE(session_->sctp_content_name()); 3881 ASSERT_TRUE(session_->sctp_content_name());
4103 ASSERT_TRUE(session_->sctp_transport_name()); 3882 ASSERT_TRUE(session_->sctp_transport_name());
4104 EXPECT_EQ("data", *session_->sctp_content_name()); 3883 EXPECT_EQ("data", *session_->sctp_content_name());
4105 EXPECT_EQ("data", *session_->sctp_transport_name()); 3884 EXPECT_EQ("data", *session_->sctp_transport_name());
4106 3885
4107 // Create answer that finishes BUNDLE negotiation, which means everything 3886 // Create answer that finishes BUNDLE negotiation, which means everything
4108 // should be bundled on the first transport (audio). 3887 // should be bundled on the first transport (audio).
4109 cricket::MediaSessionOptions answer_options; 3888 cricket::MediaSessionOptions answer_options;
3889 answer_options.recv_video = true;
4110 answer_options.bundle_enabled = true; 3890 answer_options.bundle_enabled = true;
4111 answer_options.data_channel_type = cricket::DCT_SCTP; 3891 answer_options.data_channel_type = cricket::DCT_SCTP;
4112 GetOptionsForAnswer(&answer_options);
4113 SetRemoteDescriptionWithoutError(CreateRemoteAnswer( 3892 SetRemoteDescriptionWithoutError(CreateRemoteAnswer(
4114 session_->local_description(), answer_options, cricket::SEC_DISABLED)); 3893 session_->local_description(), answer_options, cricket::SEC_DISABLED));
4115 ASSERT_TRUE(session_->sctp_content_name()); 3894 ASSERT_TRUE(session_->sctp_content_name());
4116 ASSERT_TRUE(session_->sctp_transport_name()); 3895 ASSERT_TRUE(session_->sctp_transport_name());
4117 EXPECT_EQ("data", *session_->sctp_content_name()); 3896 EXPECT_EQ("data", *session_->sctp_content_name());
4118 EXPECT_EQ("audio", *session_->sctp_transport_name()); 3897 EXPECT_EQ("audio", *session_->sctp_transport_name());
4119 } 3898 }
4120 3899
4121 TEST_P(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) { 3900 TEST_P(WebRtcSessionTest, TestCreateOfferWithSctpEnabledWithoutStreams) {
4122 InitWithDtls(GetParam()); 3901 InitWithDtls(GetParam());
4123 3902
4124 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer()); 3903 std::unique_ptr<SessionDescriptionInterface> offer(CreateOffer());
4125 EXPECT_TRUE(offer->description()->GetContentByName("data") == NULL); 3904 EXPECT_TRUE(offer->description()->GetContentByName("data") == NULL);
4126 EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == NULL); 3905 EXPECT_TRUE(offer->description()->GetTransportInfoByName("data") == NULL);
4127 } 3906 }
4128 3907
4129 TEST_P(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) { 3908 TEST_P(WebRtcSessionTest, TestCreateAnswerWithSctpInOfferAndNoStreams) {
4130 SetFactoryDtlsSrtp(); 3909 SetFactoryDtlsSrtp();
4131 InitWithDtls(GetParam()); 3910 InitWithDtls(GetParam());
4132 3911
4133 // Create remote offer with SCTP. 3912 // Create remote offer with SCTP.
4134 cricket::MediaSessionOptions options; 3913 cricket::MediaSessionOptions options;
4135 options.data_channel_type = cricket::DCT_SCTP; 3914 options.data_channel_type = cricket::DCT_SCTP;
4136 GetOptionsForRemoteOffer(&options);
4137 JsepSessionDescription* offer = 3915 JsepSessionDescription* offer =
4138 CreateRemoteOffer(options, cricket::SEC_DISABLED); 3916 CreateRemoteOffer(options, cricket::SEC_DISABLED);
4139 SetRemoteDescriptionWithoutError(offer); 3917 SetRemoteDescriptionWithoutError(offer);
4140 3918
4141 // Verifies the answer contains SCTP. 3919 // Verifies the answer contains SCTP.
4142 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); 3920 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
4143 EXPECT_TRUE(answer != NULL); 3921 EXPECT_TRUE(answer != NULL);
4144 EXPECT_TRUE(answer->description()->GetContentByName("data") != NULL); 3922 EXPECT_TRUE(answer->description()->GetContentByName("data") != NULL);
4145 EXPECT_TRUE(answer->description()->GetTransportInfoByName("data") != NULL); 3923 EXPECT_TRUE(answer->description()->GetTransportInfoByName("data") != NULL);
4146 } 3924 }
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
4270 } 4048 }
4271 4049
4272 // Verifies that CreateAnswer succeeds when CreateOffer is called before async 4050 // Verifies that CreateAnswer succeeds when CreateOffer is called before async
4273 // identity generation is finished (even if a certificate is provided this is 4051 // identity generation is finished (even if a certificate is provided this is
4274 // an async op). 4052 // an async op).
4275 TEST_P(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) { 4053 TEST_P(WebRtcSessionTest, TestCreateAnswerBeforeIdentityRequestReturnSuccess) {
4276 InitWithDtls(GetParam()); 4054 InitWithDtls(GetParam());
4277 SetFactoryDtlsSrtp(); 4055 SetFactoryDtlsSrtp();
4278 4056
4279 cricket::MediaSessionOptions options; 4057 cricket::MediaSessionOptions options;
4280 GetOptionsForRemoteOffer(&options); 4058 options.recv_video = true;
4281 std::unique_ptr<JsepSessionDescription> offer( 4059 std::unique_ptr<JsepSessionDescription> offer(
4282 CreateRemoteOffer(options, cricket::SEC_DISABLED)); 4060 CreateRemoteOffer(options, cricket::SEC_DISABLED));
4283 ASSERT_TRUE(offer.get() != NULL); 4061 ASSERT_TRUE(offer.get() != NULL);
4284 SetRemoteDescriptionWithoutError(offer.release()); 4062 SetRemoteDescriptionWithoutError(offer.release());
4285 4063
4286 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer()); 4064 std::unique_ptr<SessionDescriptionInterface> answer(CreateAnswer());
4287 EXPECT_TRUE(answer != NULL); 4065 EXPECT_TRUE(answer != NULL);
4288 VerifyNoCryptoParams(answer->description(), true); 4066 VerifyNoCryptoParams(answer->description(), true);
4289 VerifyFingerprintStatus(answer->description(), true); 4067 VerifyFingerprintStatus(answer->description(), true);
4290 } 4068 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
4344 CreateSessionDescriptionRequest::kAnswer); 4122 CreateSessionDescriptionRequest::kAnswer);
4345 } 4123 }
4346 4124
4347 // Verifies that setRemoteDescription fails when DTLS is disabled and the remote 4125 // Verifies that setRemoteDescription fails when DTLS is disabled and the remote
4348 // offer has no SDES crypto but only DTLS fingerprint. 4126 // offer has no SDES crypto but only DTLS fingerprint.
4349 TEST_F(WebRtcSessionTest, TestSetRemoteOfferFailIfDtlsDisabledAndNoCrypto) { 4127 TEST_F(WebRtcSessionTest, TestSetRemoteOfferFailIfDtlsDisabledAndNoCrypto) {
4350 // Init without DTLS. 4128 // Init without DTLS.
4351 Init(); 4129 Init();
4352 // Create a remote offer with secured transport disabled. 4130 // Create a remote offer with secured transport disabled.
4353 cricket::MediaSessionOptions options; 4131 cricket::MediaSessionOptions options;
4354 GetOptionsForRemoteOffer(&options);
4355 JsepSessionDescription* offer(CreateRemoteOffer( 4132 JsepSessionDescription* offer(CreateRemoteOffer(
4356 options, cricket::SEC_DISABLED)); 4133 options, cricket::SEC_DISABLED));
4357 // Adds a DTLS fingerprint to the remote offer. 4134 // Adds a DTLS fingerprint to the remote offer.
4358 cricket::SessionDescription* sdp = offer->description(); 4135 cricket::SessionDescription* sdp = offer->description();
4359 TransportInfo* audio = sdp->GetTransportInfoByName("audio"); 4136 TransportInfo* audio = sdp->GetTransportInfoByName("audio");
4360 ASSERT_TRUE(audio != NULL); 4137 ASSERT_TRUE(audio != NULL);
4361 ASSERT_TRUE(audio->description.identity_fingerprint.get() == NULL); 4138 ASSERT_TRUE(audio->description.identity_fingerprint.get() == NULL);
4362 audio->description.identity_fingerprint.reset( 4139 audio->description.identity_fingerprint.reset(
4363 rtc::SSLFingerprint::CreateFromRfc4572( 4140 rtc::SSLFingerprint::CreateFromRfc4572(
4364 rtc::DIGEST_SHA_256, kFakeDtlsFingerprint)); 4141 rtc::DIGEST_SHA_256, kFakeDtlsFingerprint));
(...skipping 23 matching lines...) Expand all
4388 SetFactoryDtlsSrtp(); 4165 SetFactoryDtlsSrtp();
4389 4166
4390 SendAudioOnlyStream2(); 4167 SendAudioOnlyStream2();
4391 SessionDescriptionInterface* offer = CreateOffer(); 4168 SessionDescriptionInterface* offer = CreateOffer();
4392 SetLocalDescriptionWithoutError(offer); 4169 SetLocalDescriptionWithoutError(offer);
4393 4170
4394 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); 4171 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer);
4395 SetRemoteDescriptionWithoutError(answer); 4172 SetRemoteDescriptionWithoutError(answer);
4396 4173
4397 cricket::MediaSessionOptions options; 4174 cricket::MediaSessionOptions options;
4398 GetOptionsForRemoteOffer(&options); 4175 options.recv_video = true;
4399 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED); 4176 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED);
4400 4177
4401 cricket::Candidate candidate1; 4178 cricket::Candidate candidate1;
4402 candidate1.set_address(rtc::SocketAddress("1.1.1.1", 5000)); 4179 candidate1.set_address(rtc::SocketAddress("1.1.1.1", 5000));
4403 candidate1.set_component(1); 4180 candidate1.set_component(1);
4404 JsepIceCandidate ice_candidate(kMediaContentName1, kMediaContentIndex1, 4181 JsepIceCandidate ice_candidate(kMediaContentName1, kMediaContentIndex1,
4405 candidate1); 4182 candidate1);
4406 EXPECT_TRUE(offer->AddCandidate(&ice_candidate)); 4183 EXPECT_TRUE(offer->AddCandidate(&ice_candidate));
4407 SetRemoteDescriptionWithoutError(offer); 4184 SetRemoteDescriptionWithoutError(offer);
4408 4185
4409 answer = CreateAnswer(); 4186 answer = CreateAnswer();
4410 SetLocalDescriptionWithoutError(answer); 4187 SetLocalDescriptionWithoutError(answer);
4411 } 4188 }
4412 4189
4413 // Tests that we can renegotiate new media content with ICE candidates separated 4190 // Tests that we can renegotiate new media content with ICE candidates separated
4414 // from the remote SDP. 4191 // from the remote SDP.
4415 TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesSeparated) { 4192 TEST_P(WebRtcSessionTest, TestRenegotiateNewMediaWithCandidatesSeparated) {
4416 InitWithDtls(GetParam()); 4193 InitWithDtls(GetParam());
4417 SetFactoryDtlsSrtp(); 4194 SetFactoryDtlsSrtp();
4418 4195
4419 SendAudioOnlyStream2(); 4196 SendAudioOnlyStream2();
4420 SessionDescriptionInterface* offer = CreateOffer(); 4197 SessionDescriptionInterface* offer = CreateOffer();
4421 SetLocalDescriptionWithoutError(offer); 4198 SetLocalDescriptionWithoutError(offer);
4422 4199
4423 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer); 4200 SessionDescriptionInterface* answer = CreateRemoteAnswer(offer);
4424 SetRemoteDescriptionWithoutError(answer); 4201 SetRemoteDescriptionWithoutError(answer);
4425 4202
4426 cricket::MediaSessionOptions options; 4203 cricket::MediaSessionOptions options;
4427 GetOptionsForRemoteOffer(&options); 4204 options.recv_video = true;
4428 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED); 4205 offer = CreateRemoteOffer(options, cricket::SEC_DISABLED);
4429 SetRemoteDescriptionWithoutError(offer); 4206 SetRemoteDescriptionWithoutError(offer);
4430 4207
4431 cricket::Candidate candidate1; 4208 cricket::Candidate candidate1;
4432 candidate1.set_address(rtc::SocketAddress("1.1.1.1", 5000)); 4209 candidate1.set_address(rtc::SocketAddress("1.1.1.1", 5000));
4433 candidate1.set_component(1); 4210 candidate1.set_component(1);
4434 JsepIceCandidate ice_candidate(kMediaContentName1, kMediaContentIndex1, 4211 JsepIceCandidate ice_candidate(kMediaContentName1, kMediaContentIndex1,
4435 candidate1); 4212 candidate1);
4436 EXPECT_TRUE(session_->ProcessIceMessage(&ice_candidate)); 4213 EXPECT_TRUE(session_->ProcessIceMessage(&ice_candidate));
4437 4214
4438 answer = CreateAnswer(); 4215 answer = CreateAnswer();
4439 SetLocalDescriptionWithoutError(answer); 4216 SetLocalDescriptionWithoutError(answer);
4440 } 4217 }
4441 4218
4442 #ifdef HAVE_QUIC 4219 #ifdef HAVE_QUIC
4443 TEST_P(WebRtcSessionTest, TestNegotiateQuic) { 4220 TEST_P(WebRtcSessionTest, TestNegotiateQuic) {
4444 configuration_.enable_quic = true; 4221 configuration_.enable_quic = true;
4445 InitWithDtls(GetParam()); 4222 InitWithDtls(GetParam());
4446 EXPECT_TRUE(session_->data_channel_type() == cricket::DCT_QUIC); 4223 EXPECT_TRUE(session_->data_channel_type() == cricket::DCT_QUIC);
4447 SessionDescriptionInterface* offer = CreateOffer(); 4224 SessionDescriptionInterface* offer = CreateOffer();
4448 ASSERT_TRUE(offer); 4225 ASSERT_TRUE(offer);
4449 ASSERT_TRUE(offer->description()); 4226 ASSERT_TRUE(offer->description());
4450 SetLocalDescriptionWithoutError(offer); 4227 SetLocalDescriptionWithoutError(offer);
4451 cricket::MediaSessionOptions options; 4228 cricket::MediaSessionOptions options;
4452 GetOptionsForAnswer(&options); 4229 options.recv_audio = true;
4230 options.recv_video = true;
4453 SessionDescriptionInterface* answer = 4231 SessionDescriptionInterface* answer =
4454 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED); 4232 CreateRemoteAnswer(offer, options, cricket::SEC_DISABLED);
4455 ASSERT_TRUE(answer); 4233 ASSERT_TRUE(answer);
4456 ASSERT_TRUE(answer->description()); 4234 ASSERT_TRUE(answer->description());
4457 SetRemoteDescriptionWithoutError(answer); 4235 SetRemoteDescriptionWithoutError(answer);
4458 } 4236 }
4459 #endif // HAVE_QUIC 4237 #endif // HAVE_QUIC
4460 4238
4461 // Tests that RTX codec is removed from the answer when it isn't supported 4239 // Tests that RTX codec is removed from the answer when it isn't supported
4462 // by local side. 4240 // by local side.
4463 TEST_F(WebRtcSessionTest, TestRtxRemovedByCreateAnswer) { 4241 TEST_F(WebRtcSessionTest, TestRtxRemovedByCreateAnswer) {
4464 Init(); 4242 Init();
4465 // Send video only to match the |kSdpWithRtx|. 4243 SendAudioVideoStream1();
4466 SendVideoOnlyStream2();
4467 std::string offer_sdp(kSdpWithRtx); 4244 std::string offer_sdp(kSdpWithRtx);
4468 4245
4469 SessionDescriptionInterface* offer = 4246 SessionDescriptionInterface* offer =
4470 CreateSessionDescription(JsepSessionDescription::kOffer, offer_sdp, NULL); 4247 CreateSessionDescription(JsepSessionDescription::kOffer, offer_sdp, NULL);
4471 EXPECT_TRUE(offer->ToString(&offer_sdp)); 4248 EXPECT_TRUE(offer->ToString(&offer_sdp));
4472 4249
4473 // Offer SDP contains the RTX codec. 4250 // Offer SDP contains the RTX codec.
4474 EXPECT_TRUE(ContainsVideoCodecWithName(offer, "rtx")); 4251 EXPECT_TRUE(ContainsVideoCodecWithName(offer, "rtx"));
4475 SetRemoteDescriptionWithoutError(offer); 4252 SetRemoteDescriptionWithoutError(offer);
4476 4253
4477 // |offered_media_sections_| is used when creating answer.
4478 offered_media_sections_.push_back(cricket::MediaDescriptionOptions(
4479 cricket::MEDIA_TYPE_VIDEO, cricket::CN_VIDEO,
4480 cricket::RtpTransceiverDirection(true, true), false));
4481 // Don't create media section for audio in the answer.
4482 SessionDescriptionInterface* answer = CreateAnswer(); 4254 SessionDescriptionInterface* answer = CreateAnswer();
4483 // Answer SDP does not contain the RTX codec. 4255 // Answer SDP does not contain the RTX codec.
4484 EXPECT_FALSE(ContainsVideoCodecWithName(answer, "rtx")); 4256 EXPECT_FALSE(ContainsVideoCodecWithName(answer, "rtx"));
4485 SetLocalDescriptionWithoutError(answer); 4257 SetLocalDescriptionWithoutError(answer);
4486 } 4258 }
4487 4259
4488 // This verifies that the voice channel after bundle has both options from video 4260 // This verifies that the voice channel after bundle has both options from video
4489 // and voice channels. 4261 // and voice channels.
4490 TEST_F(WebRtcSessionTest, TestSetSocketOptionBeforeBundle) { 4262 TEST_F(WebRtcSessionTest, TestSetSocketOptionBeforeBundle) {
4491 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyBalanced); 4263 InitWithBundlePolicy(PeerConnectionInterface::kBundlePolicyBalanced);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
4537 // and make sure we got success/failure callbacks for all of the requests. 4309 // and make sure we got success/failure callbacks for all of the requests.
4538 // Background: crbug.com/507307 4310 // Background: crbug.com/507307
4539 TEST_F(WebRtcSessionTest, CreateOffersAndShutdown) { 4311 TEST_F(WebRtcSessionTest, CreateOffersAndShutdown) {
4540 Init(); 4312 Init();
4541 4313
4542 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> observers[100]; 4314 rtc::scoped_refptr<WebRtcSessionCreateSDPObserverForTest> observers[100];
4543 PeerConnectionInterface::RTCOfferAnswerOptions options; 4315 PeerConnectionInterface::RTCOfferAnswerOptions options;
4544 options.offer_to_receive_audio = 4316 options.offer_to_receive_audio =
4545 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue; 4317 RTCOfferAnswerOptions::kOfferToReceiveMediaTrue;
4546 cricket::MediaSessionOptions session_options; 4318 cricket::MediaSessionOptions session_options;
4547 GetOptionsForOffer(options, &session_options); 4319 session_options.recv_audio = true;
4320
4548 for (auto& o : observers) { 4321 for (auto& o : observers) {
4549 o = new WebRtcSessionCreateSDPObserverForTest(); 4322 o = new WebRtcSessionCreateSDPObserverForTest();
4550 session_->CreateOffer(o, options, session_options); 4323 session_->CreateOffer(o, options, session_options);
4551 } 4324 }
4552 4325
4553 session_.reset(); 4326 session_.reset();
4554 4327
4555 for (auto& o : observers) { 4328 for (auto& o : observers) {
4556 // We expect to have received a notification now even if the session was 4329 // We expect to have received a notification now even if the session was
4557 // terminated. The offer creation may or may not have succeeded, but we 4330 // terminated. The offer creation may or may not have succeeded, but we
4558 // must have received a notification which, so the only invalid state 4331 // must have received a notification which, so the only invalid state
4559 // is kInit. 4332 // is kInit.
4560 EXPECT_NE(WebRtcSessionCreateSDPObserverForTest::kInit, o->state()); 4333 EXPECT_NE(WebRtcSessionCreateSDPObserverForTest::kInit, o->state());
4561 } 4334 }
4562 } 4335 }
4563 4336
4564 TEST_F(WebRtcSessionTest, TestPacketOptionsAndOnPacketSent) { 4337 TEST_F(WebRtcSessionTest, TestPacketOptionsAndOnPacketSent) {
4565 TestPacketOptions(); 4338 TestPacketOptions();
4566 } 4339 }
4567 4340
4568 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test 4341 // TODO(bemasc): Add a TestIceStatesBundle with BUNDLE enabled. That test
4569 // currently fails because upon disconnection and reconnection OnIceComplete is 4342 // currently fails because upon disconnection and reconnection OnIceComplete is
4570 // called more than once without returning to IceGatheringGathering. 4343 // called more than once without returning to IceGatheringGathering.
4571 4344
4572 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests, 4345 INSTANTIATE_TEST_CASE_P(WebRtcSessionTests,
4573 WebRtcSessionTest, 4346 WebRtcSessionTest,
4574 testing::Values(ALREADY_GENERATED, 4347 testing::Values(ALREADY_GENERATED,
4575 DTLS_IDENTITY_STORE)); 4348 DTLS_IDENTITY_STORE));
OLDNEW
« no previous file with comments | « webrtc/pc/peerconnectioninterface_unittest.cc ('k') | webrtc/pc/webrtcsessiondescriptionfactory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698