| // Copyright (c) 2020 The Chromium Embedded Framework 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 CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_CONTROLLER_H_ |
| #define CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_CONTROLLER_H_ |
| |
| #include <memory> |
| |
| #include "content/public/browser/devtools_agent_host_client.h" |
| |
| #include "base/containers/span.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/observer_list.h" |
| #include "base/values.h" |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| class CefDevToolsController : public content::DevToolsAgentHostClient { |
| public: |
| class Observer : public base::CheckedObserver { |
| public: |
| // See CefDevToolsMessageObserver documentation. |
| virtual bool OnDevToolsMessage(const base::StringPiece& message) = 0; |
| virtual void OnDevToolsMethodResult(int message_id, |
| bool success, |
| const base::StringPiece& result) = 0; |
| virtual void OnDevToolsEvent(const base::StringPiece& method, |
| const base::StringPiece& params) = 0; |
| virtual void OnDevToolsAgentAttached() = 0; |
| virtual void OnDevToolsAgentDetached() = 0; |
| |
| virtual void OnDevToolsControllerDestroyed() = 0; |
| |
| protected: |
| ~Observer() override {} |
| }; |
| |
| // |inspected_contents| will outlive this object. |
| explicit CefDevToolsController(content::WebContents* inspected_contents); |
| ~CefDevToolsController() override; |
| |
| // See CefBrowserHost methods of the same name for documentation. |
| bool SendDevToolsMessage(const base::StringPiece& message); |
| int ExecuteDevToolsMethod(int message_id, |
| const std::string& method, |
| const base::DictionaryValue* params); |
| |
| // |observer| must outlive this object or be removed. |
| void AddObserver(Observer* observer); |
| void RemoveObserver(Observer* observer); |
| |
| base::WeakPtr<CefDevToolsController> GetWeakPtr() { |
| return weak_ptr_factory_.GetWeakPtr(); |
| } |
| |
| private: |
| // content::DevToolsAgentHostClient implementation: |
| void AgentHostClosed(content::DevToolsAgentHost* agent_host) override; |
| void DispatchProtocolMessage(content::DevToolsAgentHost* agent_host, |
| base::span<const uint8_t> message) override; |
| |
| bool EnsureAgentHost(); |
| |
| content::WebContents* const inspected_contents_; |
| scoped_refptr<content::DevToolsAgentHost> agent_host_; |
| int next_message_id_ = 1; |
| |
| base::ObserverList<Observer> observers_; |
| |
| base::WeakPtrFactory<CefDevToolsController> weak_ptr_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CefDevToolsController); |
| }; |
| |
| #endif // CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_CONTROLLER_H_ |