]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/linux/tests/cefclient/browser/main_context_impl.cc
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / linux / tests / cefclient / browser / main_context_impl.cc
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 (file)
index 0000000..b826992
--- /dev/null
@@ -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<CefCommandLine> 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<CefApp> 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