| Index: components/devtools_bridge/session_dependency_factory.cc
|
| diff --git a/components/devtools_bridge/session_dependency_factory.cc b/components/devtools_bridge/session_dependency_factory.cc
|
| deleted file mode 100644
|
| index 2efa6416a5094eb05f0b2d451c4773becc8fd03c..0000000000000000000000000000000000000000
|
| --- a/components/devtools_bridge/session_dependency_factory.cc
|
| +++ /dev/null
|
| @@ -1,641 +0,0 @@
|
| -// 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 "components/devtools_bridge/session_dependency_factory.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/location.h"
|
| -#include "base/task_runner.h"
|
| -#include "base/threading/thread.h"
|
| -#include "components/devtools_bridge/abstract_data_channel.h"
|
| -#include "components/devtools_bridge/abstract_peer_connection.h"
|
| -#include "components/devtools_bridge/rtc_configuration.h"
|
| -#include "third_party/libjingle/source/talk/app/webrtc/mediaconstraintsinterface.h"
|
| -#include "third_party/libjingle/source/talk/app/webrtc/peerconnectioninterface.h"
|
| -#include "third_party/webrtc/base/bind.h"
|
| -#include "third_party/webrtc/base/messagehandler.h"
|
| -#include "third_party/webrtc/base/messagequeue.h"
|
| -#include "third_party/webrtc/base/ssladapter.h"
|
| -#include "third_party/webrtc/base/thread.h"
|
| -
|
| -namespace devtools_bridge {
|
| -
|
| -class RTCConfiguration::Impl
|
| - : public RTCConfiguration,
|
| - public webrtc::PeerConnectionInterface::RTCConfiguration {
|
| - public:
|
| - void AddIceServer(const std::string& uri,
|
| - const std::string& username,
|
| - const std::string& credential) override {
|
| - webrtc::PeerConnectionInterface::IceServer server;
|
| - server.uri = uri;
|
| - server.username = username;
|
| - server.password = credential;
|
| - servers.push_back(server);
|
| - }
|
| -
|
| - const Impl& impl() const override {
|
| - return *this;
|
| - }
|
| -
|
| - private:
|
| - webrtc::PeerConnectionInterface::RTCConfiguration base_;
|
| -};
|
| -
|
| -namespace {
|
| -
|
| -template <typename T>
|
| -void CheckedRelease(rtc::scoped_refptr<T>* ptr) {
|
| - CHECK_EQ(0, ptr->release()->Release());
|
| -}
|
| -
|
| -class MediaConstraints
|
| - : public webrtc::MediaConstraintsInterface {
|
| - public:
|
| - ~MediaConstraints() override {}
|
| -
|
| - const Constraints& GetMandatory() const override { return mandatory_; }
|
| -
|
| - const Constraints& GetOptional() const override { return optional_; }
|
| -
|
| - void AddMandatory(const std::string& key, const std::string& value) {
|
| - mandatory_.push_back(Constraint(key, value));
|
| - }
|
| -
|
| - private:
|
| - Constraints mandatory_;
|
| - Constraints optional_;
|
| -};
|
| -
|
| -/**
|
| - * Posts tasks on signaling thread. If stopped (when SesseionDependencyFactry
|
| - * is destroying) ignores posted tasks.
|
| - */
|
| -class SignalingThreadTaskRunner : public base::TaskRunner,
|
| - private rtc::MessageHandler {
|
| - public:
|
| - explicit SignalingThreadTaskRunner(rtc::Thread* thread) : thread_(thread) {}
|
| -
|
| - bool PostDelayedTask(const tracked_objects::Location& from_here,
|
| - const base::Closure& task,
|
| - base::TimeDelta delay) override {
|
| - DCHECK(delay.ToInternalValue() == 0);
|
| -
|
| - rtc::CritScope scope(&critical_section_);
|
| -
|
| - if (thread_)
|
| - thread_->Send(this, 0, new Task(task));
|
| -
|
| - return true;
|
| - }
|
| -
|
| - bool RunsTasksOnCurrentThread() const override {
|
| - rtc::CritScope scope(&critical_section_);
|
| -
|
| - return thread_ != NULL && thread_->IsCurrent();
|
| - }
|
| -
|
| - void Stop() {
|
| - rtc::CritScope scope(&critical_section_);
|
| - thread_ = NULL;
|
| - }
|
| -
|
| - private:
|
| - typedef rtc::TypedMessageData<base::Closure> Task;
|
| -
|
| - ~SignalingThreadTaskRunner() override {}
|
| -
|
| - void OnMessage(rtc::Message* msg) override {
|
| - static_cast<Task*>(msg->pdata)->data().Run();
|
| - }
|
| -
|
| - mutable rtc::CriticalSection critical_section_;
|
| - rtc::Thread* thread_; // Guarded by |critical_section_|.
|
| -};
|
| -
|
| -class DataChannelObserverImpl : public webrtc::DataChannelObserver {
|
| - public:
|
| - DataChannelObserverImpl(
|
| - webrtc::DataChannelInterface* data_channel,
|
| - scoped_ptr<AbstractDataChannel::Observer> observer)
|
| - : data_channel_(data_channel),
|
| - observer_(observer.Pass()) {
|
| - }
|
| -
|
| - void InitState() {
|
| - open_ = data_channel_->state() == webrtc::DataChannelInterface::kOpen;
|
| - }
|
| -
|
| - void OnStateChange() override {
|
| - bool open = data_channel_->state() == webrtc::DataChannelInterface::kOpen;
|
| -
|
| - if (open == open_) return;
|
| -
|
| - open_ = open;
|
| - if (open) {
|
| - observer_->OnOpen();
|
| - } else {
|
| - observer_->OnClose();
|
| - }
|
| - }
|
| -
|
| - void OnMessage(const webrtc::DataBuffer& buffer) override {
|
| - observer_->OnMessage(buffer.data.data(), buffer.size());
|
| - }
|
| -
|
| - private:
|
| - webrtc::DataChannelInterface* const data_channel_;
|
| - scoped_ptr<AbstractDataChannel::Observer> const observer_;
|
| - bool open_;
|
| -};
|
| -
|
| -/**
|
| - * Thread-safe view on AbstractDataChannel.
|
| - */
|
| -class DataChannelProxyImpl : public AbstractDataChannel::Proxy {
|
| - public:
|
| - DataChannelProxyImpl(
|
| - SessionDependencyFactory* factory,
|
| - rtc::scoped_refptr<webrtc::DataChannelInterface> data_channel)
|
| - : data_channel_(data_channel),
|
| - signaling_thread_task_runner_(
|
| - factory->signaling_thread_task_runner()) {
|
| - }
|
| -
|
| - void StopOnSignalingThread() {
|
| - data_channel_ = NULL;
|
| - }
|
| -
|
| - void SendBinaryMessage(const void* data, size_t length) override {
|
| - auto buffer = make_scoped_ptr(new webrtc::DataBuffer(rtc::Buffer(), true));
|
| - buffer->data.SetData(static_cast<const uint8_t*>(data), length);
|
| -
|
| - signaling_thread_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(
|
| - &DataChannelProxyImpl::SendMessageOnSignalingThread,
|
| - this,
|
| - base::Passed(&buffer)));
|
| - }
|
| -
|
| - void Close() override {
|
| - signaling_thread_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(&DataChannelProxyImpl::CloseOnSignalingThread,
|
| - this));
|
| - }
|
| -
|
| - private:
|
| -
|
| - ~DataChannelProxyImpl() override {}
|
| -
|
| - void SendMessageOnSignalingThread(scoped_ptr<webrtc::DataBuffer> message) {
|
| - if (data_channel_ != NULL)
|
| - data_channel_->Send(*message);
|
| - }
|
| -
|
| - void CloseOnSignalingThread() {
|
| - if (data_channel_ != NULL)
|
| - data_channel_->Close();
|
| - }
|
| -
|
| - // Accessed on signaling thread.
|
| - rtc::scoped_refptr<webrtc::DataChannelInterface> data_channel_;
|
| -
|
| - const scoped_refptr<base::TaskRunner> signaling_thread_task_runner_;
|
| -};
|
| -
|
| -class DataChannelImpl : public AbstractDataChannel {
|
| - public:
|
| - DataChannelImpl(
|
| - SessionDependencyFactory* factory,
|
| - rtc::Thread* const signaling_thread,
|
| - rtc::scoped_refptr<webrtc::DataChannelInterface> impl)
|
| - : factory_(factory),
|
| - signaling_thread_(signaling_thread),
|
| - impl_(impl) {
|
| - }
|
| -
|
| - ~DataChannelImpl() override {
|
| - if (proxy_.get()) {
|
| - signaling_thread_->Invoke<void>(rtc::Bind(
|
| - &DataChannelProxyImpl::StopOnSignalingThread, proxy_.get()));
|
| - }
|
| - }
|
| -
|
| - void RegisterObserver(scoped_ptr<Observer> observer) override {
|
| - observer_.reset(new DataChannelObserverImpl(impl_.get(), observer.Pass()));
|
| - signaling_thread_->Invoke<void>(rtc::Bind(
|
| - &DataChannelImpl::RegisterObserverOnSignalingThread, this));
|
| - }
|
| -
|
| - void UnregisterObserver() override {
|
| - DCHECK(observer_.get() != NULL);
|
| - impl_->UnregisterObserver();
|
| - observer_.reset();
|
| - }
|
| -
|
| - void SendBinaryMessage(void* data, size_t length) override {
|
| - SendMessage(data, length, true);
|
| - }
|
| -
|
| - void SendTextMessage(void* data, size_t length) override {
|
| - SendMessage(data, length, false);
|
| - }
|
| -
|
| - void SendMessage(void* data, size_t length, bool is_binary) {
|
| - impl_->Send(webrtc::DataBuffer(
|
| - rtc::Buffer(static_cast<uint8_t*>(data), length), is_binary));
|
| - }
|
| -
|
| - void Close() override {
|
| - impl_->Close();
|
| - }
|
| -
|
| - scoped_refptr<Proxy> proxy() override {
|
| - if (!proxy_.get())
|
| - proxy_ = new DataChannelProxyImpl(factory_, impl_);
|
| - return proxy_;
|
| - }
|
| -
|
| - private:
|
| - void RegisterObserverOnSignalingThread() {
|
| - // State initialization and observer registration happen atomically
|
| - // if done on the signaling thread (see rtc::Thread::Send).
|
| - observer_->InitState();
|
| - impl_->RegisterObserver(observer_.get());
|
| - }
|
| -
|
| - SessionDependencyFactory* const factory_;
|
| - scoped_refptr<DataChannelProxyImpl> proxy_;
|
| - rtc::Thread* const signaling_thread_;
|
| - scoped_ptr<DataChannelObserverImpl> observer_;
|
| - const rtc::scoped_refptr<webrtc::DataChannelInterface> impl_;
|
| -};
|
| -
|
| -class PeerConnectionObserverImpl
|
| - : public webrtc::PeerConnectionObserver {
|
| - public:
|
| - PeerConnectionObserverImpl(AbstractPeerConnection::Delegate* delegate)
|
| - : delegate_(delegate),
|
| - connected_(false) {
|
| - }
|
| -
|
| - void OnAddStream(webrtc::MediaStreamInterface* stream) override {}
|
| -
|
| - void OnRemoveStream(webrtc::MediaStreamInterface* stream) override {}
|
| -
|
| - void OnDataChannel(webrtc::DataChannelInterface* data_channel) override {}
|
| -
|
| - void OnRenegotiationNeeded() override {}
|
| -
|
| - void OnSignalingChange(
|
| - webrtc::PeerConnectionInterface::SignalingState new_state) override {}
|
| -
|
| - void OnIceConnectionChange(
|
| - webrtc::PeerConnectionInterface::IceConnectionState new_state) override {
|
| - bool connected =
|
| - new_state == webrtc::PeerConnectionInterface::kIceConnectionConnected ||
|
| - new_state == webrtc::PeerConnectionInterface::kIceConnectionCompleted;
|
| -
|
| - if (connected != connected_) {
|
| - connected_ = connected;
|
| - delegate_->OnIceConnectionChange(connected_);
|
| - }
|
| - }
|
| -
|
| - void OnIceCandidate(const webrtc::IceCandidateInterface* candidate) override {
|
| - std::string sdp;
|
| - candidate->ToString(&sdp);
|
| -
|
| - delegate_->OnIceCandidate(
|
| - candidate->sdp_mid(), candidate->sdp_mline_index(), sdp);
|
| - }
|
| -
|
| - private:
|
| - AbstractPeerConnection::Delegate* const delegate_;
|
| - bool connected_;
|
| -};
|
| -
|
| -/**
|
| - * Helper object which may outlive PeerConnectionImpl. Provides access
|
| - * to the connection and the delegate to operaion callback objects
|
| - * in a safe way. Always accessible on the signaling thread.
|
| - */
|
| -class PeerConnectionHolder : public rtc::RefCountInterface {
|
| - public:
|
| - PeerConnectionHolder(
|
| - rtc::Thread* signaling_thread,
|
| - webrtc::PeerConnectionInterface* connection,
|
| - AbstractPeerConnection::Delegate* delegate)
|
| - : signaling_thread_(signaling_thread),
|
| - connection_(connection),
|
| - delegate_(delegate),
|
| - disposed_(false) {
|
| - }
|
| -
|
| - ~PeerConnectionHolder() override { DCHECK(disposed_); }
|
| -
|
| - void Dispose() {
|
| - DCHECK(!IsDisposed());
|
| - disposed_ = true;
|
| - }
|
| -
|
| - webrtc::PeerConnectionInterface* connection() {
|
| - DCHECK(!IsDisposed());
|
| - return connection_;
|
| - }
|
| -
|
| - AbstractPeerConnection::Delegate* delegate() {
|
| - DCHECK(!IsDisposed());
|
| - return delegate_;
|
| - }
|
| -
|
| - bool IsDisposed() {
|
| - DCHECK(signaling_thread_->IsCurrent());
|
| - return disposed_;
|
| - }
|
| -
|
| - private:
|
| - rtc::Thread* const signaling_thread_;
|
| - webrtc::PeerConnectionInterface* const connection_;
|
| - AbstractPeerConnection::Delegate* const delegate_;
|
| - bool disposed_;
|
| -};
|
| -
|
| -class CreateAndSetHandler
|
| - : public webrtc::CreateSessionDescriptionObserver,
|
| - public webrtc::SetSessionDescriptionObserver {
|
| - public:
|
| - explicit CreateAndSetHandler(
|
| - rtc::scoped_refptr<PeerConnectionHolder> holder)
|
| - : holder_(holder) {
|
| - }
|
| -
|
| - void OnSuccess(webrtc::SessionDescriptionInterface* desc) override {
|
| - if (holder_->IsDisposed()) return;
|
| -
|
| - type_ = desc->type();
|
| - if (desc->ToString(&description_)) {
|
| - holder_->connection()->SetLocalDescription(this, desc);
|
| - } else {
|
| - OnFailure("Can't serialize session description");
|
| - }
|
| - }
|
| -
|
| - void OnSuccess() override {
|
| - if (holder_->IsDisposed()) return;
|
| -
|
| - if (type_ == webrtc::SessionDescriptionInterface::kOffer) {
|
| - holder_->delegate()->OnLocalOfferCreatedAndSetSet(description_);
|
| - } else {
|
| - DCHECK_EQ(webrtc::SessionDescriptionInterface::kAnswer, type_);
|
| -
|
| - holder_->delegate()->OnLocalAnswerCreatedAndSetSet(description_);
|
| - }
|
| - }
|
| -
|
| - void OnFailure(const std::string& error) override {
|
| - if (holder_->IsDisposed()) return;
|
| -
|
| - holder_->delegate()->OnFailure(error);
|
| - }
|
| -
|
| - private:
|
| - const rtc::scoped_refptr<PeerConnectionHolder> holder_;
|
| - std::string type_;
|
| - std::string description_;
|
| -};
|
| -
|
| -class SetRemoteDescriptionHandler
|
| - : public webrtc::SetSessionDescriptionObserver {
|
| - public:
|
| - SetRemoteDescriptionHandler(
|
| - rtc::scoped_refptr<PeerConnectionHolder> holder)
|
| - : holder_(holder) {
|
| - }
|
| -
|
| - void OnSuccess() override {
|
| - if (holder_->IsDisposed()) return;
|
| -
|
| - holder_->delegate()->OnRemoteDescriptionSet();
|
| - }
|
| -
|
| - void OnFailure(const std::string& error) override {
|
| - if (holder_->IsDisposed()) return;
|
| -
|
| - holder_->delegate()->OnFailure(error);
|
| - }
|
| -
|
| - private:
|
| - const rtc::scoped_refptr<PeerConnectionHolder> holder_;
|
| -};
|
| -
|
| -class PeerConnectionImpl : public AbstractPeerConnection {
|
| - public:
|
| - PeerConnectionImpl(
|
| - SessionDependencyFactory* const factory,
|
| - rtc::Thread* signaling_thread,
|
| - rtc::scoped_refptr<webrtc::PeerConnectionInterface> connection,
|
| - scoped_ptr<PeerConnectionObserverImpl> observer,
|
| - scoped_ptr<AbstractPeerConnection::Delegate> delegate)
|
| - : factory_(factory),
|
| - holder_(new rtc::RefCountedObject<PeerConnectionHolder>(
|
| - signaling_thread, connection.get(), delegate.get())),
|
| - signaling_thread_(signaling_thread),
|
| - connection_(connection),
|
| - observer_(observer.Pass()),
|
| - delegate_(delegate.Pass()) {
|
| - }
|
| -
|
| - ~PeerConnectionImpl() override {
|
| - signaling_thread_->Invoke<void>(rtc::Bind(
|
| - &PeerConnectionImpl::DisposeOnSignalingThread, this));
|
| - }
|
| -
|
| - void CreateAndSetLocalOffer() override {
|
| - connection_->CreateOffer(MakeCreateAndSetHandler(), NULL);
|
| - }
|
| -
|
| - void CreateAndSetLocalAnswer() override {
|
| - connection_->CreateAnswer(MakeCreateAndSetHandler(), NULL);
|
| - }
|
| -
|
| - void SetRemoteOffer(const std::string& description) override {
|
| - SetRemoteDescription(
|
| - webrtc::SessionDescriptionInterface::kOffer, description);
|
| - }
|
| -
|
| - void SetRemoteAnswer(const std::string& description) override {
|
| - SetRemoteDescription(
|
| - webrtc::SessionDescriptionInterface::kAnswer, description);
|
| - }
|
| -
|
| - void SetRemoteDescription(
|
| - const std::string& type, const std::string& description) {
|
| - webrtc::SdpParseError error;
|
| - scoped_ptr<webrtc::SessionDescriptionInterface> value(
|
| - webrtc::CreateSessionDescription(type, description, &error));
|
| - if (value == NULL) {
|
| - OnParseError(error);
|
| - return;
|
| - }
|
| - // Takes ownership on |value|.
|
| - connection_->SetRemoteDescription(
|
| - new rtc::RefCountedObject<SetRemoteDescriptionHandler>(holder_),
|
| - value.release());
|
| - }
|
| -
|
| - void AddIceCandidate(const std::string& sdp_mid,
|
| - int sdp_mline_index,
|
| - const std::string& sdp) override {
|
| - webrtc::SdpParseError error;
|
| - auto candidate = webrtc::CreateIceCandidate(
|
| - sdp_mid, sdp_mline_index, sdp, &error);
|
| - if (candidate == NULL) {
|
| - OnParseError(error);
|
| - return;
|
| - }
|
| - // Doesn't takes ownership.
|
| - connection_->AddIceCandidate(candidate);
|
| - delete candidate;
|
| - }
|
| -
|
| - scoped_ptr<AbstractDataChannel> CreateDataChannel(int channelId) override {
|
| - webrtc::DataChannelInit init;
|
| - init.ordered = true;
|
| - init.negotiated = true;
|
| - init.id = channelId;
|
| -
|
| - return make_scoped_ptr(new DataChannelImpl(
|
| - factory_,
|
| - signaling_thread_,
|
| - connection_->CreateDataChannel("", &init)));
|
| - }
|
| -
|
| - private:
|
| - webrtc::CreateSessionDescriptionObserver* MakeCreateAndSetHandler() {
|
| - return new rtc::RefCountedObject<CreateAndSetHandler>(holder_);
|
| - }
|
| -
|
| - void DisposeOnSignalingThread() {
|
| - DCHECK(signaling_thread_->IsCurrent());
|
| -
|
| - CheckedRelease(&connection_);
|
| - holder_->Dispose();
|
| - }
|
| -
|
| - void OnParseError(const webrtc::SdpParseError& error) {
|
| - // TODO(serya): Send on signaling thread.
|
| - }
|
| -
|
| - SessionDependencyFactory* const factory_;
|
| - const rtc::scoped_refptr<PeerConnectionHolder> holder_;
|
| - rtc::Thread* const signaling_thread_;
|
| - rtc::scoped_refptr<webrtc::PeerConnectionInterface> connection_;
|
| - const scoped_ptr<PeerConnectionObserverImpl> observer_;
|
| - const scoped_ptr<AbstractPeerConnection::Delegate> delegate_;
|
| -};
|
| -
|
| -class SessionDependencyFactoryImpl : public SessionDependencyFactory {
|
| - public:
|
| - SessionDependencyFactoryImpl(
|
| - const base::Closure& cleanup_on_signaling_thread)
|
| - : cleanup_on_signaling_thread_(cleanup_on_signaling_thread) {
|
| - signaling_thread_.SetName("signaling_thread", NULL);
|
| - signaling_thread_.Start();
|
| - worker_thread_.SetName("worker_thread", NULL);
|
| - worker_thread_.Start();
|
| -
|
| - factory_ = webrtc::CreatePeerConnectionFactory(
|
| - &worker_thread_, &signaling_thread_, NULL, NULL, NULL);
|
| - }
|
| -
|
| - ~SessionDependencyFactoryImpl() override {
|
| - if (signaling_thread_task_runner_.get())
|
| - signaling_thread_task_runner_->Stop();
|
| -
|
| - signaling_thread_.Invoke<void>(rtc::Bind(
|
| - &SessionDependencyFactoryImpl::DisposeOnSignalingThread, this));
|
| - }
|
| -
|
| - scoped_ptr<AbstractPeerConnection> CreatePeerConnection(
|
| - scoped_ptr<RTCConfiguration> config,
|
| - scoped_ptr<AbstractPeerConnection::Delegate> delegate) override {
|
| - auto observer = make_scoped_ptr(
|
| - new PeerConnectionObserverImpl(delegate.get()));
|
| -
|
| - MediaConstraints constraints;
|
| - constraints.AddMandatory(
|
| - MediaConstraints::kEnableDtlsSrtp, MediaConstraints::kValueTrue);
|
| -
|
| - auto connection = factory_->CreatePeerConnection(
|
| - config->impl(), &constraints, NULL, NULL, observer.get());
|
| -
|
| - return make_scoped_ptr(new PeerConnectionImpl(
|
| - this, &signaling_thread_, connection, observer.Pass(),
|
| - delegate.Pass()));
|
| - }
|
| -
|
| - scoped_refptr<base::TaskRunner> signaling_thread_task_runner() override {
|
| - if (!signaling_thread_task_runner_.get()) {
|
| - signaling_thread_task_runner_ =
|
| - new SignalingThreadTaskRunner(&signaling_thread_);
|
| - }
|
| - return signaling_thread_task_runner_;
|
| - }
|
| -
|
| - scoped_refptr<base::TaskRunner> io_thread_task_runner() override {
|
| - if (!io_thread_.get()) {
|
| - io_thread_.reset(new base::Thread("devtools bridge IO thread"));
|
| - base::Thread::Options options;
|
| - options.message_loop_type = base::MessageLoop::TYPE_IO;
|
| - CHECK(io_thread_->StartWithOptions(options));
|
| - }
|
| - return io_thread_->task_runner();
|
| - }
|
| -
|
| - private:
|
| - void DisposeOnSignalingThread() {
|
| - DCHECK(signaling_thread_.IsCurrent());
|
| - CheckedRelease(&factory_);
|
| - if (!cleanup_on_signaling_thread_.is_null())
|
| - cleanup_on_signaling_thread_.Run();
|
| - }
|
| -
|
| - scoped_ptr<base::Thread> io_thread_;
|
| - scoped_refptr<SignalingThreadTaskRunner> signaling_thread_task_runner_;
|
| - base::Closure cleanup_on_signaling_thread_;
|
| - rtc::Thread signaling_thread_;
|
| - rtc::Thread worker_thread_;
|
| - rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// RTCCOnfiguration
|
| -
|
| -// static
|
| -scoped_ptr<RTCConfiguration> RTCConfiguration::CreateInstance() {
|
| - return make_scoped_ptr(new RTCConfiguration::Impl());
|
| -}
|
| -
|
| -// SessionDependencyFactory
|
| -
|
| -// static
|
| -bool SessionDependencyFactory::InitializeSSL() {
|
| - return rtc::InitializeSSL();
|
| -}
|
| -
|
| -// static
|
| -bool SessionDependencyFactory::CleanupSSL() {
|
| - return rtc::CleanupSSL();
|
| -}
|
| -
|
| -// static
|
| -scoped_ptr<SessionDependencyFactory> SessionDependencyFactory::CreateInstance(
|
| - const base::Closure& cleanup_on_signaling_thread) {
|
| - return make_scoped_ptr(new SessionDependencyFactoryImpl(
|
| - cleanup_on_signaling_thread));
|
| -}
|
| -
|
| -} // namespace devtools_bridge
|
|
|