Chrome 150

Stable release date: June 30th, 2026

Unless otherwise noted, the following changes apply to Chrome 150 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.

CSS and UI

AccentColor and AccentColorText system colors

The AccentColor and AccentColorText system colors can be used in CSS to access the system accent color specified on the user's device. This lets developers apply native-app-like styling to their web content in contexts where users expect OS theme integration, such as an installed web application. Users must be in an installed web application on the initial profile to see the system accent color rendered.

Tracking bug #40229450 | ChromeStatus.com entry | Spec

Allow optional rounding parameter for polygon()

Adds an optional corner-rounding parameter in the polygon() CSS shape function. Developers can specify a length value to round polygon corners without manually computing bezier curves.

Tracking bug #329302249 | ChromeStatus.com entry | Spec

Animatable zoom

The CSS zoom property is animatable and interpolates as a <number>. Developers can transition and animate zoom to smoothly scale elements and their layout, complementing existing transform-based scaling.

Tracking bug #393810951 | ChromeStatus.com entry

CSS url() request modifiers

CSS url() functions accept optional request modifiers after the quoted URL string: cross-origin(), integrity(), and referrer-policy(). These modifiers control the fetch behavior of the referenced resource directly from CSS, without requiring changes to HTML markup or JavaScript. For example, background-image: url("image.png" cross-origin(anonymous)) fetches the image using CORS anonymous mode. This gives authors fine-grained control over cross-origin access, subresource integrity, and referrer policy for CSS-loaded resources including images, fonts, SVG references, and imported stylesheets.

Tracking bug #435625756 | ChromeStatus.com entry | Spec

CSS text-fit property

Scales the font size of text nodes to perfectly fit the width of its containing box.

This property lets developers ensure headlines or dynamic content fill the available horizontal space without manual font-size calculations or complex JavaScript workarounds. It provides a robust, CSS-native solution for responsive typography that maintains visual alignment across different screen sizes and varying text lengths.

Tracking bug #417306102 | ChromeStatus.com entry | Spec

CSS background-clip: border-area

Implements the border-area value for the CSS background-clip property, as defined in CSS Backgrounds Level 4. background-clip: border-area clips an element's background to the area painted by its border strokes, taking border-width and border-style into account while ignoring transparency from border-color. This lets developers gradient borders without border-image. WebKit already ships this feature; this implementation brings Chromium to parity.

Tracking bug #329302543 | ChromeStatus.com entry | Spec

CSS image(<color>) function

The image() function lets authors generate a solid-color image from any color. Its syntax is: image() = image( <color> )

Tracking bug #510426954 | ChromeStatus.com entry | Spec

CSS light-dark() with image values

Extends the CSS light-dark() function to accept image values (url(), image-set(), none) in author stylesheets, letting image properties like background-image, list-style-image, border-image-source, cursor, and content automatically switch between images based on the user's preferred color scheme. Previously this was only allowed in UA stylesheets. This aligns with the CSS Color 5 specification and matches Firefox's existing implementation.

Tracking bug #491829958 | ChromeStatus.com entry | Spec

Comma-separated container queries

Support multiple queries per @container rule. The @container rule applies if at least one of the queries matches.

This makes it possible to have fallback queries for features which are not supported in all browsers.

Tracking bug #41491726 | ChromeStatus.com entry | Spec

Expose unprintable areas with CSS

Printers usually have a small area at each of the four edges of a sheet of paper that they are not capable of marking reliably, usually due to the printer's paper handling mechanism. The default page margins are expected to be bigger than these areas, but if authors set margins on their own, and even want to add @page margin boxes (for example, for custom headers and footers), they need a way of telling where it's safe to print and not.

The CSS descriptor page-margin-safety can be used to steer clear of such unprintable areas.

Tracking bug #368070327 | ChromeStatus.com entry | Spec

flex-wrap: balance

flex-wrap: balance lets developers distribute content between flex-lines so that it appears more balanced (similar to text-wrap: balance).

Tracking bug #416755656 | ChromeStatus.com entry | Spec

named-feature() function for CSS @supports

The named-feature() function lets CSS @supports rules query for a small set of specific named features that are not possible to test for using other @supports mechanisms but which are considered highly valuable to test for.

Tracking bug #353715317 | ChromeStatus.com entry | Spec

overscroll-behavior: chain

overscroll-behavior now has for values: none, auto, contain and the new value chain. These values affect two independent effects: scroll propagation and local border effect (for example, overscroll stretch).

  • none: no propagation, no local effect
  • auto: propagation, local effect
  • contain: no propagation, local effect
  • chain: propagation, no local effect

Tracking bug #499018879 | ChromeStatus.com entry | Spec

Support path-length as a CSS property.

This change introduces a new CSS property, path-length, which maps to the existing SVG pathLength presentation attribute. It applies to SVG geometry elements that support pathLength (including <path>, <circle>, <rect>, <line>, <polyline>, <polygon>, and <ellipse>).

Tracking bug #40670251 | ChromeStatus.com entry | Spec

DOM and HTML

Clone into all descendant selectedcontent elements

Several small changes are being made to edge cases of the selectedcontent element:

  • When multiple selectedcontent elements are put in a select element at the same time, all of them will be kept up to date instead of only the first one in DOM order.
  • Updating the selectedcontent element is deferred when it would run during insertion, removal, or moving steps to fix security issues. The update is deferred by using post-insertion steps or microtasks.

Tracking bug #458113204 | ChromeStatus.com entry | Spec

Focusgroup

Provides the ability to declaratively give composite widgets arrow key navigation, a guaranteed tab stop, and last-focused memory, replacing hand-coded roving tabindex scripts. Example:

<div focusgroup="toolbar wrap" aria-label="Formatting">
  <button>Bold</button>
  <button>Italic</button>
  <button>Underline</button>
</div>

ChromeStatus.com entry | Spec

Out of order streaming

Use <template for> and processing instruction ranges (<?marker>, <?start>, and <?end>) to update existing parts of the document without JS.

Tracking bug #431374376 | ChromeStatus.com entry | Spec

Parse processing instructions in HTML

Processing instructions (syntax: <?target data>) are an existing DOM construct, exposed in XML, that represents node objects that are not elements but can have some semantic meaning for the processing of a document.

Processing instructions are parsed by the HTML parser, and receive an attribute API similar to elements to mutate their data.

Tracking bug #481087638 | ChromeStatus.com entry | Spec

popover=hint behavior changes

This change implements a revised and simplified stacking model for the popover=hint attribute and its interactions with popover=auto. Previously, the interactions between these two types of popovers could be complex in some corner case situations (such as nesting auto popovers inside hint popovers), and could lead to unexpected behavior. Under the new model, opening a hint popover does not inadvertently close unrelated auto popovers. Hint popovers are only hidden when their ancestral auto popover is hidden, or when a new, unrelated auto popover is opened. Additionally, developers can safely nest an auto popover inside a hint popover; instead of throwing an exception or breaking the stack, the nested auto popover gracefully "downgrades" and behaves as a hint popover. This supports use cases such as placing a customizable-select within a popover=hint.

To further improve predictability and prevent complex state mutations, we are also tightening the behavior around opening and closing popovers from within the beforetoggle event. There were guards in place for some, but not all, of the possible cases before. This change revamps the mechanism used to detect these cases, so that it should more reliably throw InvalidStateErrors for all such cases. This ensures that popover state management remains stable and prevents looping reentrancy bugs.

Tracking bug #499019927 | ChromeStatus.com entry | Spec

Programmatic scroll promises

This feature provides a reliable signal for the completion status of a programmatic smooth-scroll. All scroll methods in Element and Window return Promise objects that get resolved on scroll completion, and the resolved value indicates whether the scroll was interrupted or not.

Tracking bug #41406914 | ChromeStatus.com entry | Spec

Graphics and media

Disable SVG filters on plugins and iframes

Chrome 150 will prevent SVG filters from being applied to embedded plugins (for example, PDFs) and cross-origin or restricted iframes (for example, sandboxed iframes). When a plugin or iframe would be painted with an SVG filter effect, the effect tree is traversed to find the highest ancestor without SVG filters, and that effect is then applied instead.

Tracking bug #476646486 | ChromeStatus.com entry | Spec

WebGPU: Immediates

Adds a new immediate address space in WGSL and a setImmediateData() method on render pass, compute pass, and render bundle encoders that lets developers pass small amounts of frequently-updated data directly to shaders without creating GPU buffer objects or bind groups.

Tracking bug #366291600 | ChromeStatus.com entry | Spec

Security and Web Speech

Opaque origin for data: URLs

Chrome 150 updates how dedicated and shared Workers handle data: URLs. Rather than automatically inheriting the security origin of the script or page that created them, these workers are assigned a unique opaque origin.

This alignment with the worker HTML specification enhances security by isolating these workers from the creator's same-origin state, preventing them from accessing sensitive data using mechanisms like BroadcastChannel or same-origin storage. To maintain correct isolation boundaries, these workers still reside within the same storage partition (for example, by preserving the top-level site or nonce) as their creator.

Tracking bug #40051700 | ChromeStatus.com entry | Spec

Web Speech API: On-Device Recognition Quality

Extends the SpeechRecognition interface by adding a quality property to SpeechRecognitionOptions. This lets developers specify the semantic capability required for on-device recognition (with processLocally: true).

The proposed quality enum supports three levels: command, dictation, and conversation. These map to increasing task complexity and hardware requirements. This lets developers determine if the local device can handle high-stakes use cases (like meeting transcription) or if they should fallback to cloud services.

Tracking bug #476168420 | ChromeStatus.com entry | Spec

Web Apps

PWA origin migration

When a user installs a Progressive Web App (PWA), its identity and security context are tightly bound to its web origin, for example, app.example.com. This presents a significant challenge for developers who need to change their PWA's origin due to rebranding, domain restructuring, or technical re-architecture. Without origin migration, such a change forces users to manually uninstall the old app and reinstall the new one, leading to a disruptive experience and a potential increase in user loss rate. Chrome 150 introduces a mechanism for developers to seamlessly migrate an installed PWA to a new, same-site origin, preserving user trust and permissions.

The WebAppInstallForceList policy blocks migration. Since enterprise policies around web applications are primarily based on URLs and origins, there is a risk that a migration would bypass certain policies an administrator might have configured. No migration will be offered to the user when an app is force-installed by their enterprise administrator, and instead a banner will be shown explaining this to the user.

Tracking bug #396504527 | ChromeStatus.com entry | Spec

Origin trials

Email Verification Protocol

The EVP (email verification protocol) helps users create, access and recover accounts by providing cryptographic proof of ownership seamlessly rather than email OTPs manually.

Origin Trial | ChromeStatus.com entry | Spec

Speculative load measurement

Expose measurement data regarding speculative loads (preloads, prefetches and prerenders) as part of a newly exposed performance.getSpeculations() method. That would enable developers to measure the efficacy of various speculative loading strategies and adapt them accordingly.

Origin Trial | Tracking bug #481590676 | ChromeStatus.com entry

WebRTC Diagnostic Logging API

API for WebRTC diagnostic logging.

This API lets an application opt in to diagnostic logging. These logs contain information about the WebRTC activity by the application and are useful for local debugging or to file bugs.

Logs can be optionally uploaded out of band to the browser vendor and can be used for diagnosing bugs. The application gets an ID that can be attached to a bug report, similar to crashes.

Diagnostic logs are enabled with an enterprise policy called WebRtcDiagnosticLogCollectionAllowedForOrigins.

Origin Trial | Tracking bug #481412281 | ChromeStatus.com entry | Spec

Deprecations and removals

There are no deprecations or removals in this release.