Register CEF profile preferences after Chromium keyed-service
preferences. Add GetDefaultPreference and SetDefaultPreference
to CefPreferenceRegistrar so applications can inspect, override,
and restore registered defaults.
Use an available handler from the same browser context when worker
requests have no matching frame or process handler, for example
after page navigation or close.
Close widgets owned by ChromeBrowserWidget from
OnNativeWidgetDestroying while the native ownership graph is still
available. This prevents popup widgets from outliving Browser state during
native-window-driven shutdown.
Add Chrome-style ceftests for JavaScript, password-save, and synthetic owned
widgets. Confirm that each widget exists before closing the main window and
verify deterministic destruction ordering for the synthetic case. Reset the
password dismissal statistics before loading the password form so repeated
test runs continue to exercise the save-password widget.
`wWinMain` is the wide-character entry point -- `lpCmdLine` is always
`wchar_t*`. Using `LPTSTR` (a TCHAR-mapped type) creates a type mismatch
at the DLL boundary when client DLLs are built without `UNICODE`
defined.
Add a shared CEF installer that downloads, verifies, and manages CEF
binary distributions on Windows. The installer is embedded in
application bootstrap binaries and resolves the correct CEF version
from a CDN manifest based on each application's version and ABI
compatibility requirements.
Key components:
- CDN manifest parsing and version resolution
- WinHTTP-based download with SHA-1/SHA-256 integrity verification
- Authenticode catalog (.cat) signature verification
- Parallel XZ decompression for fast archive extraction
- Per-version metadata (cef_version.json) with full version tracking
- Shared installation database for multi-app version management
- Version pruning to reclaim disk space from unused versions
- Revocation list support (compiled-in baseline + CDN delta)
- Progress UI with WM_COPYDATA-based cancellation
- Bundled CEF fallback for offline/CDN-failure scenarios
Prefer the charset declared in the Content-Type response header, falling
back to the intl.charset_default preference. Adds the experimental
CefTestServerConnection::SendHttpResponseWithRawHeaders API so tests can
send raw non-UTF-8 header bytes, with coverage for both charset sources
and the new API.
Fix build failures that occur in a Japanese‑locale MSVC environment due to
UTF‑8 characters inside comments. Replaces em-dash with ASCII in headers
and adds BOM to test files where required.
Adds role-aware collapsing of off-screen nodes to CDP accessibility tree
serialization (Accessibility.getFullAXTree). When enabled, off-screen
landmarks and headings are serialized as summaries (role + name only)
and other off-screen nodes are pruned. Position:fixed/sticky descendants
of off-screen parents are still discovered and fully serialized.
Reduces snapshot size for AI agents using Playwright ariaSnapshot().
Platform screen readers are unaffected — they use a separate code path.
CDP nodesUpdated events are suppressed when active.
The setting is a per-browser CefBrowserSettings field threaded through
WebPreferences, with a runtime override via SetAxViewportCollapse().
Both APIs are guarded with CEF_API_ADDED(CEF_EXPERIMENTAL).
Introduce a hash of Chromium sandbox interface files to detect
incompatibilities between bootstrap.exe and libcef.dll at runtime,
allowing the strict version check to be skipped when interfaces match.
Core implementation:
- Add sandbox_compat_hash.py to calculate SHA-256 of interface files
(chrome_elf_main.h, sandbox.h, sandbox_types.h, sandbox.mojom)
- Update make_version_header.py to generate CEF_SANDBOX_COMPAT_HASH
- Add sandbox_compat_hash field to cef_version_info_t struct
- Add entry 3 to cef_api_hash() for retrieving the hash
- Compare hashes in cef_scoped_library_loader_win.cc during load
Version management:
- Include sandbox_compat in cef_api_versions.json and cef_api_untracked.json
- Compare sandbox_compat for untracked versions (NEXT, EXPERIMENTAL)
- Trigger version bumps when sandbox interface files change
Build automation:
- Update cefbuilds JSON builder to include sandbox_compat in version records
- Run version_manager.py -a after Chromium updates on release branches
to auto-detect hash changes and add new API versions
On GCC 10's libstdc++, instantiating std::pointer_traits<P> for
non-pointer-like types triggers a static_assert that cannot be caught
by SFINAE or requires clauses. Fix by checking for P::element_type or
p.operator->() instead of std::pointer_traits<P>::to_address(p), and
using if constexpr to dispatch appropriately in the function body.
The friend template comparison operators (operator== and operator<=>) were
accessing rhs.ptr_ directly, but when comparing scoped_refptr<T> with
scoped_refptr<U> (different types), the friend function is only a friend of
scoped_refptr<T>, not scoped_refptr<U>. GCC correctly rejects this as ptr_
is protected.
Use get() for the rhs operand to avoid the protected member access issue.
Extract the nested `requires requires` expression in HasOverloadedCallOp
into a separate helper concept IsInvocableWithBoundArgs. GCC 10 has
incomplete C++20 support and crashes with an ICE in tsubst_pack_expansion
when processing nested requires expressions.
Suppress MSVC warning C4003 "not enough arguments for function-like
macro invocation" around macro calls with empty arguments in
cef_bind_internal.h. This is valid C++11+ syntax but MSVC warns about
it, causing build failures when warnings are treated as errors.