mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 1 | // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef COMPONENTS_UI_DEVTOOLS_DEVTOOLS_SERVER_H_ |
| 6 | #define COMPONENTS_UI_DEVTOOLS_DEVTOOLS_SERVER_H_ |
| 7 | |
| 8 | #include <vector> |
| 9 | |
mhashmi | 6d1b1cb2 | 2016-11-22 16:04:24 | [diff] [blame] | 10 | #include "base/compiler_specific.h" |
Lily Houghton | 7f7b2fb | 2018-05-01 21:40:46 | [diff] [blame] | 11 | #include "base/memory/weak_ptr.h" |
Gabriel Charette | 5ff87ce | 2017-05-16 18:03:45 | [diff] [blame] | 12 | #include "base/single_thread_task_runner.h" |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 13 | #include "base/threading/thread.h" |
| 14 | #include "components/ui_devtools/DOM.h" |
| 15 | #include "components/ui_devtools/Forward.h" |
| 16 | #include "components/ui_devtools/Protocol.h" |
| 17 | #include "components/ui_devtools/devtools_client.h" |
thanhph | 3f396851 | 2017-06-21 00:37:23 | [diff] [blame] | 18 | #include "components/ui_devtools/devtools_export.h" |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 19 | #include "components/ui_devtools/string_util.h" |
Lily Houghton | 7f7b2fb | 2018-05-01 21:40:46 | [diff] [blame] | 20 | #include "services/network/public/cpp/server/http_server.h" |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 21 | |
thanhph | 3f396851 | 2017-06-21 00:37:23 | [diff] [blame] | 22 | namespace ui_devtools { |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 23 | |
Lily Houghton | 7f7b2fb | 2018-05-01 21:40:46 | [diff] [blame] | 24 | class UI_DEVTOOLS_EXPORT UiDevToolsServer |
| 25 | : public network::server::HttpServer::Delegate { |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 26 | public: |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 27 | ~UiDevToolsServer() override; |
| 28 | |
mhashmi | 6d1b1cb2 | 2016-11-22 16:04:24 | [diff] [blame] | 29 | // Returns an empty unique_ptr if ui devtools flag isn't enabled or if a |
Illia Martyniuk | bd1e4485 | 2018-03-13 22:02:59 | [diff] [blame] | 30 | // server instance has already been created. Server doesn't know anything |
| 31 | // about the caller, so both UI and Viz pass their corresponding params. |
leon.han | 030d74f | 2016-12-13 02:52:16 | [diff] [blame] | 32 | static std::unique_ptr<UiDevToolsServer> Create( |
Lily Houghton | 7f7b2fb | 2018-05-01 21:40:46 | [diff] [blame] | 33 | network::mojom::NetworkContext* network_context, |
Illia Martyniuk | bd1e4485 | 2018-03-13 22:02:59 | [diff] [blame] | 34 | const char* enable_devtools_flag, |
| 35 | int default_port); |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 36 | |
mhashmi | 6d1b1cb2 | 2016-11-22 16:04:24 | [diff] [blame] | 37 | // Returns a list of attached UiDevToolsClient name + URL |
| 38 | using NameUrlPair = std::pair<std::string, std::string>; |
leon.han | 030d74f | 2016-12-13 02:52:16 | [diff] [blame] | 39 | static std::vector<NameUrlPair> GetClientNamesAndUrls(); |
mhashmi | 6d1b1cb2 | 2016-11-22 16:04:24 | [diff] [blame] | 40 | |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 41 | void AttachClient(std::unique_ptr<UiDevToolsClient> client); |
| 42 | void SendOverWebSocket(int connection_id, const String& message); |
| 43 | |
Illia Martyniuk | bd1e4485 | 2018-03-13 22:02:59 | [diff] [blame] | 44 | int port() const { return port_; } |
| 45 | |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 46 | private: |
Helen Li | 1fa1cc4 | 2018-05-03 17:40:32 | [diff] [blame] | 47 | UiDevToolsServer(const char* enable_devtools_flag, int default_port); |
mhashmi | 6011c1bd | 2016-10-31 15:24:29 | [diff] [blame] | 48 | |
Helen Li | 1fa1cc4 | 2018-05-03 17:40:32 | [diff] [blame] | 49 | void Start(network::mojom::NetworkContext* network_context, |
| 50 | const std::string& address_string); |
Lily Houghton | 7f7b2fb | 2018-05-01 21:40:46 | [diff] [blame] | 51 | void MakeServer(network::mojom::TCPServerSocketPtr server_socket, |
| 52 | int result, |
| 53 | const base::Optional<net::IPEndPoint>& local_addr); |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 54 | |
| 55 | // HttpServer::Delegate |
| 56 | void OnConnect(int connection_id) override; |
Lily Houghton | 7f7b2fb | 2018-05-01 21:40:46 | [diff] [blame] | 57 | void OnHttpRequest( |
| 58 | int connection_id, |
| 59 | const network::server::HttpServerRequestInfo& info) override; |
| 60 | void OnWebSocketRequest( |
| 61 | int connection_id, |
| 62 | const network::server::HttpServerRequestInfo& info) override; |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 63 | void OnWebSocketMessage(int connection_id, const std::string& data) override; |
| 64 | void OnClose(int connection_id) override; |
| 65 | |
| 66 | using ClientsList = std::vector<std::unique_ptr<UiDevToolsClient>>; |
| 67 | using ConnectionsMap = std::map<uint32_t, UiDevToolsClient*>; |
| 68 | ClientsList clients_; |
| 69 | ConnectionsMap connections_; |
| 70 | |
Lily Houghton | 7f7b2fb | 2018-05-01 21:40:46 | [diff] [blame] | 71 | std::unique_ptr<network::server::HttpServer> server_; |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 72 | |
Illia Martyniuk | bd1e4485 | 2018-03-13 22:02:59 | [diff] [blame] | 73 | // The port the devtools server listens on |
| 74 | const int port_; |
| 75 | |
mhashmi | 6d1b1cb2 | 2016-11-22 16:04:24 | [diff] [blame] | 76 | // The server (owned by ash for now) |
| 77 | static UiDevToolsServer* devtools_server_; |
| 78 | |
Lily Houghton | 7f7b2fb | 2018-05-01 21:40:46 | [diff] [blame] | 79 | SEQUENCE_CHECKER(devtools_server_sequence_); |
| 80 | base::WeakPtrFactory<UiDevToolsServer> weak_ptr_factory_; |
| 81 | |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 82 | DISALLOW_COPY_AND_ASSIGN(UiDevToolsServer); |
| 83 | }; |
| 84 | |
thanhph | 3f396851 | 2017-06-21 00:37:23 | [diff] [blame] | 85 | } // namespace ui_devtools |
mhashmi | 1ec338a | 2016-10-25 22:13:34 | [diff] [blame] | 86 | |
| 87 | #endif // COMPONENTS_UI_DEVTOOLS_DEVTOOLS_SERVER_H_ |