Revert "Improve spec compliance of SetStreamIDs in RtpSenderInterface"

This reverts commit df5731e44d510e9f23a35b77e9e102eb41919bf4.

Reason for revert: Breaks WebRTC in Chrome FYI for all platforms.

https://ci.chromium.org/p/chromium/builders/webrtc.fyi/WebRTC%20Chromium%20FYI%20Mac%20Tester/2966

Original change's description:
> Improve spec compliance of SetStreamIDs in RtpSenderInterface
>
> This CL makes RtpSender::SetStreamIDs fire fire negotiationneeded
> event if needed and exposes the method on RtpSenderInterface.
>
> This is a spec-compliance change.
>
> Bug: webrtc:10129
> Change-Id: I2b98b92665c847102838b094516a79b24de0e47e
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/135121
> Commit-Queue: Guido Urdaneta <guidou@webrtc.org>
> Reviewed-by: Steve Anton <steveanton@webrtc.org>
> Reviewed-by: Henrik Boström <hbos@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#27974}

TBR=steveanton@webrtc.org,hbos@webrtc.org,guidou@webrtc.org

# Passing all bots except for flaky webrtc_perf_tests
NOTRY=True

Bug: webrtc:10129
Change-Id: If97317f7a01b34465685fcebbeea0d7576ed7328
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137431
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27988}
diff --git a/api/rtp_sender_interface.h b/api/rtp_sender_interface.h
index 8507731..e0a29a3 100644
--- a/api/rtp_sender_interface.h
+++ b/api/rtp_sender_interface.h
@@ -61,11 +61,6 @@
   // tracks.
   virtual std::vector<std::string> stream_ids() const = 0;
 
-  // Sets the IDs of the media streams associated with  this sender's track.
-  // These are signalled in the SDP so that the remote side can associate
-  // tracks.
-  virtual void SetStreamIDs(const std::vector<std::string>& stream_ids) {}
-
   // Returns the list of encoding parameters that will be applied when the SDP
   // local description is set. These initial encoding parameters can be set by
   // PeerConnection::AddTransceiver, and later updated with Get/SetParameters.
@@ -117,7 +112,6 @@
               rtc::scoped_refptr<FrameEncryptorInterface>)
 PROXY_CONSTMETHOD0(rtc::scoped_refptr<FrameEncryptorInterface>,
                    GetFrameEncryptor)
-PROXY_METHOD1(void, SetStreamIDs, const std::vector<std::string>&)
 END_PROXY_MAP()
 
 }  // namespace webrtc
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index 551b0ed..065247d 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -1373,7 +1373,7 @@
           RtpTransceiverDirection::kSendOnly);
     }
     transceiver->sender()->SetTrack(track);
-    transceiver->internal()->sender_internal()->SetStreamIDs(stream_ids);
+    transceiver->internal()->sender_internal()->set_stream_ids(stream_ids);
   } else {
     cricket::MediaType media_type =
         (track->kind() == MediaStreamTrackInterface::kAudioKind
@@ -1632,19 +1632,19 @@
                (track->kind() == MediaStreamTrackInterface::kAudioKind));
     sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
         signaling_thread(),
-        AudioRtpSender::Create(worker_thread(), id, stats_.get(), this));
+        AudioRtpSender::Create(worker_thread(), id, stats_.get()));
     NoteUsageEvent(UsageEvent::AUDIO_ADDED);
   } else {
     RTC_DCHECK_EQ(media_type, cricket::MEDIA_TYPE_VIDEO);
     RTC_DCHECK(!track ||
                (track->kind() == MediaStreamTrackInterface::kVideoKind));
     sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
-        signaling_thread(), VideoRtpSender::Create(worker_thread(), id, this));
+        signaling_thread(), VideoRtpSender::Create(worker_thread(), id));
     NoteUsageEvent(UsageEvent::VIDEO_ADDED);
   }
   bool set_track_succeeded = sender->SetTrack(track);
   RTC_DCHECK(set_track_succeeded);
-  sender->internal()->SetStreamIDs(stream_ids);
+  sender->internal()->set_stream_ids(stream_ids);
   sender->internal()->set_init_send_encodings(send_encodings);
   return sender;
 }
@@ -1722,14 +1722,14 @@
   rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender;
   if (kind == MediaStreamTrackInterface::kAudioKind) {
     auto audio_sender = AudioRtpSender::Create(
-        worker_thread(), rtc::CreateRandomUuid(), stats_.get(), this);
+        worker_thread(), rtc::CreateRandomUuid(), stats_.get());
     audio_sender->SetMediaChannel(voice_media_channel());
     new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
         signaling_thread(), audio_sender);
     GetAudioTransceiver()->internal()->AddSender(new_sender);
   } else if (kind == MediaStreamTrackInterface::kVideoKind) {
     auto video_sender =
-        VideoRtpSender::Create(worker_thread(), rtc::CreateRandomUuid(), this);
+        VideoRtpSender::Create(worker_thread(), rtc::CreateRandomUuid());
     video_sender->SetMediaChannel(video_media_channel());
     new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
         signaling_thread(), video_sender);
@@ -1738,7 +1738,7 @@
     RTC_LOG(LS_ERROR) << "CreateSender called with invalid kind: " << kind;
     return nullptr;
   }
-  new_sender->internal()->SetStreamIDs(stream_ids);
+  new_sender->internal()->set_stream_ids(stream_ids);
 
   return new_sender;
 }
@@ -2361,7 +2361,7 @@
       } else {
         // Get the StreamParams from the channel which could generate SSRCs.
         const std::vector<StreamParams>& streams = channel->local_streams();
-        transceiver->internal()->sender_internal()->SetStreamIDs(
+        transceiver->internal()->sender_internal()->set_stream_ids(
             streams[0].stream_ids());
         transceiver->internal()->sender_internal()->SetSsrc(
             streams[0].first_ssrc());
@@ -4010,7 +4010,7 @@
   if (sender) {
     // We already have a sender for this track, so just change the stream_id
     // so that it's correct in the next call to CreateOffer.
-    sender->internal()->SetStreamIDs({stream->id()});
+    sender->internal()->set_stream_ids({stream->id()});
     return;
   }
 
@@ -4055,7 +4055,7 @@
   if (sender) {
     // We already have a sender for this track, so just change the stream_id
     // so that it's correct in the next call to CreateOffer.
-    sender->internal()->SetStreamIDs({stream->id()});
+    sender->internal()->set_stream_ids({stream->id()});
     return;
   }
 
@@ -4987,7 +4987,7 @@
     return;
   }
 
-  sender->internal()->SetStreamIDs({sender_info.stream_id});
+  sender->internal()->set_stream_ids({sender_info.stream_id});
   sender->internal()->SetSsrc(sender_info.first_ssrc);
 }
 
@@ -7130,12 +7130,6 @@
   return ret;
 }
 
-void PeerConnection::OnSetStreamIDs() {
-  RTC_DCHECK_RUN_ON(signaling_thread());
-  if (IsUnifiedPlan())
-    UpdateNegotiationNeeded();
-}
-
 PeerConnectionObserver* PeerConnection::Observer() const {
   // In earlier production code, the pointer was not cleared on close,
   // which might have led to undefined behavior if the observer was not
diff --git a/pc/peer_connection.h b/pc/peer_connection.h
index f636c00..3009185 100644
--- a/pc/peer_connection.h
+++ b/pc/peer_connection.h
@@ -25,7 +25,6 @@
 #include "pc/peer_connection_factory.h"
 #include "pc/peer_connection_internal.h"
 #include "pc/rtc_stats_collector.h"
-#include "pc/rtp_sender.h"
 #include "pc/rtp_transceiver.h"
 #include "pc/sctp_transport.h"
 #include "pc/stats_collector.h"
@@ -58,7 +57,6 @@
                        public DataChannelProviderInterface,
                        public DataChannelSink,
                        public JsepTransportController::Observer,
-                       public RtpSenderBase::SetStreamIDsObserver,
                        public rtc::MessageHandler,
                        public sigslot::has_slots<> {
  public:
@@ -1057,9 +1055,6 @@
                           rtc::scoped_refptr<DtlsTransport> dtls_transport,
                           MediaTransportInterface* media_transport) override;
 
-  // RtpSenderBase::SetStreamIDsObserver override.
-  void OnSetStreamIDs() override;
-
   // Returns the observer. Will crash on CHECK if the observer is removed.
   PeerConnectionObserver* Observer() const RTC_RUN_ON(signaling_thread());
 
diff --git a/pc/peer_connection_rtp_unittest.cc b/pc/peer_connection_rtp_unittest.cc
index 8e99727..6925300 100644
--- a/pc/peer_connection_rtp_unittest.cc
+++ b/pc/peer_connection_rtp_unittest.cc
@@ -491,8 +491,15 @@
   ASSERT_TRUE(callee->CreateAnswerAndSetAsLocal());
 
   // Change the stream ID in the offer.
-  caller->pc()->GetSenders()[0]->SetStreamIDs({"stream2"});
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
+  // TODO(https://crbug.com/webrtc/10129): When RtpSenderInterface::SetStreams
+  // is supported, this can use that instead of munging the SDP.
+  auto offer = caller->CreateOffer();
+  auto contents = offer->description()->contents();
+  ASSERT_EQ(1u, contents.size());
+  auto& stream_params = contents[0].media_description()->mutable_streams();
+  ASSERT_EQ(1u, stream_params.size());
+  stream_params[0].set_stream_ids({"stream2"});
+  ASSERT_TRUE(callee->SetRemoteDescription(std::move(offer)));
   ASSERT_EQ(1u, transceiver->receiver()->streams().size());
   EXPECT_EQ("stream2", transceiver->receiver()->streams()[0]->id());
 }
@@ -1790,7 +1797,12 @@
 
 // This test exercises the code path that fires a NegotiationNeeded
 // notification when the stream IDs of the local description differ from
-// the ones in the transceiver.
+// the ones in the transceiver. Since SetStreams() is not yet available
+// on RtpSenderInterface, adding a track is used to trigger the check for
+// the NegotiationNeeded notification.
+// TODO(https://crbug.com/webrtc/10129): Replace this test with a test that
+// checks that calling SetStreams() on a sender fires the notification once
+// the method becomes available in RtpSenderInterface.
 TEST_F(PeerConnectionRtpTestUnifiedPlan,
        ChangeAssociatedStreamsTriggersRenegotiation) {
   auto caller = CreatePeerConnection();
@@ -1805,15 +1817,18 @@
   ASSERT_TRUE(caller->ExchangeOfferAnswerWith(callee.get()));
   caller->observer()->clear_negotiation_needed();
 
-  transceiver->sender()->SetStreamIDs({"stream3", "stream4", "stream5"});
-  EXPECT_TRUE(caller->observer()->negotiation_needed());
+  SessionDescriptionInterface* cld = const_cast<SessionDescriptionInterface*>(
+      caller->pc()->current_local_description());
+  ASSERT_EQ(cld->description()->contents().size(), 1u);
 
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-  auto callee_streams = callee->pc()->GetReceivers()[0]->streams();
-  ASSERT_EQ(3u, callee_streams.size());
-  EXPECT_EQ("stream3", callee_streams[0]->id());
-  EXPECT_EQ("stream4", callee_streams[1]->id());
-  EXPECT_EQ("stream5", callee_streams[2]->id());
+  cricket::SessionDescription* description = cld->description();
+  cricket::ContentInfo& content_info = description->contents()[0];
+  ASSERT_EQ(content_info.media_description()->mutable_streams().size(), 1u);
+  content_info.media_description()->mutable_streams()[0].set_stream_ids(
+      {"stream3", "stream4", "stream5"});
+
+  ASSERT_TRUE(caller->AddTrack(caller->CreateAudioTrack("a2")));
+  EXPECT_TRUE(caller->observer()->negotiation_needed());
 }
 
 INSTANTIATE_TEST_SUITE_P(PeerConnectionRtpTest,
diff --git a/pc/rtp_sender.cc b/pc/rtp_sender.cc
index 6097034..22957d3 100644
--- a/pc/rtp_sender.cc
+++ b/pc/rtp_sender.cc
@@ -16,7 +16,6 @@
 #include "api/audio_options.h"
 #include "api/media_stream_interface.h"
 #include "media/base/media_engine.h"
-#include "pc/peer_connection.h"
 #include "pc/stats_collector.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/helpers.h"
@@ -119,12 +118,8 @@
   return false;
 }
 
-RtpSenderBase::RtpSenderBase(rtc::Thread* worker_thread,
-                             const std::string& id,
-                             SetStreamIDsObserver* set_stream_ids_observer)
-    : worker_thread_(worker_thread),
-      id_(id),
-      set_stream_ids_observer_(set_stream_ids_observer) {
+RtpSenderBase::RtpSenderBase(rtc::Thread* worker_thread, const std::string& id)
+    : worker_thread_(worker_thread), id_(id) {
   RTC_DCHECK(worker_thread);
   init_parameters_.encodings.emplace_back();
 }
@@ -220,12 +215,6 @@
   return result;
 }
 
-void RtpSenderBase::SetStreamIDs(const std::vector<std::string>& stream_ids) {
-  stream_ids_ = stream_ids;
-  if (set_stream_ids_observer_)
-    set_stream_ids_observer_->OnSetStreamIDs();
-}
-
 bool RtpSenderBase::SetTrack(MediaStreamTrackInterface* track) {
   TRACE_EVENT0("webrtc", "RtpSenderBase::SetTrack");
   if (stopped_) {
@@ -328,7 +317,6 @@
     RemoveTrackFromStats();
   }
   media_channel_ = nullptr;
-  set_stream_ids_observer_ = nullptr;
   stopped_ = true;
 }
 
@@ -407,18 +395,15 @@
 rtc::scoped_refptr<AudioRtpSender> AudioRtpSender::Create(
     rtc::Thread* worker_thread,
     const std::string& id,
-    StatsCollector* stats,
-    SetStreamIDsObserver* set_stream_ids_observer) {
+    StatsCollector* stats) {
   return rtc::scoped_refptr<AudioRtpSender>(
-      new rtc::RefCountedObject<AudioRtpSender>(worker_thread, id, stats,
-                                                set_stream_ids_observer));
+      new rtc::RefCountedObject<AudioRtpSender>(worker_thread, id, stats));
 }
 
 AudioRtpSender::AudioRtpSender(rtc::Thread* worker_thread,
                                const std::string& id,
-                               StatsCollector* stats,
-                               SetStreamIDsObserver* set_stream_ids_observer)
-    : RtpSenderBase(worker_thread, id, set_stream_ids_observer),
+                               StatsCollector* stats)
+    : RtpSenderBase(worker_thread, id),
       stats_(stats),
       dtmf_sender_proxy_(DtmfSenderProxy::Create(
           rtc::Thread::Current(),
@@ -554,17 +539,14 @@
 
 rtc::scoped_refptr<VideoRtpSender> VideoRtpSender::Create(
     rtc::Thread* worker_thread,
-    const std::string& id,
-    SetStreamIDsObserver* set_stream_ids_observer) {
+    const std::string& id) {
   return rtc::scoped_refptr<VideoRtpSender>(
-      new rtc::RefCountedObject<VideoRtpSender>(worker_thread, id,
-                                                set_stream_ids_observer));
+      new rtc::RefCountedObject<VideoRtpSender>(worker_thread, id));
 }
 
 VideoRtpSender::VideoRtpSender(rtc::Thread* worker_thread,
-                               const std::string& id,
-                               SetStreamIDsObserver* set_stream_ids_observer)
-    : RtpSenderBase(worker_thread, id, set_stream_ids_observer) {}
+                               const std::string& id)
+    : RtpSenderBase(worker_thread, id) {}
 
 VideoRtpSender::~VideoRtpSender() {
   Stop();
diff --git a/pc/rtp_sender.h b/pc/rtp_sender.h
index 73c6925..c786d90 100644
--- a/pc/rtp_sender.h
+++ b/pc/rtp_sender.h
@@ -47,7 +47,7 @@
   // description).
   virtual void SetSsrc(uint32_t ssrc) = 0;
 
-  virtual void SetStreamIDs(const std::vector<std::string>& stream_ids) {}
+  virtual void set_stream_ids(const std::vector<std::string>& stream_ids) = 0;
   virtual void set_init_send_encodings(
       const std::vector<RtpEncodingParameters>& init_send_encodings) = 0;
   virtual void set_transport(
@@ -74,12 +74,6 @@
 // Shared implementation for RtpSenderInternal interface.
 class RtpSenderBase : public RtpSenderInternal, public ObserverInterface {
  public:
-  class SetStreamIDsObserver {
-   public:
-    virtual ~SetStreamIDsObserver() = default;
-    virtual void OnSetStreamIDs() = 0;
-  };
-
   // Sets the underlying MediaEngine channel associated with this RtpSender.
   // A VoiceMediaChannel should be used for audio RtpSenders and
   // a VideoMediaChannel should be used for video RtpSenders.
@@ -107,7 +101,9 @@
   uint32_t ssrc() const override { return ssrc_; }
 
   std::vector<std::string> stream_ids() const override { return stream_ids_; }
-  void SetStreamIDs(const std::vector<std::string>& stream_ids) override;
+  void set_stream_ids(const std::vector<std::string>& stream_ids) override {
+    stream_ids_ = stream_ids;
+  }
 
   std::string id() const override { return id_; }
 
@@ -147,12 +143,7 @@
   RTCError DisableEncodingLayers(const std::vector<std::string>& rid) override;
 
  protected:
-  // If |set_stream_ids_observer| is not null, it is invoked when SetStreamIDs
-  // is called. |set_stream_ids_observer| is not owned by this object. If not
-  // null, it must be valid at least until this sender becomes stopped.
-  RtpSenderBase(rtc::Thread* worker_thread,
-                const std::string& id,
-                SetStreamIDsObserver* set_stream_ids_observer);
+  RtpSenderBase(rtc::Thread* worker_thread, const std::string& id);
   // TODO(nisse): Since SSRC == 0 is technically valid, figure out
   // some other way to test if we have a valid SSRC.
   bool can_send_track() const { return track_ && ssrc_; }
@@ -192,8 +183,6 @@
   // const method.
   mutable absl::optional<std::string> last_transaction_id_;
   std::vector<std::string> disabled_rids_;
-
-  SetStreamIDsObserver* set_stream_ids_observer_ = nullptr;
 };
 
 // LocalAudioSinkAdapter receives data callback as a sink to the local
@@ -226,14 +215,9 @@
   // The sender is initialized with no track to send and no associated streams.
   // StatsCollector provided so that Add/RemoveLocalAudioTrack can be called
   // at the appropriate times.
-  // If |set_stream_ids_observer| is not null, it is invoked when SetStreamIDs
-  // is called. |set_stream_ids_observer| is not owned by this object. If not
-  // null, it must be valid at least until this sender becomes stopped.
-  static rtc::scoped_refptr<AudioRtpSender> Create(
-      rtc::Thread* worker_thread,
-      const std::string& id,
-      StatsCollector* stats,
-      SetStreamIDsObserver* set_stream_ids_observer);
+  static rtc::scoped_refptr<AudioRtpSender> Create(rtc::Thread* worker_thread,
+                                                   const std::string& id,
+                                                   StatsCollector* stats);
   virtual ~AudioRtpSender();
 
   // DtmfSenderProvider implementation.
@@ -256,8 +240,7 @@
  protected:
   AudioRtpSender(rtc::Thread* worker_thread,
                  const std::string& id,
-                 StatsCollector* stats,
-                 SetStreamIDsObserver* set_stream_ids_observer);
+                 StatsCollector* stats);
 
   void SetSend() override;
   void ClearSend() override;
@@ -291,13 +274,8 @@
  public:
   // Construct an RtpSender for video with the given sender ID.
   // The sender is initialized with no track to send and no associated streams.
-  // If |set_stream_ids_observer| is not null, it is invoked when SetStreamIDs
-  // is called. |set_stream_ids_observer| is not owned by this object. If not
-  // null, it must be valid at least until this sender becomes stopped.
-  static rtc::scoped_refptr<VideoRtpSender> Create(
-      rtc::Thread* worker_thread,
-      const std::string& id,
-      SetStreamIDsObserver* set_stream_ids_observer);
+  static rtc::scoped_refptr<VideoRtpSender> Create(rtc::Thread* worker_thread,
+                                                   const std::string& id);
   virtual ~VideoRtpSender();
 
   // ObserverInterface implementation
@@ -313,9 +291,7 @@
   rtc::scoped_refptr<DtmfSenderInterface> GetDtmfSender() const override;
 
  protected:
-  VideoRtpSender(rtc::Thread* worker_thread,
-                 const std::string& id,
-                 SetStreamIDsObserver* set_stream_ids_observer);
+  VideoRtpSender(rtc::Thread* worker_thread, const std::string& id);
 
   void SetSend() override;
   void ClearSend() override;
diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc
index be8c472..90ca03f 100644
--- a/pc/rtp_sender_receiver_unittest.cc
+++ b/pc/rtp_sender_receiver_unittest.cc
@@ -83,13 +83,6 @@
 static const uint32_t kVideoSsrcSimulcast = 102;
 static const uint32_t kVideoSimulcastLayerCount = 2;
 static const int kDefaultTimeout = 10000;  // 10 seconds.
-
-class MockSetStreamIDsObserver
-    : public webrtc::RtpSenderBase::SetStreamIDsObserver {
- public:
-  MOCK_METHOD0(OnSetStreamIDs, void());
-};
-
 }  // namespace
 
 namespace webrtc {
@@ -194,14 +187,10 @@
       const rtc::scoped_refptr<LocalAudioSource>& source) {
     audio_track_ = AudioTrack::Create(kAudioTrackId, source);
     EXPECT_TRUE(local_stream_->AddTrack(audio_track_));
-    std::unique_ptr<MockSetStreamIDsObserver> set_stream_ids_observer =
-        absl::make_unique<MockSetStreamIDsObserver>();
     audio_rtp_sender_ =
-        AudioRtpSender::Create(worker_thread_, audio_track_->id(), nullptr,
-                               set_stream_ids_observer.get());
+        AudioRtpSender::Create(worker_thread_, audio_track_->id(), nullptr);
     ASSERT_TRUE(audio_rtp_sender_->SetTrack(audio_track_));
-    EXPECT_CALL(*set_stream_ids_observer, OnSetStreamIDs());
-    audio_rtp_sender_->SetStreamIDs({local_stream_->id()});
+    audio_rtp_sender_->set_stream_ids({local_stream_->id()});
     audio_rtp_sender_->SetMediaChannel(voice_media_channel_);
     audio_rtp_sender_->SetSsrc(kAudioSsrc);
     audio_rtp_sender_->GetOnDestroyedSignal()->connect(
@@ -211,7 +200,7 @@
 
   void CreateAudioRtpSenderWithNoTrack() {
     audio_rtp_sender_ =
-        AudioRtpSender::Create(worker_thread_, /*id=*/"", nullptr, nullptr);
+        AudioRtpSender::Create(worker_thread_, /*id=*/"", nullptr);
     audio_rtp_sender_->SetMediaChannel(voice_media_channel_);
   }
 
@@ -259,20 +248,16 @@
 
   void CreateVideoRtpSender(bool is_screencast, uint32_t ssrc = kVideoSsrc) {
     AddVideoTrack(is_screencast);
-    std::unique_ptr<MockSetStreamIDsObserver> set_stream_ids_observer =
-        absl::make_unique<MockSetStreamIDsObserver>();
-    video_rtp_sender_ = VideoRtpSender::Create(
-        worker_thread_, video_track_->id(), set_stream_ids_observer.get());
+    video_rtp_sender_ =
+        VideoRtpSender::Create(worker_thread_, video_track_->id());
     ASSERT_TRUE(video_rtp_sender_->SetTrack(video_track_));
-    EXPECT_CALL(*set_stream_ids_observer, OnSetStreamIDs());
-    video_rtp_sender_->SetStreamIDs({local_stream_->id()});
+    video_rtp_sender_->set_stream_ids({local_stream_->id()});
     video_rtp_sender_->SetMediaChannel(video_media_channel_);
     video_rtp_sender_->SetSsrc(ssrc);
     VerifyVideoChannelInput(ssrc);
   }
   void CreateVideoRtpSenderWithNoTrack() {
-    video_rtp_sender_ =
-        VideoRtpSender::Create(worker_thread_, /*id=*/"", nullptr);
+    video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, /*id=*/"");
     video_rtp_sender_->SetMediaChannel(video_media_channel_);
   }
 
@@ -443,7 +428,7 @@
   void RunDisableSimulcastLayersWithoutMediaEngineTest(
       const std::vector<std::string>& all_layers,
       const std::vector<std::string>& disabled_layers) {
-    auto sender = VideoRtpSender::Create(rtc::Thread::Current(), "1", nullptr);
+    auto sender = VideoRtpSender::Create(rtc::Thread::Current(), "1");
     RtpParameters parameters;
     parameters.encodings.resize(all_layers.size());
     for (size_t i = 0; i < all_layers.size(); ++i) {
@@ -835,7 +820,7 @@
 
 TEST_F(RtpSenderReceiverTest, AudioSenderCanSetParametersBeforeNegotiation) {
   audio_rtp_sender_ =
-      AudioRtpSender::Create(worker_thread_, /*id=*/"", nullptr, nullptr);
+      AudioRtpSender::Create(worker_thread_, /*id=*/"", nullptr);
 
   RtpParameters params = audio_rtp_sender_->GetParameters();
   ASSERT_EQ(1u, params.encodings.size());
@@ -853,14 +838,10 @@
   audio_track_ = AudioTrack::Create(kAudioTrackId, nullptr);
   EXPECT_TRUE(local_stream_->AddTrack(audio_track_));
 
-  std::unique_ptr<MockSetStreamIDsObserver> set_stream_ids_observer =
-      absl::make_unique<MockSetStreamIDsObserver>();
   audio_rtp_sender_ =
-      AudioRtpSender::Create(worker_thread_, audio_track_->id(), nullptr,
-                             set_stream_ids_observer.get());
+      AudioRtpSender::Create(worker_thread_, audio_track_->id(), nullptr);
   ASSERT_TRUE(audio_rtp_sender_->SetTrack(audio_track_));
-  EXPECT_CALL(*set_stream_ids_observer, OnSetStreamIDs());
-  audio_rtp_sender_->SetStreamIDs({local_stream_->id()});
+  audio_rtp_sender_->set_stream_ids({local_stream_->id()});
 
   std::vector<RtpEncodingParameters> init_encodings(1);
   init_encodings[0].max_bitrate_bps = 60000;
@@ -888,7 +869,7 @@
 TEST_F(RtpSenderReceiverTest,
        AudioSenderMustCallGetParametersBeforeSetParametersBeforeNegotiation) {
   audio_rtp_sender_ =
-      AudioRtpSender::Create(worker_thread_, /*id=*/"", nullptr, nullptr);
+      AudioRtpSender::Create(worker_thread_, /*id=*/"", nullptr);
 
   RtpParameters params;
   RTCError result = audio_rtp_sender_->SetParameters(params);
@@ -1067,8 +1048,7 @@
 }
 
 TEST_F(RtpSenderReceiverTest, VideoSenderCanSetParametersBeforeNegotiation) {
-  video_rtp_sender_ =
-      VideoRtpSender::Create(worker_thread_, /*id=*/"", nullptr);
+  video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, /*id=*/"");
 
   RtpParameters params = video_rtp_sender_->GetParameters();
   ASSERT_EQ(1u, params.encodings.size());
@@ -1085,13 +1065,10 @@
 TEST_F(RtpSenderReceiverTest, VideoSenderInitParametersMovedAfterNegotiation) {
   AddVideoTrack(false);
 
-  std::unique_ptr<MockSetStreamIDsObserver> set_stream_ids_observer =
-      absl::make_unique<MockSetStreamIDsObserver>();
-  video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, video_track_->id(),
-                                             set_stream_ids_observer.get());
+  video_rtp_sender_ =
+      VideoRtpSender::Create(worker_thread_, video_track_->id());
   ASSERT_TRUE(video_rtp_sender_->SetTrack(video_track_));
-  EXPECT_CALL(*set_stream_ids_observer, OnSetStreamIDs());
-  video_rtp_sender_->SetStreamIDs({local_stream_->id()});
+  video_rtp_sender_->set_stream_ids({local_stream_->id()});
 
   std::vector<RtpEncodingParameters> init_encodings(2);
   init_encodings[0].max_bitrate_bps = 60000;
@@ -1126,13 +1103,10 @@
        VideoSenderInitParametersMovedAfterManualSimulcastAndNegotiation) {
   AddVideoTrack(false);
 
-  std::unique_ptr<MockSetStreamIDsObserver> set_stream_ids_observer =
-      absl::make_unique<MockSetStreamIDsObserver>();
-  video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, video_track_->id(),
-                                             set_stream_ids_observer.get());
+  video_rtp_sender_ =
+      VideoRtpSender::Create(worker_thread_, video_track_->id());
   ASSERT_TRUE(video_rtp_sender_->SetTrack(video_track_));
-  EXPECT_CALL(*set_stream_ids_observer, OnSetStreamIDs());
-  video_rtp_sender_->SetStreamIDs({local_stream_->id()});
+  video_rtp_sender_->set_stream_ids({local_stream_->id()});
 
   std::vector<RtpEncodingParameters> init_encodings(1);
   init_encodings[0].max_bitrate_bps = 60000;
@@ -1163,8 +1137,7 @@
 
 TEST_F(RtpSenderReceiverTest,
        VideoSenderMustCallGetParametersBeforeSetParametersBeforeNegotiation) {
-  video_rtp_sender_ =
-      VideoRtpSender::Create(worker_thread_, /*id=*/"", nullptr);
+  video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, /*id=*/"");
 
   RtpParameters params;
   RTCError result = video_rtp_sender_->SetParameters(params);
@@ -1554,16 +1527,13 @@
 TEST_F(RtpSenderReceiverTest,
        PropagatesVideoTrackContentHintSetBeforeEnabling) {
   AddVideoTrack();
-  std::unique_ptr<MockSetStreamIDsObserver> set_stream_ids_observer =
-      absl::make_unique<MockSetStreamIDsObserver>();
   // Setting detailed overrides the default non-screencast mode. This should be
   // applied even if the track is set on construction.
   video_track_->set_content_hint(VideoTrackInterface::ContentHint::kDetailed);
-  video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, video_track_->id(),
-                                             set_stream_ids_observer.get());
+  video_rtp_sender_ =
+      VideoRtpSender::Create(worker_thread_, video_track_->id());
   ASSERT_TRUE(video_rtp_sender_->SetTrack(video_track_));
-  EXPECT_CALL(*set_stream_ids_observer, OnSetStreamIDs());
-  video_rtp_sender_->SetStreamIDs({local_stream_->id()});
+  video_rtp_sender_->set_stream_ids({local_stream_->id()});
   video_rtp_sender_->SetMediaChannel(video_media_channel_);
   video_track_->set_enabled(true);
 
diff --git a/pc/test/mock_rtp_sender_internal.h b/pc/test/mock_rtp_sender_internal.h
index 181dcbb..fa16220 100644
--- a/pc/test/mock_rtp_sender_internal.h
+++ b/pc/test/mock_rtp_sender_internal.h
@@ -46,7 +46,7 @@
   // RtpSenderInternal methods.
   MOCK_METHOD1(SetMediaChannel, void(cricket::MediaChannel*));
   MOCK_METHOD1(SetSsrc, void(uint32_t));
-  MOCK_METHOD1(SetStreamIDs, void(const std::vector<std::string>&));
+  MOCK_METHOD1(set_stream_ids, void(const std::vector<std::string>&));
   MOCK_METHOD1(set_init_send_encodings,
                void(const std::vector<RtpEncodingParameters>&));
   MOCK_METHOD0(Stop, void());