15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_RENDERER_MEDIA_MOCK_MEDIA_STREAM_DEPENDENCY_FACTORY_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_RENDERER_MEDIA_MOCK_MEDIA_STREAM_DEPENDENCY_FACTORY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/media/media_stream_dependency_factory.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockVideoSource : public webrtc::VideoSourceInterface { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockVideoSource(); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UnregisterObserver(webrtc::ObserverInterface* observer) OVERRIDE; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual MediaSourceInterface::SourceState state() const OVERRIDE; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual cricket::VideoCapturer* GetVideoCapturer() OVERRIDE; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddSink(cricket::VideoRenderer* output) OVERRIDE; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RemoveSink(cricket::VideoRenderer* output) OVERRIDE; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const cricket::VideoOptions* options() const OVERRIDE; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Changes the state of the source to live and notifies the observer. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLive(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Changes the state of the source to ended and notifies the observer. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetEnded(); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the video capturer. 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetVideoCapturer(cricket::VideoCapturer* capturer); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockVideoSource(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void FireOnChanged(); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<webrtc::ObserverInterface*> observers_; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MediaSourceInterface::SourceState state_; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<cricket::VideoCapturer> capturer_; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockAudioSource : public webrtc::AudioSourceInterface { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit MockAudioSource( 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const webrtc::MediaConstraintsInterface* constraints); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void UnregisterObserver(webrtc::ObserverInterface* observer) OVERRIDE; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual MediaSourceInterface::SourceState state() const OVERRIDE; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Changes the state of the source to live and notifies the observer. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetLive(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Changes the state of the source to ended and notifies the observer. 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetEnded(); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const webrtc::MediaConstraintsInterface::Constraints& optional_constraints() { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return optional_constraints_; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const webrtc::MediaConstraintsInterface::Constraints& 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mandatory_constraints() { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return mandatory_constraints_; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockAudioSource(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webrtc::ObserverInterface* observer_; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaSourceInterface::SourceState state_; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webrtc::MediaConstraintsInterface::Constraints optional_constraints_; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webrtc::MediaConstraintsInterface::Constraints mandatory_constraints_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockLocalVideoTrack : public webrtc::VideoTrackInterface { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockLocalVideoTrack(std::string id, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webrtc::VideoSourceInterface* source); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddRenderer(webrtc::VideoRendererInterface* renderer) OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RemoveRenderer( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webrtc::VideoRendererInterface* renderer) OVERRIDE; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual cricket::VideoRenderer* FrameInput() OVERRIDE; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string kind() const OVERRIDE; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string id() const OVERRIDE; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool enabled() const OVERRIDE; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual TrackState state() const OVERRIDE; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool set_enabled(bool enable) OVERRIDE; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool set_state(TrackState new_state) OVERRIDE; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UnregisterObserver(webrtc::ObserverInterface* observer) OVERRIDE; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual webrtc::VideoSourceInterface* GetSource() const OVERRIDE; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockLocalVideoTrack(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enabled_; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string id_; 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TrackState state_; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<webrtc::VideoSourceInterface> source_; 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) webrtc::ObserverInterface* observer_; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A mock factory for creating different objects for 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RTC MediaStreams and PeerConnections. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockMediaStreamDependencyFactory : public MediaStreamDependencyFactory { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockMediaStreamDependencyFactory(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockMediaStreamDependencyFactory(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection( 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const webrtc::PeerConnectionInterface::IceServers& ice_servers, 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const webrtc::MediaConstraintsInterface* constraints, 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebFrame* frame, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webrtc::PeerConnectionObserver* observer) OVERRIDE; 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_refptr<webrtc::AudioSourceInterface> 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateLocalAudioSource( 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const webrtc::MediaConstraintsInterface* constraints) OVERRIDE; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual scoped_refptr<webrtc::VideoSourceInterface> 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateLocalVideoSource( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int video_session_id, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_screencast, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const webrtc::MediaConstraintsInterface* constraints) OVERRIDE; 129bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual scoped_refptr<WebRtcAudioCapturer> CreateWebAudioSource( 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebMediaStreamSource* source) OVERRIDE; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_refptr<webrtc::MediaStreamInterface> 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateLocalMediaStream(const std::string& label) OVERRIDE; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual scoped_refptr<webrtc::VideoTrackInterface> 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateLocalVideoTrack(const std::string& id, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webrtc::VideoSourceInterface* source) OVERRIDE; 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual scoped_refptr<webrtc::VideoTrackInterface> 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateLocalVideoTrack(const std::string& id, 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cricket::VideoCapturer* capturer) OVERRIDE; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_refptr<webrtc::AudioTrackInterface> 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateLocalAudioTrack(const std::string& id, 141bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const scoped_refptr<WebRtcAudioCapturer>& capturer, 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webrtc::AudioSourceInterface* source) OVERRIDE; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual webrtc::SessionDescriptionInterface* CreateSessionDescription( 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& type, 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& sdp, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webrtc::SdpParseError* error) OVERRIDE; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual webrtc::IceCandidateInterface* CreateIceCandidate( 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& sdp_mid, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sdp_mline_index, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& sdp) OVERRIDE; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool EnsurePeerConnectionFactory() OVERRIDE; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool PeerConnectionFactoryCreated() OVERRIDE; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual scoped_refptr<WebRtcAudioCapturer> MaybeCreateAudioCapturer( 156bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int render_view_id, const StreamDeviceInfo& device_info) OVERRIDE; 157bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 158868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MockAudioSource* last_audio_source() { return last_audio_source_.get(); } 159868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MockVideoSource* last_video_source() { return last_video_source_.get(); } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool mock_pc_factory_created_; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr <MockAudioSource> last_audio_source_; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr <MockVideoSource> last_video_source_; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockMediaStreamDependencyFactory); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_RENDERER_MEDIA_MOCK_MEDIA_STREAM_DEPENDENCY_FACTORY_H_ 172