diff --git a/cef_paths2.gypi b/cef_paths2.gypi index 825084839..03d016252 100644 --- a/cef_paths2.gypi +++ b/cef_paths2.gypi @@ -147,8 +147,6 @@ 'tests/cefclient/res/xmlhttprequest.html', ], 'cefclient_sources_common': [ - 'tests/cefclient/cefclient.cc', - 'tests/cefclient/cefclient.h', 'tests/cefclient/binding_test.cc', 'tests/cefclient/binding_test.h', 'tests/cefclient/bytes_write_handler.cc', @@ -165,6 +163,10 @@ 'tests/cefclient/dialog_test.cc', 'tests/cefclient/dialog_test.h', 'tests/cefclient/dragdrop_events.h', + 'tests/cefclient/main_context.cc', + 'tests/cefclient/main_context.h', + 'tests/cefclient/main_context_impl.cc', + 'tests/cefclient/main_context_impl.h', 'tests/cefclient/main_message_loop.h', 'tests/cefclient/main_message_loop.cc', 'tests/cefclient/main_message_loop_std.h', @@ -193,6 +195,7 @@ 'tests/cefclient/cefclient_osr_widget_win.cc', 'tests/cefclient/cefclient_win.cc', 'tests/cefclient/client_handler_win.cc', + 'tests/cefclient/main_context_impl_win.cc', 'tests/cefclient/main_message_loop_multithreaded_win.h', 'tests/cefclient/main_message_loop_multithreaded_win.cc', 'tests/cefclient/resource.h', @@ -208,6 +211,7 @@ 'tests/cefclient/cefclient_osr_widget_mac.h', 'tests/cefclient/cefclient_osr_widget_mac.mm', 'tests/cefclient/client_handler_mac.mm', + 'tests/cefclient/main_context_impl_posix.cc', 'tests/cefclient/resource_util_mac.mm', 'tests/cefclient/resource_util_posix.cc', 'tests/cefclient/window_test_mac.mm', @@ -227,6 +231,8 @@ 'tests/cefclient/client_switches.h', 'tests/cefclient/dialog_test.cc', 'tests/cefclient/dialog_test.h', + 'tests/cefclient/main_context.cc', + 'tests/cefclient/main_context.h', 'tests/cefclient/main_message_loop.cc', 'tests/cefclient/main_message_loop.h', 'tests/cefclient/performance_test.cc', @@ -257,6 +263,7 @@ 'tests/cefclient/cefclient_osr_widget_gtk.h', 'tests/cefclient/cefclient_osr_widget_gtk.cc', 'tests/cefclient/client_handler_gtk.cc', + 'tests/cefclient/main_context_impl_posix.cc', 'tests/cefclient/print_handler_gtk.cc', 'tests/cefclient/print_handler_gtk.h', 'tests/cefclient/resource_util_linux.cc', diff --git a/tests/cefclient/cefclient.cc b/tests/cefclient/cefclient.cc deleted file mode 100644 index bae274fcd..000000000 --- a/tests/cefclient/cefclient.cc +++ /dev/null @@ -1,99 +0,0 @@ -// 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 "cefclient/cefclient.h" -#include -#include -#include -#include -#include "include/cef_app.h" -#include "include/cef_browser.h" -#include "include/cef_command_line.h" -#include "include/cef_frame.h" -#include "include/cef_web_plugin.h" -#include "include/wrapper/cef_helpers.h" -#include "cefclient/client_handler.h" -#include "cefclient/client_switches.h" - -CefRefPtr g_handler; - -namespace { - -CefRefPtr g_command_line; -int g_offscreen_state = 0; - -} // namespace - -CefRefPtr AppGetBrowser() { - if (!g_handler.get()) - return NULL; - return g_handler->GetBrowser(); -} - -ClientWindowHandle AppGetMainWindowHandle() { - if (!g_handler.get()) - return kNullWindowHandle; - return g_handler->GetMainWindowHandle(); -} - -std::string AppGetConsoleLogPath() { - return AppGetWorkingDirectory() + "console.log"; -} - -void AppInitCommandLine(int argc, const char* const* argv) { - g_command_line = CefCommandLine::CreateCommandLine(); -#if defined(OS_WIN) - g_command_line->InitFromString(::GetCommandLineW()); -#else - g_command_line->InitFromArgv(argc, argv); -#endif -} - -// Returns the application command line object. -CefRefPtr AppGetCommandLine() { - return g_command_line; -} - -// Returns the application settings based on command line arguments. -void AppGetSettings(CefSettings& settings) { - DCHECK(g_command_line.get()); - if (!g_command_line.get()) - return; - - CefString str; - -#if defined(OS_WIN) - settings.multi_threaded_message_loop = - g_command_line->HasSwitch(cefclient::kMultiThreadedMessageLoop); -#endif - - CefString(&settings.cache_path) = - g_command_line->GetSwitchValue(cefclient::kCachePath); - - if (g_command_line->HasSwitch(cefclient::kOffScreenRenderingEnabled)) - settings.windowless_rendering_enabled = true; -} - -void AppGetBrowserSettings(CefBrowserSettings& settings) { - DCHECK(g_command_line.get()); - if (!g_command_line.get()) - return; - - if (g_command_line->HasSwitch(cefclient::kOffScreenFrameRate)) { - settings.windowless_frame_rate = atoi(g_command_line-> - GetSwitchValue(cefclient::kOffScreenFrameRate).ToString().c_str()); - } -} - -bool AppIsOffScreenRenderingEnabled() { - if (g_offscreen_state == 0) { - // Store the value so it isn't queried multiple times. - DCHECK(g_command_line.get()); - g_offscreen_state = - g_command_line->HasSwitch(cefclient::kOffScreenRenderingEnabled) ? - 1 : 2; - } - - return (g_offscreen_state == 1); -} diff --git a/tests/cefclient/cefclient.h b/tests/cefclient/cefclient.h deleted file mode 100644 index 2161a5e37..000000000 --- a/tests/cefclient/cefclient.h +++ /dev/null @@ -1,51 +0,0 @@ -// 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. - -#ifndef CEF_TESTS_CEFCLIENT_CEFCLIENT_H_ -#define CEF_TESTS_CEFCLIENT_CEFCLIENT_H_ -#pragma once - -#include -#include "include/cef_base.h" -#include "cefclient/client_app.h" -#include "cefclient/client_handler.h" - -class CefApp; -class CefBrowser; -class CefCommandLine; - -// Returns the main browser window instance. -CefRefPtr AppGetBrowser(); - -// Returns the main application window handle. -ClientWindowHandle AppGetMainWindowHandle(); - -// Returns the application working directory including trailing path separator. -std::string AppGetWorkingDirectory(); - -// Returns the full path to the console log file. -std::string AppGetConsoleLogPath(); - -// Initialize the application command line. -void AppInitCommandLine(int argc, const char* const* argv); - -// Returns the application command line object. -CefRefPtr AppGetCommandLine(); - -// Returns the application settings based on command line arguments. -void AppGetSettings(CefSettings& settings); -void AppGetBrowserSettings(CefBrowserSettings& settings); - -// Returns true if off-screen rendering is enabled via the command line -// argument. -bool AppIsOffScreenRenderingEnabled(); - -// Returns the full download path for the specified file, or an empty path to -// use the default temp directory. -std::string AppGetDownloadPath(const std::string& file_name); - -// Quit the application message loop. -void AppQuitMessageLoop(); - -#endif // CEF_TESTS_CEFCLIENT_CEFCLIENT_H_ diff --git a/tests/cefclient/cefclient_gtk.cc b/tests/cefclient/cefclient_gtk.cc index cc2a75837..73abd926c 100644 --- a/tests/cefclient/cefclient_gtk.cc +++ b/tests/cefclient/cefclient_gtk.cc @@ -15,7 +15,6 @@ #include #include -#include "cefclient/cefclient.h" #include "include/base/cef_logging.h" #include "include/base/cef_scoped_ptr.h" #include "include/cef_app.h" @@ -23,14 +22,16 @@ #include "include/cef_frame.h" #include "include/wrapper/cef_helpers.h" #include "cefclient/cefclient_osr_widget_gtk.h" +#include "cefclient/client_app.h" #include "cefclient/client_handler.h" #include "cefclient/client_switches.h" +#include "cefclient/main_context_impl.h" #include "cefclient/main_message_loop_std.h" #include "cefclient/resource.h" #include "cefclient/test_runner.h" // The global ClientHandler reference. -extern CefRefPtr g_handler; +CefRefPtr g_handler; namespace { @@ -88,7 +89,7 @@ gboolean delete_event(GtkWidget* widget, GdkEvent* event, } void TerminationSignalHandler(int signatl) { - AppQuitMessageLoop(); + client::MainMessageLoop::Get()->Quit(); } void VboxSizeAllocated(GtkWidget* widget, @@ -332,13 +333,14 @@ int main(int argc, char* argv[]) { if (exit_code >= 0) return exit_code; - // Parse command line arguments. - AppInitCommandLine(argc, argv_copy); + // Create the main context object. + scoped_ptr context( + new client::MainContextImpl(argc, argv)); CefSettings settings; // Populate the settings based on command line arguments. - AppGetSettings(settings); + context->PopulateSettings(&settings); // Install xlib error handlers so that the application won't be terminated // on non-fatal errors. @@ -437,14 +439,15 @@ int main(int argc, char* argv[]) { CefBrowserSettings browserSettings; // Populate the browser settings based on command line arguments. - AppGetBrowserSettings(browserSettings); + context->PopulateBrowserSettings(&browserSettings); - if (AppIsOffScreenRenderingEnabled()) { - CefRefPtr cmd_line = AppGetCommandLine(); + CefRefPtr command_line = + CefCommandLine::GetGlobalCommandLine(); + if (command_line->HasSwitch(cefclient::kOffScreenRenderingEnabled)) { const bool transparent = - cmd_line->HasSwitch(cefclient::kTransparentPaintingEnabled); + command_line->HasSwitch(cefclient::kTransparentPaintingEnabled); const bool show_update_rect = - cmd_line->HasSwitch(cefclient::kShowUpdateRect); + command_line->HasSwitch(cefclient::kShowUpdateRect); // Create the GTKGL surface. CefRefPtr osr_window = @@ -484,31 +487,9 @@ int main(int argc, char* argv[]) { // Shut down CEF. CefShutdown(); - // Release the |message_loop| object. + // Release objects in reverse order of creation. message_loop.reset(); + context.reset(); return result; } - -// Global functions - -std::string AppGetWorkingDirectory() { - char szWorkingDir[256]; - if (getcwd(szWorkingDir, sizeof(szWorkingDir) - 1) == NULL) { - szWorkingDir[0] = 0; - } else { - // Add trailing path separator. - size_t len = strlen(szWorkingDir); - szWorkingDir[len] = '/'; - szWorkingDir[len + 1] = 0; - } - return szWorkingDir; -} - -std::string AppGetDownloadPath(const std::string& file_name) { - return std::string(); -} - -void AppQuitMessageLoop() { - client::MainMessageLoop::Get()->Quit(); -} diff --git a/tests/cefclient/cefclient_mac.mm b/tests/cefclient/cefclient_mac.mm index 9db5a35d0..eff0cd7fc 100644 --- a/tests/cefclient/cefclient_mac.mm +++ b/tests/cefclient/cefclient_mac.mm @@ -5,21 +5,22 @@ #import #include -#include "cefclient/cefclient.h" #include "include/cef_app.h" #import "include/cef_application_mac.h" #include "include/cef_browser.h" #include "include/cef_frame.h" #include "cefclient/cefclient_osr_widget_mac.h" +#include "cefclient/client_app.h" #include "cefclient/client_handler.h" #include "cefclient/client_switches.h" +#include "cefclient/main_context_impl.h" #include "cefclient/main_message_loop_std.h" #include "cefclient/resource.h" #include "cefclient/resource_util.h" #include "cefclient/test_runner.h" // The global ClientHandler reference. -extern CefRefPtr g_handler; +CefRefPtr g_handler; class MainBrowserProvider : public OSRBrowserProvider { virtual CefRefPtr GetBrowser() { @@ -207,10 +208,12 @@ const int kWindowHeight = 600; if (g_handler.get()) { CefRefPtr browser = g_handler->GetBrowser(); if (browser.get()) { - if (AppIsOffScreenRenderingEnabled()) + if (CefCommandLine::GetGlobalCommandLine()->HasSwitch( + cefclient::kOffScreenRenderingEnabled)) { browser->GetHost()->SendFocusEvent(true); - else + } else { browser->GetHost()->SetFocus(true); + } } } } @@ -220,10 +223,12 @@ const int kWindowHeight = 600; if (g_handler.get()) { CefRefPtr browser = g_handler->GetBrowser(); if (browser.get()) { - if (AppIsOffScreenRenderingEnabled()) + if (CefCommandLine::GetGlobalCommandLine()->HasSwitch( + cefclient::kOffScreenRenderingEnabled)) { browser->GetHost()->SendFocusEvent(false); - else + } else { browser->GetHost()->SetFocus(false); + } } } } @@ -428,14 +433,15 @@ void AddMenuItem(NSMenu *menu, NSString* label, int idval) { CefBrowserSettings settings; // Populate the browser settings based on command line arguments. - AppGetBrowserSettings(settings); + client::MainContext::Get()->PopulateBrowserSettings(&settings); - if (AppIsOffScreenRenderingEnabled()) { - CefRefPtr cmd_line = AppGetCommandLine(); + CefRefPtr command_line = + CefCommandLine::GetGlobalCommandLine(); + if (command_line->HasSwitch(cefclient::kOffScreenRenderingEnabled)) { const bool transparent = - cmd_line->HasSwitch(cefclient::kTransparentPaintingEnabled); + command_line->HasSwitch(cefclient::kTransparentPaintingEnabled); const bool show_update_rect = - cmd_line->HasSwitch(cefclient::kShowUpdateRect); + command_line->HasSwitch(cefclient::kShowUpdateRect); CefRefPtr osr_window = OSRWindow::Create(&g_main_browser_provider, transparent, @@ -484,24 +490,20 @@ int main(int argc, char* argv[]) { CefMainArgs main_args(argc, argv); CefRefPtr app(new ClientApp); - // Execute the secondary process, if any. - int exit_code = CefExecuteProcess(main_args, app.get(), NULL); - if (exit_code >= 0) - return exit_code; - // Initialize the AutoRelease pool. NSAutoreleasePool* autopool = [[NSAutoreleasePool alloc] init]; // Initialize the ClientApplication instance. [ClientApplication sharedApplication]; - // Parse command line arguments. - AppInitCommandLine(argc, argv); + // Create the main context object. + scoped_ptr context( + new client::MainContextImpl(argc, argv)); CefSettings settings; // Populate the settings based on command line arguments. - AppGetSettings(settings); + context->PopulateSettings(&settings); // Create the main message loop object. scoped_ptr message_loop( @@ -525,41 +527,12 @@ int main(int argc, char* argv[]) { // Shut down CEF. CefShutdown(); - // Release the handler. + // Release objects in reverse order of creation. g_handler = NULL; - - // Release the delegate. [delegate release]; - - // Release the AutoRelease pool. - [autopool release]; - - // Release the |message_loop| object. message_loop.reset(); + context.reset(); + [autopool release]; return result; } - - -// Global functions - -std::string AppGetWorkingDirectory() { - char szWorkingDir[256]; - if (getcwd(szWorkingDir, sizeof(szWorkingDir) - 1) == NULL) { - szWorkingDir[0] = 0; - } else { - // Add trailing path separator. - size_t len = strlen(szWorkingDir); - szWorkingDir[len] = '/'; - szWorkingDir[len + 1] = 0; - } - return szWorkingDir; -} - -std::string AppGetDownloadPath(const std::string& file_name) { - return std::string(); -} - -void AppQuitMessageLoop() { - client::MainMessageLoop::Get()->Quit(); -} diff --git a/tests/cefclient/cefclient_osr_widget_mac.mm b/tests/cefclient/cefclient_osr_widget_mac.mm index 855de69e4..3b3850c3f 100644 --- a/tests/cefclient/cefclient_osr_widget_mac.mm +++ b/tests/cefclient/cefclient_osr_widget_mac.mm @@ -16,7 +16,6 @@ #include "include/cef_url.h" #include "include/wrapper/cef_helpers.h" #include "cefclient/bytes_write_handler.h" -#include "cefclient/cefclient.h" #include "cefclient/osrenderer.h" #include "cefclient/resource_util.h" diff --git a/tests/cefclient/cefclient_win.cc b/tests/cefclient/cefclient_win.cc index 08023353c..8ba2b99f6 100644 --- a/tests/cefclient/cefclient_win.cc +++ b/tests/cefclient/cefclient_win.cc @@ -2,8 +2,6 @@ // reserved. Use of this source code is governed by a BSD-style license that // can be found in the LICENSE file. -#include "cefclient/cefclient.h" - #include #include #include @@ -19,8 +17,10 @@ #include "include/cef_sandbox_win.h" #include "include/wrapper/cef_closure_task.h" #include "cefclient/cefclient_osr_widget_win.h" +#include "cefclient/client_app.h" #include "cefclient/client_handler.h" #include "cefclient/client_switches.h" +#include "cefclient/main_context_impl.h" #include "cefclient/main_message_loop_multithreaded_win.h" #include "cefclient/main_message_loop_std.h" #include "cefclient/resource.h" @@ -62,7 +62,7 @@ LRESULT CALLBACK FindProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); // The global ClientHandler reference. -extern CefRefPtr g_handler; +CefRefPtr g_handler; class MainBrowserProvider : public OSRBrowserProvider { virtual CefRefPtr GetBrowser() { @@ -98,8 +98,9 @@ int APIENTRY wWinMain(HINSTANCE hInstance, if (exit_code >= 0) return exit_code; - // Parse command line arguments. The passed in values are ignored on Windows. - AppInitCommandLine(0, NULL); + // Create the main context object. + scoped_ptr context( + new client::MainContextImpl(0, NULL)); CefSettings settings; @@ -108,7 +109,7 @@ int APIENTRY wWinMain(HINSTANCE hInstance, #endif // Populate the settings based on command line arguments. - AppGetSettings(settings); + context->PopulateSettings(&settings); // Create the main message loop object. scoped_ptr message_loop; @@ -142,8 +143,9 @@ int APIENTRY wWinMain(HINSTANCE hInstance, // Shut down CEF. CefShutdown(); - // Release the |message_loop| object. + // Release objects in reverse order of creation. message_loop.reset(); + context.reset(); return result; } @@ -220,7 +222,8 @@ static void SetFocusToBrowser(CefRefPtr browser) { if (!g_handler) return; - if (AppIsOffScreenRenderingEnabled()) { + if (CefCommandLine::GetGlobalCommandLine()->HasSwitch( + cefclient::kOffScreenRenderingEnabled)) { // Give focus to the OSR window. CefRefPtr osr_window = static_cast(g_handler->GetOSRHandler().get()); @@ -378,14 +381,15 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, CefBrowserSettings settings; // Populate the browser settings based on command line arguments. - AppGetBrowserSettings(settings); + client::MainContext::Get()->PopulateBrowserSettings(&settings); - if (AppIsOffScreenRenderingEnabled()) { - CefRefPtr cmd_line = AppGetCommandLine(); + CefRefPtr command_line = + CefCommandLine::GetGlobalCommandLine(); + if (command_line->HasSwitch(cefclient::kOffScreenRenderingEnabled)) { const bool transparent = - cmd_line->HasSwitch(cefclient::kTransparentPaintingEnabled); + command_line->HasSwitch(cefclient::kTransparentPaintingEnabled); const bool show_update_rect = - cmd_line->HasSwitch(cefclient::kShowUpdateRect); + command_line->HasSwitch(cefclient::kShowUpdateRect); CefRefPtr osr_window = OSRWindow::Create(&g_main_browser_provider, transparent, @@ -488,7 +492,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, // For off-screen browsers when the frame window is minimized set the // browser as hidden to reduce resource usage. - const bool offscreen = AppIsOffScreenRenderingEnabled(); + const bool offscreen = CefCommandLine::GetGlobalCommandLine()->HasSwitch( + cefclient::kOffScreenRenderingEnabled); if (offscreen) { CefRefPtr osr_window = static_cast(g_handler->GetOSRHandler().get()); @@ -627,37 +632,3 @@ INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { } return (INT_PTR)FALSE; } - - -// Global functions - -std::string AppGetWorkingDirectory() { - char szWorkingDir[MAX_PATH + 1]; - if (_getcwd(szWorkingDir, MAX_PATH) == NULL) { - szWorkingDir[0] = 0; - } else { - // Add trailing path separator. - size_t len = strlen(szWorkingDir); - szWorkingDir[len] = '\\'; - szWorkingDir[len + 1] = 0; - } - return szWorkingDir; -} - -std::string AppGetDownloadPath(const std::string& file_name) { - TCHAR szFolderPath[MAX_PATH]; - std::string path; - - // Save the file in the user's "My Documents" folder. - if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL | CSIDL_FLAG_CREATE, - NULL, 0, szFolderPath))) { - path = CefString(szFolderPath); - path += "\\" + file_name; - } - - return path; -} - -void AppQuitMessageLoop() { - client::MainMessageLoop::Get()->Quit(); -} diff --git a/tests/cefclient/client_handler.cc b/tests/cefclient/client_handler.cc index e538eddfc..81a858fc9 100644 --- a/tests/cefclient/client_handler.cc +++ b/tests/cefclient/client_handler.cc @@ -19,9 +19,10 @@ #include "include/cef_url.h" #include "include/wrapper/cef_closure_task.h" #include "include/wrapper/cef_stream_resource_handler.h" -#include "cefclient/cefclient.h" #include "cefclient/client_renderer.h" #include "cefclient/client_switches.h" +#include "cefclient/main_context.h" +#include "cefclient/main_message_loop.h" #include "cefclient/resource_util.h" #include "cefclient/test_runner.h" @@ -50,7 +51,8 @@ enum client_menu_ids { int ClientHandler::browser_count_ = 0; ClientHandler::ClientHandler() - : browser_id_(0), + : startup_url_(client::MainContext::Get()->GetMainURL()), + browser_id_(0), is_closing_(false), main_handle_(NULL), edit_handle_(NULL), @@ -58,7 +60,7 @@ ClientHandler::ClientHandler() forward_handle_(NULL), stop_handle_(NULL), reload_handle_(NULL), - console_log_file_(AppGetConsoleLogPath()), + console_log_file_(client::MainContext::Get()->GetConsoleLogPath()), first_console_message_(true), focus_on_editable_field_(false) { #if defined(OS_LINUX) @@ -70,12 +72,6 @@ ClientHandler::ClientHandler() // Read command line settings. CefRefPtr command_line = CefCommandLine::GetGlobalCommandLine(); - - if (command_line->HasSwitch(cefclient::kUrl)) - startup_url_ = command_line->GetSwitchValue(cefclient::kUrl); - if (startup_url_.empty()) - startup_url_ = "http://www.google.com/"; - mouse_cursor_change_disabled_ = command_line->HasSwitch(cefclient::kMouseCursorChangeDisabled); } @@ -204,7 +200,8 @@ void ClientHandler::OnBeforeDownload( CEF_REQUIRE_UI_THREAD(); // Continue the download and show the "Save As" dialog. - callback->Continue(AppGetDownloadPath(suggested_name), true); + callback->Continue( + client::MainContext::Get()->GetDownloadPath(suggested_name), true); } void ClientHandler::OnDownloadUpdated( @@ -407,7 +404,7 @@ void ClientHandler::OnBeforeClose(CefRefPtr browser) { message_router_ = NULL; // Quit the application message loop. - AppQuitMessageLoop(); + client::MainMessageLoop::Get()->Quit(); } } diff --git a/tests/cefclient/client_handler_mac.mm b/tests/cefclient/client_handler_mac.mm index ccd2419cb..8d461bf9f 100644 --- a/tests/cefclient/client_handler_mac.mm +++ b/tests/cefclient/client_handler_mac.mm @@ -7,7 +7,6 @@ #include "cefclient/client_handler.h" #include "include/cef_browser.h" #include "include/cef_frame.h" -#include "cefclient/cefclient.h" void ClientHandler::OnAddressChange(CefRefPtr browser, CefRefPtr frame, diff --git a/tests/cefclient/main_context.cc b/tests/cefclient/main_context.cc new file mode 100644 index 000000000..cd6f2b7e5 --- /dev/null +++ b/tests/cefclient/main_context.cc @@ -0,0 +1,31 @@ +// 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.h" + +namespace client { + +namespace { + +MainContext* g_main_context = NULL; + +} // namespace + +// static +MainContext* MainContext::Get() { + DCHECK(g_main_context); + return g_main_context; +} + +MainContext::MainContext() { + DCHECK(!g_main_context); + g_main_context = this; + +} + +MainContext::~MainContext() { + g_main_context = NULL; +} + +} // namespace client diff --git a/tests/cefclient/main_context.h b/tests/cefclient/main_context.h new file mode 100644 index 000000000..c158eebee --- /dev/null +++ b/tests/cefclient/main_context.h @@ -0,0 +1,47 @@ +// 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. + +#ifndef CEF_TESTS_CEFCLIENT_MAIN_CONTEXT_H_ +#define CEF_TESTS_CEFCLIENT_MAIN_CONTEXT_H_ + +#include + +#include "include/base/cef_ref_counted.h" +#include "include/internal/cef_types_wrappers.h" + +namespace client { + +// Used to store global context in the browser process. The methods of this +// class are thread-safe unless otherwise indicated. +class MainContext { + public: + // Returns the singleton instance of this object. + static MainContext* Get(); + + // Returns the full path to the console log file. + virtual std::string GetConsoleLogPath() = 0; + + // Returns the full path to |file_name|. + virtual std::string GetDownloadPath(const std::string& file_name) = 0; + + // Returns the app working directory including trailing path separator. + virtual std::string GetAppWorkingDirectory() = 0; + + // Returns the main application URL. + virtual std::string GetMainURL() = 0; + + // Populate |settings| based on command-line arguments. + virtual void PopulateSettings(CefSettings* settings) = 0; + virtual void PopulateBrowserSettings(CefBrowserSettings* settings) = 0; + + protected: + MainContext(); + virtual ~MainContext(); + + DISALLOW_COPY_AND_ASSIGN(MainContext); +}; + +} // namespace client + +#endif // CEF_TESTS_CEFCLIENT_MAIN_CONTEXT_H_ diff --git a/tests/cefclient/main_context_impl.cc b/tests/cefclient/main_context_impl.cc new file mode 100644 index 000000000..03fb401d4 --- /dev/null +++ b/tests/cefclient/main_context_impl.cc @@ -0,0 +1,63 @@ +// 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) { + // 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(cefclient::kUrl)) + main_url_ = command_line_->GetSwitchValue(cefclient::kUrl); + if (main_url_.empty()) + main_url_ = kDefaultUrl; +} + +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(cefclient::kMultiThreadedMessageLoop); +#endif + + CefString(&settings->cache_path) = + command_line_->GetSwitchValue(cefclient::kCachePath); + + if (command_line_->HasSwitch(cefclient::kOffScreenRenderingEnabled)) + settings->windowless_rendering_enabled = true; +} + +void MainContextImpl::PopulateBrowserSettings(CefBrowserSettings* settings) { + if (command_line_->HasSwitch(cefclient::kOffScreenFrameRate)) { + settings->windowless_frame_rate = atoi(command_line_-> + GetSwitchValue(cefclient::kOffScreenFrameRate).ToString().c_str()); + } +} + +} // namespace client diff --git a/tests/cefclient/main_context_impl.h b/tests/cefclient/main_context_impl.h new file mode 100644 index 000000000..dd2619c04 --- /dev/null +++ b/tests/cefclient/main_context_impl.h @@ -0,0 +1,42 @@ +// 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. + +#ifndef CEF_TESTS_CEFCLIENT_MAIN_CONTEXT_IMPL_H_ +#define CEF_TESTS_CEFCLIENT_MAIN_CONTEXT_IMPL_H_ + +#include "include/base/cef_scoped_ptr.h" +#include "include/cef_command_line.h" +#include "cefclient/main_context.h" + +namespace client { + +// Used to store global context in the browser process. +class MainContextImpl : public MainContext { + public: + MainContextImpl(int argc, + const char* const* argv); + + // MainContext members. + std::string GetConsoleLogPath() OVERRIDE; + std::string GetDownloadPath(const std::string& file_name) OVERRIDE; + std::string GetAppWorkingDirectory() OVERRIDE; + std::string GetMainURL() OVERRIDE; + void PopulateSettings(CefSettings* settings) OVERRIDE; + void PopulateBrowserSettings(CefBrowserSettings* settings) OVERRIDE; + + private: + // Allow deletion via scoped_ptr only. + friend struct base::DefaultDeleter; + + ~MainContextImpl() {} + + CefRefPtr command_line_; + std::string main_url_; + + DISALLOW_COPY_AND_ASSIGN(MainContextImpl); +}; + +} // namespace client + +#endif // CEF_TESTS_CEFCLIENT_MAIN_CONTEXT_IMPL_H_ diff --git a/tests/cefclient/main_context_impl_posix.cc b/tests/cefclient/main_context_impl_posix.cc new file mode 100644 index 000000000..c4b75e6dd --- /dev/null +++ b/tests/cefclient/main_context_impl_posix.cc @@ -0,0 +1,28 @@ +// 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 + +namespace client { + +std::string MainContextImpl::GetDownloadPath(const std::string& file_name) { + return std::string(); +} + +std::string MainContextImpl::GetAppWorkingDirectory() { + char szWorkingDir[256]; + if (getcwd(szWorkingDir, sizeof(szWorkingDir) - 1) == NULL) { + szWorkingDir[0] = 0; + } else { + // Add trailing path separator. + size_t len = strlen(szWorkingDir); + szWorkingDir[len] = '/'; + szWorkingDir[len + 1] = 0; + } + return szWorkingDir; +} + +} // namespace client diff --git a/tests/cefclient/main_context_impl_win.cc b/tests/cefclient/main_context_impl_win.cc new file mode 100644 index 000000000..b4501c6bb --- /dev/null +++ b/tests/cefclient/main_context_impl_win.cc @@ -0,0 +1,39 @@ +// 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 +#include + +namespace client { + +std::string MainContextImpl::GetDownloadPath(const std::string& file_name) { + TCHAR szFolderPath[MAX_PATH]; + std::string path; + + // Save the file in the user's "My Documents" folder. + if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL | CSIDL_FLAG_CREATE, + NULL, 0, szFolderPath))) { + path = CefString(szFolderPath); + path += "\\" + file_name; + } + + return path; +} + +std::string MainContextImpl::GetAppWorkingDirectory() { + char szWorkingDir[MAX_PATH + 1]; + if (_getcwd(szWorkingDir, MAX_PATH) == NULL) { + szWorkingDir[0] = 0; + } else { + // Add trailing path separator. + size_t len = strlen(szWorkingDir); + szWorkingDir[len] = '\\'; + szWorkingDir[len + 1] = 0; + } + return szWorkingDir; +} + +} // namespace client diff --git a/tests/cefclient/process_helper_mac.cc b/tests/cefclient/process_helper_mac.cc index 405c5aa2e..add658caf 100644 --- a/tests/cefclient/process_helper_mac.cc +++ b/tests/cefclient/process_helper_mac.cc @@ -8,25 +8,6 @@ // a qualified path. #include "client_app.h" // NOLINT(build/include) -// Stub implementations. -std::string AppGetWorkingDirectory() { - return std::string(); -} -std::string AppGetConsoleLogPath() { - return std::string(); -} -std::string AppGetDownloadPath(const std::string& file_name) { - return std::string(); -} -CefWindowHandle AppGetMainWindowHandle() { - return NULL; -} -void AppQuitMessageLoop() { -} -bool AppIsOffScreenRenderingEnabled() { - return false; -} - // Process entry point. int main(int argc, char* argv[]) { CefMainArgs main_args(argc, argv); diff --git a/tests/cefclient/test_runner.cc b/tests/cefclient/test_runner.cc index 3862f9f84..2ef8aca05 100644 --- a/tests/cefclient/test_runner.cc +++ b/tests/cefclient/test_runner.cc @@ -12,8 +12,8 @@ #include "include/wrapper/cef_closure_task.h" #include "include/wrapper/cef_stream_resource_handler.h" #include "cefclient/binding_test.h" -#include "cefclient/cefclient.h" #include "cefclient/dialog_test.h" +#include "cefclient/main_context.h" #include "cefclient/resource.h" #include "cefclient/resource_util.h" #include "cefclient/scheme_test.h" @@ -186,7 +186,8 @@ void EndTracing(CefRefPtr browser) { void RunDialog() { static const char kDefaultFileName[] = "trace.txt"; - std::string path = AppGetDownloadPath(kDefaultFileName); + std::string path = + client::MainContext::Get()->GetDownloadPath(kDefaultFileName); if (path.empty()) path = kDefaultFileName;