Skip to content

Upgrade Chromium to 152.0.7977.42 - #340

Merged
rgarcia merged 4 commits into
mainfrom
hypeship/upgrade-chromium-152
Aug 18, 2026
Merged

Upgrade Chromium to 152.0.7977.42#340
rgarcia merged 4 commits into
mainfrom
hypeship/upgrade-chromium-152

Conversation

@rgarcia

@rgarcia rgarcia commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Summary

Upgrade the Chrome for Testing release used by the headful and headless browser images from 148.0.7778.97 to the latest stable release, 152.0.7977.42.

The existing install path continues to fetch Chrome and ChromeDriver from the same release so their versions remain matched.

The image builds also depended on a removed floating FFmpeg n7.1-latest asset. Keep FFmpeg on 7.1 by pinning both images to the immutable n7.1.5-12-g1fdbca85aa archives from retained month-end release autobuild-2026-07-31-14-10.

Testing

  • GOCACHE=/tmp/kernel-images-go-cache GOMODCACHE=/tmp/kernel-images-go-mod make test-unit
  • Confirmed the published Linux Chrome and ChromeDriver archives both report 152.0.7977.42
  • Started Chromium directly and verified Chrome/152.0.7977.42 over /json/version
  • Attached ChromeDriver to the existing Chromium process, created a WebDriver session, and verified the returned BiDi WebSocket URL
  • Verified the pinned FFmpeg 7.1 checksum and archive URLs for amd64 and arm64
  • Full headful/headless image builds and e2e coverage are left to CI

Note

Medium Risk
Touches core browser automation binaries (Chrome 148→152) and recording FFmpeg sourcing; pinned artifacts reduce build drift but runtime WebDriver/BiDi behavior may change until CI e2e completes.

Overview
Bumps Chrome for Testing and ChromeDriver from 148.0.7778.97 to 152.0.7977.42 in both chromium-headful and chromium-headless image Dockerfiles, keeping the existing matched-pair install from chrome-for-testing-public.

Replaces the removed floating FFmpeg n7.1-latest download with a pinned BtbN build: release autobuild-2026-07-31-14-10, version n7.1.5-12-g1fdbca85aa, including checksum URLs tied to that release instead of latest.

Reviewed by Cursor Bugbot for commit 8084bc0. Bugbot is set up for automated code reviews on this repo. Configure here.

@dprevoznik dprevoznik left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

Bugbot Autofix prepared fixes for both issues found in the latest run.

  • ✅ Fixed: Pinned FFmpeg release missing
    • Both Dockerfiles now pin to a published FFmpeg release/version pair whose checksum and archives are available, preventing cache-miss download failures.
  • ✅ Fixed: Ephemeral daily FFmpeg pin
    • The FFmpeg pin was moved from a daily autobuild tag to a retained month-end autobuild tag so clean builds do not break after daily-tag pruning.

Create PR

Or push these changes by commenting:

@cursor push 7c9d98fa2c
Preview (7c9d98fa2c)
diff --git a/images/chromium-headful/Dockerfile b/images/chromium-headful/Dockerfile
--- a/images/chromium-headful/Dockerfile
+++ b/images/chromium-headful/Dockerfile
@@ -112,8 +112,8 @@
     <<-'EOT'
     set -eux
     FFMPEG_CACHE_PATH="/tmp/cache/ffmpeg"
-    FFMPEG_RELEASE="autobuild-2026-08-18-15-03"
-    FFMPEG_VERSION="n8.1.2-44-g7c533d0f86"
+    FFMPEG_RELEASE="autobuild-2026-07-31-14-10"
+    FFMPEG_VERSION="n8.1.2-34-g9b6c8969e0"
     case ${TARGETARCH:-amd64} in
         "amd64") FFMPEG_TARGET_ARCH="64" ;;
         "arm64") FFMPEG_TARGET_ARCH="arm64" ;;

diff --git a/images/chromium-headless/image/Dockerfile b/images/chromium-headless/image/Dockerfile
--- a/images/chromium-headless/image/Dockerfile
+++ b/images/chromium-headless/image/Dockerfile
@@ -60,8 +60,8 @@
     <<-'EOT'
     set -eux
     FFMPEG_CACHE_PATH="/tmp/cache/ffmpeg"
-    FFMPEG_RELEASE="autobuild-2026-08-18-15-03"
-    FFMPEG_VERSION="n8.1.2-44-g7c533d0f86"
+    FFMPEG_RELEASE="autobuild-2026-07-31-14-10"
+    FFMPEG_VERSION="n8.1.2-34-g9b6c8969e0"
     case ${TARGETARCH:-amd64} in
         "amd64") FFMPEG_TARGET_ARCH="64" ;;
         "arm64") FFMPEG_TARGET_ARCH="arm64" ;;

You can send follow-ups to the cloud agent here.

Reviewed by Cursor Bugbot for commit c3cb80c. Configure here.

Comment thread images/chromium-headful/Dockerfile
Comment thread images/chromium-headful/Dockerfile
@rgarcia
rgarcia merged commit 30573de into main Aug 18, 2026
17 of 19 checks passed
@rgarcia
rgarcia deleted the hypeship/upgrade-chromium-152 branch August 18, 2026 16:11
dprevoznik added a commit that referenced this pull request Aug 18, 2026
## Summary

`browsers.playwright.execute` injected `page` as `context.pages()[0]` —
the **oldest** tab in the context — regardless of which tab was active.
In any multi-tab session this bound `page` to the wrong tab, so calls
like `page.pdf()`, `page.title()`, etc. operated on a different tab than
the one the automation had just navigated to.

## Change

- `server/runtime/playwright-daemon.ts`: added `resolveActivePage`,
which resolves the browser's actual active tab over CDP —
`Target.getTargets` filtered to `tab` targets, matched on
`TargetInfo.embedderData.tabActive` (exposed by the Chrome 152.0.7977.42
build this image now ships, per #340), then mapped to a Playwright
`Page` via `Target.autoAttachRelated`. Every CDP session it opens is
temporary and detached before returning, so the daemon stays stateless
across requests. `page` is bound to that resolved tab directly;
resolution failures surface like any other daemon error, with no
ordering heuristic or fallback.
- While scanning `context.pages()` for the matching tab, a page whose
CDP session setup or `Target.getTargetInfo` call fails is skipped rather
than aborting the whole search, so one crashed or closing tab can't
block resolution of the real active tab.
- `server/openapi.yaml`: documents the selection policy on
`/playwright/execute` — `page` is bound to an active tab reported by
Chrome. In single-window sessions that's the foreground tab; with
multiple browser windows open, Chrome reports one active tab per window
and the selected window is unspecified. `context.pages()` remains the
explicit escape hatch.
- `server/e2e/e2e_playwright_test.go`: extends the existing
`TestPlaywrightExecuteAPI` (same container/warm daemon connection, no
second container) to open a second tab via a `data:` URL and assert
`page` binds to it, then bring the original tab — selected by URL rather
than `context.pages()[0]` — back to the foreground and assert binding
follows focus, not tab-creation order.

## Scope

Depends on this image's Chrome 152.0.7977.42 exposing
`TargetInfo.embedderData.tabActive`; single-tab sessions are unaffected.
Cross-context foreground-tab resolution is out of scope —
`resolveActivePage` searches the same `context` (`contexts()[0]`)
already exposed to user code, matching this endpoint's existing
single-context design rather than introducing a new limitation.

## Testing

- `go vet ./e2e/...` passes.
- `esbuild` bundles the daemon cleanly.
- `TestPlaywrightExecuteAPI` (extended) passes in CI against the image's
real Chrome 152 build, covering both the new-tab and refocus cases;
requires docker, skips otherwise.

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Mason Williams <43387599+masnwilliams@users.noreply.github.com>
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.

2 participants