- Exclude platform-specific includes (anything in < >) from the
clang preprocessor by using `!defined(GENERATING_CEF_API_HASH)`
in CEF header files.
- Define "target platforms" by passing platform- and architecture-
specific ifdefs to the clang preprocessor. Grep for `defined(OS_`
to identify headers that require target platform processing, and
then process for each target as the platform-specific API hash
contribution.
- Delete the univeral hash which is no longer a useful concept.
- Use C++11 using directive for constructor/operator= inheritance.
This is a behavioral no-op.
- Remove CefStructBase virtual destructor to reduce object size. This
is safe because CefStructBase is not deleted polymorphically.
Shipping both snapshot_blob.bin and v8_context_snapshot.bin is
unnecessary, and v8_context_snapshot.bin is available on all
supported platforms. Chrome stopped shipping snapshot_blob.bin
in https://crrev.com/b550792f0f (~M66).
API versioning requires that enumerations end with a count value
(`*_NUM_VALUES`) and structs begin with a size value (`size_t size`).
Wrapper templates are updated to support structs with different size
values indicating different versions.
To test:
Run `ceftests --gtest_filter=ApiVersionTest.StructVersion*`
Ignore multiple calls to OnContextCreated when the DevTools window
is open.
Simplify the related implementation in MessageListenerCallbackImpl
(should be a behavioral no-op).
- Generated files are now created when running cef_create_projects or
the new version_manager.py tool. These files are still created in the
cef/ source tree (same location as before) but Git ignores them due to
the generated .gitignore file.
- API hashes are committed to Git as a new cef_api_versions.json file.
This file is used for both code generation and CEF version calculation
(replacing the previous usage of cef_api_hash.h for this purpose).
It will be updated by the CEF admin before merging breaking API
changes upstream.
- As an added benefit to the above, contributor PRs will no longer
contain generated code that is susceptible to frequent merge conflicts.
- From a code generation perspective, the main difference is that we now
use versioned structs (e.g. cef_browser_0_t instead of cef_browser_t)
on the libcef (dll/framework) side. Most of the make_*.py tool changes
are related to supporting this.
- From the client perspective, you can now define CEF_API_VERSION in the
project configuration (or get CEF_EXPERIMENTAL by default). This
define will change the API exposed in CEF’s include/ and include/capi
header files. All client-side targets including libcef_dll_wrapper
will need be recompiled when changing this define.
- Examples of the new API-related define usage are provided in
cef_api_version_test.h, api_version_test_impl.cc and
api_version_unittest.cc.
To test:
- Run `ceftests --gtest_filter=ApiVersionTest.*`
- Add `cef_api_version=13300` to GN_DEFINES. Re-run configure, build and
ceftests steps.
- Repeat with 13301, 13302, 13303 (all supported test versions).
- Move frame attachment from RenderFrameCreated to
DidCommitProvisionalLoad. This has a number of advantages:
- Significantly reduces the frequency of disconnects by avoiding
the GetInterface/DidCommitNavigation race condition.
- Stops connecting temporary frames (created during cross-origin
navigation), making callback behavior more consistent.
- Split frame detach and destruction notifications into separate
callbacks. OnFrameDetached now reflects a potentially recoverable
state. Add a new OnFrameDestroyed callback for the unrecoverable
destruction state.
- Use ResetWithReason to report intentional browser side disconnects of
existing Mojo connections. Don't retry for those disconnects.
- Add set_disconnect_with_reason_and_result_handler in Chromium/Mojo to
expose the MojoResult code for failed connections, allowing
identification of connections that are intentionally unbound on the
browser side.
- Optimize initial reconnect delay for known disconnect cases such as
navigation-related and bfcache changes.
- Remove connection timeout and increase total connection deadline by
100% to further reduce crash rates on slower machines.
- Only fail fatally for main frames (not sub-frames) in cases where the
connection fails or disconnects for unknown reasons.
- Improve connection debug logging when running with
`--enable-logging --vmodule=*frame*=1 --log-file=C:\temp\log.txt`
Requests that any state restoration archive be created with secure
encoding (macOS 12+ only). See https://crrev.com/c737387656 for
details. This also fixes an issue with macOS default behavior
incorrectly restoring windows after hard reset (holding down the
power button).
The OnFrameAttached callback relies on a round-trip to the
renderer process and may not be synchronized with OnLoadStart/
OnLoadEnd/OnMainFrameChanged callbacks.
Pass a new |popup_id| parameter to OnBeforePopup and call a new
OnBeforePopupAborted callback if the popup is aborted before
OnAfterCreated is called for the popup browser. Add new
CefBrowserHost::GetBrowserByIdentifier and GetOpenerIdentifier
methods to assist with retrieval of associated browsers.
In cefclient, clean up state when a popup is aborted and close
any associated popup browsers when the opener browser is closed.
This also works when running with `--use-default-popup`.
Fix implementation of CefBrowserView::RequestFocus for Chrome style
browsers. Match Alloy style behavior of requesting browser focus
(calling OnSetFocus) after initial navigation. Add CefView::HasFocus
and CefWindow::GetFocusedView that can be used in combination with
CefWindow::IsActive to determine global keyboard focus.
Update sample applications for the new behavior.
In cefclient:
- Browser receives initial focus via ViewsWindow::RequestBrowserFocus.
- When running with `--show-overlay-browser` (see #3790):
- Give initial focus to the overlay browser.
- Change the overlay popout shortcut to CTRL+SHIFT+O to avoid
assigning focus to the menu in the main window.
- Switching from overlay in the main window to popout browser
window will give focus to the popout browser.
- Switching from popout browser to overlay will leave current focus
unchanged (e.g. in the overlay browser, or somewhere else). User
gesture to activate the main window may be required on Mac/Linux.
- When running with `--no-active` don't give initial focus to either
browser.
In cefsimple:
- Browser receives initial focus via default handling.