| // 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 "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" |
| #include "tests/cefsimple/simple_handler.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_ = nullptr; |
| } |
| |
| 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; |
| } |
| |
| CefSize GetPreferredSize(CefRefPtr<CefView> view) OVERRIDE { |
| return CefSize(800, 600); |
| } |
| |
| private: |
| CefRefPtr<CefBrowserView> browser_view_; |
| |
| IMPLEMENT_REFCOUNTING(SimpleWindowDelegate); |
| DISALLOW_COPY_AND_ASSIGN(SimpleWindowDelegate); |
| }; |
| |
| class SimpleBrowserViewDelegate : public CefBrowserViewDelegate { |
| public: |
| SimpleBrowserViewDelegate() {} |
| |
| bool OnPopupBrowserViewCreated(CefRefPtr<CefBrowserView> browser_view, |
| CefRefPtr<CefBrowserView> popup_browser_view, |
| bool is_devtools) OVERRIDE { |
| // Create a new top-level Window for the popup. It will show itself after |
| // creation. |
| CefWindow::CreateTopLevelWindow( |
| new SimpleWindowDelegate(popup_browser_view)); |
| |
| // We created the Window. |
| return true; |
| } |
| |
| private: |
| IMPLEMENT_REFCOUNTING(SimpleBrowserViewDelegate); |
| DISALLOW_COPY_AND_ASSIGN(SimpleBrowserViewDelegate); |
| }; |
| |
| } // 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, nullptr, nullptr, |
| new SimpleBrowserViewDelegate()); |
| |
| // 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, |
| nullptr, nullptr); |
| } |
| } |