Refactor PeerConnectionFactoryTest to not use FakeVideoCapturer.

Extend FakeVideoTrackSource to have a VideoBroadcaster.

Bug: webrtc:6353
Change-Id: I3c8e68b4ec9a1910f0450b5cc698056c0f3089d2
Reviewed-on: https://webrtc-review.googlesource.com/c/118080
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26320}
diff --git a/pc/peer_connection_factory_unittest.cc b/pc/peer_connection_factory_unittest.cc
index 3f3cc15..1c3eff7 100644
--- a/pc/peer_connection_factory_unittest.cc
+++ b/pc/peer_connection_factory_unittest.cc
@@ -27,7 +27,7 @@
 #include "api/video_codecs/builtin_video_encoder_factory.h"
 #include "api/video_codecs/video_decoder_factory.h"
 #include "api/video_codecs/video_encoder_factory.h"
-#include "media/base/fake_video_capturer.h"
+#include "media/base/fake_frame_source.h"
 #include "modules/audio_device/include/audio_device.h"
 #include "modules/audio_processing/include/audio_processing.h"
 #include "p2p/base/fake_port_allocator.h"
@@ -35,6 +35,7 @@
 #include "p2p/base/port_interface.h"
 #include "pc/peer_connection_factory.h"
 #include "pc/test/fake_audio_capture_module.h"
+#include "pc/test/fake_video_track_source.h"
 #include "rtc_base/socket_address.h"
 #include "test/gtest.h"
 
@@ -443,13 +444,12 @@
 // This test verifies the captured stream is rendered locally using a
 // local video track.
 TEST_F(PeerConnectionFactoryTest, LocalRendering) {
-  cricket::FakeVideoCapturerWithTaskQueue* capturer =
-      new cricket::FakeVideoCapturerWithTaskQueue();
-  // The source takes ownership of |capturer|, but we keep a raw pointer to
-  // inject fake frames.
-  rtc::scoped_refptr<VideoTrackSourceInterface> source(
-      factory_->CreateVideoSource(
-          std::unique_ptr<cricket::VideoCapturer>(capturer), NULL));
+  rtc::scoped_refptr<webrtc::FakeVideoTrackSource> source =
+      webrtc::FakeVideoTrackSource::Create(/*is_screencast=*/false);
+
+  cricket::FakeFrameSource frame_source(1280, 720,
+                                        rtc::kNumMicrosecsPerSec / 30);
+
   ASSERT_TRUE(source.get() != NULL);
   rtc::scoped_refptr<VideoTrackInterface> track(
       factory_->CreateVideoTrack("testlabel", source));
@@ -457,17 +457,17 @@
   FakeVideoTrackRenderer local_renderer(track);
 
   EXPECT_EQ(0, local_renderer.num_rendered_frames());
-  EXPECT_TRUE(capturer->CaptureFrame());
+  source->InjectFrame(frame_source.GetFrame());
   EXPECT_EQ(1, local_renderer.num_rendered_frames());
   EXPECT_FALSE(local_renderer.black_frame());
 
   track->set_enabled(false);
-  EXPECT_TRUE(capturer->CaptureFrame());
+  source->InjectFrame(frame_source.GetFrame());
   EXPECT_EQ(2, local_renderer.num_rendered_frames());
   EXPECT_TRUE(local_renderer.black_frame());
 
   track->set_enabled(true);
-  EXPECT_TRUE(capturer->CaptureFrame());
+  source->InjectFrame(frame_source.GetFrame());
   EXPECT_EQ(3, local_renderer.num_rendered_frames());
   EXPECT_FALSE(local_renderer.black_frame());
 }
diff --git a/pc/test/fake_video_track_source.h b/pc/test/fake_video_track_source.h
index 295201e..d656231 100644
--- a/pc/test/fake_video_track_source.h
+++ b/pc/test/fake_video_track_source.h
@@ -12,12 +12,13 @@
 #define PC_TEST_FAKE_VIDEO_TRACK_SOURCE_H_
 
 #include "api/media_stream_interface.h"
+#include "media/base/video_broadcaster.h"
 #include "pc/video_track_source.h"
 
 namespace webrtc {
 
-// A minimal implementation of VideoTrackSource, which doesn't produce
-// any frames.
+// A minimal implementation of VideoTrackSource. Includes a VideoBroadcaster for
+// injection of frames.
 class FakeVideoTrackSource : public VideoTrackSource {
  public:
   static rtc::scoped_refptr<FakeVideoTrackSource> Create(bool is_screencast) {
@@ -29,20 +30,23 @@
   }
 
   bool is_screencast() const override { return is_screencast_; }
-  void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
-                       const rtc::VideoSinkWants& wants) override {}
-  void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) {}
+
+  void InjectFrame(const VideoFrame& frame) {
+    video_broadcaster_.OnFrame(frame);
+  }
 
  protected:
   explicit FakeVideoTrackSource(bool is_screencast)
       : VideoTrackSource(false /* remote */), is_screencast_(is_screencast) {}
   ~FakeVideoTrackSource() override = default;
 
-  // Unused, since we override AddOrUpdateSink and RemoveSink above.
-  rtc::VideoSourceInterface<VideoFrame>* source() override { return nullptr; }
+  rtc::VideoSourceInterface<VideoFrame>* source() override {
+    return &video_broadcaster_;
+  }
 
  private:
   const bool is_screencast_;
+  rtc::VideoBroadcaster video_broadcaster_;
 };
 
 }  // namespace webrtc