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