mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			135 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// 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);
 | 
						|
  }
 | 
						|
}
 |