• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  // Copyright 2013 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 CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_FRONTEND_H_
6  #define CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_FRONTEND_H_
7  
8  #include <memory>
9  
10  #include "libcef/browser/alloy/alloy_browser_host_impl.h"
11  #include "libcef/browser/devtools/devtools_file_manager.h"
12  
13  #include "base/compiler_specific.h"
14  #include "base/files/file_path.h"
15  #include "base/memory/ref_counted.h"
16  #include "base/memory/weak_ptr.h"
17  #include "base/values.h"
18  #include "content/public/browser/devtools_agent_host.h"
19  #include "content/public/browser/devtools_frontend_host.h"
20  #include "content/public/browser/web_contents_observer.h"
21  
22  namespace base {
23  class Value;
24  }
25  
26  namespace content {
27  class NavigationHandle;
28  class RenderViewHost;
29  class WebContents;
30  }  // namespace content
31  
32  class PrefService;
33  
34  enum class ProtocolMessageType {
35    METHOD,
36    RESULT,
37    EVENT,
38  };
39  
40  class CefDevToolsFrontend : public content::WebContentsObserver,
41                              public content::DevToolsAgentHostClient {
42   public:
43    CefDevToolsFrontend(const CefDevToolsFrontend&) = delete;
44    CefDevToolsFrontend& operator=(const CefDevToolsFrontend&) = delete;
45  
46    static CefDevToolsFrontend* Show(
47        AlloyBrowserHostImpl* inspected_browser,
48        const CefWindowInfo& windowInfo,
49        CefRefPtr<CefClient> client,
50        const CefBrowserSettings& settings,
51        const CefPoint& inspect_element_at,
52        base::OnceClosure frontend_destroyed_callback);
53  
54    void Activate();
55    void Focus();
56    void InspectElementAt(int x, int y);
57    void Close();
58  
59    void CallClientFunction(
60        const std::string& object_name,
61        const std::string& method_name,
62        const base::Value arg1 = {},
63        const base::Value arg2 = {},
64        const base::Value arg3 = {},
65        base::OnceCallback<void(base::Value)> cb = base::NullCallback());
66  
67   private:
68    CefDevToolsFrontend(AlloyBrowserHostImpl* frontend_browser,
69                        content::WebContents* inspected_contents,
70                        const CefPoint& inspect_element_at,
71                        base::OnceClosure destroyed_callback);
72    ~CefDevToolsFrontend() override;
73  
74    // content::DevToolsAgentHostClient implementation.
75    void AgentHostClosed(content::DevToolsAgentHost* agent_host) override;
76    void DispatchProtocolMessage(content::DevToolsAgentHost* agent_host,
77                                 base::span<const uint8_t> message) override;
78    void HandleMessageFromDevToolsFrontend(base::Value message);
79  
80   private:
81    // WebContentsObserver overrides
82    void ReadyToCommitNavigation(
83        content::NavigationHandle* navigation_handle) override;
84    void DocumentAvailableInMainFrame(
85        content::RenderFrameHost* render_frame_host) override;
86    void WebContentsDestroyed() override;
87  
88    void SendMessageAck(int request_id, base::Value arg);
89  
90    bool ProtocolLoggingEnabled() const;
91    void LogProtocolMessage(ProtocolMessageType type,
92                            const base::StringPiece& message);
93  
94    PrefService* GetPrefs() const;
95  
96    CefRefPtr<AlloyBrowserHostImpl> frontend_browser_;
97    content::WebContents* inspected_contents_;
98    scoped_refptr<content::DevToolsAgentHost> agent_host_;
99    CefPoint inspect_element_at_;
100    base::OnceClosure frontend_destroyed_callback_;
101    std::unique_ptr<content::DevToolsFrontendHost> frontend_host_;
102  
103    class NetworkResourceLoader;
104    std::set<std::unique_ptr<NetworkResourceLoader>, base::UniquePtrComparator>
105        loaders_;
106  
107    using ExtensionsAPIs = std::map<std::string, std::string>;
108    ExtensionsAPIs extensions_api_;
109    CefDevToolsFileManager file_manager_;
110  
111    const base::FilePath protocol_log_file_;
112  
113    base::WeakPtrFactory<CefDevToolsFrontend> weak_factory_;
114  };
115  
116  #endif  // CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_FRONTEND_H_
117