- Support OnPaint uploads and copy shared textures into owned storage
before OnAcceleratedPaint returns.
- Redraw the last frame on resize/expose.
- Remove the legacy OpenGL renderer and Windows GL handler.
- Preserve cached images on allocation failure and validate bounds.
- Add OsrRendererD3D11Test unit tests, ported from the Metal/EGL tests.
Tested on Windows 11 x64:
- cefclient resize and select popups work in all eight combinations
of software/shared textures, internal/external begin frames, and
single/multi-threaded message loops.
- ceftests: 37 renderer tests pass on hardware/WARP; one allocation
failure test skips after the driver accepts its oversized descriptor
The GTK OSR window enabled external BeginFrames but never called
CefBrowserHost::SendExternalBeginFrame, so nothing was painted. Add a
UI thread timer at the windowless frame rate, matching the Windows and
macOS implementations.
- Add OsrRendererGl, a shared OpenGL 3.3 renderer with DMA-BUF import,
and load EGL/GL at runtime with no new build dependencies.
- Render via GtkGLArea on Wayland and an EGL window surface on X11.
- Redraw the last frame on resize/expose, matching the Metal renderer.
- Exit at startup if OSR is enabled and EGL is unavailable.
- Add OsrRendererGlTest unit tests, ported from the Metal tests.
Tested on a Linux VM (VMware SVGA3D, Mesa 23.2, GNOME Wayland/Xwayland):
- cefclient OSR software and shared-texture (DMA-BUF) rendering on
Wayland (GtkGLArea) and X11 (EGL window surface), including resize,
select popups, cursors, --multi-threaded-message-loop and
--transparent-painting-enabled. Shared texture runs use
--ignore-gpu-blocklist (VMware is blocklisted).
- ceftests: new OsrRendererGlTest (12 tests, using GBM DMA-BUFs) and
all existing OSRTest tests pass.
- Missing libEGL: cefclient exits at startup with an error and
OsrRendererGlTest skips.
- Fail at startup when --use-native is used with Wayland
(unsupported, see #2804).
- Remove X11 runtime dependencies from the OSR path.
- Match the GDK backend to the Ozone platform.
- Keep GDK OpenGL enabled with OSR by presetting GDK_GL (see
https://crrev.com/7c29ce9003d87).
- Share IsRunningOnWayland() between cefclient and ceftests and
match Chromium detection logic.
Shared-texture OSR with OnAcceleratedPaint only needs exportable native
handles. Preferring kPreferMappableSharedImage forces Linux into
SCANOUT_CPU_READ_WRITE / GBM_BO_USE_LINEAR, which breaks
GPU rendering on NVIDIA. Switch to kPreferSharedImageWithNativeHandle
so Chromium can allocate SCANOUT buffers and still export DMA-BUF /
DXGI / IOSurface handles.
ui::KeyboardCode became a uint8_t on Windows in Chromium 148. A
character event carries its character in CefKeyEvent::windows_key_code,
so the ui::KeyEvent built from it keeps only the low byte in its key
code, and the one-argument NativeWebKeyboardEvent constructor copies
that key code into the web event. For characters whose low byte is 0x08
or 0x1B (e.g. U+041B Л, U+0408 Ј, U+011B ě) the web event then carries
VK_BACK/VK_ESCAPE, and WebFrameWidgetImpl::HandleCharEvent drops it
because WebKeyboardEvent::IsCharacterKey() is false for those codes.
Use the two-argument constructor for KEYEVENT_CHAR, as
RenderWidgetHostViewAura::InsertChar does for windowed browsers, so that
windows_key_code carries the full character.
Suppress the opening release when a popup overlaps the pointer, even
when cefclient has not repositioned it. Previously, that release could
select an option and immediately close the menu.
Report the widget's actual focus state and route focus requests through
CefBrowserHost::SetFocus so client callbacks can accept or cancel them.
This allows select popups to open after cross-site link navigation.
Add regression coverage for main-frame and cross-origin iframe popups
and client focus cancellation, with BFCache enabled and disabled.
Set should_disable_external_popups in web preferences instead of
configuring the renderer WebView directly. This prevents preference
updates from restoring native menus after history navigation.
Remove the obsolete renderer override and add regression coverage for
main-frame and cross-origin iframe select popups with BFCache enabled
and disabled, plus client cancellation of focus requests.
Preserve existing opaque origins in the custom-scheme security policy
patch instead of deriving a new origin. This keeps srcdoc frames'
inherited origins consistent between the browser and renderer while
retaining distinct origins for sandboxed frames.
Add regression coverage for data URLs, document-written about:blank,
HTTPS, and nested data frames, including sandbox isolation. Disable
the sandboxed initial about:blank case pending resolution of
https://crbug.com/570981950.
Initialize the process command-line singleton before sandbox setup,
logging, and installer dispatch, and reuse it for argument parsing.
Early initialization is required by content::InitializeSandboxInfo
starting in M156.
Scope an AtExitManager around client execution so verbose startup
metrics can register shutdown callbacks without overlapping
installer managers.
With multi-threaded-message-loop there is no GTK-backed LinuxUi, so
Views windows use the fallback FrameViewLinux with client-drawn
shadows. DesktopWindowTreeHostLinux only updates the opaque region from
OnBoundsChanged(), which runs before the FrameView exists. The surface
keeps its initial full-size opaque region, shadow included, so the
compositor leaves trails behind the window when it moves.
Call UpdateFrameRegions() from OnWidgetInitDone() so that the opaque and
input regions are set once the FrameView exists.
The owned menu window could be created before the main window was
activated. When the main window became active later, the menu was
dismissed (e.g. Wayland popups), so owned_window_ was null by the
time CloseMainWindow ran. This happened reliably on repeat
iterations, where cached loads make OnLoadEnd fire sooner.
Forward CefWindowDelegate::OnWindowActivationChanged from
TestWindowDelegate to a new TestHandler::OnWindowActivationChanged
hook, and wait until the load has ended and the main window is
active before creating the owned window.
Skip ListAccounts when browser sign-in is disabled, default new
profiles to sign-in disabled, and disable the sign-in promo on the
avatar button by default. Embedders can still opt in via
OnRegisterCustomPreferences.
Register CEF profile preferences after Chromium keyed-service
preferences. Add GetDefaultPreference and SetDefaultPreference
to CefPreferenceRegistrar so applications can inspect, override,
and restore registered defaults.
Ignore element bounds queries for paint-only OSR tests. These tests
can start from OnPaint before the asynchronous bounds query arrives,
causing a false started-state assertion failure.
Chromium changed desktop builds to link ANGLE statically in
https://crrev.com/f78f92beeb (M151). The remaining libEGL and
libGLESv2 binaries are stubs (no exports, never loaded by
Chromium) and should no longer be distributed.
Log the connection ID, method, and path when an HTTP request has no
peer address, before the generated handler wrapper asserts.
Inline the URLRequestTest favicon to suppress incidental network
requests that may race with browser teardown.
Synchronize visual properties before showing an OSR view, even when
its surface ID remains valid. Cached views can miss resize
notifications while another view is active. Preserve software popup
initialization before the browser is attached.
Add a regression that confirms BFCache restoration and verifies
viewport and paint dimensions after resizing another page. Verified
failure before the fix and 30 passing executions across GPU and
software rendering on Windows 11.
Cancel pending downloads before cleanup and retry directory deletion
up to ten times at 100 ms intervals. Guard teardown against reentry
and late download callbacks.
Disable Chrome's automatic download bubble during download tests,
restoring the previous preference afterward. Across repeats, this UI
work increasingly delays teardown.
Disable preflight caching so repeated tests receive the expected
OPTIONS requests. Route timeout destruction through server observer
removal and cookie cleanup to prevent stale cookies and stack-use-
after-return crashes. Guard cookie verification against an
unexpected cookie count.
Load a static page and issue WasResized followed by exactly one
SendExternalBeginFrame after OnLoadEnd. Verify all bitmap pixels at
1x and 2x scale without a repeating frame timer.
Preserve the preview WebContents in the file-selection policy so
CEF can resolve the originating browser when saving a PDF.
Use the hosted BrowserView bounds for dialog sizing, and let AppKit
handle native resize edges without child-modal input blocking.
Restore focus to the topmost visible child-modal dialog after
resizing, provided the app is active and the parent still owns
keyboard focus.
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.