Introduce AddDefaultRecvStreamForTesting to VideoReceiveChannel API

This change allows us to remove one static_cast from tests that
was problematic for another refactoring.

Bug: webrtc:13931
Change-Id: I8e1b5cecadd806b266b6c115b56b18b9613cbe82
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/306500
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40144}
diff --git a/media/base/fake_media_engine.h b/media/base/fake_media_engine.h
index f8527da..b00de20 100644
--- a/media/base/fake_media_engine.h
+++ b/media/base/fake_media_engine.h
@@ -143,6 +143,10 @@
         CreateRtpParametersWithEncodings(sp);
     return true;
   }
+  virtual bool AddDefaultRecvStreamForTesting(const StreamParams& sp) {
+    RTC_CHECK_NOTREACHED();
+    return false;
+  }
   virtual bool RemoveRecvStream(uint32_t ssrc) {
     auto parameters_iterator = rtp_receive_parameters_.find(ssrc);
     if (parameters_iterator != rtp_receive_parameters_.end()) {
diff --git a/media/base/media_channel.h b/media/base/media_channel.h
index 08e33cd..578c0a2 100644
--- a/media/base/media_channel.h
+++ b/media/base/media_channel.h
@@ -1005,6 +1005,7 @@
                                              bool nack_enabled,
                                              webrtc::RtcpMode rtcp_mode,
                                              absl::optional<int> rtx_time) = 0;
+  virtual bool AddDefaultRecvStreamForTesting(const StreamParams& sp) = 0;
 };
 
 }  // namespace cricket
diff --git a/media/base/media_channel_impl.h b/media/base/media_channel_impl.h
index 1be6c6e..57d9a4e 100644
--- a/media/base/media_channel_impl.h
+++ b/media/base/media_channel_impl.h
@@ -242,6 +242,8 @@
   void SetSsrcListChangedCallback(
       absl::AnyInvocable<void(const std::set<uint32_t>&)> callback) override =
       0;
+  bool AddRecvStream(const StreamParams& sp) override = 0;
+  void OnPacketReceived(const webrtc::RtpPacketReceived& packet) override = 0;
 
   // This fills the "bitrate parts" (rtx, video bitrate) of the
   // BandwidthEstimationInfo, since that part that isn't possible to get
@@ -815,9 +817,13 @@
     impl()->SetReceiverFeedbackParameters(lntf_enabled, nack_enabled, rtcp_mode,
                                           rtx_time);
   }
-  MediaChannel* ImplForTesting() override { return impl_; }
   void SetReceive(bool receive) override { impl()->SetReceive(receive); }
 
+  MediaChannel* ImplForTesting() override { return impl_; }
+  bool AddDefaultRecvStreamForTesting(const StreamParams& sp) override {
+    return impl()->AddDefaultRecvStreamForTesting(sp);
+  }
+
  private:
   VideoMediaReceiveChannelInterface* impl() { return impl_; }
   const VideoMediaReceiveChannelInterface* impl() const { return impl_; }
diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h
index 6e62945..2013e69 100644
--- a/media/engine/webrtc_video_engine.h
+++ b/media/engine/webrtc_video_engine.h
@@ -168,7 +168,10 @@
   bool AddSendStream(const StreamParams& sp) override;
   bool RemoveSendStream(uint32_t ssrc) override;
   bool AddRecvStream(const StreamParams& sp) override;
-  bool AddRecvStream(const StreamParams& sp, bool default_stream);
+  bool AddDefaultRecvStreamForTesting(const StreamParams& sp) override {
+    // Invokes private AddRecvStream variant function
+    return AddRecvStream(sp, true);
+  }
   bool RemoveRecvStream(uint32_t ssrc) override;
   void ResetUnsignaledRecvStream() override;
   absl::optional<uint32_t> GetUnsignaledSsrc() const override;
@@ -379,6 +382,9 @@
       RTC_EXCLUSIVE_LOCKS_REQUIRED(thread_checker_);
   void ReCreateDefaultReceiveStream(uint32_t ssrc,
                                     absl::optional<uint32_t> rtx_ssrc);
+  // Add a receive stream. Used for testing.
+  bool AddRecvStream(const StreamParams& sp, bool default_stream);
+
   void ConfigureReceiverRtp(
       webrtc::VideoReceiveStreamInterface::Config* config,
       webrtc::FlexfecReceiveStream::Config* flexfec_config,
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index 32e2c33..7958987 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -1613,14 +1613,13 @@
                 []() { return std::make_unique<webrtc::test::FakeDecoder>(); },
                 kSdpVideoFormats),
             field_trials_),
-        channel_(absl::WrapUnique(static_cast<cricket::WebRtcVideoChannel*>(
-            engine_.CreateMediaChannel(
-                cricket::MediaChannel::Role::kBoth,
-                call_.get(),
-                cricket::MediaConfig(),
-                cricket::VideoOptions(),
-                webrtc::CryptoOptions(),
-                video_bitrate_allocator_factory_.get())))) {
+        channel_(absl::WrapUnique(engine_.CreateMediaChannel(
+            cricket::MediaChannel::Role::kBoth,
+            call_.get(),
+            cricket::MediaConfig(),
+            cricket::VideoOptions(),
+            webrtc::CryptoOptions(),
+            video_bitrate_allocator_factory_.get()))) {
     send_channel_ = std::make_unique<VideoMediaSendChannel>(channel_.get());
     receive_channel_ =
         std::make_unique<VideoMediaReceiveChannel>(channel_.get());
@@ -1657,7 +1656,7 @@
   std::unique_ptr<webrtc::VideoBitrateAllocatorFactory>
       video_bitrate_allocator_factory_;
   WebRtcVideoEngine engine_;
-  std::unique_ptr<WebRtcVideoChannel> channel_;
+  std::unique_ptr<VideoMediaChannel> channel_;
   std::unique_ptr<VideoMediaSendChannel> send_channel_;
   std::unique_ptr<VideoMediaReceiveChannel> receive_channel_;
   cricket::FakeNetworkInterface network_interface_;
@@ -1672,8 +1671,8 @@
        SetEncodedFrameBufferFunction_DefaultStream) {
   testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)> callback;
   EXPECT_CALL(callback, Call);
-  EXPECT_TRUE(channel_->AddRecvStream(
-      cricket::StreamParams::CreateLegacy(kSsrc), /*is_default_stream=*/true));
+  EXPECT_TRUE(channel_->AddDefaultRecvStreamForTesting(
+      cricket::StreamParams::CreateLegacy(kSsrc)));
   channel_->SetRecordableEncodedFrameCallback(/*ssrc=*/0,
                                               callback.AsStdFunction());
   EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_));
@@ -1687,8 +1686,8 @@
        SetEncodedFrameBufferFunction_MatchSsrcWithDefaultStream) {
   testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)> callback;
   EXPECT_CALL(callback, Call);
-  EXPECT_TRUE(channel_->AddRecvStream(
-      cricket::StreamParams::CreateLegacy(kSsrc), /*is_default_stream=*/true));
+  EXPECT_TRUE(channel_->AddDefaultRecvStreamForTesting(
+      cricket::StreamParams::CreateLegacy(kSsrc)));
   EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_));
   channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction());
   DeliverKeyFrame(kSsrc);
@@ -1701,8 +1700,8 @@
        SetEncodedFrameBufferFunction_MatchSsrc) {
   testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)> callback;
   EXPECT_CALL(callback, Call);
-  EXPECT_TRUE(channel_->AddRecvStream(
-      cricket::StreamParams::CreateLegacy(kSsrc), /*is_default_stream=*/false));
+  EXPECT_TRUE(
+      channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc)));
   EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_));
   channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction());
   DeliverKeyFrame(kSsrc);
@@ -1717,8 +1716,7 @@
       testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)>>
       callback;
   EXPECT_TRUE(
-      channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc + 1),
-                              /*is_default_stream=*/false));
+      channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc + 1)));
   EXPECT_TRUE(channel_->SetSink(kSsrc + 1, &renderer_));
   channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction());
   DeliverKeyFrame(kSsrc);  // Expected to not cause function to fire.
@@ -1731,9 +1729,8 @@
   testing::StrictMock<
       testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)>>
       callback;
-  EXPECT_TRUE(
-      channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(kSsrc + 1),
-                              /*is_default_stream=*/true));
+  EXPECT_TRUE(channel_->AddDefaultRecvStreamForTesting(
+      cricket::StreamParams::CreateLegacy(kSsrc + 1)));
   EXPECT_TRUE(channel_->SetSink(kSsrc + 1, &renderer_));
   channel_->SetRecordableEncodedFrameCallback(kSsrc, callback.AsStdFunction());
   channel_->SetDefaultSink(&renderer_);
@@ -1745,8 +1742,8 @@
 TEST_F(WebRtcVideoChannelEncodedFrameCallbackTest, DoesNotDecodeWhenDisabled) {
   testing::MockFunction<void(const webrtc::RecordableEncodedFrame&)> callback;
   EXPECT_CALL(callback, Call);
-  EXPECT_TRUE(channel_->AddRecvStream(
-      cricket::StreamParams::CreateLegacy(kSsrc), /*is_default_stream=*/true));
+  EXPECT_TRUE(channel_->AddDefaultRecvStreamForTesting(
+      cricket::StreamParams::CreateLegacy(kSsrc)));
   channel_->SetRecordableEncodedFrameCallback(/*ssrc=*/0,
                                               callback.AsStdFunction());
   EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_));