1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
6 #define CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
12 #include "base/compiler_specific.h"
13 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
14 #include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface.h"
15 #include "third_party/libjingle/source/talk/media/base/videorenderer.h"
19 class WebAudioCapturerSource;
21 class MockVideoRenderer : public cricket::VideoRenderer {
24 virtual ~MockVideoRenderer();
25 virtual bool SetSize(int width, int height, int reserved) OVERRIDE;
26 virtual bool RenderFrame(const cricket::VideoFrame* frame) OVERRIDE;
28 int width() const { return width_; }
29 int height() const { return height_; }
30 int num() const { return num_; }
38 class MockVideoSource : public webrtc::VideoSourceInterface {
42 virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
43 virtual void UnregisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
44 virtual MediaSourceInterface::SourceState state() const OVERRIDE;
45 virtual cricket::VideoCapturer* GetVideoCapturer() OVERRIDE;
46 virtual void AddSink(cricket::VideoRenderer* output) OVERRIDE;
47 virtual void RemoveSink(cricket::VideoRenderer* output) OVERRIDE;
48 virtual cricket::VideoRenderer* FrameInput() OVERRIDE;
49 virtual const cricket::VideoOptions* options() const OVERRIDE;
51 // Changes the state of the source to live and notifies the observer.
53 // Changes the state of the source to ended and notifies the observer.
55 // Set the video capturer.
56 void SetVideoCapturer(cricket::VideoCapturer* capturer);
59 int GetLastFrameWidth() const;
60 int GetLastFrameHeight() const;
61 int GetFrameNum() const;
64 virtual ~MockVideoSource();
69 std::vector<webrtc::ObserverInterface*> observers_;
70 MediaSourceInterface::SourceState state_;
71 scoped_ptr<cricket::VideoCapturer> capturer_;
72 MockVideoRenderer renderer_;
75 class MockAudioSource : public webrtc::AudioSourceInterface {
77 explicit MockAudioSource(
78 const webrtc::MediaConstraintsInterface* constraints);
80 virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
81 virtual void UnregisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
82 virtual MediaSourceInterface::SourceState state() const OVERRIDE;
84 // Changes the state of the source to live and notifies the observer.
86 // Changes the state of the source to ended and notifies the observer.
89 const webrtc::MediaConstraintsInterface::Constraints& optional_constraints() {
90 return optional_constraints_;
93 const webrtc::MediaConstraintsInterface::Constraints&
94 mandatory_constraints() {
95 return mandatory_constraints_;
99 virtual ~MockAudioSource();
102 webrtc::ObserverInterface* observer_;
103 MediaSourceInterface::SourceState state_;
104 webrtc::MediaConstraintsInterface::Constraints optional_constraints_;
105 webrtc::MediaConstraintsInterface::Constraints mandatory_constraints_;
108 class MockWebRtcVideoTrack : public webrtc::VideoTrackInterface {
110 MockWebRtcVideoTrack(const std::string& id,
111 webrtc::VideoSourceInterface* source);
112 virtual void AddRenderer(webrtc::VideoRendererInterface* renderer) OVERRIDE;
113 virtual void RemoveRenderer(
114 webrtc::VideoRendererInterface* renderer) OVERRIDE;
115 virtual std::string kind() const OVERRIDE;
116 virtual std::string id() const OVERRIDE;
117 virtual bool enabled() const OVERRIDE;
118 virtual TrackState state() const OVERRIDE;
119 virtual bool set_enabled(bool enable) OVERRIDE;
120 virtual bool set_state(TrackState new_state) OVERRIDE;
121 virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
122 virtual void UnregisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
123 virtual webrtc::VideoSourceInterface* GetSource() const OVERRIDE;
126 virtual ~MockWebRtcVideoTrack();
132 scoped_refptr<webrtc::VideoSourceInterface> source_;
133 webrtc::ObserverInterface* observer_;
134 webrtc::VideoRendererInterface* renderer_;
137 class MockMediaStream : public webrtc::MediaStreamInterface {
139 explicit MockMediaStream(const std::string& label);
141 virtual bool AddTrack(webrtc::AudioTrackInterface* track) OVERRIDE;
142 virtual bool AddTrack(webrtc::VideoTrackInterface* track) OVERRIDE;
143 virtual bool RemoveTrack(webrtc::AudioTrackInterface* track) OVERRIDE;
144 virtual bool RemoveTrack(webrtc::VideoTrackInterface* track) OVERRIDE;
145 virtual std::string label() const OVERRIDE;
146 virtual webrtc::AudioTrackVector GetAudioTracks() OVERRIDE;
147 virtual webrtc::VideoTrackVector GetVideoTracks() OVERRIDE;
148 virtual rtc::scoped_refptr<webrtc::AudioTrackInterface>
149 FindAudioTrack(const std::string& track_id) OVERRIDE;
150 virtual rtc::scoped_refptr<webrtc::VideoTrackInterface>
151 FindVideoTrack(const std::string& track_id) OVERRIDE;
152 virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
153 virtual void UnregisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
156 virtual ~MockMediaStream();
159 void NotifyObservers();
162 webrtc::AudioTrackVector audio_track_vector_;
163 webrtc::VideoTrackVector video_track_vector_;
165 typedef std::set<webrtc::ObserverInterface*> ObserverSet;
166 ObserverSet observers_;
169 // A mock factory for creating different objects for
170 // RTC PeerConnections.
171 class MockPeerConnectionDependencyFactory
172 : public PeerConnectionDependencyFactory {
174 MockPeerConnectionDependencyFactory();
175 virtual ~MockPeerConnectionDependencyFactory();
177 virtual scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(
178 const webrtc::PeerConnectionInterface::RTCConfiguration& config,
179 const webrtc::MediaConstraintsInterface* constraints,
180 blink::WebFrame* frame,
181 webrtc::PeerConnectionObserver* observer) OVERRIDE;
182 virtual scoped_refptr<webrtc::AudioSourceInterface>
183 CreateLocalAudioSource(
184 const webrtc::MediaConstraintsInterface* constraints) OVERRIDE;
185 virtual WebRtcVideoCapturerAdapter* CreateVideoCapturer(
186 bool is_screen_capture) OVERRIDE;
187 virtual scoped_refptr<webrtc::VideoSourceInterface>
189 cricket::VideoCapturer* capturer,
190 const blink::WebMediaConstraints& constraints) OVERRIDE;
191 virtual scoped_refptr<WebAudioCapturerSource> CreateWebAudioSource(
192 blink::WebMediaStreamSource* source) OVERRIDE;
193 virtual scoped_refptr<webrtc::MediaStreamInterface>
194 CreateLocalMediaStream(const std::string& label) OVERRIDE;
195 virtual scoped_refptr<webrtc::VideoTrackInterface>
196 CreateLocalVideoTrack(const std::string& id,
197 webrtc::VideoSourceInterface* source) OVERRIDE;
198 virtual scoped_refptr<webrtc::VideoTrackInterface>
199 CreateLocalVideoTrack(const std::string& id,
200 cricket::VideoCapturer* capturer) OVERRIDE;
201 virtual webrtc::SessionDescriptionInterface* CreateSessionDescription(
202 const std::string& type,
203 const std::string& sdp,
204 webrtc::SdpParseError* error) OVERRIDE;
205 virtual webrtc::IceCandidateInterface* CreateIceCandidate(
206 const std::string& sdp_mid,
208 const std::string& sdp) OVERRIDE;
210 virtual scoped_refptr<WebRtcAudioCapturer> CreateAudioCapturer(
211 int render_view_id, const StreamDeviceInfo& device_info,
212 const blink::WebMediaConstraints& constraints,
213 MediaStreamAudioSource* audio_source) OVERRIDE;
214 void FailToCreateNextAudioCapturer() {
215 fail_to_create_next_audio_capturer_ = true;
218 virtual void StartLocalAudioTrack(
219 WebRtcLocalAudioTrack* audio_track) OVERRIDE;
221 MockAudioSource* last_audio_source() { return last_audio_source_.get(); }
222 MockVideoSource* last_video_source() { return last_video_source_.get(); }
225 bool fail_to_create_next_audio_capturer_;
226 scoped_refptr <MockAudioSource> last_audio_source_;
227 scoped_refptr <MockVideoSource> last_video_source_;
229 DISALLOW_COPY_AND_ASSIGN(MockPeerConnectionDependencyFactory);
232 } // namespace content
234 #endif // CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_