webdriverio / webdriverio/desktop-mobile

Electrobun: track upstream CEF fixes (Linux/Windows, multiremote, multi-window, deeplink)

Open
#320 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

os:linux os:macos os:windows scope:electrobun status:blocked type:task
Dominant language
TypeScript
Stars
13
Forks
6
Avg merge
2d 3h
Merged PRs (30d)
33

Description

Summary

@wdio/electrobun-service drives the CEF renderer on macOS; CEF stays macOS-only (Linux/Windows CEF can't create the persist:default profile — see #316 and the README Known limitations). Windows ships via the native WebView2 renderer instead (the non-CEF track, #317 — done and gated in 0.1.0), so the service is no longer macOS-only, but the CEF path is. This issue tracks the CEF-side road to 1.0 from our repo: which upstream fix unblocks which CEF surface, why each is required, and the consumer-side re-fold work as each lands.

It is the sibling of #317 (the non-CEF / native-renderer track). The two tracks have independent upstream dependency sets and are both additive — a CEF-app user still needs every fix below even after #317 lands.

Upstream umbrella issue: filed — blackboardsh/electrobun#466 (one umbrella linking electrobun's existing issues, not N duplicates). The CEF-on-Windows finding below is recorded there too.

CEF-on-Windows is a dead end (verified via a spike, 2026-06)

A CEF build on Windows is not a viable alternative to the WebView2 path: it hits the same persist:default profile gap as Linux (Cannot create profile at …\CEF\partitions\default). The first instance limps up and does serve /json (a full functional suite passed against it), but the shared CEF root_cache_path lock doesn't release at teardown on Windows (EPERM), so subsequent app instances fail Failed to initialize CEF. Net: CEF-on-Windows is drivable for a single instance but not re-startable / not multi-instance — it would need fix #1 plus the Windows lock-release angle of fix #3. Windows is already covered by WebView2 (#317), so these CEF fixes are needed only to drive CEF apps on Windows, not for Windows coverage.

Upstream fixes → what each unblocks (CEF)

# Upstream fix Existing upstream refs Unblocks
1 Profile isolationBrowserWindow forces persist:default, which the CEF chrome-runtime can't create as a non-global profile (falls back to the global context; macOS limps, Linux/Windows error). #380 (proper fix), #448 (identical Linux error), #278 (closed GetGlobalContext() band-aid — why macOS recovers) Reliable macOS CEF multi-window (switchWindow/listWindows → re-fold the CEF window suite); de-flakes the macOS standard gate (drop specFileRetries: 3); reliable single-window /json; also the blocker for CEF-on-Linux and CEF-on-Windows /json
2 Linux remote_debugging_port disabled — commented out in the Linux wrapper. #445, #448 Any CEF CDP on Linux at all (with fix 1) → CEF-Linux build + e2e
3 Per-instance root_cache_path — derived solely from identifier+channel, so ≥2 processes share one cache root and CEF folds them. #380 CEF multiremote / parallel workers on macOS — and the Windows lock-release wrinkle above. (multiremote / parallel workers already work off-CEF — WebView2 on Windows (#317) and WebKitGTK on Linux (#633).)
4 Single-instance lock + open-url routing — handling exists on macOS, but nothing stops a second launch spawning a fresh process. #465 Reliable triggerDeeplink (macOS CEF; Windows also needs URL-scheme registration, folded into #465)

CEF-on-macOS multi-window/deeplink need fix 1/4; CEF-on-Linux needs 1+2; CEF-on-Windows needs 1 (+3). Windows coverage itself is via WebView2 (#317), not CEF.

Consumer-side re-fold checklist (as each fix lands)

  • Re-add the Windows fixture-build + e2e CI jobs — done via the WebView2 path (#317), not CEF
  • Lift maxInstances: 1 and validate multiremote — done off-CEF on WebView2 (Windows) and WebKitGTK (Linux, #633); macOS CEF stays single-instance pending fix 3
  • Re-add the Linux CEF fixture-build + e2e CI jobs (needs fixes 1+2) — generic Linux e2e already ships via WebKitGTK (#631/#633); this row is the CEF-on-Linux variant only
  • Re-fold the macOS CEF window and deeplink suites into the CI matrix (currently local-only via TEST_TYPE=window|deeplink) — needs fixes 1/4
  • Relax the launcher's Linux native-mode SevereServiceError guard once Linux is drivable — done for WebKitGTK (drivability #631; parallel workers + multiremote #633); the CEF-on-Linux guard still stands (needs fixes 1+2)
  • Drop the fixtures' staggered-second-window workaround + the single-window caveat (CEF) once fix 1 lands
  • Drop specFileRetries: 3 in the macOS CEF conf once the race is gone
  • Lift the matching README/docs limitation rows; converge on 1.0.0 at full parity

Why a repo-side issue

The upstream umbrella (blackboardsh/electrobun#466) tracks the electrobun changes; this issue tracks both sets of changes from our side — the mapping from upstream fix → CEF service surface, and the re-fold work that is ours regardless of where the fixes land. #317 deliberately scopes these out; this is where they live.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the upstream-fix table in issue #320 and umbrella issue blackboardsh/electrobun#466, then review the unchecked consumer-side checklist. Trace the existing CEF window, deeplink, Linux fixture/e2e, retry, and README limitation work named there. Done means the required upstream fixes are available and the listed CEF suites, CI jobs, documentation, and parity checks are restored.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
ci-cd, desktop, testing-qa
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.