Unless otherwise noted, the following changes apply to the newest Chrome beta
channel release for Android, ChromeOS, Linux, macOS, and Windows. Learn more
about the features listed here through the provided links or from the list on
ChromeStatus.com. Chrome 129 is beta as of August 21, 2024. You can download the
latest on [Google.com](https://www.google.com/chrome/beta/) for desktop or on
Google Play Store on Android.

## CSS

This release adds two new CSS features, and updates three features.

### CSS `interpolate-size property` and `calc-size()` function

The CSS `interpolate-size` property lets a page opt into animations and
transitions of CSS intrinsic sizing keywords such as `auto`, `min-content`, and
`fit-content`, in the cases where those keywords can be animated.

The CSS `calc-size()` function is a CSS function similar to `calc()`, however it
also supports operations on exactly one supported sizing keyword. Currently
supported sizing keywords are `auto`, `min-content`, `max-content`, and
`fit-content`. Other sizing keywords that may be supported in the future include
`stretch` (currently supported as prefixed `-webkit-fill-available`) and
`contain`. This function is used to represent the values in the middle of the
animations allowed by the `interpolate-size` property.

### Rename CSS anchor positioning `inset-area` to `position-area`

The [CSSWG resolved to rename this property](https://github.com/w3c/csswg-drafts/issues/10209#issuecomment-2221005001)
from `inset-area` to `position-area`. Chrome 129 ships `position-area`, the
`inset-area` name will be removed in a future release.

### CSS Anchor Positioning: Unwrapped `inset-area()`

Replaces the `inset-area()` function with inset-area values directly within
`position-try-fallbacks`. For example instead of
`position-try-fallbacks:inset-area(top)` use
`position-try-fallbacks:top`.

### Update CSS backdrop-filter to use mirror edgeMode

The `backdrop-filter` CSS property applies one or more filters to the *backdrop*
of an element. The backdrop is the painted content that lies behind the element.
A common filter is a blur allowing designers to construct "frosted glass" dialog
boxes, video overlays, translucent navigation headers, and more.

This was initially implemented the same way as a regular blur, but sampling
beyond the edges of the element allowed colors from the edges to bleed in. The
spec was changed to sample pixels outside the backdrop edges by duplicating the
pixels at the edge. This however, results in extreme flickering of content as it
enters the backdrop edge. The latest specification change mirrors the backdrop
when sampling beyond the edge which allows for a smooth gradual introduction of
new colors at the edges without overweighting on single lines of color.

## Web APIs

### Blob support in WebRTC data channels

Implements `RTCDataChannel.send(Blob)`, and the `onMessage` event can now
optionally receive data of type `Blob` using the `binaryType` attribute.

In addition to supporting sending strings and ArrayBuffers, you can now choose
to send a `Blob` instead as long as its size is below the SCTP transport
`maxMessageSize` as indicated in the
[WebRTC specification](https://www.w3.org/TR/webrtc/#dom-rtcsctptransport-maxmessagesize).

With the `binaryType` attribute set to `"blob"`, the onMessage event data attribute
will be of type `Blob` instead of the currently supported `ArrayBuffer`.

### Compute Pressure WebDriver extension commands

Exposes WebDriver commands for creating, removing and updating pressure source
samples for *virtual pressure sources*. Such pressure sources that don't depend
on underlying hardware or operating system support and can be used for testing.

### `Intl.DurationFormat`

Provides a method of formatting durations, for example "1 hr 40 min 30 sec" that
supports multiple locales.

### Private Aggregation API: client-side contribution merging

Modifies the Private Aggregation API to merge histogram contributions with the
same bucket and filtering ID before embedding in the aggregatable report's
encrypted payload.

Private Aggregation imposes a limit on the number of contributions that can be
embedded in a single aggregatable report, with any additional contributions
being dropped. By merging together contributions where possible, we can get
additional utility out of the limit. Note that, ignoring the dropping of excess
contributions, merging these sorts of contributions shouldn't have any impact
on the final outputs, for example summary reports.

### `scheduler.yield()`

Provides a method for yielding control to the browser, which can be used to
break up long tasks. Awaiting the promise returned by `scheduler.yield()` causes
the current task to yield, continuing in a new browser task. This can be used to
improve responsiveness issues caused by long tasks. Continuations are
prioritized to mitigate performance problems of existing alternatives.

### Web Authentication API: JSON serialization methods

The WebAuthn `PublicKeyCredential.toJSON()`, `parseCreationOptionsFromJSON()`,
and `parseRequestOptionsFromJSON()` methods let developers serialize a WebAuthn
response into a JSON object or deserialize a WebAuthn request object from its
JSON representation.

### WebGPU extended range (HDR) support

Adds tone mapping parameters to the WebGPU canvas configuration, and adds
options of `standard` (the current behavior of restricting content to the SDR
range of the display) as the default, and `extended` (not imposing this
restriction) as a new behavior. This allows WebGPU content to use the full range
of a display.

## Origin trials in progress

In Chrome 129 you can opt into the following new
[origin trials](https://developer.chrome.com/docs/web-platform/origin-trials).

### FileSystemObserver interface

The [FileSystemObserver](https://developer.chrome.com/blog/file-system-observer)
interface notifies websites of changes to the file
system. Sites observe changes to files and directories in the user's local
device (as specified in
[WICG/file-system-access](https://github.com/WICG/file-system-access))
or in the Bucket File System
(as specified in [fs.spec.whatwg.org](https://fs.spec.whatwg.org/)), and are
notified of basic change info, such as the change type.

[Register for the FileSystemObserver origin trial](https://developer.chrome.com/origintrials#/register_trial/59109745109237761).

## Deprecations and removals

This version of Chrome introduces the deprecations and removals listed below.
Visit [ChromeStatus.com](https://chromestatus.com)
for lists of planned deprecations, current deprecations
and previous removals.

This release of Chrome deprecates one feature.

### Deprecate `0.0.0.0` for Private Network Access

Chrome will block access to IP address `0.0.0.0` in advance of Private Network
Access (PNA) completely rolling out.

Chrome is deprecating direct access to private network endpoints from public
websites as part of the
[PNA specification](https://developer.chrome.com/blog/private-network-access-preflight).
Services listening on localhost (`127.0.0.0/8`) are considered private according
to the specification. Chrome's PNA protection can be bypassed using the IP
address `0.0.0.0` to access services listening on the localhost on macOS and
Linux.

This can also be abused in DNS rebinding attacks targeting a web application
listening on the localhost.

This release of Chrome removes three features.

### Remove the `includeShadowRoots` argument on DOMParser

The `includeShadowRoots` argument was a never-standardized argument to the
`DOMParser.parseFromString()` function, which was there to allow imperative
parsing of HTML content that contains declarative shadow DOM. This was shipped
in Chrome 90 as part of the initial shipment of declarative shadow DOM.

Now that a standardized version of this feature is available with the
`setHTMLUnsafe()` and `parseHTMLUnsafe()` methods, the non-standard
`includeShadowRoots` argument will be removed. Code should be updated as
follows:

Instead of:

    ((new DOMParser()).parseFromString(html,'text/html',{includeShadowRoots: true});

Use:

    Document.parseHTMLUnsafe(html);

### Remove non-standard declarative shadow DOM serialization

The prototype implementation of declarative shadow DOM contained a method called
`getInnerHTML()` used to serialize DOM trees containing shadow roots. That part
of the prototype was not standardized with the rest of declarative shadow dom,
and instead a replacement was designed---`getHTML()`.

Therefore the old `getInnerHTML()` method is now being removed from Chrome, you
should use
[`getHTML()`](https://developer.mozilla.org/docs/Web/API/Element/getHTML) as a
replacement, which will soon be interoperable across browsers.

### Remove `PointerEvent.getCoalescedEvents()` from insecure contexts

The Pointer Events Working Group made `PointerEvent.getCoalescedEvents()`
restricted to secure contexts over four years ago, which removed the API from
insecure contexts. Chrome originally shipped the old behavior and didn't follow
the spec change immediately because of compat concerns.

We are now removing it from insecure contexts because Chrome usage in insecure
contexts turned out to be very low.