X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=dependencies64%2Fcef%2Flinux%2Ftests%2Fcefclient%2Fbrowser%2Fmain_context_impl.cc;fp=dependencies64%2Fcef%2Flinux%2Ftests%2Fcefclient%2Fbrowser%2Fmain_context_impl.cc;h=b826992e2abd75cfca2900c50ea2b6794be53a9d;hb=8128744e46d808a1105fb449365d7028df8c32b4;hp=0000000000000000000000000000000000000000;hpb=3a0dc241f598cabf83bcc67970176453929a73f1;p=casparcg diff --git a/dependencies64/cef/linux/tests/cefclient/browser/main_context_impl.cc b/dependencies64/cef/linux/tests/cefclient/browser/main_context_impl.cc new file mode 100644 index 000000000..b826992e2 --- /dev/null +++ b/dependencies64/cef/linux/tests/cefclient/browser/main_context_impl.cc @@ -0,0 +1,201 @@ +// Copyright (c) 2015 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 "tests/cefclient/browser/main_context_impl.h" + +#include "include/cef_parser.h" +#include "include/cef_web_plugin.h" +#include "tests/shared/common/client_switches.h" + +namespace client { + +namespace { + +// The default URL to load in a browser window. +const char kDefaultUrl[] = "http://www.google.com"; + +// Returns the ARGB value for |color|. +cef_color_t ParseColor(const std::string& color) { + std::string colorToLower; + colorToLower.resize(color.size()); + std::transform(color.begin(), color.end(), colorToLower.begin(), ::tolower); + + if (colorToLower == "black") + return CefColorSetARGB(255, 0, 0, 0); + else if (colorToLower == "blue") + return CefColorSetARGB(255, 0, 0, 255); + else if (colorToLower == "green") + return CefColorSetARGB(255, 0, 255, 0); + else if (colorToLower == "red") + return CefColorSetARGB(255, 255, 0, 0); + else if (colorToLower == "white") + return CefColorSetARGB(255, 255, 255, 255); + + // Use the default color. + return 0; +} + +} // namespace + +MainContextImpl::MainContextImpl(CefRefPtr command_line, + bool terminate_when_all_windows_closed) + : command_line_(command_line), + terminate_when_all_windows_closed_(terminate_when_all_windows_closed), + initialized_(false), + shutdown_(false), + background_color_(0), + use_views_(false) { + DCHECK(command_line_.get()); + + // Set the main URL. + if (command_line_->HasSwitch(switches::kUrl)) + main_url_ = command_line_->GetSwitchValue(switches::kUrl); + if (main_url_.empty()) + main_url_ = kDefaultUrl; + + // Whether windowless (off-screen) rendering will be used. + use_windowless_rendering_ = + command_line_->HasSwitch(switches::kOffScreenRenderingEnabled); + +#if defined(OS_WIN) || defined(OS_LINUX) + // Whether the Views framework will be used. + use_views_ = command_line_->HasSwitch(switches::kUseViews); + + if (use_windowless_rendering_ && use_views_) { + LOG(ERROR) << + "Windowless rendering is not supported by the Views framework."; + use_views_ = false; + } + + if (use_views_ && command_line->HasSwitch(switches::kHideFrame) && + !command_line_->HasSwitch(switches::kUrl)) { + // Use the draggable regions test as the default URL for frameless windows. + main_url_ = "http://tests/draggable"; + } +#endif // defined(OS_WIN) || defined(OS_LINUX) + + if (command_line_->HasSwitch(switches::kBackgroundColor)) { + // Parse the background color value. + background_color_ = + ParseColor(command_line_->GetSwitchValue(switches::kBackgroundColor)); + } + + if (!use_views_ && background_color_ == 0) { + // Set an explicit background color when not using Views. + background_color_ = CefColorSetARGB(255, 255, 255, 255); + } + + const std::string& cdm_path = + command_line_->GetSwitchValue(switches::kWidevineCdmPath); + if (!cdm_path.empty()) { + // Register the Widevine CDM at the specified path. See comments in + // cef_web_plugin.h for details. It's safe to call this method before + // CefInitialize(), and calling it before CefInitialize() is required on + // Linux. + CefRegisterWidevineCdm(cdm_path, NULL); + } +} + +MainContextImpl::~MainContextImpl() { + // The context must either not have been initialized, or it must have also + // been shut down. + DCHECK(!initialized_ || shutdown_); +} + +std::string MainContextImpl::GetConsoleLogPath() { + return GetAppWorkingDirectory() + "console.log"; +} + +std::string MainContextImpl::GetMainURL() { + return main_url_; +} + +cef_color_t MainContextImpl::GetBackgroundColor() { + return background_color_; +} + +bool MainContextImpl::UseViews() { + return use_views_; +} + +bool MainContextImpl::UseWindowlessRendering() { + return use_windowless_rendering_; +} + +void MainContextImpl::PopulateSettings(CefSettings* settings) { +#if defined(OS_WIN) + settings->multi_threaded_message_loop = + command_line_->HasSwitch(switches::kMultiThreadedMessageLoop); +#endif + + if (!settings->multi_threaded_message_loop) { + settings->external_message_pump = + command_line_->HasSwitch(switches::kExternalMessagePump); + } + + CefString(&settings->cache_path) = + command_line_->GetSwitchValue(switches::kCachePath); + + if (use_windowless_rendering_) + settings->windowless_rendering_enabled = true; + + if (background_color_ != 0) + settings->background_color = background_color_; +} + +void MainContextImpl::PopulateBrowserSettings(CefBrowserSettings* settings) { + if (command_line_->HasSwitch(switches::kOffScreenFrameRate)) { + settings->windowless_frame_rate = atoi(command_line_-> + GetSwitchValue(switches::kOffScreenFrameRate).ToString().c_str()); + } +} + +void MainContextImpl::PopulateOsrSettings(OsrRenderer::Settings* settings) { + settings->transparent = + command_line_->HasSwitch(switches::kTransparentPaintingEnabled); + settings->show_update_rect = + command_line_->HasSwitch(switches::kShowUpdateRect); + if (background_color_ != 0) + settings->background_color = background_color_; +} + +RootWindowManager* MainContextImpl::GetRootWindowManager() { + DCHECK(InValidState()); + return root_window_manager_.get(); +} + +bool MainContextImpl::Initialize(const CefMainArgs& args, + const CefSettings& settings, + CefRefPtr application, + void* windows_sandbox_info) { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(!initialized_); + DCHECK(!shutdown_); + + if (!CefInitialize(args, settings, application, windows_sandbox_info)) + return false; + + // Need to create the RootWindowManager after calling CefInitialize because + // TempWindowX11 uses cef_get_xdisplay(). + root_window_manager_.reset( + new RootWindowManager(terminate_when_all_windows_closed_)); + + initialized_ = true; + + return true; +} + +void MainContextImpl::Shutdown() { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(initialized_); + DCHECK(!shutdown_); + + root_window_manager_.reset(); + + CefShutdown(); + + shutdown_ = true; +} + +} // namespace client