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 122

Enabled (23) | Origin Trial (3) | Behind a flag (7) | Deprecated (0) | Removed (0)

Enabled by default in 122

This release of Chrome had 23 new features.

Allow setting IDP login status from same-site subresources

We now also allow same-site (same eTLD+1) subresources to set a login status (for the origin of the subresource). This is useful for IdPs where the IdP login happens on one subdomain, but the FedCM endpoint is on a different subdomain. To make sure that FedCM works correctly, the login status needs to be set on the FedCM subdomain. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/fedidcg/FedCM/issues/537

No linked samples

Async Clipboard API: Allow empty ClipboardItem during read

When the system clipboard is either empty or has unsupported formats, paste event returns an empty DataTransfer object, but the promise for `navigator.clipboard.read()`API is rejected. This creates interop differences and confusion among web developers as they aren’t sure why read failed. Currently in Chrome, we throw a DataError. The proposal here is to return an empty ClipboardItem when the system clipboard is either empty or there aren’t any supported formats. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/w3c/clipboard-apis/issues/179https://docs.google.com/document/d/1OLVOESy3zecxY_6jMKdKVxeIGS2Q6mDmzc85rUNrRIE/edit?usp=sharing

Samples: https://flash-lateral-nylon.glitch.me

Async Clipboard API: Read unsanitized HTML.

This proposal provides an `unsanitized` option in read() method to get unsanitized HTML format.. Unless sites choose to adopt the new API, reading from the clipboard will be sanitized. Currently, when we read text/html MIME types using the async API, the sanitizer is invoked to strip out contents from the HTML markup due to security concerns, and styles are inlined in the HTML, which leads to a bloated HTML payload and loss of fidelity of HTML content when read by web authors or native apps. Currently, Firefox provides access to unsanitized HTML via DataTransfer APIs, which matches Chromium's behavior, and Safari only allows access to unsanitized HTML if it's being read within the same origin. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/unsanitized-html-demo.html

Async Clipboard API: Read unsanitized HTML.

This proposal provides an `unsanitized` option in read() method to get unsanitized HTML format.. Unless sites choose to adopt the new API, reading from the clipboard will be sanitized. Currently, when we read text/html MIME types using the async API, the sanitizer is invoked to strip out contents from the HTML markup due to security concerns, and styles are inlined in the HTML, which leads to a bloated HTML payload and loss of fidelity of HTML content when read by web authors or native apps. Currently, Firefox provides access to unsanitized HTML via DataTransfer APIs, which matches Chromium's behavior, and Safari only allows access to unsanitized HTML if it's being read within the same origin. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/explainer.md

Samples: https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/unsanitized-html-demo.html

Async Clipboard API: Write well-formed HTML document.

Using DataTransfer object’s setData and async clipboard write method, there are interop differences in how the HTML content is sanitized and written to the clipboard. The Async clipboard writer API uses sanitizers to strip out content such as `<head>`, `<meta>`, `<style>`, `<script>` tags from the HTML and inline styles into the markup. In this proposal, writing to the clipboard for `text/html` MIME type using the navigator.clipboard.write() API will write a higher fidelity sanitized, well-formed HTML markup instead of a more strictly sanitized HTML fragment. It will also preserve the tags such as `<meta>`, `<style>`, `<head>` etc that were stripped out by the fragment parser. Roundtripping of HTML content using the async clipboard API within the web doesn’t change as the async clipboard read() method still produces a sanitized HTML fragment. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1rTEg2I-hMPXGiLrEMqKJz2Ycu6GRjlM3uvakOe84m8Q/edit?usp=sharing

Samples: https://github.com/w3c/editing/blob/gh-pages/docs/clipboard-unsanitized/unsanitized-html-demo.html

CSS @container with unsupported Features never match

@container selectors that contain unsupported queries will never select any containers, meaning they will never match. That means this query will never match any container even if there is a size container that will match the width query that would otherwise make the selector match in cases like this: @container (width > 0px) or (unknown) {} This is a recent change to the specification to avoid forward-compatibility issues. #

This feature was specified in this Spec.

CSS Pseudo Element ::backdrop inheriting from Originating Element

The ::backdrop pseudo element used to inherit from initial values. That meant ::backdrop could not use custom property values unless specified directly on the ::backdrop rule. The specification has now changed so that ::backdrop inherits from the originating element, and with that the implementation. #

This feature was specified in this Spec.

CSS supports() condition for @import

It allows to import stylesheets and layers conditioned on supports(). If the support() doesn't match, the import will not be fetched.

This feature was specified in this Spec.

Do not delete File kind objects in dataTransfer.clearData()

As per the spec https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-cleardata, clearData() does not affect the File objects. It only deletes the `text` kind objects. More info: https://docs.google.com/document/d/1Y8WW9kxQQ6Q0YCo3FQkLQBIJWb2c9fZBBOOT7YUkU8o/edit?usp=sharing #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1Y8WW9kxQQ6Q0YCo3FQkLQBIJWb2c9fZBBOOT7YUkU8o/edit?usp=sharinghttps://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-cleardata

No linked samples

Enable clipboard access via Async Clipboard API in event handlers

This change removes the requirement for the "clipboard-read" permission when using the Async Clipboard API from within a "paste" event handler. It also applies to writing to the clipboard inside a "copy" or "cut" event, although writing plain text to the clipboard was already permitted on ANY user gesture, so this is a less notable change. Browser vendors differ in the details of how they permit access to the Async Clipboard API, but this change brings Chromium into alignment with other vendors and the specification [1] which states that read access is to be permitted when > the current script is running as a result of user interaction with a "Paste" element created by the user agent or operating system. [1] https://www.w3.org/TR/clipboard-apis/

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://jsfiddle.net/evanstade/zbp98vj5/8

FedCM: disconnect

Allows disconnecting a federated login account via the relying party website. With the disconnect API, a relying party may notify the identity provider that a previously used account is now disconnected, and hence using that account again via federated login would require treating it as a new account. #

This feature was specified in this Spec.

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

Interoperable mousedown event cancellation in iframe

Make mouse event targets agnostic to mousedown event cancellation when the pointer is dragged out of an iframe. When the mouse is dragged out of an iframe, all browsers (including Chrome) send mousemove and mouseup events to the iframe. However, if the mousedown event is cancelled, Chrome today maintains an old WebKit exception that mousemove and mouseup events are sent to the outer frame. WebKit removed this exception last year, and Mozilla never showed this behavior in recent years. This feature will remove the Chrome-only exception for this special case. #

Resources

No linked docs

Samples: https://mustaqahmed.github.io/web/interop/cancel-mousedown-in-iframe-top.htmlhttps://codepen.io/mustaqahmed/full/yLjBraJ

Iterator helpers

Iterator helpers are new methods on iterator prototype to allow general usage and consumption of iterators. #

This feature was specified in this Spec.

Navigational prefetch: follow redirects

Today, Chromium does not follow redirects when prefetching for navigation (most notably from speculation rules). With this change, it will follow redirects, even cross-origin and cross-site redirects. This is consistent with following redirects during other kinds of fetches, though additional privacy constraints apply to cross-site navigational prefetches.

This feature was specified in this Spec.

Protected Audience: Downsampled forDebugOnly & Increase number of component ads

Downsampled forDebugOnly: The forDebuggingOnly.reportAdAuctionWin() and forDebuggingOnly.reportAdAuctionLoss() (fDO) APIs were added to the Protected Audience (PA) API to allow debugging from within bidding and scoring scripts in PA auctions.  We originally intended on removing these APIs at third-party cookie deprecation (3PCD) time, but received feedback that they were essential for   doing root cause analysis in escalation situations (i.e. critical crash).  We now plan to heavily downsample the API at 3PCD time as follows: they will only send a report with a 1/1000 probability.  Furthermore, if a report is sent, the browser will not send another for 3 years (“lockout”), and if a report is not sent, future calls to the fDO API from the calling origin will be ignored for 2 weeks 90% of the time and 1 year 10% of the time (“cooldown”).  To avoid biasing towards new browser installs (which aren’t in lockout or cooldown), we may place new browser installs initially in a shorter lockout period. For now, until 3PCD, we’ll expose whether a fDO caller is in the “lockout” or “cooldown” periods. Increase number of component ads: Today, PA allows selection of ads containing 20 component ads (aka product level ads).  We plan to increase this number from 20 to 40 as we received feedback that ads with higher numbers of components were critical (e.g. ones that rotate through 3 sets of 12).

This feature was specified in this Spec.

RTCRtpSender setParameters() extensions for requesting the generation of a key frame

Adds an optional second parameter to WebRTC's RTCRtpSender.setParameters call which can be used to ask the associated encoder to generate a key frame. #

This feature was specified in this Spec.

Resources

Docs: https://fippo.github.io/webrtc-explainers/rtcrtpsender-setparameters

No linked samples

Set IndexedDB transaction durability to `relaxed` by default

IndexedDB offers two durability modes for readwrite transactions: `relaxed` and `strict`. This may be specified via the optional `options` struct when creating a transaction. See https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/transaction for more details. If not specified, the current default in Chromium is `strict`. Due to performance considerations, we plan to change the default to `relaxed`, which also aligns Chromium with FireFox and Safari. Blog post: https://developer.chrome.com/blog/indexeddb-durability-mode-now-defaults-to-relaxed #

This feature was specified in this Spec.

Set methods

Set methods are new methods like union and intersection that are added to JavaScript's built-in `Set` class. #

This feature was specified in this Spec.

Speculation rules: infer "source" if possible

This allows speculation rules to be written more concisely if the type of the rule is not ambiguous (i.e., most cases). For example: {"source":"list","urls":["https://example.com/"]} can be written {"urls":["https://example.com/"]} and {"source":"document","where":{"selector_matches":"#nav > a"}} can be written {"where":{"selector_matches":"#nav > a"}} Existing rules (with explicit "source") continue to work with no change. See https://github.com/WICG/nav-speculation/pull/295. #

This feature was specified in this Spec.

Storage Buckets API

Storage Buckets gives sites the ability to organize on-device data into separate "buckets", allowing user agents to evict the grouped data independently of that which is in other buckets, and enabling sites to ergonomically manage semantically related data. Each storage bucket can contain data associated with established storage APIs such as IndexedDB and CacheStorage. #

This feature was specified in this Spec.

URLPattern: hasRegExpGroups

Allows easy inspection of whether a URLPattern uses one or more ECMAScript regular expression groups, and therefore may not be suitable for use in cases where an ECMAScript engine is not available (such as some upcoming planned APIs). Strictly speaking this reflects back something developers could know anyway from inspecting the pattern, but having easy access to the UA's implementation of this check makes that more straightforward. #

This feature was specified in this Spec.

WebGL drawingBufferStorage

WebGL allows rendering into textures and renderbuffers of many different pixel formats (e.g, 8-bit, floating-point, sRGB-encoded, etc). The drawing buffer of WebGL (the buffer that is passed to the compositor) is 8-bit by default. This feature allows WebGL to configure the pixel format of this drawing buffer. This feature enables WebGL developers to: * avoiding an an extra copy convert their rendering to the default drawing buffer pixel format * draw content that has a more than 8 bits of precision The latter feature unlocks several additional applications * very wide color gamut content without loss of precision * medical applications which require >8 bits of precision * high dynamic range applications (when available)

This feature was specified in this Spec.

Origin Trials in-progress in 122

This release of Chrome had 3 new origin trials.

Captured Surface Control

A Web API that allows Web applications to: 1. Forward wheel events to a captured tab. 2. Read and change the zoom level of a captured tab. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/10UojDvTJ6ojBEOP7cgBIIaE7WZEfes_Qv1eN3A2A0nM/edit?usp=sharing

Samples: https://captured-surface-control.glitch.me

Deprecate unload event

A Permission-Policy for creating unload event listeners will be added. Initially the default policy will be to allow but Chrome will gradually migrate the default policy to deny creating unload event listeners until it is fully opt-in. The eventual goal is to remove support for unload event. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/fergald/docs/blob/master/explainers/permissions-policy-deprecate-unload.md

No linked samples

Web app scope extensions

Adds a "scope_extensions" web app manifest field that enables web apps to extend their scope to other origins. Example usage: { "name": "Example", "display": "standalone", "start_url": "/index.html", "scope_extensions": [ {"type" : "origin", "origin" : "https://example.com"} ] } This allows sites that control multiple subdomains and top level domains to be presented as a single web app. Requires listed origins to confirm association with the web app using a .well-known/web-app-origin-association configuration file. { "https://sample-app.com/": { "scope": "/" } } #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1-idhx8heajbPYl3cdXFVCjpIuf96cRa_DrRk6147ELI/edit?usp=sharing

Samples: https://main-pwa-origin-2.glitch.me

Flagged features in 122

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

Allow for WebAuthn credential creation in a cross-origin iframe

This feature allows web developers to create WebAuthn[0] credentials (that is, "publickey" credentials, aka passkeys) in cross-origin iframes. Two conditions are required for this new ability: 1. The iframe has a publickey-credentials-create-feature permission policy. 2. The iframe has transient user activation. This will allow developers to create passkeys in embedded scenarios, such as after an identity step-up flow where the Relying Party is providing a federated identity experience. [0]: https://w3c.github.io/webauthn/ #

This feature was specified in this Spec.

CSS custom state new :state() syntax

This is the new syntax for the CSS custom state feature for custom elements. The old syntax, :--foo, is being deprecated and removed. This new syntax, :state(foo), is shipping in WebKit. Deprecation for old syntax: https://groups.google.com/a/chromium.org/g/blink-dev/c/JvpHoUfhJYE Spec for new syntax: https://github.com/whatwg/html/pull/8467

This feature was specified in this Spec.

Captured Surface Control

A Web API that allows Web applications to: 1. Forward wheel events to a captured tab. 2. Read and change the zoom level of a captured tab. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/10UojDvTJ6ojBEOP7cgBIIaE7WZEfes_Qv1eN3A2A0nM/edit?usp=sharing

Samples: https://captured-surface-control.glitch.me

FedCM multi IDP in single get() call and remove add accounts in passive mode

Allows FedCM to show multiple identity providers in the same dialog. This provides developers with a convenient way to present all supported identity providers to users. We are planning to first tackle the simple case of having all providers in the same get() call. We are also removing support for ‘add another account’ in FedCM passive mode. This feature allows showing a ‘use another account’ button alongside other IdP accounts in the chooser. The feature is currently unused, and UX conversations have led us to believe that supporting this leads to a more complicated flow without much benefit. This feature will still work in FedCM active mode. #

This feature was specified in this Spec.

Media Previews opt-out

Allow coordination between sites using Page Embedded Permissions Controls and concurrent experiments with the camera and microphone permissions UI in Chrome. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1ZnX2JROjr9l4y2_OPMpfVlLOo-A5cQzD4mWarj9kXQ0/edit

No linked samples

RegExp modifiers

RegExp modifiers adds the ability to locally modify the 'i', 'm', and 's' flags inside a pattern. To enable a flag for a subexpression, use `(?X:subexpr)` where X is one of 'i', 'm', or 's'. To disable a flag for a subexpression, use `(-X:subexpr)`. For example, for the case-insensitivity 'i' flag: ``` const re1 = /^[a-z](?-i:[a-z])$/i; re1.test("ab"); // true re1.test("Ab"); // true re1.test("aB"); // false const re2 = /^(?i:[a-z])[a-z]$/; re2.test("ab"); // true re2.test("Ab"); // true re2.test("aB"); // false ```

This feature was specified in this Spec.

Sec-CH-UA-Form-Factors client hint

This hint indicates one or more of the "form-factor" of the user-agent / device, so that the site can tailor its response. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/djmitche/web-explainers/blob/main/sec-ch-ua-form-factor.md

No linked samples

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 122

This release of Chrome had 0 features deprecated.

Removed features in 122

This release of Chrome had 0 features removed.