every.channel/evolution/proposals/ECP-0099-nbc-hidden-native-worker-mode-instead-of-true-headless-chrome.md

1.9 KiB

ECP-0099: NBC Hidden Native Worker Mode Instead of True Headless Chrome

Status: Proposed

Decision

Do not target true Chrome headless mode for NBC playback in every.channel.

Instead, add a macOS hidden native-worker mode for the existing WKWebView path so NBC playback can run without a visible browser window when the session is already authenticated.

The desktop app will:

  • allow the native NBC webview windows to start hidden behind EVERY_CHANNEL_NBC_HIDE_WINDOWS=1
  • surface those hidden windows only when the navigation flow reaches an interactive auth page
  • refuse the visible Chrome fallback when hidden native mode is explicitly requested

Motivation

On this Mac, local Google Chrome in true headless mode does not expose EME / requestMediaKeySystemAccess, which makes Widevine-backed NBC playback non-viable in a real headless browser process.

That means the practical path to future unattended playback is not “headless Chrome,” but an invisible native browser surface with a warm authenticated session and explicit surfacing only when auth has expired.

Scope

In scope:

  • macOS hidden-window behavior for the existing NBC WKWebView path
  • auth-page detection that reveals the hidden window when user interaction is required
  • blocking visible Chrome fallback when hidden mode is requested

Out of scope:

  • automating Verizon credential entry in this cut
  • making Chrome headless support Widevine / EME
  • guaranteeing unattended runs when the MVPD session has expired

Alternatives Considered

  • Use true Chrome headless. Rejected because local testing showed no EME path.
  • Keep only the visible native/Chrome flows. Rejected because a warm session should be able to run without putting browser chrome on screen.

Rollout / Reversibility

  • The change is opt-in behind EVERY_CHANNEL_NBC_HIDE_WINDOWS=1.
  • Roll back by removing the hidden-window flag and retaining the visible native flow from ECP-0098.