Remove another DCHECK that fails during renegotiation.

Also adds a test case that catches both this DCHECK and the previous
one.

Bug: webrtc:9719
Change-Id: I590544a13cd178274e9c11b698c4694fd5cf0d59
No-Try: True
Tbr: steveanton@webrtc.org
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/140802
Reviewed-by: Bjorn Mellem <mellem@webrtc.org>
Commit-Queue: Bjorn Mellem <mellem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28185}
diff --git a/pc/composite_rtp_transport.cc b/pc/composite_rtp_transport.cc
index bdeaacd..61d9990 100644
--- a/pc/composite_rtp_transport.cc
+++ b/pc/composite_rtp_transport.cc
@@ -73,8 +73,6 @@
 
   auto it = absl::c_find(transports_, transport);
   if (it == transports_.end()) {
-    RTC_NOTREACHED() << "Callers should not remove transports they did not "
-                        "include in the composite";
     return;
   }
 
diff --git a/pc/jsep_transport_controller_unittest.cc b/pc/jsep_transport_controller_unittest.cc
index 353a659..7b91ad8 100644
--- a/pc/jsep_transport_controller_unittest.cc
+++ b/pc/jsep_transport_controller_unittest.cc
@@ -2415,6 +2415,51 @@
             fake_params);
 }
 
+TEST_P(JsepTransportControllerDatagramTest,
+       RenegotiationKeepsDatagramTransport) {
+  cricket::OpaqueTransportParameters fake_params = CreateTransportParameters();
+  if (IsOfferer()) {
+    EXPECT_EQ(transport_controller_->GetTransportParameters(kAudioMid1),
+              fake_params);
+    EXPECT_EQ(transport_controller_->GetTransportParameters(kVideoMid1),
+              fake_params);
+  }
+
+  auto offer = CreateSessionDescriptionForDatagramTransport(fake_params);
+  EXPECT_TRUE(SetDescription(SdpType::kOffer, offer.get()).ok());
+
+  EXPECT_EQ(transport_controller_->GetTransportParameters(kAudioMid1),
+            fake_params);
+  EXPECT_EQ(transport_controller_->GetTransportParameters(kVideoMid1),
+            fake_params);
+
+  auto answer = CreateSessionDescriptionForDatagramTransport(fake_params);
+  EXPECT_TRUE(SetDescription(SdpType::kAnswer, answer.get()).ok());
+
+  EXPECT_EQ(transport_controller_->GetTransportParameters(kAudioMid1),
+            fake_params);
+  EXPECT_EQ(transport_controller_->GetTransportParameters(kVideoMid1),
+            fake_params);
+
+  // Attempting to remove a datagram transport on a re-offer does not cause an
+  // error, but also does not remove the datagram transport.
+  auto reoffer = CreateSessionDescriptionForDatagramTransport(fake_params);
+  EXPECT_TRUE(SetDescription(SdpType::kOffer, reoffer.get()).ok());
+
+  EXPECT_EQ(transport_controller_->GetTransportParameters(kAudioMid1),
+            fake_params);
+  EXPECT_EQ(transport_controller_->GetTransportParameters(kVideoMid1),
+            fake_params);
+
+  auto reanswer = CreateSessionDescriptionForDatagramTransport(fake_params);
+  EXPECT_TRUE(SetDescription(SdpType::kAnswer, reanswer.get()).ok());
+
+  EXPECT_EQ(transport_controller_->GetTransportParameters(kAudioMid1),
+            fake_params);
+  EXPECT_EQ(transport_controller_->GetTransportParameters(kVideoMid1),
+            fake_params);
+}
+
 INSTANTIATE_TEST_SUITE_P(
     JsepTransportControllerDatagramTests,
     JsepTransportControllerDatagramTest,