api/test: Move MockVideoTrack to its own file for sharing

Bug: webrtc:9620
Change-Id: Iebe11d3e481dd8046771ded2608a4c57288cd22d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/226325
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34494}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index b80e500..fa92790 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -1057,6 +1057,20 @@
     ]
   }
 
+  rtc_library("mock_video_track") {
+    visibility = [ "*" ]
+
+    testonly = true
+    sources = [ "test/mock_video_track.h" ]
+
+    deps = [
+      "../api:media_stream_interface",
+      "../api:scoped_refptr",
+      "../rtc_base:refcount",
+      "../test:test_support",
+    ]
+  }
+
   rtc_library("create_time_controller") {
     visibility = [ "*" ]
     testonly = true
@@ -1145,6 +1159,7 @@
       ":mock_video_codec_factory",
       ":mock_video_decoder",
       ":mock_video_encoder",
+      ":mock_video_track",
       ":rtc_api_unittests",
       "units:units_unittests",
     ]
diff --git a/api/DEPS b/api/DEPS
index e912cd4..d201a44 100644
--- a/api/DEPS
+++ b/api/DEPS
@@ -275,6 +275,10 @@
     "+rtc_base/ref_counted_object.h",
   ],
 
+  "mock_video_track\.h": [
+    "+rtc_base/ref_counted_object.h",
+  ],
+
   "simulated_network\.h": [
     "+rtc_base/random.h",
     "+rtc_base/thread_annotations.h",
diff --git a/api/test/compile_all_headers.cc b/api/test/compile_all_headers.cc
index ff4601a..9275eb0 100644
--- a/api/test/compile_all_headers.cc
+++ b/api/test/compile_all_headers.cc
@@ -49,3 +49,4 @@
 #include "api/test/mock_video_decoder_factory.h"
 #include "api/test/mock_video_encoder.h"
 #include "api/test/mock_video_encoder_factory.h"
+#include "api/test/mock_video_track.h"
diff --git a/api/test/mock_video_track.h b/api/test/mock_video_track.h
new file mode 100644
index 0000000..58a531b
--- /dev/null
+++ b/api/test/mock_video_track.h
@@ -0,0 +1,69 @@
+/*
+ *  Copyright 2021 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_TEST_MOCK_VIDEO_TRACK_H_
+#define API_TEST_MOCK_VIDEO_TRACK_H_
+
+#include <string>
+
+#include "api/media_stream_interface.h"
+#include "api/scoped_refptr.h"
+#include "rtc_base/ref_counted_object.h"
+#include "test/gmock.h"
+
+namespace webrtc {
+
+class MockVideoTrack final
+    : public rtc::RefCountedObject<webrtc::VideoTrackInterface> {
+ public:
+  static rtc::scoped_refptr<MockVideoTrack> Create() {
+    return new MockVideoTrack();
+  }
+
+  // NotifierInterface
+  MOCK_METHOD(void,
+              RegisterObserver,
+              (ObserverInterface * observer),
+              (override));
+  MOCK_METHOD(void,
+              UnregisterObserver,
+              (ObserverInterface * observer),
+              (override));
+
+  // MediaStreamTrackInterface
+  MOCK_METHOD(std::string, kind, (), (const, override));
+  MOCK_METHOD(std::string, id, (), (const, override));
+  MOCK_METHOD(bool, enabled, (), (const, override));
+  MOCK_METHOD(bool, set_enabled, (bool enable), (override));
+  MOCK_METHOD(TrackState, state, (), (const, override));
+
+  // VideoSourceInterface
+  MOCK_METHOD(void,
+              AddOrUpdateSink,
+              (rtc::VideoSinkInterface<VideoFrame> * sink,
+               const rtc::VideoSinkWants& wants),
+              (override));
+  // RemoveSink must guarantee that at the time the method returns,
+  // there is no current and no future calls to VideoSinkInterface::OnFrame.
+  MOCK_METHOD(void,
+              RemoveSink,
+              (rtc::VideoSinkInterface<VideoFrame> * sink),
+              (override));
+
+  // VideoTrackInterface
+  MOCK_METHOD(VideoTrackSourceInterface*, GetSource, (), (const, override));
+
+  MOCK_METHOD(ContentHint, content_hint, (), (const, override));
+  MOCK_METHOD(void, set_content_hint, (ContentHint hint), (override));
+};
+
+}  // namespace webrtc
+
+#endif  // API_TEST_MOCK_VIDEO_TRACK_H_
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 460462e..d5d11f6 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -1094,6 +1094,7 @@
       "../api:libjingle_peerconnection_api",
       "../api:media_stream_interface",
       "../api:mock_rtp",
+      "../api:mock_video_track",
       "../api:packet_socket_factory",
       "../api:rtc_error",
       "../api:rtp_transceiver_direction",
diff --git a/pc/track_media_info_map_unittest.cc b/pc/track_media_info_map_unittest.cc
index 1d5caac..a0e37a2 100644
--- a/pc/track_media_info_map_unittest.cc
+++ b/pc/track_media_info_map_unittest.cc
@@ -17,6 +17,7 @@
 #include <vector>
 
 #include "api/rtp_sender_interface.h"
+#include "api/test/mock_video_track.h"
 #include "api/transport/rtp/rtp_source.h"
 #include "media/base/media_channel.h"
 #include "pc/audio_track.h"
@@ -31,45 +32,6 @@
 
 namespace {
 
-class MockVideoTrack : public VideoTrackInterface {
- public:
-  // NotifierInterface
-  MOCK_METHOD(void,
-              RegisterObserver,
-              (ObserverInterface * observer),
-              (override));
-  MOCK_METHOD(void,
-              UnregisterObserver,
-              (ObserverInterface * observer),
-              (override));
-
-  // MediaStreamTrackInterface
-  MOCK_METHOD(std::string, kind, (), (const, override));
-  MOCK_METHOD(std::string, id, (), (const, override));
-  MOCK_METHOD(bool, enabled, (), (const, override));
-  MOCK_METHOD(bool, set_enabled, (bool enable), (override));
-  MOCK_METHOD(TrackState, state, (), (const, override));
-
-  // VideoSourceInterface
-  MOCK_METHOD(void,
-              AddOrUpdateSink,
-              (rtc::VideoSinkInterface<VideoFrame> * sink,
-               const rtc::VideoSinkWants& wants),
-              (override));
-  // RemoveSink must guarantee that at the time the method returns,
-  // there is no current and no future calls to VideoSinkInterface::OnFrame.
-  MOCK_METHOD(void,
-              RemoveSink,
-              (rtc::VideoSinkInterface<VideoFrame> * sink),
-              (override));
-
-  // VideoTrackInterface
-  MOCK_METHOD(VideoTrackSourceInterface*, GetSource, (), (const, override));
-
-  MOCK_METHOD(ContentHint, content_hint, (), (const, override));
-  MOCK_METHOD(void, set_content_hint, (ContentHint hint), (override));
-};
-
 RtpParameters CreateRtpParametersWithSsrcs(
     std::initializer_list<uint32_t> ssrcs) {
   RtpParameters params;
@@ -126,7 +88,7 @@
 
 rtc::scoped_refptr<VideoTrackInterface> CreateMockVideoTrack(
     const std::string& id) {
-  auto track = rtc::make_ref_counted<MockVideoTrack>();
+  auto track = MockVideoTrack::Create();
   EXPECT_CALL(*track, kind())
       .WillRepeatedly(::testing::Return(VideoTrack::kVideoKind));
   return track;