human_render/src/CEF/HumanAppBrowser.cpp

114 lines
4.2 KiB
C++
Raw Normal View History

2024-12-14 08:24:03 +00:00
// Copyright (c) 2013 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.
2024-12-15 12:17:02 +00:00
#include "CEF/HumanAppBrowser.h"
2024-12-14 08:24:03 +00:00
#include <string>
#include "include/cef_browser.h"
#include "include/cef_command_line.h"
#include "include/views/cef_browser_view.h"
#include "include/views/cef_window.h"
#include "include/wrapper/cef_helpers.h"
2024-12-15 12:17:02 +00:00
#include "CEF/HumanAppSwitches.h"
2024-12-14 08:24:03 +00:00
HumanAppBrowser::HumanAppBrowser() {
CreateDelegates(delegates_);
}
// static
void HumanAppBrowser::PopulateSettings(CefRefPtr<CefCommandLine> command_line,
CefSettings& settings) {
#if (defined(OS_WIN) || defined(OS_LINUX))
settings.multi_threaded_message_loop =
2024-12-15 12:17:02 +00:00
command_line->HasSwitch(kMultiThreadedMessageLoop);
2024-12-14 08:24:03 +00:00
#endif
if (!settings.multi_threaded_message_loop) {
settings.external_message_pump =
2024-12-15 12:17:02 +00:00
command_line->HasSwitch(kExternalMessagePump);
2024-12-14 08:24:03 +00:00
}
std::vector<std::string> cookieable_schemes;
RegisterCookieableSchemes(cookieable_schemes);
if (!cookieable_schemes.empty()) {
std::string list_str;
for (const auto& scheme : cookieable_schemes) {
if (!list_str.empty())
list_str += ",";
list_str += scheme;
}
CefString(&settings.cookieable_schemes_list) = list_str;
}
}
void HumanAppBrowser::OnBeforeCommandLineProcessing(
const CefString& process_type,
CefRefPtr<CefCommandLine> command_line) {
// Pass additional command-line flags to the browser process.
if (process_type.empty()) {
// Pass additional command-line flags when off-screen rendering is enabled.
2024-12-15 12:17:02 +00:00
if (command_line->HasSwitch(kOffScreenRenderingEnabled) &&
!command_line->HasSwitch(kSharedTextureEnabled)) {
2024-12-14 08:24:03 +00:00
// Use software rendering and compositing (disable GPU) for increased FPS
// and decreased CPU usage. This will also disable WebGL so remove these
// switches if you need that capability.
// See https://bitbucket.org/chromiumembedded/cef/issues/1257 for details.
2024-12-15 12:17:02 +00:00
if (!command_line->HasSwitch(kEnableGPU)) {
2024-12-14 08:24:03 +00:00
command_line->AppendSwitch("disable-gpu");
command_line->AppendSwitch("disable-gpu-compositing");
}
}
2024-12-15 12:17:02 +00:00
if (command_line->HasSwitch(kUseViews) &&
2024-12-14 08:24:03 +00:00
!command_line->HasSwitch("top-chrome-md")) {
// Use non-material mode on all platforms by default. Among other things
// this causes menu buttons to show hover state. See usage of
// MaterialDesignController::IsModeMaterial() in Chromium code.
command_line->AppendSwitchWithValue("top-chrome-md", "non-material");
}
2024-12-15 12:17:02 +00:00
if (!command_line->HasSwitch(kCachePath) &&
2024-12-14 08:24:03 +00:00
!command_line->HasSwitch("disable-gpu-shader-disk-cache")) {
// Don't create a "GPUCache" directory when cache-path is unspecified.
command_line->AppendSwitch("disable-gpu-shader-disk-cache");
}
// Disable popup blocking for the chrome runtime.
command_line->AppendSwitch("disable-popup-blocking");
#if defined(OS_MAC)
// Disable the toolchain prompt on macOS.
command_line->AppendSwitch("use-mock-keychain");
#endif
DelegateSet::iterator it = delegates_.begin();
for (; it != delegates_.end(); ++it)
(*it)->OnBeforeCommandLineProcessing(this, command_line);
}
}
void HumanAppBrowser::OnContextInitialized() {
DelegateSet::iterator it = delegates_.begin();
for (; it != delegates_.end(); ++it)
(*it)->OnContextInitialized(this);
}
void HumanAppBrowser::OnBeforeChildProcessLaunch(
CefRefPtr<CefCommandLine> command_line) {
DelegateSet::iterator it = delegates_.begin();
for (; it != delegates_.end(); ++it)
(*it)->OnBeforeChildProcessLaunch(this, command_line);
}
void HumanAppBrowser::OnScheduleMessagePumpWork(int64 delay) {
2024-12-15 12:17:02 +00:00
//// Only used when `--external-message-pump` is passed via the command-line.
//MainMessageLoopExternalPump* message_pump =
// MainMessageLoopExternalPump::Get();
//if (message_pump)
// message_pump->OnScheduleMessagePumpWork(delay);
2024-12-14 08:24:03 +00:00
}