--- /dev/null
+// 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 "tests/cefsimple/simple_app.h"
+
+#include <string>
+
+#include "tests/cefsimple/simple_handler.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"
+
+namespace {
+
+// When using the Views framework this object provides the delegate
+// implementation for the CefWindow that hosts the Views-based browser.
+class SimpleWindowDelegate : public CefWindowDelegate {
+ public:
+ explicit SimpleWindowDelegate(CefRefPtr<CefBrowserView> browser_view)
+ : browser_view_(browser_view) {
+ }
+
+ void OnWindowCreated(CefRefPtr<CefWindow> window) OVERRIDE {
+ // Add the browser view and show the window.
+ window->AddChildView(browser_view_);
+ window->Show();
+
+ // Give keyboard focus to the browser view.
+ browser_view_->RequestFocus();
+ }
+
+ void OnWindowDestroyed(CefRefPtr<CefWindow> window) OVERRIDE {
+ browser_view_ = NULL;
+ }
+
+ bool CanClose(CefRefPtr<CefWindow> window) OVERRIDE {
+ // Allow the window to close if the browser says it's OK.
+ CefRefPtr<CefBrowser> browser = browser_view_->GetBrowser();
+ if (browser)
+ return browser->GetHost()->TryCloseBrowser();
+ return true;
+ }
+
+ private:
+ CefRefPtr<CefBrowserView> browser_view_;
+
+ IMPLEMENT_REFCOUNTING(SimpleWindowDelegate);
+ DISALLOW_COPY_AND_ASSIGN(SimpleWindowDelegate);
+};
+
+} // namespace
+
+SimpleApp::SimpleApp() {
+}
+
+void SimpleApp::OnContextInitialized() {
+ CEF_REQUIRE_UI_THREAD();
+
+ CefRefPtr<CefCommandLine> command_line =
+ CefCommandLine::GetGlobalCommandLine();
+
+#if defined(OS_WIN) || defined(OS_LINUX)
+ // Create the browser using the Views framework if "--use-views" is specified
+ // via the command-line. Otherwise, create the browser using the native
+ // platform framework. The Views framework is currently only supported on
+ // Windows and Linux.
+ const bool use_views = command_line->HasSwitch("use-views");
+#else
+ const bool use_views = false;
+#endif
+
+ // SimpleHandler implements browser-level callbacks.
+ CefRefPtr<SimpleHandler> handler(new SimpleHandler(use_views));
+
+ // Specify CEF browser settings here.
+ CefBrowserSettings browser_settings;
+
+ std::string url;
+
+ // Check if a "--url=" value was provided via the command-line. If so, use
+ // that instead of the default URL.
+ url = command_line->GetSwitchValue("url");
+ if (url.empty())
+ url = "http://www.google.com";
+
+ if (use_views) {
+ // Create the BrowserView.
+ CefRefPtr<CefBrowserView> browser_view = CefBrowserView::CreateBrowserView(
+ handler, url, browser_settings, NULL, NULL);
+
+ // Create the Window. It will show itself after creation.
+ CefWindow::CreateTopLevelWindow(new SimpleWindowDelegate(browser_view));
+ } else {
+ // Information used when creating the native window.
+ CefWindowInfo window_info;
+
+#if defined(OS_WIN)
+ // On Windows we need to specify certain flags that will be passed to
+ // CreateWindowEx().
+ window_info.SetAsPopup(NULL, "cefsimple");
+#endif
+
+ // Create the first browser window.
+ CefBrowserHost::CreateBrowser(window_info, handler, url, browser_settings,
+ NULL);
+ }
+}