summaryrefslogtreecommitdiff
path: root/libcef/browser/devtools/devtools_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'libcef/browser/devtools/devtools_manager.h')
-rw-r--r--libcef/browser/devtools/devtools_manager.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/libcef/browser/devtools/devtools_manager.h b/libcef/browser/devtools/devtools_manager.h
new file mode 100644
index 00000000..d390e498
--- /dev/null
+++ b/libcef/browser/devtools/devtools_manager.h
@@ -0,0 +1,71 @@
+// 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_MANAGER_H_
+#define CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_MANAGER_H_
+#pragma once
+
+#include "include/cef_browser.h"
+
+#include "base/memory/weak_ptr.h"
+
+class CefBrowserHostBase;
+class CefDevToolsController;
+class CefDevToolsFrontend;
+
+namespace content {
+class WebContents;
+}
+
+// Manages DevTools instances. Methods must be called on the UI thread unless
+// otherwise indicated.
+class CefDevToolsManager {
+ public:
+ // |inspected_browser| will outlive this object.
+ explicit CefDevToolsManager(CefBrowserHostBase* inspected_browser);
+
+ CefDevToolsManager(const CefDevToolsManager&) = delete;
+ CefDevToolsManager& operator=(const CefDevToolsManager&) = delete;
+
+ ~CefDevToolsManager();
+
+ // See CefBrowserHost methods of the same name for documentation.
+ void ShowDevTools(const CefWindowInfo& windowInfo,
+ CefRefPtr<CefClient> client,
+ const CefBrowserSettings& settings,
+ const CefPoint& inspect_element_at);
+ void CloseDevTools();
+ bool HasDevTools();
+ bool SendDevToolsMessage(const void* message, size_t message_size);
+ int ExecuteDevToolsMethod(int message_id,
+ const CefString& method,
+ CefRefPtr<CefDictionaryValue> param);
+
+ // These methods are used to implement
+ // CefBrowserHost::AddDevToolsMessageObserver. CreateRegistration is safe to
+ // call on any thread. InitializeRegistrationOnUIThread should be called
+ // immediately afterwards on the UI thread.
+ static CefRefPtr<CefRegistration> CreateRegistration(
+ CefRefPtr<CefDevToolsMessageObserver> observer);
+ void InitializeRegistrationOnUIThread(
+ CefRefPtr<CefRegistration> registration);
+
+ private:
+ void OnFrontEndDestroyed();
+
+ bool EnsureController();
+
+ CefBrowserHostBase* const inspected_browser_;
+
+ // CefDevToolsFrontend will delete itself when the frontend WebContents is
+ // destroyed.
+ CefDevToolsFrontend* devtools_frontend_ = nullptr;
+
+ // Used for sending DevTools protocol messages without an active frontend.
+ std::unique_ptr<CefDevToolsController> devtools_controller_;
+
+ base::WeakPtrFactory<CefDevToolsManager> weak_ptr_factory_;
+};
+
+#endif // CEF_LIBCEF_BROWSER_DEVTOOLS_DEVTOOLS_MANAGER_H_