chrome: Support Chrome and DevTools command execution (fixes #3282, fixes #3600)

Add new CefBrowserHost::[Can]ExecuteChromeCommand methods for executing
arbitrary Chrome commands.

Add support for existing CefBrowserHost::ShowDevTools, CloseDevTools and
HasDevTools methods.

DevTools windows now support the same Views callbacks as normal popup
windows with the new CefLifeSpanHandler::OnBeforeDevToolsPopup callback
as the DevTools-specific equivalent of OnBeforePopup.

Always create DevTools as an undocked window to support use of
ShowDevTools with default Chrome browser windows.

To test:

Run `ceftests --enable-chrome-runtime [--use-views]
     --gtest_filter=V8Test.OnUncaughtExceptionDevTools`

OR:

1. Run `cefclient --enable-chrome-runtime [--use-native]`
2. Select "Show DevTools", "Close DevTools" or "Inspect" from the
   right-click menu.
3. Notice that the DevTools window is Views-hosted (or native-hosted)
   and works as expected.

Add --use-default-popup to get a default styled popup in step 3.
This commit is contained in:
Marshall Greenblatt
2023-11-14 17:16:43 +00:00
parent d3d465b32e
commit 53ef570f57
50 changed files with 1173 additions and 240 deletions

View File

@@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=4d51bbece0dd5773f9c97163008d6b2f4bf1ccbf$
// $hash=b06e3bbc86769bbc2485d4ab9530b5c39dc73243$
//
#include "libcef_dll/ctocpp/browser_host_ctocpp.h"
@@ -1261,6 +1261,41 @@ void CefBrowserHostCToCpp::ExitFullscreen(bool will_cause_resize) {
_struct->exit_fullscreen(_struct, will_cause_resize);
}
NO_SANITIZE("cfi-icall")
bool CefBrowserHostCToCpp::CanExecuteChromeCommand(int command_id) {
shutdown_checker::AssertNotShutdown();
cef_browser_host_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, can_execute_chrome_command)) {
return false;
}
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
int _retval = _struct->can_execute_chrome_command(_struct, command_id);
// Return type: bool
return _retval ? true : false;
}
NO_SANITIZE("cfi-icall")
void CefBrowserHostCToCpp::ExecuteChromeCommand(
int command_id,
cef_window_open_disposition_t disposition) {
shutdown_checker::AssertNotShutdown();
cef_browser_host_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, execute_chrome_command)) {
return;
}
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
_struct->execute_chrome_command(_struct, command_id, disposition);
}
// CONSTRUCTOR - Do not edit by hand.
CefBrowserHostCToCpp::CefBrowserHostCToCpp() {}

View File

@@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=5c1df6572bffebd983970394be27397837db0b25$
// $hash=e07873b7e67c06fb54dafa370eca83d2c698ffb9$
//
#ifndef CEF_LIBCEF_DLL_CTOCPP_BROWSER_HOST_CTOCPP_H_
@@ -136,6 +136,9 @@ class CefBrowserHostCToCpp : public CefCToCppRefCounted<CefBrowserHostCToCpp,
bool IsAudioMuted() override;
bool IsFullscreen() override;
void ExitFullscreen(bool will_cause_resize) override;
bool CanExecuteChromeCommand(int command_id) override;
void ExecuteChromeCommand(int command_id,
cef_window_open_disposition_t disposition) override;
};
#endif // CEF_LIBCEF_DLL_CTOCPP_BROWSER_HOST_CTOCPP_H_

View File

@@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=d141b95304de99ab093db8f6c524a05e26f4edb5$
// $hash=d85695db88a025b1f7e4e4604f3085da29d5eabf$
//
#include "libcef_dll/ctocpp/life_span_handler_ctocpp.h"
@@ -109,6 +109,76 @@ bool CefLifeSpanHandlerCToCpp::OnBeforePopup(
return _retval ? true : false;
}
NO_SANITIZE("cfi-icall")
void CefLifeSpanHandlerCToCpp::OnBeforeDevToolsPopup(
CefRefPtr<CefBrowser> browser,
CefWindowInfo& windowInfo,
CefRefPtr<CefClient>& client,
CefBrowserSettings& settings,
CefRefPtr<CefDictionaryValue>& extra_info,
bool* use_default_window) {
shutdown_checker::AssertNotShutdown();
cef_life_span_handler_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, on_before_dev_tools_popup)) {
return;
}
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Verify param: browser; type: refptr_diff
DCHECK(browser.get());
if (!browser.get()) {
return;
}
// Verify param: use_default_window; type: bool_byaddr
DCHECK(use_default_window);
if (!use_default_window) {
return;
}
// Translate param: client; type: refptr_same_byref
cef_client_t* clientStruct = NULL;
if (client.get()) {
clientStruct = CefClientCToCpp::Unwrap(client);
}
cef_client_t* clientOrig = clientStruct;
// Translate param: extra_info; type: refptr_diff_byref
cef_dictionary_value_t* extra_infoStruct = NULL;
if (extra_info.get()) {
extra_infoStruct = CefDictionaryValueCppToC::Wrap(extra_info);
}
cef_dictionary_value_t* extra_infoOrig = extra_infoStruct;
// Translate param: use_default_window; type: bool_byaddr
int use_default_windowInt = use_default_window ? *use_default_window : 0;
// Execute
_struct->on_before_dev_tools_popup(_struct, CefBrowserCppToC::Wrap(browser),
&windowInfo, &clientStruct, &settings,
&extra_infoStruct, &use_default_windowInt);
// Restore param:client; type: refptr_same_byref
if (clientStruct) {
if (clientStruct != clientOrig) {
client = CefClientCToCpp::Wrap(clientStruct);
}
} else {
client = nullptr;
}
// Restore param:extra_info; type: refptr_diff_byref
if (extra_infoStruct) {
if (extra_infoStruct != extra_infoOrig) {
extra_info = CefDictionaryValueCppToC::Unwrap(extra_infoStruct);
}
} else {
extra_info = nullptr;
}
// Restore param:use_default_window; type: bool_byaddr
if (use_default_window) {
*use_default_window = use_default_windowInt ? true : false;
}
}
NO_SANITIZE("cfi-icall")
void CefLifeSpanHandlerCToCpp::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
shutdown_checker::AssertNotShutdown();

View File

@@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory
// for more information.
//
// $hash=229117f1ecb1cc27b5ab5eebd79e64c30d73a855$
// $hash=53f00e60e361c79c69a8f19474a234d5011454f5$
//
#ifndef CEF_LIBCEF_DLL_CTOCPP_LIFE_SPAN_HANDLER_CTOCPP_H_
@@ -49,6 +49,12 @@ class CefLifeSpanHandlerCToCpp
CefBrowserSettings& settings,
CefRefPtr<CefDictionaryValue>& extra_info,
bool* no_javascript_access) override;
void OnBeforeDevToolsPopup(CefRefPtr<CefBrowser> browser,
CefWindowInfo& windowInfo,
CefRefPtr<CefClient>& client,
CefBrowserSettings& settings,
CefRefPtr<CefDictionaryValue>& extra_info,
bool* use_default_window) override;
void OnAfterCreated(CefRefPtr<CefBrowser> browser) override;
bool DoClose(CefRefPtr<CefBrowser> browser) override;
void OnBeforeClose(CefRefPtr<CefBrowser> browser) override;