Home | History | Annotate | Download | only in webrtc
      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.
      4 
      5 #ifndef CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
      6 #define CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
      7 
      8 #include <set>
      9 #include <string>
     10 #include <vector>
     11 
     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"
     16 
     17 namespace content {
     18 
     19 class WebAudioCapturerSource;
     20 
     21 class MockVideoRenderer : public cricket::VideoRenderer {
     22  public:
     23   MockVideoRenderer();
     24   virtual ~MockVideoRenderer();
     25   virtual bool SetSize(int width, int height, int reserved) OVERRIDE;
     26   virtual bool RenderFrame(const cricket::VideoFrame* frame) OVERRIDE;
     27 
     28   int width() const { return width_; }
     29   int height() const { return height_; }
     30   int num() const { return num_; }
     31 
     32  private:
     33   int width_;
     34   int height_;
     35   int num_;
     36 };
     37 
     38 class MockVideoSource : public webrtc::VideoSourceInterface {
     39  public:
     40   MockVideoSource();
     41 
     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;
     50 
     51   // Changes the state of the source to live and notifies the observer.
     52   void SetLive();
     53   // Changes the state of the source to ended and notifies the observer.
     54   void SetEnded();
     55   // Set the video capturer.
     56   void SetVideoCapturer(cricket::VideoCapturer* capturer);
     57 
     58   // Test helpers.
     59   int GetLastFrameWidth() const;
     60   int GetLastFrameHeight() const;
     61   int GetFrameNum() const;
     62 
     63  protected:
     64   virtual ~MockVideoSource();
     65 
     66  private:
     67   void FireOnChanged();
     68 
     69   std::vector<webrtc::ObserverInterface*> observers_;
     70   MediaSourceInterface::SourceState state_;
     71   scoped_ptr<cricket::VideoCapturer> capturer_;
     72   MockVideoRenderer renderer_;
     73 };
     74 
     75 class MockAudioSource : public webrtc::AudioSourceInterface {
     76  public:
     77   explicit MockAudioSource(
     78       const webrtc::MediaConstraintsInterface* constraints);
     79 
     80   virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
     81   virtual void UnregisterObserver(webrtc::ObserverInterface* observer) OVERRIDE;
     82   virtual MediaSourceInterface::SourceState state() const OVERRIDE;
     83 
     84   // Changes the state of the source to live and notifies the observer.
     85   void SetLive();
     86   // Changes the state of the source to ended and notifies the observer.
     87   void SetEnded();
     88 
     89   const webrtc::MediaConstraintsInterface::Constraints& optional_constraints() {
     90     return optional_constraints_;
     91   }
     92 
     93   const webrtc::MediaConstraintsInterface::Constraints&
     94   mandatory_constraints() {
     95     return mandatory_constraints_;
     96   }
     97 
     98  protected:
     99   virtual ~MockAudioSource();
    100 
    101  private:
    102   webrtc::ObserverInterface* observer_;
    103   MediaSourceInterface::SourceState state_;
    104   webrtc::MediaConstraintsInterface::Constraints optional_constraints_;
    105   webrtc::MediaConstraintsInterface::Constraints mandatory_constraints_;
    106 };
    107 
    108 class MockWebRtcVideoTrack : public webrtc::VideoTrackInterface {
    109  public:
    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;
    124 
    125  protected:
    126   virtual ~MockWebRtcVideoTrack();
    127 
    128  private:
    129   bool enabled_;
    130   std::string id_;
    131   TrackState state_;
    132   scoped_refptr<webrtc::VideoSourceInterface> source_;
    133   webrtc::ObserverInterface* observer_;
    134   webrtc::VideoRendererInterface* renderer_;
    135 };
    136 
    137 class MockMediaStream : public webrtc::MediaStreamInterface {
    138  public:
    139   explicit MockMediaStream(const std::string& label);
    140 
    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 talk_base::scoped_refptr<webrtc::AudioTrackInterface>
    149       FindAudioTrack(const std::string& track_id) OVERRIDE;
    150   virtual talk_base::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;
    154 
    155  protected:
    156   virtual ~MockMediaStream();
    157 
    158  private:
    159   void NotifyObservers();
    160 
    161   std::string label_;
    162   webrtc::AudioTrackVector audio_track_vector_;
    163   webrtc::VideoTrackVector video_track_vector_;
    164 
    165   typedef std::set<webrtc::ObserverInterface*> ObserverSet;
    166   ObserverSet observers_;
    167 };
    168 
    169 // A mock factory for creating different objects for
    170 // RTC PeerConnections.
    171 class MockPeerConnectionDependencyFactory
    172      : public PeerConnectionDependencyFactory {
    173  public:
    174   MockPeerConnectionDependencyFactory();
    175   virtual ~MockPeerConnectionDependencyFactory();
    176 
    177   virtual scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(
    178       const webrtc::PeerConnectionInterface::IceServers& ice_servers,
    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>
    188       CreateVideoSource(
    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,
    207       int sdp_mline_index,
    208       const std::string& sdp) OVERRIDE;
    209 
    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;
    216   }
    217 
    218   virtual void StartLocalAudioTrack(
    219       WebRtcLocalAudioTrack* audio_track) OVERRIDE;
    220 
    221   MockAudioSource* last_audio_source() { return last_audio_source_.get(); }
    222   MockVideoSource* last_video_source() { return last_video_source_.get(); }
    223 
    224  private:
    225   bool fail_to_create_next_audio_capturer_;
    226   scoped_refptr <MockAudioSource> last_audio_source_;
    227   scoped_refptr <MockVideoSource> last_video_source_;
    228 
    229   DISALLOW_COPY_AND_ASSIGN(MockPeerConnectionDependencyFactory);
    230 };
    231 
    232 }  // namespace content
    233 
    234 #endif  // CONTENT_RENDERER_MEDIA_WEBRTC_MOCK_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
    235