mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Implement Views framework on Windows and Linux (issue #1749).
- Add Views header files in a new include/views directory. - Add initial top-level window (CefWindow), control (CefBrowserView, CefLabelButton, CefMenuButton, CefPanel, CefScrollView, CefTextfield) and layout (CefBoxLayout, CefFlowLayout) support. See libcef/browser/views/view_impl.h comments for implementation details. - Add Views example usage in cefclient and cefsimple and Views unit tests in cef_unittests. Pass the `--use-views` command-line flag to cefclient, cefsimple and cef_unittests to run using the Views framework instead of platform APIs. For cefclient and cefsimple this will create the browser window and all related functionality using the Views framework. For cef_unittests this will run all tests (except OSR tests) in a Views-based browser window. Views- specific unit tests (`--gtest_filter=Views*`) will be run even if the the `--use-views` flag is not specified. - Pass the `--hide-frame` command-line flag to cefclient to demo a frameless Views-based browser window. - Pass the `--hide-controls` command-line flag to cefclient to demo a browser window without top controls. This also works in non-Views mode. - Pass the `--enable-high-dpi-support` command-line flag to cef_unittests on Windows to test high-DPI support on a display that supports it. - Add CefImage for reading/writing image file formats. - Add CefBrowser::DownloadImage() for downloading image URLs as a CefImage representation. This is primarily for loading favicons. - Add CefMenuModel::CreateMenuModel() and CefMenuModelDelegate for creating custom menus. This is primarily for use with CefMenuButton. - Add CefBrowser::TryCloseBrowser() helper for closing a browser. Also improve related documentation in cef_life_span_handler.h. - Rename cef_page_range_t to cef_range_t. It is now also used by CefTextfield. - Remove CefLifeSpanHandler::RunModal() which is never called. - Add draggable regions example to cefclient.
This commit is contained in:
@@ -69,7 +69,9 @@ class CefLifeSpanHandler : public virtual CefBase {
|
||||
// browser return true. The |client| and |settings| values will default to the
|
||||
// source browser's values. If the |no_javascript_access| value is set to
|
||||
// false the new browser will not be scriptable and may not be hosted in the
|
||||
// same renderer process as the source browser.
|
||||
// same renderer process as the source browser. Any modifications to
|
||||
// |windowInfo| will be ignored if the parent browser is wrapped in a
|
||||
// CefBrowserView.
|
||||
///
|
||||
/*--cef(optional_param=target_url,optional_param=target_frame_name)--*/
|
||||
virtual bool OnBeforePopup(CefRefPtr<CefBrowser> browser,
|
||||
@@ -87,55 +89,80 @@ class CefLifeSpanHandler : public virtual CefBase {
|
||||
}
|
||||
|
||||
///
|
||||
// Called after a new browser is created.
|
||||
// Called after a new browser is created. This callback will be the first
|
||||
// notification that references |browser|.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) {}
|
||||
|
||||
///
|
||||
// Called when a modal window is about to display and the modal loop should
|
||||
// begin running. Return false to use the default modal loop implementation or
|
||||
// true to use a custom implementation.
|
||||
///
|
||||
/*--cef()--*/
|
||||
virtual bool RunModal(CefRefPtr<CefBrowser> browser) { return false; }
|
||||
|
||||
///
|
||||
// Called when a browser has recieved a request to close. This may result
|
||||
// directly from a call to CefBrowserHost::CloseBrowser() or indirectly if the
|
||||
// browser is a top-level OS window created by CEF and the user attempts to
|
||||
// close the window. This method will be called after the JavaScript
|
||||
// 'onunload' event has been fired. It will not be called for browsers after
|
||||
// the associated OS window has been destroyed (for those browsers it is no
|
||||
// longer possible to cancel the close).
|
||||
// directly from a call to CefBrowserHost::*CloseBrowser() or indirectly if
|
||||
// the browser is parented to a top-level window created by CEF and the user
|
||||
// attempts to close that window (by clicking the 'X', for example). The
|
||||
// DoClose() method will be called after the JavaScript 'onunload' event has
|
||||
// been fired.
|
||||
//
|
||||
// If CEF created an OS window for the browser returning false will send an OS
|
||||
// close notification to the browser window's top-level owner (e.g. WM_CLOSE
|
||||
// on Windows, performClose: on OS-X and "delete_event" on Linux). If no OS
|
||||
// window exists (window rendering disabled) returning false will cause the
|
||||
// browser object to be destroyed immediately. Return true if the browser is
|
||||
// parented to another window and that other window needs to receive close
|
||||
// notification via some non-standard technique.
|
||||
// An application should handle top-level owner window close notifications by
|
||||
// calling CefBrowserHost::TryCloseBrowser() or
|
||||
// CefBrowserHost::CloseBrowser(false) instead of allowing the window to close
|
||||
// immediately (see the examples below). This gives CEF an opportunity to
|
||||
// process the 'onbeforeunload' event and optionally cancel the close before
|
||||
// DoClose() is called.
|
||||
//
|
||||
// If an application provides its own top-level window it should handle OS
|
||||
// close notifications by calling CefBrowserHost::CloseBrowser(false) instead
|
||||
// of immediately closing (see the example below). This gives CEF an
|
||||
// opportunity to process the 'onbeforeunload' event and optionally cancel the
|
||||
// close before DoClose() is called.
|
||||
// When windowed rendering is enabled CEF will internally create a window or
|
||||
// view to host the browser. In that case returning false from DoClose() will
|
||||
// send the standard close notification to the browser's top-level owner
|
||||
// window (e.g. WM_CLOSE on Windows, performClose: on OS X, "delete_event" on
|
||||
// Linux or CefWindowDelegate::CanClose() callback from Views). If the
|
||||
// browser's host window/view has already been destroyed (via view hierarchy
|
||||
// tear-down, for example) then DoClose() will not be called for that browser
|
||||
// since is no longer possible to cancel the close.
|
||||
//
|
||||
// The CefLifeSpanHandler::OnBeforeClose() method will be called immediately
|
||||
// before the browser object is destroyed. The application should only exit
|
||||
// after OnBeforeClose() has been called for all existing browsers.
|
||||
// When windowed rendering is disabled returning false from DoClose() will
|
||||
// cause the browser object to be destroyed immediately.
|
||||
//
|
||||
// If the browser represents a modal window and a custom modal loop
|
||||
// implementation was provided in CefLifeSpanHandler::RunModal() this callback
|
||||
// should be used to restore the opener window to a usable state.
|
||||
// If the browser's top-level owner window requires a non-standard close
|
||||
// notification then send that notification from DoClose() and return true.
|
||||
//
|
||||
// By way of example consider what should happen during window close when the
|
||||
// browser is parented to an application-provided top-level OS window.
|
||||
// 1. User clicks the window close button which sends an OS close
|
||||
// notification (e.g. WM_CLOSE on Windows, performClose: on OS-X and
|
||||
// "delete_event" on Linux).
|
||||
// The CefLifeSpanHandler::OnBeforeClose() method will be called after
|
||||
// DoClose() (if DoClose() is called) and immediately before the browser
|
||||
// object is destroyed. The application should only exit after OnBeforeClose()
|
||||
// has been called for all existing browsers.
|
||||
//
|
||||
// The below examples describe what should happen during window close when the
|
||||
// browser is parented to an application-provided top-level window.
|
||||
//
|
||||
// Example 1: Using CefBrowserHost::TryCloseBrowser(). This is recommended for
|
||||
// clients using standard close handling and windows created on the browser
|
||||
// process UI thread.
|
||||
// 1. User clicks the window close button which sends a close notification to
|
||||
// the application's top-level window.
|
||||
// 2. Application's top-level window receives the close notification and
|
||||
// calls TryCloseBrowser() (which internally calls CloseBrowser(false)).
|
||||
// TryCloseBrowser() returns false so the client cancels the window close.
|
||||
// 3. JavaScript 'onbeforeunload' handler executes and shows the close
|
||||
// confirmation dialog (which can be overridden via
|
||||
// CefJSDialogHandler::OnBeforeUnloadDialog()).
|
||||
// 4. User approves the close.
|
||||
// 5. JavaScript 'onunload' handler executes.
|
||||
// 6. CEF sends a close notification to the application's top-level window
|
||||
// (because DoClose() returned false by default).
|
||||
// 7. Application's top-level window receives the close notification and
|
||||
// calls TryCloseBrowser(). TryCloseBrowser() returns true so the client
|
||||
// allows the window close.
|
||||
// 8. Application's top-level window is destroyed.
|
||||
// 9. Application's OnBeforeClose() handler is called and the browser object
|
||||
// is destroyed.
|
||||
// 10. Application exits by calling CefQuitMessageLoop() if no other browsers
|
||||
// exist.
|
||||
//
|
||||
// Example 2: Using CefBrowserHost::CloseBrowser(false) and implementing the
|
||||
// DoClose() callback. This is recommended for clients using non-standard
|
||||
// close handling or windows that were not created on the browser process UI
|
||||
// thread.
|
||||
// 1. User clicks the window close button which sends a close notification to
|
||||
// the application's top-level window.
|
||||
// 2. Application's top-level window receives the close notification and:
|
||||
// A. Calls CefBrowserHost::CloseBrowser(false).
|
||||
// B. Cancels the window close.
|
||||
@@ -147,12 +174,12 @@ class CefLifeSpanHandler : public virtual CefBase {
|
||||
// 6. Application's DoClose() handler is called. Application will:
|
||||
// A. Set a flag to indicate that the next close attempt will be allowed.
|
||||
// B. Return false.
|
||||
// 7. CEF sends an OS close notification.
|
||||
// 8. Application's top-level window receives the OS close notification and
|
||||
// 7. CEF sends an close notification to the application's top-level window.
|
||||
// 8. Application's top-level window receives the close notification and
|
||||
// allows the window to close based on the flag from #6B.
|
||||
// 9. Browser OS window is destroyed.
|
||||
// 10. Application's CefLifeSpanHandler::OnBeforeClose() handler is called and
|
||||
// the browser object is destroyed.
|
||||
// 9. Application's top-level window is destroyed.
|
||||
// 10. Application's OnBeforeClose() handler is called and the browser object
|
||||
// is destroyed.
|
||||
// 11. Application exits by calling CefQuitMessageLoop() if no other browsers
|
||||
// exist.
|
||||
///
|
||||
@@ -162,9 +189,8 @@ class CefLifeSpanHandler : public virtual CefBase {
|
||||
///
|
||||
// Called just before a browser is destroyed. Release all references to the
|
||||
// browser object and do not attempt to execute any methods on the browser
|
||||
// object after this callback returns. If this is a modal window and a custom
|
||||
// modal loop implementation was provided in RunModal() this callback should
|
||||
// be used to exit the custom modal loop. See DoClose() documentation for
|
||||
// object after this callback returns. This callback will be the last
|
||||
// notification that references |browser|. See DoClose() documentation for
|
||||
// additional usage information.
|
||||
///
|
||||
/*--cef()--*/
|
||||
|
Reference in New Issue
Block a user