Ensure Answer after PrAnswer can change usage from CCFB to TWCC feedback

Bug: webrtc:448848876
Change-Id: I991ac772b78dab26bebf3dd8716fda8ec4c2510f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/422801
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#46119}
diff --git a/call/BUILD.gn b/call/BUILD.gn
index effafa2..4350e0e 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -688,6 +688,7 @@
       ":rtp_interfaces",
       "../api:fec_controller_api",
       "../api:frame_transformer_interface",
+      "../api:rtp_parameters",
       "../api:scoped_refptr",
       "../api/transport:bandwidth_estimation_settings",
       "../api/transport:bitrate_settings",
diff --git a/call/call.cc b/call/call.cc
index 716da8b..97a54dc 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -1173,10 +1173,8 @@
 
 void Call::SetPreferredRtcpCcAckType(
     RtcpFeedbackType preferred_rtcp_cc_ack_type) {
-  if (preferred_rtcp_cc_ack_type == RtcpFeedbackType::CCFB) {
-    receive_side_cc_.EnableSendCongestionControlFeedbackAccordingToRfc8888();
-    transport_send_->EnableCongestionControlFeedbackAccordingToRfc8888();
-  }  //  else default to transport CC if correct header extension is negotiated
+  receive_side_cc_.SetPreferredRtcpCcAckType(preferred_rtcp_cc_ack_type);
+  transport_send_->SetPreferredRtcpCcAckType(preferred_rtcp_cc_ack_type);
 }
 
 std::optional<int> Call::FeedbackAccordingToRfc8888Count() {
diff --git a/call/rtp_transport_controller_send.cc b/call/rtp_transport_controller_send.cc
index 880855b..cea947b 100644
--- a/call/rtp_transport_controller_send.cc
+++ b/call/rtp_transport_controller_send.cc
@@ -25,6 +25,7 @@
 #include "api/frame_transformer_interface.h"
 #include "api/rtc_event_log/rtc_event_log.h"
 #include "api/rtp_packet_sender.h"
+#include "api/rtp_parameters.h"
 #include "api/scoped_refptr.h"
 #include "api/sequence_checker.h"
 #include "api/task_queue/pending_task_safety_flag.h"
@@ -398,7 +399,9 @@
         network_route.connected, network_route.packet_overhead));
     if (rfc_8888_feedback_negotiated_) {
       sending_packets_as_ect1_ = true;
-      packet_router_.ConfigureForRfc8888Feedback(sending_packets_as_ect1_);
+      packet_router_.ConfigureForRtcpFeedback(
+          /*set_transport_seq=*/rfc_8888_feedback_negotiated_,
+          sending_packets_as_ect1_);
     }
     NetworkRouteChange msg;
     msg.at_time = env_.clock().CurrentTime();
@@ -629,16 +632,24 @@
       packet, pacing_info, transport_overhead_bytes_per_packet_, creation_time);
 }
 
-void RtpTransportControllerSend::
-    EnableCongestionControlFeedbackAccordingToRfc8888() {
+void RtpTransportControllerSend::SetPreferredRtcpCcAckType(
+    RtcpFeedbackType preferred_rtcp_cc_ack_type) {
   RTC_DCHECK_RUN_ON(&sequence_checker_);
-  rfc_8888_feedback_negotiated_ = true;
-  sending_packets_as_ect1_ = true;
-  RTC_LOG(LS_INFO) << "EnableCongestionControlFeedbackAccordingToRfc8888";
-  // TODO: bugs.webrtc.org/447037083 - Implement support for re-enabling
-  // transport sequence number feedback on PR-Answer - and possibly stop using
-  // Scream.
-  packet_router_.ConfigureForRfc8888Feedback(sending_packets_as_ect1_);
+  RTC_DCHECK(preferred_rtcp_cc_ack_type == RtcpFeedbackType::CCFB ||
+             preferred_rtcp_cc_ack_type == RtcpFeedbackType::TRANSPORT_CC);
+  if (preferred_rtcp_cc_ack_type == RtcpFeedbackType::CCFB) {
+    rfc_8888_feedback_negotiated_ = true;
+    sending_packets_as_ect1_ = true;
+    RTC_LOG_F(LS_INFO)
+        << "Sending packets as ECT1(1) and assume RFC 8888 feedback.";
+  } else {
+    rfc_8888_feedback_negotiated_ = false;
+    sending_packets_as_ect1_ = false;
+    RTC_LOG_F(LS_INFO) << "Assume TWCC feedback.";
+  }
+  packet_router_.ConfigureForRtcpFeedback(
+      /*set_transport_seq=*/rfc_8888_feedback_negotiated_,
+      sending_packets_as_ect1_);
 }
 
 std::optional<int>
@@ -751,7 +762,9 @@
     if (!feedback.transport_supports_ecn ||
         !congestion_controller_support_ecn) {
       sending_packets_as_ect1_ = false;
-      packet_router_.ConfigureForRfc8888Feedback(sending_packets_as_ect1_);
+      packet_router_.ConfigureForRtcpFeedback(
+          /*set_transport_seq=*/rfc_8888_feedback_negotiated_,
+          sending_packets_as_ect1_);
       RTC_LOG(LS_INFO) << "Transport is "
                        << (!feedback.transport_supports_ecn ? "not " : "")
                        << "ECN capable. Congestion Controller does "
diff --git a/call/rtp_transport_controller_send.h b/call/rtp_transport_controller_send.h
index e8a4db0..3ffb9b0 100644
--- a/call/rtp_transport_controller_send.h
+++ b/call/rtp_transport_controller_send.h
@@ -24,6 +24,7 @@
 #include "api/environment/environment.h"
 #include "api/fec_controller.h"
 #include "api/frame_transformer_interface.h"
+#include "api/rtp_parameters.h"
 #include "api/scoped_refptr.h"
 #include "api/sequence_checker.h"
 #include "api/task_queue/pending_task_safety_flag.h"
@@ -144,8 +145,10 @@
     return controller_.get();
   }
 
-  // Called once it's known that the remote end supports RFC 8888.
-  void EnableCongestionControlFeedbackAccordingToRfc8888() override;
+  // Determines what type of RTCP feedback that should be used for congestion
+  // control.
+  void SetPreferredRtcpCcAckType(
+      RtcpFeedbackType preferred_rtcp_cc_ack_type) override;
 
   std::optional<int> ReceivedCongestionControlFeedbackCount() const override;
   flat_map<uint32_t, ReceivedCongestionControlFeedbackStats>
diff --git a/call/rtp_transport_controller_send_interface.h b/call/rtp_transport_controller_send_interface.h
index af191d6..5841ca3 100644
--- a/call/rtp_transport_controller_send_interface.h
+++ b/call/rtp_transport_controller_send_interface.h
@@ -22,6 +22,7 @@
 #include "api/fec_controller.h"
 #include "api/frame_transformer_interface.h"
 #include "api/rtp_packet_sender.h"
+#include "api/rtp_parameters.h"
 #include "api/scoped_refptr.h"
 #include "api/transport/bandwidth_estimation_settings.h"
 #include "api/transport/bitrate_settings.h"
@@ -160,7 +161,8 @@
   virtual NetworkControllerInterface* GetNetworkController() = 0;
 
   // Called once it's known that the remote end supports RFC 8888.
-  virtual void EnableCongestionControlFeedbackAccordingToRfc8888() = 0;
+  virtual void SetPreferredRtcpCcAckType(
+      RtcpFeedbackType preferred_rtcp_cc_ack_type) = 0;
   // Count of RFC8888 feedback reports received
   virtual std::optional<int> ReceivedCongestionControlFeedbackCount() const = 0;
   // Count of transport-cc feedback reports received
diff --git a/call/test/mock_rtp_transport_controller_send.h b/call/test/mock_rtp_transport_controller_send.h
index e1bbeb1..b45b7ee 100644
--- a/call/test/mock_rtp_transport_controller_send.h
+++ b/call/test/mock_rtp_transport_controller_send.h
@@ -20,6 +20,7 @@
 #include "absl/strings/string_view.h"
 #include "api/fec_controller.h"
 #include "api/frame_transformer_interface.h"
+#include "api/rtp_parameters.h"
 #include "api/scoped_refptr.h"
 #include "api/transport/bandwidth_estimation_settings.h"
 #include "api/transport/bitrate_settings.h"
@@ -115,10 +116,7 @@
               GetNetworkController,
               (),
               (override));
-  MOCK_METHOD(void,
-              EnableCongestionControlFeedbackAccordingToRfc8888,
-              (),
-              (override));
+  MOCK_METHOD(void, SetPreferredRtcpCcAckType, (RtcpFeedbackType), (override));
   MOCK_METHOD(std::optional<int>,
               ReceivedCongestionControlFeedbackCount,
               (),
diff --git a/modules/congestion_controller/include/receive_side_congestion_controller.h b/modules/congestion_controller/include/receive_side_congestion_controller.h
index 5eb00e2..178c2a7 100644
--- a/modules/congestion_controller/include/receive_side_congestion_controller.h
+++ b/modules/congestion_controller/include/receive_side_congestion_controller.h
@@ -16,6 +16,7 @@
 
 #include "api/environment/environment.h"
 #include "api/media_types.h"
+#include "api/rtp_parameters.h"
 #include "api/sequence_checker.h"
 #include "api/units/data_rate.h"
 #include "api/units/time_delta.h"
@@ -46,7 +47,7 @@
 
   ~ReceiveSideCongestionController() override = default;
 
-  void EnableSendCongestionControlFeedbackAccordingToRfc8888();
+  void SetPreferredRtcpCcAckType(RtcpFeedbackType preferred_rtcp_cc_ack_type);
 
   void OnReceivedPacket(const RtpPacketReceived& packet, MediaType media_type);
 
diff --git a/modules/congestion_controller/receive_side_congestion_controller.cc b/modules/congestion_controller/receive_side_congestion_controller.cc
index 7aaa49f..e37c353 100644
--- a/modules/congestion_controller/receive_side_congestion_controller.cc
+++ b/modules/congestion_controller/receive_side_congestion_controller.cc
@@ -17,6 +17,7 @@
 
 #include "api/environment/environment.h"
 #include "api/media_types.h"
+#include "api/rtp_parameters.h"
 #include "api/sequence_checker.h"
 #include "api/units/data_rate.h"
 #include "api/units/time_delta.h"
@@ -102,14 +103,19 @@
       {&force_send_rfc8888_feedback},
       env.field_trials().Lookup("WebRTC-RFC8888CongestionControlFeedback"));
   if (force_send_rfc8888_feedback) {
-    EnableSendCongestionControlFeedbackAccordingToRfc8888();
+    SetPreferredRtcpCcAckType(RtcpFeedbackType::CCFB);
   }
 }
 
-void ReceiveSideCongestionController::
-    EnableSendCongestionControlFeedbackAccordingToRfc8888() {
+void ReceiveSideCongestionController::SetPreferredRtcpCcAckType(
+    RtcpFeedbackType preferred_rtcp_cc_ack_type) {
   RTC_DCHECK_RUN_ON(&sequence_checker_);
-  send_rfc8888_congestion_feedback_ = true;
+  send_rfc8888_congestion_feedback_ =
+      (preferred_rtcp_cc_ack_type == RtcpFeedbackType::CCFB);
+  RTC_LOG_F(LS_INFO) << " Sending "
+                     << (send_rfc8888_congestion_feedback_ ? " RFC8888"
+                                                           : " TWCC")
+                     << " RTCP feedback.";
 }
 
 void ReceiveSideCongestionController::OnReceivedPacket(
diff --git a/modules/congestion_controller/receive_side_congestion_controller_unittest.cc b/modules/congestion_controller/receive_side_congestion_controller_unittest.cc
index 405d3b7..1b2d252 100644
--- a/modules/congestion_controller/receive_side_congestion_controller_unittest.cc
+++ b/modules/congestion_controller/receive_side_congestion_controller_unittest.cc
@@ -17,6 +17,7 @@
 #include "api/environment/environment_factory.h"
 #include "api/field_trials.h"
 #include "api/media_types.h"
+#include "api/rtp_parameters.h"
 #include "api/test/network_emulation/create_cross_traffic.h"
 #include "api/test/network_emulation/cross_traffic.h"
 #include "api/units/data_rate.h"
@@ -27,6 +28,7 @@
 #include "modules/rtp_rtcp/source/rtcp_packet.h"
 #include "modules/rtp_rtcp/source/rtcp_packet/common_header.h"
 #include "modules/rtp_rtcp/source/rtcp_packet/congestion_control_feedback.h"
+#include "modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
 #include "modules/rtp_rtcp/source/rtp_header_extensions.h"
 #include "modules/rtp_rtcp/source/rtp_packet_received.h"
 #include "rtc_base/buffer.h"
@@ -104,6 +106,15 @@
             rtcp::CongestionControlFeedback::kFeedbackMessageType);
 }
 
+void CheckTwCCFeedback(
+    const std::vector<std::unique_ptr<rtcp::RtcpPacket>>& rtcp_packets) {
+  ASSERT_THAT(rtcp_packets, SizeIs(1));
+  Buffer buffer = rtcp_packets[0]->Build();
+  rtcp::CommonHeader header;
+  EXPECT_TRUE(header.Parse(buffer.data(), buffer.size()));
+  EXPECT_EQ(header.fmt(), rtcp::TransportFeedback::kFeedbackMessageType);
+}
+
 TEST(ReceiveSideCongestionControllerTest, SendsRfc8888FeedbackIfForced) {
   FieldTrials field_trials = CreateTestFieldTrials(
       "WebRTC-RFC8888CongestionControlFeedback/force_send:true/");
@@ -140,7 +151,7 @@
   ReceiveSideCongestionController controller(CreateEnvironment(&clock),
                                              rtcp_sender.AsStdFunction(),
                                              remb_sender.AsStdFunction());
-  controller.EnableSendCongestionControlFeedbackAccordingToRfc8888();
+  controller.SetPreferredRtcpCcAckType(RtcpFeedbackType::CCFB);
 
   // Expect that RTCP feedback is sent.
   EXPECT_CALL(rtcp_sender, Call)
@@ -160,6 +171,37 @@
 }
 
 TEST(ReceiveSideCongestionControllerTest,
+     SendsTwccFeedbackIfEnabledAndHaveExtension) {
+  MockFunction<void(std::vector<std::unique_ptr<rtcp::RtcpPacket>>)>
+      rtcp_sender;
+  MockFunction<void(uint64_t, std::vector<uint32_t>)> remb_sender;
+  SimulatedClock clock(123456);
+  ReceiveSideCongestionController controller(CreateEnvironment(&clock),
+                                             rtcp_sender.AsStdFunction(),
+                                             remb_sender.AsStdFunction());
+  controller.SetPreferredRtcpCcAckType(RtcpFeedbackType::TRANSPORT_CC);
+
+  // Expect that RTCP feedback is sent.
+  EXPECT_CALL(rtcp_sender, Call)
+      .WillOnce(
+          [&](std::vector<std::unique_ptr<rtcp::RtcpPacket>> rtcp_packets) {
+            CheckTwCCFeedback(rtcp_packets);
+          });
+  // Expect that REMB is not sent.
+  EXPECT_CALL(remb_sender, Call).Times(0);
+
+  RtpHeaderExtensionMap extensions;
+  extensions.Register<TransportSequenceNumber>(1);
+  RtpPacketReceived packet(&extensions);
+  packet.set_arrival_time(clock.CurrentTime());
+  packet.SetExtension<TransportSequenceNumber>(123);
+  controller.OnReceivedPacket(packet, MediaType::VIDEO);
+  TimeDelta next_process = controller.MaybeProcess();
+  clock.AdvanceTime(next_process);
+  next_process = controller.MaybeProcess();
+}
+
+TEST(ReceiveSideCongestionControllerTest,
      SendsNoFeedbackIfNotRfcRfc8888EnabledAndNoTransportFeedback) {
   MockFunction<void(std::vector<std::unique_ptr<rtcp::RtcpPacket>>)>
       rtcp_sender;
diff --git a/modules/pacing/packet_router.cc b/modules/pacing/packet_router.cc
index 58e2cb0..eb6b524 100644
--- a/modules/pacing/packet_router.cc
+++ b/modules/pacing/packet_router.cc
@@ -87,9 +87,10 @@
   notify_bwe_callback_ = std::move(callback);
 }
 
-void PacketRouter::ConfigureForRfc8888Feedback(bool send_rtp_packets_as_ect1) {
+void PacketRouter::ConfigureForRtcpFeedback(bool set_transport_seq,
+                                            bool send_rtp_packets_as_ect1) {
   RTC_DCHECK_RUN_ON(&thread_checker_);
-  use_cc_feedback_according_to_rfc8888_ = true;
+  set_transport_seq_ = set_transport_seq;
   send_rtp_packets_as_ect1_ = send_rtp_packets_as_ect1;
 }
 
@@ -200,8 +201,7 @@
   // if the TransportSequenceNumber header extension is negotiated for the
   // specific media type. Historically, webrtc only used TransportSequenceNumber
   // on video packets.
-  if (use_cc_feedback_according_to_rfc8888_ ||
-      packet->HasExtension<TransportSequenceNumber>()) {
+  if (set_transport_seq_ || packet->HasExtension<TransportSequenceNumber>()) {
     packet->set_transport_sequence_number(transport_seq_++);
   }
   if (send_rtp_packets_as_ect1_) {
diff --git a/modules/pacing/packet_router.h b/modules/pacing/packet_router.h
index 57f05a7..6321f20 100644
--- a/modules/pacing/packet_router.h
+++ b/modules/pacing/packet_router.h
@@ -56,10 +56,12 @@
       absl::AnyInvocable<void(const RtpPacketToSend& packet,
                               const PacedPacketInfo& pacing_info)> callback);
 
-  // Ensures that PacketRouter generates transport sequence numbers for all RTP
-  // packets. If `send_rtp_packets_as_ect1` is true, packets will be requested
-  // to be sent as ect1.
-  void ConfigureForRfc8888Feedback(bool send_rtp_packets_as_ect1);
+  // If `set_transport_seq` is true, PacketRouter generates transport sequence
+  // numbers for all RTP packets even if transport sequence number header
+  // extension has not been negotiated. If `send_rtp_packets_as_ect1` is true,
+  // packets will be requested to be sent as ect1.
+  void ConfigureForRtcpFeedback(bool set_transport_seq,
+                                bool send_rtp_packets_as_ect1);
 
   void AddSendRtpModule(RtpRtcpInterface* rtp_module, bool remb_candidate);
   void RemoveSendRtpModule(RtpRtcpInterface* rtp_module);
@@ -121,8 +123,9 @@
       RTC_GUARDED_BY(thread_checker_);
 
   uint64_t transport_seq_ RTC_GUARDED_BY(thread_checker_);
-  bool use_cc_feedback_according_to_rfc8888_ RTC_GUARDED_BY(thread_checker_) =
-      false;
+  // If `set_transport_seq_` is true, a transport sequence number is created per
+  // packet even if it is not sent in a header extension.
+  bool set_transport_seq_ RTC_GUARDED_BY(thread_checker_) = false;
   bool send_rtp_packets_as_ect1_ RTC_GUARDED_BY(thread_checker_) = false;
   absl::AnyInvocable<void(RtpPacketToSend& packet,
                           const PacedPacketInfo& pacing_info)>
diff --git a/modules/pacing/packet_router_unittest.cc b/modules/pacing/packet_router_unittest.cc
index 7b9467e..ee85329 100644
--- a/modules/pacing/packet_router_unittest.cc
+++ b/modules/pacing/packet_router_unittest.cc
@@ -409,7 +409,7 @@
 }
 
 TEST_F(PacketRouterTest,
-       AllocateTransportSequenceNumberWithoutExtensionIfRfc8888Enabled) {
+       AllocateTransportSequenceNumberWithoutExtensionIfConfigured) {
   const uint16_t kSsrc1 = 1234;
 
   PacketRouter packet_router;
@@ -423,7 +423,8 @@
   EXPECT_CALL(rtp_1, CanSendPacket).WillRepeatedly(Return(true));
 
   packet_router.AddSendRtpModule(&rtp_1, false);
-  packet_router.ConfigureForRfc8888Feedback(/*send_rtp_packets_as_ect1=*/false);
+  packet_router.ConfigureForRtcpFeedback(/*set_transport_seq=*/true,
+                                         /*send_rtp_packets_as_ect1=*/false);
 
   auto packet = BuildRtpPacket(kSsrc1);
   EXPECT_CALL(notify_bwe_callback, Call)
@@ -445,7 +446,8 @@
   ON_CALL(rtp_1, CanSendPacket).WillByDefault(Return(kSsrc1));
 
   packet_router.AddSendRtpModule(&rtp_1, false);
-  packet_router.ConfigureForRfc8888Feedback(/*send_rtp_packets_as_ect1=*/true);
+  packet_router.ConfigureForRtcpFeedback(/*set_transport_seq=*/true,
+                                         /*send_rtp_packets_as_ect1=*/true);
 
   testing::Sequence s;
   EXPECT_CALL(
@@ -458,7 +460,8 @@
       .InSequence(s);
 
   packet_router.SendPacket(BuildRtpPacket(kSsrc1), PacedPacketInfo());
-  packet_router.ConfigureForRfc8888Feedback(/*send_rtp_packets_as_ect1=*/false);
+  packet_router.ConfigureForRtcpFeedback(/*set_transport_seq=*/true,
+                                         /*send_rtp_packets_as_ect1=*/false);
   packet_router.SendPacket(BuildRtpPacket(kSsrc1), PacedPacketInfo());
 
   packet_router.OnBatchComplete();
diff --git a/pc/pranswer_switch_integrationtest.cc b/pc/pranswer_switch_integrationtest.cc
index ac4ff04..a73d0f2 100644
--- a/pc/pranswer_switch_integrationtest.cc
+++ b/pc/pranswer_switch_integrationtest.cc
@@ -23,6 +23,7 @@
 #include "api/rtc_error.h"
 #include "api/test/rtc_error_matchers.h"
 #include "p2p/test/test_turn_server.h"
+#include "pc/peer_connection.h"
 #include "pc/test/fake_rtc_certificate_generator.h"
 #include "pc/test/integration_test_helpers.h"
 #include "rtc_base/socket_address.h"
@@ -252,10 +253,7 @@
   ASSERT_FALSE(HasFailure());
 }
 
-// This test completes, but is disabled because feedback type switching
-// does not work yet.
-// TODO: issues.webrtc.org/448848876 - enable when underlying issue fixed.
-TEST_F(PeerConnectionPrAnswerSwitchTest, DISABLED_MediaWithCcfbFirstThenTwcc) {
+TEST_F(PeerConnectionPrAnswerSwitchTest, MediaWithCcfbFirstThenTwcc) {
   SetFieldTrials("WebRTC-RFC8888CongestionControlFeedback/Enabled,offer:true/");
   SetFieldTrials("Callee2",
                  "WebRTC-RFC8888CongestionControlFeedback/Disabled/");
@@ -284,18 +282,20 @@
   media_expectations.CalleeExpectsSomeAudio();
   media_expectations.CalleeExpectsSomeVideo();
   ASSERT_TRUE(ExpectNewFrames(media_expectations));
-  auto pc_internal = caller()->pc_internal();
-  EXPECT_THAT(
-      WaitUntil(
-          [&] {
-            return pc_internal->FeedbackAccordingToRfc8888CountForTesting();
-          },
-          Gt(0)),
-      IsRtcOk());
+  PeerConnection* caller_pc_internal = caller()->pc_internal();
+  EXPECT_THAT(WaitUntil(
+                  [&] {
+                    return caller_pc_internal
+                        ->FeedbackAccordingToRfc8888CountForTesting();
+                  },
+                  Gt(0)),
+              IsRtcOk());
   // There should be no transport-cc generated.
-  EXPECT_THAT(pc_internal->FeedbackAccordingToTransportCcCountForTesting(),
-              Eq(0));
-  // The final answer does TWCC.
+  EXPECT_THAT(
+      caller_pc_internal->FeedbackAccordingToTransportCcCountForTesting(),
+      Eq(0));
+  // The final answer does TWCC and send audio and video.
+  second_callee->AddAudioVideoTracks();
   second_callee->ReceiveSdpMessage(SdpType::kOffer, saved_offer);
   EXPECT_THAT(
       WaitUntil([&] { return caller()->SignalingStateStable(); }, IsTrue()),
@@ -303,21 +303,32 @@
   WaitConnected(/* prAnswer= */ false, caller(), second_callee.get());
   ASSERT_FALSE(HasFailure());
 
-  int old_ccfb_count = pc_internal->FeedbackAccordingToRfc8888CountForTesting();
+  int old_ccfb_count =
+      caller_pc_internal->FeedbackAccordingToRfc8888CountForTesting();
   int old_twcc_count =
-      pc_internal->FeedbackAccordingToTransportCcCountForTesting();
-  EXPECT_THAT(
-      WaitUntil(
-          [&] {
-            return pc_internal->FeedbackAccordingToTransportCcCountForTesting();
-          },
-          Gt(old_twcc_count)),
-      IsRtcOk());
+      caller_pc_internal->FeedbackAccordingToTransportCcCountForTesting();
+  EXPECT_THAT(WaitUntil(
+                  [&] {
+                    return caller_pc_internal
+                        ->FeedbackAccordingToTransportCcCountForTesting();
+                  },
+                  Gt(old_twcc_count)),
+              IsRtcOk());
   // These expects are easier to interpret than the WaitUntil log result.
-  EXPECT_THAT(pc_internal->FeedbackAccordingToTransportCcCountForTesting(),
-              Gt(old_twcc_count));
-  EXPECT_THAT(pc_internal->FeedbackAccordingToRfc8888CountForTesting(),
+  EXPECT_THAT(
+      caller_pc_internal->FeedbackAccordingToTransportCcCountForTesting(),
+      Gt(old_twcc_count));
+  EXPECT_THAT(caller_pc_internal->FeedbackAccordingToRfc8888CountForTesting(),
               Eq(old_ccfb_count));
+
+  PeerConnection* second_callee_pc_internal = second_callee->pc_internal();
+  EXPECT_THAT(WaitUntil(
+                  [&] {
+                    return second_callee_pc_internal
+                        ->FeedbackAccordingToTransportCcCountForTesting();
+                  },
+                  Gt(0)),
+              IsRtcOk());
 }
 
 }  // namespace webrtc