156 lines
5.8 KiB
C++
156 lines
5.8 KiB
C++
|
// 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.
|
||
|
|
||
|
#include "CEF/HumanAppBrowser.h"
|
||
|
|
||
|
#include <string>
|
||
|
|
||
|
#include "HumanAppContext.h"
|
||
|
#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"
|
||
|
#include "include/cef_crash_util.h"
|
||
|
#include "include/cef_file_util.h"
|
||
|
|
||
|
#include "CEF/HumanAppSwitches.h"
|
||
|
|
||
|
|
||
|
class HumanAppBrowserDelegate : public HumanAppBrowser::Delegate {
|
||
|
public:
|
||
|
HumanAppBrowserDelegate() = default;
|
||
|
|
||
|
void OnContextInitialized(CefRefPtr<HumanAppBrowser> app) override {
|
||
|
if (CefCrashReportingEnabled()) {
|
||
|
// Set some crash keys for testing purposes. Keys must be defined in the
|
||
|
// "crash_reporter.cfg" file. See cef_crash_util.h for details.
|
||
|
CefSetCrashKeyValue("testkey_small1", "value1_small_browser");
|
||
|
CefSetCrashKeyValue("testkey_small2", "value2_small_browser");
|
||
|
CefSetCrashKeyValue("testkey_medium1", "value1_medium_browser");
|
||
|
CefSetCrashKeyValue("testkey_medium2", "value2_medium_browser");
|
||
|
CefSetCrashKeyValue("testkey_large1", "value1_large_browser");
|
||
|
CefSetCrashKeyValue("testkey_large2", "value2_large_browser");
|
||
|
}
|
||
|
|
||
|
const std::string& crl_sets_path =
|
||
|
CefCommandLine::GetGlobalCommandLine()->GetSwitchValue(
|
||
|
kCRLSetsPath);
|
||
|
if (!crl_sets_path.empty()) {
|
||
|
// Load the CRLSets file from the specified path.
|
||
|
CefLoadCRLSetsFile(crl_sets_path);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OnBeforeCommandLineProcessing(
|
||
|
CefRefPtr<HumanAppBrowser> app,
|
||
|
CefRefPtr<CefCommandLine> command_line) override {
|
||
|
// Append Chromium command line parameters if touch events are enabled
|
||
|
if (HumanAppContext::Get()->TouchEventsEnabled())
|
||
|
command_line->AppendSwitchWithValue("touch-events", "enabled");
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
DISALLOW_COPY_AND_ASSIGN(HumanAppBrowserDelegate);
|
||
|
IMPLEMENT_REFCOUNTING(HumanAppBrowserDelegate);
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
HumanAppBrowser::HumanAppBrowser() {
|
||
|
delegates_.insert(new HumanAppBrowserDelegate);
|
||
|
}
|
||
|
|
||
|
// static
|
||
|
void HumanAppBrowser::PopulateSettings(CefRefPtr<CefCommandLine> command_line,
|
||
|
CefSettings& settings) {
|
||
|
#if (defined(OS_WIN) || defined(OS_LINUX))
|
||
|
settings.multi_threaded_message_loop =
|
||
|
command_line->HasSwitch(kMultiThreadedMessageLoop);
|
||
|
#endif
|
||
|
|
||
|
if (!settings.multi_threaded_message_loop) {
|
||
|
settings.external_message_pump =
|
||
|
command_line->HasSwitch(kExternalMessagePump);
|
||
|
}
|
||
|
|
||
|
std::vector<std::string> 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.
|
||
|
if (command_line->HasSwitch(kOffScreenRenderingEnabled) &&
|
||
|
!command_line->HasSwitch(kSharedTextureEnabled)) {
|
||
|
// 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.
|
||
|
if (!command_line->HasSwitch(kEnableGPU)) {
|
||
|
command_line->AppendSwitch("disable-gpu");
|
||
|
command_line->AppendSwitch("disable-gpu-compositing");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (command_line->HasSwitch(kUseViews) &&
|
||
|
!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");
|
||
|
}
|
||
|
|
||
|
if (!command_line->HasSwitch(kCachePath) &&
|
||
|
!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) {
|
||
|
//// Only used when `--external-message-pump` is passed via the command-line.
|
||
|
//MainMessageLoopExternalPump* message_pump =
|
||
|
// MainMessageLoopExternalPump::Get();
|
||
|
//if (message_pump)
|
||
|
// message_pump->OnScheduleMessagePumpWork(delay);
|
||
|
}
|