Update pc/ to not use implicit T* --> scoped_refptr<T> conversion

Bug: webrtc:13464
Change-Id: I729ec2306ec0d6df2e546b5dbb530f57065d60da
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/244090
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35623}
diff --git a/pc/connection_context.cc b/pc/connection_context.cc
index d058c9d..6c6da4e 100644
--- a/pc/connection_context.cc
+++ b/pc/connection_context.cc
@@ -75,7 +75,8 @@
 // Static
 rtc::scoped_refptr<ConnectionContext> ConnectionContext::Create(
     PeerConnectionFactoryDependencies* dependencies) {
-  return new ConnectionContext(dependencies);
+  return rtc::scoped_refptr<ConnectionContext>(
+      new ConnectionContext(dependencies));
 }
 
 ConnectionContext::ConnectionContext(
diff --git a/pc/media_stream.cc b/pc/media_stream.cc
index 08a2a72..f353af7 100644
--- a/pc/media_stream.cc
+++ b/pc/media_stream.cc
@@ -12,6 +12,7 @@
 
 #include <stddef.h>
 
+#include <utility>
 #include <vector>
 
 #include "rtc_base/checks.h"
@@ -41,11 +42,13 @@
 }
 
 bool MediaStream::AddTrack(VideoTrackInterface* track) {
-  return AddTrack<VideoTrackVector, VideoTrackInterface>(&video_tracks_, track);
+  return AddTrack<VideoTrackVector, VideoTrackInterface>(
+      &video_tracks_, rtc::scoped_refptr<VideoTrackInterface>(track));
 }
 
 bool MediaStream::RemoveTrack(AudioTrackInterface* track) {
-  return RemoveTrack<AudioTrackVector>(&audio_tracks_, track);
+  return RemoveTrack<AudioTrackVector>(
+      &audio_tracks_, rtc::scoped_refptr<AudioTrackInterface>(track));
 }
 
 bool MediaStream::RemoveTrack(VideoTrackInterface* track) {
@@ -69,11 +72,12 @@
 }
 
 template <typename TrackVector, typename Track>
-bool MediaStream::AddTrack(TrackVector* tracks, Track* track) {
+bool MediaStream::AddTrack(TrackVector* tracks,
+                           rtc::scoped_refptr<Track> track) {
   typename TrackVector::iterator it = FindTrack(tracks, track->id());
   if (it != tracks->end())
     return false;
-  tracks->push_back(track);
+  tracks->emplace_back(std::move((track)));
   FireOnChanged();
   return true;
 }
diff --git a/pc/media_stream.h b/pc/media_stream.h
index 6f16bea..70e58f9 100644
--- a/pc/media_stream.h
+++ b/pc/media_stream.h
@@ -44,7 +44,7 @@
 
  private:
   template <typename TrackVector, typename Track>
-  bool AddTrack(TrackVector* Tracks, Track* track);
+  bool AddTrack(TrackVector* Tracks, rtc::scoped_refptr<Track> track);
   template <typename TrackVector>
   bool RemoveTrack(TrackVector* Tracks, MediaStreamTrackInterface* track);
 
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index 350233d..a00e400 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -849,7 +849,7 @@
 
 bool PeerConnection::RemoveTrack(RtpSenderInterface* sender) {
   TRACE_EVENT0("webrtc", "PeerConnection::RemoveTrack");
-  return RemoveTrackNew(sender).ok();
+  return RemoveTrackNew(rtc::scoped_refptr<RtpSenderInterface>(sender)).ok();
 }
 
 RTCError PeerConnection::RemoveTrackNew(
@@ -1181,7 +1181,8 @@
   RTC_DCHECK(stats_collector_);
   RTC_DCHECK(callback);
   RTC_LOG_THREAD_BLOCK_COUNT();
-  stats_collector_->GetStatsReport(callback);
+  stats_collector_->GetStatsReport(
+      rtc::scoped_refptr<RTCStatsCollectorCallback>(callback));
 }
 
 void PeerConnection::GetStats(
diff --git a/pc/peer_connection_end_to_end_unittest.cc b/pc/peer_connection_end_to_end_unittest.cc
index a4704c0..3a64027 100644
--- a/pc/peer_connection_end_to_end_unittest.cc
+++ b/pc/peer_connection_end_to_end_unittest.cc
@@ -60,9 +60,9 @@
         worker_thread_(rtc::Thread::Create()) {
     RTC_CHECK(network_thread_->Start());
     RTC_CHECK(worker_thread_->Start());
-    caller_ = new rtc::RefCountedObject<PeerConnectionTestWrapper>(
+    caller_ = rtc::make_ref_counted<PeerConnectionTestWrapper>(
         "caller", network_thread_.get(), worker_thread_.get());
-    callee_ = new rtc::RefCountedObject<PeerConnectionTestWrapper>(
+    callee_ = rtc::make_ref_counted<PeerConnectionTestWrapper>(
         "callee", network_thread_.get(), worker_thread_.get());
     webrtc::PeerConnectionInterface::IceServer ice_server;
     ice_server.uri = "stun:stun.l.google.com:19302";
@@ -126,11 +126,13 @@
   }
 
   void OnCallerAddedDataChanel(DataChannelInterface* dc) {
-    caller_signaled_data_channels_.push_back(dc);
+    caller_signaled_data_channels_.push_back(
+        rtc::scoped_refptr<DataChannelInterface>(dc));
   }
 
   void OnCalleeAddedDataChannel(DataChannelInterface* dc) {
-    callee_signaled_data_channels_.push_back(dc);
+    callee_signaled_data_channels_.push_back(
+        rtc::scoped_refptr<DataChannelInterface>(dc));
   }
 
   // Tests that `dc1` and `dc2` can send to and receive from each other.
@@ -258,7 +260,7 @@
 CreateForwardingMockDecoderFactory(
     webrtc::AudioDecoderFactory* real_decoder_factory) {
   rtc::scoped_refptr<webrtc::MockAudioDecoderFactory> mock_decoder_factory =
-      new rtc::RefCountedObject<StrictMock<webrtc::MockAudioDecoderFactory>>;
+      rtc::make_ref_counted<StrictMock<webrtc::MockAudioDecoderFactory>>();
   EXPECT_CALL(*mock_decoder_factory, GetSupportedDecoders())
       .Times(AtLeast(1))
       .WillRepeatedly(Invoke([real_decoder_factory] {
@@ -432,26 +434,22 @@
 
   std::vector<webrtc::AudioCodecPairId> encoder_id1, encoder_id2, decoder_id1,
       decoder_id2;
-  CreatePcs(rtc::scoped_refptr<webrtc::AudioEncoderFactory>(
-                new rtc::RefCountedObject<IdLoggingAudioEncoderFactory>(
-                    webrtc::CreateAudioEncoderFactory<
-                        AudioEncoderUnicornSparklesRainbow>(),
-                    &encoder_id1)),
-            rtc::scoped_refptr<webrtc::AudioDecoderFactory>(
-                new rtc::RefCountedObject<IdLoggingAudioDecoderFactory>(
-                    webrtc::CreateAudioDecoderFactory<
-                        AudioDecoderUnicornSparklesRainbow>(),
-                    &decoder_id1)),
-            rtc::scoped_refptr<webrtc::AudioEncoderFactory>(
-                new rtc::RefCountedObject<IdLoggingAudioEncoderFactory>(
-                    webrtc::CreateAudioEncoderFactory<
-                        AudioEncoderUnicornSparklesRainbow>(),
-                    &encoder_id2)),
-            rtc::scoped_refptr<webrtc::AudioDecoderFactory>(
-                new rtc::RefCountedObject<IdLoggingAudioDecoderFactory>(
-                    webrtc::CreateAudioDecoderFactory<
-                        AudioDecoderUnicornSparklesRainbow>(),
-                    &decoder_id2)));
+  CreatePcs(rtc::make_ref_counted<IdLoggingAudioEncoderFactory>(
+                webrtc::CreateAudioEncoderFactory<
+                    AudioEncoderUnicornSparklesRainbow>(),
+                &encoder_id1),
+            rtc::make_ref_counted<IdLoggingAudioDecoderFactory>(
+                webrtc::CreateAudioDecoderFactory<
+                    AudioDecoderUnicornSparklesRainbow>(),
+                &decoder_id1),
+            rtc::make_ref_counted<IdLoggingAudioEncoderFactory>(
+                webrtc::CreateAudioEncoderFactory<
+                    AudioEncoderUnicornSparklesRainbow>(),
+                &encoder_id2),
+            rtc::make_ref_counted<IdLoggingAudioDecoderFactory>(
+                webrtc::CreateAudioDecoderFactory<
+                    AudioDecoderUnicornSparklesRainbow>(),
+                &decoder_id2));
   GetAndAddUserMedia();
   Negotiate();
   WaitForCallEstablished();
diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc
index 3ab969d..193754e 100644
--- a/pc/peer_connection_factory.cc
+++ b/pc/peer_connection_factory.cc
@@ -284,7 +284,8 @@
     const std::string& id,
     AudioSourceInterface* source) {
   RTC_DCHECK(signaling_thread()->IsCurrent());
-  rtc::scoped_refptr<AudioTrackInterface> track(AudioTrack::Create(id, source));
+  rtc::scoped_refptr<AudioTrackInterface> track(
+      AudioTrack::Create(id, rtc::scoped_refptr<AudioSourceInterface>(source)));
   return AudioTrackProxy::Create(signaling_thread(), track);
 }
 
diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc
index 5452238..3aaae64 100644
--- a/pc/peer_connection_interface_unittest.cc
+++ b/pc/peer_connection_interface_unittest.cc
@@ -2456,8 +2456,8 @@
   CreateAnswerAsLocalDescription();
 
   ASSERT_EQ(1u, pc_->local_streams()->count());
-  rtc::scoped_refptr<MediaStreamInterface> local_stream =
-      pc_->local_streams()->at(0);
+  rtc::scoped_refptr<MediaStreamInterface> local_stream(
+      pc_->local_streams()->at(0));
 
   pc_->Close();
 
diff --git a/pc/peer_connection_rtp_unittest.cc b/pc/peer_connection_rtp_unittest.cc
index 715546b..e46df318 100644
--- a/pc/peer_connection_rtp_unittest.cc
+++ b/pc/peer_connection_rtp_unittest.cc
@@ -738,10 +738,12 @@
   // when the first callback is invoked.
   callee->pc()->SetRemoteDescription(
       std::move(srd1_sdp),
-      new OnSuccessObserver<decltype(srd1_callback)>(srd1_callback));
+      rtc::make_ref_counted<OnSuccessObserver<decltype(srd1_callback)>>(
+          srd1_callback));
   callee->pc()->SetRemoteDescription(
       std::move(srd2_sdp),
-      new OnSuccessObserver<decltype(srd2_callback)>(srd2_callback));
+      rtc::make_ref_counted<OnSuccessObserver<decltype(srd2_callback)>>(
+          srd2_callback));
   EXPECT_TRUE_WAIT(srd1_callback_called, kDefaultTimeout);
   EXPECT_TRUE_WAIT(srd2_callback_called, kDefaultTimeout);
 }
diff --git a/pc/peer_connection_signaling_unittest.cc b/pc/peer_connection_signaling_unittest.cc
index eb09a11..71ef51f 100644
--- a/pc/peer_connection_signaling_unittest.cc
+++ b/pc/peer_connection_signaling_unittest.cc
@@ -674,8 +674,9 @@
 
   // By not waiting for the observer's callback we can verify that the operation
   // executed immediately.
-  callee->pc()->SetRemoteDescription(std::move(offer),
-                                     new FakeSetRemoteDescriptionObserver());
+  callee->pc()->SetRemoteDescription(
+      std::move(offer),
+      rtc::make_ref_counted<FakeSetRemoteDescriptionObserver>());
   EXPECT_EQ(2u, callee->pc()->GetReceivers().size());
 }
 
@@ -693,8 +694,9 @@
   // SetRemoteDescription() operation should be chained to be executed
   // asynchronously, when CreateOffer() completes.
   callee->pc()->CreateOffer(offer_observer, RTCOfferAnswerOptions());
-  callee->pc()->SetRemoteDescription(std::move(offer),
-                                     new FakeSetRemoteDescriptionObserver());
+  callee->pc()->SetRemoteDescription(
+      std::move(offer),
+      rtc::make_ref_counted<FakeSetRemoteDescriptionObserver>());
   // CreateOffer() is asynchronous; without message processing this operation
   // should not have completed.
   EXPECT_FALSE(offer_observer->called());
@@ -1113,8 +1115,9 @@
   // the new observer should also be invoked synchronously - as is ensured by
   // other tests.)
   RTC_DCHECK(!caller->pc()->GetTransceivers()[0]->mid().has_value());
-  caller->pc()->SetLocalDescription(std::move(offer),
-                                    new FakeSetLocalDescriptionObserver());
+  caller->pc()->SetLocalDescription(
+      std::move(offer),
+      rtc::make_ref_counted<FakeSetLocalDescriptionObserver>());
   EXPECT_TRUE(caller->pc()->GetTransceivers()[0]->mid().has_value());
 }
 
diff --git a/pc/peer_connection_wrapper.cc b/pc/peer_connection_wrapper.cc
index 3b4d28f..641d8bf 100644
--- a/pc/peer_connection_wrapper.cc
+++ b/pc/peer_connection_wrapper.cc
@@ -168,8 +168,7 @@
 bool PeerConnectionWrapper::SetRemoteDescription(
     std::unique_ptr<SessionDescriptionInterface> desc,
     RTCError* error_out) {
-  rtc::scoped_refptr<FakeSetRemoteDescriptionObserver> observer =
-      new FakeSetRemoteDescriptionObserver();
+  auto observer = rtc::make_ref_counted<FakeSetRemoteDescriptionObserver>();
   pc()->SetRemoteDescription(std::move(desc), observer);
   EXPECT_EQ_WAIT(true, observer->called(), kDefaultTimeout);
   bool ok = observer->error().ok();
diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc
index 0539559..4735805 100644
--- a/pc/rtc_stats_collector.cc
+++ b/pc/rtc_stats_collector.cc
@@ -1224,7 +1224,8 @@
       std::vector<RequestInfo> requests_;
     };
     signaling_thread_->PostTask(std::make_unique<DeliveryTask>(
-        this, cached_report_, std::move(requests)));
+        rtc::scoped_refptr<RTCStatsCollector>(this), cached_report_,
+        std::move(requests)));
   } else if (!num_pending_partial_reports_) {
     // Only start gathering stats if we're not already gathering stats. In the
     // case of already gathering stats, `callback_` will be invoked when there
@@ -1660,14 +1661,16 @@
   for (const RtpTransceiverStatsInfo& stats : transceiver_stats_infos_) {
     std::vector<rtc::scoped_refptr<RtpSenderInternal>> senders;
     for (const auto& sender : stats.transceiver->senders()) {
-      senders.push_back(sender->internal());
+      senders.push_back(
+          rtc::scoped_refptr<RtpSenderInternal>(sender->internal()));
     }
     ProduceSenderMediaTrackStats(timestamp_us, *stats.track_media_info_map,
                                  senders, report);
 
     std::vector<rtc::scoped_refptr<RtpReceiverInternal>> receivers;
     for (const auto& receiver : stats.transceiver->receivers()) {
-      receivers.push_back(receiver->internal());
+      receivers.push_back(
+          rtc::scoped_refptr<RtpReceiverInternal>(receiver->internal()));
     }
     ProduceReceiverMediaTrackStats(timestamp_us, *stats.track_media_info_map,
                                    receivers, report);
@@ -2210,11 +2213,13 @@
       }
       std::vector<rtc::scoped_refptr<RtpSenderInternal>> senders;
       for (const auto& sender : transceiver->senders()) {
-        senders.push_back(sender->internal());
+        senders.push_back(
+            rtc::scoped_refptr<RtpSenderInternal>(sender->internal()));
       }
       std::vector<rtc::scoped_refptr<RtpReceiverInternal>> receivers;
       for (const auto& receiver : transceiver->receivers()) {
-        receivers.push_back(receiver->internal());
+        receivers.push_back(
+            rtc::scoped_refptr<RtpReceiverInternal>(receiver->internal()));
       }
       stats.track_media_info_map = std::make_unique<TrackMediaInfoMap>(
           std::move(voice_media_info), std::move(video_media_info), senders,
diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc
index 0fc3792..fb9ba96 100644
--- a/pc/rtc_stats_collector_unittest.cc
+++ b/pc/rtc_stats_collector_unittest.cc
@@ -1152,10 +1152,10 @@
 }
 
 TEST_F(RTCStatsCollectorTest, CollectTwoRTCDataChannelStatsWithPendingId) {
-  pc_->AddSctpDataChannel(
-      new MockSctpDataChannel(/*id=*/-1, DataChannelInterface::kConnecting));
-  pc_->AddSctpDataChannel(
-      new MockSctpDataChannel(/*id=*/-1, DataChannelInterface::kConnecting));
+  pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
+      /*id=*/-1, DataChannelInterface::kConnecting));
+  pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
+      /*id=*/-1, DataChannelInterface::kConnecting));
 
   rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
 }
@@ -1165,7 +1165,7 @@
   // This is not a safe assumption, but in order to make it work for
   // the test, we reset the ID allocator at test start.
   SctpDataChannel::ResetInternalIdAllocatorForTesting(-1);
-  pc_->AddSctpDataChannel(new MockSctpDataChannel(
+  pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
       0, "MockSctpDataChannel0", DataChannelInterface::kConnecting, "udp", 1, 2,
       3, 4));
   RTCDataChannelStats expected_data_channel0("RTCDataChannel_0", 0);
@@ -1178,9 +1178,9 @@
   expected_data_channel0.messages_received = 3;
   expected_data_channel0.bytes_received = 4;
 
-  pc_->AddSctpDataChannel(new MockSctpDataChannel(1, "MockSctpDataChannel1",
-                                                  DataChannelInterface::kOpen,
-                                                  "tcp", 5, 6, 7, 8));
+  pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
+      1, "MockSctpDataChannel1", DataChannelInterface::kOpen, "tcp", 5, 6, 7,
+      8));
   RTCDataChannelStats expected_data_channel1("RTCDataChannel_1", 0);
   expected_data_channel1.label = "MockSctpDataChannel1";
   expected_data_channel1.protocol = "tcp";
@@ -1191,7 +1191,7 @@
   expected_data_channel1.messages_received = 7;
   expected_data_channel1.bytes_received = 8;
 
-  pc_->AddSctpDataChannel(new MockSctpDataChannel(
+  pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
       2, "MockSctpDataChannel2", DataChannelInterface::kClosing, "udp", 9, 10,
       11, 12));
   RTCDataChannelStats expected_data_channel2("RTCDataChannel_2", 0);
@@ -1204,9 +1204,9 @@
   expected_data_channel2.messages_received = 11;
   expected_data_channel2.bytes_received = 12;
 
-  pc_->AddSctpDataChannel(new MockSctpDataChannel(3, "MockSctpDataChannel3",
-                                                  DataChannelInterface::kClosed,
-                                                  "tcp", 13, 14, 15, 16));
+  pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
+      3, "MockSctpDataChannel3", DataChannelInterface::kClosed, "tcp", 13, 14,
+      15, 16));
   RTCDataChannelStats expected_data_channel3("RTCDataChannel_3", 0);
   expected_data_channel3.label = "MockSctpDataChannel3";
   expected_data_channel3.protocol = "tcp";
@@ -3358,8 +3358,9 @@
   static rtc::scoped_refptr<FakeRTCStatsCollector> Create(
       PeerConnectionInternal* pc,
       int64_t cache_lifetime_us) {
-    return new rtc::RefCountedObject<FakeRTCStatsCollector>(pc,
-                                                            cache_lifetime_us);
+    return rtc::scoped_refptr<FakeRTCStatsCollector>(
+        new rtc::RefCountedObject<FakeRTCStatsCollector>(pc,
+                                                         cache_lifetime_us));
   }
 
   // Since FakeRTCStatsCollector inherits twice from RefCountInterface, once via
diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc
index f361833..35a0050 100644
--- a/pc/rtp_sender_receiver_unittest.cc
+++ b/pc/rtp_sender_receiver_unittest.cc
@@ -577,7 +577,7 @@
   cricket::AudioOptions options;
   options.echo_cancellation = true;
   auto source = LocalAudioSource::Create(&options);
-  CreateAudioRtpSender(source.get());
+  CreateAudioRtpSender(source);
 
   EXPECT_EQ(true, voice_media_channel_->options().echo_cancellation);
 
diff --git a/pc/rtp_transceiver.cc b/pc/rtp_transceiver.cc
index a78b9d6..25ae804 100644
--- a/pc/rtp_transceiver.cc
+++ b/pc/rtp_transceiver.cc
@@ -273,14 +273,14 @@
 rtc::scoped_refptr<RtpSenderInternal> RtpTransceiver::sender_internal() const {
   RTC_DCHECK(unified_plan_);
   RTC_CHECK_EQ(1u, senders_.size());
-  return senders_[0]->internal();
+  return rtc::scoped_refptr<RtpSenderInternal>(senders_[0]->internal());
 }
 
 rtc::scoped_refptr<RtpReceiverInternal> RtpTransceiver::receiver_internal()
     const {
   RTC_DCHECK(unified_plan_);
   RTC_CHECK_EQ(1u, receivers_.size());
-  return receivers_[0]->internal();
+  return rtc::scoped_refptr<RtpReceiverInternal>(receivers_[0]->internal());
 }
 
 cricket::MediaType RtpTransceiver::media_type() const {
diff --git a/pc/rtp_transmission_manager.cc b/pc/rtp_transmission_manager.cc
index e917154..8e3eec6 100644
--- a/pc/rtp_transmission_manager.cc
+++ b/pc/rtp_transmission_manager.cc
@@ -378,7 +378,8 @@
   }
 
   // Normal case; we've never seen this track before.
-  auto new_sender = CreateSender(cricket::MEDIA_TYPE_AUDIO, track->id(), track,
+  auto new_sender = CreateSender(cricket::MEDIA_TYPE_AUDIO, track->id(),
+                                 rtc::scoped_refptr<AudioTrackInterface>(track),
                                  {stream->id()}, {});
   new_sender->internal()->SetMediaChannel(voice_media_channel());
   GetAudioTransceiver()->internal()->AddSender(new_sender);
@@ -424,7 +425,8 @@
   }
 
   // Normal case; we've never seen this track before.
-  auto new_sender = CreateSender(cricket::MEDIA_TYPE_VIDEO, track->id(), track,
+  auto new_sender = CreateSender(cricket::MEDIA_TYPE_VIDEO, track->id(),
+                                 rtc::scoped_refptr<VideoTrackInterface>(track),
                                  {stream->id()}, {});
   new_sender->internal()->SetMediaChannel(video_media_channel());
   GetVideoTransceiver()->internal()->AddSender(new_sender);
diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc
index 235d508..56eb975 100644
--- a/pc/sdp_offer_answer.cc
+++ b/pc/sdp_offer_answer.cc
@@ -1192,7 +1192,8 @@
   RTC_DCHECK_RUN_ON(signaling_thread());
   SetLocalDescription(
       rtc::make_ref_counted<SetSessionDescriptionObserverAdapter>(
-          weak_ptr_factory_.GetWeakPtr(), observer));
+          weak_ptr_factory_.GetWeakPtr(),
+          rtc::scoped_refptr<SetSessionDescriptionObserver>(observer)));
 }
 
 void SdpOfferAnswerHandler::SetLocalDescription(
@@ -2238,8 +2239,8 @@
   RTC_DCHECK_RUN_ON(signaling_thread());
   std::vector<rtc::scoped_refptr<MediaStreamInterface>> media_streams;
   for (const std::string& stream_id : stream_ids) {
-    rtc::scoped_refptr<MediaStreamInterface> stream =
-        remote_streams_->find(stream_id);
+    rtc::scoped_refptr<MediaStreamInterface> stream(
+        remote_streams_->find(stream_id));
     if (!stream) {
       stream = MediaStreamProxy::Create(rtc::Thread::Current(),
                                         MediaStream::Create(stream_id));
@@ -2577,7 +2578,8 @@
     return false;
   }
 
-  local_streams_->AddStream(local_stream);
+  local_streams_->AddStream(
+      rtc::scoped_refptr<MediaStreamInterface>(local_stream));
   auto observer = std::make_unique<MediaStreamObserver>(
       local_stream,
       [this](AudioTrackInterface* audio_track,
@@ -4157,8 +4159,8 @@
     const std::string& sender_id = params.id;
     uint32_t ssrc = params.first_ssrc();
 
-    rtc::scoped_refptr<MediaStreamInterface> stream =
-        remote_streams_->find(stream_id);
+    rtc::scoped_refptr<MediaStreamInterface> stream(
+        remote_streams_->find(stream_id));
     if (!stream) {
       // This is a new MediaStream. Create a new remote MediaStream.
       stream = MediaStreamProxy::Create(rtc::Thread::Current(),
@@ -4178,8 +4180,8 @@
 
   // Add default sender if necessary.
   if (default_sender_needed) {
-    rtc::scoped_refptr<MediaStreamInterface> default_stream =
-        remote_streams_->find(kDefaultStreamId);
+    rtc::scoped_refptr<MediaStreamInterface> default_stream(
+        remote_streams_->find(kDefaultStreamId));
     if (!default_stream) {
       // Create the new default MediaStream.
       default_stream = MediaStreamProxy::Create(
@@ -4426,7 +4428,8 @@
   for (size_t i = 0; i < remote_streams_->count(); ++i) {
     MediaStreamInterface* stream = remote_streams_->at(i);
     if (stream->GetAudioTracks().empty() && stream->GetVideoTracks().empty()) {
-      streams_to_remove.push_back(stream);
+      streams_to_remove.push_back(
+          rtc::scoped_refptr<MediaStreamInterface>(stream));
     }
   }
 
diff --git a/pc/stream_collection.h b/pc/stream_collection.h
index 9bbf957..ed85947 100644
--- a/pc/stream_collection.h
+++ b/pc/stream_collection.h
@@ -12,6 +12,7 @@
 #define PC_STREAM_COLLECTION_H_
 
 #include <string>
+#include <utility>
 #include <vector>
 
 #include "api/peer_connection_interface.h"
@@ -66,13 +67,13 @@
     return NULL;
   }
 
-  void AddStream(MediaStreamInterface* stream) {
+  void AddStream(rtc::scoped_refptr<MediaStreamInterface> stream) {
     for (StreamVector::iterator it = media_streams_.begin();
          it != media_streams_.end(); ++it) {
       if ((*it)->id().compare(stream->id()) == 0)
         return;
     }
-    media_streams_.push_back(stream);
+    media_streams_.push_back(std::move(stream));
   }
 
   void RemoveStream(MediaStreamInterface* remove_stream) {
diff --git a/pc/track_media_info_map_unittest.cc b/pc/track_media_info_map_unittest.cc
index 42962da..a58331f 100644
--- a/pc/track_media_info_map_unittest.cc
+++ b/pc/track_media_info_map_unittest.cc
@@ -125,7 +125,7 @@
         local_track->kind() == MediaStreamTrackInterface::kAudioKind
             ? cricket::MEDIA_TYPE_AUDIO
             : cricket::MEDIA_TYPE_VIDEO,
-        ssrcs, local_track);
+        ssrcs, rtc::scoped_refptr<MediaStreamTrackInterface>(local_track));
     rtp_senders_.push_back(rtp_sender);
 
     if (local_track->kind() == MediaStreamTrackInterface::kAudioKind) {
@@ -154,7 +154,7 @@
         remote_track->kind() == MediaStreamTrackInterface::kAudioKind
             ? cricket::MEDIA_TYPE_AUDIO
             : cricket::MEDIA_TYPE_VIDEO,
-        ssrcs, remote_track);
+        ssrcs, rtc::scoped_refptr<MediaStreamTrackInterface>(remote_track));
     rtp_receivers_.push_back(rtp_receiver);
 
     if (remote_track->kind() == MediaStreamTrackInterface::kAudioKind) {