summaryrefslogtreecommitdiffstats
path: root/chromium/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc')
-rw-r--r--chromium/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc541
1 files changed, 541 insertions, 0 deletions
diff --git a/chromium/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc b/chromium/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc
new file mode 100644
index 00000000000..7048d935d45
--- /dev/null
+++ b/chromium/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc
@@ -0,0 +1,541 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
+
+#include "base/logging.h"
+#include "base/strings/utf_string_conversions.h"
+#include "content/renderer/media/mock_peer_connection_impl.h"
+#include "content/renderer/media/webaudio_capturer_source.h"
+#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
+#include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
+#include "content/renderer/media/webrtc_audio_capturer.h"
+#include "content/renderer/media/webrtc_local_audio_track.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
+#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
+#include "third_party/libjingle/source/talk/base/scoped_ref_ptr.h"
+#include "third_party/libjingle/source/talk/media/base/videocapturer.h"
+
+using webrtc::AudioSourceInterface;
+using webrtc::AudioTrackInterface;
+using webrtc::AudioTrackVector;
+using webrtc::IceCandidateCollection;
+using webrtc::IceCandidateInterface;
+using webrtc::MediaStreamInterface;
+using webrtc::ObserverInterface;
+using webrtc::SessionDescriptionInterface;
+using webrtc::VideoRendererInterface;
+using webrtc::VideoSourceInterface;
+using webrtc::VideoTrackInterface;
+using webrtc::VideoTrackVector;
+
+namespace content {
+
+template <class V>
+static typename V::iterator FindTrack(V* vector,
+ const std::string& track_id) {
+ typename V::iterator it = vector->begin();
+ for (; it != vector->end(); ++it) {
+ if ((*it)->id() == track_id) {
+ break;
+ }
+ }
+ return it;
+};
+
+MockMediaStream::MockMediaStream(const std::string& label) : label_(label) {}
+
+bool MockMediaStream::AddTrack(AudioTrackInterface* track) {
+ audio_track_vector_.push_back(track);
+ NotifyObservers();
+ return true;
+}
+
+bool MockMediaStream::AddTrack(VideoTrackInterface* track) {
+ video_track_vector_.push_back(track);
+ NotifyObservers();
+ return true;
+}
+
+bool MockMediaStream::RemoveTrack(AudioTrackInterface* track) {
+ AudioTrackVector::iterator it = FindTrack(&audio_track_vector_,
+ track->id());
+ if (it == audio_track_vector_.end())
+ return false;
+ audio_track_vector_.erase(it);
+ NotifyObservers();
+ return true;
+}
+
+bool MockMediaStream::RemoveTrack(VideoTrackInterface* track) {
+ VideoTrackVector::iterator it = FindTrack(&video_track_vector_,
+ track->id());
+ if (it == video_track_vector_.end())
+ return false;
+ video_track_vector_.erase(it);
+ NotifyObservers();
+ return true;
+}
+
+std::string MockMediaStream::label() const {
+ return label_;
+}
+
+AudioTrackVector MockMediaStream::GetAudioTracks() {
+ return audio_track_vector_;
+}
+
+VideoTrackVector MockMediaStream::GetVideoTracks() {
+ return video_track_vector_;
+}
+
+talk_base::scoped_refptr<AudioTrackInterface> MockMediaStream::FindAudioTrack(
+ const std::string& track_id) {
+ AudioTrackVector::iterator it = FindTrack(&audio_track_vector_, track_id);
+ return it == audio_track_vector_.end() ? NULL : *it;
+}
+
+talk_base::scoped_refptr<VideoTrackInterface> MockMediaStream::FindVideoTrack(
+ const std::string& track_id) {
+ VideoTrackVector::iterator it = FindTrack(&video_track_vector_, track_id);
+ return it == video_track_vector_.end() ? NULL : *it;
+}
+
+void MockMediaStream::RegisterObserver(ObserverInterface* observer) {
+ DCHECK(observers_.find(observer) == observers_.end());
+ observers_.insert(observer);
+}
+
+void MockMediaStream::UnregisterObserver(ObserverInterface* observer) {
+ ObserverSet::iterator it = observers_.find(observer);
+ DCHECK(it != observers_.end());
+ observers_.erase(it);
+}
+
+void MockMediaStream::NotifyObservers() {
+ for (ObserverSet::iterator it = observers_.begin(); it != observers_.end();
+ ++it) {
+ (*it)->OnChanged();
+ }
+}
+
+MockMediaStream::~MockMediaStream() {}
+
+class MockRtcVideoCapturer : public WebRtcVideoCapturerAdapter {
+ public:
+ explicit MockRtcVideoCapturer(bool is_screencast)
+ : WebRtcVideoCapturerAdapter(is_screencast),
+ number_of_capturered_frames_(0),
+ width_(0),
+ height_(0) {
+ }
+
+ virtual void OnFrameCaptured(
+ const scoped_refptr<media::VideoFrame>& frame) OVERRIDE {
+ ++number_of_capturered_frames_;
+ width_ = frame->visible_rect().width();
+ height_ = frame->visible_rect().height();
+ }
+
+ int GetLastFrameWidth() const {
+ return width_;
+ }
+
+ int GetLastFrameHeight() const {
+ return height_;
+ }
+
+ int GetFrameNum() const {
+ return number_of_capturered_frames_;
+ }
+
+ private:
+ int number_of_capturered_frames_;
+ int width_;
+ int height_;
+};
+
+MockVideoRenderer::MockVideoRenderer()
+ : width_(0),
+ height_(0),
+ num_(0) {}
+
+MockVideoRenderer::~MockVideoRenderer() {}
+
+bool MockVideoRenderer::SetSize(int width, int height, int reserved) {
+ width_ = width;
+ height_ = height;
+ return true;
+}
+
+bool MockVideoRenderer::RenderFrame(const cricket::VideoFrame* frame) {
+ ++num_;
+ return true;
+}
+
+MockAudioSource::MockAudioSource(
+ const webrtc::MediaConstraintsInterface* constraints)
+ : observer_(NULL),
+ state_(MediaSourceInterface::kLive),
+ optional_constraints_(constraints->GetOptional()),
+ mandatory_constraints_(constraints->GetMandatory()) {
+}
+
+MockAudioSource::~MockAudioSource() {}
+
+void MockAudioSource::RegisterObserver(webrtc::ObserverInterface* observer) {
+ observer_ = observer;
+}
+
+void MockAudioSource::UnregisterObserver(webrtc::ObserverInterface* observer) {
+ DCHECK(observer_ == observer);
+ observer_ = NULL;
+}
+
+webrtc::MediaSourceInterface::SourceState MockAudioSource::state() const {
+ return state_;
+}
+
+MockVideoSource::MockVideoSource()
+ : state_(MediaSourceInterface::kInitializing) {
+}
+
+MockVideoSource::~MockVideoSource() {}
+
+void MockVideoSource::SetVideoCapturer(cricket::VideoCapturer* capturer) {
+ capturer_.reset(capturer);
+}
+
+cricket::VideoCapturer* MockVideoSource::GetVideoCapturer() {
+ return capturer_.get();
+}
+
+void MockVideoSource::AddSink(cricket::VideoRenderer* output) {
+ NOTIMPLEMENTED();
+}
+
+void MockVideoSource::RemoveSink(cricket::VideoRenderer* output) {
+ NOTIMPLEMENTED();
+}
+
+cricket::VideoRenderer* MockVideoSource::FrameInput() {
+ return &renderer_;
+}
+
+void MockVideoSource::RegisterObserver(webrtc::ObserverInterface* observer) {
+ observers_.push_back(observer);
+}
+
+void MockVideoSource::UnregisterObserver(webrtc::ObserverInterface* observer) {
+ for (std::vector<ObserverInterface*>::iterator it = observers_.begin();
+ it != observers_.end(); ++it) {
+ if (*it == observer) {
+ observers_.erase(it);
+ break;
+ }
+ }
+}
+
+void MockVideoSource::FireOnChanged() {
+ std::vector<ObserverInterface*> observers(observers_);
+ for (std::vector<ObserverInterface*>::iterator it = observers.begin();
+ it != observers.end(); ++it) {
+ (*it)->OnChanged();
+ }
+}
+
+void MockVideoSource::SetLive() {
+ DCHECK(state_ == MediaSourceInterface::kInitializing ||
+ state_ == MediaSourceInterface::kLive);
+ state_ = MediaSourceInterface::kLive;
+ FireOnChanged();
+}
+
+void MockVideoSource::SetEnded() {
+ DCHECK_NE(MediaSourceInterface::kEnded, state_);
+ state_ = MediaSourceInterface::kEnded;
+ FireOnChanged();
+}
+
+webrtc::MediaSourceInterface::SourceState MockVideoSource::state() const {
+ return state_;
+}
+
+const cricket::VideoOptions* MockVideoSource::options() const {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
+int MockVideoSource::GetLastFrameWidth() const {
+ DCHECK(capturer_);
+ return
+ static_cast<MockRtcVideoCapturer*>(capturer_.get())->GetLastFrameWidth();
+}
+
+int MockVideoSource::GetLastFrameHeight() const {
+ DCHECK(capturer_);
+ return
+ static_cast<MockRtcVideoCapturer*>(capturer_.get())->GetLastFrameHeight();
+}
+
+int MockVideoSource::GetFrameNum() const {
+ DCHECK(capturer_);
+ return static_cast<MockRtcVideoCapturer*>(capturer_.get())->GetFrameNum();
+}
+
+MockWebRtcVideoTrack::MockWebRtcVideoTrack(
+ const std::string& id,
+ webrtc::VideoSourceInterface* source)
+ : enabled_(false),
+ id_(id),
+ state_(MediaStreamTrackInterface::kLive),
+ source_(source),
+ observer_(NULL),
+ renderer_(NULL) {
+}
+
+MockWebRtcVideoTrack::~MockWebRtcVideoTrack() {}
+
+void MockWebRtcVideoTrack::AddRenderer(VideoRendererInterface* renderer) {
+ DCHECK(!renderer_);
+ renderer_ = renderer;
+}
+
+void MockWebRtcVideoTrack::RemoveRenderer(VideoRendererInterface* renderer) {
+ DCHECK_EQ(renderer_, renderer);
+ renderer_ = NULL;
+}
+
+std::string MockWebRtcVideoTrack::kind() const {
+ NOTIMPLEMENTED();
+ return std::string();
+}
+
+std::string MockWebRtcVideoTrack::id() const { return id_; }
+
+bool MockWebRtcVideoTrack::enabled() const { return enabled_; }
+
+MockWebRtcVideoTrack::TrackState MockWebRtcVideoTrack::state() const {
+ return state_;
+}
+
+bool MockWebRtcVideoTrack::set_enabled(bool enable) {
+ enabled_ = enable;
+ return true;
+}
+
+bool MockWebRtcVideoTrack::set_state(TrackState new_state) {
+ state_ = new_state;
+ if (observer_)
+ observer_->OnChanged();
+ return true;
+}
+
+void MockWebRtcVideoTrack::RegisterObserver(ObserverInterface* observer) {
+ observer_ = observer;
+}
+
+void MockWebRtcVideoTrack::UnregisterObserver(ObserverInterface* observer) {
+ DCHECK(observer_ == observer);
+ observer_ = NULL;
+}
+
+VideoSourceInterface* MockWebRtcVideoTrack::GetSource() const {
+ return source_.get();
+}
+
+class MockSessionDescription : public SessionDescriptionInterface {
+ public:
+ MockSessionDescription(const std::string& type,
+ const std::string& sdp)
+ : type_(type),
+ sdp_(sdp) {
+ }
+ virtual ~MockSessionDescription() {}
+ virtual cricket::SessionDescription* description() OVERRIDE {
+ NOTIMPLEMENTED();
+ return NULL;
+ }
+ virtual const cricket::SessionDescription* description() const OVERRIDE {
+ NOTIMPLEMENTED();
+ return NULL;
+ }
+ virtual std::string session_id() const OVERRIDE {
+ NOTIMPLEMENTED();
+ return std::string();
+ }
+ virtual std::string session_version() const OVERRIDE {
+ NOTIMPLEMENTED();
+ return std::string();
+ }
+ virtual std::string type() const OVERRIDE {
+ return type_;
+ }
+ virtual bool AddCandidate(const IceCandidateInterface* candidate) OVERRIDE {
+ NOTIMPLEMENTED();
+ return false;
+ }
+ virtual size_t number_of_mediasections() const OVERRIDE {
+ NOTIMPLEMENTED();
+ return 0;
+ }
+ virtual const IceCandidateCollection* candidates(
+ size_t mediasection_index) const OVERRIDE {
+ NOTIMPLEMENTED();
+ return NULL;
+ }
+
+ virtual bool ToString(std::string* out) const OVERRIDE {
+ *out = sdp_;
+ return true;
+ }
+
+ private:
+ std::string type_;
+ std::string sdp_;
+};
+
+class MockIceCandidate : public IceCandidateInterface {
+ public:
+ MockIceCandidate(const std::string& sdp_mid,
+ int sdp_mline_index,
+ const std::string& sdp)
+ : sdp_mid_(sdp_mid),
+ sdp_mline_index_(sdp_mline_index),
+ sdp_(sdp) {
+ }
+ virtual ~MockIceCandidate() {}
+ virtual std::string sdp_mid() const OVERRIDE {
+ return sdp_mid_;
+ }
+ virtual int sdp_mline_index() const OVERRIDE {
+ return sdp_mline_index_;
+ }
+ virtual const cricket::Candidate& candidate() const OVERRIDE {
+ // This function should never be called. It will intentionally crash. The
+ // base class forces us to return a reference.
+ NOTREACHED();
+ cricket::Candidate* candidate = NULL;
+ return *candidate;
+ }
+ virtual bool ToString(std::string* out) const OVERRIDE {
+ *out = sdp_;
+ return true;
+ }
+
+ private:
+ std::string sdp_mid_;
+ int sdp_mline_index_;
+ std::string sdp_;
+};
+
+MockPeerConnectionDependencyFactory::MockPeerConnectionDependencyFactory()
+ : PeerConnectionDependencyFactory(NULL),
+ fail_to_create_next_audio_capturer_(false) {
+}
+
+MockPeerConnectionDependencyFactory::~MockPeerConnectionDependencyFactory() {}
+
+scoped_refptr<webrtc::PeerConnectionInterface>
+MockPeerConnectionDependencyFactory::CreatePeerConnection(
+ const webrtc::PeerConnectionInterface::IceServers& ice_servers,
+ const webrtc::MediaConstraintsInterface* constraints,
+ blink::WebFrame* frame,
+ webrtc::PeerConnectionObserver* observer) {
+ return new talk_base::RefCountedObject<MockPeerConnectionImpl>(this);
+}
+
+scoped_refptr<webrtc::AudioSourceInterface>
+MockPeerConnectionDependencyFactory::CreateLocalAudioSource(
+ const webrtc::MediaConstraintsInterface* constraints) {
+ last_audio_source_ =
+ new talk_base::RefCountedObject<MockAudioSource>(constraints);
+ return last_audio_source_;
+}
+
+WebRtcVideoCapturerAdapter*
+MockPeerConnectionDependencyFactory::CreateVideoCapturer(
+ bool is_screen_capture) {
+ return new MockRtcVideoCapturer(is_screen_capture);
+}
+
+scoped_refptr<webrtc::VideoSourceInterface>
+MockPeerConnectionDependencyFactory::CreateVideoSource(
+ cricket::VideoCapturer* capturer,
+ const blink::WebMediaConstraints& constraints) {
+ last_video_source_ = new talk_base::RefCountedObject<MockVideoSource>();
+ last_video_source_->SetVideoCapturer(capturer);
+ return last_video_source_;
+}
+
+scoped_refptr<WebAudioCapturerSource>
+MockPeerConnectionDependencyFactory::CreateWebAudioSource(
+ blink::WebMediaStreamSource* source) {
+ return NULL;
+}
+
+scoped_refptr<webrtc::MediaStreamInterface>
+MockPeerConnectionDependencyFactory::CreateLocalMediaStream(
+ const std::string& label) {
+ return new talk_base::RefCountedObject<MockMediaStream>(label);
+}
+
+scoped_refptr<webrtc::VideoTrackInterface>
+MockPeerConnectionDependencyFactory::CreateLocalVideoTrack(
+ const std::string& id,
+ webrtc::VideoSourceInterface* source) {
+ scoped_refptr<webrtc::VideoTrackInterface> track(
+ new talk_base::RefCountedObject<MockWebRtcVideoTrack>(
+ id, source));
+ return track;
+}
+
+scoped_refptr<webrtc::VideoTrackInterface>
+MockPeerConnectionDependencyFactory::CreateLocalVideoTrack(
+ const std::string& id,
+ cricket::VideoCapturer* capturer) {
+ scoped_refptr<MockVideoSource> source =
+ new talk_base::RefCountedObject<MockVideoSource>();
+ source->SetVideoCapturer(capturer);
+
+ return
+ new talk_base::RefCountedObject<MockWebRtcVideoTrack>(id, source.get());
+}
+
+SessionDescriptionInterface*
+MockPeerConnectionDependencyFactory::CreateSessionDescription(
+ const std::string& type,
+ const std::string& sdp,
+ webrtc::SdpParseError* error) {
+ return new MockSessionDescription(type, sdp);
+}
+
+webrtc::IceCandidateInterface*
+MockPeerConnectionDependencyFactory::CreateIceCandidate(
+ const std::string& sdp_mid,
+ int sdp_mline_index,
+ const std::string& sdp) {
+ return new MockIceCandidate(sdp_mid, sdp_mline_index, sdp);
+}
+
+scoped_refptr<WebRtcAudioCapturer>
+MockPeerConnectionDependencyFactory::CreateAudioCapturer(
+ int render_view_id, const StreamDeviceInfo& device_info,
+ const blink::WebMediaConstraints& constraints,
+ MediaStreamAudioSource* audio_source) {
+ if (fail_to_create_next_audio_capturer_) {
+ fail_to_create_next_audio_capturer_ = false;
+ return NULL;
+ }
+ DCHECK(audio_source);
+ return WebRtcAudioCapturer::CreateCapturer(-1, device_info,
+ constraints, NULL, audio_source);
+}
+
+void MockPeerConnectionDependencyFactory::StartLocalAudioTrack(
+ WebRtcLocalAudioTrack* audio_track) {
+ audio_track->Start();
+}
+
+} // namespace content