Have BaseChannel take MediaChannel as unique_ptr

Bug: None
Change-Id: I9a0c67cc364623b7c17824271edfbd782f88dbfb
Reviewed-on: https://webrtc-review.googlesource.com/18300
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20594}
diff --git a/pc/channel.cc b/pc/channel.cc
index 1185ec6..5d8bbcd 100644
--- a/pc/channel.cc
+++ b/pc/channel.cc
@@ -142,7 +142,7 @@
 BaseChannel::BaseChannel(rtc::Thread* worker_thread,
                          rtc::Thread* network_thread,
                          rtc::Thread* signaling_thread,
-                         MediaChannel* media_channel,
+                         std::unique_ptr<MediaChannel> media_channel,
                          const std::string& content_name,
                          bool rtcp_mux_required,
                          bool srtp_required)
@@ -152,9 +152,9 @@
       content_name_(content_name),
       rtcp_mux_required_(rtcp_mux_required),
       srtp_required_(srtp_required),
-      media_channel_(media_channel),
+      media_channel_(std::move(media_channel)),
       selected_candidate_pair_(nullptr) {
-  RTC_DCHECK(worker_thread_ == rtc::Thread::Current());
+  RTC_DCHECK_RUN_ON(worker_thread_);
   if (srtp_required) {
     auto transport =
         rtc::MakeUnique<webrtc::SrtpTransport>(rtcp_mux_required, content_name);
@@ -179,7 +179,7 @@
 
 BaseChannel::~BaseChannel() {
   TRACE_EVENT0("webrtc", "BaseChannel::~BaseChannel");
-  RTC_DCHECK(worker_thread_ == rtc::Thread::Current());
+  RTC_DCHECK_RUN_ON(worker_thread_);
   Deinit();
   StopConnectionMonitor();
   // Eats any outstanding messages or packets.
@@ -188,7 +188,7 @@
   // We must destroy the media channel before the transport channel, otherwise
   // the media channel may try to send on the dead transport channel. NULLing
   // is not an effective strategy since the sends will come on another thread.
-  delete media_channel_;
+  media_channel_.reset();
   LOG(LS_INFO) << "Destroyed channel: " << content_name_;
 }
 
@@ -217,24 +217,22 @@
   network_thread_->Clear(this);
 }
 
-bool BaseChannel::Init_w(DtlsTransportInternal* rtp_dtls_transport,
+void BaseChannel::Init_w(DtlsTransportInternal* rtp_dtls_transport,
                          DtlsTransportInternal* rtcp_dtls_transport,
                          rtc::PacketTransportInternal* rtp_packet_transport,
                          rtc::PacketTransportInternal* rtcp_packet_transport) {
-  if (!network_thread_->Invoke<bool>(
-          RTC_FROM_HERE, Bind(&BaseChannel::InitNetwork_n, this,
-                              rtp_dtls_transport, rtcp_dtls_transport,
-                              rtp_packet_transport, rtcp_packet_transport))) {
-    return false;
-  }
+  RTC_DCHECK_RUN_ON(worker_thread_);
+  network_thread_->Invoke<void>(RTC_FROM_HERE, [&] {
+    return InitNetwork_n(rtp_dtls_transport, rtcp_dtls_transport,
+                         rtp_packet_transport, rtcp_packet_transport);
+  });
+
   // Both RTP and RTCP channels should be set, we can call SetInterface on
   // the media channel and it can set network options.
-  RTC_DCHECK_RUN_ON(worker_thread_);
   media_channel_->SetInterface(this);
-  return true;
 }
 
-bool BaseChannel::InitNetwork_n(
+void BaseChannel::InitNetwork_n(
     DtlsTransportInternal* rtp_dtls_transport,
     DtlsTransportInternal* rtcp_dtls_transport,
     rtc::PacketTransportInternal* rtp_packet_transport,
@@ -246,7 +244,6 @@
   if (rtcp_mux_required_) {
     rtcp_mux_filter_.SetActive();
   }
-  return true;
 }
 
 void BaseChannel::Deinit() {
@@ -615,16 +612,14 @@
 
     UpdateTransportOverhead();
   }
-  invoker_.AsyncInvoke<void>(
-      RTC_FROM_HERE, worker_thread_,
-      Bind(&MediaChannel::OnNetworkRouteChanged, media_channel_, transport_name,
-           network_route));
+  invoker_.AsyncInvoke<void>(RTC_FROM_HERE, worker_thread_, [=] {
+    media_channel_->OnNetworkRouteChanged(transport_name, network_route);
+  });
 }
 
 void BaseChannel::OnTransportReadyToSend(bool ready) {
-  invoker_.AsyncInvoke<void>(
-      RTC_FROM_HERE, worker_thread_,
-      Bind(&MediaChannel::OnReadyToSend, media_channel_, ready));
+  invoker_.AsyncInvoke<void>(RTC_FROM_HERE, worker_thread_,
+                             [=] { media_channel_->OnReadyToSend(ready); });
 }
 
 bool BaseChannel::SendPacket(bool rtcp,
@@ -1435,19 +1430,18 @@
                            rtc::Thread* network_thread,
                            rtc::Thread* signaling_thread,
                            MediaEngineInterface* media_engine,
-                           VoiceMediaChannel* media_channel,
+                           std::unique_ptr<VoiceMediaChannel> media_channel,
                            const std::string& content_name,
                            bool rtcp_mux_required,
                            bool srtp_required)
     : BaseChannel(worker_thread,
                   network_thread,
                   signaling_thread,
-                  media_channel,
+                  std::move(media_channel),
                   content_name,
                   rtcp_mux_required,
                   srtp_required),
-      media_engine_(media_engine),
-      received_media_(false) {}
+      media_engine_(media_engine) {}
 
 VoiceChannel::~VoiceChannel() {
   TRACE_EVENT0("webrtc", "VoiceChannel::~VoiceChannel");
@@ -1676,7 +1670,7 @@
   if (transport_overhead_per_packet)
     invoker_.AsyncInvoke<void>(
         RTC_FROM_HERE, worker_thread_,
-        Bind(&MediaChannel::OnTransportOverheadChanged, media_channel_,
+        Bind(&MediaChannel::OnTransportOverheadChanged, media_channel_.get(),
              transport_overhead_per_packet));
 }
 
@@ -1852,14 +1846,14 @@
 VideoChannel::VideoChannel(rtc::Thread* worker_thread,
                            rtc::Thread* network_thread,
                            rtc::Thread* signaling_thread,
-                           VideoMediaChannel* media_channel,
+                           std::unique_ptr<VideoMediaChannel> media_channel,
                            const std::string& content_name,
                            bool rtcp_mux_required,
                            bool srtp_required)
     : BaseChannel(worker_thread,
                   network_thread,
                   signaling_thread,
-                  media_channel,
+                  std::move(media_channel),
                   content_name,
                   rtcp_mux_required,
                   srtp_required) {}
@@ -2112,14 +2106,14 @@
 RtpDataChannel::RtpDataChannel(rtc::Thread* worker_thread,
                                rtc::Thread* network_thread,
                                rtc::Thread* signaling_thread,
-                               DataMediaChannel* media_channel,
+                               std::unique_ptr<DataMediaChannel> media_channel,
                                const std::string& content_name,
                                bool rtcp_mux_required,
                                bool srtp_required)
     : BaseChannel(worker_thread,
                   network_thread,
                   signaling_thread,
-                  media_channel,
+                  std::move(media_channel),
                   content_name,
                   rtcp_mux_required,
                   srtp_required) {}
@@ -2133,20 +2127,18 @@
   Deinit();
 }
 
-bool RtpDataChannel::Init_w(
+void RtpDataChannel::Init_w(
     DtlsTransportInternal* rtp_dtls_transport,
     DtlsTransportInternal* rtcp_dtls_transport,
     rtc::PacketTransportInternal* rtp_packet_transport,
     rtc::PacketTransportInternal* rtcp_packet_transport) {
-  if (!BaseChannel::Init_w(rtp_dtls_transport, rtcp_dtls_transport,
-                           rtp_packet_transport, rtcp_packet_transport)) {
-    return false;
-  }
+  BaseChannel::Init_w(rtp_dtls_transport, rtcp_dtls_transport,
+                      rtp_packet_transport, rtcp_packet_transport);
+
   media_channel()->SignalDataReceived.connect(this,
                                               &RtpDataChannel::OnDataReceived);
   media_channel()->SignalReadyToSend.connect(
       this, &RtpDataChannel::OnDataChannelReadyToSend);
-  return true;
 }
 
 bool RtpDataChannel::SendData(const SendDataParams& params,
diff --git a/pc/channel.h b/pc/channel.h
index c5888db..5689338 100644
--- a/pc/channel.h
+++ b/pc/channel.h
@@ -80,12 +80,12 @@
   BaseChannel(rtc::Thread* worker_thread,
               rtc::Thread* network_thread,
               rtc::Thread* signaling_thread,
-              MediaChannel* channel,
+              std::unique_ptr<MediaChannel> media_channel,
               const std::string& content_name,
               bool rtcp_mux_required,
               bool srtp_required);
   virtual ~BaseChannel();
-  bool Init_w(DtlsTransportInternal* rtp_dtls_transport,
+  void Init_w(DtlsTransportInternal* rtp_dtls_transport,
               DtlsTransportInternal* rtcp_dtls_transport,
               rtc::PacketTransportInternal* rtp_packet_transport,
               rtc::PacketTransportInternal* rtcp_packet_transport);
@@ -191,7 +191,7 @@
   bool HandlesPayloadType(int payload_type) const;
 
  protected:
-  virtual MediaChannel* media_channel() const { return media_channel_; }
+  virtual MediaChannel* media_channel() const { return media_channel_.get(); }
 
   void SetTransports_n(DtlsTransportInternal* rtp_dtls_transport,
                        DtlsTransportInternal* rtcp_dtls_transport,
@@ -353,7 +353,7 @@
   void AddHandledPayloadType(int payload_type);
 
  private:
-  bool InitNetwork_n(DtlsTransportInternal* rtp_dtls_transport,
+  void InitNetwork_n(DtlsTransportInternal* rtp_dtls_transport,
                      DtlsTransportInternal* rtcp_dtls_transport,
                      rtc::PacketTransportInternal* rtp_packet_transport,
                      rtc::PacketTransportInternal* rtcp_packet_transport);
@@ -400,7 +400,7 @@
 
   // MediaChannel related members that should be accessed from the worker
   // thread.
-  MediaChannel* const media_channel_;
+  std::unique_ptr<MediaChannel> media_channel_;
   // Currently the |enabled_| flag is accessed from the signaling thread as
   // well, but it can be changed only when signaling thread does a synchronous
   // call to the worker thread, so it should be safe.
@@ -420,7 +420,7 @@
                rtc::Thread* network_thread,
                rtc::Thread* signaling_thread,
                MediaEngineInterface* media_engine,
-               VoiceMediaChannel* channel,
+               std::unique_ptr<VoiceMediaChannel> channel,
                const std::string& content_name,
                bool rtcp_mux_required,
                bool srtp_required);
@@ -517,7 +517,7 @@
 
   static const int kEarlyMediaTimeout = 1000;
   MediaEngineInterface* media_engine_;
-  bool received_media_;
+  bool received_media_ = false;
   std::unique_ptr<VoiceMediaMonitor> media_monitor_;
   std::unique_ptr<AudioMonitor> audio_monitor_;
 
@@ -535,7 +535,7 @@
   VideoChannel(rtc::Thread* worker_thread,
                rtc::Thread* network_thread,
                rtc::Thread* signaling_thread,
-               VideoMediaChannel* channel,
+               std::unique_ptr<VideoMediaChannel> media_channel,
                const std::string& content_name,
                bool rtcp_mux_required,
                bool srtp_required);
@@ -612,12 +612,12 @@
   RtpDataChannel(rtc::Thread* worker_thread,
                  rtc::Thread* network_thread,
                  rtc::Thread* signaling_thread,
-                 DataMediaChannel* channel,
+                 std::unique_ptr<DataMediaChannel> channel,
                  const std::string& content_name,
                  bool rtcp_mux_required,
                  bool srtp_required);
   ~RtpDataChannel();
-  bool Init_w(DtlsTransportInternal* rtp_dtls_transport,
+  void Init_w(DtlsTransportInternal* rtp_dtls_transport,
               DtlsTransportInternal* rtcp_dtls_transport,
               rtc::PacketTransportInternal* rtp_packet_transport,
               rtc::PacketTransportInternal* rtcp_packet_transport);
diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc
index 07333b4..5736bb6 100644
--- a/pc/channel_unittest.cc
+++ b/pc/channel_unittest.cc
@@ -121,12 +121,14 @@
   }
 
   void CreateChannels(int flags1, int flags2) {
-    CreateChannels(new typename T::MediaChannel(NULL, typename T::Options()),
-                   new typename T::MediaChannel(NULL, typename T::Options()),
+    CreateChannels(rtc::MakeUnique<typename T::MediaChannel>(
+                       nullptr, typename T::Options()),
+                   rtc::MakeUnique<typename T::MediaChannel>(
+                       nullptr, typename T::Options()),
                    flags1, flags2);
   }
-  void CreateChannels(typename T::MediaChannel* ch1,
-                      typename T::MediaChannel* ch2,
+  void CreateChannels(std::unique_ptr<typename T::MediaChannel> ch1,
+                      std::unique_ptr<typename T::MediaChannel> ch2,
                       int flags1,
                       int flags2) {
     // Network thread is started in CreateChannels, to allow the test to
@@ -142,8 +144,8 @@
     // channels.
     RTC_DCHECK_EQ(flags1 & RAW_PACKET_TRANSPORT, flags2 & RAW_PACKET_TRANSPORT);
     rtc::Thread* worker_thread = rtc::Thread::Current();
-    media_channel1_ = ch1;
-    media_channel2_ = ch2;
+    media_channel1_ = ch1.get();
+    media_channel2_ = ch2.get();
     rtc::PacketTransportInternal* rtp1 = nullptr;
     rtc::PacketTransportInternal* rtcp1 = nullptr;
     rtc::PacketTransportInternal* rtp2 = nullptr;
@@ -240,14 +242,14 @@
         }
       }
     }
-    channel1_.reset(
-        CreateChannel(worker_thread, network_thread_, &media_engine_, ch1,
-                      fake_rtp_dtls_transport1_.get(),
-                      fake_rtcp_dtls_transport1_.get(), rtp1, rtcp1, flags1));
-    channel2_.reset(
-        CreateChannel(worker_thread, network_thread_, &media_engine_, ch2,
-                      fake_rtp_dtls_transport2_.get(),
-                      fake_rtcp_dtls_transport2_.get(), rtp2, rtcp2, flags2));
+    channel1_ =
+        CreateChannel(worker_thread, network_thread_, &media_engine_,
+                      std::move(ch1), fake_rtp_dtls_transport1_.get(),
+                      fake_rtcp_dtls_transport1_.get(), rtp1, rtcp1, flags1);
+    channel2_ =
+        CreateChannel(worker_thread, network_thread_, &media_engine_,
+                      std::move(ch2), fake_rtp_dtls_transport2_.get(),
+                      fake_rtcp_dtls_transport2_.get(), rtp2, rtcp2, flags2);
     channel1_->SignalMediaMonitor.connect(this,
                                           &ChannelTest<T>::OnMediaMonitor1);
     channel2_->SignalMediaMonitor.connect(this,
@@ -281,30 +283,26 @@
       AddLegacyStreamInContent(kSsrc2, flags2, &remote_media_content2_);
     }
   }
-  typename T::Channel* CreateChannel(
+  std::unique_ptr<typename T::Channel> CreateChannel(
       rtc::Thread* worker_thread,
       rtc::Thread* network_thread,
       cricket::MediaEngineInterface* engine,
-      typename T::MediaChannel* ch,
+      std::unique_ptr<typename T::MediaChannel> ch,
       cricket::DtlsTransportInternal* fake_rtp_dtls_transport,
       cricket::DtlsTransportInternal* fake_rtcp_dtls_transport,
       rtc::PacketTransportInternal* fake_rtp_packet_transport,
       rtc::PacketTransportInternal* fake_rtcp_packet_transport,
       int flags) {
     rtc::Thread* signaling_thread = rtc::Thread::Current();
-    typename T::Channel* channel = new typename T::Channel(
-        worker_thread, network_thread, signaling_thread, engine, ch,
+    auto channel = rtc::MakeUnique<typename T::Channel>(
+        worker_thread, network_thread, signaling_thread, engine, std::move(ch),
         cricket::CN_AUDIO, (flags & RTCP_MUX_REQUIRED) != 0,
         (flags & SECURE) != 0);
     if (!channel->NeedsRtcpTransport()) {
       fake_rtcp_dtls_transport = nullptr;
     }
-    if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
-                         fake_rtp_packet_transport,
-                         fake_rtcp_packet_transport)) {
-      delete channel;
-      channel = NULL;
-    }
+    channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
+                    fake_rtp_packet_transport, fake_rtcp_packet_transport);
     return channel;
   }
 
@@ -1280,8 +1278,8 @@
         T::MediaChannel::SendRtcp(kRtcpReport, sizeof(kRtcpReport));
       }
     };
-    CreateChannels(new LastWordMediaChannel(), new LastWordMediaChannel(),
-                   RTCP_MUX, RTCP_MUX);
+    CreateChannels(rtc::MakeUnique<LastWordMediaChannel>(),
+                   rtc::MakeUnique<LastWordMediaChannel>(), RTCP_MUX, RTCP_MUX);
     EXPECT_TRUE(SendInitiate());
     EXPECT_TRUE(SendAccept());
     EXPECT_TRUE(Terminate());
@@ -2207,28 +2205,26 @@
 
 // override to add NULL parameter
 template <>
-cricket::VideoChannel* ChannelTest<VideoTraits>::CreateChannel(
+std::unique_ptr<cricket::VideoChannel> ChannelTest<VideoTraits>::CreateChannel(
     rtc::Thread* worker_thread,
     rtc::Thread* network_thread,
     cricket::MediaEngineInterface* engine,
-    cricket::FakeVideoMediaChannel* ch,
+    std::unique_ptr<cricket::FakeVideoMediaChannel> ch,
     cricket::DtlsTransportInternal* fake_rtp_dtls_transport,
     cricket::DtlsTransportInternal* fake_rtcp_dtls_transport,
     rtc::PacketTransportInternal* fake_rtp_packet_transport,
     rtc::PacketTransportInternal* fake_rtcp_packet_transport,
     int flags) {
   rtc::Thread* signaling_thread = rtc::Thread::Current();
-  cricket::VideoChannel* channel = new cricket::VideoChannel(
-      worker_thread, network_thread, signaling_thread, ch, cricket::CN_VIDEO,
-      (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0);
+  auto channel = rtc::MakeUnique<cricket::VideoChannel>(
+      worker_thread, network_thread, signaling_thread, std::move(ch),
+      cricket::CN_VIDEO, (flags & RTCP_MUX_REQUIRED) != 0,
+      (flags & SECURE) != 0);
   if (!channel->NeedsRtcpTransport()) {
     fake_rtcp_dtls_transport = nullptr;
   }
-  if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
-                       fake_rtp_packet_transport, fake_rtcp_packet_transport)) {
-    delete channel;
-    channel = NULL;
-  }
+  channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
+                  fake_rtp_packet_transport, fake_rtcp_packet_transport);
   return channel;
 }
 
@@ -3501,28 +3497,26 @@
 
 // Override to avoid engine channel parameter.
 template <>
-cricket::RtpDataChannel* ChannelTest<DataTraits>::CreateChannel(
+std::unique_ptr<cricket::RtpDataChannel> ChannelTest<DataTraits>::CreateChannel(
     rtc::Thread* worker_thread,
     rtc::Thread* network_thread,
     cricket::MediaEngineInterface* engine,
-    cricket::FakeDataMediaChannel* ch,
+    std::unique_ptr<cricket::FakeDataMediaChannel> ch,
     cricket::DtlsTransportInternal* fake_rtp_dtls_transport,
     cricket::DtlsTransportInternal* fake_rtcp_dtls_transport,
     rtc::PacketTransportInternal* fake_rtp_packet_transport,
     rtc::PacketTransportInternal* fake_rtcp_packet_transport,
     int flags) {
   rtc::Thread* signaling_thread = rtc::Thread::Current();
-  cricket::RtpDataChannel* channel = new cricket::RtpDataChannel(
-      worker_thread, network_thread, signaling_thread, ch, cricket::CN_DATA,
-      (flags & RTCP_MUX_REQUIRED) != 0, (flags & SECURE) != 0);
+  auto channel = rtc::MakeUnique<cricket::RtpDataChannel>(
+      worker_thread, network_thread, signaling_thread, std::move(ch),
+      cricket::CN_DATA, (flags & RTCP_MUX_REQUIRED) != 0,
+      (flags & SECURE) != 0);
   if (!channel->NeedsRtcpTransport()) {
     fake_rtcp_dtls_transport = nullptr;
   }
-  if (!channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
-                       fake_rtp_packet_transport, fake_rtcp_packet_transport)) {
-    delete channel;
-    channel = NULL;
-  }
+  channel->Init_w(fake_rtp_dtls_transport, fake_rtcp_dtls_transport,
+                  fake_rtp_packet_transport, fake_rtcp_packet_transport);
   return channel;
 }
 
@@ -3847,16 +3841,16 @@
       : fake_rtp_dtls_transport_("foo", cricket::ICE_CANDIDATE_COMPONENT_RTP),
         fake_rtcp_dtls_transport_("foo", cricket::ICE_CANDIDATE_COMPONENT_RTCP),
         // RTCP mux not required, SRTP required.
-        voice_channel_(
-            rtc::Thread::Current(),
-            rtc::Thread::Current(),
-            rtc::Thread::Current(),
-            &fake_media_engine_,
-            new cricket::FakeVoiceMediaChannel(nullptr,
-                                               cricket::AudioOptions()),
-            cricket::CN_AUDIO,
-            false,
-            true) {}
+        voice_channel_(rtc::Thread::Current(),
+                       rtc::Thread::Current(),
+                       rtc::Thread::Current(),
+                       &fake_media_engine_,
+                       rtc::MakeUnique<cricket::FakeVoiceMediaChannel>(
+                           nullptr,
+                           cricket::AudioOptions()),
+                       cricket::CN_AUDIO,
+                       false,
+                       true) {}
 
  protected:
   cricket::FakeMediaEngine fake_media_engine_;
@@ -3866,27 +3860,24 @@
 };
 
 TEST_F(BaseChannelDeathTest, SetTransportsWithNullRtpTransport) {
-  ASSERT_TRUE(voice_channel_.Init_w(
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_));
+  voice_channel_.Init_w(&fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
+                        &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_);
   cricket::FakeDtlsTransport new_rtcp_transport(
       "bar", cricket::ICE_CANDIDATE_COMPONENT_RTCP);
   EXPECT_DEATH(voice_channel_.SetTransports(nullptr, &new_rtcp_transport), "");
 }
 
 TEST_F(BaseChannelDeathTest, SetTransportsWithMissingRtcpTransport) {
-  ASSERT_TRUE(voice_channel_.Init_w(
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_));
+  voice_channel_.Init_w(&fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
+                        &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_);
   cricket::FakeDtlsTransport new_rtp_transport(
       "bar", cricket::ICE_CANDIDATE_COMPONENT_RTP);
   EXPECT_DEATH(voice_channel_.SetTransports(&new_rtp_transport, nullptr), "");
 }
 
 TEST_F(BaseChannelDeathTest, SetTransportsWithUnneededRtcpTransport) {
-  ASSERT_TRUE(voice_channel_.Init_w(
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_));
+  voice_channel_.Init_w(&fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
+                        &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_);
   // Activate RTCP muxing, simulating offer/answer negotiation.
   cricket::AudioContentDescription content;
   content.set_rtcp_mux(true);
@@ -3905,9 +3896,8 @@
 // This test will probably go away if/when we move the transport name out of
 // the transport classes and into their parent classes.
 TEST_F(BaseChannelDeathTest, SetTransportsWithMismatchingTransportNames) {
-  ASSERT_TRUE(voice_channel_.Init_w(
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_));
+  voice_channel_.Init_w(&fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
+                        &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_);
   cricket::FakeDtlsTransport new_rtp_transport(
       "bar", cricket::ICE_CANDIDATE_COMPONENT_RTP);
   cricket::FakeDtlsTransport new_rtcp_transport(
@@ -3920,9 +3910,8 @@
 // Not expected to support going from DtlsTransportInternal to
 // PacketTransportInternal.
 TEST_F(BaseChannelDeathTest, SetTransportsDtlsToNonDtls) {
-  ASSERT_TRUE(voice_channel_.Init_w(
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
-      &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_));
+  voice_channel_.Init_w(&fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_,
+                        &fake_rtp_dtls_transport_, &fake_rtcp_dtls_transport_);
   EXPECT_DEATH(
       voice_channel_.SetTransports(
           static_cast<rtc::PacketTransportInternal*>(&fake_rtp_dtls_transport_),
@@ -3934,8 +3923,8 @@
 // Not expected to support going from PacketTransportInternal to
 // DtlsTransportInternal.
 TEST_F(BaseChannelDeathTest, SetTransportsNonDtlsToDtls) {
-  ASSERT_TRUE(voice_channel_.Init_w(nullptr, nullptr, &fake_rtp_dtls_transport_,
-                                    &fake_rtcp_dtls_transport_));
+  voice_channel_.Init_w(nullptr, nullptr, &fake_rtp_dtls_transport_,
+                        &fake_rtcp_dtls_transport_);
   EXPECT_DEATH(voice_channel_.SetTransports(&fake_rtp_dtls_transport_,
                                             &fake_rtp_dtls_transport_),
                "");
diff --git a/pc/channelmanager.cc b/pc/channelmanager.cc
index 9658444..bb1548d 100644
--- a/pc/channelmanager.cc
+++ b/pc/channelmanager.cc
@@ -210,12 +210,10 @@
 
   auto voice_channel = rtc::MakeUnique<VoiceChannel>(
       worker_thread_, network_thread_, signaling_thread, media_engine_.get(),
-      media_channel, content_name, rtcp_packet_transport == nullptr,
-      srtp_required);
-  if (!voice_channel->Init_w(rtp_dtls_transport, rtcp_dtls_transport,
-                             rtp_packet_transport, rtcp_packet_transport)) {
-    return nullptr;
-  }
+      rtc::WrapUnique(media_channel), content_name,
+      rtcp_packet_transport == nullptr, srtp_required);
+  voice_channel->Init_w(rtp_dtls_transport, rtcp_dtls_transport,
+                        rtp_packet_transport, rtcp_packet_transport);
 
   VoiceChannel* voice_channel_ptr = voice_channel.get();
   voice_channels_.push_back(std::move(voice_channel));
@@ -302,12 +300,11 @@
   }
 
   auto video_channel = rtc::MakeUnique<VideoChannel>(
-      worker_thread_, network_thread_, signaling_thread, media_channel,
-      content_name, rtcp_packet_transport == nullptr, srtp_required);
-  if (!video_channel->Init_w(rtp_dtls_transport, rtcp_dtls_transport,
-                             rtp_packet_transport, rtcp_packet_transport)) {
-    return nullptr;
-  }
+      worker_thread_, network_thread_, signaling_thread,
+      rtc::WrapUnique(media_channel), content_name,
+      rtcp_packet_transport == nullptr, srtp_required);
+  video_channel->Init_w(rtp_dtls_transport, rtcp_dtls_transport,
+                        rtp_packet_transport, rtcp_packet_transport);
 
   VideoChannel* video_channel_ptr = video_channel.get();
   video_channels_.push_back(std::move(video_channel));
@@ -363,13 +360,11 @@
   }
 
   auto data_channel = rtc::MakeUnique<RtpDataChannel>(
-      worker_thread_, network_thread_, signaling_thread, media_channel,
-      content_name, rtcp_transport == nullptr, srtp_required);
-  if (!data_channel->Init_w(rtp_transport, rtcp_transport, rtp_transport,
-                            rtcp_transport)) {
-    LOG(LS_WARNING) << "Failed to init data channel.";
-    return nullptr;
-  }
+      worker_thread_, network_thread_, signaling_thread,
+      rtc::WrapUnique(media_channel), content_name, rtcp_transport == nullptr,
+      srtp_required);
+  data_channel->Init_w(rtp_transport, rtcp_transport, rtp_transport,
+                       rtcp_transport);
 
   RtpDataChannel* data_channel_ptr = data_channel.get();
   data_channels_.push_back(std::move(data_channel));
diff --git a/pc/rtcstatscollector_unittest.cc b/pc/rtcstatscollector_unittest.cc
index 50cc603..2e77ec3 100644
--- a/pc/rtcstatscollector_unittest.cc
+++ b/pc/rtcstatscollector_unittest.cc
@@ -454,20 +454,21 @@
     EXPECT_CALL(pc_, GetSenders()).WillRepeatedly(Return(rtp_senders_));
     EXPECT_CALL(pc_, GetReceivers()).WillRepeatedly(Return(rtp_receivers_));
 
-    MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
+    auto* voice_media_channel = new MockVoiceMediaChannel();
     voice_channel_.reset(new cricket::VoiceChannel(
         worker_thread_, network_thread_, nullptr, media_engine_,
-        voice_media_channel, "VoiceContentName", kDefaultRtcpMuxRequired,
-        kDefaultSrtpRequired));
+        rtc::WrapUnique(voice_media_channel), "VoiceContentName",
+        kDefaultRtcpMuxRequired, kDefaultSrtpRequired));
     EXPECT_CALL(pc_, voice_channel())
         .WillRepeatedly(Return(voice_channel_.get()));
     EXPECT_CALL(*voice_media_channel, GetStats(_))
         .WillOnce(DoAll(SetArgPointee<0>(*voice_media_info_), Return(true)));
 
-    MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
+    auto* video_media_channel = new MockVideoMediaChannel();
     video_channel_.reset(new cricket::VideoChannel(
-        worker_thread_, network_thread_, nullptr, video_media_channel,
-        "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired));
+        worker_thread_, network_thread_, nullptr,
+        rtc::WrapUnique(video_media_channel), "VideoContentName",
+        kDefaultRtcpMuxRequired, kDefaultSrtpRequired));
     EXPECT_CALL(pc_, video_channel())
         .WillRepeatedly(Return(video_channel_.get()));
     EXPECT_CALL(*video_media_channel, GetStats(_))
@@ -737,17 +738,18 @@
 }
 
 TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
-  MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
+  auto* voice_media_channel = new MockVoiceMediaChannel();
   cricket::VoiceChannel voice_channel(
       test_->worker_thread(), test_->network_thread(),
-      test_->signaling_thread(), test_->media_engine(), voice_media_channel,
-      "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      test_->signaling_thread(), test_->media_engine(),
+      rtc::WrapUnique(voice_media_channel), "VoiceContentName",
+      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
-  MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
+  auto* video_media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
       test_->worker_thread(), test_->network_thread(),
-      test_->signaling_thread(), video_media_channel, "VideoContentName",
-      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      test_->signaling_thread(), rtc::WrapUnique(video_media_channel),
+      "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
   // Audio
   cricket::VoiceMediaInfo voice_media_info;
@@ -1210,11 +1212,11 @@
 }
 
 TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidatePairStats) {
-  MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
+  auto* video_media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
       test_->worker_thread(), test_->network_thread(),
-      test_->signaling_thread(), video_media_channel, "VideoContentName",
-      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      test_->signaling_thread(), rtc::WrapUnique(video_media_channel),
+      "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
   std::unique_ptr<cricket::Candidate> local_candidate = CreateFakeCandidate(
       "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42);
@@ -1804,11 +1806,12 @@
 }
 
 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) {
-  MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
+  auto* voice_media_channel = new MockVoiceMediaChannel();
   cricket::VoiceChannel voice_channel(
       test_->worker_thread(), test_->network_thread(),
-      test_->signaling_thread(), test_->media_engine(), voice_media_channel,
-      "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      test_->signaling_thread(), test_->media_engine(),
+      rtc::WrapUnique(voice_media_channel), "VoiceContentName",
+      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
   test_->SetupRemoteTrackAndReceiver(
       cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID", 1);
@@ -1883,11 +1886,11 @@
 }
 
 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) {
-  MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
+  auto* video_media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
       test_->worker_thread(), test_->network_thread(),
-      test_->signaling_thread(), video_media_channel, "VideoContentName",
-      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      test_->signaling_thread(), rtc::WrapUnique(video_media_channel),
+      "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
   test_->SetupRemoteTrackAndReceiver(
       cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID", 1);
@@ -1984,11 +1987,12 @@
 }
 
 TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) {
-  MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
+  auto* voice_media_channel = new MockVoiceMediaChannel();
   cricket::VoiceChannel voice_channel(
       test_->worker_thread(), test_->network_thread(),
-      test_->signaling_thread(), test_->media_engine(), voice_media_channel,
-      "VoiceContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      test_->signaling_thread(), test_->media_engine(),
+      rtc::WrapUnique(voice_media_channel), "VoiceContentName",
+      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
   test_->SetupLocalTrackAndSender(
       cricket::MEDIA_TYPE_AUDIO, "LocalAudioTrackID", 1);
@@ -2061,11 +2065,11 @@
 }
 
 TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) {
-  MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
+  auto* video_media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
       test_->worker_thread(), test_->network_thread(),
-      test_->signaling_thread(), video_media_channel, "VideoContentName",
-      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      test_->signaling_thread(), rtc::WrapUnique(video_media_channel),
+      "VideoContentName", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
   test_->SetupLocalTrackAndSender(
       cricket::MEDIA_TYPE_VIDEO, "LocalVideoTrackID", 1);
diff --git a/pc/statscollector_unittest.cc b/pc/statscollector_unittest.cc
index 7448a12..104ee77 100644
--- a/pc/statscollector_unittest.cc
+++ b/pc/statscollector_unittest.cc
@@ -926,9 +926,9 @@
             new SessionStats(session_stats_));
       }));
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel,
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
       kVideoChannelName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   StatsReports reports;  // returned values.
   cricket::VideoSenderInfo video_sender_info;
@@ -973,10 +973,11 @@
         return std::unique_ptr<SessionStats>(new SessionStats(session_stats_));
       }));
 
-  MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
+  auto* media_channel = new MockVoiceMediaChannel();
   cricket::VoiceChannel voice_channel(
-      worker_thread_, network_thread_, nullptr, nullptr, media_channel,
-      kAudioChannelName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, nullptr,
+      rtc::WrapUnique(media_channel), kAudioChannelName,
+      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
   StatsReports reports;  // returned values.
   cricket::VoiceSenderInfo voice_sender_info;
@@ -1040,9 +1041,9 @@
             new SessionStats(session_stats_));
       }));
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel,
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
       kVideoChannelName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
 
   StatsReports reports;  // returned values.
@@ -1125,10 +1126,10 @@
 TEST_F(StatsCollectorTest, TrackObjectExistsWithoutUpdateStats) {
   StatsCollectorForTest stats(&pc_);
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel, "video",
-      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
+      "video", kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   AddOutgoingVideoTrackStats();
   stats.AddStream(stream_);
 
@@ -1163,9 +1164,9 @@
             new SessionStats(session_stats_));
       }));
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel,
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
       kVideoChannelName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   AddOutgoingVideoTrackStats();
   stats.AddStream(stream_);
@@ -1229,12 +1230,12 @@
   EXPECT_CALL(pc_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
       .WillRepeatedly(Return(nullptr));
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   // The transport_name known by the video channel.
   const std::string kVcName("vcname");
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel, kVcName,
-      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
+      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   AddOutgoingVideoTrackStats();
   stats.AddStream(stream_);
 
@@ -1290,12 +1291,12 @@
 TEST_F(StatsCollectorTest, RemoteSsrcInfoIsAbsent) {
   StatsCollectorForTest stats(&pc_);
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   // The transport_name known by the video channel.
   const std::string kVcName("vcname");
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel, kVcName,
-      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
+      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   AddOutgoingVideoTrackStats();
   stats.AddStream(stream_);
 
@@ -1316,12 +1317,12 @@
   EXPECT_CALL(pc_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
       .WillRepeatedly(Return(nullptr));
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   // The transport_name known by the video channel.
   const std::string kVcName("vcname");
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel, kVcName,
-      kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
+      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   AddOutgoingVideoTrackStats();
   stats.AddStream(stream_);
 
@@ -1377,9 +1378,9 @@
             new SessionStats(session_stats_));
       }));
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel,
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
       kVideoChannelName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   AddIncomingVideoTrackStats();
   stats.AddStream(stream_);
@@ -1685,12 +1686,13 @@
   EXPECT_CALL(pc_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
       .WillRepeatedly(Return(nullptr));
 
-  MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
+  auto* media_channel = new MockVoiceMediaChannel();
   // The transport_name known by the voice channel.
   const std::string kVcName("vcname");
   cricket::VoiceChannel voice_channel(
-      worker_thread_, network_thread_, nullptr, media_engine_, media_channel,
-      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, media_engine_,
+      rtc::WrapUnique(media_channel), kVcName, kDefaultRtcpMuxRequired,
+      kDefaultSrtpRequired);
 
   // Create a local stream with a local audio track and adds it to the stats.
   if (stream_ == NULL)
@@ -1794,12 +1796,13 @@
   EXPECT_CALL(pc_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
       .WillRepeatedly(Return(nullptr));
 
-  MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
+  auto* media_channel = new MockVoiceMediaChannel();
   // The transport_name known by the voice channel.
   const std::string kVcName("vcname");
   cricket::VoiceChannel voice_channel(
-      worker_thread_, network_thread_, nullptr, media_engine_, media_channel,
-      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, media_engine_,
+      rtc::WrapUnique(media_channel), kVcName, kDefaultRtcpMuxRequired,
+      kDefaultSrtpRequired);
   AddOutgoingAudioTrackStats();
   stats.AddStream(stream_);
   stats.AddLocalAudioTrack(audio_track_, kSsrcOfTrack);
@@ -1829,12 +1832,13 @@
   EXPECT_CALL(pc_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
       .WillRepeatedly(Return(nullptr));
 
-  MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
+  auto* media_channel = new MockVoiceMediaChannel();
   // The transport_name known by the voice channel.
   const std::string kVcName("vcname");
   cricket::VoiceChannel voice_channel(
-      worker_thread_, network_thread_, nullptr, media_engine_, media_channel,
-      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, media_engine_,
+      rtc::WrapUnique(media_channel), kVcName, kDefaultRtcpMuxRequired,
+      kDefaultSrtpRequired);
   AddIncomingAudioTrackStats();
   stats.AddStream(stream_);
 
@@ -1858,12 +1862,13 @@
   EXPECT_CALL(pc_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
       .WillRepeatedly(Return(nullptr));
 
-  MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
+  auto* media_channel = new MockVoiceMediaChannel();
   // The transport_name known by the voice channel.
   const std::string kVcName("vcname");
   cricket::VoiceChannel voice_channel(
-      worker_thread_, network_thread_, nullptr, media_engine_, media_channel,
-      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, media_engine_,
+      rtc::WrapUnique(media_channel), kVcName, kDefaultRtcpMuxRequired,
+      kDefaultSrtpRequired);
   AddOutgoingAudioTrackStats();
   stats.AddStream(stream_);
   stats.AddLocalAudioTrack(audio_track_.get(), kSsrcOfTrack);
@@ -1921,12 +1926,13 @@
   EXPECT_CALL(pc_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
       .WillRepeatedly(Return(nullptr));
 
-  MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
+  auto* media_channel = new MockVoiceMediaChannel();
   // The transport_name known by the voice channel.
   const std::string kVcName("vcname");
   cricket::VoiceChannel voice_channel(
-      worker_thread_, network_thread_, nullptr, media_engine_, media_channel,
-      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, media_engine_,
+      rtc::WrapUnique(media_channel), kVcName, kDefaultRtcpMuxRequired,
+      kDefaultSrtpRequired);
 
   // Create a local stream with a local audio track and adds it to the stats.
   AddOutgoingAudioTrackStats();
@@ -2010,12 +2016,13 @@
   EXPECT_CALL(pc_, GetRemoteSSLCertificate_ReturnsRawPointer(_))
       .WillRepeatedly(Return(nullptr));
 
-  MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
+  auto* media_channel = new MockVoiceMediaChannel();
   // The transport_name known by the voice channel.
   const std::string kVcName("vcname");
   cricket::VoiceChannel voice_channel(
-      worker_thread_, network_thread_, nullptr, media_engine_, media_channel,
-      kVcName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
+      worker_thread_, network_thread_, nullptr, media_engine_,
+      rtc::WrapUnique(media_channel), kVcName, kDefaultRtcpMuxRequired,
+      kDefaultSrtpRequired);
 
   // Create a local stream with a local audio track and adds it to the stats.
   AddOutgoingAudioTrackStats();
@@ -2072,9 +2079,9 @@
             new SessionStats(session_stats_));
       }));
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel,
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
       kVideoChannelName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   StatsReports reports;  // returned values.
   cricket::VideoSenderInfo video_sender_info;
@@ -2119,9 +2126,9 @@
             new SessionStats(session_stats_));
       }));
 
-  MockVideoMediaChannel* media_channel = new MockVideoMediaChannel();
+  auto* media_channel = new MockVideoMediaChannel();
   cricket::VideoChannel video_channel(
-      worker_thread_, network_thread_, nullptr, media_channel,
+      worker_thread_, network_thread_, nullptr, rtc::WrapUnique(media_channel),
       kVideoChannelName, kDefaultRtcpMuxRequired, kDefaultSrtpRequired);
   StatsReports reports;  // returned values.
   cricket::VideoReceiverInfo video_receiver_info;