cefclient: Use default window for DevTools non-Views popup (see #3681)

Chrome runtime only supports creation of a Views-hosted DevTools
popup in ChromeBrowserDelegate::CreateDevToolsBrowser if the parent
is also Views-hosted.

To test:
- Run `cefclient --use-native`
- Right click, select "Show DevTools"
- Close both windows and the app should exit
This commit is contained in:
Marshall Greenblatt 2024-05-20 17:19:00 -04:00
parent 5a2cfb6907
commit 48137b9538
1 changed files with 8 additions and 11 deletions

View File

@ -58,9 +58,13 @@ class ClientRequestContextHandler : public CefRequestContextHandler {
// Ensure a compatible set of window creation attributes. // Ensure a compatible set of window creation attributes.
void SanityCheckWindowConfig(const bool is_devtools, void SanityCheckWindowConfig(const bool is_devtools,
bool& use_views, const bool use_views,
bool& use_alloy_style, bool& use_alloy_style,
bool& with_osr) { bool& with_osr) {
// This configuration is not supported by cefclient architecture and
// should use default window creation instead.
CHECK(!(is_devtools && !use_views));
#if !defined(DISABLE_ALLOY_BOOTSTRAP) #if !defined(DISABLE_ALLOY_BOOTSTRAP)
if (MainContext::Get()->UseChromeBootstrap()) if (MainContext::Get()->UseChromeBootstrap())
#endif #endif
@ -71,13 +75,6 @@ void SanityCheckWindowConfig(const bool is_devtools,
" using Chrome style."; " using Chrome style.";
use_alloy_style = false; use_alloy_style = false;
} }
if (is_devtools && !use_views) {
LOG(WARNING)
<< "Native parent is not supported with Chrome runtime DevTools;"
" using Views.";
use_views = true;
}
} }
if (!use_alloy_style && with_osr) { if (!use_alloy_style && with_osr) {
@ -141,15 +138,15 @@ scoped_refptr<RootWindow> RootWindowManager::CreateRootWindowAsPopup(
CefBrowserSettings& settings) { CefBrowserSettings& settings) {
CEF_REQUIRE_UI_THREAD(); CEF_REQUIRE_UI_THREAD();
SanityCheckWindowConfig(is_devtools, use_views, use_alloy_style, with_osr); if (MainContext::Get()->UseDefaultPopup() || (is_devtools && !use_views)) {
if (MainContext::Get()->UseDefaultPopup()) {
// Use default window creation for the popup. A new |client| instance is // Use default window creation for the popup. A new |client| instance is
// still required by cefclient architecture. // still required by cefclient architecture.
client = new DefaultClientHandler(); client = new DefaultClientHandler();
return nullptr; return nullptr;
} }
SanityCheckWindowConfig(is_devtools, use_views, use_alloy_style, with_osr);
if (!temp_window_) { if (!temp_window_) {
// TempWindow must be created on the UI thread. // TempWindow must be created on the UI thread.
temp_window_.reset(new TempWindow()); temp_window_.reset(new TempWindow());