Chrome Release Summary

Chrome version: 151, 150, 149, 148, 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0

Chrome 121

Enabled (33) | Origin Trial (1) | Behind a flag (7) | Deprecated (0) | Removed (0)

Enabled by default in 121

This release of Chrome had 33 new features.

Array.fromAsync

Array.fromAsync is the async version of Array.from. It takes async iterables, iterates them, and collects the results into an array. #

This feature was specified in this Spec.

Attribution Reporting Feature Bundle: Reduced Aggregate Delays, Event-Level Report Epsilon Field, Reserved Keys

We plan on landing the following changes to the Attribution Reporting API focused on: * reducing transmission loss by supporting reduced aggregate report delays * additional API configurability by supporting an event-level reporting epsilon field * improved extensibility of the API by failing registrations when encountering reserved keys

CSS Scrollbars: scrollbar-color, scrollbar-width

The CSS Scrollbars spec allows authors to style scrollbars by specifying their colors and thickness. This spec adds the following two properties. The scrollbar-color property provides the capability of changing the color scheme of scrollbars so they fit better into the particular style of a web page. The scrollbar-width property allows the use of narrower scrollbars that may be more suitable for some use cases, or even to hide the scrollbars completely without affecting scrollability. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-colorhttps://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-width

CSS font-palette property animation

The CSS `font-palette` property allows selection of a specific palette used to render a color font. With the newly added support for animating this property, transitioning between palettes is no longer a discrete step, but becomes a smooth transition between two selected palettes. This works everywhere in CSS animations and transitions. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1XMTrKH003KBOes6hxzI-3E7LTwp5YwFC-rnzoFpFrfw/edit?usp=sharing

Samples: https://drafts.csswg.org/css-fonts-4/images/nabla-animated.webp

CSS spelling and grammar features

CSS highlight pseudo-elements for styling text that the UA has flagged as misspelled or grammatically incorrect, and line decorations exposing the UA’s default decorations for spelling and grammar errors. These features allow authors to choose more legible colors for the default spelling and grammar errors, highlight misspelled words with background colors or other decorations, and implement custom spell checking with native appearance. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://bucket.daz.cat/work/igalia/0/1.html

Discard Input Events To Recently Moved Cross-Origin Iframes

If a cross-origin iframe has moved recently within its embedding page, then we will silently discard events targeting the iframe. The rationale is that if the iframe moved recently, it is likely that the user did not intent to click or tap on it. For more information about the risks of mis-clicks: https://www.w3.org/Security/wiki/Clickjacking_Threats#Repositioning_the_trusted_window This intervention shipped in limited form in 2019: it only affected iframes containing script using V2 features of IntersectionObserver (i.e. occlusion/effect detection). This launch expands this behavior to all cross-origin iframes, regardless of whether they are using IntersectionObserver V2. #

Document picture-in-picture: require user gesture for resize APIs

This enables the resizeBy() and resizeTo() Windows methods on document picture-in-picture windows, but with the added restriction of a user gesture requirement to mitigate the abuse potential #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://steimelchrome.github.io/document-pip/click_to_resize.html

EditContext API

The EditContext API simplifies the process of integrating a web app with advanced text input methods such as VK shape-writing, Handwriting panels, speech recognition, IME Compositions etc., improves accessibility and performance, and unlocks new capabilities for web-based editors. #

This feature was specified in this Spec.

Resources

Docs: https://w3c.github.io/edit-contexthttps://github.com/w3c/edit-context/blob/gh-pages/explainer.mdhttps://github.com/w3c/edit-context/blob/gh-pages/dev-design.md

No linked samples

Feature detection for supported clipboard formats

Currently during async clipboard write operation, there is no way for the web authors to detect if a particular mime type is supported by the UAs or not before attempting to actually write the formats to the clipboard. This not only affects developer ergonomics as now web authors have to attempt to write to the clipboard first in order to find out whether write failed due to a particular mime type not supported by the UAs (or sometimes add version checks that are unreliable at best), but also leads to unnecessary cost in terms of CPU cycles, COGS etc in order to produce an expensive web custom format which may not be supported by a particular browser. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://lake-cobalt-way.glitch.me

Fenced Frames: Cross-origin subframe support

Display ads can have subframes that contain the actual creative content. The sub-frame’s domain may differ from the main frame’s domain. DSPs intend to use reserved.top_navigation automatic beacons to record navigation clicks with the current FLEDGE API. However, when clicks occur within sub-frames that are cross origin to the main frame, these automatic beacons will not be sent out. A cross-origin subframe can now opt in to sending automatic beacons by setting a new response header: "Allow-Fenced-Frame-Automatic-Beacons". The cross-origin frame still cannot set automatic beacon data; instead, the main ad frame will set the automatic beacon data, but opt in to having the data be used in cross-origin frames using a new "crossOrigin=true" parameter. When these two criteria are met, the cross-origin subframe will send an automatic beacon when a top-level navigation happens.

This feature was specified in this Spec.

HTMLSelectElement showPicker()

Developers have been asking for a way to programmatically open the option picker of a select element. See https://www.google.com/search?q=programmatically+open+select+site%3Astackoverflow.com This is currently impossible in almost every browser. Providing showPicker() gives developers a supported way to do this. Following the pattern of input.showPicker(). #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://select-show-picker.glitch.me

Improved CSS masking for SVG

This is a follow-on to the improved CSS mask support in chromium 120 (https://chromestatus.com/feature/5839739127332864) and adds new mask support to SVG (multiple masks, as well as mask-mode, mask-composite, mask-position, and mask-repeat). In addition, remote SVG masks (e.g., mask: url(masks.svg#star)) are now supported. Explainer: https://docs.google.com/document/d/1IzQv56NzfV1hA6YPr2j1chtb5qijNxykkYY7JyccZgc/edit?usp=sharing #

This feature was specified in this Spec.

Lazy load scroll margin

Changes the lazy load intersection observer's init dictionary to use a scrollMargin instead of a rootMargin. This allows lazy loading images contained inside CSS scrollers, like carousels, to load as expected when near the viewport instead of the current behavior where these images load when at least one pixel is intersecting the viewport. #

This feature was specified in this Spec.

Resources

Docs: https://gist.github.com/tcaptan-cr/bf0ac25f77cb6b6c58c916e6577d91c3

No linked samples

MediaCapabilities: Query HDR support with decodingInfo()

Extends the Media Capabilities API to allow detection of HDR rendering support via three new VideoConfiguration dictionary fields: hdrMetadataType, colorGamut, transferFunction. Chromium implements its own tone-mapping algorithms so will always return true for HDR10 (smpteSt2086) static metadata. smpteSt2094-40 (HDR10+) and smpteSt2094-10 dynamic metadata are not currently supported, so will return false. We anticipate adding support for dynamic metadata in the future, so this API will allow developers to select the appropriate content for users with support. #

This feature was specified in this Spec.

Multiple Readers and Writers in File System Access API

Currently, only one FileSystemSyncAccessHandle may be open at a time per file, preventing an origin from reading and writing to the same file from multiple tabs easily. Conversely, multiple FileSystemWritableFileStreams can be simultaneously open, letting multiple writers clobber each other. Introducing new locking modes for FileSystemSyncAccessHandle and FileSystemWritableFileStream allows opening either multiple readers/writers or an exclusive writer to a file entry, depending on the application's use case. #

This feature was specified in this Spec.

No-Vary-Search Hint for Prefetch Speculation Rules

Adds a hint to speculation rules that informs the navigation prefetch cache that the URL to be prefetched expects to receive the same No-Vary-Search header in the response. The hint is useful because prefetches that depend on No-Vary-Search to match to navigations do not benefit the user if the navigation happens before prefetch headers return from the server. Using the hint, the web browser will expect, but verify, that the No-Vary-Search hint matches with the No-Vary-Search header. If the No-Vary-Search hint does not match the No-Vary-Search header received then the web browser will send a new request.

This feature was specified in this Spec.

No-Vary-Search support in navigation prefetch cache

Enables prefetch to match even if URL query parameters change. The No-Vary-Search HTTP response header declares that some or all parts of a URL's query can be ignored for cache matching purposes. It can declare that the order of query parameter keys should not cause cache misses, that specific query parameters should not cause cache misses or that only certain known query parameters should cause cache misses. It could apply to multiple caches, but this entry refers to support for prefetch cache. #

This feature was specified in this Spec.

Private Aggregation API: aggregation coordinator selection

Modification to the Private Aggregation API to provide a mechanism for selecting which coordinator to use for payload encryption (from an vendor-specified allowlist). The choice of service is made with an additional option in Shared Storage’s run() and selectURL() calls, and in Protected Audience’s runAdAuction() and joinAdInterestGroup() calls. The broad approach largely aligns with Attribution Reporting’s approach (see https://chromestatus.com/feature/5197591256236032). #

This feature was specified in this Spec.

Protected Audience Ad slot size in real-time bidding signals fetch and update more interest group fields

Ad slot size in real-time bidding signals fetch: Protected Audience ad selection auctions allow buyers to fetch real-time signals from their key-value server. Besides being used for calculating bid prices, these signals can also be used for prioritizing and filtering potential ad candidates. The more ad candidate filtration and prioritization that we can enable, the more performant the auction is (e.g. less browser resource utilization) and the higher the quality of the chosen ad candidates is. This feature extends the signals about the page where the ad will be displayed from just its domain name, to also include the size of the ad slots on the page, which is a very useful signal for filtering out ads that cannot be rendered in that slot size. Allow updating interest group’s userBiddingSignals and executionMode: Protected Audience has always supported updating interest group fields, but for historical reasons did not support updating the interest group field named userBiddingSignals, and for no obvious reason did not support updating executionMode. This change is a small extension to Protected Audience interest group updating to support updating these fields, making the API more useful by being able to update/refresh the fields with more up to date information.

Protected Audiences k-Anonymity Enforcement

The Protected Audience API (formerly known as FLEDGE) is a Privacy Sandbox proposal to serve remarketing and custom audience use cases, designed so third parties cannot track user browsing behavior across sites. The k-anonymity enforcement feature enhances user privacy by limiting ads that can win protected audience auctions to those ads that are k-anonymous. Enforcing the k-anonymity requirement improves user privacy and limits the ability of advertisers to target specific users by requiring each ad be shown to a minimum number of users. Details for the timeline for k-anonymity enforcement is in https://developers.google.com/privacy-sandbox/relevance/protected-audience-api/k-anonymity

This feature was specified in this Spec.

Remote Playback API

This specification defines an API extending the HTMLMediaElement that enables controlling remote playback of media from a web page. In M56, this will work on Android only (desktop will report no devices available) with the desktop backend being added later. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://beaufortfrancois.github.io/sandbox/media/remote-playback.htmlhttps://avayvod.github.io/remote-playback/test.html

Ruby-specific display values

New CSS display property values, "ruby" and "ruby-text", are added. The default display values of <ruby> and <rt> are changed to "ruby" and "ruby-text" respectively, and ruby layout respects these display values. Web authors can use any elements such as <div> to render ruby by setting the new display values. #

This feature was specified in this Spec.

Speculation rules: delivery via Speculation-Rules header

Currently developers can only specify speculation rules using inline script tags. The proposed feature provides an alternative through the "Speculation-Rules" header. Its value must be a URL to a text resource with "application/speculationrules+json" MIME type. The resource's rules will be added to the document's rule set. #

Speculation rules: document-sourced rules

An extension to speculation rules syntax that lets the browser obtain URLs for speculation from link elements in a page. They may include criteria which restrict which of these links can be used. #

This feature was specified in this Spec.

Speculation rules: eagerness field

To make the web user experience more instant, the user agent (UA) could pre-connect to the server, prefetch resources, or prerender them ahead of time. These actions are referred to as preloading actions. Since performing any preloading action may cause side effects (e.g. log the user out) and has an overhead (e.g. extra data/cpu usage), to perform the action the UA should know if the action is safe to perform and also if it is worth performing. Being able to consistently determine which actions are safe for a given target without feedback from the developer is not an easy task. Speculation rules expose the necessary API to let developers specify that. Adding the eagerness field to the speculation rules will let the developers control how eagerly the browser preloads links in order to balance the performance advantage against resource overhead. This field accepts one of "conservative", "moderate" or "eager" strings as the value, and it is applicable to both "prefetch" and "prerender" actions and both "list" or "document" sources. If not explicitly specified, list rules default to "eager" and document rules default to "conservative". #

SpeechSynthesis and SpeechSynthesisVoice interface objects

This is about the interface objects for SpeechSynthesis and SpeechSynthesisVoice, not about the functionality itself which was already supported. These interfaces should be exposed according to spec. Feature detection using window.speechSynthesis was already possible, but this makes feature detection using SpeechSynthesisVoice.prototype possible. Note that SpeechSynthesisEvent, SpeechSynthesisErrorEvent and SpeechSynthesisUtterance interface objects were already exposed. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesishttps://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice

Support in Chrome for the VoiceIsolation getUserMedia constraint

This is about adding support in Chrome for the VoiceIsolation getUserMedia constraint (https://w3c.github.io/mediacapture-extensions/#voiceisolation-constraint). The constraint only takes effect on platforms where there is low-level support for voice-isolation style denoising. Currently this is limited to a selected number of ChromeOS devices, but further platforms will be added.

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/mediacapture-streams/MediaStreamTrack-getSettings.https.htmlhttps://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/mediacapture-streams/MediaStreamTrack-getCapabilities.https.htmlhttps://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/mediacapture-streams/MediaDevices-getSupportedConstraints.https.htmlhttps://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/external/wpt/mediacapture-streams/GUM-non-applicable-constraint.https.html

URLPattern: Inherit left, wildcard right

Behavior changes to patterns which are constructed using a base URL, the constructor string syntax, or both -- but not any pattern which explicitly specifies components separately without a base URL. * Components are not inherited from a base URL if an "earlier" component is explicitly specified. * In the string format, unspecified "later" components are implicitly wildcarded, rather than required to be empty (with the exception of the port, which is always taken to be specified when the hostname is). * Username and password are never implicitly specified or inherited. This makes patterns more expansive than before, in cases where wildcards are likely to be desirable. See https://github.com/whatwg/urlpattern/pull/198. #

This feature was specified in this Spec.

URLPattern: RegExp v flag instead of u

The URL Pattern API allows developers to specify pattern strings. Those are transformed to regular expressions internally. When the API was first implemented, these regular expressions were compiled with the u flag. We're going to update it to the v flag, enabling Unicode sets. #

This feature was specified in this Spec.

VideoEncoderConfig.contentHint

Adding a contentHint field to VideoEncoderConfig Content hint takes values that are already used for MediaStreamTrack: "motion", "text", "detail". This gives web developers a way to communicate to VideoEncoder the expected type video frames they intend to encode. Explainer: https://gist.github.com/Djuffin/c3742404b7c53ada227849c8b2b76b4c #

This feature was specified in this Spec.

Resources

Docs: https://gist.github.com/Djuffin/c3742404b7c53ada227849c8b2b76b4chttps://github.com/w3ctag/design-reviews/issues/912

No linked samples

WebGPU default entry points to shader modules

WebGPU now allows developers to omit entry points to shader modules when creating a pipeline, improving ergonomics. If no default entry point is found, a GPUValidationError will be triggered as usual. #

This feature was specified in this Spec.

WebGPU timestamp queries

WebGPU timestamp queries allow WebGPU applications to measure precisely (down to the nanosecond) how much time their GPU commands take to execute, especially at the beginning and end of passes. Timestamp queries are heavily used to gain insights into the performance and behavior of GPU workloads. While the WebGPU specification makes timestamp queries an optional feature due to timing attack concerns, we believe that timestamp queries quantization provides a good middle ground by reducing the precision of timers with a resolution of 100 microseconds. #

This feature was specified in this Spec.

checkVisibility: contentVisibilityAuto, opacityProperty, and visibilityProperty

This feature adds three more values to the checkVisibility (https://drafts.csswg.org/cssom-view/#dom-element-checkvisibility) dictionary members: * opacityProperty as an alias for checkOpacity * visibilityProperty as an alias for checkVisibilityCSS * contentVisibilityAuto as a property that allows checking whether an element is in a subtree skipped by content-visibility: auto.

This feature was specified in this Spec.

Origin Trials in-progress in 121

This release of Chrome had 1 new origin trials.

fetchLater API

fetchLater() is a JavaScript API to request a deferred fetch. Once called in a document, a deferred request is queued by the browser in the PENDING state, and will be invoked by the earliest of the following conditions: * The document is destroyed. * After a user-specified time. For privacy reason, all pending requests will be flushed upon document entering bfcache no matter how much time is left. * Browser decides it's time to send it. The API returns a FetchLaterResult that contains a boolean field "activated" that may be updated to tell whether the deferred request has been sent out or not. On successful sending, the whole response will be ignored by browser, including body and headers. Nothing at all should be processed or updated, as the page may have already be gone. Note that from the point of view of the API user, the exact send time is unknown. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/WICG/pending-beacon/blob/main/docs/fetch-later-api.mdhttps://docs.google.com/document/d/1U8XSnICPY3j-fjzG35UVm6zjwL6LvX6ETU3T8WrzLyQ/edit#heading=h.ms1oipx914vf

Samples: https://github.com/WICG/pending-beacon/blob/main/docs/fetch-later-api.md#key-scenarios

Flagged features in 121

This release of Chrome had 7 are available behind a flag.

Feature detection for supported clipboard formats

Currently during async clipboard write operation, there is no way for the web authors to detect if a particular mime type is supported by the UAs or not before attempting to actually write the formats to the clipboard. This not only affects developer ergonomics as now web authors have to attempt to write to the clipboard first in order to find out whether write failed due to a particular mime type not supported by the UAs (or sometimes add version checks that are unreliable at best), but also leads to unnecessary cost in terms of CPU cycles, COGS etc in order to produce an expensive web custom format which may not be supported by a particular browser. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://lake-cobalt-way.glitch.me

InputDeviceInfo.getCapabilities() for unavailable devices

Make InputDeviceInfo.getCapabilities() return empty for cameras that are unavailable to the UA because they are opened in exclusive mode by other applications. The only platform affected in practice is Windows, which is the only platform that exhibits the issue. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1gwAF4qMXvHLQH-Fb6MxOgiSxXzK47AwiVPvnvJIccaE/r/0-T1AP5YsdFksujPUY7rJV1Q/edit?tab=t.0

Samples: https://guidou.github.io/enumdemo8.html

Lazy load scroll margin

Changes the lazy load intersection observer's init dictionary to use a scrollMargin instead of a rootMargin. This allows lazy loading images contained inside CSS scrollers, like carousels, to load as expected when near the viewport instead of the current behavior where these images load when at least one pixel is intersecting the viewport. #

This feature was specified in this Spec.

Resources

Docs: https://gist.github.com/tcaptan-cr/bf0ac25f77cb6b6c58c916e6577d91c3

No linked samples

The <geolocation> element

Introduces the <geolocation> element, a declarative, user-activated control for accessing the user's location. It streamlines the user and developer journey by not only handling the permission flow but also directly providing location data to the site, often eliminating the need for a separate JavaScript API call. This addresses the long-standing problem of permission prompts being triggered directly from JavaScript without a strong signal of user intent. By embedding a browser-controlled element in the page, the user's click provides a clear, intentional signal. This enables a much better prompt UX and, crucially, provides a simple recovery path for users who have previously denied the permission. Note: This feature was previously developed and tested in an Origin Trial as the more generic <permission> element. Based on feedback from developers and other browser vendors, it has evolved into the capability-specific <geolocation> element to provide a more tailored and powerful developer experience. Explainer: https://github.com/WICG/PEPC/blob/main/geolocation_explainer.md Instructions: https://github.com/WICG/PEPC/blob/main/HOWTO.md #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://permission.site/pepc

Used color scheme root scrollbars

Makes the browser use the user's preferred color scheme to render the viewport scrollbars if the value of "page’s supported color schemes" is 'normal' or not specified, and the computed value of the color-scheme for the root element is 'normal'. Viewport scrollbars can be considered to be outside the web content. Therefore, the user agents should honor the user's preferred color scheme when rendering viewport scrollbars if page authors have not explicitly specified support for color schemes. #

This feature was specified in this Spec.

align-content CSS property for blocks

`align-content` CSS property works for block containers and table cells. The property worked only for flex containers and grid containers. It supports block containers and table cells, that is to say `display: block`, `display: list-item`, `display: table-cell`, etc. #

This feature was specified in this Spec.

checkVisibility: contentVisibilityAuto, opacityProperty, and visibilityProperty

This feature adds three more values to the checkVisibility (https://drafts.csswg.org/cssom-view/#dom-element-checkvisibility) dictionary members: * opacityProperty as an alias for checkOpacity * visibilityProperty as an alias for checkVisibilityCSS * contentVisibilityAuto as a property that allows checking whether an element is in a subtree skipped by content-visibility: auto.

This feature was specified in this Spec.

Deprecations and Removals

Deprecation policy

To keep the platform healthy, we sometimes remove APIs from the Web Platform which have run their course. There can be many reasons why we would remove an API, such as:

Some of these changes will have an effect on a very small number of sites. To mitigate issues ahead of time, we try to give developers advanced notice so they can make the required changes to keep their sites running.

Chrome currently has a process for deprecations and removals of API's, essentially:

You can find a list of all deprecated features on chromestatus.com using the deprecated filter and removed features by applying the removed filter. We will also try to summarize some of the changes, reasoning, and migration paths in these posts.

Deprecated features in 121

This release of Chrome had 0 features deprecated.

Removed features in 121

This release of Chrome had 0 features removed.