// 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 "cefclient/main_context_impl.h" #include "cefclient/client_switches.h" namespace client { namespace { // The default URL to load in a browser window. const char kDefaultUrl[] = "http://www.google.com"; } // namespace MainContextImpl::MainContextImpl(int argc, const char* const* argv, bool terminate_when_all_windows_closed) : terminate_when_all_windows_closed_(terminate_when_all_windows_closed), initialized_(false), shutdown_(false) { // Parse the command line. command_line_ = CefCommandLine::CreateCommandLine(); #if defined(OS_WIN) command_line_->InitFromString(::GetCommandLineW()); #else command_line_->InitFromArgv(argc, argv); #endif // Set the main URL. if (command_line_->HasSwitch(switches::kUrl)) main_url_ = command_line_->GetSwitchValue(switches::kUrl); if (main_url_.empty()) main_url_ = kDefaultUrl; } 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_; } void MainContextImpl::PopulateSettings(CefSettings* settings) { #if defined(OS_WIN) settings->multi_threaded_message_loop = command_line_->HasSwitch(switches::kMultiThreadedMessageLoop); #endif CefString(&settings->cache_path) = command_line_->GetSwitchValue(switches::kCachePath); if (command_line_->HasSwitch(switches::kOffScreenRenderingEnabled)) settings->windowless_rendering_enabled = true; } void MainContextImpl::PopulateBrowserSettings(CefBrowserSettings* settings) { if (command_line_->HasSwitch(switches::kOffScreenFrameRate)) { settings->windowless_frame_rate = atoi(command_line_-> GetSwitchValue(switches::kOffScreenFrameRate).ToString().c_str()); } } 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