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

Unified Diff: sky/framework/inspector/server/inspector_frontend_impl.cc

Issue 687673003: Add beginnings of an inspector backend for Sky (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « sky/framework/inspector/server/inspector_frontend_impl.h ('k') | sky/framework/inspector/server/server.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/framework/inspector/server/inspector_frontend_impl.cc
diff --git a/sky/framework/inspector/server/inspector_frontend_impl.cc b/sky/framework/inspector/server/inspector_frontend_impl.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0865e91b9e3961dffeb14a2c9ca5c91d0a849248
--- /dev/null
+++ b/sky/framework/inspector/server/inspector_frontend_impl.cc
@@ -0,0 +1,97 @@
+// 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 "sky/framework/inspector/server/inspector_frontend_impl.h"
+
+#include "base/lazy_instance.h"
+#include "net/server/http_server.h"
+#include "net/socket/tcp_server_socket.h"
+
+namespace sky {
+namespace inspector {
+namespace {
+const int kNotConnected = -1;
+static base::LazyInstance<std::map<int, InspectorFronendImpl*>> g_servers =
+ LAZY_INSTANCE_INITIALIZER;
+}
+
+InspectorFronendImpl::InspectorFronendImpl()
+ : connection_id_(kNotConnected) {
+}
+
+InspectorFronendImpl::~InspectorFronendImpl() {
+ StopListening();
+}
+
+void InspectorFronendImpl::OnConnect(int connection_id) {
+}
+
+void InspectorFronendImpl::OnHttpRequest(
+ int connection_id, const net::HttpServerRequestInfo& info) {
+ web_server_->Send500(connection_id, "websockets protocol only");
+}
+
+void InspectorFronendImpl::OnWebSocketRequest(
+ int connection_id, const net::HttpServerRequestInfo& info) {
+ if (connection_id_ != kNotConnected) {
+ web_server_->Close(connection_id);
+ return;
+ }
+ web_server_->AcceptWebSocket(connection_id, info);
+ connection_id_ = connection_id;
+ client()->OnConnect();
+}
+
+void InspectorFronendImpl::OnWebSocketMessage(
+ int connection_id, const std::string& data) {
+ DCHECK_EQ(connection_id, connection_id_);
+ client()->OnMessage(data);
+}
+
+void InspectorFronendImpl::OnClose(int connection_id) {
+ if (connection_id != connection_id_)
+ return;
+ connection_id_ = kNotConnected;
+ client()->OnDisconnect();
+}
+
+void InspectorFronendImpl::Listen(int32_t port) {
+ Register(port);
+ scoped_ptr<net::ServerSocket> server_socket(
+ new net::TCPServerSocket(NULL, net::NetLog::Source()));
+ server_socket->ListenWithAddressAndPort("0.0.0.0", port, 1);
+ web_server_.reset(new net::HttpServer(server_socket.Pass(), this));
+}
+
+void InspectorFronendImpl::StopListening() {
+ if (!web_server_)
+ return;
+ web_server_.reset();
+ Unregister();
+}
+
+void InspectorFronendImpl::Register(int port) {
+ auto& servers = g_servers.Get();
+ auto iter = servers.find(port);
+ if (iter != servers.end())
+ iter->second->StopListening();
+ DCHECK(servers.find(port) == servers.end());
+ servers[port] = this;
+ port_ = port;
+}
+
+void InspectorFronendImpl::Unregister() {
+ DCHECK(g_servers.Get().find(port_)->second == this);
+ g_servers.Get().erase(port_);
+ port_ = kNotConnected;
+}
+
+void InspectorFronendImpl::SendMessage(const mojo::String& message) {
+ if (connection_id_ == kNotConnected)
+ return;
+ web_server_->SendOverWebSocket(connection_id_, message);
+}
+
+} // namespace inspector
+} // namespace sky
« no previous file with comments | « sky/framework/inspector/server/inspector_frontend_impl.h ('k') | sky/framework/inspector/server/server.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698