Make the default value of rtcp-mux policy to required.

Change the default value of rtcp-mux policy in RTCConfiguration.
Refactor the peerconnectioninterface and webrtcsession unit tests.

BUG=webrtc:6030

Review-Url: https://codereview.webrtc.org/2043193003
Cr-Original-Commit-Position: refs/heads/master@{#15217}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 4dfb8cef514bf030f08d61289543e32127366f12
diff --git a/api/android/java/src/org/webrtc/PeerConnection.java b/api/android/java/src/org/webrtc/PeerConnection.java
index 359b52e..ab08598 100644
--- a/api/android/java/src/org/webrtc/PeerConnection.java
+++ b/api/android/java/src/org/webrtc/PeerConnection.java
@@ -146,7 +146,7 @@
     public RTCConfiguration(List<IceServer> iceServers) {
       iceTransportsType = IceTransportsType.ALL;
       bundlePolicy = BundlePolicy.BALANCED;
-      rtcpMuxPolicy = RtcpMuxPolicy.NEGOTIATE;
+      rtcpMuxPolicy = RtcpMuxPolicy.REQUIRE;
       tcpCandidatePolicy = TcpCandidatePolicy.ENABLED;
       candidateNetworkPolicy = candidateNetworkPolicy.ALL;
       this.iceServers = iceServers;
diff --git a/api/peerconnectioninterface.h b/api/peerconnectioninterface.h
index b304b14..e14b79c 100644
--- a/api/peerconnectioninterface.h
+++ b/api/peerconnectioninterface.h
@@ -295,7 +295,7 @@
     // at the same time.
     IceServers servers;
     BundlePolicy bundle_policy = kBundlePolicyBalanced;
-    RtcpMuxPolicy rtcp_mux_policy = kRtcpMuxPolicyNegotiate;
+    RtcpMuxPolicy rtcp_mux_policy = kRtcpMuxPolicyRequire;
     TcpCandidatePolicy tcp_candidate_policy = kTcpCandidatePolicyEnabled;
     CandidateNetworkPolicy candidate_network_policy =
         kCandidateNetworkPolicyAll;
diff --git a/api/peerconnectioninterface_unittest.cc b/api/peerconnectioninterface_unittest.cc
index c351412..0726c75 100644
--- a/api/peerconnectioninterface_unittest.cc
+++ b/api/peerconnectioninterface_unittest.cc
@@ -79,6 +79,7 @@
     "m=audio 1 RTP/AVPF 103\r\n"
     "a=mid:audio\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:103 ISAC/16000\r\n"
     "a=ssrc:1 cname:stream1\r\n"
     "a=ssrc:1 mslabel:stream1\r\n"
@@ -86,6 +87,7 @@
     "m=video 1 RTP/AVPF 120\r\n"
     "a=mid:video\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:120 VP8/90000\r\n"
     "a=ssrc:2 cname:stream1\r\n"
     "a=ssrc:2 mslabel:stream1\r\n"
@@ -108,7 +110,8 @@
     "a=rtpmap:103 ISAC/16000\r\n"
     "a=ssrc:1 cname:stream1\r\n"
     "a=ssrc:1 mslabel:stream1\r\n"
-    "a=ssrc:1 label:audiotrack0\r\n";
+    "a=ssrc:1 label:audiotrack0\r\n"
+    "a=rtcp-mux\r\n";
 
 // Reference SDP with two MediaStreams with label "stream1" and "stream2. Each
 // MediaStreams have one audio track and one video track.
@@ -126,6 +129,7 @@
     "m=audio 1 RTP/AVPF 103\r\n"
     "a=mid:audio\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:103 ISAC/16000\r\n"
     "a=ssrc:1 cname:stream1\r\n"
     "a=ssrc:1 msid:stream1 audiotrack0\r\n"
@@ -134,6 +138,7 @@
     "m=video 1 RTP/AVPF 120\r\n"
     "a=mid:video\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:120 VP8/0\r\n"
     "a=ssrc:2 cname:stream1\r\n"
     "a=ssrc:2 msid:stream1 videotrack0\r\n"
@@ -153,10 +158,12 @@
     "m=audio 1 RTP/AVPF 103\r\n"
     "a=mid:audio\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:103 ISAC/16000\r\n"
     "m=video 1 RTP/AVPF 120\r\n"
     "a=mid:video\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:120 VP8/90000\r\n";
 
 // Reference SDP without MediaStreams. Msid is supported.
@@ -173,10 +180,12 @@
     "m=audio 1 RTP/AVPF 103\r\n"
     "a=mid:audio\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:103 ISAC/16000\r\n"
     "m=video 1 RTP/AVPF 120\r\n"
     "a=mid:video\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:120 VP8/90000\r\n";
 
 // Reference SDP without MediaStreams and audio only.
@@ -192,6 +201,7 @@
     "m=audio 1 RTP/AVPF 103\r\n"
     "a=mid:audio\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:103 ISAC/16000\r\n";
 
 // Reference SENDONLY SDP without MediaStreams. Msid is not supported.
@@ -208,11 +218,13 @@
     "a=mid:audio\r\n"
     "a=sendrecv\r\n"
     "a=sendonly\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:103 ISAC/16000\r\n"
     "m=video 1 RTP/AVPF 120\r\n"
     "a=mid:video\r\n"
     "a=sendrecv\r\n"
     "a=sendonly\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:120 VP8/90000\r\n";
 
 static const char kSdpStringInit[] =
@@ -230,12 +242,14 @@
     "m=audio 1 RTP/AVPF 103\r\n"
     "a=mid:audio\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:103 ISAC/16000\r\n";
 
 static const char kSdpStringVideo[] =
     "m=video 1 RTP/AVPF 120\r\n"
     "a=mid:video\r\n"
     "a=sendrecv\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:120 VP8/90000\r\n";
 
 static const char kSdpStringMs1Audio0[] =
diff --git a/api/test/testsdpstrings.h b/api/test/testsdpstrings.h
index 158b16c..b203aad 100644
--- a/api/test/testsdpstrings.h
+++ b/api/test/testsdpstrings.h
@@ -29,6 +29,7 @@
     "c=IN IP4 74.95.2.170\r\n"
     "a=rtpmap:109 opus/48000/2\r\n"
     "a=ptime:20\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:0 PCMU/8000\r\n"
     "a=rtpmap:8 PCMA/8000\r\n"
     "a=rtpmap:101 telephone-event/8000\r\n"
@@ -46,6 +47,7 @@
     " 10.0.254.2 rport 50962\r\n"
     "m=video 38826 RTP/SAVPF 120\r\n"
     "c=IN IP4 74.95.2.170\r\n"
+    "a=rtcp-mux\r\n"
     "a=rtpmap:120 VP8/90000\r\n"
     "a=sendrecv\r\n"
     "a=candidate:0 1 UDP 2112946431 172.16.191.1 62017 typ host\r\n"
diff --git a/api/webrtcsession_unittest.cc b/api/webrtcsession_unittest.cc
index 6efb996..aa1159b 100644
--- a/api/webrtcsession_unittest.cc
+++ b/api/webrtcsession_unittest.cc
@@ -383,7 +383,8 @@
   // options. When DTLS is enabled a certificate will be used if provided,
   // otherwise one will be generated using the |cert_generator|.
   void Init(
-      std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator) {
+      std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator,
+      PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) {
     ASSERT_TRUE(session_.get() == NULL);
     session_.reset(new WebRtcSessionForTest(
         media_controller_.get(), rtc::Thread::Current(), rtc::Thread::Current(),
@@ -397,6 +398,7 @@
     session_->GetOnDestroyedSignal()->connect(
         this, &WebRtcSessionTest::OnSessionDestroyed);
 
+    configuration_.rtcp_mux_policy = rtcp_mux_policy;
     EXPECT_EQ(PeerConnectionInterface::kIceConnectionNew,
         observer_.ice_connection_state_);
     EXPECT_EQ(PeerConnectionInterface::kIceGatheringNew,
@@ -415,7 +417,13 @@
 
   void OnSessionDestroyed() { session_destroyed_ = true; }
 
-  void Init() { Init(nullptr); }
+  void Init() {
+    Init(nullptr, PeerConnectionInterface::kRtcpMuxPolicyNegotiate);
+  }
+
+  void Init(PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) {
+    Init(nullptr, rtcp_mux_policy);
+  }
 
   void InitWithBundlePolicy(
       PeerConnectionInterface::BundlePolicy bundle_policy) {
@@ -426,8 +434,7 @@
   void InitWithRtcpMuxPolicy(
       PeerConnectionInterface::RtcpMuxPolicy rtcp_mux_policy) {
     PeerConnectionInterface::RTCConfiguration configuration;
-    configuration_.rtcp_mux_policy = rtcp_mux_policy;
-    Init();
+    Init(rtcp_mux_policy);
   }
 
   // Successfully init with DTLS; with a certificate generated and supplied or
@@ -443,7 +450,8 @@
     } else {
       RTC_CHECK(false);
     }
-    Init(std::move(cert_generator));
+    Init(std::move(cert_generator),
+         PeerConnectionInterface::kRtcpMuxPolicyNegotiate);
   }
 
   // Init with DTLS with a store that will fail to generate a certificate.
@@ -451,7 +459,8 @@
     std::unique_ptr<FakeRTCCertificateGenerator> cert_generator(
         new FakeRTCCertificateGenerator());
     cert_generator->set_should_fail(true);
-    Init(std::move(cert_generator));
+    Init(std::move(cert_generator),
+         PeerConnectionInterface::kRtcpMuxPolicyNegotiate);
   }
 
   void InitWithDtmfCodec() {
@@ -3347,10 +3356,8 @@
   // answer to find out if more transports are needed.
   configuration_.bundle_policy =
       PeerConnectionInterface::kBundlePolicyMaxBundle;
-  configuration_.rtcp_mux_policy =
-      PeerConnectionInterface::kRtcpMuxPolicyRequire;
   options_.disable_encryption = true;
-  Init();
+  Init(PeerConnectionInterface::kRtcpMuxPolicyRequire);
 
   // Negotiate an audio channel with MAX_BUNDLE enabled.
   SendAudioOnlyStream2();