Skip to content

The login browser is real Chrome - #276

Merged
czpython merged 2 commits into
mainfrom
eng-browser-real-chrome
Aug 17, 2026
Merged

The login browser is real Chrome#276
czpython merged 2 commits into
mainfrom
eng-browser-real-chrome

Conversation

@czpython

Copy link
Copy Markdown
Owner

The login browser ran Playwright's bundled Chromium, which ships as Chrome for Testing. Its client hints report the Chromium brand while the user-agent string claims Chrome/151 — a login gate reads that split. This installs real Google Chrome and launches it through Playwright's chrome channel, so the login browser presents Chrome's fingerprint.

Verified on a from-scratch amd64 build of this image: navigator.userAgentData.brands goes from Chromium | Not=A?Brand to Not=A?Brand | Google Chrome | Chromium.

Also in this change:

  • Paste into the login window works. A bare X display had no clipboard owner, so pasting a password into the login window did nothing. autocutsel now owns both selections (CLIPBOARD and PRIMARY).
  • TZ is honored on the container, so the browser's timezone can be aligned with the login egress.

Arch note

Google ships no arm64 Linux build of Chrome, and the image is published multi-arch. Chrome is therefore installed on amd64 only; session-launch falls back to the bundled chromium wherever Chrome is absent, so the arm64 image keeps working. Prod is amd64 and gets real Chrome.

Not in scope

Egress. This is the browser-side fix and stands on its own. Whether the login also needs a residential egress IP is a separate, still-untested question.

The login browser ran Playwright's bundled Chromium (shipped as Chrome for
Testing). Its client hints report the `Chromium` brand while the user-agent
string claims `Chrome`, and a login gate reads that split. Install real Google
Chrome and launch it through Playwright's `chrome` channel, so the browser
presents Chrome's fingerprint. Google ships no arm64 Linux build, so Chrome is
amd64-only; session-launch falls back to the bundled chromium where Chrome is
absent.

Honor TZ on the container, so the browser's timezone can be aligned with the
login egress.
@czpython
czpython force-pushed the eng-browser-real-chrome branch from f2d2d78 to 1140ba4 Compare August 17, 2026 16:53
@czpython czpython changed the title The login browser is real Chrome, and the login window can paste The login browser is real Chrome Aug 17, 2026
The sandbox and browser images publish only on push to main, and the two
pull-request workflows watch backend and frontend paths, so a change under
deploy/ reached main with nothing having built it. Add a pull-request workflow
that builds both images (amd64, no push) when their contexts change, so a
broken Dockerfile fails the PR rather than the deploy.
@czpython
czpython enabled auto-merge (squash) August 17, 2026 17:12
@czpython
czpython disabled auto-merge August 17, 2026 17:15
@czpython
czpython merged commit de09b33 into main Aug 17, 2026
2 checks passed
@czpython
czpython deleted the eng-browser-real-chrome branch August 17, 2026 17:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant