// 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. #ifndef MOJO_SPY_WEBSOCKET_SERVER_H_ #define MOJO_SPY_WEBSOCKET_SERVER_H_ #include #include "base/macros.h" #include "mojo/spy/common.h" #include "mojo/spy/public/spy.mojom.h" #include "net/server/http_server.h" namespace base { class Time; }; class GURL; namespace mojo { class WebSocketServer : public net::HttpServer::Delegate, public spy_api::SpyClient { public: // Pass 0 in |port| to listen in one available port. explicit WebSocketServer(int port, ScopedMessagePipeHandle server_pipe); ~WebSocketServer() override; // Begin accepting HTTP requests. Must be called from an IO MessageLoop. bool Start(); // Returns the listening port, useful if 0 was passed to the contructor. int port() const { return port_; } // Maintains a log of the message passed in. void LogMessageInfo( const mojo::MojoRequestHeader& message_header, const GURL& url, const base::Time& message_time); protected: // Overridden from net::HttpServer::Delegate. void OnConnect(int connection_id) override {} void OnHttpRequest(int connection_id, const net::HttpServerRequestInfo& info) override; void OnWebSocketRequest(int connection_id, const net::HttpServerRequestInfo& info) override; void OnWebSocketMessage(int connection_id, const std::string& data) override; void OnClose(int connection_id) override; // Overriden form spy_api::SpyClient. void OnFatalError(spy_api::Result result) override; void OnSessionEnd(spy_api::Result result) override; void OnClientConnection(const mojo::String& name, uint32_t id, spy_api::ConnectionOptions options) override; void OnMessage(spy_api::MessagePtr message) override; // Callbacks from calling spy_api::SpyServer. void OnStartSession(spy_api::Result, mojo::String); bool Connected() const; private: int port_; int connection_id_; scoped_ptr web_server_; spy_api::SpyServerPtr spy_server_; DISALLOW_COPY_AND_ASSIGN(WebSocketServer); }; } // namespace mojo #endif // MOJO_SPY_WEBSOCKET_SERVER_H_