// 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 #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 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 app, CefRefPtr 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 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 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 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 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); }