// Copyright 2016 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 COMPONENTS_UI_DEVTOOLS_DEVTOOLS_CLIENT_H_ #define COMPONENTS_UI_DEVTOOLS_DEVTOOLS_CLIENT_H_ #include #include "components/ui_devtools/devtools_base_agent.h" #include "components/ui_devtools/devtools_export.h" #include "components/ui_devtools/dom.h" #include "components/ui_devtools/forward.h" #include "components/ui_devtools/protocol.h" namespace ui_devtools { class UiDevToolsServer; // Every UI component that wants to be inspectable must instantiate // this class and attach the corresponding backends/frontends (i.e: DOM, CSS, // etc). This client is then attached to the UiDevToolsServer and all messages // from this client are sent over the web socket owned by the server. class UI_DEVTOOLS_EXPORT UiDevToolsClient : public protocol::FrontendChannel { public: static const int kNotConnected = -1; UiDevToolsClient(const std::string& name, UiDevToolsServer* server); UiDevToolsClient(const UiDevToolsClient&) = delete; UiDevToolsClient& operator=(const UiDevToolsClient&) = delete; ~UiDevToolsClient() override; void AddAgent(std::unique_ptr agent); void Disconnect(); void Dispatch(const std::string& json); bool connected() const; void set_connection_id(int connection_id); const std::string& name() const; private: void DisableAllAgents(); void MaybeSendProtocolResponseOrNotification( std::unique_ptr message); // protocol::FrontendChannel void SendProtocolResponse( int callId, std::unique_ptr message) override; void SendProtocolNotification( std::unique_ptr message) override; void FlushProtocolNotifications() override; void FallThrough(int call_id, crdtp::span method, crdtp::span message) override; std::string name_; int connection_id_; std::vector> agents_; protocol::UberDispatcher dispatcher_; UiDevToolsServer* server_; }; } // namespace ui_devtools #endif // COMPONENTS_UI_DEVTOOLS_DEVTOOLS_CLIENT_H_