blob: 572ed3e631238b0c9424613bee247c22fa7b9938 [file] [log] [blame]
mhashmi1ec338a2016-10-25 22:13:341// 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
mhashmi6d1b1cb22016-11-22 16:04:2410#include "base/compiler_specific.h"
Lily Houghton7f7b2fb2018-05-01 21:40:4611#include "base/memory/weak_ptr.h"
Gabriel Charette5ff87ce2017-05-16 18:03:4512#include "base/single_thread_task_runner.h"
mhashmi1ec338a2016-10-25 22:13:3413#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"
thanhph3f3968512017-06-21 00:37:2318#include "components/ui_devtools/devtools_export.h"
mhashmi1ec338a2016-10-25 22:13:3419#include "components/ui_devtools/string_util.h"
Lily Houghton7f7b2fb2018-05-01 21:40:4620#include "services/network/public/cpp/server/http_server.h"
mhashmi1ec338a2016-10-25 22:13:3421
thanhph3f3968512017-06-21 00:37:2322namespace ui_devtools {
mhashmi1ec338a2016-10-25 22:13:3423
Lily Houghton7f7b2fb2018-05-01 21:40:4624class UI_DEVTOOLS_EXPORT UiDevToolsServer
25 : public network::server::HttpServer::Delegate {
mhashmi1ec338a2016-10-25 22:13:3426 public:
mhashmi1ec338a2016-10-25 22:13:3427 ~UiDevToolsServer() override;
28
mhashmi6d1b1cb22016-11-22 16:04:2429 // Returns an empty unique_ptr if ui devtools flag isn't enabled or if a
Illia Martyniukbd1e44852018-03-13 22:02:5930 // 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.han030d74f2016-12-13 02:52:1632 static std::unique_ptr<UiDevToolsServer> Create(
Lily Houghton7f7b2fb2018-05-01 21:40:4633 network::mojom::NetworkContext* network_context,
Illia Martyniukbd1e44852018-03-13 22:02:5934 const char* enable_devtools_flag,
35 int default_port);
mhashmi1ec338a2016-10-25 22:13:3436
mhashmi6d1b1cb22016-11-22 16:04:2437 // Returns a list of attached UiDevToolsClient name + URL
38 using NameUrlPair = std::pair<std::string, std::string>;
leon.han030d74f2016-12-13 02:52:1639 static std::vector<NameUrlPair> GetClientNamesAndUrls();
mhashmi6d1b1cb22016-11-22 16:04:2440
mhashmi1ec338a2016-10-25 22:13:3441 void AttachClient(std::unique_ptr<UiDevToolsClient> client);
42 void SendOverWebSocket(int connection_id, const String& message);
43
Illia Martyniukbd1e44852018-03-13 22:02:5944 int port() const { return port_; }
45
mhashmi1ec338a2016-10-25 22:13:3446 private:
Helen Li1fa1cc42018-05-03 17:40:3247 UiDevToolsServer(const char* enable_devtools_flag, int default_port);
mhashmi6011c1bd2016-10-31 15:24:2948
Helen Li1fa1cc42018-05-03 17:40:3249 void Start(network::mojom::NetworkContext* network_context,
50 const std::string& address_string);
Lily Houghton7f7b2fb2018-05-01 21:40:4651 void MakeServer(network::mojom::TCPServerSocketPtr server_socket,
52 int result,
53 const base::Optional<net::IPEndPoint>& local_addr);
mhashmi1ec338a2016-10-25 22:13:3454
55 // HttpServer::Delegate
56 void OnConnect(int connection_id) override;
Lily Houghton7f7b2fb2018-05-01 21:40:4657 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;
mhashmi1ec338a2016-10-25 22:13:3463 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 Houghton7f7b2fb2018-05-01 21:40:4671 std::unique_ptr<network::server::HttpServer> server_;
mhashmi1ec338a2016-10-25 22:13:3472
Illia Martyniukbd1e44852018-03-13 22:02:5973 // The port the devtools server listens on
74 const int port_;
75
mhashmi6d1b1cb22016-11-22 16:04:2476 // The server (owned by ash for now)
77 static UiDevToolsServer* devtools_server_;
78
Lily Houghton7f7b2fb2018-05-01 21:40:4679 SEQUENCE_CHECKER(devtools_server_sequence_);
80 base::WeakPtrFactory<UiDevToolsServer> weak_ptr_factory_;
81
mhashmi1ec338a2016-10-25 22:13:3482 DISALLOW_COPY_AND_ASSIGN(UiDevToolsServer);
83};
84
thanhph3f3968512017-06-21 00:37:2385} // namespace ui_devtools
mhashmi1ec338a2016-10-25 22:13:3486
87#endif // COMPONENTS_UI_DEVTOOLS_DEVTOOLS_SERVER_H_