Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Unified Diff: components/devtools_bridge/session_dependency_factory.cc

Issue 1142463003: Remove devtools_bridge component (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « components/devtools_bridge/session_dependency_factory.h ('k') | components/devtools_bridge/socket_tunnel_connection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698