Avi Drissman | 8ba1bad | 2022-09-13 19:22:36 | [diff] [blame] | 1 | // Copyright 2016 The Chromium Authors |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 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_BASE_AGENT_H_ |
| 6 | #define COMPONENTS_UI_DEVTOOLS_DEVTOOLS_BASE_AGENT_H_ |
| 7 | |
Andrey Kosyakov | 103b8f2a | 2021-11-16 08:06:26 | [diff] [blame] | 8 | #include "components/ui_devtools/protocol.h" |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 9 | |
thanhph | 3f396851 | 2017-06-21 00:37:23 | [diff] [blame] | 10 | namespace ui_devtools { |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 11 | |
| 12 | class UiDevToolsAgent { |
| 13 | public: |
Sorin Jianu | 64e6e759 | 2024-10-09 14:15:26 | [diff] [blame] | 14 | UiDevToolsAgent() = default; |
| 15 | virtual ~UiDevToolsAgent() = default; |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 16 | |
| 17 | virtual void Init(protocol::UberDispatcher*) = 0; |
mhashmi | ca5eebc | 2016-11-03 15:17:45 | [diff] [blame] | 18 | virtual void Disable() = 0; |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 19 | }; |
| 20 | |
| 21 | // A base agent so that any Backend implementation has access to the |
| 22 | // corresponding frontend instance. This also wires the backend with |
| 23 | // the dispatcher. When initializing an instance of this class, |
| 24 | // the template argument is simply the generated Metainfo class of |
| 25 | // any domain type such as DOM or CSS. |
| 26 | template <typename DomainMetainfo> |
| 27 | class UiDevToolsBaseAgent : public UiDevToolsAgent, |
| 28 | public DomainMetainfo::BackendClass { |
| 29 | public: |
Peter Boström | 9f667c38 | 2021-10-01 20:09:31 | [diff] [blame] | 30 | UiDevToolsBaseAgent(const UiDevToolsBaseAgent&) = delete; |
| 31 | UiDevToolsBaseAgent& operator=(const UiDevToolsBaseAgent&) = delete; |
| 32 | |
mhashmi | ca5eebc | 2016-11-03 15:17:45 | [diff] [blame] | 33 | // UiDevToolsAgent: |
| 34 | void Init(protocol::UberDispatcher* dispatcher) override { |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 35 | frontend_.reset( |
| 36 | new typename DomainMetainfo::FrontendClass(dispatcher->channel())); |
| 37 | DomainMetainfo::DispatcherClass::wire(dispatcher, this); |
| 38 | } |
| 39 | |
mhashmi | ca5eebc | 2016-11-03 15:17:45 | [diff] [blame] | 40 | void Disable() override { disable(); } |
| 41 | |
| 42 | // Common methods between all generated Backends, subclasses may |
| 43 | // choose to override them (but not necessary). |
Johannes Henkel | d5fead7 | 2020-03-20 02:09:01 | [diff] [blame] | 44 | protocol::Response enable() override { return protocol::Response::Success(); } |
mhashmi | ca5eebc | 2016-11-03 15:17:45 | [diff] [blame] | 45 | |
Johannes Henkel | d5fead7 | 2020-03-20 02:09:01 | [diff] [blame] | 46 | protocol::Response disable() override { |
| 47 | return protocol::Response::Success(); |
| 48 | } |
mhashmi | ca5eebc | 2016-11-03 15:17:45 | [diff] [blame] | 49 | |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 50 | protected: |
Johannes Henkel | d5fead7 | 2020-03-20 02:09:01 | [diff] [blame] | 51 | UiDevToolsBaseAgent() = default; |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 52 | typename DomainMetainfo::FrontendClass* frontend() const { |
| 53 | return frontend_.get(); |
| 54 | } |
| 55 | |
| 56 | private: |
| 57 | std::unique_ptr<typename DomainMetainfo::FrontendClass> frontend_; |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 58 | }; |
| 59 | |
thanhph | 3f396851 | 2017-06-21 00:37:23 | [diff] [blame] | 60 | } // namespace ui_devtools |
mhashmi | e2445fe73 | 2016-10-29 20:46:32 | [diff] [blame] | 61 | |
| 62 | #endif // COMPONENTS_UI_DEVTOOLS_DEVTOOLS_BASE_AGENT_H_ |