blob: 459f142d8148fd8bf173a38c9acdb49c057f4c61 [file] [log] [blame]
// Copyright (c) 2012 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/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/mock_peer_connection_impl.h"
#include <vector>
#include "base/logging.h"
using webrtc::CreateSessionDescriptionObserver;
using webrtc::IceCandidateInterface;
using webrtc::LocalMediaStreamInterface;
using webrtc::MediaConstraintsInterface;
using webrtc::MediaStreamInterface;
using webrtc::PeerConnectionInterface;
using webrtc::SessionDescriptionInterface;
using webrtc::SetSessionDescriptionObserver;
namespace content {
class MockStreamCollection : public webrtc::StreamCollectionInterface {
public:
virtual size_t count() OVERRIDE {
return streams_.size();
}
virtual MediaStreamInterface* at(size_t index) OVERRIDE {
return streams_[index];
}
virtual MediaStreamInterface* find(const std::string& label) OVERRIDE {
for (size_t i = 0; i < streams_.size(); ++i) {
if (streams_[i]->label() == label)
return streams_[i];
}
return NULL;
}
void AddStream(MediaStreamInterface* stream) {
streams_.push_back(stream);
}
void RemoveStream(MediaStreamInterface* stream) {
StreamVector::iterator it = streams_.begin();
for (; it != streams_.end(); ++it) {
if (it->get() == stream) {
streams_.erase(it);
break;
}
}
}
protected:
virtual ~MockStreamCollection() {}
private:
typedef std::vector<talk_base::scoped_refptr<MediaStreamInterface> >
StreamVector;
StreamVector streams_;
};
const char MockPeerConnectionImpl::kDummyOffer[] = "dummy offer";
const char MockPeerConnectionImpl::kDummyAnswer[] = "dummy answer";
MockPeerConnectionImpl::MockPeerConnectionImpl(
MockMediaStreamDependencyFactory* factory)
: dependency_factory_(factory),
local_streams_(new talk_base::RefCountedObject<MockStreamCollection>),
remote_streams_(new talk_base::RefCountedObject<MockStreamCollection>),
hint_audio_(false),
hint_video_(false),
action_(kAnswer),
ice_options_(kOnlyRelay),
sdp_mline_index_(-1),
ready_state_(kNew),
ice_state_(kIceNew) {
}
MockPeerConnectionImpl::~MockPeerConnectionImpl() {}
talk_base::scoped_refptr<webrtc::StreamCollectionInterface>
MockPeerConnectionImpl::local_streams() {
return local_streams_;
}
talk_base::scoped_refptr<webrtc::StreamCollectionInterface>
MockPeerConnectionImpl::remote_streams() {
return remote_streams_;
}
bool MockPeerConnectionImpl::AddStream(
MediaStreamInterface* local_stream,
const MediaConstraintsInterface* constraints) {
DCHECK(stream_label_.empty());
stream_label_ = local_stream->label();
local_streams_->AddStream(local_stream);
return true;
}
bool MockPeerConnectionImpl::CanSendDtmf(
const webrtc::AudioTrackInterface* track) {
NOTIMPLEMENTED();
return false;
}
bool MockPeerConnectionImpl::SendDtmf(
const webrtc::AudioTrackInterface* send_track,
const std::string& tones, int duration,
const webrtc::AudioTrackInterface* play_track) {
NOTIMPLEMENTED();
return false;
}
void MockPeerConnectionImpl::RemoveStream(
MediaStreamInterface* local_stream) {
DCHECK_EQ(stream_label_, local_stream->label());
stream_label_.clear();
local_streams_->RemoveStream(local_stream);
}
MockPeerConnectionImpl::ReadyState MockPeerConnectionImpl::ready_state() {
return ready_state_;
}
bool MockPeerConnectionImpl::StartIce(IceOptions options) {
ice_options_ = options;
return true;
}
webrtc::SessionDescriptionInterface* MockPeerConnectionImpl::CreateOffer(
const webrtc::MediaHints& hints) {
hint_audio_ = hints.has_audio();
hint_video_ = hints.has_video();
return dependency_factory_->CreateSessionDescription(kDummyOffer);
}
webrtc::SessionDescriptionInterface* MockPeerConnectionImpl::CreateAnswer(
const webrtc::MediaHints& hints,
const webrtc::SessionDescriptionInterface* offer) {
hint_audio_ = hints.has_audio();
hint_video_ = hints.has_video();
offer->ToString(&description_sdp_);
return dependency_factory_->CreateSessionDescription(description_sdp_);
}
bool MockPeerConnectionImpl::SetLocalDescription(
Action action,
webrtc::SessionDescriptionInterface* desc) {
action_ = action;
local_desc_.reset(desc);
return desc->ToString(&description_sdp_);
}
bool MockPeerConnectionImpl::SetRemoteDescription(
Action action,
webrtc::SessionDescriptionInterface* desc) {
action_ = action;
remote_desc_.reset(desc);
return desc->ToString(&description_sdp_);
}
bool MockPeerConnectionImpl::ProcessIceMessage(
const webrtc::IceCandidateInterface* ice_candidate) {
return AddIceCandidate(ice_candidate);
}
const webrtc::SessionDescriptionInterface*
MockPeerConnectionImpl::local_description() const {
return local_desc_.get();
}
const webrtc::SessionDescriptionInterface*
MockPeerConnectionImpl::remote_description() const {
return remote_desc_.get();
}
void MockPeerConnectionImpl::AddRemoteStream(MediaStreamInterface* stream) {
remote_streams_->AddStream(stream);
}
void MockPeerConnectionImpl::CreateOffer(
CreateSessionDescriptionObserver* observer,
const MediaConstraintsInterface* constraints) {
DCHECK(observer);
created_sessiondescription_.reset(
dependency_factory_->CreateSessionDescription(kDummyOffer));
}
void MockPeerConnectionImpl::CreateAnswer(
CreateSessionDescriptionObserver* observer,
const MediaConstraintsInterface* constraints) {
DCHECK(observer);
created_sessiondescription_.reset(
dependency_factory_->CreateSessionDescription(kDummyAnswer));
}
void MockPeerConnectionImpl::SetLocalDescription(
SetSessionDescriptionObserver* observer,
SessionDescriptionInterface* desc) {
desc->ToString(&description_sdp_);
local_desc_.reset(desc);
}
void MockPeerConnectionImpl::SetRemoteDescription(
SetSessionDescriptionObserver* observer,
SessionDescriptionInterface* desc) {
desc->ToString(&description_sdp_);
remote_desc_.reset(desc);
}
bool MockPeerConnectionImpl::UpdateIce(
const IceServers& configuration,
const MediaConstraintsInterface* constraints) {
return true;
}
bool MockPeerConnectionImpl::AddIceCandidate(
const IceCandidateInterface* candidate) {
sdp_mid_ = candidate->sdp_mid();
sdp_mline_index_ = candidate->sdp_mline_index();
return candidate->ToString(&ice_sdp_);
}
PeerConnectionInterface::IceState MockPeerConnectionImpl::ice_state() {
return ice_state_;
}
} // namespace content