Rename RsidResolutionObserver to SsrcBindingObserver.

This rename prepares SsrcBindingObserver to be used for observing all
the ways a sink can be bound to SSRCs (e.g., MID, payload types).

Bug: webrtc:4050
Change-Id: I16b68481d01f921c326a33f5f2baf79d8b3f12e2
Reviewed-on: https://chromium-review.googlesource.com/590762
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Elad Alon <eladalon@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19396}
diff --git a/webrtc/call/BUILD.gn b/webrtc/call/BUILD.gn
index 7bd0104..5d10891 100644
--- a/webrtc/call/BUILD.gn
+++ b/webrtc/call/BUILD.gn
@@ -49,7 +49,6 @@
 
 rtc_source_set("rtp_receiver") {
   sources = [
-    "rsid_resolution_observer.h",
     "rtcp_demuxer.cc",
     "rtcp_demuxer.h",
     "rtp_demuxer.cc",
@@ -60,6 +59,7 @@
     "rtp_stream_receiver_controller.h",
     "rtx_receive_stream.cc",
     "rtx_receive_stream.h",
+    "ssrc_binding_observer.h",
   ]
   deps = [
     ":rtp_interfaces",
diff --git a/webrtc/call/rsid_resolution_observer.h b/webrtc/call/rsid_resolution_observer.h
deleted file mode 100644
index ea08045..0000000
--- a/webrtc/call/rsid_resolution_observer.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (c) 2017 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 WEBRTC_CALL_RSID_RESOLUTION_OBSERVER_H_
-#define WEBRTC_CALL_RSID_RESOLUTION_OBSERVER_H_
-
-#include <string>
-
-#include "webrtc/rtc_base/basictypes.h"
-
-namespace webrtc {
-
-// One RSID can be associated with one, and only one, SSRC, throughout a call.
-// The resolution might either happen during call setup, or during the call.
-class RsidResolutionObserver {
- public:
-  virtual ~RsidResolutionObserver() = default;
-
-  virtual void OnRsidResolved(const std::string& rsid, uint32_t ssrc) = 0;
-};
-
-}  // namespace webrtc
-
-#endif  // WEBRTC_CALL_RSID_RESOLUTION_OBSERVER_H_
diff --git a/webrtc/call/rtcp_demuxer.cc b/webrtc/call/rtcp_demuxer.cc
index a8003f8..90620c32 100644
--- a/webrtc/call/rtcp_demuxer.cc
+++ b/webrtc/call/rtcp_demuxer.cc
@@ -80,7 +80,7 @@
   }
 }
 
-void RtcpDemuxer::OnRsidResolved(const std::string& rsid, uint32_t ssrc) {
+void RtcpDemuxer::OnSsrcBoundToRsid(const std::string& rsid, uint32_t ssrc) {
   // Record the new SSRC association for all of the sinks that were associated
   // with the RSID.
   auto it_range = rsid_sinks_.equal_range(rsid);
diff --git a/webrtc/call/rtcp_demuxer.h b/webrtc/call/rtcp_demuxer.h
index 591e011..1919c2b 100644
--- a/webrtc/call/rtcp_demuxer.h
+++ b/webrtc/call/rtcp_demuxer.h
@@ -15,7 +15,7 @@
 #include <string>
 #include <vector>
 
-#include "webrtc/call/rsid_resolution_observer.h"
+#include "webrtc/call/ssrc_binding_observer.h"
 #include "webrtc/rtc_base/array_view.h"
 #include "webrtc/rtc_base/basictypes.h"
 
@@ -26,7 +26,7 @@
 // This class represents the RTCP demuxing, for a single RTP session (i.e., one
 // SSRC space, see RFC 7656). It isn't thread aware, leaving responsibility of
 // multithreading issues to the user of this class.
-class RtcpDemuxer : public RsidResolutionObserver {
+class RtcpDemuxer : public SsrcBindingObserver {
  public:
   RtcpDemuxer();
   ~RtcpDemuxer() override;
@@ -60,9 +60,9 @@
   // Process a new RTCP packet and forward it to the appropriate sinks.
   void OnRtcpPacket(rtc::ArrayView<const uint8_t> packet);
 
-  // Implement RsidResolutionObserver - become notified whenever RSIDs resolve
-  // to an SSRC.
-  void OnRsidResolved(const std::string& rsid, uint32_t ssrc) override;
+  // Implement SsrcBindingObserver - become notified whenever RSIDs resolve to
+  // an SSRC.
+  void OnSsrcBoundToRsid(const std::string& rsid, uint32_t ssrc) override;
 
   // TODO(eladalon): Add the ability to resolve RSIDs and inform observers,
   // like in the RtpDemuxer case, once the relevant standard is finalized.
diff --git a/webrtc/call/rtcp_demuxer_unittest.cc b/webrtc/call/rtcp_demuxer_unittest.cc
index 89b712b..2a0b1f3 100644
--- a/webrtc/call/rtcp_demuxer_unittest.cc
+++ b/webrtc/call/rtcp_demuxer_unittest.cc
@@ -92,7 +92,7 @@
   // Only resolve one of the sinks.
   constexpr size_t resolved_sink_index = 0;
   constexpr uint32_t ssrc = 345;
-  demuxer.OnRsidResolved(rsids[resolved_sink_index], ssrc);
+  demuxer.OnSsrcBoundToRsid(rsids[resolved_sink_index], ssrc);
 
   // The resolved sink gets notifications of RTCP messages with its SSRC.
   auto packet = CreateRtcpPacket(ssrc);
@@ -123,7 +123,7 @@
   demuxer.AddSink(rsid, &sink);
 
   // Resolve the RSID to the aforementioned SSRC.
-  demuxer.OnRsidResolved(rsid, ssrc);
+  demuxer.OnSsrcBoundToRsid(rsid, ssrc);
 
   // OnRtcpPacket still called only a single time for messages with this SSRC.
   auto packet = CreateRtcpPacket(ssrc);
@@ -276,7 +276,7 @@
   uint32_t ssrcs[arraysize(rsids)];
   for (size_t i = 0; i < arraysize(rsids); i++) {
     ssrcs[i] = 1000 + static_cast<uint32_t>(i);
-    demuxer.OnRsidResolved(rsids[i], ssrcs[i]);
+    demuxer.OnSsrcBoundToRsid(rsids[i], ssrcs[i]);
   }
 
   // Set up packets to match those RSIDs/SSRCs.
@@ -312,7 +312,7 @@
   }
 
   constexpr uint32_t shared_ssrc = 888;
-  demuxer.OnRsidResolved(shared_rsid, shared_ssrc);
+  demuxer.OnSsrcBoundToRsid(shared_rsid, shared_ssrc);
 
   auto packet = CreateRtcpPacket(shared_ssrc);
 
@@ -373,7 +373,7 @@
 
   // Removal before resolution.
   demuxer.RemoveSink(&sink);
-  demuxer.OnRsidResolved(rsid, ssrc);
+  demuxer.OnSsrcBoundToRsid(rsid, ssrc);
 
   // The removed sink does not get callbacks.
   auto packet = CreateRtcpPacket(ssrc);
@@ -390,7 +390,7 @@
   demuxer.AddSink(rsid, &sink);
 
   // Removal after resolution.
-  demuxer.OnRsidResolved(rsid, ssrc);
+  demuxer.OnSsrcBoundToRsid(rsid, ssrc);
   demuxer.RemoveSink(&sink);
 
   // The removed sink does not get callbacks.
@@ -443,10 +443,10 @@
   demuxer.AddSink(rsid, &sink);
 
   constexpr uint32_t ssrc_a = 111;  // First resolution - guaranteed effective.
-  demuxer.OnRsidResolved(rsid, ssrc_a);
+  demuxer.OnSsrcBoundToRsid(rsid, ssrc_a);
 
   constexpr uint32_t ssrc_b = 222;  // Second resolution - no guarantees.
-  demuxer.OnRsidResolved(rsid, ssrc_b);
+  demuxer.OnSsrcBoundToRsid(rsid, ssrc_b);
 
   auto packet_a = CreateRtcpPacket(ssrc_a);
   EXPECT_CALL(
diff --git a/webrtc/call/rtp_demuxer.cc b/webrtc/call/rtp_demuxer.cc
index 39fc235..9ad5f12 100644
--- a/webrtc/call/rtp_demuxer.cc
+++ b/webrtc/call/rtp_demuxer.cc
@@ -10,9 +10,9 @@
 
 #include "webrtc/call/rtp_demuxer.h"
 
-#include "webrtc/call/rsid_resolution_observer.h"
 #include "webrtc/call/rtp_packet_sink_interface.h"
 #include "webrtc/call/rtp_rtcp_demuxer_helper.h"
+#include "webrtc/call/ssrc_binding_observer.h"
 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
 #include "webrtc/rtc_base/checks.h"
@@ -62,21 +62,27 @@
   return it_range.first != it_range.second;
 }
 
-void RtpDemuxer::RegisterRsidResolutionObserver(
-    RsidResolutionObserver* observer) {
+void RtpDemuxer::RegisterSsrcBindingObserver(SsrcBindingObserver* observer) {
   RTC_DCHECK(observer);
-  RTC_DCHECK(!ContainerHasKey(rsid_resolution_observers_, observer));
+  RTC_DCHECK(!ContainerHasKey(ssrc_binding_observers_, observer));
 
-  rsid_resolution_observers_.push_back(observer);
+  ssrc_binding_observers_.push_back(observer);
+}
+void RtpDemuxer::RegisterRsidResolutionObserver(SsrcBindingObserver* observer) {
+  RegisterSsrcBindingObserver(observer);
 }
 
-void RtpDemuxer::DeregisterRsidResolutionObserver(
-    const RsidResolutionObserver* observer) {
+void RtpDemuxer::DeregisterSsrcBindingObserver(
+    const SsrcBindingObserver* observer) {
   RTC_DCHECK(observer);
-  auto it = std::find(rsid_resolution_observers_.begin(),
-                      rsid_resolution_observers_.end(), observer);
-  RTC_DCHECK(it != rsid_resolution_observers_.end());
-  rsid_resolution_observers_.erase(it);
+  auto it = std::find(ssrc_binding_observers_.begin(),
+                      ssrc_binding_observers_.end(), observer);
+  RTC_DCHECK(it != ssrc_binding_observers_.end());
+  ssrc_binding_observers_.erase(it);
+}
+void RtpDemuxer::DeregisterRsidResolutionObserver(
+    const SsrcBindingObserver* observer) {
+  DeregisterSsrcBindingObserver(observer);
 }
 
 void RtpDemuxer::ResolveRsidToSsrcAssociations(
@@ -114,8 +120,8 @@
 
 void RtpDemuxer::NotifyObserversOfRsidResolution(const std::string& rsid,
                                                  uint32_t ssrc) {
-  for (auto* observer : rsid_resolution_observers_) {
-    observer->OnRsidResolved(rsid, ssrc);
+  for (auto* observer : ssrc_binding_observers_) {
+    observer->OnSsrcBoundToRsid(rsid, ssrc);
   }
 }
 
diff --git a/webrtc/call/rtp_demuxer.h b/webrtc/call/rtp_demuxer.h
index dccf0b6..702d787 100644
--- a/webrtc/call/rtp_demuxer.h
+++ b/webrtc/call/rtp_demuxer.h
@@ -17,9 +17,9 @@
 
 namespace webrtc {
 
-class RsidResolutionObserver;
 class RtpPacketReceived;
 class RtpPacketSinkInterface;
+class SsrcBindingObserver;
 
 // This class represents the RTP demuxing, for a single RTP session (i.e., one
 // ssrc space, see RFC 7656). It isn't thread aware, leaving responsibility of
@@ -51,10 +51,14 @@
 
   // Allows other objects to be notified when RSID-SSRC associations are
   // resolved by this object.
-  void RegisterRsidResolutionObserver(RsidResolutionObserver* observer);
+  void RegisterSsrcBindingObserver(SsrcBindingObserver* observer);
+  // Deprecated: Use the above method.
+  void RegisterRsidResolutionObserver(SsrcBindingObserver* observer);
 
-  // Undo a previous RegisterRsidResolutionObserver().
-  void DeregisterRsidResolutionObserver(const RsidResolutionObserver* observer);
+  // Undo a previous RegisterSsrcBindingObserver().
+  void DeregisterSsrcBindingObserver(const SsrcBindingObserver* observer);
+  // Deprecated: Use the above method.
+  void DeregisterRsidResolutionObserver(const SsrcBindingObserver* observer);
 
  private:
   // Find the associations of RSID to SSRCs.
@@ -75,7 +79,7 @@
 
   // Observers which will be notified when an RSID association to an SSRC is
   // resolved by this object.
-  std::vector<RsidResolutionObserver*> rsid_resolution_observers_;
+  std::vector<SsrcBindingObserver*> ssrc_binding_observers_;
 };
 
 }  // namespace webrtc
diff --git a/webrtc/call/rtp_demuxer_unittest.cc b/webrtc/call/rtp_demuxer_unittest.cc
index f9196ca..92728bb 100644
--- a/webrtc/call/rtp_demuxer_unittest.cc
+++ b/webrtc/call/rtp_demuxer_unittest.cc
@@ -13,7 +13,7 @@
 #include <memory>
 #include <string>
 
-#include "webrtc/call/rsid_resolution_observer.h"
+#include "webrtc/call/ssrc_binding_observer.h"
 #include "webrtc/call/test/mock_rtp_packet_sink_interface.h"
 #include "webrtc/common_types.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_header_extension_map.h"
@@ -35,9 +35,9 @@
 using ::testing::InSequence;
 using ::testing::NiceMock;
 
-class MockRsidResolutionObserver : public RsidResolutionObserver {
+class MockSsrcBindingObserver : public SsrcBindingObserver {
  public:
-  MOCK_METHOD2(OnRsidResolved, void(const std::string& rsid, uint32_t ssrc));
+  MOCK_METHOD2(OnSsrcBoundToRsid, void(const std::string& rsid, uint32_t ssrc));
 };
 
 MATCHER_P(SamePacketAs, other, "") {
@@ -517,18 +517,18 @@
   NiceMock<MockRtpPacketSink> sink;
   demuxer.AddSink(rsid, &sink);
 
-  MockRsidResolutionObserver rsid_resolution_observers[3];
+  MockSsrcBindingObserver rsid_resolution_observers[3];
   for (auto& observer : rsid_resolution_observers) {
-    demuxer.RegisterRsidResolutionObserver(&observer);
-    EXPECT_CALL(observer, OnRsidResolved(rsid, ssrc)).Times(1);
+    demuxer.RegisterSsrcBindingObserver(&observer);
+    EXPECT_CALL(observer, OnSsrcBoundToRsid(rsid, ssrc)).Times(1);
   }
 
-  // The expected calls to OnRsidResolved() will be triggered by this.
+  // The expected calls to OnSsrcBoundToRsid() will be triggered by this.
   demuxer.OnRtpPacket(*CreateRtpPacketReceivedWithRsid(rsid, ssrc));
 
   // Test tear-down
   for (auto& observer : rsid_resolution_observers) {
-    demuxer.DeregisterRsidResolutionObserver(&observer);
+    demuxer.DeregisterSsrcBindingObserver(&observer);
   }
   demuxer.RemoveSink(&sink);
 }
@@ -539,10 +539,10 @@
   constexpr uint32_t ssrc = 111;
   const std::string rsid = "a";
 
-  MockRsidResolutionObserver rsid_resolution_observers[3];
+  MockSsrcBindingObserver rsid_resolution_observers[3];
   for (auto& observer : rsid_resolution_observers) {
-    demuxer.RegisterRsidResolutionObserver(&observer);
-    EXPECT_CALL(observer, OnRsidResolved(rsid, ssrc)).Times(0);
+    demuxer.RegisterSsrcBindingObserver(&observer);
+    EXPECT_CALL(observer, OnSsrcBoundToRsid(rsid, ssrc)).Times(0);
   }
 
   // The expected calls to OnRsidResolved() will be triggered by this.
@@ -550,7 +550,7 @@
 
   // Test tear-down
   for (auto& observer : rsid_resolution_observers) {
-    demuxer.DeregisterRsidResolutionObserver(&observer);
+    demuxer.DeregisterSsrcBindingObserver(&observer);
   }
 }
 
@@ -592,11 +592,11 @@
   NiceMock<MockRtpPacketSink> rsid_sink;
   demuxer.AddSink(rsid, &rsid_sink);
 
-  MockRsidResolutionObserver observer;
-  demuxer.RegisterRsidResolutionObserver(&observer);
+  MockSsrcBindingObserver observer;
+  demuxer.RegisterSsrcBindingObserver(&observer);
 
   auto packet = CreateRtpPacketReceivedWithRsid(rsid, ssrc);
-  EXPECT_CALL(observer, OnRsidResolved(_, _)).Times(0);
+  EXPECT_CALL(observer, OnSsrcBoundToRsid(_, _)).Times(0);
   demuxer.OnRtpPacket(*packet);
 
   // Test tear-down
@@ -617,8 +617,8 @@
   MockRtpPacketSink rsid_sink;
   demuxer.AddSink(rsid, &rsid_sink);
 
-  MockRsidResolutionObserver observer;
-  demuxer.RegisterRsidResolutionObserver(&observer);
+  MockSsrcBindingObserver observer;
+  demuxer.RegisterSsrcBindingObserver(&observer);
 
   // The SSRC was mapped to an SSRC sink, but was even active (packets flowed
   // over it).
@@ -630,11 +630,11 @@
   // is guaranteed.
   demuxer.RemoveSink(&ssrc_sink);
   EXPECT_CALL(rsid_sink, OnRtpPacket(SamePacketAs(*packet))).Times(AtLeast(0));
-  EXPECT_CALL(observer, OnRsidResolved(rsid, ssrc)).Times(AtLeast(0));
+  EXPECT_CALL(observer, OnSsrcBoundToRsid(rsid, ssrc)).Times(AtLeast(0));
   demuxer.OnRtpPacket(*packet);
 
   // Test tear-down
-  demuxer.DeregisterRsidResolutionObserver(&observer);
+  demuxer.DeregisterSsrcBindingObserver(&observer);
   demuxer.RemoveSink(&rsid_sink);
 }
 
@@ -648,27 +648,27 @@
 
   // Register several, then deregister only one, to show that not all of the
   // observers had been forgotten when one was removed.
-  MockRsidResolutionObserver observer_1;
-  MockRsidResolutionObserver observer_2_removed;
-  MockRsidResolutionObserver observer_3;
+  MockSsrcBindingObserver observer_1;
+  MockSsrcBindingObserver observer_2_removed;
+  MockSsrcBindingObserver observer_3;
 
-  demuxer.RegisterRsidResolutionObserver(&observer_1);
-  demuxer.RegisterRsidResolutionObserver(&observer_2_removed);
-  demuxer.RegisterRsidResolutionObserver(&observer_3);
+  demuxer.RegisterSsrcBindingObserver(&observer_1);
+  demuxer.RegisterSsrcBindingObserver(&observer_2_removed);
+  demuxer.RegisterSsrcBindingObserver(&observer_3);
 
-  demuxer.DeregisterRsidResolutionObserver(&observer_2_removed);
+  demuxer.DeregisterSsrcBindingObserver(&observer_2_removed);
 
-  EXPECT_CALL(observer_1, OnRsidResolved(rsid, ssrc)).Times(1);
-  EXPECT_CALL(observer_2_removed, OnRsidResolved(_, _)).Times(0);
-  EXPECT_CALL(observer_3, OnRsidResolved(rsid, ssrc)).Times(1);
+  EXPECT_CALL(observer_1, OnSsrcBoundToRsid(rsid, ssrc)).Times(1);
+  EXPECT_CALL(observer_2_removed, OnSsrcBoundToRsid(_, _)).Times(0);
+  EXPECT_CALL(observer_3, OnSsrcBoundToRsid(rsid, ssrc)).Times(1);
 
-  // The expected calls to OnRsidResolved() will be triggered by this.
+  // The expected calls to OnSsrcBoundToRsid() will be triggered by this.
   demuxer.OnRtpPacket(*CreateRtpPacketReceivedWithRsid(rsid, ssrc));
 
   // Test tear-down
   demuxer.RemoveSink(&sink);
-  demuxer.DeregisterRsidResolutionObserver(&observer_1);
-  demuxer.DeregisterRsidResolutionObserver(&observer_3);
+  demuxer.DeregisterSsrcBindingObserver(&observer_1);
+  demuxer.DeregisterSsrcBindingObserver(&observer_3);
 }
 
 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
@@ -723,21 +723,21 @@
 
 TEST(RtpDemuxerTest, DoubleRegisterationOfRsidResolutionObserverDisallowed) {
   RtpDemuxer demuxer;
-  MockRsidResolutionObserver observer;
-  demuxer.RegisterRsidResolutionObserver(&observer);
+  MockSsrcBindingObserver observer;
+  demuxer.RegisterSsrcBindingObserver(&observer);
 
-  EXPECT_DEATH(demuxer.RegisterRsidResolutionObserver(&observer), "");
+  EXPECT_DEATH(demuxer.RegisterSsrcBindingObserver(&observer), "");
 
   // Test tear-down
-  demuxer.DeregisterRsidResolutionObserver(&observer);
+  demuxer.DeregisterSsrcBindingObserver(&observer);
 }
 
 TEST(RtpDemuxerTest,
      DregisterationOfNeverRegisteredRsidResolutionObserverDisallowed) {
   RtpDemuxer demuxer;
-  MockRsidResolutionObserver observer;
+  MockSsrcBindingObserver observer;
 
-  EXPECT_DEATH(demuxer.DeregisterRsidResolutionObserver(&observer), "");
+  EXPECT_DEATH(demuxer.DeregisterSsrcBindingObserver(&observer), "");
 }
 
 #endif
diff --git a/webrtc/call/ssrc_binding_observer.h b/webrtc/call/ssrc_binding_observer.h
new file mode 100644
index 0000000..d7892aa
--- /dev/null
+++ b/webrtc/call/ssrc_binding_observer.h
@@ -0,0 +1,34 @@
+/*
+ *  Copyright (c) 2017 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 WEBRTC_CALL_SSRC_BINDING_OBSERVER_H_
+#define WEBRTC_CALL_SSRC_BINDING_OBSERVER_H_
+
+#include <string>
+
+#include "webrtc/rtc_base/basictypes.h"
+
+namespace webrtc {
+
+// With newer versions of SDP, SSRC is often not explicitly signaled and must
+// be learned on the fly. This happens by correlating packet SSRCs with included
+// RTP extension headers like MID and RSID, or by receiving information from
+// RTCP messages.
+// SsrcBindingObservers will be notified when a new binding is learned, which
+// can happen during call setup and/or during the call.
+class SsrcBindingObserver {
+ public:
+  virtual ~SsrcBindingObserver() = default;
+
+  virtual void OnSsrcBoundToRsid(const std::string& rsid, uint32_t ssrc) = 0;
+};
+
+}  // namespace webrtc
+
+#endif  // WEBRTC_CALL_SSRC_BINDING_OBSERVER_H_