Web serial over Bluetooth on Android
Chrome 138
Stable release date: June 24th, 2025
Unless otherwise noted, the following changes apply to Chrome 138 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
CSS and UI
CSS Sign-Related Functions: abs(), sign()
The sign-related functions abs() and sign() compute various functions related to the sign of their argument.
The abs(A) function contains one calculation A, and returns the absolute value of A, as the same type as the input: if A's numeric value is positive or 0⁺, just A again; otherwise -1 * A.
The sign(A) function contains one calculation A, and returns -1 if A's numeric value is negative, +1 if A's numeric value is positive, 0⁺ if A's numeric value is 0⁺, and 0⁻ if A's numeric value is 0⁻. The return type is a <number>, made consistent with the type of the input calculation.
Interpolation progress functional notation: CSS progress() function
The progress() functional notation returns a <number> value representing the position of one calculation (the progress value) between two other calculations (the progress start value and progress end value). The progress() function is a math function.
CSS sibling-index() and sibling-count()
- The sibling-index() and sibling-count() functions can be used as integers in CSS property values to style elements based on their position among its siblings, or the total number of siblings respectively. These functions can be used directly as integer values, but more interestingly inside calc() expressions.
CSS stretch sizing keyword
A keyword for CSS sizing properties (for example, width and height) that lets elements grow to exactly fill their containing block's available space. It is similar to '100%', except the resulting size is applied to the element's margin box instead of the box indicated by box-sizing. Using this keyword lets the element keep its margins while still being as large as possible. An unprefixed version of -webkit-fill-available.
CSS env variable for OS-level font scale
Exposes a user's preferred font scale to CSS. Without this, it's not practical for a page to detect if the user has changed their preferred font size using the Operating System's preferences. This CSS environment variable will reflect the scale chosen by the user.
Devices
Web serial over Bluetooth on Android
This feature lets web pages and web apps connect to serial ports over Bluetooth on Android devices.
Chrome on Android now supports Web Serial API over Bluetooth RFCOMM. Existing enterprise policies (DefaultSerialGuardSetting, SerialAllowAllPortsForUrls, SerialAllowUsbDevicesForUrls, SerialAskForUrls and SerialBlockedForUrls) on other platforms are enabled in future_on states for Android. All policies except SerialAllowUsbDevicesForUrls will be enabled after the feature is enabled. SerialAllowUsbDevicesForUrls will be enabled in a future launch after Android provides system level support of wired serial ports.
Viewport Segments Enumeration API
The Viewport Segments API allows developers to adapt their web layout to target foldable devices. The viewport segments defines the position and dimensions of a logically separate region of the viewport. Viewport segments are created when the viewport is split by one or more hardware features (such as a fold or a hinge between separate displays) that act as a divider; segments are the regions of the viewport that can be treated as logically distinct by the developer.
JavaScript
Update QuotaExceededError to a DOMException derived interface
Previously, when the web platform wants to tell you when you've exceeded quota, it will use DOMException with the specific name property set to QuotaExceededError. However this does not allow carrying additional information.
This proposes removing "QuotaExceededError" from the list of built-in DOMException names, and instead creates a class name QuotaExceededError from the list of built-in DOMException and has the additional optional properties quota and requested. We propose all instances of specs that throw "QuotaExceededError" DOMExceptions get upgraded to instead throw QuotaExceededErrors. For now, such specs would leave the quota and requested properties at their default value of null, but they could eventually upgrade to include that data, if it's useful for their use case (and isn't, e.g., a privacy leak).
Web APIs
Translator API
A JavaScript API to provide language translation capabilities to web pages. Browsers are increasingly offering language translation to their users. Such translation capabilities can also be useful to web developers. This is especially the case when browser's built-in translation abilities cannot help. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable.
Language Detector API
A JavaScript API for detecting the language of text, with confidence levels.
An important supplement to translation is language detection. This can be combined with translation, for example, taking user input in an unknown language and translating it to a specific target language. Browsers today often already have language detection capabilities, and we want to offer them to web developers through a JavaScript API, supplementing the translation API. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable.
Summarizer API
Summarizer API is a JavaScript API for producing summaries of input text, backed by an AI language model. Browsers and operating systems are increasingly expected to gain access to a language model. By exposing this built-in model, we avoid every website needing to download their own multi-gigabyte language model, or send input text to third-party APIs. The summarizer API in particular exposes a high-level API for interfacing with a language model in order to summarize inputs for a variety of use cases (GitHub), in a way that does not depend on the specific language model in question. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable.
Escape in attributes on serialization
Escape in values of attributes on serialization.
This mitigates the risk of mutation XSS attacks, which occur when value of an attribute is interpreted as a start tag token after being serialized and re-parsed.
Crash Reporting API: is_top_level and visibility_state
This feature adds is_top_level and visibility_state string fields to the crash reporting API body that gets sent to the default reporting endpoint for crash reports.
Fire the pushsubscriptionchange event upon resubscription
Fire the pushsubscriptionchange event in service workers when an origin for which a push subscription existed in the past, but which was revoked because of a permission change (from granted to deny/default), is re-granted notification permission.
The event will be fired with an empty oldSubscription and newSubscription.
Multimedia
Add support for video frame orientation metadata to WebCodecs
Introduces rotation: int and flip: bool values to various video related interfaces in WebCodecs so that developers can work with frame sources that have orientation (For example, Android cameras, certain media).
The VideoFrame interface grows the ability to create VideoFrames with arbitrary rotation and flip as well as accessors for this information on the VideoFrame object.
The VideoDecoderConfig object gains rotation and flip fields that are emitted on decoded VideoFrame objects automatically.
The VideoEncoder class gains mechanisms for passing rotation and flip information from encode() to the VideoDecoderConfig emitted as part of EncodedVideoChunkMetadata. If encode() is called with frames with different orientations a nonfatal exception will be thrown. configure() may be used to reset the allowed orientation.
Performance
Add prefetchCache and prerenderCache to Clear-Site-Dataheader
Two new values for the Clear-Site-Data header to help developers target clearing the prerender and prefetch cache: "prefetchCache" and "prerenderCache".
Speculation rules: target_hint field
This extends speculation rules syntax to allow developers to specify the target_hint field.
This field provides a hint to indicate a target navigable where a prerendered page will eventually be activated. For example, when _blank is specified as a hint, a prerendered page can be activated for a navigable opened by window.open(). The field has no effect on prefetching.
The specification allows this field to accept any strings that are valid as navigable target name or keyword as the value, but this launch supports only one of "_self" or "_blank" strings. If the hint is not specified, it's treated like "_self" is specified.
Security
Integrity Policy for scripts
Subresource-Integrity (SRI) enables developers to make sure the assets they intend to load are indeed the assets they are loading. But there's no current way for developers to be sure that all of their scripts are validated using SRI.
The Integrity-Policy header gives developers the ability to assert that every resource of a given type needs to be integrity-checked. If a resource of that type is attempted to be loaded without integrity metadata, that attempt will fail and trigger a violation report.
Service Worker
ServiceWorker support for Speculation Rules Prefetch
This feature enables ServiceWorker-controlled prefetches, that is a speculation rules prefetch to URLs controlled by a Service Worker. Previously, the prefetch is cancelled upon detecting a controlling Service Worker, thus subsequent navigation to the prefetch target is served by the non-prefetch path. This feature will enable the prefetch request to go through the Service Worker's fetch handler and the response with the Service Worker interception is cached in the prefetch cache, resulting in a subsequent navigation being served by the prefetch cache. Use the enterprise policy PrefetchWithServiceWorkerEnabled to control this feature.
Deprecations and removals
WebGPU: Deprecate GPUAdapter isFallbackAdapter attribute
Deprecates the GPUAdapter isFallbackAdapter boolean attribute from WebGPU, which is redundant with the GPUAdapterInfo isFallbackAdapter boolean attribute.
This upcoming removal is a minor breaking change as support for fallback adapters has not yet been implemented in any browser, thereby resulting in both isFallbackAdapter attributes consistently returning a falsy value.
Deprecate asynchronous range removal for Media Source Extensions
The Media Source standard long ago changed to disallow ambiguously defined behavior involving asynchronous range removals:
- SourceBuffer.abort() no longer aborts SourceBuffer.remove() operations.
- Setting MediaSource.duration can no longer truncate currently buffered media.
- Exceptions will be thrown in both of these cases now.
Safari and Firefox have long shipped this behavior, Chromium is the last browser remaining with the old behavior. Use counters show that around 0.001%-0.005% of page loads hit the deprecated behavior. If a site hits this issue, playback may now break.
Usage of abort() cancelling removals is increasing, so it's prudent to resolve this deprecation before more incompatible usage appears.