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

Unified Diff: components/devtools_bridge/socket_tunnel_server.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/socket_tunnel_server.cc
diff --git a/components/devtools_bridge/socket_tunnel_server.cc b/components/devtools_bridge/socket_tunnel_server.cc
deleted file mode 100644
index afa07a25cdaec4ce471013b0ea292d3e999edc1f..0000000000000000000000000000000000000000
--- a/components/devtools_bridge/socket_tunnel_server.cc
+++ /dev/null
@@ -1,266 +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/socket_tunnel_server.h"
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "components/devtools_bridge/abstract_data_channel.h"
-#include "components/devtools_bridge/session_dependency_factory.h"
-#include "components/devtools_bridge/socket_tunnel_connection.h"
-#include "components/devtools_bridge/socket_tunnel_packet_handler.h"
-#include "net/base/io_buffer.h"
-#include "net/base/net_errors.h"
-#include "net/socket/unix_domain_client_socket_posix.h"
-
-namespace devtools_bridge {
-
-class SocketTunnelServer::Connection : public SocketTunnelConnection {
- public:
- class Delegate {
- public:
- virtual void RemoveConnection(int index) = 0;
- virtual void SendPacket(
- const void* data, size_t length) = 0;
- };
-
- Connection(Delegate* delegate, int index, const std::string& socket_name)
- : SocketTunnelConnection(index),
- delegate_(delegate),
- socket_(socket_name, true) {
- }
-
- void Connect() {
- int result = socket()->Connect(base::Bind(
- &Connection::OnConnectionComplete, base::Unretained(this)));
- if (result != net::ERR_IO_PENDING)
- OnConnectionComplete(result);
- }
-
- void ClosedByClient() {
- if (socket()->IsConnected()) {
- socket()->Disconnect();
- SendControlPacket(SERVER_CLOSE);
- }
- delegate_->RemoveConnection(index_);
- }
-
- protected:
- net::StreamSocket* socket() override {
- return &socket_;
- }
-
- void OnDataPacketRead(const void* data, size_t length) override {
- delegate_->SendPacket(data, length);
- ReadNextChunk();
- }
-
- void OnReadError(int error) override {
- socket()->Disconnect();
- SendControlPacket(SERVER_CLOSE);
- delegate_->RemoveConnection(index_);
- delegate_ = NULL;
- }
-
- private:
- void OnConnectionComplete(int result) {
- if (result == net::OK) {
- SendControlPacket(SERVER_OPEN_ACK);
- ReadNextChunk();
- } else {
- SendControlPacket(SERVER_CLOSE);
- delegate_->RemoveConnection(index_);
- delegate_ = NULL;
- }
- }
-
- void SendControlPacket(ServerOpCode op_code) {
- char buffer[kControlPacketSizeBytes];
- BuildControlPacket(buffer, op_code);
- delegate_->SendPacket(buffer, kControlPacketSizeBytes);
- }
-
- Delegate* delegate_;
- net::UnixDomainClientSocket socket_;
-};
-
-/**
- * Lives on the IO thread.
- */
-class SocketTunnelServer::ConnectionController
- : private Connection::Delegate {
- public:
- ConnectionController(
- scoped_refptr<base::TaskRunner> io_task_runner,
- scoped_refptr<AbstractDataChannel::Proxy> data_channel,
- const std::string& socket_name)
- : io_task_runner_(io_task_runner),
- data_channel_(data_channel),
- socket_name_(socket_name) {
- DCHECK(data_channel_.get());
- }
-
- void HandleControlPacket(int connection_index, int op_code) {
- DCHECK(connection_index < kMaxConnectionCount);
- switch (op_code) {
- case SocketTunnelConnection::CLIENT_OPEN:
- if (connections_[connection_index].get() != NULL) {
- DLOG(ERROR) << "Opening connection which already open: "
- << connection_index;
- HandleProtocolError();
- return;
- }
- connections_[connection_index].reset(
- new Connection(this, connection_index, socket_name_));
- connections_[connection_index]->Connect();
- break;
-
- case SocketTunnelConnection::CLIENT_CLOSE:
- if (connections_[connection_index].get() == NULL) {
- // Ignore. Client may close the connection before received
- // notification from the server.
- return;
- }
- connections_[connection_index]->ClosedByClient();
- break;
-
- default:
- DLOG(ERROR) << "Invalid op_code: " << op_code;
- HandleProtocolError();
- return;
- }
- }
-
- void HandleDataPacket(int connection_index,
- scoped_refptr<net::IOBufferWithSize> packet) {
- Connection* connection = connections_[connection_index].get();
- if (connection != NULL)
- connection->Write(packet);
- }
-
- void HandleProtocolError() {
- data_channel_->Close();
- }
-
- void CloseAllConnections() {
- for (int i = 0; i < kMaxConnectionCount; i++) {
- connections_[i].reset();
- }
- }
-
- private:
- static void DeleteConnectionImpl(Connection*) {}
-
- // Connection::Delegate implementation
- void RemoveConnection(int connection_index) override {
- // Remove immediately, delete later to preserve this of the caller.
- Connection* connection = connections_[connection_index].release();
- io_task_runner_->PostTask(
- FROM_HERE, base::Bind(&ConnectionController::DeleteConnectionImpl,
- base::Owned(connection)));
- }
-
- void SendPacket(const void* data, size_t length) override {
- data_channel_->SendBinaryMessage(data, length);
- }
-
- static const int kMaxConnectionCount =
- SocketTunnelConnection::kMaxConnectionCount;
-
- scoped_refptr<base::TaskRunner> io_task_runner_;
- scoped_refptr<AbstractDataChannel::Proxy> data_channel_;
- scoped_ptr<Connection> connections_[kMaxConnectionCount];
- const std::string socket_name_;
-};
-
-class SocketTunnelServer::DataChannelObserver
- : public AbstractDataChannel::Observer,
- private SocketTunnelPacketHandler {
- public:
- DataChannelObserver(scoped_refptr<base::TaskRunner> io_task_runner,
- scoped_ptr<ConnectionController> controller)
- : io_task_runner_(io_task_runner),
- controller_(controller.Pass()) {
- }
-
- ~DataChannelObserver() override {
- // Deleting on IO thread allows post tasks with base::Unretained
- // because all of them will be processed before deletion.
- io_task_runner_->PostTask(
- FROM_HERE, base::Bind(&DataChannelObserver::DeleteControllerOnIOThread,
- base::Passed(&controller_)));
- }
-
- void OnOpen() override {
- // Nothing to do. Activity could only be initiated by a control packet.
- }
-
- void OnClose() override {
- io_task_runner_->PostTask(
- FROM_HERE, base::Bind(
- &ConnectionController::CloseAllConnections,
- base::Unretained(controller_.get())));
- }
-
- void OnMessage(const void* data, size_t length) override {
- DecodePacket(data, length);
- }
-
- private:
- static void DeleteControllerOnIOThread(
- scoped_ptr<ConnectionController> controller) {}
-
- // SocketTunnelPacketHandler implementation.
-
- void HandleControlPacket(int connection_index, int op_code) override {
- io_task_runner_->PostTask(
- FROM_HERE, base::Bind(
- &ConnectionController::HandleControlPacket,
- base::Unretained(controller_.get()),
- connection_index,
- op_code));
- }
-
- void HandleDataPacket(int connection_index,
- scoped_refptr<net::IOBufferWithSize> data) override {
- io_task_runner_->PostTask(
- FROM_HERE, base::Bind(
- &ConnectionController::HandleDataPacket,
- base::Unretained(controller_.get()),
- connection_index,
- data));
- }
-
- void HandleProtocolError() override {
- io_task_runner_->PostTask(
- FROM_HERE, base::Bind(
- &ConnectionController::HandleProtocolError,
- base::Unretained(controller_.get())));
- }
-
- const scoped_refptr<base::TaskRunner> io_task_runner_;
- scoped_ptr<ConnectionController> controller_;
-};
-
-SocketTunnelServer::SocketTunnelServer(SessionDependencyFactory* factory,
- AbstractDataChannel* data_channel,
- const std::string& socket_name)
- : data_channel_(data_channel) {
- scoped_ptr<ConnectionController> controller(
- new ConnectionController(factory->io_thread_task_runner(),
- data_channel->proxy(),
- socket_name));
-
- scoped_ptr<DataChannelObserver> data_channel_observer(
- new DataChannelObserver(factory->io_thread_task_runner(),
- controller.Pass()));
-
- data_channel_->RegisterObserver(data_channel_observer.Pass());
-}
-
-SocketTunnelServer::~SocketTunnelServer() {
- data_channel_->UnregisterObserver();
-}
-
-} // namespace devtools_bridge
« no previous file with comments | « components/devtools_bridge/socket_tunnel_server.h ('k') | components/devtools_bridge/test/android/javatests/jni/jni_onload.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698