Skip to content

Fix setWindowVisibility() being a no-op for OSR/windowless browsers - #41

Merged
Thrameos merged 1 commit into
masterfrom
backport/window-visibility-osr
Sep 6, 2026
Merged

Thrameos merged 1 commit into
masterfrom
backport/window-visibility-osr

Conversation

@Thrameos

@Thrameos Thrameos commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • N_SetWindowVisibility's whole body was gated on OS_MACOSX, and even there only ran when windowed (the IsWindowRenderingDisabled() check was backwards for that branch's intent) -- so on every platform, for every OSR browser (useOSR=true, nearly all of ours), setWindowVisibility() has always silently done nothing.
  • Windowless browsers have no native window for the OS-level toggle; CefBrowserHost::WasHidden() is CEF's own signal for this case (pauses/resumes rendering and GPU resource usage).
  • Found by mining DanielTM999/java-cef (a sibling fork of chromiumembedded/java-cef), commit 6bd0cca1 ("OSR: WasHidden on setWindowVisibility for windowless browsers") -- confirmed the same bug exists here and adapted the fix.

Test plan

  • Added CefBrowserWindowVisibilityTest as smoke coverage -- the internal paused/resumed rendering state isn't observable from the Java side, so this asserts non-throwing rather than the rendering-pause effect directly.
  • Rebuilt libjcef.so cleanly (ninja jcef), zero compile errors.
  • Full local suite run: 124/124 tests passing.

Small, focused backport of a single self-contained fix (no other changes bundled in), following the same shape as PR #1, #36-#40.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HBFmQs6JDypYP5qdC99yDq

@codecov

codecov Bot commented Sep 5, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.33333% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 38.04%. Comparing base (be68fe1) to head (8978d5a).

Files with missing lines Patch % Lines
native/CefBrowser_N.cpp 25.00% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##             master      #41      +/-   ##
============================================
+ Coverage     38.01%   38.04%   +0.02%     
- Complexity      735      736       +1     
============================================
  Files           243      244       +1     
  Lines         14863    14881      +18     
  Branches       2449     2451       +2     
============================================
+ Hits           5650     5661      +11     
- Misses         8011     8014       +3     
- Partials       1202     1206       +4     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Thrameos added a commit that referenced this pull request Sep 5, 2026
preliminary update racing ahead of onBeforeDownload

CefDownloadItemTest.cancelDuringDownloadInvokesNCancel() flaked
intermittently in CI across multiple unrelated backport PRs (#38, #39, #41,
#42), always failing the same assertion: "onBeforeDownload was never
invoked". Root-caused by reproducing it locally (100% deterministic once a
low-risk, narrowly-scoped repro was possible -- see PR #44's run_tests.sh
fix, needed first to run just this one test without also running the whole
suite + leak-sweep) and adding temporary native fprintf instrumentation
(not included in this commit) at DownloadHandler::OnBeforeDownload/
OnDownloadUpdated and ClientHandler::GetDownloadHandler.

That instrumentation showed CEF can deliver a preliminary
OnDownloadUpdated() notification -- for a valid, real CefDownloadItem --
*before* OnBeforeDownload() has been dispatched to the handler at all. This
test's onDownloadUpdated() used to treat "not complete" on the very first
update it saw as "must actively cancel it", immediately calling
callback.cancel() and terminateTest() -- racing ahead of onBeforeDownload
and ending the test before it ever got a chance to run, which is exactly
what "onBeforeDownload was never invoked" captures.

Fix: ignore any onDownloadUpdated() notification that arrives before this
handler's own onBeforeDownload() has recorded its decision
(gotBeforeDownload[0]). Verified via direct reproduction: failed 3/3 in
isolation before the fix (including against a heavily-used local CEF
profile where it failed 100% of the time), passed cleanly every time after
(5+ consecutive solo runs, plus the full class together) with no change to
downloadCompletesAndWritesRealFile's behavior.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HBFmQs6JDypYP5qdC99yDq
N_SetWindowVisibility's whole body was gated on OS_MACOSX, and even there
only ran when windowed (IsWindowRenderingDisabled() check was backwards for
that macOS branch's intent) -- so on every platform, for every OSR browser
(useOSR=true, which is nearly all of ours), setWindowVisibility() has always
silently done nothing. Windowless browsers have no native window for the
OS-level toggle; CefBrowserHost::WasHidden() is CEF's own signal for this
case (pauses/resumes rendering and GPU resource usage).

Found by mining DanielTM999/java-cef (a sibling fork of
chromiumembedded/java-cef), commit 6bd0cca ("OSR: WasHidden on
setWindowVisibility for windowless browsers") -- confirmed the same bug
exists here and adapted the fix.

Adds CefBrowserWindowVisibilityTest as smoke coverage (the internal
paused/resumed rendering state isn't observable from the Java side, so
this asserts non-throwing rather than the rendering-pause effect
directly). Verified against a full local suite run: 124/124 passing.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HBFmQs6JDypYP5qdC99yDq
@Thrameos
Thrameos force-pushed the backport/window-visibility-osr branch from deaf65b to 8978d5a Compare September 5, 2026 21:23
@Thrameos Thrameos added the bug Something isn't working label Sep 6, 2026
@Thrameos
Thrameos merged commit a4d0d58 into master Sep 6, 2026
9 checks passed
@Thrameos
Thrameos deleted the backport/window-visibility-osr branch September 6, 2026 03:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant