Skip to content

fix(desktop): WhatsApp Web rejects a current Chromium browser as outdated #5

Open

Description

@OsirisMedici

Problem

Opening https://web.whatsapp.com/ in T3 Code Nightly's desktop browser displays “WhatsApp works with Google Chrome 100+” instead of the login screen.

Observed evidence

  • Reproduced in the persistent Default profile.
  • Desktop identity reports Chromium 152.0.7977.167, Electron 44.9.3, and T3 Code Nightly 0.1.4-nightly.20261027.3770 on macOS.
  • WhatsApp's loaded ua-parser-js identifies the original identity as Electron 44.9.3, while correctly identifying its engine as Blink 152.
  • Removing only the Electron/44.9.3 token makes the same parser identify Chrome 152.0.7977.167. Removing the T3 token alone has no effect.
  • The unsupported-browser response is already present in the initial HTML. A JavaScript-only override after navigation cannot fix that response.
  • During diagnosis the preview backend changed to the server browser, presenting as Chrome 156. That separate route reached the QR-code login screen. This does not verify a fix in the original Electron browser.

Intended fix

Keep WhatsApp Web usable inside T3's desktop browser by applying the smallest site-specific browser-identity adjustment before the initial request. Preserve the actual Chromium version, native identity on other sites, Default-profile storage, and unrelated tabs. Keep request and page identities consistent.

Do not globally rewrite Electron's identity: the existing desktop code records a Cloudflare Turnstile regression when doing so.

Validation required

  • A failing regression test before the fix.
  • WhatsApp's initial request and page identity omit the Electron token.
  • Leaving WhatsApp restores the native identity; unrelated tabs and subframes do not change it.
  • Focused desktop tests and affected-file checks.
  • Explicitly distinguish source verification, Electron runtime verification, and real WhatsApp acceptance.

Work log

Diagnosis is complete. Implementation and regression coverage are starting. No code or persistent browser settings were changed during diagnosis. The running installation has not been patched or restarted.

Activity

  1. OsirisMedici commented on Oct 28, 2026

    @OsirisMedici
    OwnerAuthor

    Note

    🤖 gpt-6.1-sol responding on behalf of OsirisMedici

    Title

    Regression reproduced before implementation.

    Domain / Area

    T3 Code desktop browser sessions.

    What Exactly Happened

    The initial WhatsApp request retains Electron/44.9.3. WhatsApp's parser reads this as Electron 44 even though Chromium is version 152.

    What We Did

    Added regression coverage in the existing BrowserSession.test.ts suite for the initial request/page identity, leaving WhatsApp, exact-origin matching, subframe/resource isolation, and lowercase header handling.

    Outcome

    Ran bun run test src/preview/BrowserSession.test.ts from apps/desktop against the unchanged implementation: 3 failed, 9 passed. The first failure shows the outgoing header still containing the Electron token. Implementation is next.

    Reused existing installed dependencies after comparing the root, desktop, shared, and contracts dependency declarations. No lockfile or dependency-version changes. No running application restart or installed-build mutation.

    Proof of work (screenshots)

    The original failure screenshot was supplied in the task. This update is backed by the regression-test output; no additional screenshot uploaded.

  2. OsirisMedici commented on Oct 28, 2026

    @OsirisMedici
    OwnerAuthor

    Note

    🤖 gpt-6.1-sol responding on behalf of OsirisMedici

    Title

    Source fix implemented and verified with Electron 44.9.3.

    Domain / Area

    T3 Code desktop browser request identity and guest preload.

    What Exactly Happened

    A native Electron fixture caught an important constraint: calling webContents.setUserAgent during onBeforeSendHeaders aborts the pending navigation with ERR_ABORTED (-3). The initial mocked tests did not reveal this. That implementation was replaced before handoff.

    What We Did

    • Added an exact-origin identity helper for https://web.whatsapp.com that removes only the Electron token and retains the actual Chrome version and T3 identity.
    • Restricted the request interceptor to WhatsApp Web. It adjusts the outgoing User-Agent without changing the session or WebContents identity.
    • Applied the matching navigator.userAgent and navigator.appVersion values in the existing preview preload, before website scripts execute.
    • Kept other origins, native client hints, Default-profile storage, and unrelated tabs unchanged.
    • Updated the existing browser-session tests to cover both the request and page identity, exact-origin boundaries, other origins and subframes, lowercase/missing headers, and background requests. They also prevent reintroducing the navigation-aborting setter.

    Outcome

    Source verification passed.

    • bun run test src/preview/BrowserSession.test.ts from apps/desktop: 13 passed.
    • Scoped desktop typecheck: passed.
    • Lint and formatting for all four changed source/test files: passed.
    • git diff --check: passed.

    Native runtime verification passed. An isolated, hidden Electron 44.9.3 process used Chromium 152.0.7977.167 and a local HTTP fixture. It exercised the production request handler and identity helper, mapping the local fixture URLs to the test origins. Verified the first outgoing request, identity observed by the first inline script, unchanged Chromium 152 client hints, native identity on other-origin resources and a separate tab, and native request/page identity after navigating away.

    This was a local native fixture, not a real WhatsApp acceptance test. No login, message, profile migration, running-app restart, installed-build replacement, commit, push, or PR was performed. The source changes are local and uncommitted. Keep this issue open until the updated desktop build reaches WhatsApp's login screen in the real product.

    Proof of work (screenshots)

    No new screenshots are claimed. The original failure screenshot is in the task. Native runtime transcript:

    Electron: 44.9.3
    Chromium: 152.0.7977.167
    Initial WhatsApp request identity: PASS
    Identity in first inline page script: PASS
    Native Chromium 152 client hints preserved: PASS
    Other-origin resource identity: PASS
    Unrelated tab isolation: PASS
    Native session identity: PASS
    Native request and page after leaving WhatsApp: PASS
    

    Manual acceptance on an updated desktop build: open WhatsApp Web in Default, confirm the QR/login screen replaces the unsupported-browser message, then navigate the same tab to another site and confirm its native Electron identity. This acceptance remains outstanding.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions