mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
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:
@ -9,7 +9,7 @@
|
||||
// implementations. See the translator.README.txt file in the tools directory
|
||||
// for more information.
|
||||
//
|
||||
// $hash=e96fe0660b55afa20c3bb5fdebc85635ccc53d09$
|
||||
// $hash=4990c06888649a2cb06ba7028f16f9cd762f3ad0$
|
||||
//
|
||||
|
||||
#include "libcef_dll/cpptoc/life_span_handler_cpptoc.h"
|
||||
@ -169,6 +169,126 @@ int CEF_CALLBACK life_span_handler_on_before_popup(
|
||||
return _retval;
|
||||
}
|
||||
|
||||
void CEF_CALLBACK life_span_handler_on_before_dev_tools_popup(
|
||||
struct _cef_life_span_handler_t* self,
|
||||
cef_browser_t* browser,
|
||||
cef_window_info_t* windowInfo,
|
||||
cef_client_t** client,
|
||||
struct _cef_browser_settings_t* settings,
|
||||
struct _cef_dictionary_value_t** extra_info,
|
||||
int* use_default_window) {
|
||||
shutdown_checker::AssertNotShutdown();
|
||||
|
||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||
|
||||
DCHECK(self);
|
||||
if (!self) {
|
||||
return;
|
||||
}
|
||||
// Verify param: browser; type: refptr_diff
|
||||
DCHECK(browser);
|
||||
if (!browser) {
|
||||
return;
|
||||
}
|
||||
// Verify param: windowInfo; type: struct_byref
|
||||
DCHECK(windowInfo);
|
||||
if (!windowInfo) {
|
||||
return;
|
||||
}
|
||||
if (!template_util::has_valid_size(windowInfo)) {
|
||||
DCHECK(false) << "invalid windowInfo->[base.]size";
|
||||
return;
|
||||
}
|
||||
// Verify param: client; type: refptr_same_byref
|
||||
DCHECK(client);
|
||||
if (!client) {
|
||||
return;
|
||||
}
|
||||
// Verify param: settings; type: struct_byref
|
||||
DCHECK(settings);
|
||||
if (!settings) {
|
||||
return;
|
||||
}
|
||||
if (!template_util::has_valid_size(settings)) {
|
||||
DCHECK(false) << "invalid settings->[base.]size";
|
||||
return;
|
||||
}
|
||||
// Verify param: extra_info; type: refptr_diff_byref
|
||||
DCHECK(extra_info);
|
||||
if (!extra_info) {
|
||||
return;
|
||||
}
|
||||
// Verify param: use_default_window; type: bool_byaddr
|
||||
DCHECK(use_default_window);
|
||||
if (!use_default_window) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Translate param: windowInfo; type: struct_byref
|
||||
CefWindowInfo windowInfoObj;
|
||||
if (windowInfo) {
|
||||
windowInfoObj.AttachTo(*windowInfo);
|
||||
}
|
||||
// Translate param: client; type: refptr_same_byref
|
||||
CefRefPtr<CefClient> clientPtr;
|
||||
if (client && *client) {
|
||||
clientPtr = CefClientCppToC::Unwrap(*client);
|
||||
}
|
||||
CefClient* clientOrig = clientPtr.get();
|
||||
// Translate param: settings; type: struct_byref
|
||||
CefBrowserSettings settingsObj;
|
||||
if (settings) {
|
||||
settingsObj.AttachTo(*settings);
|
||||
}
|
||||
// Translate param: extra_info; type: refptr_diff_byref
|
||||
CefRefPtr<CefDictionaryValue> extra_infoPtr;
|
||||
if (extra_info && *extra_info) {
|
||||
extra_infoPtr = CefDictionaryValueCToCpp::Wrap(*extra_info);
|
||||
}
|
||||
CefDictionaryValue* extra_infoOrig = extra_infoPtr.get();
|
||||
// Translate param: use_default_window; type: bool_byaddr
|
||||
bool use_default_windowBool =
|
||||
(use_default_window && *use_default_window) ? true : false;
|
||||
|
||||
// Execute
|
||||
CefLifeSpanHandlerCppToC::Get(self)->OnBeforeDevToolsPopup(
|
||||
CefBrowserCToCpp::Wrap(browser), windowInfoObj, clientPtr, settingsObj,
|
||||
extra_infoPtr, &use_default_windowBool);
|
||||
|
||||
// Restore param: windowInfo; type: struct_byref
|
||||
if (windowInfo) {
|
||||
windowInfoObj.DetachTo(*windowInfo);
|
||||
}
|
||||
// Restore param: client; type: refptr_same_byref
|
||||
if (client) {
|
||||
if (clientPtr.get()) {
|
||||
if (clientPtr.get() != clientOrig) {
|
||||
*client = CefClientCppToC::Wrap(clientPtr);
|
||||
}
|
||||
} else {
|
||||
*client = nullptr;
|
||||
}
|
||||
}
|
||||
// Restore param: settings; type: struct_byref
|
||||
if (settings) {
|
||||
settingsObj.DetachTo(*settings);
|
||||
}
|
||||
// Restore param: extra_info; type: refptr_diff_byref
|
||||
if (extra_info) {
|
||||
if (extra_infoPtr.get()) {
|
||||
if (extra_infoPtr.get() != extra_infoOrig) {
|
||||
*extra_info = CefDictionaryValueCToCpp::Unwrap(extra_infoPtr);
|
||||
}
|
||||
} else {
|
||||
*extra_info = nullptr;
|
||||
}
|
||||
}
|
||||
// Restore param: use_default_window; type: bool_byaddr
|
||||
if (use_default_window) {
|
||||
*use_default_window = use_default_windowBool ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
void CEF_CALLBACK
|
||||
life_span_handler_on_after_created(struct _cef_life_span_handler_t* self,
|
||||
cef_browser_t* browser) {
|
||||
@ -244,6 +364,8 @@ life_span_handler_on_before_close(struct _cef_life_span_handler_t* self,
|
||||
|
||||
CefLifeSpanHandlerCppToC::CefLifeSpanHandlerCppToC() {
|
||||
GetStruct()->on_before_popup = life_span_handler_on_before_popup;
|
||||
GetStruct()->on_before_dev_tools_popup =
|
||||
life_span_handler_on_before_dev_tools_popup;
|
||||
GetStruct()->on_after_created = life_span_handler_on_after_created;
|
||||
GetStruct()->do_close = life_span_handler_do_close;
|
||||
GetStruct()->on_before_close = life_span_handler_on_before_close;
|
||||
|
Reference in New Issue
Block a user