Cleanup RtcpReceiver from using RtcpBandwidthObser callback interface

All known users were updated to NetworkLinkRtcpObserver interface instead

Bug: webrtc:13757
Change-Id: I1f2a7be0c9192890b38a811a739ddd666b0985f2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/306161
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40113}
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index da58582..2048cdb 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -482,7 +482,6 @@
   public = [
     "mocks/mock_network_link_rtcp_observer.h",
     "mocks/mock_recovered_packet_receiver.h",
-    "mocks/mock_rtcp_bandwidth_observer.h",
     "mocks/mock_rtcp_rtt_stats.h",
     "mocks/mock_rtp_rtcp.h",
   ]
diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
index 4bdad6e..652ea25 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
@@ -167,21 +167,6 @@
                                           bool decodability_flag) = 0;
 };
 
-// TODO(bugs.webrtc.org/13757): Remove this interface in favor of the
-// NetworkLinkRtcpObserver that uses more descriptive types.
-class RtcpBandwidthObserver {
- public:
-  // REMB or TMMBR
-  virtual void OnReceivedEstimatedBitrate(uint32_t bitrate) = 0;
-
-  virtual void OnReceivedRtcpReceiverReport(
-      const ReportBlockList& report_blocks,
-      int64_t rtt,
-      int64_t now_ms) = 0;
-
-  virtual ~RtcpBandwidthObserver() {}
-};
-
 // Interface to watch incoming rtcp packets related to the link in general.
 // All message handlers have default empty implementation. This way users only
 // need to implement the ones they are interested in.
diff --git a/modules/rtp_rtcp/mocks/mock_rtcp_bandwidth_observer.h b/modules/rtp_rtcp/mocks/mock_rtcp_bandwidth_observer.h
deleted file mode 100644
index 12f143a..0000000
--- a/modules/rtp_rtcp/mocks/mock_rtcp_bandwidth_observer.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef MODULES_RTP_RTCP_MOCKS_MOCK_RTCP_BANDWIDTH_OBSERVER_H_
-#define MODULES_RTP_RTCP_MOCKS_MOCK_RTCP_BANDWIDTH_OBSERVER_H_
-
-#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
-#include "test/gmock.h"
-
-namespace webrtc {
-
-class MockRtcpBandwidthObserver : public RtcpBandwidthObserver {
- public:
-  MOCK_METHOD(void, OnReceivedEstimatedBitrate, (uint32_t), (override));
-  MOCK_METHOD(void,
-              OnReceivedRtcpReceiverReport,
-              (const ReportBlockList&, int64_t, int64_t),
-              (override));
-};
-}  // namespace webrtc
-#endif  // MODULES_RTP_RTCP_MOCKS_MOCK_RTCP_BANDWIDTH_OBSERVER_H_
diff --git a/modules/rtp_rtcp/source/rtcp_receiver.cc b/modules/rtp_rtcp/source/rtcp_receiver.cc
index bf63828..7236875 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver.cc
+++ b/modules/rtp_rtcp/source/rtcp_receiver.cc
@@ -144,7 +144,6 @@
       receiver_only_(config.receiver_only),
       rtp_rtcp_(owner),
       registered_ssrcs_(false, config),
-      deprecated_rtcp_bandwidth_observer_(config.bandwidth_callback),
       network_link_rtcp_observer_(config.network_link_rtcp_observer),
       rtcp_intra_frame_observer_(config.intra_frame_callback),
       rtcp_loss_notification_observer_(config.rtcp_loss_notification_observer),
@@ -173,7 +172,6 @@
       receiver_only_(config.receiver_only),
       rtp_rtcp_(owner),
       registered_ssrcs_(true, config),
-      deprecated_rtcp_bandwidth_observer_(config.bandwidth_callback),
       network_link_rtcp_observer_(config.network_link_rtcp_observer),
       rtcp_intra_frame_observer_(config.intra_frame_callback),
       rtcp_loss_notification_observer_(config.rtcp_loss_notification_observer),
@@ -1076,16 +1074,10 @@
   std::vector<rtcp::TmmbItem> bounding =
       TMMBRHelp::FindBoundingSet(TmmbrReceived());
 
-  if (!bounding.empty()) {
+  if (!bounding.empty() && network_link_rtcp_observer_) {
     // We have a new bandwidth estimate on this channel.
     uint64_t bitrate_bps = TMMBRHelp::CalcMinBitrateBps(bounding);
-    if (deprecated_rtcp_bandwidth_observer_ &&
-        bitrate_bps <= std::numeric_limits<uint32_t>::max()) {
-      deprecated_rtcp_bandwidth_observer_->OnReceivedEstimatedBitrate(
-          bitrate_bps);
-    }
-    if (network_link_rtcp_observer_ &&
-        bitrate_bps < std::numeric_limits<int64_t>::max()) {
+    if (bitrate_bps < std::numeric_limits<int64_t>::max()) {
       network_link_rtcp_observer_->OnReceiverEstimatedMaxBitrate(
           clock_->CurrentTime(), DataRate::BitsPerSec(bitrate_bps));
     }
@@ -1147,23 +1139,6 @@
           loss_notification->decodability_flag());
     }
   }
-  if (deprecated_rtcp_bandwidth_observer_) {
-    RTC_DCHECK(!receiver_only_);
-    if (packet_information.packet_type_flags & kRtcpRemb) {
-      RTC_LOG(LS_VERBOSE)
-          << "Incoming REMB: "
-          << packet_information.receiver_estimated_max_bitrate_bps;
-      deprecated_rtcp_bandwidth_observer_->OnReceivedEstimatedBitrate(
-          packet_information.receiver_estimated_max_bitrate_bps);
-    }
-    if ((packet_information.packet_type_flags & kRtcpSr) ||
-        (packet_information.packet_type_flags & kRtcpRr)) {
-      deprecated_rtcp_bandwidth_observer_->OnReceivedRtcpReceiverReport(
-          packet_information.report_blocks,
-          packet_information.rtt.value_or(TimeDelta::Zero()).ms(),
-          clock_->TimeInMilliseconds());
-    }
-  }
 
   if (network_link_rtcp_observer_) {
     Timestamp now = clock_->CurrentTime();
diff --git a/modules/rtp_rtcp/source/rtcp_receiver.h b/modules/rtp_rtcp/source/rtcp_receiver.h
index 4453c57..bc0ce56 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver.h
+++ b/modules/rtp_rtcp/source/rtcp_receiver.h
@@ -355,7 +355,6 @@
   // The set of registered local SSRCs.
   RegisteredSsrcs registered_ssrcs_;
 
-  RtcpBandwidthObserver* const deprecated_rtcp_bandwidth_observer_;
   NetworkLinkRtcpObserver* const network_link_rtcp_observer_;
   RtcpIntraFrameObserver* const rtcp_intra_frame_observer_;
   RtcpLossNotificationObserver* const rtcp_loss_notification_observer_;
diff --git a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
index 78abe07..02dd0a7 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
+++ b/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc
@@ -21,7 +21,6 @@
 #include "api/video/video_bitrate_allocator.h"
 #include "modules/rtp_rtcp/include/report_block_data.h"
 #include "modules/rtp_rtcp/mocks/mock_network_link_rtcp_observer.h"
-#include "modules/rtp_rtcp/mocks/mock_rtcp_bandwidth_observer.h"
 #include "modules/rtp_rtcp/source/byte_io.h"
 #include "modules/rtp_rtcp/source/rtcp_packet.h"
 #include "modules/rtp_rtcp/source/rtcp_packet/app.h"
@@ -52,6 +51,7 @@
 using rtcp::ReceiveTimeInfo;
 using ::testing::_;
 using ::testing::AllOf;
+using ::testing::ElementsAre;
 using ::testing::ElementsAreArray;
 using ::testing::Eq;
 using ::testing::Field;
@@ -145,7 +145,6 @@
   // Callbacks to packet_type_counter_observer are frequent but most of the time
   // are not interesting.
   NiceMock<MockRtcpPacketTypeCounterObserver> packet_type_counter_observer;
-  StrictMock<MockRtcpBandwidthObserver> bandwidth_observer;
   StrictMock<MockRtcpIntraFrameObserver> intra_frame_observer;
   StrictMock<MockRtcpLossNotificationObserver> rtcp_loss_notification_observer;
   StrictMock<MockVideoBitrateAllocationObserver> bitrate_allocation_observer;
@@ -159,7 +158,7 @@
   config.receiver_only = false;
   config.rtcp_packet_type_counter_observer =
       &mocks->packet_type_counter_observer;
-  config.bandwidth_callback = &mocks->bandwidth_observer;
+  config.network_link_rtcp_observer = &mocks->network_link_rtcp_observer;
   config.intra_frame_callback = &mocks->intra_frame_observer;
   config.rtcp_loss_notification_observer =
       &mocks->rtcp_loss_notification_observer;
@@ -199,13 +198,10 @@
 
   EXPECT_FALSE(receiver.GetSenderReportStats());
 
-  int64_t now = mocks.clock.TimeInMilliseconds();
   rtcp::SenderReport sr;
   sr.SetSenderSsrc(kSenderSsrc);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(IsEmpty()));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(IsEmpty(), _, now));
   receiver.IncomingPacket(sr.Build());
 
   EXPECT_TRUE(receiver.GetSenderReportStats());
@@ -216,15 +212,12 @@
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
-  int64_t now = mocks.clock.TimeInMilliseconds();
   rtcp::SenderReport sr;
   sr.SetSenderSsrc(kUnknownSenderSsrc);
 
   // The parser will handle report blocks in Sender Report from other than their
   // expected peer.
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(_, _, now));
   receiver.IncomingPacket(sr.Build());
 
   // But will not flag that he's gotten sender information.
@@ -254,7 +247,7 @@
   sr.AddReportBlock(block);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnRttUpdate);
   receiver.IncomingPacket(sr.Build());
 
   EXPECT_THAT(receiver.LastRtt(), Near(kRtt, TimeDelta::Millis(1)));
@@ -283,20 +276,19 @@
   sr.AddReportBlock(block);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(SizeIs(1)));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(SizeIs(1), _, _));
+  EXPECT_CALL(mocks.network_link_rtcp_observer,
+              OnRttUpdate(_, TimeDelta::Millis(1)));
   receiver.IncomingPacket(sr.Build());
 
   EXPECT_EQ(receiver.LastRtt(), TimeDelta::Millis(1));
 }
 
-TEST(RtcpReceiverTest,
-     TwoReportBlocksWithLastOneWithoutLastSrCalculatesRttForBandwidthObserver) {
+TEST(RtcpReceiverTest, TwoReportBlocksWithLastOneWithoutLastSrCalculatesRtt) {
   ReceiverMocks mocks;
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
-  const TimeDelta kRtt = TimeDelta::Millis(120);
+  const TimeDelta kRtt = TimeDelta::Millis(125);
   const uint32_t kDelayNtp = 123000;
   const TimeDelta kDelay = CompactNtpRttToTimeDelta(kDelayNtp);
 
@@ -315,8 +307,7 @@
   sr.AddReportBlock(block);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(SizeIs(2)));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(SizeIs(2), kRtt.ms(), _));
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnRttUpdate(_, kRtt));
   receiver.IncomingPacket(sr.Build());
 }
 
@@ -325,13 +316,10 @@
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
-  int64_t now = mocks.clock.TimeInMilliseconds();
   rtcp::ReceiverReport rr;
   rr.SetSenderSsrc(kSenderSsrc);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(IsEmpty()));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(IsEmpty(), _, now));
   receiver.IncomingPacket(rr.Build());
 
   EXPECT_THAT(receiver.GetLatestReportBlockData(), IsEmpty());
@@ -342,7 +330,6 @@
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
-  int64_t now = mocks.clock.TimeInMilliseconds();
   rtcp::ReportBlock rb;
   rb.SetMediaSsrc(kNotToUsSsrc);
   rtcp::ReceiverReport rr;
@@ -350,8 +337,7 @@
   rr.AddReportBlock(rb);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(IsEmpty()));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(IsEmpty(), _, now));
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnReport).Times(0);
   receiver.IncomingPacket(rr.Build());
 
   EXPECT_EQ(0, receiver.LastReceivedReportBlockMs());
@@ -363,7 +349,7 @@
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
-  int64_t now = mocks.clock.TimeInMilliseconds();
+  Timestamp now = mocks.clock.CurrentTime();
 
   rtcp::ReportBlock rb;
   rb.SetMediaSsrc(kReceiverMainSsrc);
@@ -372,11 +358,10 @@
   rr.AddReportBlock(rb);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(SizeIs(1)));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(SizeIs(1), _, now));
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnReport(now, SizeIs(1)));
   receiver.IncomingPacket(rr.Build());
 
-  EXPECT_EQ(now, receiver.LastReceivedReportBlockMs());
+  EXPECT_EQ(receiver.LastReceivedReportBlockMs(), now.ms());
   EXPECT_THAT(receiver.GetLatestReportBlockData(), SizeIs(1));
 }
 
@@ -385,7 +370,7 @@
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
-  int64_t now = mocks.clock.TimeInMilliseconds();
+  Timestamp now = mocks.clock.CurrentTime();
 
   rtcp::ReportBlock rb;
   rb.SetMediaSsrc(kReceiverMainSsrc);
@@ -394,11 +379,10 @@
   sr.AddReportBlock(rb);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(SizeIs(1)));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(SizeIs(1), _, now));
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnReport(now, SizeIs(1)));
   receiver.IncomingPacket(sr.Build());
 
-  EXPECT_EQ(now, receiver.LastReceivedReportBlockMs());
+  EXPECT_EQ(receiver.LastReceivedReportBlockMs(), now.ms());
   EXPECT_THAT(receiver.GetLatestReportBlockData(), SizeIs(1));
 }
 
@@ -410,7 +394,7 @@
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
-  int64_t now = mocks.clock.TimeInMilliseconds();
+  Timestamp now = mocks.clock.CurrentTime();
 
   rtcp::ReportBlock rb1;
   rb1.SetMediaSsrc(kReceiverMainSsrc);
@@ -428,11 +412,10 @@
   rr1.AddReportBlock(rb2);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(SizeIs(2)));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(SizeIs(2), _, now));
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnReport(now, SizeIs(2)));
   receiver.IncomingPacket(rr1.Build());
 
-  EXPECT_EQ(now, receiver.LastReceivedReportBlockMs());
+  EXPECT_EQ(receiver.LastReceivedReportBlockMs(), now.ms());
   EXPECT_THAT(
       receiver.GetLatestReportBlockData(),
       UnorderedElementsAre(Property(&ReportBlockData::fraction_lost_raw, 0),
@@ -458,11 +441,10 @@
 
   // Advance time to make 1st sent time and 2nd sent time different.
   mocks.clock.AdvanceTimeMilliseconds(500);
-  now = mocks.clock.TimeInMilliseconds();
+  now = mocks.clock.CurrentTime();
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(SizeIs(2)));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(SizeIs(2), _, now));
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnReport(now, SizeIs(2)));
   receiver.IncomingPacket(rr2.Build());
 
   EXPECT_THAT(
@@ -499,14 +481,12 @@
   rr1.SetSenderSsrc(kSenderSsrc);
   rr1.AddReportBlock(rb1);
 
-  int64_t now = mocks.clock.TimeInMilliseconds();
+  Timestamp now = mocks.clock.CurrentTime();
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(SizeIs(1)));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(SizeIs(1), _, now));
   receiver.IncomingPacket(rr1.Build());
 
-  EXPECT_EQ(now, receiver.LastReceivedReportBlockMs());
+  EXPECT_EQ(receiver.LastReceivedReportBlockMs(), now.ms());
 
   EXPECT_THAT(receiver.GetLatestReportBlockData(),
               ElementsAre(AllOf(
@@ -527,8 +507,6 @@
   rr2.AddReportBlock(rb2);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks(SizeIs(1)));
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedRtcpReceiverReport(SizeIs(1), _, now));
   receiver.IncomingPacket(rr2.Build());
 
   EXPECT_THAT(receiver.GetLatestReportBlockData(),
@@ -543,10 +521,7 @@
 
 TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnReportBlocks) {
   ReceiverMocks mocks;
-  RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
-  config.bandwidth_callback = nullptr;
-  config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
-  RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+  RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
   rtcp::ReportBlock rb1;
@@ -600,7 +575,6 @@
 
   Timestamp now = mocks.clock.CurrentTime();
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   EXPECT_CALL(mocks.network_link_rtcp_observer,
               OnRttUpdate(now, Gt(TimeDelta::Zero())));
   receiver.IncomingPacket(rr.Build());
@@ -641,7 +615,7 @@
   receiver.IncomingPacket(sdes.Build());
 }
 
-TEST(RtcpReceiverTest, InjectByePacket_RemovesReportBlocks) {
+TEST(RtcpReceiverTest, InjectByePacketRemovesReportBlocks) {
   ReceiverMocks mocks;
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
@@ -656,7 +630,6 @@
   rr.AddReportBlock(rb2);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rr.Build());
 
   EXPECT_THAT(receiver.GetLatestReportBlockData(), SizeIs(2));
@@ -671,7 +644,6 @@
 
   // Inject packet again.
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rr.Build());
 
   EXPECT_THAT(receiver.GetLatestReportBlockData(), SizeIs(2));
@@ -1169,7 +1141,6 @@
   sr.SetSenderSsrc(kSenderSsrc);
   sr.AddReportBlock(rb);
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
 
   receiver.IncomingPacket(sr.Build());
 
@@ -1392,7 +1363,6 @@
   rr1.AddReportBlock(rb1);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rr1.Build());
 
   mocks.clock.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs - 1);
@@ -1402,7 +1372,6 @@
   // Add a RR with the same extended max as the previous RR to trigger a
   // sequence number timeout, but not a RR timeout.
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rr1.Build());
 
   mocks.clock.AdvanceTimeMilliseconds(2);
@@ -1427,7 +1396,6 @@
   rr2.AddReportBlock(rb2);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rr2.Build());
 
   EXPECT_FALSE(receiver.RtcpRrTimeout());
@@ -1436,7 +1404,6 @@
   // Verify we can get a timeout again once we've received new RR.
   mocks.clock.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs);
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rr2.Build());
 
   mocks.clock.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1);
@@ -1460,10 +1427,10 @@
   RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
-  const uint32_t kBitrateBps = 30000;
+  const DataRate kBitrate = DataRate::BitsPerSec(30'000);
   auto tmmbr = std::make_unique<rtcp::Tmmbr>();
   tmmbr->SetSenderSsrc(kSenderSsrc);
-  tmmbr->AddTmmbr(rtcp::TmmbItem(kReceiverMainSsrc, kBitrateBps, 0));
+  tmmbr->AddTmmbr(rtcp::TmmbItem(kReceiverMainSsrc, kBitrate.bps(), 0));
   auto sr = std::make_unique<rtcp::SenderReport>();
   sr->SetSenderSsrc(kSenderSsrc);
   rtcp::CompoundPacket compound;
@@ -1472,15 +1439,15 @@
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
   EXPECT_CALL(mocks.rtp_rtcp_impl, SetTmmbn(SizeIs(1)));
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedEstimatedBitrate(kBitrateBps));
+  EXPECT_CALL(mocks.network_link_rtcp_observer,
+              OnReceiverEstimatedMaxBitrate(_, kBitrate));
   receiver.IncomingPacket(compound.Build());
 
-  std::vector<rtcp::TmmbItem> tmmbr_received = receiver.TmmbrReceived();
-  ASSERT_EQ(1u, tmmbr_received.size());
-  EXPECT_EQ(kBitrateBps, tmmbr_received[0].bitrate_bps());
-  EXPECT_EQ(kSenderSsrc, tmmbr_received[0].ssrc());
+  EXPECT_THAT(
+      receiver.TmmbrReceived(),
+      ElementsAre(AllOf(
+          Property(&rtcp::TmmbItem::bitrate_bps, Eq(kBitrate.bps<uint64_t>())),
+          Property(&rtcp::TmmbItem::ssrc, Eq(kSenderSsrc)))));
 }
 
 TEST(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) {
@@ -1500,8 +1467,8 @@
   compound.Append(std::move(tmmbr));
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedEstimatedBitrate).Times(0);
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnReceiverEstimatedMaxBitrate)
+      .Times(0);
   receiver.IncomingPacket(compound.Build());
 
   EXPECT_EQ(0u, receiver.TmmbrReceived().size());
@@ -1522,8 +1489,8 @@
   compound.Append(std::move(tmmbr));
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedEstimatedBitrate).Times(0);
+  EXPECT_CALL(mocks.network_link_rtcp_observer, OnReceiverEstimatedMaxBitrate)
+      .Times(0);
   receiver.IncomingPacket(compound.Build());
 
   EXPECT_EQ(0u, receiver.TmmbrReceived().size());
@@ -1548,8 +1515,8 @@
 
     EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
     EXPECT_CALL(mocks.rtp_rtcp_impl, SetTmmbn);
-    EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
-    EXPECT_CALL(mocks.bandwidth_observer, OnReceivedEstimatedBitrate);
+    EXPECT_CALL(mocks.network_link_rtcp_observer,
+                OnReceiverEstimatedMaxBitrate);
     receiver.IncomingPacket(compound.Build());
 
     // 5 seconds between each packet.
@@ -1610,7 +1577,6 @@
         EXPECT_EQ(0u, report_block.num_rtts());
       });
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rtcp_report.Build());
 }
 
@@ -1645,7 +1611,6 @@
   sr.AddReportBlock(block);
 
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   InSequence sequence;
   EXPECT_CALL(observer, OnReportBlockDataUpdated)
       .WillOnce([&](ReportBlockData report_block_data) {
@@ -1677,7 +1642,6 @@
   rtcp_report.SetSenderSsrc(kSenderSsrc);
   rtcp_report.AddReportBlock(rtcp_block);
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rtcp_report.Build());
 
   auto report_block_datas = receiver.GetLatestReportBlockData();
@@ -1703,7 +1667,6 @@
   rtcp_report1.SetSenderSsrc(kSenderSsrc);
   rtcp_report1.AddReportBlock(rtcp_block1);
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rtcp_report1.Build());
 
   // Inject a report block with an increased the sequence number for the same
@@ -1716,7 +1679,6 @@
   rtcp_report2.SetSenderSsrc(kSenderSsrc);
   rtcp_report2.AddReportBlock(rtcp_block2);
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rtcp_report2.Build());
 
   // Only the latest block should be returned.
@@ -1743,7 +1705,6 @@
   rtcp_report1.SetSenderSsrc(kSenderSsrc);
   rtcp_report1.AddReportBlock(rtcp_block1);
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rtcp_report1.Build());
 
   // Inject a report block for a different source SSRC.
@@ -1755,7 +1716,6 @@
   rtcp_report2.SetSenderSsrc(kSenderSsrc);
   rtcp_report2.AddReportBlock(rtcp_block2);
   EXPECT_CALL(mocks.rtp_rtcp_impl, OnReceivedRtcpReportBlocks);
-  EXPECT_CALL(mocks.bandwidth_observer, OnReceivedRtcpReceiverReport);
   receiver.IncomingPacket(rtcp_report2.Build());
 
   // Both report blocks should be returned.
@@ -1772,8 +1732,6 @@
 TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnTransportFeedback) {
   ReceiverMocks mocks;
   RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
-  config.bandwidth_callback = nullptr;
-  config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
   RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
@@ -1798,8 +1756,6 @@
      NotifiesNetworkLinkObserverOnTransportFeedbackOnRtxSsrc) {
   ReceiverMocks mocks;
   RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
-  config.bandwidth_callback = nullptr;
-  config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
   RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
@@ -1816,10 +1772,7 @@
 TEST(RtcpReceiverTest,
      DoesNotNotifyNetworkLinkObserverOnTransportFeedbackForUnregistedSsrc) {
   ReceiverMocks mocks;
-  RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
-  config.bandwidth_callback = nullptr;
-  config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
-  RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+  RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
   rtcp::TransportFeedback packet;
@@ -1832,27 +1785,9 @@
   receiver.IncomingPacket(packet.Build());
 }
 
-TEST(RtcpReceiverTest, ReceivesRemb) {
-  ReceiverMocks mocks;
-  RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
-  receiver.SetRemoteSSRC(kSenderSsrc);
-
-  const uint32_t kBitrateBps = 500000;
-  rtcp::Remb remb;
-  remb.SetSenderSsrc(kSenderSsrc);
-  remb.SetBitrateBps(kBitrateBps);
-
-  EXPECT_CALL(mocks.bandwidth_observer,
-              OnReceivedEstimatedBitrate(kBitrateBps));
-  receiver.IncomingPacket(remb.Build());
-}
-
 TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnRemb) {
   ReceiverMocks mocks;
-  RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
-  config.bandwidth_callback = nullptr;
-  config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
-  RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+  RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
   rtcp::Remb remb;
@@ -1867,10 +1802,7 @@
 
 TEST(RtcpReceiverTest, HandlesInvalidTransportFeedback) {
   ReceiverMocks mocks;
-  RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
-  config.bandwidth_callback = nullptr;
-  config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
-  RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
+  RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
   receiver.SetRemoteSSRC(kSenderSsrc);
 
   // Send a compound packet with a TransportFeedback followed by something else.
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_interface.h b/modules/rtp_rtcp/source/rtp_rtcp_interface.h
index 6e62bf8..73c6c43 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_interface.h
+++ b/modules/rtp_rtcp/source/rtp_rtcp_interface.h
@@ -69,12 +69,6 @@
     // Called when the receiver sends a loss notification.
     RtcpLossNotificationObserver* rtcp_loss_notification_observer = nullptr;
 
-    // Called when we receive a changed estimate from the receiver of out
-    // stream.
-    // TODO(bugs.webrtc.org/13757): Deprecated and Remove in favor of
-    // `network_link_rtcp_observer`
-    RtcpBandwidthObserver* bandwidth_callback = nullptr;
-
     // Called when receive an RTCP message related to the link in general, e.g.
     // bandwidth estimation related message.
     NetworkLinkRtcpObserver* network_link_rtcp_observer = nullptr;